Aller au contenu principal

Session 32 — Fix sols + step walls (floorIdx + linteaux/marches)

Bug 1 : floorIdx() formule incorrecte

Le whichTile dans le binaire est l’OFFSET MEMOIRE dans la banque floortile,
pas un index direct. Format AMOS (_FLOOR2SCREEN) :

S = ADR + (NR mod 4) + ((NR/4) and 3)*256

Donc l’inverse : NR = (whichTile >> 8) * 4 + (whichTile & 3)

Verification avec level_A.json :
| whichTile | hex | NR calcule | Texture |
|———–|——-|————|—————-|
| 513 | 0x201 | 9 | floor_10.png |
| 257 | 0x101 | 5 | floor_06.png |
| 769 | 0x301 | 13 | floor_14.png |
| 1 | 0x001 | 1 | floor_02.png |
| 0 | 0x000 | 0 | floor_01.png |

Bug 2 : murs de marche et linteaux non rendus

Avant : si oz!=0 et abs(botH) > 8 -> sl++ (saut, rien rendu)
Avant : si oz!=0 et abs(botH) <= 8 -> portail/porte (toujours, meme step)

Apres : distinction porte reelle / mur de marche par la HAUTEUR :
abs(botH) <= 8 et wallHeight >= 64 -> porte (panneau animable)
– Tout le reste -> rendu comme geometrie statique

Exemples corrects :
– Zone 131-132 chevrondoor h=192 -> porte (ajoute a dg) OK
– Zone 7-6 step h=24 -> mur de marche (rendu geometrie) OK
– Zone 34-35 step h=16 -> mur de marche (rendu geometrie) OK
– Zone 34-35 linteau abs(bot)=160 -> linteau (rendu geometrie) OK

Workflow :

./gradlew buildScenes   # pas besoin de convertAssets si deja fait
./gradlew run

Laisser un commentaire

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