Demande user
« Ce sont les objects dans les niveaux, que ce soit monstres, items, clés,
interrupteurs…, il ne sont pas souvent à la bonnes hauteurs »
Diagnostic
Dans LevelSceneBuilder.addItems(), la taille visuelle du sprite (et donc
sa position Y centree) etait calculee comme colHeight / Y_SCALE (= /32).
Avec les valeurs JSON :
| Alien | height | /32 (Y_SCALE) | /64 (XZ_SCALE) |
|---|---|---|---|
| Red Alien | 128 | 4 m ❌ | 2 m ✓ |
| Guard | 160 | 5 m ❌ | 2.5 m ✓ |
| Mantis Boss | 800 | 25 m ❌ | 12.5 m ✓ |
| Triclaw | 45 | 1.4 m | 0.7 m ✓ |
| Droid | 40 | 1.25 m | 0.6 m ✓ |
| Wasp Boss | 200 | 6.25 m ❌ | 3.1 m ✓ |
| AlienPriest | 256 | 8 m ❌ | 4 m ✓ |
Aliens 2x trop grands -> centre du sprite trop haut -> aliens « flottent ».
Cause racine
L’ASM stocke AlienT_Height_w et ODefT_CollideHeight_w en Y editor units
(32 units/m), mais ces valeurs servent UNIQUEMENT pour la collision
verticale, PAS pour la taille visuelle. Reference
newaliencontrol.s::ItsAnAlien :
move.w AlienT_Height_w(a1),d0
ext.l d0
asl.l #7,d0 ; * 128
move.l d0,thingheight ; -> Plr1_CheckObjectCollide / pass-through tests
La vraie taille visuelle ASM vient de la frame data
(GLFT_AlienAnims_l[idx][option][frame].scale, byte 2-3 de chaque frame).
Fix
Dans LevelSceneBuilder.addItems() :
// AVANT
float spriteH = (colHeight > 0) ? colHeight / Y_SCALE : DEFAULT_SPRITE_H;
// APRES
float spriteH = (colHeight > 0) ? colHeight / XZ_SCALE : DEFAULT_SPRITE_H;
Fix pragmatique : XZ_SCALE = 64 au lieu de Y_SCALE = 32. Donne empiriquement
des proportions plausibles pour tous les aliens (cf. tableau ci-dessus). Ce
fix s’applique a la fois aux sprites bitmap et aux modeles vectobj (qui
utilisent spriteH comme targetH dans tryLoadVectObj).
La formule de position Y jy = -y / Y_SCALE + spriteH * 0.5f reste
inchangee pour la partie floor (y = zone.floorH est bien en Y units), mais
l’offset spriteH * 0.5f est maintenant 2x plus petit -> sprite mieux pose
sur le sol.
A faire pour valider
./gradlew buildScenespour regenerer les .j3o de tous les niveaux- Tester en jeu Level A (et autres) : Red Alien doit faire ~2m, Guard
~2.5m, Mantis Boss ~12m -> proportions humanoides correctes - Calibrer si besoin (autres facteurs possibles : /48, /50, /56)
Limitations connues
- Le port complet du frame scaling ASM (lecture du byte 2-3 de chaque frame
deAlienAnims_lpour la taille visuelle reelle) est ulterieur. La
division par XZ_SCALE est une approximation. - Les aliens « qui volent » (Wasp Boss, etc.) flottent toujours au sol et pas
en l’air : le worldY n’est pas encore pris en compte dans le runtime
(AlienControlSystemfige Y au spawn). Voir TODO 2.F dans le code. - Le bug « pas la bonne couleur » et « il leur manque des elements » (rapporte
en meme temps par user) n’est pas adresse dans cette suite, sera traite
dans une session ulterieure.