Aller au contenu principal

Session 132duodecimus (suite 14) — Aliens : collision radius doublé, fix passage portes

Bug : aliens trop gros pour passer les portes

Après s13h (porte traversable par le joueur), l’utilisateur signale que les
aliens le voient à travers la porte (LOS OK grâce à s13h) mais ne peuvent
pas le suivre physiquement. Hypothèse confirmée par lecture ASM :

diststowall:
    dc.w  0, 40       <- girth=0 (mince)  : ExtLen = 40 unites
    dc.w  1, 80       <- girth=1 (normal) : ExtLen = 80 unites
    dc.w  2, 160      <- girth=2 (large)  : ExtLen = 160 unites

Notre AlienDef.collisionRadius() retournait 80/160/320, soit 2x trop
large
. Origine probable : confusion avec une convention SCALE=32 antérieure
(avant la sess 132 ou XZ_SCALE est passé à 64).

Conséquence sur les portes

Pour une porte de 2m JME (= 128 unités X/Z Amiga) :

girth ASM (40/80/160) Notre code (80/160/320) Verdict notre code
0 mince 0.625 m JME 1.25 m JME bloqué (besoin 2.5m)
1 normal 1.25 m JME 2.5 m JME bloqué (besoin 5m)
2 large 2.5 m JME 5 m JME bloqué (besoin 10m)

Avec les vraies valeurs ASM, l’alien girth=0 passe une porte de 2m
(besoin 1.25m), girth=1 passe une porte de 2.5m+, etc. Beaucoup plus
cohérent avec la géométrie des niveaux du jeu original.

Fix

// AlienDef.java::collisionRadius()
return switch (girth) {
    case 0 -> 40;     // mince  (etait 80)
    case 1 -> 80;     // normal (etait 160)
    case 2 -> 160;    // large  (etait 320)
    default -> 80;
};

Lien avec l’ancien bug canPass (s13h)

Les deux bugs combinés donnaient un symptôme « alien passif derrière la
porte » :
1. canPass inversé (s13h) : le rbc Bullet de la porte restait actif,
le LOS des aliens était bloqué → ils ne voyaient pas le joueur →
ils restaient en patrouille.
2. collisionRadius doublé (s14) : même quand un alien voyait le joueur
et essayait de le suivre, son rayon de collision rendait le passage
physiquement impossible.

Le fix s13h résoud le LOS, le fix s14 résoud le mouvement.

Fichiers modifiés

  • AlienDef.java :
  • collisionRadius() : 80/160/320 → 40/80/160
  • JavaDoc complète avec extrait ASM et tableau des conversions JME

Tests prévus

  • Zone 10 (level A) : approcher la porte, vérifier que les aliens
    derrière franchissent enfin.
  • Test général : aucun alien coincé dans des passages étroits qu’il pouvait
    déjà traverser dans le jeu original.
  • Risque : un alien girth=0 un peu trop « mince » passera dans des espaces
    où il ne devrait pas. À vérifier visuellement dans 1-2 niveaux test.

Laisser un commentaire

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