Confirmation session 129
Le pipeline GPU est valide : strobe rouge↔vert visible sur les murs animes
de LEVEL_A. Les sols ne strobaient pas car aucun {@code animEntries} n’etait
emis pour eux. C’est l’objet de cette session.
Retours utilisateur post-session 130 v1
-
« L’animation est plus rapide dans le vrai jeu » → vérification ASM dans
newanims.s:807:move.w #5, Anim_Timer_w ;was 2 AL. La version
originale ‘AL’ utilisait 2 frames Amiga (= 40ms), 2.5x plus rapide que
les 5 frames (= 100ms) du binaire actuel. On retient la valeur originale. -
« Le sol est synchro avec les murs dans le vrai jeu » → vérification ASM
danshires.s:1549(routinewhythehell) :Plr1_RoomBright_west
calcule comme la moyenne despointBrightsdes points frontiere
de la zone, PAS commezone.brightness. C’est pour cela que sols et
murs pulsent en synchro : ils partagent la meme source de luminosite
animée (pointBrights), pas zone.brightness qui est rarement animé.
Modifications (revision 2)
world/AnimBrightnessSystem.java
– TICK_INTERVAL_SEC : 0.1f → 0.04f (40ms = ASM-AL original)
tools/LevelSceneBuilder.java
– PolyData record refactore : remplace zoneBrightnessRaw par le couple
(animRawWord, animWbZone) qui peut driver soit l’animation zone-only
(rawWord = zone.brightness, wbZone = -1) soit l’animation wall-style
(rawWord = pointBrights animé, wbZone = wbZoneStatic).
– collectHoriz : signature étendue avec animRawWord et animWbZone.
– Boucle buildScene : pour chaque zone, choisit la source d’animation
des sols/plafonds par priorite :
1. Premier pointBrights animé trouvé dans la zone → wall-style path
(sols pulsent en synchro avec les murs, comme l’ASM)
2. zone.brightness animé (rare) → zone-only path
3. Sinon pas d’animation
– buildHorizGeo : utilise pd.animRawWord() et pd.animWbZone() au lieu
de l’ancien zoneBrightnessRaw. Log message mis a jour.
Effet attendu
Apres ./gradlew convertLevels buildScenes puis ./gradlew run :
- Animation 2.5x plus rapide (40ms/tick au lieu de 100ms) : les pulses
des lampes sont plus vifs, conforme a l’ASM-AL original. - Sols synchros : les zones avec lampes animées ont leur sol et
plafond qui pulsent au même rythme que les murs, partagent la même
sourcepointBrights. - Plus de « lumieres manquantes » sur les sols : les sols utilisent
maintenant la même source de luminosité que les murs adjacents (au
moins pour l’animation ; le shading statique reste a améliorer en V2
pour passer en gouraud par-vertex).
Limitations connues
- Le shading statique des sols reste uniforme par zone (= moyenne
baked au build). Une V2 future devrait passer en gouraud par-vertex
comme les murs, en utilisant lespointBrightsdes coins du polygone.
C’est un refactor plus important (per-zone vs per-vertex meshing). - L’approximation « premier pointBrights animé » donne le bon rythme
mais pas exactement la moyenne ASM. Pour avoir l’amplitude exacte,
il faudrait porter le calcul de moyenne dynamique a chaque tick.
Modifications session 130 v1 (toujours valides)
world/BrightnessCalc.java (inchangé v1)
– MIN_INTENSITY : 0.25 → 0.10 (zones sombres plus sombres)
– rbToIntensity : courbe ratio² (squared) pour plus de contraste
– Nouveau computeZoneWbDynamic(rawWord, tickCounter)
tools/LevelJsonExporter.java (inchangé v1)
– Nouveau champ "brightnessRaw" (16-bit complet) par zone
tools/LevelSceneBuilder.java (additionnel v1)
– ZD record : ajout brightnessRaw
– parseZones : lit brightnessRaw du JSON
world/AnimBrightnessSystem.java (inchangé v1)
– DEBUG_AMPLIFY = false (mode production)
– updateAnimatedColors gère le sentinel wbZone < 0