Echter Fix: PCC-Decoder nutzt jetzt ImageMagick statt eigenem RLE-Code

Beide vorherigen Hand-RLE-Decoder (Row-Reset und kontinuierlich) waren
trotz gegenteiliger Behauptung sichtbar kaputt (Bildinhalt verschoben/
dupliziert) -- Stefan hat das im gepushten Repo sofort wieder gesehen.
Format-Referenz https://github.com/movAX13h/tony-and-friends-in-kelloggs-land
bestaetigt .PCC = Standard-PCX v5. Fix: convert pcx:datei.PCC statt
eigenem RLE-Parser. Verifiziert (visuell, nicht nur Byte-Stats) gegen
echte DOSBox-Screenshots -- KARTE.PCC und KELLOGGS.PCC jetzt wirklich
korrekt. Alle 77 PNGs neu erzeugt.
This commit is contained in:
ARIA
2026-07-22 07:58:09 +00:00
parent 5efba4b165
commit 62af15e91c
79 changed files with 133 additions and 96 deletions
+81 -10
View File
@@ -535,15 +535,86 @@ Projekt gesichert unter `tools/wip_bob_sprite_research/` (noch nicht
aufgeraeumt/nicht final, bewusst als "work in progress" separiert von den
fertigen Tools `split_pre.py`/`pcc_to_png.py`).
## Naechste Schritte (Prioritaet, Stand 09:30)
1. **BOB/SRB-Sprite-Format weiter reversen** — siehe `tools/wip_bob_sprite_research/`
fuer den aktuellen (unfertigen) Exploration-Stand. Naechster konkreter
Schritt: `PCKELL.DAT`-Offset-Tabelle sauber mit den 32 `SRB.LST`-Namen
abgleichen, danach `A.BOB` (kleinstes Beispiel) testdecodieren.
2. Rauser-Intro-Sequenz (3 Frames) zu einer zusammengesetzten Vorschau
## KORREKTUR 2026-07-22 (nachmittags) — der "kontinuierliche" Fix oben war FALSCH
Stefan hat sich das gepushte Repo angeschaut und den Bug SOFORT wieder
gesehen (Frosch links statt rechts, Kellogg's-Logo verschoben) — die
"pixel-perfect verifiziert"-Behauptung im Abschnitt direkt darueber war
**selbst ein Messfehler**, genau wie der davor schon korrigierte. Beide
eigenen Hand-RLE-Decoder (Row-Reset UND kontinuierlich) haben KARTE.PCC/
KELLOGGS.PCC nachweislich sichtbar falsch decodiert (Bildinhalt dupliziert/
verschoben) — mein visueller Vorher-Vergleich war schlicht nicht sorgfaeltig
genug, ich habe der eigenen Automatik zu frueh vertraut.
**Stefans entscheidender Hinweis:** https://github.com/movAX13h/tony-and-friends-in-kelloggs-land
— ein bereits existierendes Reverse-Engineering-Projekt fuer GENAU dieses
Spiel (dort "Tony and Friends in Kellogg's Land" genannt, gleiche
PCKELL.DAT/PCKELL.SET-Assets). Enthaelt fertigen, funktionierenden C#-Code
fuer PCX/BOB/MAP/ARE/ICO/DAT — Quelle: `/tmp/tony-ref` (geklont, kein
LICENSE-File im Repo, daher NICHT 1:1-Code uebernommen, sondern nur als
Format-Referenz genutzt und in eigenem Python-Code neu umgesetzt).
Deren `Formats/PCXFile.cs` bestaetigt: `.PCC` ist stinknormales PCX v5,
8bpp, RLE, **mit Row-Reset** (pro Zeile wird ein frischer RLE-Reader
erzeugt, ueberschuessige Pixel eines Runs am Zeilenende werden verworfen —
Standard-PCX-Verhalten, keine Sonderregel). Das war also urspruenglich
(Bugfix 1, vormittags) schon RICHTIG vermutet — der eigentliche Bug lag
tiefer in der eigenen Implementierung und wurde nie gefunden.
**Der eigentliche Fix:** Decoder komplett ausgetauscht — `tools/pcc_to_png.py`
nutzt jetzt NICHT mehr eigenes RLE-Decoding, sondern `convert pcx:datei.PCC
out.png` (ImageMagick's ausgereifter PCX-Decoder, der die Datei einfach
per Standard-Format-Erkennung liest). Kein Workaround, sondern die richtige
Loesung: unser Format-Verstaendnis war im Kern korrekt, nur die
Handimplementierung hatte einen Bug den wir trotz zweier Anlaeufe nicht
gefunden haben — ein reifer, jahrzehntealter PCX-Decoder macht das
zuverlaessig richtig.
**Neu verifiziert (diesmal wirklich sorgfaeltig, Bild angeschaut statt nur
Byte-Statistik):** `png_out/KELLOGGS.png` und `png_out/KARTE.png` sehen jetzt
visuell identisch zu den echten DOSBox-Screenshots aus
(`aria_kellogg_titlescreen.png`/`aria_kellogg_worldmap.png`) — Vogelkopf
oben links, Drache+Schloss oben rechts, Frosch im Teich, Tiger unten
rechts, Coco unten links, alles an der richtigen Stelle, kein Doppel-Bild,
keine Kerbe. `FACTOR5.PCC`s "Geister-Doppellogo" ist ueber ImageMagick
ebenfalls sauber decodiert und bestaetigt sich damit endgueltig als
Absicht (Reflexions-Design), nicht als Bug. Alle 77 PCC-Dateien mit dem
neuen Decoder neu erzeugt und liegen in `png_out/`.
**Nebenfund:** `TONY.PCC`, `SMACKS.PCC`, `TOUCAN.PCC`, `COCO.PCC` (und
vermutlich weitere Charakter-Namen) decodieren zu winzigen 1x1-Pixel-Bildern
— das ist KEIN Extraktions-Bug. Laut `Form1.cs` der Referenz dienen manche
`.PCC`-Dateien nur als **Palette-Lieferant** fuer die zugehoerige `.ICO`/
`.BOB`-Sprite-Datei (ICO/BOB haben selbst keine eingebettete Palette,
im Gegensatz zu vollen PCC-Bildschirmen). Wichtig fuers spaetere BOB/ICO-
Decoding: Palette kommt dann von der PCC-Datei mit gleichem Basisnamen
(z.B. `TONY.BOB` -> Palette aus `TONY.PCC`), nicht aus der Sprite-Datei
selbst.
## Naechste Schritte (Prioritaet, Stand nachmittags 22.07.)
1. **BOB/SRB-Sprite-Format mit Hilfe der Referenz reversen.** Die Referenz
(`/tmp/tony-ref/Unpacker/Formats/BOBFile.cs`, `BOBPainter.cs`) hat das
schon geloest — README beschreibt BOB als "data and x86 code to display;
somewhat similar to BOB format of Turrican II". Naechster Schritt: deren
`BOBFile.cs` genau lesen und die Logik in eigenes Python uebersetzen
(nicht 1:1 kopieren, kein LICENSE im Repo), dann gegen `A.BOB`
(kleinstes Beispiel) verifizieren. Das sollte den bisherigen
`wip_bob_sprite_research/`-Blindflug ueberfluessig machen.
2. Genauso `MAPFile.cs`/`AREFile.cs`/`ICOFile.cs` fuer Level-Maps/Areas/
Tilesets nutzen statt weiter blind zu raten — auch hier: Format-Wissen
uebernehmen, Code selbst neu schreiben.
3. Rauser-Intro-Sequenz (3 Frames) zu einer zusammengesetzten Vorschau
rendern/dokumentieren, sobald Zeit ist — niedrige Prioritaet, Assets sind
schon da.
3. MAP/ARE-Levelformat reversen.
4. Python/pygame-Projektstruktur aufsetzen (PCC-Loader ist fertig, muss nur
noch von PPM/ImageMagick-Zwischenschritt auf direktes Pillow-basiertes
PNG/Surface-Schreiben umgestellt werden fuer den finalen Port).
4. Python/pygame-Projektstruktur aufsetzen (PCC-Loader ist jetzt wirklich
fertig und verifiziert: `convert pcx:datei.PCC out.png` bzw. fuer den
finalen Port direkt Pillow's PCX-Reader nutzen — Pillow unterstuetzt
PCX nativ, damit brauchen wir zur Laufzeit kein externes ImageMagick
mehr).
**Lektion fuer mich selbst (ARIA):** zweimal hintereinander eine "pixel-
perfect verifiziert"-Behauptung aufgestellt, die beim tatsaechlichen
Hinschauen (Bild anzeigen, nicht nur Bytes vergleichen) klar falsch war.
Naechstes Mal: bei jeder Verifikations-Behauptung IMMER das decodierte Bild
selbst anschauen (Read-Tool, multimodal), nicht nur Byte-/Pixel-Statistiken
vertrauen, bevor ich "geloest"/"verifiziert" sage.