Per DOSBox-Referenzaufnahmen (Xvfb + XTEST-Tastensimulation) den kompletten
Original-Menuefluss erfasst und nachgebaut:
- ESC am stehenden Titelbild oeffnet das Hauptmenue (Original-Verhalten --
Space/Return tun dort nichts, per Einzeltasten-Sessions verifiziert; das
Original zeigt auch nach 115s passiv keinen Attract-Loop).
- Hauptmenue: HIGHSCORES/ANLEITUNG/OPTIONEN/START/QUIT in roter FON_2-
Schrift, Default-Auswahl START, der selektierte Eintrag BLINKT (so zeigt
das Original den Cursor). PARTY1/PARTY2-Charaktergruppen links/rechts,
Credits-Ticker in gelber FON_1-Schrift unter der Box.
- OPTIONEN: MUSIK EIN/AUS (wirkt auf pygame.mixer.music), EFFEKTE EIN/AUS
(Flag fuer spaeteres Gameplay), EXIT.
- ANLEITUNG: gelbe Texttafel (Original-Joystick-Text auf Tastatur uebertragen).
- HIGHSCORES: Tabelle NAME/SCORE/ITEMS/LEV mit den Original-Defaults.
- START: Weltkarte (KARTE.PCC, kompletter Screen) -- v1 statisch, Taste
zurueck ins Menue; Levelauswahl/Animationen folgen mit dem Gameplay.
- QUIT: Programm-Ende.
Technik (game/menu.py):
- BitmapFont-Parser fuer die Original-Fonts: FON_1/FON_1B (9x7-Zellen,
8px-Vorschub -- nur so passen die 32-Zeichen-Zeilen der Anleitung in die
Box) und FON_2 (16x15-Zellen, 3 Reihen). Outline-Rendering fuer die gelbe
Schrift (Original zeichnet sie ueberall mit schwarzem Rand).
- PARTY-Sprites via make_border_bg_transparent freigestellt (papierweisser
BG wie bei den Rauser-Assets -- ein Schwarz-Replace loescht faelschlich
die Konturen, per Vergleichsrender nachgewiesen und verworfen).
- intro.py: Zustandsautomat Titelbild <-> Menue <-> Weltkarte; wait_for_key
unterscheidet jetzt Fenster-X ('quit') von Taste ('key').
Verifiziert: End-to-End-Lauf des Remakes unter Xvfb mit echten XTEST-Tasten
-- Intro -> ESC -> Menue -> START -> Karte -> zurueck -> Optionen -> Anleitung
-> Highscores -> QUIT beendet sauber (rc=0); alle Screens als Screenshots
gegen die DOSBox-Referenz geprueft. python -m game --once weiterhin exit 0.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tony & Friends in Kellogg's Land — Remake
Ein plattformunabhängiges Remake (Python / pygame) des DOS-Jump'n'Runs „Kellogg's Tony and Friends in Kellogg's Land" (1994). Ziel ist eine lauffähige Neuimplementierung auf modernem x64, ohne DOS/DOSBox/QEMU — das Original crasht in unserer FreeDOS-VM (RTM.EXE-Engine vs. QEMU-VGA-Emulation).
Das Remake liest die Grafiken, Sprites, Level und Musik direkt aus den
Original-Spieldateien (game/original/PCKELL.DAT) und dekodiert sie zur Laufzeit — es
werden keine vorab entpackten Assets benötigt.
Status
- ✅ Alle Asset-Formate geknackt & verifiziert: PCC (Bilder), BOB (Sprites), ICO (Tilesets), MAP (Level), TFMX (Musik).
- ✅ Boot-/Intro-Sequenz spielbar (Rauser → Factor5 → Kellogg's-Logo → Titelbild, mit Fades, Vorhang-Wipe und Musik).
- ✅ Hauptmenü (HIGHSCORES / ANLEITUNG / OPTIONEN / START / QUIT) mit blinkender Auswahl, Credits-Ticker, Optionsmenü, Anleitungs- und Highscore-Tafel — gegen DOSBox-Referenzaufnahmen nachgebaut.
- ✅ Weltkarte (statisch; Levelauswahl folgt mit dem Gameplay).
- ⏳ Nächster Meilenstein: echter Gameplay-Loop — Tony auf Level
W1L0bewegen (Physik, Kollision, Level-Scrolling). Existiert noch nicht.
Die vollständige, chronologische Reverse-Engineering-Historie mit allen Format-Details steht in NOTES.md.
Rechtliches
„Kellogg's Tony and Friends in Kellogg's Land" war ein kostenloses Werbespiel
und ist innerhalb Deutschlands frei kopierbar. Die im Repo enthaltenen
gerenderten Musik-WAVs (audio/) wurden lediglich aus den Original-Daten
extrahiert. Die eigentlichen Original-Spieldateien (game/original/) sind
nicht im Repo (siehe .gitignore) — sie werden lokal benötigt, um das
Remake zu starten.
Der TFMX-Musik-Renderer unter game/tfmx_player/ ist Fremdcode (MIT-Lizenz, © Peter Fors) und liegt mit seiner LICENSE bei. Die Format-Kenntnisse zu PCC/BOB/MAP/ICO stammen als Referenz aus movAX13h/tony-and-friends-in-kelloggs-land; der Python-Code hier ist eine eigenständige Neuimplementierung.
Voraussetzungen
- Python 3,
pygame Pillow(PCX-Dekodierung),numpy(optional, für den Scanline-Effekt im Intro)gcc(einmalig, um den TFMX-Renderer zu bauen — passiert automatisch beim ersten Start)- Die Original-Datei
PCKELL.DATuntergame/original/(nicht im Repo)
sudo apt install python3-pygame python3-pil python3-numpy gcc
Starten
python3 -m game # Intro; bleibt am Titelbild stehen (Musik loopt)
python3 -m game --once # Titelbild nur kurz halten (für Tests/headless)
Ablauf (wie im Original): Rauser → Factor5 → Kellogg's → Titelbild-Animation; das fertige Titelbild bleibt stehen (Titelmusik loopt). ESC/Leertaste öffnet dort das Hauptmenü — START führt zur Weltkarte, QUIT beendet das Programm, ESC im Menü kehrt zum Titelbild zurück.
Steuerung:
- Leertaste — überspringt den aktuellen Intro-Screen; am Titelbild öffnet sie das Hauptmenü
- ESC — am Titelbild: Hauptmenü öffnen (wie im Original); im Menü: zurück
- Pfeiltasten + Enter — Menü-Navigation (die Auswahl blinkt, wie im Original)
- Alt+Enter — zwischen Fenster- und Vollbildmodus umschalten; der Zustand
wird in
kelloggs.inigemerkt und beim nächsten Start wiederhergestellt (Standard ohnekelloggs.ini: Fenstermodus)
Ohne Soundkarte (z.B. headless) läuft das Spiel stumm weiter statt abzustürzen.
Liegt PCKELL.DAT woanders, kann der Pfad per Umgebungsvariable gesetzt werden:
KELLOGG_DAT=/pfad/zu/PCKELL.DAT python3 -m game
Projektstruktur
game/ Das eigentliche Spiel (startbar per `python -m game`)
formats.py Parser/Decoder für alle Asset-Formate aus PCKELL.DAT
audio.py Wrapper um den TFMX-Musik-Renderer (rendert & cached WAVs)
intro.py Boot-/Intro-Sequenz + Ablaufsteuerung
menu.py Hauptmenü, Optionen, Anleitung, Highscores, Weltkarte
tfmx_player/ MIT-lizenzierter C-Renderer für TFMX-Musik
original/ Original-DOS-Spieldateien (PCKELL.DAT etc.) — NICHT im Repo
tools/ Reine Dev-Werkzeuge (Assets auspacken / als PNG ansehen)
dat_extract.py PCKELL.DAT → alle 178 Einzeldateien (nach extracted_dat/)
pcc_to_png.py Eine PCC-Bilddatei → PNG
render_assets.py Batch-Render aller BOB/ICO/MAP → preview/render_out/
preview/ Vorab gerenderte Assets zum Ansehen/Anhören (Archiv, KEINE
Laufzeit-Abhängigkeit — das Spiel rendert alles selbst on the fly)
png_out/ Vorab gerenderte PCC-Bilder
render_out/ Vorab gerenderte BOB (Sprites) / ICO (Tiles) / MAP (Level)
audio/ Aus PCKELL.DAT gerenderte Musik-WAVs
dosbox/ DOSBox-Konfiguration zum Laufenlassen des Originals (Referenz)
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-
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/).
Original als Referenz laufen lassen (DOSBox)
Unter dosbox/ liegt eine funktionierende Konfiguration, um das
Original zum visuellen Abgleich zu starten. Wichtig: In KELLOGG.INI IRQ=5
statt 7 setzen (sonst hängt sich das Spiel nach dem Factor-5-Logo auf) und die
[sblaster]-IRQ in der dosbox.conf passend dazu — Details in
NOTES.md.