Aller au contenu principal

Intégration explicite des décorations vectobj (ENT_TYPE_DECORATION)

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 :

  1. ObjT_ZoneID_w < 0 → rts (objet hors zone, ignoré)
  2. ShotT_Worry_b non armé → rts (inerte tant que non « worried »)
  3. sinon : snap Y sur ZoneT_Floor_l ou ZoneT_Roof_l selon
    ODefT_FloorCeiling_w (offset +18 de ODefT, cf. defs.i:202), avec
    variantes ZoneT_UpperFloor_l/ZoneT_UpperRoof_l selon
    ShotT_InUpperZone_b ; puis asr.l #7,d0 (= /128) pour repasser de
    coordonnée monde à coordonnée objet (ObjT_ZPos_l) ; puis bsr 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 PhysicsControl ni Control de gameplay n’est attaché : la
    décoration est un Spatial purement visuel (+BillboardControl axial Y
    pour les sprites 2D, modèle JME chargé via tryLoadVectObj() pour les
    vectobj).
  • Marqueur UserData entType="DECORATION" posé sur le node : les
    systèmes runtime (PickupSystem filtre déjà behaviour != 0,
    AlienHitDetector itè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_b n’est pas exposé sur les objets
    dans LevelBinaryParser. 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 par EntT_Type_b dans GLFT_ObjectDefAnims_l.
    Côté JME, les vectobj sont chargés statiques (.j3o). À brancher quand
    VectObjFrameAnimControl supportera 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 build OK, ./gradlew run lance le niveau A sans
    régression visible (les décorations existaient déjà au rendu, on
    formalise leur traitement).

Laisser un commentaire

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