Files
tony-remake/README.md
T
duffyduckandClaude Opus 4.8 7aea2fac26 Intro gegen echte DOSBox-Referenz korrigiert + Leertaste-Skip
Referenzaufnahmen aus DOSBox (Xvfb) gemacht und danach:

- Rauser-Aufloesung gefixt: die nativen PCC-Assets werden jetzt EINMAL direkt
  auf Endgroesse hochskaliert (Nearest) und der Screen direkt in Fenster-
  aufloesung gerendert -- statt vorher 0.5x-Downscale (verwirft Pixel) + x3-
  Upscale ueber eine 320er-Zwischenleinwand. Gleiche Groesse wie bisher (~33%
  Bildbreite, gegen Referenz gemessen), aber gestochen scharf. Zusaetzlich das
  tuerkise "!"-Kaestchen nachgebaut (im Original Engine-gezeichnet, in keinem
  Asset enthalten).
- Titelbild-Reveal: Grau/Entsaettigung raus (Stefan "das gray raus"); die
  Scanlines auf der unteren Haelfte loesen sich jetzt von der Mitte nach unten
  auf ("scanlines ab der mitte getrennt weg") statt gleichmaessig auszufaden.
- Factor5: Logo haelt exakt so lange wie sein Sound (TITEL2 Song 1) spielt,
  dann weiter zu Kellogg's.
- Leertaste ueberspringt jetzt den aktuellen Intro-Screen, ESC beendet das
  ganze Intro (wait_or_skip gibt 'quit'/'skip'/None; run_once ist in Scenes
  zerlegt).

HANG-FIX (dabei gefunden): das kompilierte render_tfmx-Binary war veraltet
(vor dem Song-Index-Feature aus render_tfmx.c gebaut) und renderte TITEL2 Song1
mit 180s statt 2.4s -- gekoppelt an die neue "Factor5-Dauer = Songlaenge"-Logik
haette das Intro 3 Minuten eingefroren. Fixes: audio._ensure_binary() baut jetzt
neu, wenn die Quelle neuer ist als das Binary (verhindert stale Binary nach git
pull); zusaetzlich FACTOR5_MAX_SECONDS als Sicherheits-Obergrenze.

Verifiziert: python -m game --once (headless) exit 0 in ~30s; Rauser/Titelbild
visuell gegen die DOSBox-Referenz gegengeprueft.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 01:39:28 +02:00

104 lines
4.7 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 in Endlosschleife (wie Original-Titelbildschirm)
python3 -m game --once # ein Durchlauf, dann beenden
```
Steuerung im Intro: **Leertaste** überspringt den aktuellen Screen, **ESC**
beendet das Intro. 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).