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 montraient1254 segments extraits depuisce qui est la situation pre-fix. Apres
levelScene (5 Geometry murs)
./gradlew buildScenes, on devrait avoir : (a) une lignestepWalls: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)
dansdefinitions.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), puisalien2_f17.png
(1 frame), puisalien2_f18.png(2 frames), puis loop via end marker.
Tous les PNG existent dansassets/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.