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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user