Aller au contenu principal

Session 132duodecimus (suite 13d) — Phase C portes : 1 tile par edge en largeur

Bug fix apres test utilisateur de la suite 13c

Bug observe Fix
Texture porte coupee : 2 chevrons cote a cote au lieu uM_jme = tileW/texW (= 1 tile par edge en largeur)
d’1 chevron complet

Analyse

L’utilisateur a observe sur le test de la suite 13c que la porte zone 2/5
montre 2 chevrons cote a cote alors qu’elle devrait montrer 1 seul
chevron complet
. La hauteur (vM=1) etait correcte, c’est l’axe U
horizontal
qui etait mal calibre.

Hypothese : la PNG wall_05_chevrondoor.png fait 128×128 et contient en
realite 2 chevrons cote a cote (texture LevelED qui contient 2 « tiles »
logiques de 64×128, declarees via wMask=63). En forcant uM_jme = 1
(s13c) on echantillonnait toute la PNG (= les 2 chevrons), au lieu de
1 tile (= 1 chevron).

Fix : 1 tile par edge

Dans LevelSceneBuilder.makeDoorSegGeo(), on change la formule :

// Avant (s13c) : uM_jme = 1 -> echantillonne TOUTE la texture
float uM_jme = 1f;

// Apres (s13d) : uM_jme = tileW/texW -> echantillonne 1 tile
float uM_jme = (texW>0) ? tileW/texW : 1f;

Effet :
– texW=128, tileW=64 (chevron) -> uM_jme=0.5 -> on voit 1 chevron
– texW=128, tileW=128 (autre porte) -> uM_jme=1 -> on voit la texture entiere
– texW=64, tileW=64 -> uM_jme=1 -> idem

Le tileW vient de wMask+1 du JSON, declare par LevelED (= la vraie
largeur de tile logique du jeu). Cette approche est ASM-fidele : c’est
exactement comment l’Amiga decide ou wrapper l’echantillonnage horizontal.

Ajout aussi d’un log diagnostic (system property ab3d2.dumpDoorUv=true,
on par defaut) pour calibrer si le bug revient sur d’autres portes.

Fichiers modifies

  • LevelSceneBuilder.java : uM_jme = tileW/texW dans makeDoorSegGeo
  • log diagnostic.

Tests prevus

  • Niveau A premiere porte (zone 5/2) : 1 chevron unique en largeur, pas
    2 cote a cote.
  • Mouvement (slide V) : doit toujours fonctionner (texture qui rentre
    dans le linteau).
  • Collision : toujours active porte fermee.
  • Le log au build doit afficher texW=... tileW=... pour chaque porte
    rencontree, ce qui permet de calibrer si on rencontre des cas non
    conformes.

Laisser un commentaire

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