#include "scenes/banner_scene.hpp" #include #include "core/jail/jail_audio.hpp" #include "core/jail/jdraw8.hpp" #include "core/jail/jinput.hpp" #include "game/info.hpp" #include "scenes/scene_utils.hpp" namespace scenes { void BannerScene::onEnter() { playMusic("music/banner.ogg"); gfx_ = SurfaceHandle("gfx/ffase.gif"); JD8_ClearScreen(0); // Títols superior i inferior del banner (compartits per tots els nivells) JD8_Blit(81, 24, gfx_, 81, 155, 168, 21); JD8_Blit(39, 150, gfx_, 39, 175, 248, 20); // Número de piràmide: les 4 variants del vell `doBanner` es reduïxen // a coordenades (sx,sy) calculades a partir de l'índex 0..3. const int idx = info::ctx.num_piramide - 2; // 2..5 → 0..3 if (idx >= 0 && idx <= 3) { const int sx = (idx % 2) * 160; const int sy = (idx / 2) * 75; JD8_Blit(82, 60, gfx_, sx, sy, 160, 75); } // PaletteFade copia internament amb memcpy; alliberem la paleta temporal. JD8_Palette pal = JD8_LoadPalette("gfx/ffase.gif"); fade_.startFadeTo(pal); std::free(pal); phase_ = Phase::FadingIn; remaining_ms_ = 5000; } void BannerScene::tick(int delta_ms) { switch (phase_) { case Phase::FadingIn: fade_.tick(delta_ms); if (fade_.done()) phase_ = Phase::Showing; break; case Phase::Showing: if (JI_AnyKey()) { remaining_ms_ = 0; } else { remaining_ms_ -= delta_ms; } if (remaining_ms_ <= 0) { JA_FadeOutMusic(250); fade_.startFadeOut(); phase_ = Phase::FadingOut; } break; case Phase::FadingOut: fade_.tick(delta_ms); if (fade_.done()) phase_ = Phase::Done; break; case Phase::Done: break; } } } // namespace scenes