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) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-07-24 00:38:59 +02:00
co-authored by Claude Opus 4.8
parent 327236e277
commit 4e4110b67b
8 changed files with 17 additions and 13 deletions
+2 -2
View File
@@ -1,11 +1,11 @@
# Original-Spieldateien (copyrighted, gehoeren nicht ins Repo) # Original-Spieldateien (copyrighted, gehoeren nicht ins Repo)
raw/ game/original/
extracted_pre/ extracted_pre/
extracted_dat/ extracted_dat/
*.ppm *.ppm
# Gerenderte Original-Musik (TFMX->WAV) -- ist Original-Spielmaterial, # 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/ audio_cache/
game/tfmx_player/render_tfmx game/tfmx_player/render_tfmx
game/tfmx_player/*.o game/tfmx_player/*.o
+6 -5
View File
@@ -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). 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 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. werden keine vorab entpackten Assets benötigt.
## Status ## 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 „Kellogg's Tony and Friends in Kellogg's Land" war ein kostenloses Werbespiel
und ist innerhalb Deutschlands frei kopierbar. Die im Repo enthaltenen und ist innerhalb Deutschlands frei kopierbar. Die im Repo enthaltenen
gerenderten Musik-WAVs (`audio/`) wurden lediglich aus den Original-Daten gerenderten Musik-WAVs (`audio/`) wurden lediglich aus den Original-Daten
extrahiert. Die eigentlichen Original-Spieldateien (`raw/`) sind **nicht** im extrahiert. Die eigentlichen Original-Spieldateien (`game/original/`) sind
Repo (siehe `.gitignore`) — sie werden lokal benötigt, um das Remake zu starten. **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 Der TFMX-Musik-Renderer unter [game/tfmx_player/](game/tfmx_player/) ist
Fremdcode (MIT-Lizenz, © Peter Fors) und liegt mit seiner LICENSE bei. Die 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) - `Pillow` (PCX-Dekodierung), `numpy` (optional, für den Scanline-Effekt im Intro)
- `gcc` (einmalig, um den TFMX-Renderer zu bauen — passiert automatisch beim - `gcc` (einmalig, um den TFMX-Renderer zu bauen — passiert automatisch beim
ersten Start) 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 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) audio.py Wrapper um den TFMX-Musik-Renderer (rendert & cached WAVs)
intro.py Boot-/Intro-Sequenz intro.py Boot-/Intro-Sequenz
tfmx_player/ MIT-lizenzierter C-Renderer für TFMX-Musik 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) tools/ Reine Dev-Werkzeuge (Assets auspacken / als PNG ansehen)
dat_extract.py PCKELL.DAT → alle 178 Einzeldateien (nach extracted_dat/) dat_extract.py PCKELL.DAT → alle 178 Einzeldateien (nach extracted_dat/)
pcc_to_png.py Eine PCC-Bilddatei → PNG 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 png_out/ Vorab gerenderte PCC-Bilder
render_out/ Vorab gerenderte BOB (Sprites) / ICO (Tiles) / MAP (Level) render_out/ Vorab gerenderte BOB (Sprites) / ICO (Tiles) / MAP (Level)
audio/ Aus PCKELL.DAT gerenderte Musik-WAVs audio/ Aus PCKELL.DAT gerenderte Musik-WAVs
raw/ Original-Spieldateien (PCKELL.DAT etc.) — NICHT im Repo
dosbox/ DOSBox-Konfiguration zum Laufenlassen des Originals (Referenz) dosbox/ DOSBox-Konfiguration zum Laufenlassen des Originals (Referenz)
NOTES.md Vollständiges Reverse-Engineering-Log NOTES.md Vollständiges Reverse-Engineering-Log
``` ```
+4 -1
View File
@@ -10,6 +10,9 @@ dma=1
hdma=5 hdma=5
[autoexec] [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: c:
START.EXE START.EXE
+1 -1
View File
@@ -1,7 +1,7 @@
"""Tony & Friends in Kellogg's Land -- plattformunabhaengiges Remake. """Tony & Friends in Kellogg's Land -- plattformunabhaengiges Remake.
Laufzeit-Package des Spiels. Enthaelt: 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). (PCC-Bilder, BOB-Sprites, ICO-Tilesets, MAP-Level, Paletten).
audio.py -- Wrapper um den TFMX-Musik-Renderer (tfmx_player/). audio.py -- Wrapper um den TFMX-Musik-Renderer (tfmx_player/).
intro.py -- die Boot-/Intro-Sequenz (Rauser -> Factor5 -> Kellogg's -> intro.py -- die Boot-/Intro-Sequenz (Rauser -> Factor5 -> Kellogg's ->
+1 -1
View File
@@ -15,7 +15,7 @@ funktionierender, korrekt lizenzierter Renderer ist hier der pragmatische
Weg statt TFMX in Python neu zu erfinden. Weg statt TFMX in Python neu zu erfinden.
Gerenderte WAVs sind urheberrechtlich das Original-Spielmaterial (Musik), 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. liegen nur lokal im Cache-Verzeichnis.
MEHRERE SONGS PRO MODUL (Fund 22.07.2026 abends, Stefans Hinweis "das Spiel MEHRERE SONGS PRO MODUL (Fund 22.07.2026 abends, Stefans Hinweis "das Spiel
+1 -1
View File
@@ -126,7 +126,7 @@ except ImportError:
HAVE_NUMPY = False HAVE_NUMPY = False
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 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 WINDOW_W, WINDOW_H = 960, 720
BG_COLOR = (0, 0, 0) BG_COLOR = (0, 0, 0)
+1 -1
View File
@@ -2,7 +2,7 @@ import struct, os
from collections import Counter from collections import Counter
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 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')) OUT = os.environ.get('KELLOGG_EXTRACT_OUT', os.path.join(PROJECT_ROOT, 'extracted_dat'))
os.makedirs(OUT, exist_ok=True) os.makedirs(OUT, exist_ok=True)
+1 -1
View File
@@ -4,7 +4,7 @@ from game.formats import DATContainer, get_bob_palette, get_world_palette, parse
from PIL import Image from PIL import Image
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 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')) OUT = os.environ.get('KELLOGG_RENDER_OUT', os.path.join(PROJECT_ROOT, 'preview', 'render_out'))
os.makedirs(OUT, exist_ok=True) os.makedirs(OUT, exist_ok=True)