feat(whip): separa draw_rect i damage_rect; sprites 80×32 / 16×96; feet_y delegat a l'owner; recover_* per al cooldown
No files matched your search
@@ -1,15 +1,26 @@
|
||||
name: whip_attack
|
||||
|
||||
# Quatre sprites distints, un per cardinal. El sistema d'animació actual
|
||||
# només permet UNA mida de frame per surface, i les hitboxes horitzontals
|
||||
# (E/W: 48×16) i verticals (N/S: 16×48) tenen aspect ratios distints; per
|
||||
# això són 4 fitxers en lloc d'una sola sheet compartida amb flips.
|
||||
# Tots els .gif viuen al mateix directori que aquest YAML.
|
||||
# només permet UNA mida de frame per surface, i els sprites del látigo
|
||||
# tenen aspect ratios distints segons direcció. Per això són 4 fitxers
|
||||
# en lloc d'una sola sheet compartida amb flips.
|
||||
#
|
||||
# Mides (= `draw_rect` del WhipAttack, que NO es retalla per
|
||||
# bloquejadors):
|
||||
# E/W → 80×32 px per frame: 16 px de wind-up darrere del jugador
|
||||
# + 16 px de solapament + 48 px d'atac
|
||||
# frontal. Cobreix tota l'altura del jugador.
|
||||
# N/S → 16×96 px per frame: 48 px d'atac + 32 px solapant amb el jugador
|
||||
# + 16 px de wind-up "darrere".
|
||||
#
|
||||
# La caja de DANY és independent i més petita (48×16 / 16×48), pegada
|
||||
# al borde del jugador i retallada per murs/sarcs. La calcula
|
||||
# `WhipAttack::configure` a partir del `owner_box` del payload.
|
||||
sprites:
|
||||
east: { path: whip_east.gif, size: [48, 16] }
|
||||
west: { path: whip_west.gif, size: [48, 16] }
|
||||
north: { path: whip_north.gif, size: [16, 48] }
|
||||
south: { path: whip_south.gif, size: [16, 48] }
|
||||
east: { path: whip_east.gif, size: [80, 32] }
|
||||
west: { path: whip_west.gif, size: [80, 32] }
|
||||
north: { path: whip_north.gif, size: [16, 96] }
|
||||
south: { path: whip_south.gif, size: [16, 96] }
|
||||
|
||||
# Animació compartida entre les 4 direccions: la seqüència de frames i les
|
||||
# durades són idèntiques; només canvia quina surface/mida es clipa.
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 313 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 378 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 369 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 313 B |
@@ -68,8 +68,12 @@ animations:
|
||||
frames: [8, 9, 10, 11]
|
||||
frame_ms: 100
|
||||
|
||||
# Placeholder: igual que sam.yaml, reaprofitem `walk_*` fins que
|
||||
# arribe l'art específic del braç llançant el látigo.
|
||||
# Placeholder mentre no arribe l'art real (el GIF de morcus encara no té
|
||||
# frames d'atac específics — reaprofitem `walk_*`). El bloc està declarat
|
||||
# perquè `Player::animationName` el busque sense fallback i la mecànica
|
||||
# de l'atac estiga lligada amb morcus tan bon punt s'afegisquen els
|
||||
# frames; ara mateix visualment el sprite caminarà mentre llança el
|
||||
# látigo (acceptat per al placeholder).
|
||||
attack_down:
|
||||
frames: [0, 1, 2, 3]
|
||||
frame_ms: 50
|
||||
@@ -82,6 +86,18 @@ animations:
|
||||
frames: [8, 9, 10, 11]
|
||||
frame_ms: 50
|
||||
|
||||
# Cooldown post-swing (recovery): igual que a sam.yaml, placeholder als
|
||||
# frames de `stand_*`. Quan arriben els frames reals només cal canviar
|
||||
# els índexs ací.
|
||||
recover_down:
|
||||
frames: [0]
|
||||
|
||||
recover_up:
|
||||
frames: [4]
|
||||
|
||||
recover:
|
||||
frames: [8]
|
||||
|
||||
# Inèrcia només de frenada. L'acceleració és sempre instantània (soltar
|
||||
# el teclat + prémer una direcció = velocitat plena); en canvi, quan es
|
||||
# solta la direcció el jugador decau linealment a 0 en `brake_time_ms`.
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 3.2 KiB |
@@ -73,17 +73,31 @@ animations:
|
||||
# (TODO: dibuixar-ne d'específics quan arribe l'art). El sprite del
|
||||
# látigo viu al `WhipAttack` i es renderitza superposat per z-order.
|
||||
attack_down:
|
||||
frames: [0, 1, 2, 3]
|
||||
frames: [28, 29, 30, 31]
|
||||
frame_ms: 50
|
||||
|
||||
attack_up:
|
||||
frames: [4, 5, 6, 7]
|
||||
frames: [24, 25, 26, 27]
|
||||
frame_ms: 50
|
||||
|
||||
attack:
|
||||
frames: [8, 9, 10, 11]
|
||||
frames: [20, 21, 22, 23]
|
||||
frame_ms: 50
|
||||
|
||||
# Animacions de cooldown post-swing (recovery): mentre dura
|
||||
# `whip_cooldown_ms` el jugador continua bloquejat però l'animació ja
|
||||
# no és la d'atac. Placeholder: reaprofiten els frames de `stand_*`
|
||||
# (la silueta no canvia respecte d'ells); quan arriben els frames
|
||||
# reals només cal canviar els índexs ací, sense tocar el codi.
|
||||
recover_down:
|
||||
frames: [1]
|
||||
|
||||
recover_up:
|
||||
frames: [5]
|
||||
|
||||
recover:
|
||||
frames: [9]
|
||||
|
||||
# Inèrcia només de frenada. L'acceleració és sempre instantània (soltar
|
||||
# el teclat + prémer una direcció = velocitat plena); en canvi, quan es
|
||||
# solta la direcció el jugador decau linealment a 0 en `brake_time_ms`.
|
||||
|
||||