Files
tony-remake/tools/wip_bob_sprite_research/bob_histogram.py
T
ARIA 5efba4b165 PCC-Decoder-Bugfix: RLE-Runs duerfen Zeilengrenzen ueberschreiten (Row-Reset war falsch)
Stefan hat zurecht bemaengelt dass KARTE.PCC/KELLOGGS.PCC verzerrt/verrutscht
aussehen (Smacks-Frosch an falscher Position, Notch-Fehlstelle im Logo-Rahmen).

Root Cause: Der Decoder hat RLE-Runs am Ende jeder Bildzeile hart abgeschnitten
und den Rest verworfen (klassisches PCX-Verhalten angenommen). Dieses Format
haelt sich aber NICHT an die PCX-Konvention 'ein Run ueberschreitet nie eine
Zeile' -- Runs laufen frei ueber Zeilengrenzen. Verifiziert per Pixel-fuer-Pixel-
Vergleich gegen echten DOSBox-Screenshot (world map): mit durchgehender
Dekodierung (kein Row-Reset) ist das Ergebnis jetzt pixel-identisch zur Referenz.

- tools/pcc_to_png.py: Row-Reset entfernt, decodiert jetzt width*height Pixel
  am Stueck aus dem RLE-Strom
- png_out/: alle 77 PNGs mit dem Fix neu generiert
- tools/wip_bob_sprite_research/: Backup der laufenden (noch ungeloesten)
  BOB-Sprite-Format-Exploration von aria-wohnung, damit nichts bei einem
  VM-Neustart verloren geht
- NOTES.md: Root-Cause-Analyse dokumentiert, alte Fehldiagnose ('byte-identisch
  zwischen Row-Reset und kontinuierlich') korrigiert, Rauser-Intro-Frage
  beantwortet (3 Frames vorhanden, Text-Logo, keine Video-Datei)
2026-07-22 07:33:01 +00:00

31 lines
896 B
Python

def rle_decode_pcx_style(data):
out = bytearray()
i = 0
n = len(data)
while i < n:
b = data[i]
if (b & 0xC0) == 0xC0:
count = b & 0x3F
i += 1
if i >= n:
break
val = data[i]
out.extend([val]*count)
i += 1
else:
out.append(b)
i += 1
return bytes(out)
base = "/home/aria/kellogg_remake/extracted_pre/"
for fn in ["TONY.BOB","O.BOB","A.BOB"]:
data = open(base+fn,"rb").read()
dec = rle_decode_pcx_style(data)
from collections import Counter
c = Counter(dec)
print(fn, "distinct values:", len(c), "min", min(dec), "max", max(dec))
top = c.most_common(10)
print(" top10:", top)
below16 = sum(v for k,v in c.items() if k<16)
print(f" fraction of pixels <16: {below16/len(dec):.3f} total_pixels={len(dec)}")