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 :
-
Pas d’alt-fire dans l’ASM. Lecture complete de
newplayershoot.s,
plr_KeyboardControl(modules/player.s),newanims.s:
– Pas dePlr1_SecShot,alt_fire_key, logique d’alternance
– Une seule routinePlr1_Shotpar joueur
– Chaque bullet spawne avecShotT_Anim_b = 0(meme etat initial) -
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 -
Si l’utilisateur voit des variations entre tirs dans la version
originale Amiga : probablement l’animation en vol des bullets glare
(graphicType=2) viaBulT_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(taskdumpVectObjStructure)
Test attendu
./gradlew run
- Changer d’arme (touches 1-8) et observer : plus de trous visibles ?
- Tester specialement le Shotgun (touche 1) : c’est le plus visible
- Si encore des trous :
– Lancer./gradlew dumpVectObjStructure -Pname=shotgunet 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