diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b8b9d5..658338d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,88 @@ # Changelog -Tots els canvis de la reconstrucció moderna (C++/SDL3) d'**Aventures en Egipte**, des de l'inici del port fins a la v1.1. +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/](source/scenes/)): `Scene`, `SceneRegistry`, `Timeline`, `SpriteMover`, `FrameAnimator`, `PaletteFade`, `SurfaceHandle`, helper `playMusic` (`4436f7f`) +- **MortScene** substitueix `doMort()` (`d86cb21`) +- **BannerScene** substitueix `doBanner()` per piràmides 2–5 (`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](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 3** — `jail_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.2** — **eliminació total del fiber**: `Director` posseeix l'escena (`current_scene_`, `game_state_`), `JD8_Flip` sense yield, `fiber.{hpp,cpp}` esborrats (`96a3cf9`) +- **Step 10** — `ModuleSequence` 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 3** — `Text::bitmap_` a `std::vector` (`2a8fbbb`) +- **Fase 4** — llista enllaçada de Momia a `std::vector` (`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_getfilebuffer` → `file_readfile` retornant `std::vector` — elimina 3 leaks silenciosos (paleta + música gameplay + música cinemàtica) (`b3ff620`) +- `JA_Music_t` RAII amb `vector`/`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 @@ -64,4 +146,5 @@ Versió que fa coincidir la numeració amb la del joc original del 2000. --- -[1.1]: https://gitea/aee/compare/9e0ab87...HEAD +[1.2]: https://gitea/aee/compare/486f00b...HEAD +[1.1]: https://gitea/aee/compare/9e0ab87...486f00b