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
./gradlew buildScenespour regenerer les .j3o- Tester en jeu Level A zone 0 -> doit afficher 3 ventilateurs comme l’Amiga
- Verifier les longs couloirs ne sont pas trop etires (notamment zone 3,
zone 63, zone 73 qui ont des murs > 9 m JME) - 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.