Aller au contenu principal

Session 135bis — Calibration des splat bits (fix vitesses + log diag)

Resume

Apres test in-game (session 135 plus tot ce soir) : le splash etait code et
appele correctement, mais invisible car les vitesses initiales etaient
trop faibles. Diagnostic des logs :
Alien #13 (def=0) supprime -> Red Alien meurt, code IA OK
AlienBulletUpdateSystem : sprite renderer branche -> le pool alien a
bien le BulletSpriteRenderer actif, donc les bits auraient affiche les
vrais sprites Splutch (verts) si visibles
– Mais aucun bit visible -> vitesses trop basses + gravite trop forte.

Les valeurs initiales (XZ_VELOCITY_CAL = 1/1500, Y_VELOCITY_CAL = 1/2200,
gravity = 12) donnaient :
– velocite XZ max : 16/1500 = 0.01 m/s (= ne bouge pas, reste colle sur place)
– velocite Y max : 1279/2200 = 0.58 m/s vers le haut
– gravite : avec la formule de AlienBulletUpdateSystem
(gravity * TICKS_PER_SECOND / 128 * tpf * TICKS_PER_SECOND), 12 unites
donnaient ~50 m/s² d’acceleration = chute supersonique.

Resultat : les bits etaient catapultes sous le sol en 2 frames sans avoir
le temps d’apparaitre. Le raycast mur de AlienBulletUpdateSystem les
detruisait immediatement quand ils traversaient le sol.

Fix

world/AiWorldAdapter.spawnSplatBits() :
XZ_VELOCITY_CAL : 1/1500 -> 1/3 (vitesse max XZ ~5.3 m/s)
Y_VELOCITY_CAL : 1/2200 -> 1/200 (impulsion Y max ~6.4 m/s)
gravity : 12 -> 4 (acceleration ~16 m/s², un peu plus que la realite
9.81 m/s² mais arc visible de ~0.5-1 sec)
– Ajout d’un toggle log diag -Dab3d2.dumpSplat=1 qui logue position
spawn + nb bits alloues. Utile pour confirmer en jeu que le splash
s’execute (le pool peut etre plein dans des cas extremes -> log donne
7 spawned ou 0 spawned).

Comment tester

./gradlew run -Dab3d2.dumpSplat=1

Tuer un Red Alien (level A par exemple). Attendu :
1. Console : ligne [SPLAT] splatType=5 at jme(X.XX, Y.YY, Z.ZZ) zone=N
suivie de [SPLAT] -> 7 bits spawned
2. Visuellement : 7 sprites Splutch3 (verts, sang acide alien) partent du
centre de l’alien dans un cone vers le haut, retombent par gravite,
et meurent au sol/mur (sprite d’impact possible).

Si le log apparait mais que rien n’est visible -> probleme de rendu sprite
(BulletSpriteRenderer cote pool alien). Si meme le log n’apparait pas ->
spawnSplatBits() n’est pas appele, verifier def.splatType() du Red
Alien (devrait etre 5).

Notes de diagnostic complementaires

  • Step-walls : sans rebuild des .j3o, le fix structurel de la session
    135 ne s’applique pas. Les logs montraient 1254 segments extraits depuis
    levelScene (5 Geometry murs)
    ce qui est la situation pre-fix. Apres
    ./gradlew buildScenes, on devrait avoir : (a) une ligne stepWalls:N
    dans la sortie buildScenes, (b) moins de segments dans le log
    AlienWallCollider, (c) des aliens qui franchissent les marches.

  • Animation de mort du Red Alien : verification de l’option 10 (DYING)
    dans definitions.json :
    [[0,1,1,0],[0,18,0,0],[0,19,0,0],[0,19,0,0],[255,3,4,0],...]. 3 sprites
    distincts joues : alien2_f0.png (idle, 1 frame), puis alien2_f17.png
    (1 frame), puis alien2_f18.png (2 frames), puis loop via end marker.
    Tous les PNG existent dans assets/Textures/objects/alien2/ (verifie :
    19 fichiers de _f0 a _f18). Aucun flip mirror dans cette option (tous
    les byte1 sont positifs). Si le user attendait plus de stades visuels
    d’explosion, c’est probablement les Splutch bits qui completaient le
    rendu original Amiga – c’est ce qu’on vient de fixer avec la calibration
    vitesses.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *