Files
coffee-crisis/CHANGELOG.md
T

67 lines
5.4 KiB
Markdown
Raw 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
## 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 F1F12 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 (<git_hash>)`.
- **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.