Commit Graph
21 Commits
Author SHA1 Message Date
JailDesigner 59cd9b524c feat(entity-manager): reload del nivell + PaintLayer::clear 2026-04-26 10:26:07 +02:00
JailDesigner 377e5d0b97 feat(player): clamp permet pujar al passadís + porta tancada bloqueja via Map::collides 2026-04-26 10:09:04 +02:00
JailDesigner b54f3fc622 feat(map): door_col a la geometria + passadís de sortida a Map 2026-04-26 10:05:32 +02:00
JailDesigner 4e9d5df872 feat(players): suport del segon jugador amb events amb player_id 2026-04-24 14:33:52 +02:00
JailDesigner 87b08a7c7c feat(map): afegeix PaintLayer com a font única del pintat 2026-04-23 13:17:47 +02:00
JailDesigner 00eb696859 feat(map): afegeix Map::isPaintable(col, row) 2026-04-23 13:15:08 +02:00
JailDesigner 05cdcfa660 feat(editor): brush amb preview snap-to-grid i pintura per clic 2026-04-23 12:11:54 +02:00
JailDesigner 219f8033eb feat(editor): Tilemap editable amb setTileAt/save (Debug-only) 2026-04-23 11:56:06 +02:00
JailDesigner 6d8423764d feat(editor): writer surgical del bloc data: al YAML del tilemap 2026-04-23 11:51:49 +02:00
JailDesignerandClaude Opus 4.7 243ba06351 refactor(tilemap): índexs directes al YAML en lloc de llegenda ASCII
`data` passa a ser una llista de files d'enters (tile index lineal),
sense la indirecció `legend:` + símbols. Desapareix el límit implícit
de ~60 tiles distints i el grid segueix llegint-se com a matriu visual
gràcies al padding de 3 dígits. `-1` marca cel·la buida.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 09:11:21 +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 6800786194 fix(resources): resoldre rutes de data/ respecte a SDL_GetBasePath
Abans el binari només arrencava si la CWD era la que contenia data/
(típicament build/). Executat des de qualsevol altra carpeta no trobava
keys.yaml, paletes, etc. i es moria al carregar el primer recurs.

Patró seguit de ../aee: Resource::Helper guarda un data root absolut
i resolve(rel) el prefixa davant de rutes no absolutes. Director fa
setDataRoot(SDL_GetBasePath()) com a primera acció del ctor, així tots
els loaders posteriors hi passen sense canvis al call site.

Migrats a Resource::Helper::resolve els loaders que obrien std::ifstream
directament amb el path rebut: Locale, KeyConfig, Player, Map, Tilemap
i EntityLoader. Els que ja usaven Resource::Helper::loadFile
(Resource::Cache, PaletteLoader) hereten el fix automàticament.

Els fitxers de system_folder_ (config.yaml, debug.yaml, postfx.yaml,
crtpi.yaml) es passen com a rutes absolutes i resolve() les deixa
intactes, així no es veuen afectats.

Test targets (test_entities_smoke, test_scene_flow) enllacen ara
resource_helper.cpp perquè el seu codi passa per Helper::resolve. Els
tests corren amb CWD = repo root, on les rutes "data/..." funcionen
amb data root buit sense canviar cap assert.

Verificat executant el binari des de build/, /tmp i / — tots tres
troben els recursos i arrenquen correctament, tant en debug com en
release (release sempre arranca a LOGO).
2026-04-22 11:29:51 +02:00
JailDesignerandClaude Opus 4.7 64e0178ee9 refactor(game): COUP-02 inject MapInfo snapshot into Player
Afegit `Map::Info` (POD trivialment copiable) que empaqueta playfield,
pitch, grid, tile_size, tilemap_origin + 2 punters a funció (collides,
inside_playfield). `Map::makeInfo()` el construeix a partir dels globals
del namespace.

`Player` ara rep `const Map::Info&` al ctor i en guarda una còpia plana
(`map_`), substituint totes les lectures de `Map::*` per `map_.*`. La
inclusió `#include "game/map/map.hpp"` puja al header per la dependència
de `Map::Info`; player.cpp deixa d'incloure'l (transitiu).

Només el Player es desacobla — momies, roques i `loadFromLevel`
continuen llegint `Map::*` directament, com diu la nota original del
audit (mentre hi hagi un Map global actiu, l'acoblament és acceptable).
Si quan s'acabi PATCH-01 algun consumidor extra chirría, COUP-02b en
una rama nova.

Smoke tests 13/13 OK; log Game start → Bye! sota xvfb-run idèntic al
baseline. clang-tidy i cppcheck nets sobre els fitxers modificats.

Refs: docs/audit-game.md (COUP-02).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 08:46:34 +02:00
JailDesigner ee8dc25181 feat(entities): fase 4 - moviment de la momia amb col·lisió, z-order per peus i contacte amb el jugador 2026-04-21 20:14:47 +02:00
JailDesigner 7191a08618 feat(entities): integració del sistema d'entitats al GameScene 2026-04-21 13:55:21 +02:00
JailDesigner ba5cddd427 PATCH-07: Map passa de class all-static a namespace
Map no té estat d'instància (tots els membres són inline globals) i el
ctor ja s'havia eliminat a HC-03. Convertit a `namespace Map`: callers
no canvien perquè la sintaxi `Map::grid_cols`/`Map::collides(...)` és
idèntica. Pattern consistent amb `Options`, que és l'altre mòdul sense
estat al game/.
2026-04-20 18:12:27 +02:00
JailDesigner 6673168ea0 HC-08: alpha-mask amb nom a Tilemap::render
`0xFF000000U` passa a `constexpr std::uint32_t ALPHA_MASK` local amb
comentari. No s'ha mogut a defines.hpp perquè només s'usa dins de
Tilemap::render; si apareix a altres llocs es podrà centralitzar.
2026-04-20 18:08:22 +02:00
JailDesigner 53bf3a1ff2 DEAD-01..04: retirat el render primitiu del Map
`renderBackground`, `renderSarcsRow`, `getSarcRowBottomY` i els índexs de
paleta `HUD_BG/WALL/FLOOR/SARC` no tenien callers: el Tilemap s'encarrega
del render visual i els sarcs passaran a ser actors sprite. `getSarcRect`
es queda (la usa `collides`). Includes orfes de `screen.hpp`,
`resource_cache.hpp` i `defines.hpp` eliminats. DEAD-04 (ctor Map)
ja es va resoldre durant HC-03.
2026-04-20 17:57:12 +02:00
JailDesigner e6c7f0dcfb HC-03: geometria del mapa traslladada de map.hpp al YAML de la piràmide
El bloc `geometry:` de pyramid.yaml porta les 9 constants base (grid, sarc,
pitch, HUD, murs); els derivats (corridor, board, origin, playfield) es
recalculen al `Map::loadFrom()`. `constexpr` passa a `const` on calia i
els membres estàtics adopten snake_case. Desbloqueja la iteració
"pirámide a pirámide" sense recompilar.
2026-04-20 17:32:56 +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
JailDesigner c921833537 Mapa piràmide 4×5 amb muros i passadissos de 16 px + motor de colisions AABB amb snap al passadís (v0.12.0) 2026-04-19 18:08:51 +02:00