name: whip_attack # Quatre sprites distints, un per cardinal. El sistema d'animació actual # 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: [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. # - `frames` : índex de tile dins l'spritesheet (graella deduïda). # - `frame_ms` : durada uniforme per frame; 80 ms × 4 = 320 ms swing. # - `loop: false` : el látigo viu una animació i mor (`markDead`). # - `active_frames` : valors dins de `frames` durant els quals la # hitbox aplica dany. Wind-up (0) i recovery (3) no # danyen — només els frames "actius" 1 i 2. animations: swing: frames: [0, 1, 2, 3] frame_ms: 80 loop: false active_frames: [1, 2]