From 4e4110b67bf82facdfffb48f1abbb00af1d68a41 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 24 Jul 2026 00:38:59 +0200 Subject: [PATCH] Original-Spieldateien nach game/original/ verschoben raw/ -> game/original/ (die Original-DOS-Dateien liegen jetzt neben dem Code, der sie liest). Bleibt gitignored -- ist das Original-Spiel selbst, gehoert nicht ins Repo. Nachgezogen: - Default-DAT-Pfad in game/intro.py, tools/dat_extract.py, tools/render_assets.py -> game/original/PCKELL.DAT (KELLOGG_DAT-Override unveraendert). - .gitignore: raw/ -> game/original/. - Docstrings (game/audio.py, game/__init__.py), dosbox/dosbox.conf-Mountpfad, README-Struktur/Verweise angepasst. tfmx_player: KEINE Aenderung -- der Quellcode ist bereits getrackt (benoetigt), nur das kompilierte Binary render_tfmx bleibt bewusst gitignored (plattform- spezifisch, wird von build.sh automatisch neu gebaut). Verifiziert: python -m game --once (headless) exit 0 mit neuem Pfad. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 4 ++-- README.md | 11 ++++++----- dosbox/dosbox.conf | 5 ++++- game/__init__.py | 2 +- game/audio.py | 2 +- game/intro.py | 2 +- tools/dat_extract.py | 2 +- tools/render_assets.py | 2 +- 8 files changed, 17 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 465e355..6bfd9c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,11 @@ # Original-Spieldateien (copyrighted, gehoeren nicht ins Repo) -raw/ +game/original/ extracted_pre/ extracted_dat/ *.ppm # Gerenderte Original-Musik (TFMX->WAV) -- ist Original-Spielmaterial, -# wird lokal gecacht, nicht committed (wie raw/extracted_dat) +# wird lokal gecacht, nicht committed (wie game/original/ und extracted_dat) audio_cache/ game/tfmx_player/render_tfmx game/tfmx_player/*.o diff --git a/README.md b/README.md index 05ca1a4..8f7b6e5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ 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** (`raw/PCKELL.DAT`) und dekodiert sie zur Laufzeit — es +Original-Spieldateien** (`game/original/PCKELL.DAT`) und dekodiert sie zur Laufzeit — es werden keine vorab entpackten Assets benötigt. ## Status @@ -26,8 +26,9 @@ Format-Details steht in [NOTES.md](NOTES.md). „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 (`raw/`) sind **nicht** im -Repo (siehe `.gitignore`) — sie werden lokal benötigt, um das Remake zu starten. +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 @@ -41,7 +42,7 @@ der Python-Code hier ist eine eigenständige Neuimplementierung. - `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 `raw/` (nicht im Repo) +- Die Original-Datei `PCKELL.DAT` unter `game/original/` (nicht im Repo) ``` sudo apt install python3-pygame python3-pil python3-numpy gcc @@ -71,6 +72,7 @@ game/ Das eigentliche Spiel (startbar per `python -m game`) 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 @@ -80,7 +82,6 @@ preview/ Vorab gerenderte Assets zum Ansehen/Anhören (Archiv, KEIN png_out/ Vorab gerenderte PCC-Bilder render_out/ Vorab gerenderte BOB (Sprites) / ICO (Tiles) / MAP (Level) audio/ Aus PCKELL.DAT gerenderte Musik-WAVs -raw/ Original-Spieldateien (PCKELL.DAT etc.) — NICHT im Repo dosbox/ DOSBox-Konfiguration zum Laufenlassen des Originals (Referenz) NOTES.md Vollständiges Reverse-Engineering-Log ``` diff --git a/dosbox/dosbox.conf b/dosbox/dosbox.conf index 5a76bed..bf11d02 100644 --- a/dosbox/dosbox.conf +++ b/dosbox/dosbox.conf @@ -10,6 +10,9 @@ dma=1 hdma=5 [autoexec] -mount c ~/kellogg_remake/raw +# Pfad zu den Original-DOS-Dateien (relativ zum Repo-Wurzelverzeichnis, +# also DOSBox aus dem Projektordner heraus starten). Bei Bedarf durch einen +# absoluten Pfad ersetzen. +mount c game/original c: START.EXE diff --git a/game/__init__.py b/game/__init__.py index e5e862f..afe8b92 100644 --- a/game/__init__.py +++ b/game/__init__.py @@ -1,7 +1,7 @@ """Tony & Friends in Kellogg's Land -- plattformunabhaengiges Remake. Laufzeit-Package des Spiels. Enthaelt: - formats.py -- Parser/Decoder fuer die Original-Assets aus raw/PCKELL.DAT + formats.py -- Parser/Decoder fuer die Original-Assets aus original/PCKELL.DAT (PCC-Bilder, BOB-Sprites, ICO-Tilesets, MAP-Level, Paletten). audio.py -- Wrapper um den TFMX-Musik-Renderer (tfmx_player/). intro.py -- die Boot-/Intro-Sequenz (Rauser -> Factor5 -> Kellogg's -> diff --git a/game/audio.py b/game/audio.py index 8d05364..e4bc9a8 100644 --- a/game/audio.py +++ b/game/audio.py @@ -15,7 +15,7 @@ funktionierender, korrekt lizenzierter Renderer ist hier der pragmatische Weg statt TFMX in Python neu zu erfinden. Gerenderte WAVs sind urheberrechtlich das Original-Spielmaterial (Musik), -werden daher NICHT ins Git-Repo committed (wie raw/ und extracted_dat/) -- +werden daher NICHT ins Git-Repo committed (wie game/original/ und extracted_dat/) -- liegen nur lokal im Cache-Verzeichnis. MEHRERE SONGS PRO MODUL (Fund 22.07.2026 abends, Stefans Hinweis "das Spiel diff --git a/game/intro.py b/game/intro.py index 3d52839..970c936 100644 --- a/game/intro.py +++ b/game/intro.py @@ -126,7 +126,7 @@ except ImportError: HAVE_NUMPY = False PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -DAT_PATH = os.environ.get('KELLOGG_DAT', os.path.join(PROJECT_ROOT, 'raw', 'PCKELL.DAT')) +DAT_PATH = os.environ.get('KELLOGG_DAT', os.path.join(PROJECT_ROOT, 'game', 'original', 'PCKELL.DAT')) WINDOW_W, WINDOW_H = 960, 720 BG_COLOR = (0, 0, 0) diff --git a/tools/dat_extract.py b/tools/dat_extract.py index 594cb9e..4d00f06 100644 --- a/tools/dat_extract.py +++ b/tools/dat_extract.py @@ -2,7 +2,7 @@ import struct, os from collections import Counter PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -SRC = os.environ.get('KELLOGG_DAT', os.path.join(PROJECT_ROOT, 'raw', 'PCKELL.DAT')) +SRC = os.environ.get('KELLOGG_DAT', os.path.join(PROJECT_ROOT, 'game', 'original', 'PCKELL.DAT')) OUT = os.environ.get('KELLOGG_EXTRACT_OUT', os.path.join(PROJECT_ROOT, 'extracted_dat')) os.makedirs(OUT, exist_ok=True) diff --git a/tools/render_assets.py b/tools/render_assets.py index 77d809b..1bde643 100644 --- a/tools/render_assets.py +++ b/tools/render_assets.py @@ -4,7 +4,7 @@ from game.formats import DATContainer, get_bob_palette, get_world_palette, parse from PIL import Image PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -DAT_PATH = os.environ.get('KELLOGG_DAT', os.path.join(PROJECT_ROOT, 'raw', 'PCKELL.DAT')) +DAT_PATH = os.environ.get('KELLOGG_DAT', os.path.join(PROJECT_ROOT, 'game', 'original', 'PCKELL.DAT')) OUT = os.environ.get('KELLOGG_RENDER_OUT', os.path.join(PROJECT_ROOT, 'preview', 'render_out')) os.makedirs(OUT, exist_ok=True)