From a43c3fc5d15ebeabce827956e6bdbc916449f50f Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Tue, 19 May 2026 21:04:10 +0200 Subject: [PATCH] afegeix CHANGELOG.md per a release v2.4.0 --- CHANGELOG.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0a663d6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,66 @@ +# Changelog + +## v2.4.0 + +### Novetats principals + +- **Migració a temps real (time-based)**. Tot el joc ja no depèn d'una cadència fixa de 60 frames per segon: els moviments, les animacions, les fades, els temporitzadors i els comptadors es calculen a partir del temps real transcorregut entre frames (`dt_s`). Això corregeix l'acceleració del jugador i les animacions en monitors de 144 Hz, i prepara el joc per a qualsevol freqüència de refresc. El refactor s'ha fet entitat per entitat (Bullet, Item, Player, Balloon) i, finalment, al motor principal `Game`. +- **Demo multi-set**. El sistema de demo s'ha portat al patró time-based de Coffee Crisis Arcade Edition: 3 fitxers de demo distints (`demo1.bin`, `demo2.bin`, `demo3.bin`) es trien aleatòriament en cada execució, l'índex es calcula a partir del temps acumulat i el playback és immune a salts de frames. En saltar-la amb una tecla es torna correctament al títol amb el menú visible. +- **Modes de presentació del canvas**. Nou cicle de presentació de la imatge a la finestra: `integer_scale` (escalat enter), `letterbox` (manté l'aspect ratio amb barres negres), `stretched` (omple la finestra deformant) i `overscan` (omple la finestra retallant). El valor antic `integer_scale` del config es migra automàticament. + +### Hotkeys (notificacions visibles a la part superior del canvas) + +| Tecla | Acció | +|------:|-------| +| F1 / F2 | Reduir / augmentar el zoom de la finestra | +| F3 | Alternar pantalla completa | +| F4 | Activar/desactivar post-procesat (shaders) | +| F5 | Alternar entre shader PostFX i CrtPi | +| F6 | Següent preset del shader actiu | +| F7 | Activar/desactivar V-Sync | +| F8 | Cicla el mode de presentació (integer_scale → letterbox → stretched → overscan) | +| F10 | Mostrar/amagar comptador de FPS (cantonada superior dreta) | +| F11 | Mostrar nom de l'app + versió + hash de git | +| F12 | Pausa | +| ESC | Eixir (doble pulsació per confirmar) | +| BACKSPACE | Cancel·lar a menús | + +Les notificacions tenen ara una paleta semàntica (informació, toggle, confirmació, èxit, perill) i un color més saturat (a mig camí entre pastel i color pur). + +### Millores + +- **Cap tecla de funció ni ESC fa "saltar" cap secció**. Logo, intro, instruccions, títol i demo només es passen amb tecles humanes (Enter, disparar, moviment, botons de gamepad) — les F1–F12 i ESC es reserven íntegrament per als hotkeys globals. +- **Notificacions en mode overscan**. Quan el mode `overscan` retalla la franja superior del canvas segons l'aspect ratio de la finestra, les notificacions i el comptador de FPS es desplacen automàticament a la primera fila visible. +- **Versió única de l'aplicació**. La cadena de versió ja només viu a `source/utils/defines.hpp`; CMake l'extreu via regex per al projecte i el Makefile l'usa per als noms dels release. F11 mostra `Coffee Crisis v2.4.0 ()`. +- **Comptador de FPS** dibuixat a la part superior dreta en verd, recalcat cada segon de temps real. +- **Confirmació d'eixida (ESC × 2)** amb finestra visual de confirmació en roig. +- **Pausa amb compte enrere configurable** (`gameplay.pause_countdown` a `config.yaml`). +- **Zoom màxim de la finestra detectat automàticament** segons la resolució del display. +- **Paquet de recursos més robust**: `resources.pack` localitzat via `SDL_GetBasePath` amb fallback al filesystem. +- **Build estandarditzada**: llista explícita de fonts en lloc de `GLOB_RECURSE`, `-Wextra -Wpedantic` activats i warnings netejats. +- **`pre-commit` hooks** per `clang-format`, `clang-tidy` i `cppcheck`. + +### Correccions de bugs + +- Demo congelada en obrir-se per culpa d'un doble `DeltaTime::tick()` al títol (Game rebia `dt ≈ 0`). +- Salt visual al fons diagonal del títol per posició inicial no ancorada al cicle de tile. +- Rotació de la `PowerBall` perduda en passar per `Game::startAllBalloons` després del rellotge. +- Pausa que es disparava amb el flanc residual de CANCEL/EXIT en entrar al menú. +- Animació del jugador accelerada en monitors de 144 Hz (no propagava `dt_s` als sprites). +- Sub-bucles aniats de pausa, game over, instruccions i demo aplanats a un únic loop SDL3. +- WASM/Emscripten: reset en fer "exit", eliminades les opcions d'eixida, fix de fullscreen, mode `integer_scale=false` per defecte. +- Windows: parsers de text amb finals de línia CRLF, headers SPV del PostFX regenerats. +- `pack_resources` anava a la rel en comptes de `build/`. + +### Canvis interns destacats + +- **Pipeline SDL3 GPU + fallback `SDL_Renderer`**: shaders PostFX i CrtPi (Vulkan/Metal/D3D12), presets persistents en YAML, scanlines analítiques sense supersampling. +- **Sistema d'opcions modern**: tot a `config.yaml` amb fkyaml; `postfx.yaml` i `crtpi.yaml` per als presets. +- **Sistema d'àudio nou** (`Ja::` namespace, streaming d'OGG, tipus sense prefix `JA_`). +- **API SDL3 Callbacks** (`SDL_AppInit`/`Iterate`/`Event`/`Quit`). +- Migració a `enum class` per a Input::Action, Input::Device, Input::Repeat, Input::Disable, Fade::Type i Bullet::Kind. +- Convencions `CamelCase` aplicades a tipus que encara duien `_t`/`_e` o eren niats sense format. +- Singletons (Lang, Audio, Input, Resource) i sistema de loaders de recursos. +- Migració d'estructura a `source/core/{audio,input,locale,rendering,resources,system}/` i `source/game/{entities,scenes,ui}/`. +- Generació automàtica de `version.h` amb el hash curt de git. +- `clang-format` i `clang-tidy` unificats amb la resta de projectes germans.