Symptôme
Après session 108, l’entrée du lift est ouverte (fix #1 OK), mais en
entrant dans la cabine on voit que les parois latérales (les lift_side_*)
portent la texture du sol (= floor_02 beige pour zone 104), pas la
texture chevron jaune/noir typique des ascenseurs Alien Breed.
Diagnostic
Les vrais walls de zone 104 dans le JSON ont tous clipIdx=5 (=
wall_05_chevrondoor, la texture chevron), mais le code session 99
créait les sides avec liftMat (= matériau du sol). Le commentaire de
l’époque le notait déjà :
// Pour zone 104 : floor_03 ou similaire (chevron jaune si possible).
// On reutilise liftMat pour la coherence visuelle.
Mais floor_03 n’est pas le bon, et de toutes façons un sol n’a pas
les bonnes proportions (= horizontal) pour servir de paroi.
Fix
Dans la création des liftNodes, juste avant la boucle de création des
sides : récupérer le clipIdx du premier wall de la zone-lift et
utiliser wm[clipIdx] comme matériau des sides :
Material sideMat = liftMat; // fallback
List<int[]> liftZoneWalls = zw.get(zid);
if (liftZoneWalls != null && !liftZoneWalls.isEmpty()) {
int sideClipIdx = liftZoneWalls.get(0)[6];
if (sideClipIdx >= 0 && sideClipIdx < NUM_WALL_TEX && wm[sideClipIdx] != null) {
sideMat = wm[sideClipIdx];
}
}
Aussi, normalisation des UV en tile-units (L2 / sideTileSize,
sideHeight / sideTileSize) avec sideTileSize = (wMask + 1) / SCALE
(= 4 JME pour une tile 128px). Sans cette normalisation, la texture
chevron était étirée de plusieurs fois sa taille réelle.
Pour tester
./gradlew buildScenes run
Observation : en entrant dans le lift, les 4 parois latérales ont
maintenant la texture chevron jaune/noir caractéristique. Le pattern
se répète correctement (~1 chevron en largeur d’un seg de 4 JME, ~3
en hauteur sur la course du lift).
Fichiers modifiés
tools/LevelSceneBuilder.java: création des liftNodes- récupération de
sideMatdepuis le clipIdx du premier wall - normalisation UV par
sideTileSize - utilisation de
sideMat(au lieu deliftMat) dans les Geometry
lift_side_*