Tres canvis coordinats que tanquen la cinemàtica desitjada de ROOM_INTRO: 1. `spawn.duration_s` de mummy.yaml passa de 0.6 a 1.0 s. Les mòmies tarden ~1 segon a "emergir" — temps suficient perquè el jugador noti que estan apareixent, no que ja eren a la sala. 2. El disparador es mou de fase 5 (music_tail) a fase 4 (text-exit). Ara, just quan el text "PIRÀMIDE X, SALA Y" comença a sortir de pantalla, GameScene crida `entity_manager_.spawnPendingActors()` i les mòmies s'instancien ja en EMERGING. Visualment apareixen alhora que el text desapareix; durant la fase 5 acaben d'emergir i a l'entrada a PLAYING ja són ACTIVE — coincidint amb la caiguda aèria dels jugadors. 3. `completeIntro` afegeix un fallback: si arribem a PLAYING sense haver passat per fase 4 (config patològica, fases molt curtes), instanciem els pending igualment per garantir que la sala mai no queda sense enemics. Renomenat: `hazards_spawn_triggered_` → `pending_actors_spawned_`, nom que reflecteix què representa el flag al model nou. El mètode privat `triggerHazardSpawnExit()` desapareix: era un wrapper que ja només cridava `spawnPendingActors()`. Crida directa des de `updateRoomTransition`, `respawnPlayersInstant` i `completeIntro` (fallback). 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 s'instancia visible al pixel_rect_ inicial just
|
||
# quan GameScene crida `spawnPendingActors()` (a la subfase text-exit
|
||
# de ROOM_INTRO, fase 4). El `triggerSpawnExit` es dispara llavors
|
||
# mateix; passats `duration_s` segons transita a ROAMING i empieza a
|
||
# deambular. Sense aquest bloc, default 0 ⇒ ACTIVE immediat.
|
||
spawn:
|
||
duration_s: 1.0
|
||
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
|