Pfade relativ statt hardcodiert + Rauser/Titelbild-Korrektur per Pixelvermessung

- intro_sequence.py, tfmx_audio.py, render_assets.py, dat_extract.py:
  /home/aria/kellogg_remake/... durch PROJECT_ROOT-relative Pfade ersetzt
  (mit optionalem ENV-Override), laeuft jetzt von jedem Checkout aus.
- Rauser-Logo: war 1:1 nativ gezeichnet (viel zu gross) und weisser statt
  grauer Hintergrund. Per frischer DOSBox-Referenzaufnahme (Xvfb-Screenshot-
  Serie) neu vermessen: 0.5x Skalierung, Slide-in-Animation (RAUSER-Box von
  links, "!"-Box von oben, ADVERTAINMENT steht fest), Sound-Sting (TITEL2,
  einmalig) bei Ankunft, danach Fade weiss->grau.
- Titelbild: fruehere Annahme (4 Quadranten voll gestapelt = 320x480) war
  falsch und die Ursache fuer den gemeldeten Squish-Bug. Per Pixel-
  Rekonstruktion verifiziert: jeder Quadrant wird nur auf halber HOEHE
  (160x120 statt 160x240, Breite bleibt nativ) im 2x2-Raster angeordnet ->
  korrektes 320x240-Bild. Zusaetzlich neu entdeckter und nachgebauter
  Scanline/Graustufen-Reveal-Effekt auf der unteren Bildhaelfte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
ARIA
2026-07-22 21:01:47 +00:00
co-authored by Claude Sonnet 5
parent a34be7ce05
commit 6d196020db
5 changed files with 388 additions and 70 deletions
+103
View File
@@ -948,3 +948,106 @@ kompilierte Binary -- Build-Artefakt, per `.gitignore` draussen wie
3. ARE/Kollisionsformat klaeren, wenn Spiellogik es braucht.
Laeuft selbstaendig weiter, keine Rueckfrage noetig.
## Pfade relativ gemacht + Rauser/Titelbild-Korrektur (22.07.2026, Nacht)
Stefan meldete zwei Dinge: (1) alle Tools haben `/home/aria/kellogg_remake/...`
hardcodiert -- muss relativ zum Projektordner sein; (2) 6 Screenshots als
Beleg fuer Bild-Bugs (Rauser zu gross, Titelbild "gestaucht", Original hat
Scanlines die verschwinden). **Wichtig: von den 6 Screenshots ist wegen eines
Upload-Bugs (alle 6 landeten unter demselben Dateinamen und ueberschrieben
sich gegenseitig) nur der LETZTE erhalten geblieben** -- ich hab Stefan das
gemeldet und ihn gebeten, die anderen 5 bei Bedarf nochmal zu schicken. Statt
zu raten hab ich stattdessen selbst frische DOSBox-Referenzaufnahmen gemacht
(Xvfb + `import -window root`, 0.12s-Intervall) und daraus die echten Werte
gemessen -- Details unten.
**1) Pfade:** `intro_sequence.py`, `tfmx_audio.py`, `render_assets.py`,
`dat_extract.py` hatten `/home/aria/kellogg_remake/...` fest im Code. Jetzt
ueberall `PROJECT_ROOT = dirname(dirname(abspath(__file__)))` + optionales
ENV-Override (`KELLOGG_DAT`, `KELLOGG_AUDIO_CACHE`, `KELLOGG_RENDER_OUT`,
`KELLOGG_EXTRACT_OUT`). Laeuft jetzt von jedem Pfad aus (VM, Container,
woanders geklont).
**2) Rauser -- per Pixelvermessung neu gebaut:**
- Echte Groesse per Bounding-Box-Analyse gegen eine frische DOSBox-Aufnahme
gemessen: das komplette Rauser-Logo (RAUSER1+2+3 zusammen) ist im Original
nur ca. 105x40px auf einer 320x240-Leinwand -- mein v1-Code hat die
PCC-Assets 1:1 nativ gezeichnet (182x46 fuer RAUSER1 allein!), viel zu
gross. **Alle drei Rauser-Assets werden jetzt bei 0.5x Nativgroesse
gezeichnet** (`ASSET_DISPLAY_SCALE`).
- Hintergrund war in v1 WEISS die ganze Zeit -- tatsaechlich: WEISS waehrend
Slide-in+Halten, dann kurzer Fade zu GRAU (73,73,73), dann Grau halten,
dann Schwarzblende (bestehende Pause).
- **Neu: Slide-in-Animation.** Per Screenshot-Serie entdeckt: RAUSER1
("RAUSER"-Box) faehrt von LINKS ins Bild, RAUSER3 (blaue Box mit "!")
faehrt von OBEN rein, RAUSER2 ("ADVERTAINMENT") steht von Anfang an fest.
Nachgebaut mit smoothstep-Ease ueber `RAUSER_SLIDE_SECONDS=0.9s`.
- **Neu: Sound-Sting.** `TITEL2.TFX/.SAM` (das kuerzeste der 3 Musikstuecke,
724 Byte TFX) ist kein Loop-Track, sondern ein kurzer ~1s-Jingle (RMS-
Analyse zeigt: Burst 0-0.9s, dann Stille, dann Wiederholung -- typisch fuer
ein kurzes Sample, das die Tracker-Engine in einer Schleife rendert). Wird
jetzt exakt beim Erreichen der Endposition (Slide-in fertig) EINMAL
abgespielt (`pygame.mixer.Sound`, nicht geloopt).
**3) Titelbild -- KORREKTUR einer fruehen Fehlannahme (das war der Bug hinter
Stefans "gestaucht"-Meldung):**
- v1 hat die 4 Quadranten KELL256A/B/C/D (je 160x240 PCC-nativ) 1:1 zu einem
320x**480**-Bild gestapelt (A|B oben, C|D unten) und das komplett 480 hoch
angezeigt. Das war falsch.
- Per Pixel-Rekonstruktion gegen eine echte DOSBox-Aufnahme verifiziert
(mehrere Hypothesen durchprobiert, mit numpy MSE + visuellem Abgleich):
**die 4 Quadranten werden je auf HALBE Hoehe (160x120) skaliert** (Breite
bleibt nativ, NUR die Hoehe wird halbiert -- anders als beim Rauser-Fix,
wo beide Achsen gleichmaessig skaliert werden!) und im 2x2-Raster
angeordnet: A oben-links, B oben-rechts, C unten-links, D unten-rechts ->
ergibt ein korrektes 320x240-Bild. Screenshot-Vergleich (Rekonstruktion
vs. echte DOSBox-Aufnahme) war praktisch deckungsgleich.
ACHTUNG fuer kuenftige Aenderungen: bei den Rauser-Assets ist die
0.5x-Skalierung GLEICHMAESSIG (Breite+Hoehe), bei den Titelbild-Quadranten
ist es NUR die Hoehe -- zwei verschiedene Funktionen im Code
(`pcc_surface_scaled` vs. `pcc_surface_half_height`), nicht verwechseln.
- **Neu entdeckter Scanline-Effekt** (das ist genau Stefans "Screenshot 4/5/6"
-Beobachtung): waehrend die untere Bildhaelfte einwaechst, ist sie zuerst
komplett entsaettigt (graustichig) UND mit sichtbaren horizontalen
Scanlines ueberzogen -- das loest sich in einer zweiten Animationsphase zu
vollen Farben auf, bis das Bild komplett scharf ist. Per 0.12s-Screenshot-
Serie ueber die komplette Wipe-Animation hinweg entdeckt und nachgebaut
(`_scanline_desaturate()`, per numpy: Graustufen-Mix + jede zweite Zeile
abgedunkelt, Intensitaet faedet ueber die zweite Haelfte der Wipe-Dauer von
1.0 auf 0.0).
- Reveal-Mechanik selbst (oben waechst 0->120 von oben, unten waechst 0->120
von unten, treffen sich in der Mitte) war in der urspruenglichen
Beobachtung schon richtig -- nur die falsche 480px-Endgroesse und der
fehlende Scanline-Effekt waren der Bug.
**Verifiziert:** eigene DOSBox-Referenzaufnahme (Xvfb, 0.12s-Serie) gegen den
neu gebauten `intro_sequence.py`-Output verglichen -- Rauser-Slide-in, Rauser-
Groesse/Farben und Titelbild (inkl. Scanline-Phase) sehen jetzt sehr nah am
Original aus. Screenshots liegen als Beleg bei:
[FILE: /shared/uploads/aria_rauser_fixed.png] (Rauser, neu: klein, weiss, Slide-in-Mitte)
[FILE: /shared/uploads/aria_title_wipe_scanline_fixed.png] (Titelbild-Wipe MIT Scanline-Effekt)
[FILE: /shared/uploads/aria_title_final_fixed.png] (Titelbild komplett, korrekt 320x240 statt 320x480)
**Noch offen / bewusste Vereinfachungen:**
- Die feine Choreografie von RAUSER3 (slidet vermutlich als "!" und blaue Box
getrennt, siehe Screenshot-Beobachtung) wurde vereinfacht zu EINEM Element,
das von oben reinfaehrt -- sieht in der Praxis schon sehr nah dran aus,
waere aber bei Bedarf noch weiter verfeinerbar.
- Kleiner kosmetischer Rest: RAUSER2/RAUSER3 haben weissen Hintergrund IN
ihrer eigenen PCC-Bounding-Box (kein Alpha-Kanal). Auf weiss (waehrend
Slide-in+Halten) faellt das nicht auf, nach dem Fade zu Grau sieht man
einen schwachen weissen Kasten drumrum. Versuch mit `set_colorkey()`
wieder verworfen (hat auch die weissen BUCHSTABEN in RAUSER1 durchsichtig
gemacht -- schlimmer als der Kasten). Braucht eine echte Alpha-Maske pro
Asset, low priority.
- Der Scanline-Clear-Effekt ist als gleichmaessige Intensitaet ueber die
ganze untere Haelfte umgesetzt, nicht als praezise von-der-Mitte-nach-
aussen wandernde Grenze (im Original loest sich ein duenner Reststreifen
am unteren Bildrand als letztes auf) -- optische Wirkung ist aber schon
sehr aehnlich.
- VM-Testverzeichnisse (`boot_frames2/`, `intro_check_frames/`,
`title_check_frames/`) nach der Analyse wieder aufgeraeumt, nicht im Repo.
Laeuft selbstaendig weiter, keine Rueckfrage noetig.