Commit Graph
48 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 2e3816783f feat(immunity): API setImmunity/isImmune i lectura del bloc immunity 2026-05-05 13:01:22 +02:00
JailDesigner 82ccf65ce1 fix(player): no snap a lane si pica contra mur extern; corridor només si porta oberta 2026-05-02 14:30:09 +02:00
JailDesigner c003e6665e feat(editor): mou la porta i persisteix geometry.door_col 2026-05-02 13:35:01 +02:00
JailDesigner 7cd7b4dc4f chore(hole): neteja de comentaris obsolets i notes sobre riscos latents 2026-04-30 18:52:49 +02:00
JailDesigner 3e5217066f fix(hazard): aterrar damunt d'un Hole salta el LANDING_STUN 2026-04-30 13:53:26 +02:00
JailDesigner 4da50571eb feat(hazard): nou hazard Hole — caiguda per forat amb clip rect 2026-04-30 13:32:17 +02:00
JailDesigner 37fdcb4751 feat(controls): redefinició de tecles i botons del mando des del menú de servei 2026-04-29 19:54:47 +02:00
JailDesigner 9f0a566ffb feat(player): mort i respawn (DYING + death_spinning + lives counter) 2026-04-29 11:40:05 +02:00
JailDesigner 72384c3113 feat(anim): cardinal WEST i flip totalment governat pel motor d'animació 2026-04-29 10:11:27 +02:00
JailDesigner 9dc7ff0da3 refactor(anim): direccions cardinals (north/south/east) en YAML i codi 2026-04-29 08:59:01 +02:00
JailDesigner 72642dc10e feat(player): so del swing del làtigo i de l'entrada a HURT 2026-04-28 19:55:53 +02:00
JailDesigner df60709e6d feat(whip): aplicació de dany amb retall de hitbox, alreadyHit i friendly fire 2026-04-28 16:20:22 +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 47bb92144e feat(audio): reverb 'stone_hall' al primer LAND cinemàtic d'INTRO
Lligua el reverb al moment de la cinemàtica d'entrada de sala, no als
salts en general. La sala dóna "més detall" sonor a l'INTRO; un cop el
joc està en marxa, els salts (i els respawns post-mort) tornen al so
sec. Així el primer aterratge es percep com a part de l'animació
d'arribada, no com una propietat permanent del personatge.

  - RoomFsm::Config: nou camp `intro_land_reverb_preset` carregat des
    de `room_intro.land_reverb` a `data/scenes/game.yaml` (per defecte
    'stone_hall'). Buit = sense reverb a l'INTRO.
  - Player: membre `next_land_reverb_preset_` consumit per
    `integrateJump` al primer aterratge que el trobe armat. Setter
    públic `armNextLandReverb(preset)` per a GameScene. Cap altre punt
    (respawn, exit, disable) el toca: el reverb és estrictament
    one-shot lligat al spawn aeri d'INTRO.
  - GameScene::triggerPlayerSpawn: arma el preset al jugador just
    després de `spawnFromAir`, així cada slot rep el seu reverb un
    sol cop per cinemàtica.
  - JumpConfig perd `land_reverb_preset` i els YAMLs de Sam/Morcus
    perden `land_reverb`: la decisió ja no viu al personatge.
2026-04-27 08:31:51 +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 cd5bb94223 fix(player): EXITED no participa al resolver ni a checkPlayerCollisions 2026-04-26 10:41:05 +02:00
JailDesigner 5c5cd1d5da feat(player): estat EXITED i porta oberta despawna jugadors via player_exited 2026-04-26 10:20:13 +02:00
JailDesigner c38c80753a feat(player): direcció preferida al HURT segons l'offset d'impacte 2026-04-25 15:29:48 +02:00
JailDesigner e8407ce35e feat(player): nou estat HURT — caure damunt d'un altre el llança projectat 2026-04-25 14:56:15 +02:00
JailDesigner 3646e6a4aa feat(player): efectes de so configurables al despegue i a l'aterratge 2026-04-25 13:50:30 +02:00
JailDesigner 06ff11d563 fix(player): el z-order del saltador respecta la seua posició al sòl 2026-04-25 12:21:27 +02:00
JailDesigner f0a0515f28 fix(player): puja la sombra pel valor jump.shadow_y_offset del YAML 2026-04-25 12:19:51 +02:00
JailDesigner 4758d5d8a4 refactor(player): mou height de jump a collision per coherència amb les entitats 2026-04-25 12:16:03 +02:00
JailDesigner 64390f8ad7 feat(player): sombra translúcida sota el jugador mentre està en l'aire 2026-04-25 11:59:13 +02:00
JailDesigner c4caa9021e feat(player): resol el solapament en aterrar damunt d'un altre jugador 2026-04-25 11:55:04 +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 4f1a3260a5 fix(player): snapToLane respecta col·lisió PvP i empeny amb push_factor 2026-04-24 22:38:36 +02:00
JailDesigner ea0f6d98a9 feat(player): inèrcia de frenada amb acumulador de moviment 2026-04-24 20:20:30 +02:00
JailDesigner 858e444842 feat(player): hit-box 8×8 per a contacte actor-actor (player, momia, trampa) 2026-04-24 19:23:30 +02:00
JailDesigner 511f8d5b09 fix(player): el jugador empentat es queda en stand, no walk 2026-04-24 19:00:04 +02:00
JailDesigner 1cc2e28b1b refactor(player): divideix update en tick+applyMovement i exposa velocitat intencionada 2026-04-24 18:49:52 +02:00
JailDesigner 4e9d5df872 feat(players): suport del segon jugador amb events amb player_id 2026-04-24 14:33:52 +02:00
JailDesigner 74dad71cc2 feat(player): gir de 180° amb pose intermèdia configurable al YAML 2026-04-24 13:49:17 +02:00
JailDesigner 0f56ce7567 feat(player): publica PaintedTile amb l'índex de pintat propi 2026-04-23 13:19:01 +02:00
JailDesignerandClaude Opus 4.7 d9f6fb45f8 refactor(sprite): PATCH-01 add tryMove + virtual collisionBox to base
- Sprite: nou hook virtual `collisionBox() -> SDL_FRect` (default
  `pos_`). Subclasses amb falsa perspectiva el sobreescriuen amb una
  sub-caixa més petita.
- MovingSprite: nou `tryMove(dx, dy, CollisionFn)` que aplica eix a
  eix i reverteix l'eix que col·lisiona; deixa lliscar el sprite
  contra obstacles.
- Player: override `collisionBox()` retornant `getBaseBox()` i
  `update()` reescrita per fer `animate(dt) + tryMove(vx*dt, vy*dt,
  collidesFn)` en lloc del patró antic `update + revertir + reaplicar`.

El comportament observable és idèntic: la integració `v*dt` parteix
de la mateixa posició (post-snap), els revertits per col·lisió són
els mateixos i el `MOVED` que controla l'animació stand/walk segueix
comparant amb `FRAME_START_X/Y`.

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 (PATCH-01).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 08:53:11 +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 a3592d6c73 feat(player): animacions direccionals i stand automàtic en col·lisió; v0.18.0 2026-04-21 20:41:49 +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 df059a6fcb DUP-05: clampToPlayfield() extret de Player::update
Els 4 `const auto` MIN_/MAX_ i els dos `std::clamp` es mouen a un mètode
privat `clampToPlayfield`. Separa la responsabilitat de mantenir la
caixa dins del playfield de la integració de moviment.
2026-04-20 18:05:08 +02:00
JailDesigner 206ba07a6f DUP-02: snapToHorizontalLane/VerticalLane unificats en snapToLane
Les dues funcions compartien l'algorisme complet — només canvien l'eix
actiu (getPosY/setPosY vs getPosX/setPosX) i els paràmetres del Map.
`snapToLane` pren base, pitch, max_idx i dos member-fn pointers i és
cridat pels dos wrappers amb els valors corresponents.
2026-04-20 17:59:05 +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 e84d8cc535 HC-02: mides de sprite/col·lisió del jugador al player.yaml
Afegit bloc `collision:` (size 16, base_size 12) al YAML del player; les
`static constexpr` de `player.hpp` passen a `inline static int` (snake_case)
i es calculen al `Player::loadFrom()`. `sprite_w/sprite_h` es llegeixen
dels mateixos frameWidth/frameHeight que ja hi viuen. GameScene crida el
load abans del spawn (mateix patró que `Map::loadFrom`). Permet ajustar
la caixa del jugador sense recompilar.
2026-04-20 17:46:43 +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
JailDesigner 96cbdf96b6 Input + moviment del jugador amb fletxes (flip, anim walk/stand, bounds) (v0.8.0) 2026-04-19 09:57:22 +02:00
JailDesigner de5a670fdb Motor de sprites/animacions/surfaces i jugador centrat (v0.2.0) 2026-04-18 21:02:55 +02:00