8.4 KiB
8.4 KiB
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, helperplayMusic(4436f7f) - MortScene substitueix
doMort()(d86cb21) - BannerScene substitueix
doBanner()per piràmides 2–5 (2cb38ff) - MenuScene substitueix
doMenu()+ fixJI_Updateal loop (8720e77) - IntroNewLogoScene substitueix
doIntroNewLogo()(ad38fc0) - SlidesScene amb wipe suau per easing (
605c273) - CreditsScene amb scroll vertical + parallax condicional (
829d743) - SecretaScene amb swap
tomba1→tomba2i 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::Sceneamb fasesFadingIn/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+ namespaceResourceHelper+ eina CLI standalonepack_resources(targetmake pack) - Cablejat a tots els callsites de recursos via
ResourceHelper::loadFile - Scaffold
.jrfllegat eliminat completament dejfile.cpp - Releases natius depenen del pack i l'usen obligatòriament (sense fallback); WASM i Debug mantenen fallback
- Normalització de
resource::cacheper aAudio(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.cppexclò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.yamlseparat deconfig.yaml(fe41919)
Canviat
Runtime: sense fibers, sense threads, sense mutex
- Fase 1 — jail i game a C++ idiomàtic: RAII,
info::ctxcom a singletoninline, cheats arreglats (scancode→ASCII) (7f85b50) - Fase 2 — fades de
jd8a màquina d'estats + helperwait_frame_or_skipa les cinemàtiques (80fa7b4) - Fase 3 —
jail_audioheader-only amb streaming real (stb_vorbis_open_memory+JA_PumpMusic), senseSDL_AddTimer(801a8ad) - Fase 4+5 — fibers cooperatius substitueixen el game thread, sense mutex ni
cv(1507a1c) - Step B.1 — fades de
ModuleGametick-based ambscenes::PaletteFade(4e18f83) - Step B.2 — eliminació total del fiber:
Directorposseeix l'escena (current_scene_,game_state_),JD8_Flipsense yield,fiber.{hpp,cpp}esborrats (96a3cf9) - Step 10 —
ModuleSequenceeliminat; dispatch viaSceneRegistry::tryCreate()igame_state_ == 0/1directe des delDirector - 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 classlocal (e7aa246) - Fase 2 — elimina
malloc/freeajdraw8i paletes d'escenes (53e93ef) - Fase 3 —
Text::bitmap_astd::vector<Uint8>(2a8fbbb) - Fase 4 — llista enllaçada de Momia a
std::vector<std::unique_ptr>(5e57034) - Fase 5 — singletons a
std::unique_ptr(eliminanew/deletemanual) (c6e37af) - Fase 6 — Rule of 5 a
MapaiModuleGame(no-copiables, no-movibles) (f7875ba) file_getfilebuffer→file_readfileretornantstd::vector<char>— elimina 3 leaks silenciosos (paleta + música gameplay + música cinemàtica) (b3ff620)JA_Music_tRAII ambvector<Uint8>/string, elimina overload i camps morts (f9346ad)JA_Sound_tRAII ambunique_ptr + SDLFreeDeleter, eliminaJA_NewSound(550e3e0)
Build i tooling
- Unificats
.clang-formati.clang-tidy, amb exclusió deexternal/ispv/via dummies (7409c79) cppcheckintegrat amb suppress list (27f8b0a,2e1a82f)make/cmakeestandarditzats 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
0x050505a0x000000(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ó F1–F10 (zoom, fullscreen, shaders, aspect ratio 4:3, supersampling, filtres, render info) (
abb2307) - VSync i integer scaling configurables (
22ee953) renderInfoamb 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
GlobalInputsque intercepta tecles de funció abans que arriben al joc (699989e) - Suport per a gamepad (
a328681) - Redefinició de tecles des del menú (
f8b60cb) Mouseque 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:
Directoral 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 scriptsmake 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.mdamb instruccions d'arquitectura per a l'assistent (3aa6078)README.mdamb 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
renderInfono 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.txtes copiava al release però no es carregava: araGamepad::init()cridaSDL_AddGamepadMappingsFromFileper estendre la base de dades de mandos de SDL