Resume
Les objets dont ODefT_Behaviour_w == 3 (ENT_TYPE_DECORATION dans
defs.i:282) sont désormais traités comme un cas explicite dans
LevelSceneBuilder.addItems, fidèle au handler ASM
newaliencontrol.s::Decoration (label ~ligne 480, dispatch depuis
cmp.w #ENT_TYPE_DECORATION ~ligne 100).
Le comportement décodé du handler original :
ObjT_ZoneID_w < 0→ rts (objet hors zone, ignoré)ShotT_Worry_bnon armé → rts (inerte tant que non « worried »)- sinon : snap Y sur
ZoneT_Floor_louZoneT_Roof_lselon
ODefT_FloorCeiling_w(offset +18 de ODefT, cf.defs.i:202), avec
variantesZoneT_UpperFloor_l/ZoneT_UpperRoof_lselon
ShotT_InUpperZone_b; puisasr.l #7,d0(= /128) pour repasser de
coordonnée monde à coordonnée objet (ObjT_ZPos_l) ; puisbsr DEFANIMOBJ
pour la lecture de l’anim par défaut.
Cote remaster
- Snap Y appliqué UNE FOIS au build (les surfaces mobiles type lift sont
hors-scope V1). Le branchement floor/ceiling existait déjà via
def.floorCeiling(); on documente explicitement la fidélité ASM. - Aucun
PhysicsControlni Control de gameplay n’est attaché : la
décoration est un Spatial purement visuel (+BillboardControlaxial Y
pour les sprites 2D, modèle JME chargé viatryLoadVectObj()pour les
vectobj). - Marqueur
UserData entType="DECORATION"posé sur le node : les
systèmes runtime (PickupSystemfiltre déjàbehaviour != 0,
AlienHitDetectoritère la liste alien séparée,BulletUpdateSystem
ne touche pas l’itemsNode pour les collisions) peuvent court-circuiter
toute interaction sur ce tag.
TODOs explicites
- Upper-zone :
ShotT_InUpperZone_bn’est pas exposé sur les objets
dansLevelBinaryParser. Les décorations sur étage haut se posent au
sol bas de leur zone (acceptable V1, à reprendre quand on en verra
visuellement).ZD.upperFloorH()est dispo si besoin. - Idle anim :
DEFANIMOBJ(newaliencontrol.s:808-870) joue l’anim
par défaut indexée parEntT_Type_bdansGLFT_ObjectDefAnims_l.
Côté JME, les vectobj sont chargés statiques (.j3o). À brancher quand
VectObjFrameAnimControlsupportera un mode « anim idle ».
Verification
- Level A actuel : 1 RoofGlare (
defIndex=13, gfxType=2 glare sprite,
ceiling) + 4 glareboxes (defIndex=14, gfxType=1 vectobj, ceiling) =
5 décorations placées, calées au plafond de leur zone hôte. ./gradlew buildOK,./gradlew runlance le niveau A sans
régression visible (les décorations existaient déjà au rendu, on
formalise leur traitement).