La mòmia ara entra a l'estat SPAWN al construir-se: visible al pixel_rect_ inicial, sense moviment ni dany, esperant que algú extern (GameScene) li armi el comptador via `triggerSpawnExit()`. La durada (`spawn.duration_s` al YAML, default 0) controla quan passa a ROAMING una vegada armat el comptador. Posat a 0.6s a mummy.yaml. Aquest commit encara no enganxa el trigger: la mòmia es queda quieta tota la partida — comportament visual intermedi, esperat. El commit següent posarà el trigger a GameScene al final del text-exit de ROOM_INTRO. Tests de smoke i whip ajustats: les mòmies construïdes en stand-alone necessiten `triggerSpawnExit()` + un update gran abans d'interactuar amb `enterHurt`/contacto. Helper `exitMummySpawn` afegit a cada fitxer. Guards defensius a `enterHurt` i `onPlayerContact`: encara que el filtre central a EntityManager salta DynamicHazards en SPAWN, blindem la crida directa per a futurs camins (whip propers, scripts...). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
72 lines
2.9 KiB
YAML
72 lines
2.9 KiB
YAML
name: mummy
|
||
type: dynamic_hazard
|
||
editable: true
|
||
sprite:
|
||
path: mummy.gif
|
||
size: [16, 32]
|
||
tile_size: [1, 1]
|
||
# Variant 16×32 de la momia: el sprite fa 16×32 (dos 16×16: cap i peus)
|
||
# i la caja de col·lisió amb el mapa és 16×16, coincident amb el
|
||
# rectangle-base 16×16 dels peus. Com que `size` i `base_size` són
|
||
# iguals, el padding és zero i la caja s'alinea exactament amb la
|
||
# silueta inferior del sprite; amb `anchor: feet` ocupa la cel·la
|
||
# 16×16 del corredor on naix.
|
||
anchor: feet
|
||
collision:
|
||
size: [16, 16]
|
||
base_size: [16, 16]
|
||
# Alçada del cos en píxels per al filtre de col·lisió per salt: un
|
||
# jugador amb jump_z > height no col·lisiona amb la momia (la salta
|
||
# per damunt). Amb impulse=240 + gravity=600 el pic ronda els 48 px,
|
||
# així que 24 deixa marge per esquivar amb un salt no perfecte.
|
||
height: 12
|
||
flags:
|
||
collides: true
|
||
interactable: false
|
||
# Strip de 12 frames en graella 4×3 (mateix esquema que el jugador):
|
||
# 0..3 → walk_south (cara avall)
|
||
# 4..7 → walk_north (cara amunt)
|
||
# 8..11 → walk_east (lateral cap a l'est)
|
||
# La variant `walk_west` reaprofita els frames de l'est amb `flip_h: true`:
|
||
# el motor d'animació aplica el flip al sprite, així el codi de la mòmia
|
||
# no decideix flip per direcció (només selecciona quina animació mostrar).
|
||
# La momia no té variants `stand_*` perquè mai no para.
|
||
animations:
|
||
walk_south: { frames: [0, 1, 2, 3], fps: 8, loop: true }
|
||
walk_north: { frames: [4, 5, 6, 7], fps: 8, loop: true }
|
||
walk_east: { frames: [8, 9, 10, 11], fps: 8, loop: true }
|
||
walk_west: { frames: [8, 9, 10, 11], fps: 8, loop: true, flip_h: true }
|
||
ai:
|
||
type: corridor_wanderer
|
||
direction_choice: random
|
||
initial_direction: east
|
||
|
||
# Estat SPAWN: la mòmia naix visible i quieta al pixel_rect_ inicial,
|
||
# sense col·lisió. El GameScene li arma el comptador al final del
|
||
# text-exit de ROOM_INTRO; passats `duration_s` segons des d'aleshores,
|
||
# transita a ROAMING i empieza a deambular. Sense aquest bloc, default
|
||
# 0 ⇒ al primer update post-trigger passa directament a ACTIVE.
|
||
spawn:
|
||
duration_s: 0.6
|
||
stats:
|
||
speed: 30
|
||
damage: 1
|
||
# Quan true, el contacte amb el jugador no aplica `hurt` ni knockback:
|
||
# mata d'un sol toc i dispara el cicle DYING → respawn. El path `hurt`
|
||
# del jugador segueix funcionant per a futurs hazards no-letals (avui
|
||
# no n'hi ha cap que el dispari).
|
||
kills_outright: true
|
||
|
||
# Estat HURT: post-fuetada, fugint en línia recta. Si la direcció
|
||
# preferida (la del whip) està bloquejada, prova perpendiculars; si totes
|
||
# ho estan, queda quieta tot el `duration_ms` i després torna a ROAMING.
|
||
# `speed` opcional: si no apareix, s'usa `stats.speed`. El `whippable`
|
||
# habilita la reacció al látigo (false ⇒ el whip la ignora).
|
||
hurt:
|
||
duration_ms: 600
|
||
speed: 60
|
||
whippable: true
|
||
# So opcional: basename del fitxer dins `data/audio/sounds/`. Es dispara
|
||
# un sol cop per fuetada quan la mòmia entra a HURT. Si manca, no sona.
|
||
sound: mummy_hurt.wav
|