feat(hazard): nou hazard Hole — caiguda per forat amb clip rect

This commit is contained in:
JailDesigner committed 2026-04-30 13:32:17 +02:00
1 parent d4593d0686
commit 4da50571eb
17 files changed
+376 -15

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

+26
View File
@@ -0,0 +1,26 @@
name: hole
type: static_hazard
sprite:
path: hole.gif
size: [16, 16]
tile_size: [1, 1]
collision:
# Forat: ocupa el tile sencer (16×16). `height: 0` deixa que un salt
# AIRBORNE el creui sense disparar el contacte (el filtre d'altura de
# `checkPlayerCollisions` el descarta quan `jump_z_ > height`). El
# bucle de contacte admet l'entitat per `flags.triggers_on_overlap`,
# encara que `flags.collides` sigui false.
size: [16, 16]
height: 0
flags:
collides: false
interactable: false
# Avui el loader no llig el bloc `flags:` (és declaratiu); el flag
# real es fixa al constructor C++ de `Hole`. Mantenim el camp per
# coherència amb la resta de plantilles i per quan es cablege la
# lectura genèrica de flags.
triggers_on_overlap: true
animations:
idle: { frames: [0], fps: 1, loop: true }
stats:
damage: 0
+6
View File
@@ -138,3 +138,9 @@ entities:
position: [10, 7]
- type: mummy
position: [7, 9]
# Forat de prova: tile de sòl pla a la galeria superior, 2 tiles a
# l'est del punt d'aterratge del jugador (door_col=10). Lluny dels
# sarcs i de les momies; accessible caminant cap a l'est tot just
# després del spawn.
- type: hole
position: [12, 3]
+10
View File
@@ -73,6 +73,16 @@ animations:
frame_ms: [60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280]
loop: false
# Mort per caiguda a un agujero (DeathCause::HOLE). Frame i durada
# **placeholders** — pendents de Sergio: idealment l'índex de la
# casella buida del spritesheet i una durada curta. `loop: false`
# com `death_spinning` perquè `animationIsCompleted()` dispari el
# respawn timer determinísticament.
death_hole:
frames: [15]
frame_ms: 60
loop: false
# Inèrcia de frenada en soltar la direcció. `threshold_ms` filtra
# tocs curts (passets d'un tile sense rellisquera).
inertia:
+10
View File
@@ -73,6 +73,16 @@ animations:
frame_ms: [60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280]
loop: false
# Mort per caiguda a un agujero (DeathCause::HOLE). Frame i durada
# **placeholders** — pendents de Sergio: idealment l'índex de la
# casella buida del spritesheet i una durada curta. `loop: false`
# com `death_spinning` perquè `animationIsCompleted()` dispari el
# respawn timer determinísticament.
death_hole:
frames: [15]
frame_ms: 60
loop: false
# Inèrcia de frenada en soltar la direcció. `threshold_ms` filtra
# tocs curts (passets d'un tile sense rellisquera).
inertia: