Aller au contenu principal

Session 90 — Fix trous arme : activation du depthTest + diagnostic structure

Decouverte majeure

Apres lecture complete de VectObjConverter.java : le code fait DEJA un
Geometry par Part du vectobj !
L’architecture multi-parts conforme a
l’ASM existe deja en coulisses :

// Dans convert() :
for (int pi = 0; pi < parts.size(); pi++) {
    Geometry geo = buildGeometryIdx(name + "_part" + pi, tris, points);
    root.attachChild(geo);  // <- un Geometry distinct par part
}

Donc le probleme des trous ne vient pas de l’ordre des parts (JME les
trie via Bucket.Transparent). Il vient du depthTest=false dans
fixWeaponMaterials qui empeche le z-buffer de fonctionner :
– Entre les triangles d’une meme part : pas de tri -> ordre du buffer
– Entre les Geometries (parts) : tri JME, mais sans z-test les triangles
dessines en premier peuvent etre ecrases par ceux dessines ensuite

Investigation alt-fire Laser : clos

Observation utilisateur initiale : « quand on clique plusieurs fois sur le
laser on change de mode ». Precision utilisateur : il confondait avec le
fait qu’il y a deux armes plasma dans sa memoire (plasma single shot et
plasma multishot).

Verdict apres investigation exhaustive :

  1. Pas d’alt-fire dans l’ASM. Lecture complete de newplayershoot.s,
    plr_KeyboardControl (modules/player.s), newanims.s :
    – Pas de Plr1_SecShot, alt_fire_key, logique d’alternance
    – Une seule routine Plr1_Shot par joueur
    – Chaque bullet spawne avec ShotT_Anim_b = 0 (meme etat initial)

  2. Pas de Plasma multishot dans ce GLF. Le dump GLF de TEST.LNK confirme :
    Gun 1 = « Plasma Gun » : bulletType=0 (Plasma Bolt), count=1,
    single shot uniquement
    – Gun 8 (« GUN I ») et Gun 9 (« GUN J ») sont des placeholders (count=0)
    – Il existe des bullets MegaPlasma (13), Assault Lazer (10) mais elles ne
    sont attribuees a aucune arme player dans ce GLF

  3. Si l’utilisateur voit des variations entre tirs dans la version
    originale Amiga : probablement l’animation en vol des bullets glare
    (graphicType=2) via BulT_AnimData_vb (20 frames). Chaque frame a
    potentiellement un sprite different.

Conclusion : pas d’alt-fire a implementer. Point ferme definitivement.

Fix applique

WeaponViewAppState.fixWeaponMaterials() :
depthTest : false -> true (active le z-test entre triangles)
FaceCullMode : inchange (reste Off)
Bucket.Transparent : inchange

Nouveaux outils

VectObjStructureDump.java : diagnostic pour verifier la structure d’un
.j3o vectobj. Montre combien de Geometries (parts), triangles, vertices, et
le render state de chacun.

Task Gradle dumpVectObjStructure -Pname=shotgun :

./gradlew dumpVectObjStructure -Pname=shotgun

Utile pour valider :
1. Que le shotgun est bien multi-parts (attendu 3-8 parts)
2. Que le render state est bien applique (depthTest=true apres ce fix)
3. Que les frames d’animation sont bien stockees (UserData)

Fichiers modifies / crees

  • src/main/java/com/ab3d2/weapon/WeaponViewAppState.java (depthTest=true)
  • src/main/java/com/ab3d2/tools/VectObjStructureDump.java (NEW)
  • build.gradle (task dumpVectObjStructure)

Test attendu

./gradlew run
  1. Changer d’arme (touches 1-8) et observer : plus de trous visibles ?
  2. Tester specialement le Shotgun (touche 1) : c’est le plus visible
  3. Si encore des trous :
    – Lancer ./gradlew dumpVectObjStructure -Pname=shotgun et me donner la sortie
    – Sinon passer au plan B (Bucket.Gui ou ViewPort dedie)

Si ca marche

  • ✅ Point 7 (ordre triangles arme) : regle
  • ✅ Point 11 (2 comportements tir) : resolu (rien a faire, pas d’alt-fire)
  • On passe aux points restants : lumiere murs, portes physiques,
    textures murs/portes, slots 0/9, animations tir

Laisser un commentaire

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