Aller au contenu principal

Session 134bis (suite) — Lampes ceiling-attached + adoucissement lumiere

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 :

  1. Lampes/glareboxes qui flottent au lieu d’etre collees au plafond
  2. 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
    Methode addItems() : recuperation precoce de hostZone (avant utilisee
    uniquement pour zoneTint plus bas) puis usage pour positionner les ceiling
    objects. Suppression du hack +2.0f et 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_INTENSITY remontee a 0.30
  • Methode rbToIntensity() : suppression du ratio = 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)

Laisser un commentaire

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