Commit Graph
63 Commits
Author SHA1 Message Date
JailDesigner 5710568af8 feat(input): binding START per jugador (teclat 1/2 fix, mando remapejable; pausa només per F11) 2026-05-06 08:23:01 +02:00
JailDesigner 093d9b49b5 chore: bump v0.33.0 — immunitat post-spawn al jugador (3 s amb blink) 2026-05-05 13:19:53 +02:00
JailDesigner 4536deee47 chore: títol de la finestra amb ARCADE 2026-05-05 12:18:17 +02:00
JailDesigner 3442b9b481 chore: bump v0.32.0 — Notifier configurable, F5/F6 gatejades i CRTPI passthrough 2026-05-02 15:16:40 +02:00
JailDesigner 970fe2b4db feat(notifier): entrada/eixida per temps amb easing, configurable a ui.yaml 2026-05-02 14:58:25 +02:00
JailDesigner 2e8df45b38 feat(notifier): geometria al ui.yaml; +1px alçada, text 1px més avall, marge superior 3 2026-05-02 14:43:04 +02:00
JailDesigner ac06b05332 chore(audio): defaults a música 100% i so 20% 2026-04-30 20:45:03 +02:00
JailDesigner 7d11dde0b1 Merge feat/menu-pause — pausa del món i sons al menú de servei 2026-04-30 20:40:04 +02:00
JailDesigner 17cf6e0636 chore: bump v0.31.0 — hazard Hole, IA d'evitació de mòmies i broadcast de decals 2026-04-30 19:29:53 +02:00
JailDesigner a53cf4b797 feat(editor): spacing, border i centrat vertical del tilepicker via editor.yaml 2026-04-30 09:51:30 +02:00
JailDesigner 45514ae2f4 feat(menu): sons de navegació i acceptació al menú de servei 2026-04-29 20:27:01 +02:00
JailDesigner b65eeb7aaa chore: bump v0.30.0 — redefinició de controls 2026-04-29 19:58:20 +02:00
JailDesigner 404db74889 feat(audio): cicle de música per estat (INTRO/PLAYING/OUTRO) amb callback de fi i spawn escalonat 2026-04-28 19:41:38 +02:00
JailDesigner 91f664c4d5 chore: bump v0.29.0 — atac de làtigo (Player ATTACKING, Mummy HURT, hitbox amb retall) 2026-04-28 18:44:29 +02:00
JailDesigner d208ba02df feat(player): estat ATTACKING amb edge-detect, animacions i spawn del whip via bus 2026-04-28 16:20:22 +02:00
JailDesigner e9ef6565a7 chore: bump v0.28.0 — efectes d'àudio (eco/reverb) i reverb a la cinemàtica d'INTRO 2026-04-27 08:33:34 +02:00
JailDesigner 5502191725 chore: bump v0.27.0 — polish d'intro/outro, panell translúcid i spawn delay per a BOTH 2026-04-27 08:10:18 +02:00
JailDesigner 3b05704e97 feat(intro): colors del rètol independents + restitueix line_gap_px
Dues claus noves a data/ui.yaml > colors:
  room_text         (relleno, default 232)
  room_text_outline (contorn, default 255)
Abans el relleno reciclava notification_text (compartit amb les
notificacions del HUD) i el contorn estava hardcodejat a 255 dins
renderRoomText. Ara són canals separats: tocar el rètol no afecta
les notificacions i tot viu al YAML.

UiConfig guanya roomText() / roomTextOutline(); Defaults::UI hi posa
els fallbacks; renderRoomText els consumeix.

Drive-by: torna a posar la clau room_intro.line_gap_px: 8 al
data/scenes/game.yaml — s'havia perdut en una edició manual del
fitxer per afinar timings.
2026-04-26 17:02:26 +02:00
JailDesigner af25a31639 feat(intro): font dedicada (CaesarDressing) i separació vertical entre línies
Nova font del rètol de transició de sala (ROOM_INTRO i ROOM_OUTRO):
CaesarDressing-Regular, vista com a fonts.room_text al data/ui.yaml i
exposada per UiConfig::roomTextFont(). Director la preloda al costat
de la del HUD i la del placeholder; GameScene construeix
room_text_font_ paral·lel a pause_font_ i renderRoomText l'usa per a
les dues línies de l'INTRO i el text de l'OUTRO. La pausa segueix
amb la font placeholder antiga — no es barregen.

Espai vertical configurable: nova clau room_intro.line_gap_px al
data/scenes/game.yaml (default 8 px). El gap es suma al lineHeight
natural del font i es reparteix simètricament cap amunt i cap avall
del CENTER_Y, deixant el bloc de dues línies sempre centrat. Es
poden afinar des del YAML sense recompilar.
2026-04-26 15:40:09 +02:00
JailDesigner b18bd4d021 chore: bump v0.26.0 — LevelManager i progressió sala a sala
Tanca la sèrie d'escalfament de la rama feat/level-manager:
- Levels::LevelManager com a font de veritat de la progressió
  (currentPath / advance / setIndex / setStartingPoint).
- 30 sales a data/maps/p<N>/r<M>.yaml + index a data/maps/levels.yaml.
- Avanç automàtic en creuar la porta + bucle al final de la llista.
- Hotkeys debug [ / ] per saltar entre sales.
- Clau opcional starting_level al debug.yaml.
- L'editor salva sobre la sala actualment carregada.

L'esquelet ja és funcional; queda pendent dissenyar les 30 sales,
canviar tilesets/música per piràmide i decidir la pantalla de fi de
joc (ara mateix fa bucle a la primera).
2026-04-26 15:09:22 +02:00
JailDesigner d52cc1c509 feat(editor): el SAVE_PATH segueix la sala carregada
El writer del tilemap deixa de fer servir la constant
Defaults::Editor::SAVE_PATH (que apuntava a data/maps/pyramid.yaml) i
demana al LevelManager el path actual. Resultat: editar i guardar
desa la sala que tens davant — no l'antic mapa monolític — i salts
debug entre sales canviaran també el destí del save.
2026-04-26 14:54:54 +02:00
JailDesigner f51fe3d820 feat(level-manager): GameScene pren el mapa del LevelManager
defaultConfig() llig el path del nivell actual amb
Levels::LevelManager::get().currentPath() en lloc de la constant
Pyramid::MAP_YAML (que desapareix). El ctor sincronitza room_index_
amb LevelManager::currentRoom() per al text d'intro de sala. Encara
no hi ha progressió: cada arrencada continua a la primera sala del
levels.yaml; el comportament visible és idèntic, però la responsabilitat
de 'quin fitxer carreguem' ha passat al LevelManager.
2026-04-26 14:50:51 +02:00
JailDesigner fe17c35c67 feat(levels): LevelManager amb índex de sales
Nou singleton Levels::LevelManager que llig data/maps/levels.yaml a la
primera get() i exposa currentPath/currentPyramid/currentRoom/
currentLabel + advance/restart/setIndex. És pur estat 'on sóc' — no
orquestra cap reload; la GameScene i l'Editor li preguntaran al pas
següent. Afegida constant Defaults::Pyramid::LEVELS_YAML al costat de
la MAP_YAML antiga (la substitució completa va al Step 3).
2026-04-26 14:48:15 +02:00
JailDesigner 580c13e854 feat: estat DISABLED i spawn aeri al començar la sala — v0.25.0 2026-04-26 14:17:17 +02:00
JailDesigner cd961cf718 chore: bump v0.24.0 — FSM de sala, EXITED i bucle complet 2026-04-26 10:51:40 +02:00
JailDesigner 368f9d2d6a feat(scenes): data/scenes/game.yaml amb timings i corbes de transició 2026-04-26 08:54:45 +02:00
JailDesigner f921f6bf2b chore: bump v0.23.0 — sistema de salt, HURT i polvet 2026-04-25 18:06:18 +02:00
JailDesigner 7b09a076b2 feat(player): salt vertical amb física, màquina d'estats i animació jump_* 2026-04-25 11:42:07 +02:00
JailDesigner e22f3240da feat(player): col·lisió i empenta entre jugadors amb push_factor al YAML del mapa 2026-04-24 18:54:19 +02:00
JailDesigner 4e9d5df872 feat(players): suport del segon jugador amb events amb player_id 2026-04-24 14:33:52 +02:00
JailDesigner 5c70019eb5 feat(game): pausa graduada amb easing i separador al HUD 2026-04-24 11:56:38 +02:00
JailDesigner dc8a7723e3 feat(ui): captura F9, tema a data/ui.yaml i retocs estètics
Captura de pantalla amb F9: volca el canvas ARGB a
screenshots/scr_<timestamp>.png via stb_image_write.

Tot el tema d'UI (colors, timings, fonts, flag hud.bg_enabled)
passa a data/ui.yaml via UiConfig; els valors de Defaults::UI
queden com a fallbacks si el fitxer falta o li manca alguna clau.

Retocs estètics: paleta "uzebox" per a la UI, strings del HUD
(P1/P2/V/T/PIRAMIDE/SALA) traduïts a locale, i fons del marcador
opcional amb backdrop continu de franja per evitar el trencament
visual durant el shake o l'animació d'entrada dels panells.
2026-04-24 10:58:02 +02:00
JailDesigner 82b229222f feat(hud): marcador de la franja superior amb 3 blocs i animació d'entrada 2026-04-23 23:46:41 +02:00
JailDesigner 67ecb704d2 feat(pyramid): usa variants 16×32 sam (jugador) i momia 2026-04-23 17:33:47 +02:00
JailDesigner f30bb1fb0f feat(editor): TilePicker amb scroll vertical i selecció per clic 2026-04-23 12:18:22 +02:00
JailDesigner a612a8255f feat(editor): mode editor mínim amb toggle, border blau i mutex amb pausa 2026-04-23 12:09:04 +02:00
JailDesigner 4da05b3d76 chore(release): v0.21.0 — empaquetat de recursos (AE26) i neteja de fonts
- Nou format de pack AE26 v1 (XOR + djb2), eina `pack_resources`,
  regeneració automàtica de `build/resources.pack` a cada build.
- `Resource::Helper` amb init/shutdown, fallback a disc només en Debug
  (apunta al source tree); Release exigeix pack present.
- Callers de YAML migrats a `loadFile`+deserialize des de buffer.
- Arrel neta: el pack viu a `build/`, eliminat `sync_data`.
- Placeholder font -> `ari-w9500-condensed-display`; esborrades variants
  bold/condensed no usades a `data/fonts/`.
2026-04-23 08:51:21 +02:00
JailDesigner 5312abc761 chore(release): v0.20.0 — notificacions en case frase i renom de presets 2026-04-22 22:05:18 +02:00
JailDesigner 350625dec0 feat(menu): primera versió del menú de servei 2026-04-22 18:15:00 +02:00
JailDesignerandClaude Opus 4.7 eb07e7e564 feat(fonts): deinterlace GIF i font ari-w9500 per placeholders
Fix: gif.cpp no desfeia l'interlace, trinxava qualsevol GIF entrellaçat
(tota la sortida de Pillow). Afegeix Defaults::UI::Font per centralitzar
noms/rutes i mou data/font → data/fonts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 13:45:06 +02:00
JailDesigner a3592d6c73 feat(player): animacions direccionals i stand automàtic en col·lisió; v0.18.0 2026-04-21 20:41:49 +02:00
JailDesigner beb6a4aad1 HC-04+HC-05: índexs de paleta UI centralitzats a Defaults::UI
Afegit `Defaults::UI::` amb els 5 índexs (RENDER_INFO_TEXT/SHADOW,
CANVAS_BG, NOTIFICATION_TEXT/BG, EXIT_TEXT/BG) i 2 durades
(NOTIFICATION_TIME_MS, EXIT_TIME_MS). `ui_palette.hpp` i
`notification_presets.hpp` queden com a alias: canviar el tema global
és tocar un sol bloc. Equivalent a tenir un "tema" (vindria d'un YAML el
dia que calga).
2026-04-20 18:07:31 +02:00
JailDesigner 505e819af1 HC-06: rutes d'assets de GameScene a Defaults::Pyramid + Config
Afegits `Defaults::Pyramid::{MAP_YAML, PLAYER_SPRITE, PLAYER_YAML,
MUSIC_TRACK}` a utils/defaults.hpp. `GameScene` exposa `Config` i
`defaultConfig()`; el ctor accepta Config (default = Defaults::Pyramid)
i usa els camps enlloc dels literals. `Player` passa a rebre el anim_key
per constructor en lloc de cablejar "player.yaml". Cache key = basename
(convenció preexistent). Cada piràmide futura serà un Config distint.
2026-04-20 17:52:53 +02:00
JailDesigner da4f78fd0c HC-01+PATCH-02: SPEED_PX_PER_S a Defaults::Player
La velocitat base del jugador (60 px/s) passa de `constexpr` local a
`player.cpp` a `Defaults::Player::SPEED_PX_PER_S`, seguint el patró usat
a l'audit d'àudio. `player.cpp` manté un alias local per llegibilitat.
Elimina el comentari TODO sobre sprint/slow-zones que PATCH-02 volia fora.
2026-04-20 17:43:32 +02:00
JailDesignerandClaude Opus 4.7 deb0fc2a4b refactor(core/audio): unificar format/canals/freq a Defaults::Audio (HC-02)
{SDL_AUDIO_S16, 2, 48000} apareixia com a literal a tres llocs de
jail_audio (Sound/Music/audio_spec) i audio.cpp:208 passava SDL_AUDIO_S16LE
i 2 canals per separat — dues convencions de format conviuen i els 2
canals eren número màgic.

Defaults::Audio guanya FORMAT (SDL_AUDIO_S16) i CHANNELS (2). Audio::
initSDLAudio passa ambdós junts a Ja::init. jail_audio obté un fallback
local Ja::DEFAULT_SPEC que consolida les tres instàncies; es queda
independent del projecte (no inclou utils/defaults.hpp) perquè l'engine
és reutilitzable.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:50:41 +02:00
JailDesignerandClaude Opus 4.7 6f0626c31f refactor(core/audio): moure constants UI/tuning a Defaults::Audio (HC-01)
VOLUME_STEP, FREQUENCY i DEFAULT_CROSSFADE_MS vivien com a membres
constexpr d'Audio. Eren valors de configuració — no invariants de la
classe — i la convenció del projecte és que tots els paràmetres
ajustables visquin a utils/defaults.hpp.

Passen a Defaults::Audio::{VOLUME_STEP, FREQUENCY, CROSSFADE_MS}. L'únic
ús intern (Ja::init al constructor d'Audio) es reapunta al Defaults. Cap
ús extern dels tres símbols.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:47:40 +02:00
JailDesignerandClaude Opus 4.7 bbb397abb2 refactor(core/rendering): nomenar constants a RenderInfo (HC-06/-07/-09 + PATCH-08)
render_info.cpp tenia diverses "cifres soltes" amb significat
estructural:
- Índex 0/1/2/3 dins segments_ per a FPS/driver/shader/temps — ara
  FPS_SEGMENT, DRIVER_SEGMENT, SHADER_SEGMENT, TIME_SEGMENT (HC-06).
- +1,+1 per a la ombra del text — ara SHADOW_OFFSET_PX (HC-09).
- % 3 al cicle de posicions de global_inputs.cpp — ara
  Defaults::RENDER_INFO_POSITION_COUNT (HC-07).

A més, init() assignava mono_digits=true al segment de temps que
refreshSegments() ja marca a cada crida, inclosa la primera d'update()
abans de render. S'elimina el doblegat (PATCH-08); el comentari
explica la garantia.

Build + smoke 5s xvfb OK (exit 124).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 09:47:49 +02:00
JailDesigner e2b8d0e459 Subsistema d'àudio: port de ../aee/core/audio refactoritzat amb namespace Ja, desacoblat d'Options via Audio::Config i extensió de Resource::Cache per preloading de música i sons; pyramid_1.ogg sona a GameScene (v0.15.0) 2026-04-19 23:19:20 +02:00
JailDesigner 6f3fafbfff RenderInfo amb tres estats (off/dalt/baix), temps de joc i persistència; ombra, mono-dígits i easing compartits (v0.14.0) 2026-04-19 20:28:23 +02:00
JailDesigner 46a578fd86 Tilemap YAML: sala piràmide renderitzada amb tiles reals de tomb.gif i caixa de debug llevada (v0.13.0) 2026-04-19 19:35:21 +02:00