Rauser-Fade-Bug (Alpha-Cutout), Musik-Laenge-Bug (real_song_end-Erkennung) und Factor5-Melodie gefixt

This commit is contained in:
ARIA
2026-07-22 21:31:33 +00:00
parent 6d196020db
commit 094aca0e1e
4 changed files with 282 additions and 38 deletions
+67
View File
@@ -1051,3 +1051,70 @@ Original aus. Screenshots liegen als Beleg bei:
`title_check_frames/`) nach der Analyse wieder aufgeraeumt, nicht im Repo.
Laeuft selbstaendig weiter, keine Rueckfrage noetig.
## 22.07.2026, spaeter Abend (2): drei Feedback-Bugs von Stefan gefixt
Stefan hatte nach dem letzten Pfade-relativ/Rauser/Titelbild-Fix drei neue
Beobachtungen gemeldet, alle drei bestaetigt und behoben:
**1. "Rauser-Text fadet nicht mit aus, bleibt hart umrandet stehen."**
Ursache endlich richtig verstanden (der oben als "kosmetischer Rest, low
priority" dokumentierte Kasten): RAUSER1/2/3.PCC haben keinen Alphakanal, ihr
papierweisser Hintergrund sitzt als hartes Rechteck um die Box-Grafik. Fix:
neue Funktion `make_border_bg_transparent()` in `intro_sequence.py` -- Flood-
Fill vom Bildrand aus ueber alle "papierweissen" Pixel (Schwelle 235/255 je
Kanal), NUR die vom Rand aus zusammenhaengende Flaeche wird transparent.
Isolierte weisse Pixel MITTEN im Motiv (z.B. die weissen Buchstaben in
RAUSER1) beruehren den Rand nicht und bleiben unangetastet -- genau das
Problem, an dem der fruehere `set_colorkey()`-Versuch gescheitert war.
Verifiziert per direktem Pixel-Test (nicht nur behauptet): Eckpixel neben der
Box liegt nach dem Fix exakt bei RAUSER_GREY (73,73,73) statt weiss, und im
Bild bleiben klar sichtbare, fast voll opake Buchstaben-Pixel (Alpha bis 254)
erhalten. Screenshot der Grau-Phase zum Beleg:
[FILE: /shared/uploads/aria_rauser_fade_grey_check.png]
**2. "Musik ist zu kurz, da fehlt der Rest" + Cache-Bug gefunden.**
Zwei uebereinanderliegende Ursachen:
a) `render_wav()` cached per Dateiname OHNE den `seconds`-Parameter zu
beruecksichtigen -- ein alter Test-Render (TITEL mit 8s, TITEL2 mit 15s
aus einer frueheren Debug-Session) blieb im `audio_cache/` liegen und
wurde bei jedem Aufruf stillschweigend weiterverwendet, egal welche
`seconds` der Aufrufer diesmal wollte.
b) selbst ein frischer Render haette bei den frueher verwendeten festen
Werten (TITEL: 60s) abgeschnitten -- **TITEL ist tatsaechlich ~109s
lang, ONGAME2 ~123s**, beides deutlich laenger als angenommen.
Echter Fix in `render_tfmx.c`: statt stur `seconds` lang zu rendern, wird
jetzt in kleinen 64-Frame-Haeppchen gerendert und tfmx.h's eigenes
`real_song_end`-Flag beobachtet (wird pro Tick gesetzt, sobald die
Track-Sequenz einmal komplett durchgelaufen ist und intern neu startet) --
sobald es feuert, ist GENAU eine vollstaendige natuerliche Song-Schleife im
Kasten, egal wie lang das Stueck wirklich ist. `seconds`/`max_seconds` ist
jetzt nur noch eine Sicherheits-Obergrenze (Default 180s, grosszuegig ueber
allen 3 bekannten Stuecken). Getestet und verifiziert:
- TITEL: 109.44s (natuerliches Ende erkannt)
- TITEL2 (Rauser-Sting): 2.04s (natuerliches Ende erkannt)
- ONGAME2: 122.88s (natuerliches Ende erkannt)
Alte falschen Cache-Dateien geloescht, mit dem gefixten Tool neu gerendert
und die Laengen direkt per `pygame.mixer.Sound(...).get_length()` verifiziert
(nicht nur die WAV-Header-Bytes ausgerechnet).
**3. "Bei Factor5 gibt's auch noch ne Melodie, solange das Lied ist Factor5
anzeigen und dann zum Kellogg's-praesentiert."**
`ONGAME2` war bis jetzt der einzige der 3 TFMX-Tracks ohne zugeordneten
Screen (TITEL2 = Rauser-Sting, TITEL = Kellogg's-Logo/Titelbild-Loop) --
genau das ist offenbar die Factor5-Melodie. `run_once()` in
`intro_sequence.py` spielt ONGAME2 jetzt beim Erscheinen des Factor5-Logos
einmal komplett ab und haelt den Screen exakt so lange (`sound.get_length()`,
~123s statt der alten festen 3.0s), bevor es zur schwarzen Pause + Kellogg's-
Logo weitergeht.
**Alle 3 Fixes verifiziert, nicht nur behauptet:**
- Rauser-Alpha-Fix: direkter Pixel-Test + Screenshot (oben verlinkt).
- Musik-Laengen: `render_tfmx`-Stderr-Ausgabe UND `pygame.mixer.Sound.get_length()`
geben identische Werte.
- Kompletter Smoke-Test (`xvfb-run python3 tools/intro_sequence.py --once`)
laeuft ohne Traceback durch (headless ohne Audio-Geraet, laeuft dann
erwartungsgemaess stumm mit Fallback-Dauern).
Committet + gepusht. Naechster Schritt weiterhin offen: echtes Gameplay
(Tony auf `W1L0` bewegen).