5.4 KiB
5.4 KiB
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 principalGame. - 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) ioverscan(omple la finestra retallant). El valor anticinteger_scaledel 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
overscanretalla 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 mostraCoffee 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_countdownaconfig.yaml). - Zoom màxim de la finestra detectat automàticament segons la resolució del display.
- Paquet de recursos més robust:
resources.packlocalitzat viaSDL_GetBasePathamb fallback al filesystem. - Build estandarditzada: llista explícita de fonts en lloc de
GLOB_RECURSE,-Wextra -Wpedanticactivats i warnings netejats. pre-commithooks perclang-format,clang-tidyicppcheck.
Correccions de bugs
- Demo congelada en obrir-se per culpa d'un doble
DeltaTime::tick()al títol (Game rebiadt ≈ 0). - Salt visual al fons diagonal del títol per posició inicial no ancorada al cicle de tile.
- Rotació de la
PowerBallperduda en passar perGame::startAllBalloonsdespré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_sals 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=falseper defecte. - Windows: parsers de text amb finals de línia CRLF, headers SPV del PostFX regenerats.
pack_resourcesanava a la rel en comptes debuild/.
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.yamlamb fkyaml;postfx.yamlicrtpi.yamlper als presets. - Sistema d'àudio nou (
Ja::namespace, streaming d'OGG, tipus sense prefixJA_). - API SDL3 Callbacks (
SDL_AppInit/Iterate/Event/Quit). - Migració a
enum classper a Input::Action, Input::Device, Input::Repeat, Input::Disable, Fade::Type i Bullet::Kind. - Convencions
CamelCaseaplicades a tipus que encara duien_t/_eo 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}/isource/game/{entities,scenes,ui}/. - Generació automàtica de
version.hamb el hash curt de git. clang-formaticlang-tidyunificats amb la resta de projectes germans.