- Keine Endlosschleife mehr: nach der Titelbild-Animation bleibt das fertige, voll-farbige Titelbild STEHEN und die Titelmusik loopt weiter, bis Leertaste oder ESC das Programm beendet (neue wait_for_key()). run_once() laeuft nur noch einmal; scene_title haelt am Ende auf Tastendruck (hold_forever), --once haelt stattdessen kurz (fuer headless/Tests). - ALT+ENTER schaltet zwischen Fenster- und Vollbildmodus um (SCALED-Display skaliert das 960x720-Logikbild sauber hoch). Zentrale Event-Behandlung in _process_event(); Zeichenroutinen holen die aktuelle Surface per pygame.display.get_surface(), damit das Neuerzeugen des Display-Modes beim Umschalten keinen veralteten Screen-Bezug hinterlaesst (screen-Parameter aus den Scenes entfernt). - Vollbild-Zustand wird in kelloggs.ini gemerkt (load/save_fullscreen_pref) und beim naechsten Start wiederhergestellt; ohne kelloggs.ini = Fenstermodus. kelloggs.ini ist gitignored (pro-Rechner-Laufzeitzustand). Verifiziert (headless): Config load/save, Alt+Enter-Toggle, Space/ESC, wait_for_key(Space)->quit; python -m game --once exit 0 in ~17s. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
114 lines
5.1 KiB
Markdown
114 lines
5.1 KiB
Markdown
# 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).
|
|
- ⏳ **Nächster Meilenstein:** echter Gameplay-Loop — Tony auf Level `W1L0`
|
|
bewegen (Physik, Kollision, Level-Scrolling). Existiert noch nicht.
|
|
|
|
Die vollständige, chronologische Reverse-Engineering-Historie mit allen
|
|
Format-Details steht in [NOTES.md](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/](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](https://github.com/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.DAT` unter `game/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: Rauser → Factor5 → Kellogg's → Titelbild-Animation; danach bleibt das
|
|
fertige Titelbild stehen und die Titelmusik läuft in Schleife, bis eine Taste
|
|
das Programm beendet.
|
|
|
|
Steuerung:
|
|
- **Leertaste** — überspringt den aktuellen Intro-Screen (auf dem Titelbild
|
|
beendet sie das Programm)
|
|
- **ESC** — beendet das Programm
|
|
- **Alt+Enter** — zwischen Fenster- und Vollbildmodus umschalten; der Zustand
|
|
wird in `kelloggs.ini` gemerkt und beim nächsten Start wiederhergestellt
|
|
(Standard ohne `kelloggs.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
|
|
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/](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](NOTES.md).
|