From 4517efbdf83fdbded2262eb04923c264c0f1130f Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 24 Jul 2026 23:13:49 +0200 Subject: [PATCH] NOTES.md: Factor5-Tail + Menuesystem-Session dokumentiert; README: raw/-Restverweis Co-Authored-By: Claude Fable 5 --- NOTES.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/NOTES.md b/NOTES.md index 8b196b7..126b2cf 100644 --- a/NOTES.md +++ b/NOTES.md @@ -1315,3 +1315,59 @@ im Anschluss ebenfalls ins Repo committet (gleiche Copyright-Begruendung wie audio/). Naechster Schritt unveraendert: echtes Gameplay (Tony auf `W1L0`). + +## 24.07.2026 (Nacht) -- Factor5-Tail, Menuesystem + Weltkarte (Referenz-getrieben) + +**1) Factor5-Sound "nicht ganz abgespielt" -- Renderer-Fix.** real_song_end +markiert nur das Ende der TRACK-SEQUENZ (2.4s); die noch klingenden Samples +wurden hart abgeschnitten (RMS stieg bis zum letzten Frame). render_tfmx.c +kann jetzt einen Ausklang-Tail rendern (6. CLI-Arg): loop_mode=0 stoppt den +Sequencer bei song_end, die Paula-Voices klingen weiter (erster Versuch OHNE +loop_mode-Stopp nahm die naechste Loop-Iteration auf -- per RMS-Selbst- +aehnlichkeit von 3 Anschwell-Mustern nachgewiesen). Das Factor5-"Brausen" +loopt auf Paula-Ebene endlos (kein natuerliches Ende!) -> Tail 2.6s = exakt +5.0s Gesamt (DOSBox-Screendauer ~4.8s) mit 600ms-Fade-out. Rauser-Sting endet +natuerlich bei 2.34s (Stille-Erkennung). Cache-Suffix `_tail` invalidiert +alte abgeschnittene WAVs. Commit `949a7ee`. + +**2) Kompletter Menuefluss per DOSBox-Referenz erfasst** (Xvfb + python3-Xlib +XTEST-Tasten -- xdotool ist auf Stefans Rechner nicht installiert; WICHTIG: +ohne Window-Manager ist der X-Fokus PointerRoot, also erst Pointer in die +Fenstermitte bewegen + set_input_focus, sonst kommen Keys nie an): +- Titelbild wartet ENDLOS (115s passiv, kein Attract-Loop). NUR ESC oeffnet + das Hauptmenue (Space/Return tun nichts -- per Einzeltasten-Sessions + verifiziert). Menue faedet ein. +- Hauptmenue: HIGHSCORES/ANLEITUNG/OPTIONEN/START/QUIT, Default-Auswahl + START, der selektierte Eintrag BLINKT (= der Cursor). PARTY1/PARTY2 links/ + rechts, unten Credits-Ticker (gelb): "FREEGAMES #3", "REALISATION RAUSER + ADVERTAINMENT GMBH REUTLINGEN", "PRODUZIERT VON FACTOR 5", "ANIMATIONEN + UND ILLUSTRATIONEN HARTWIG NIEDERGASSEL". +- OPTIONEN: MUSIK EIN/AUS, EFFEKTE EIN/AUS, EXIT. ANLEITUNG: gelbe Texttafel + (Joystick-Text, Faehigkeiten TONY=RENNEN/SMACKS=WASSERBLASEN/COCO=HANGELN + +KLETTERN/TOUCAN=FLIEGEN). HIGHSCORES: NAME/SCORE/ITEMS/LEV-Tabelle + (MATTHIAS 100000 ... BORIS 2500). START -> Weltkarte (KARTE.PCC, mit + Charakter-Animationen im Original). +- Nebenfund: Copyright-Tafel ("DIESES SPIEL IST INNERHALB DEUTSCHLANDS FREI + KOPIERBAR...") erschien in einer Session vor dem Menue -- Ausloeser noch + unklar (nicht Return, nicht Space), evtl. zyklische Attract-Tafel im Menue. + Noch nicht nachgebaut. + +**3) Implementiert in game/menu.py** (Commit `c8f7d4d`): BitmapFont-Parser +fuer FON_1/FON_1B (9x7-Zellen, ABER 8px-Vorschub -- sonst passen die +32-Zeichen-Anleitungszeilen nicht in die Box) und FON_2 (16x15, 3 Reihen: +A-T / U-Z.,:!?- / 1-0). Gelbe Schrift mit schwarzem Outline-Rendering. +PARTY-Sprites per make_border_bg_transparent freistellen (papierweisser BG; +ein Schwarz-Replace loescht die KONTUREN -- sichtbar kaputt, verworfen). +intro.py: Zustandsautomat Titelbild <-> Menue <-> Karte; QUIT beendet. + +**Verifiziert:** End-to-End-Lauf des REMAKES unter Xvfb mit echten XTEST- +Tasten: Intro -> ESC -> Menue -> START -> Karte -> zurueck -> Optionen -> +Anleitung -> Highscores -> QUIT (rc=0). Alle Screens visuell gegen die +DOSBox-Referenz geprueft (Menue/Highscores/Anleitung/Karte praktisch +deckungsgleich). + +**Offen/naechste Schritte:** +1. Weltkarte: KARTE0-9-Animationen + Levelauswahl (Cursor auf der Karte). +2. Gameplay: Tony auf W1L0 (Map/Tiles/Sprites laengst dekodiert). +3. Copyright-Tafel-Ausloeser im Original klaeren (niedrig). +4. Highscores persistent machen + Eintrag-Eingabe (erst mit Gameplay relevant). diff --git a/README.md b/README.md index 24d6c36..f0006ad 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ NOTES.md Vollständiges Reverse-Engineering-Log `game/formats.py` ist das gemeinsame Fundament: sowohl das Spiel als auch die Dev-Werkzeuge in `tools/` importieren daraus. Zur Laufzeit braucht das Spiel -**nur** `raw/PCKELL.DAT` — alles unter `preview/` sind Verifikations-/Archiv- +**nur** `game/original/PCKELL.DAT` — alles unter `preview/` sind Verifikations-/Archiv- Artefakte, keine Laufzeit-Abhängigkeit. Auch die Musik unter `preview/audio/` wird vom Spiel nicht gelesen: `game/tfmx_player/` rendert sie zur Laufzeit frisch aus `PCKELL.DAT` (nach `audio_cache/`).