168 lines
6.3 KiB
YAML
168 lines
6.3 KiB
YAML
# player animation
|
||
sprite:
|
||
path: morcus.gif
|
||
size: [16, 32]
|
||
|
||
# Geometria de col·lisió del jugador (independent de l'animació):
|
||
# size → costat del quadrat de col·lisió (16×16)
|
||
# base_size → costat del quadrat visual inferior del sprite (els "peus");
|
||
# s'usa per centrar la caixa de col·lisió sobre ell.
|
||
collision:
|
||
size: 16
|
||
base_size: 16
|
||
# Caixa de contacte actor-actor (jugador↔jugador, jugador↔momia/trampa).
|
||
# Més petita que `size` perquè els contactes d'acció siguin precisos;
|
||
# `size` es reserva per a la col·lisió amb murs/sarcòfags i per enfilar
|
||
# els passadissos. Centrada en el mateix punt que la caixa base.
|
||
hit_size: 8
|
||
# Alçada del cos en píxels. Funció DOBLE segons amb què col·lisione:
|
||
# · Contra entitats (mummy, rolling_rock, sarc): si `jump_z > height`
|
||
# d'aquella entitat, no hi ha col·lisió. Igual que als YAMLs
|
||
# d'entitats.
|
||
# · Contra altres jugadors: la col·lisió és binària per estat aeri.
|
||
# Si un està en l'aire i l'altre no → cap col·lisió. Si tots dos
|
||
# estan en l'aire, llavors `body_height` decideix si els rangs
|
||
# verticals solapen i s'aplica el rebot mid-aire. `0` = sense cos
|
||
# (ni rebot quan tots dos volen).
|
||
height: 12
|
||
|
||
# Animacions en mapa (clau = nom). Camps per animació:
|
||
# frames → llista d'índexs dins de l'spritesheet.
|
||
# frame_ms → durada de cada frame en ms. Escalar = uniforme; llista =
|
||
# per-frame (mateixa mida que `frames`).
|
||
# loop → true per defecte. `loop: false` = un sol tret (es queda al
|
||
# darrer frame i `animationIsCompleted()` passa a true).
|
||
# loop_from → rebota a aquest índex en passar del final (implica loop).
|
||
animations:
|
||
stand_down: { frames: [0] }
|
||
stand_up: { frames: [4] }
|
||
stand: { frames: [8] }
|
||
jump_down: { frames: [12] }
|
||
jump_up: { frames: [13] }
|
||
jump: { frames: [14] }
|
||
stun_down: { frames: [16] }
|
||
stun_up: { frames: [17] }
|
||
stun: { frames: [18] }
|
||
|
||
walk_down:
|
||
frames: [0, 1, 2, 3]
|
||
frame_ms: 100
|
||
|
||
walk_up:
|
||
frames: [4, 5, 6, 7]
|
||
frame_ms: 100
|
||
|
||
walk:
|
||
frames: [8, 9, 10, 11]
|
||
frame_ms: 100
|
||
|
||
hurt_down:
|
||
frames: [0, 1, 2, 3]
|
||
frame_ms: 100
|
||
|
||
hurt_up:
|
||
frames: [4, 5, 6, 7]
|
||
frame_ms: 100
|
||
|
||
hurt:
|
||
frames: [8, 9, 10, 11]
|
||
frame_ms: 100
|
||
|
||
# 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
|
||
|
||
attack_up:
|
||
frames: [4, 5, 6, 7]
|
||
frame_ms: 50
|
||
|
||
attack:
|
||
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`.
|
||
# El `threshold_ms` filtra els tocs curts: si el temps acumulat de
|
||
# moviment continu no ha arribat al llindar, la parada és instantània
|
||
# (permet "passets" d'un tile sense rellisquera). L'acumulador es
|
||
# reseteja només quan no hi ha ni input ni velocitat residual, així
|
||
# els canvis de direcció enmig del coast no rearmen el llindar.
|
||
# `brake_time_ms: 0` o absència del bloc = inèrcia desactivada.
|
||
inertia:
|
||
brake_time_ms: 150
|
||
threshold_ms: 300
|
||
|
||
# Gir de 180°: mentre dura, el facing queda fixat a la direcció
|
||
# intermèdia (efecte purament visual; el moviment continua sense
|
||
# alterar-se). Els girs de 90° no passen per cap intermedi.
|
||
turn:
|
||
duration_ms: 80
|
||
# Direcció intermèdia per a cada gir de 180° (sentit horari).
|
||
transitions:
|
||
west_to_east: down # passa per baix (stand_down)
|
||
east_to_west: up # passa per dalt (stand_up)
|
||
north_to_south: east # passa per la dreta (stand, sense flip)
|
||
south_to_north: west # passa per l'esquerra (stand, amb flip)
|
||
|
||
# Salt vertical (px verticals "visuals", no afecta la posició al món).
|
||
# impulse → velocitat vertical inicial (px/s) en deixar el sòl.
|
||
# gravity → acceleració descendent constant (px/s²).
|
||
# landing_stun_ms → temps en què el jugador queda paralitzat en aterrar
|
||
# (no es pot moure ni tornar a saltar).
|
||
# shadow_y_offset → desplaçament vertical de la sombra (px, positiu =
|
||
# puja). Compensa la franja transparent que els
|
||
# sprites del jugador tenen sota els peus reals
|
||
# perquè camine "pel mig del passadís" (3 px aquí).
|
||
# sound → fitxer .wav reproduït al despegue (relatiu a
|
||
# data/sounds/). Buit o absent = sense so.
|
||
# land_sound → fitxer .wav reproduït en aterrar.
|
||
# L'alçada del cos viu al bloc `collision:` (`height`), igual que la resta
|
||
# d'entitats: és una propietat de col·lisió, no de la física del salt.
|
||
# Amb impulse=240 i gravity=600: pic ≈ 48 px, temps total en l'aire ≈ 0.8 s.
|
||
jump:
|
||
impulse: 200
|
||
gravity: 600
|
||
landing_stun_ms: 400
|
||
shadow_y_offset: 3
|
||
sound: jump.wav
|
||
land_sound: land.wav
|
||
|
||
# Estat HURT: el jugador queda projectat sense control per un impacte
|
||
# (algú que cau al damunt; en el futur també fuetada de l'altre jugador).
|
||
# `enterHurt` tria automàticament la direcció amb més recorregut lliure
|
||
# entre els 4 cardinals, posa la velocitat inicial a `speed` i la fa
|
||
# decaure linealment fins a 0 en `brake_time_ms`. Si pel camí xoca amb
|
||
# un mur, para en sec. En tornar a velocitat 0, recupera l'estat
|
||
# GROUNDED i el control. Mentre dura, no col·lisiona amb altres jugadors.
|
||
# Amb speed=120 i brake_time=500ms ⇒ recorregut ≈ 30 px (≈2 tiles).
|
||
hurt:
|
||
speed: 120
|
||
brake_time_ms: 500
|
||
|
||
# Configuració del látigo. Mateixos valors que Sam de moment;
|
||
# diferenciar quan equilibrem cada personatge.
|
||
whip:
|
||
range_tiles: 3
|
||
swing_ms: 200
|
||
cooldown_ms: 200
|
||
damage: 1
|