Resume
Faisant suite aux fixes progression (porte exit / pickup / ejection alien), deux
problemes visuels corriges suite a feedback utilisateur sur le rendu LEVEL_A
zone 87 :
- Lampes/glareboxes qui flottent au lieu d’etre collees au plafond
- Eclairage « tout ou rien » trop contraste entre zones sombres et brillantes
Fix 1 — Position des objets ceiling-attached
Cause : LevelSceneBuilder.addItems utilisait un hack +2.0f (= place le
sprite ~2m au-dessus du sol de la zone) au lieu de la vraie hauteur du plafond.
Pour un glarebox dans la zone 86 (LEVEL_A, sol Amiga 48 = JME -1.5m, plafond
Amiga -264 = JME +8.25m), le hack donnait jy = +0.5m JME, soit le sprite a
mi-hauteur de la piece au lieu d’etre colle au plafond a +8.25m.
Fix ASM-fidele (newaliencontrol.s : EntT_YPos_l d’un objet avec
floorCeiling=1 suit ZoneT_Roof_l) : utiliser hostZone.roofH() du
record ZD pour positionner le sommet du sprite au plafond reel. La formule
devient :
if (isCeiling) {
float roofY = -hostZone.roofH() / Y_SCALE;
jy = roofY - spriteH * 0.5f; // sprite top AT le plafond
}
- MODIFIED :
src/main/java/com/ab3d2/tools/convert/LevelSceneBuilder.java
MethodeaddItems(): recuperation precoce dehostZone(avant utilisee
uniquement pour zoneTint plus bas) puis usage pour positionner les ceiling
objects. Suppression du hack+2.0fet fallback de securite si zone absente.
Fix 2 — Adoucissement de l’eclairage « tout ou rien »
Cause : BrightnessCalc.rbToIntensity avait :
– MIN_INTENSITY = 0.10f (= zones sombres quasi-noires)
– Courbe quadratique ratio = ratio * ratio (= amplification contraste)
Combines, ces deux choix donnaient un effet binaire : soit lampe brillante
a 1.0 (= blue panels du screenshot), soit mur sombre a 0.10 (= gaps entre
panels presque noirs). Aucune transition douce visible.
Fix : recalibration empirique
– MIN_INTENSITY : 0.10 -> 0.30 (les zones sombres restent lisibles)
– Courbe : quadratique -> lineaire (= rampe douce sans amplification)
Valeurs visibles apres fix :
– Wb=0, Lb=0 -> intensity=0.32 (zone sombre, avant 0.10)
– Wb=22, Lb=1 -> intensity=0.45 (avant 0.14)
– Wb=22, Lb=20 -> intensity=0.60 (avant 0.27)
– Wb=95, Lb=20 -> intensity=0.98 (inchange)
Les lampes pulsent toujours visiblement (delta animation 0.15-0.16 dans toutes
les plages) mais la base ambient est plus douce.
- MODIFIED :
src/main/java/com/ab3d2/world/BrightnessCalc.java - Constante
MIN_INTENSITYremontee a 0.30 - Methode
rbToIntensity(): suppression duratio = ratio * ratio
Procedure de validation
# Le fix est dans LevelSceneBuilder + BrightnessCalc qui sont tous deux
# utilises au BUILD du .j3o (les intensites sont baked dans les vertex colors).
# Donc il faut regenerer les scenes.
.\gradlew compileJava buildScenes
.\gradlew run
Tests attendus (zone 87 LEVEL_A) :
– Les glareboxes des zones 86/88 doivent etre attachees au plafond (= en
hauteur, plus pres de la cobblestone-ceiling) au lieu de flotter a hauteur
d’epaule du joueur.
– Le contraste entre les blue panels pulsants et les murs sombres autour
doit etre moins fort. Floor / ceiling sans lampe doivent rester visibles.
Fichiers touches
MOD src/main/java/com/ab3d2/tools/convert/LevelSceneBuilder.java (Fix 1)
MOD src/main/java/com/ab3d2/world/BrightnessCalc.java (Fix 2)