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.