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

151 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/](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](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<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_getfilebuffer``file_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
---
[1.2]: https://gitea/aee/compare/486f00b...HEAD
[1.1]: https://gitea/aee/compare/9e0ab87...486f00b