Aller au contenu principal

Session 132 (suite) — Centralisation WorldScale + fix bugs collision

Contexte

Apres validation visuelle du test isole de la session 132 (XZ_DIV=3 via
system property), application du fix definitif et propre :

  • Creation de la classe centrale {@code world/WorldScale.java} (Y_SCALE=32,
    XZ_SCALE=64, WALL_TEXEL_TO_XZ=2) avec helpers de conversion (worldXToJme,
    worldZToJme, worldYToJme, etc.).
  • Migration de tous les fichiers qui faisaient des conversions Amiga<->JME
    pour utiliser ces helpers/constantes au lieu de dupliquer un SCALE local.

Bugs reels corriges (= changement de semantique)

Fichier Bug avant Effet visible
combat/AlienHitDetector.java SCALE=32f pour XZ (devrait etre 64) Aliens consideres 2x plus proches qu’en realite -> faux hits frequents, balles passaient « a cote » mais le code croyait toucher
world/PickupSystem.java SCALE=32f pour XZ ET Y (XZ devrait etre 64) Rayon de pickup horizontal 2x trop grand : items se ramassaient avant d’arriver dessus visuellement
world/LevelGeometry.java SCALE=32f partout (fallback geometry) Meme bug que LevelSceneBuilder pre-session 132 : niveau 2x trop large/profond. Active uniquement quand .j3o absent (fallback)

Nettoyage (memes constantes, just centralisees)

Fichier Avant Apres
tools/LevelSceneBuilder.java constantes locales {@code Y_SCALE/XZ_SCALE/WALL_TEXEL_TO_XZ} alias prives vers {@code WorldScale.*} (evite de reecrire toutes les divisions inline)
world/AlienControlSystem.java alias local {@code XZ_SCALE = WorldScale.XZ_SCALE} suppression, usage direct {@code WorldScale.worldXToJme/Z()}
world/AiWorldAdapter.java {@code @Deprecated SCALE} dangling note explicite « plus utilise en interne, conserve pour compat »
world/LiftControl.java {@code (zlOpenSpd / 32f) * 25f} hardcode {@code (zlOpenSpd / WorldScale.Y_SCALE) * 25f} (vitesse verticale du lift)
world/DoorControl.java {@code (effectiveRise * 32f) / tileH} hardcode {@code (effectiveRise * WorldScale.Y_SCALE) / tileH} (V shift texture)

Verifications hors-scope (rien a faire)

  • core/PlayerState.java : pure Amiga units, aucun SCALE involved.
  • core/level/ZoneTraversal.java : maths en Amiga, jamais converti.
  • world/AnimBrightnessSystem.java : vertex colors RGB, pas de coords spatiales.
  • world/AlienWallCollider.java : ne manipule que des coords JME, rayon recu en parametre.
  • combat/WorldRaycaster.java, BulletUpdateSystem.java, AlienBulletUpdateSystem.java,
    HitscanTracerSystem.java, ImpactEffectSystem.java : tout en unites JME, pas de SCALE.
  • core/BobController.java : amplitudes JME en dur, pas de conversion.

Comment tester

./gradlew compileJava   # verif syntaxique apres refactor
./gradlew buildScenes   # rebuild les .j3o avec XZ_SCALE=64 (default)
./gradlew run           # in-game : aliens hit detection correcte, pickups au bon rayon

Le test obsolete {@code action.custom-42=buildDiv} (-Dab3d2.xzDiv=3) reste
disponible dans gradle.properties pour diagnostic ponctuel mais le defaut
(no-op) est maintenant le comportement correct.

Laisser un commentaire

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