Aller au contenu principal

Session 132duodecimus (suite 12) — WALL_TEXEL_TO_XZ = 4.0 (calage Amiga)

Demande user

Verification visuelle directe : screenshot WinUAE du jeu Amiga ORIGINAL
fourni par l’utilisateur, montrant le mur de casiers de zone 0 Level A
(texture {@code wall_04_brownspeakers}, mur pt2 -> pt4, 5.66 m JME).

Constat

  • Amiga original : 3 ventilateurs visibles sur le mur (= 1 seule
    copie de la texture 128×128 etiree)
  • Port avec WALL_TEXEL_TO_XZ=2.0 (valeur litterale du README.md du jeu) :
    6 ventilateurs visibles (= 2 repetitions de la moitie gauche de la texture)

Diagnostic

La texture PNG {@code wall_04_brownspeakers.png} est bien 128×128
(verifie par l’image partagee par le user) et contient 3 ventilateurs.
Le mur fait 362 X/Z = 5.66 m JME.

Formule actuelle : {@code numRepeats = ceil(len / (tileWidth * WALL_TEXEL_TO_XZ))}

WALL_TEXEL_TO_XZ xzPerTile numRepeats(362) Visuel
0.5 (132bis) 64 6 Texture aplatie, ~6+ casiers
2.0 (132duo s11) 256 2 6 ventilateurs (2x les 3 originaux)
4.0 (132duo s12) 512 1 3 ventilateurs comme l’Amiga

La doc README.md indique « every 256 X/Z = 1 repeat » (= 2.0) mais ce chiffre
théorique ne matche pas le comportement reel observe sur Amiga via WinUAE.
L’analyse statique de l’ASM (hireswall.s, draw_wall.s) ne permet pas de
retrouver la formule exacte de delta U car {@code WD_LeftBM_w / WD_RightBM_w}
sont calcules dynamiquement dans le pipeline de projection 3D, pas stockes
dans le binaire de niveau. On adopte donc la valeur empirique calee sur
l’observation visuelle.

Fix

Dans {@code WorldScale.java} :

// AVANT (132duo s11, theorique)
public static final float WALL_TEXEL_TO_XZ = 2.0f;

// APRES (132duo s12, empirique Amiga)
public static final float WALL_TEXEL_TO_XZ = 4.0f;

Documentation mise a jour dans WorldScale (justification complete) et
LevelSceneBuilder (commentaire d’echelles).

Impact attendu

  • Une tile 128×128 couvre 8 m JME (au lieu de 4 m)
  • Aspect ratio U:V = 1:2 (texture 2x plus etiree horizontalement que
    verticalement) – typique des couloirs Alien Breed 3D ou les bandeaux
    de mur sont longs et lisses
  • Les murs courts (zone 0, zone 1, zone 4 step) : 1 seule copie de la texture
  • Les murs moyens (zone 2, zone 3 panneau, zone 4 ouverture) : 1-2 copies
  • Les longs couloirs (zone 3 mur principal 815 X/Z, zone 9 idem) : 2 copies
    (au lieu de 4 avant)
  • Les portes (makeDoorSegGeo) et lifts (sideTileUSize) heritent du nouveau
    ratio via la meme constante WALL_TEXEL_TO_XZ

A faire pour valider

  1. ./gradlew buildScenes pour regenerer les .j3o
  2. Tester en jeu Level A zone 0 -> doit afficher 3 ventilateurs comme l’Amiga
  3. Verifier les longs couloirs ne sont pas trop etires (notamment zone 3,
    zone 63, zone 73 qui ont des murs > 9 m JME)
  4. Si certains murs paraissent trop etires, on pourra ajuster avec une
    valeur intermediaire (ex. 3.0)

Note ASM

La doc README originale est conservee dans les commentaires comme reference
theorique, mais la valeur empirique 4.0 prevaut car elle matche le
comportement visuel reel du jeu sur Amiga. C’est conforme a l’instruction
generale du projet (« colle-toi au comportement de l’ASM/C ») car ce qui
compte c’est ce que fait le jeu, pas ce que dit la doc.

Laisser un commentaire

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