Aller au contenu principal

Session 65 — Mantis & aliens : slots 1/2/3 decouverts (atlas 8 slots)

Symptome

Apres session 64, majorite des modeles textures correctement mais Mantis
et certains enemies/parties ont des textures incorrectes.

Diagnostic via VectObjTextureScan

Scan des 112 polygones du Mantis revele :
TOUS utilisent texOffset = 0x8302 ou 0x8303 (bank 1, col 192, row 0)
– Brightness=100 sur tous

Decouverte

0x8302 = relOfs 770 = 192*4 + 2lane=2 (et pas lane=0).
0x8303 = relOfs 771 = 192*4 + 3lane=3.

L’ASM move.b (a0, d0.w*4), d3 avec d0=(U<<8)|V lit toujours dans le MEME
slot. Si a0 est aligne sur lane 2, tous les samples viennent du slot 2 du
buffer, jamais du slot 0.

Nouvelle theorie validee (via TextureLayoutExplorer)

Chaque banque de 64KB contient 4 textures differentes interleaved
byte-par-byte
:

  Slot 0 : bytes 0, 4, 8, 12, ...
  Slot 1 : bytes 1, 5, 9, 13, ...
  Slot 2 : bytes 2, 6, 10, 14, ...
  Slot 3 : bytes 3, 7, 11, 15, ...

2 banques * 4 slots = 8 textures de 256×64 au total.

Validation visuelle (all_slots.png) : on voit enfin TOUTES les
textures du jeu (panneaux EXIT, boutons numeriques, logo radioactif,
circuits imprimes, claviers 0-9, segments mecaniques, peau alien…)
au lieu d’un seul slot.

Dans les sessions precedentes on ne rendait QUE le slot 0, ce qui
explique pourquoi les aliens et un tas d’objets etaient mal mappes.

Corrections appliquees

TextureMapConverter.java :
renderSlot(texData, shade, pal, bank, slot) : nouvelle methode generalisee
renderBank() devient un alias pour renderSlot(..., slot=0) (API compat)
– Atlas PNG final : 256×512 (8 tuiles 256×64 empilees verticalement)
texOffsetToSlot(texOffset) : retourne 0..3
texOffsetToAtlasTile(texOffset) : retourne 0..7 (bank*4 + slot)
sampleColor() corrige pour inclure le slot dans le byte offset

VectObjConverter.java :
– UVs normalisees sur l’atlas 256×512 via texOffsetToAtlasTile()
– Chaque polygone pointe sur sa tile (0..7) au lieu d’une banque (0..1)

Outils

  • VectObjTextureScan (NOUVEAU) : scan les texOffsets d’un vectobj +
    genere atlas annote PNG. Usage : ./gradlew scanVectObjTex -Pvectobj=Mantis
  • TextureLayoutExplorer reecrit : rend les 4 slots de chaque banque en
    PNG separes + atlas combine all_slots.png.

Pipeline

./gradlew convertTextureMaps  # regenere l'atlas 256x512 avec les 8 tuiles
./gradlew convertVectObj      # regenere les .j3o avec les bons UV
./gradlew run                  # verifier visuellement le Mantis

Verification attendue

  • assets/Textures/vectobj/texturemaps_atlas.png = 256×512, avec 8 zones
    de textures distinctes
  • Le Mantis affiche enfin une vraie texture d’alien (pas du metal gris)
  • Tous les objets qui utilisaient les slots 1/2/3 sont correctement mappes

Statut final session 65

VALIDE : atlas 8 slots genere avec les 32 textures reconnaissables
(EXIT, claviers, circuits, peau alien…). Mantis et autres modeles utilisant
slots 1/2/3 maintenant mappes sur les bonnes textures.

Residuel : certaines textures sont encore mal positionnees ou mal orientees
sur quelques polygones. Hypotheses a investiguer en session suivante :
– Flip U/V ou axes inverses sur certains modeles
– Interpretation signee vs non-signee des bytes U,V vertex
– Wraparound/modulo 64 sur row_final pour polygones qui debordent

Laisser un commentaire

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