Files
aee/CHANGELOG.md
2026-04-18 17:57:05 +02:00

8.4 KiB
Raw Blame History

Changelog

Tots els canvis de la reconstrucció moderna (C++/SDL3) d'Aventures en Egipte.

1.2 — 2026-04-18

Versió de modernització profunda: desapareix el model threads estil emulador i tot el runtime passa a un sol fil tick-based compatible amb emscripten. Zero regressions de gameplay.

Afegit

Arquitectura: capa scenes:: tick-based

  • Infraestructura scenes:: (source/scenes/): Scene, SceneRegistry, Timeline, SpriteMover, FrameAnimator, PaletteFade, SurfaceHandle, helper playMusic (4436f7f)
  • MortScene substitueix doMort() (d86cb21)
  • BannerScene substitueix doBanner() per piràmides 25 (2cb38ff)
  • MenuScene substitueix doMenu() + fix JI_Update al loop (8720e77)
  • IntroNewLogoScene substitueix doIntroNewLogo() (ad38fc0)
  • SlidesScene amb wipe suau per easing (605c273)
  • CreditsScene amb scroll vertical + parallax condicional (829d743)
  • SecretaScene amb swap tomba1→tomba2 i red pulse animat (6063b1c)
  • IntroScene amb revelat JAILGAMES lletra a lletra + cicle de paleta (e18b732)
  • IntroSpritesScene com a sub-escena amb 3 variants aleatòries (d343e71)
  • ModuleGame migrat a scenes::Scene amb fases FadingIn/FadingOut (4e18f83)
  • Pla de migració documentat a docs/scenes-migration-plan.md (6125277)

Resource pack

  • Sistema d'empaquetat d'assets resources.pack (format AEE1, XOR-xifrat) estil coffee_crisis (b2d5f5a, 4244bca)
  • Classe ResourcePack + namespace ResourceHelper + eina CLI standalone pack_resources (target make pack)
  • Cablejat a tots els callsites de recursos via ResourceHelper::loadFile
  • Scaffold .jrf llegat eliminat completament de jfile.cpp
  • Releases natius depenen del pack i l'usen obligatòriament (sense fallback); WASM i Debug mantenen fallback
  • Normalització de resource::cache per a Audio (94aa69c)

Build WebAssembly

  • Build WASM via Docker (emscripten/emsdk:latest) amb desplegament a maverick (make wasm)
  • SDL3 compilat des de font via FetchContent; shaders omesos; sdl3gpu_shader.cpp exclòs
  • Events de canvas d'emscripten (1c11a30)
  • Fix de mandos en emscripten Android (d3bdd9b)
  • Defaults específics d'emscripten (7f26b8d)
  • Internal resolution configurable (e8b0b12, 16a3f5b)

Menú i UI

  • Menú de sistema amb versió i opció de tancar/reiniciar (e0f9b60)
  • Animació de tancar el menú (5956d87)
  • Items ocultables condicionalment en funció d'altres items (a3fc111)
  • Tots els valors d'escala que exposa SDL3 (52431ad)
  • debug.yaml separat de config.yaml (fe41919)

Canviat

Runtime: sense fibers, sense threads, sense mutex

  • Fase 1 — jail i game a C++ idiomàtic: RAII, info::ctx com a singleton inline, cheats arreglats (scancode→ASCII) (7f85b50)
  • Fase 2 — fades de jd8 a màquina d'estats + helper wait_frame_or_skip a les cinemàtiques (80fa7b4)
  • Fase 3jail_audio header-only amb streaming real (stb_vorbis_open_memory + JA_PumpMusic), sense SDL_AddTimer (801a8ad)
  • Fase 4+5 — fibers cooperatius substitueixen el game thread, sense mutex ni cv (1507a1c)
  • Step B.1 — fades de ModuleGame tick-based amb scenes::PaletteFade (4e18f83)
  • Step B.2eliminació total del fiber: Director posseeix l'escena (current_scene_, game_state_), JD8_Flip sense yield, fiber.{hpp,cpp} esborrats (96a3cf9)
  • Step 10ModuleSequence eliminat; dispatch via SceneRegistry::tryCreate() i game_state_ == 0/1 directe des del Director
  • Main loop via SDL3 Callback API (SDL_MAIN_USE_CALLBACKS): SDL_AppInit/Iterate/Event/Quit, compatible amb emscripten

RAII i neteja de memòria

  • Fase 1 — cleanup mecànic: NULL→nullptr, typedef→using, explicit, enum class local (e7aa246)
  • Fase 2 — elimina malloc/free a jdraw8 i paletes d'escenes (53e93ef)
  • Fase 3Text::bitmap_ a std::vector<Uint8> (2a8fbbb)
  • Fase 4 — llista enllaçada de Momia a std::vector<std::unique_ptr> (5e57034)
  • Fase 5 — singletons a std::unique_ptr (elimina new/delete manual) (c6e37af)
  • Fase 6 — Rule of 5 a Mapa i ModuleGame (no-copiables, no-movibles) (f7875ba)
  • file_getfilebufferfile_readfile retornant std::vector<char> — elimina 3 leaks silenciosos (paleta + música gameplay + música cinemàtica) (b3ff620)
  • JA_Music_t RAII amb vector<Uint8>/string, elimina overload i camps morts (f9346ad)
  • JA_Sound_t RAII amb unique_ptr + SDLFreeDeleter, elimina JA_NewSound (550e3e0)

Build i tooling

  • Unificats .clang-format i .clang-tidy, amb exclusió de external/ i spv/ via dummies (7409c79)
  • cppcheck integrat amb suppress list (27f8b0a, 2e1a82f)
  • make/cmake estandarditzats amb la resta de projectes JailGames (9d86137)
  • Fitxers de música renombrats a noms temàtics (417699d)
  • Carpeta data/ reordenada (083a57d)

Arreglat

  • Shaders ON/OFF no afectaven a CRT-Pi (a36662a)
  • Logo nou de la intro tornava a descentrar-se (52369be, 5cda8fc)
  • Color de fons dels sliders de 0x050505 a 0x000000 (b1f9e57)
  • Diversos detalls menors (6394e9a, 0cd09f6)

1.1 — 2026-04-05

Versió que fa coincidir la numeració amb la del joc original del 2000.

Afegit

Presentació i renderitzat

  • Backend SDL3GPU amb shaders GLSL compilats a SPIR-V (2c7b709, 2a774f7)
  • Presets de shaders PostFX (CRT, NTSC, CURVED, SCANLINES, SUBTLE, CRT LIVE) i CRT-Pi (DEFAULT, CURVED, SHARP, MINIMAL) amb cicle i persistència (eb3f449, d4fc7c0)
  • Control complet de finestra i imatge via tecles de funció F1F10 (zoom, fullscreen, shaders, aspect ratio 4:3, supersampling, filtres, render info) (abb2307)
  • VSync i integer scaling configurables (22ee953)
  • renderInfo amb animacions i posicions (off → dalt → baix); correcció del jitter (4238ae1, c0553c6)
  • Suport de framerates fins a 250 FPS al Director (e7202c9)

Overlay i UI

  • Capa d'overlay que pinta directament sobre el buffer ARGB: notificacions amb slide-in, informació de render i text amb outline (fe8e5d6, b707bdd, 6a58f75)
  • Renderitzador de fonts bitmap (.fnt + .gif) amb suport UTF-8 i accents
  • Primer menú in-game amb opcions d'àudio, vídeo i controls (dbecd1e, 6d42f84)
  • Animacions al menú (5ac570d)
  • Confirmació de sortida amb doble ESC (a4ee304, 00f8d6d)
  • Pausa funcional (91f88de)
  • Fitxer de locales amb textos centralitzats (788a883)
  • Crèdits dels ports a l'overlay (6a58f75)

Input

  • Capa GlobalInputs que intercepta tecles de funció abans que arriben al joc (699989e)
  • Suport per a gamepad (a328681)
  • Redefinició de tecles des del menú (f8b60cb)
  • Mouse que amaga el cursor automàticament després de 3 segons d'inactivitat (a4ee304)
  • Mètodes per ciclar presets i opcions amb ESC dins del joc sense tancar l'aplicació (be4b624)

Arquitectura

  • Model de threads estil emulador: Director al fil principal a 60 FPS independent del fil del joc, amb doble buffer (6342442)

Persistència i configuració

  • Sistema de configuració YAML amb fkYAML (6a09d72)
  • Fitxers a ~/.config/jailgames/aee/: config.yaml, postfx.yaml, crtpi.yaml
  • Ajustats els valors per defecte (0784cb1)

Release i empaquetat

  • Carpeta release/ amb scripts make release (c0553c6, 75b6b6f)
  • Accés a la carpeta data/ des del binari de release (21bb22b)
  • Icones de l'aplicació (df18a81)
  • Logo alternatiu opcional (ec0f233)

Documentació

  • CLAUDE.md amb instruccions d'arquitectura per a l'assistent (3aa6078)
  • README.md amb descripció, captures i controls (8fc61de)

Canviat

  • Netejada iterativa del codi (08ba88e, baee62b)
  • Versió marcada com a 1.1 per a coincidir amb l'original (486f00b)

Arreglat

  • renderInfo no guardava el preset actual (d4fc7c0)
  • Eixida neta quan la pausa estava activa (00f8d6d)
  • Eliminats warnings del codi original tocant el mínim possible (d598d4f)
  • Eliminats warnings addicionals (pragmas clang+gcc) (9f37518)
  • El fitxer gamecontrollerdb.txt es copiava al release però no es carregava: ara Gamepad::init() crida SDL_AddGamepadMappingsFromFile per estendre la base de dades de mandos de SDL