Commit Graph
28 Commits
Author SHA1 Message Date
duffyduckandClaude Fable 5 68be969e0d WELTKARTE mit Levelauswahl -- Pfad/Punkte/Namen live aus dem Binary
game/worldmap.py: parst Kartenpfad, Levelpunkt-Positionen und die 22
Levelnamen zur Laufzeit aus START.EXE (NE-Datensegment, Anker-Suche,
Fallback W1L1). Links/Rechts laesst die Kartenfigur (Mini-Kopf KARTE4-7
je Charakter) die Original-Wegpunkte ablaufen, der aktive Levelpunkt
blinkt orange/blau (KARTE0/2 -- Blinksequenz stand exakt so in der
Binary-Animationstabelle), Space/Return startet das Level, ESC -> Menue.
Kartenposition bleibt ueber Levelbesuche erhalten.

Level ohne handgepflegte LEVEL_INFO erhalten einen generischen Spawn
(erste Bodenstelle) -- damit sind ALLE 22 Level anwaehlbar und spielbar
(Basis-Physik; Wasser/Tueren dort folgen mit den echten Leveldaten).

E2E: Karte -> laufen -> W1L3 spielen -> zurueck -> W1L2 -> QUIT rc=0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 14:18:30 +02:00
duffyduckandClaude Fable 5 cdf6da6f7d BINARY-DURCHBRUCH: NE-Overlay geparst, Original-Animationstabellen gefunden
START.EXE = MZ-Stub + ungepackte NE-Executable (Borland DPMI16). Im
DATA-Segment liegen die ANIMATIONSTABELLEN im Klartext (Format
[delay_ticks][frames...]ffff, 70Hz): Engine-Frame x2 = BOB-Frame.
Bestaetigt: Gehzyklus 0-14/17.5fps, Idle 16, Sprung 18, Renn-Rad
26-32. Uebernommen: ECHTE Frosties-Idle-Sequenz (46,48,46,44,...,20x5,
2.8fps) und Original-Anim-Timings (17.5fps Gehen/Rad).

Ausserdem im Binary gefunden: kompletter WELTKARTEN-LAUFPFAD + LEVELPUNKT-
Koordinaten + 22 Levelnamen (Grundlage fuer die Karten-Levelauswahl) und
den "Kellogg's Cheat-Mode" (Level-Waehler). Dump + Offsets in NOTES.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 14:06:45 +02:00
duffyduckandClaude Fable 5 f7f29a0309 Absprung-Hocke + Tuer-Dimmen (DOSBox-Referenz); Binary-Tabellensuche negativ
Stefans Frage nach Disassembly: Byte-Muster-Suche nach Frame-Tabellen in
START.EXE/RTM.EXE ohne Treffer (nicht als nackte Tabellen im Binary);
stattdessen DOSBox-Frameserie (0.12s) mit Tuer-Charakterwechsel zu Smacks:
- Original-Sprung hat eine Absprung-Hocke (Kauer-Frame im Absprungmoment,
  dann Streckung) -> JUMP_SQUAT_SECONDS=0.09 eingebaut (alle Charaktere).
- Original dimmt den Level waehrend der Tuer-Sequenz ab -> Overlay
  waehrend door_open_t.
- Nebenbei verifiziert: unser Charakter-Menue ist deckungsgleich mit dem
  Original (Layout, graue Koepfe fuer nicht verfuegbare Charaktere).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:56:34 +02:00
duffyduckandClaude Fable 5 200fc6192d Wasser-Regeln (kein Ducken, 1.5s-Schaden), Schadens-Blinken, echte Peek-Frames
- Nicht-Schwimmer koennen im Wasser nicht mehr ducken.
- Herzverlust im Wasser alle 1.5s statt 5s.
- Nach Schaden blinkt die Figur 0.9s (Sichtbarkeits-Toggle; beim Tod
  deaktiviert, damit die Anim nicht unsichtbar haengt).
- Tuer-Reinschauen nutzt die echten Sprites: TONY 50 (Rueckenansicht),
  SMACKS 48 (Stefans Fund -- jeweils letzter Frame vor den Platzhaltern).

Verifiziert: Duck-Verbot im Wasser, Blink-Muster wechselt, --once exit 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:48:39 +02:00
duffyduckandClaude Fable 5 10c5a5b69c Wasser-Bounce, Tod-Animation (Tuch/Kappe), Tuer-Peek, Duck-Kamera-Grace
Stefans fuenfte Feedback-Runde:
- Nicht-Schwimmer huepfen endlos auf der Wasseroberflaeche (~6px Auto-
  Bounce) statt statisch zu stehen; Steuerung und voller Ausstiegs-Sprung
  bleiben moeglich. Kein Idle im Wasser.
- Tod bei 0 Herzen: Tony verliert sein HALSTUCH (Frame 38 = Tony ohne
  Tuch, Frame 40 = Tuch einzeln -- die Assets waren dafuer gebaut!),
  fliegt aus dem Bild, Tuch flattert herab; Smacks analog mit Kappe
  (26/29). Danach Respawn mit Leben-1, bei 0 Leben zurueck zur Karte.
- Tuer-Peek: Figur zeigt waehrend der Offen-Sekunde einen Reinschau-Frame.
- Duck-Kamera: 0.2s-Grace gegen X11-Autorepeat-/on_ground-Flackern
  ("Kamera geht sporadisch wieder rauf").

Verifiziert: Bounce-Amplitude ~6px endlos, voller Sprung aus dem Wasser,
Tod-Sprites gesichtet (Tuch/Kappe), --once exit 0, E2E rc=0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:38:08 +02:00
duffyduckandClaude Fable 5 0ad97e7180 Tuer-Oeffnungs-Sequenz, Slope-Landungs-Fix, Kamera-Logik, Sprite-Feinschliff
Stefans vierte Feedback-Runde:
- Sprites sinken 4px in den Boden ein (Fuesse standen sichtbar UEBER den
  Blaettern; Original laesst sie einsinken).
- Echte Steh-Frames: Tony 16/17, Smacks-Walkzyklus ohne die Steh-Frames
  12-15 ("letzter Lauf-Frame blieb beim Anhalten stehen").
- Tuer: DOORS[0] ist die OFFENE Tuer -> Ruhe = Tile-Tuer + Kopf-Schild
  (DOORS[5]); ALT oeffnet die Tuer sichtbar und nach 1s folgt die Aktion
  (Charakterwechsel-Menue) -- Muster fuer alle Tueren inkl. der
  Schluessel-Tueren (DOORS 1-4).
- Slope-Landung: Swept-Kollision ueber alle ueberstrichenen Zeilen +
  Herkunftsbedingung -- kein Durchfallen mehr bei schnellen Landungen
  (Stress-Test: 50 Drops ueber die Hangbreite, 0 Durchfaller).
- Kamera: Figur steht bei ~75% Bildhoehe; DUCKEN gehalten (>=1.2s) faehrt
  die Kamera sanft ~40px nach unten (Wasser unter Abgruenden sichtbar).

Verifiziert: Tunneling-Stresstest 0/50, Idle-Frames korrekt, Standbild
(Fuesse in Blaettern, Schild auf zu-Tuer, Kamerahoehe), --once exit 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 13:25:44 +02:00
duffyduckandClaude Fable 5 bb9c23aae5 HUD-Kopf pixelig mit schwarzem Umriss, echte Tuergrafik (DOORS.BOB)
- Charakter-Icon im HUD: nearest-skalierter WECH-Kopf + schwarzer 1px-
  Umriss (Original-Look, Stefans Feedback). Eigene Mini-Kopf-Assets gibt
  es nicht (GAMEBAR.BOB[16] leer).
- DOORS.BOB entschluesselt: Frame 0 (Tuer mit Kopf-Schild) wird jetzt auf
  die Tuerposition geblittet; Frames 1-4 sind die Schluessel-Tueren mit
  farbigen Knaeufen (fuer die spaetere Schluessel-Logik), Frame 5 das
  Schild einzeln.

Szene deckungsgleich mit Stefans Original-Screenshot (Tuer mit Schild und
Punkten, pixeliger HUD-Kopf). --once exit 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 11:54:11 +02:00
duffyduckandClaude Fable 5 54e950141b HUD final: GAMEBAR.PCC pur (weisse Boxen), Original-Ziffern, 6 Herzen
Stefans Korrektur: Box-Innenflaechen sind im Original WEISS (die Grafik
hatte es schon richtig -- Dunkelrot-Fuellung entfernt, Grafik-":" damit
nativ sichtbar). Zahlen jetzt in der Original-HUD-Font: GAMEBAR.BOB-
Ziffern (7x13), gerendert mit der GAMEBAR.PCC-Palette -> sattes Rot mit
dunkler Umrandung, gleiche Farbe wie der Doppelpunkt. Herzen: 6 Stueck im
3x2-Grid (Original-Screenshot), Start/Reset auf 6.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 11:46:46 +02:00
duffyduckandClaude Fable 5 6c3d6ea7a7 Echte GAMEBAR.PCC als HUD, pixelgenaue Slopes, Step-up, Wasser-Grund
Stefans dritte Feedback-Runde:
- HUD nutzt jetzt die ECHTE GAMEBAR.PCC aus PCKELL.DAT (Stefans Fund):
  Kellogg's-Leiste, Boxrahmen und Uhr-":" kommen aus der Original-Grafik;
  weisse Box-Innenflaechen werden beim Laden dunkelrot gefuellt (macht die
  Original-Engine zur Laufzeit ebenso). Inhalte an den gemessenen Box-
  Positionen; HUD_H=25 (Grafikhoehe), VIEW_H=175.
- Slopes PIXELGENAU: Laufflaeche = oberster Nicht-Himmel-Pixel der Tile-
  Grafik pro Spalte (die Haenge sind ~1:2, nicht 45 Grad -- Ursache des
  restlichen Schwebens). Sky-Index vom haeufigsten Luft-Tile. Reine
  Himmel-Spalten tragen nicht.
- STEP_UP=6: Mini-Stufen (Plateau-Kante ueber Hangende) werden beim Laufen
  ueberwunden; hohe Waende blocken weiterhin.
- Unterste Map-Zeile immer solide (Grafik-Bodenstreifen ohne ctypes) --
  kein Steckenbleiben mehr beim Tieftauchen.
- Smacks-Steh-Frames 12/13 statt 0/1 (Anhalte-Sprite-Bug).

Verifiziert: Slope-Drop exakt auf Grafikkante, Plateau-Aufstieg, Wand-
Integritaet, Smacks-Idle, --once exit 0, E2E rc=0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 11:39:21 +02:00
duffyduckandClaude Fable 5 7eb7f6f3b7 Wasser-Mechanik nach Original, Slope-Schweben-Fix, Spawn-Pose, HUD v3
Stefans zweite Feedback-Runde:
- Nicht-Schwimmer (Tony & Co.) tauchen nicht mehr unter: die Wasser-
  oberflaeche traegt (14px Eintauchtiefe, springen von dort moeglich,
  Herzverlust laeuft) -- wie im Original-Screenshot. Schwimmer (Smacks)
  loesen nahe der Oberflaeche mit der Sprungtaste einen echten Sprung aus
  und kommen wieder aus dem Wasser raus (vorher unmoeglich).
- Slope-Schweben gefixt: Luft-Snap nur bei echter Durchdringung; Bergauf-
  Toleranz nur fuer bereits Gelandete.
- Start-Sprite-Sequenz beim Levelstart/Charakterwechsel (Tony Arm hoch,
  Smacks Daumen hoch, Frame 22, ~1.1s, durch Eingabe abbrechbar).
- Rennsprungweite: RUN_SPEED 185 -> 200 ("bis hinter die Blume").
- HUD v3 nach Original-Referenz: helle Creme-Rahmen, hoehere Boxen,
  Cerealien-Icon in voller Groesse, leere Herz-Plaetze dunkel.

Verifiziert: Physik-Sims (Wade+Absprung, Smacks-Ausstiegssprung, Decken-
Kollision unter der Bruecke korrekt) + E2E rc=0 + --once exit 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 11:19:44 +02:00
duffyduckandClaude Fable 5 07b347b607 Charakter-System, Wasser, Renn/Idle-Animationen, echtes HUD
Stefans Feedback-Paket (7 annotierte Screenshots):
- Player-Klasse mit CHAR_DEFS: Tony (RENNEN mit ALT -- echte Rad-Animation,
  Frames 26-33) und Smacks (SCHWIMMEN, Frames 37-44; kein Rennen) spielbar;
  Coco/Toucan vorbereitet. Idle-Packungs-Animation nach 5s Stillstand
  (Tony 44-49, Smacks 31-36). Sprung-Frames 18/19 (gestreckt).
- Sprunghoehe kalibriert (-360, ~72px: "Tony kommt mit dem Kopf an den Ast").
- WASSER (Stefans Fund: nur bei DOSBox machine=vgaonly sichtbar): water_y
  pro Level + dunkelblaues Overlay; Nicht-Schwimmer verlieren alle 5s ein
  Herz, 0 Herzen -> Respawn/Leben-1, 0 Leben -> Karte. Smacks schwimmt
  schadlos (traege Wasserphysik, Space = Schwimmstoss).
- TUER mit Kopf-Symbol (Level-1-Haus): ALT im STEHEN oeffnet das
  Charakter-Auswahlmenue "MIT WEM MOECHTEST DU SPIELEN?" -- WECH_1-4 =
  farbige Koepfe, WECH_5-8 = grau (nicht verfuegbar; Level 1: nur
  Tony+Smacks). Auswahl blinkt, Wechsel uebernimmt die Position.
- HUD nach Referenz-Screenshot: Keks-Box mit Cerealien-Icon (ITE0-3) des
  aktiven Charakters, Herz-Box als 2x2-Grid, Charakter-Kopf-Box (zeigt die
  gewaehlte Figur) + Leben, Uhr.
- Level-Metadaten (Charaktere/Wasserlinie/Tuer/Spawn) v1 als LEVEL_INFO-
  Konstanten -- Original-Quelle ist vermutlich das .ARE-Format (Header
  enthaelt BE-Pixelkoordinaten, Analyse in NOTES.md, noch offen).

Verifiziert: E2E (Xvfb+XTEST) -- Tuer->Menue->Smacks, HUD wechselt auf
Smacks-Kopf+Puff-Icon, Wasser-Overlay sichtbar, ESC/QUIT rc=0; --once ok.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 10:49:09 +02:00
duffyduckandClaude Fable 5 0bb66b73a4 Level-Feedback: Laufrichtung, Schraegen-Kollision, HUD, Rennen
Stefans annotierter Live-Test-Screenshot, alle 4 Punkte:
- Laufrichtung gefixt: TONY.BOB gerade Frames = rechts (war vertauscht,
  Figur lief rueckwaerts).
- Schraegen-Kollision: ctype 16 = Slope-Tile (per ctype-Farbvisualisierung
  exakt auf dem Grashang der Referenz identifiziert -- keine Tuer). 45-Grad-
  Diagonale, Richtung per Nachbar-Heuristik, am Fussmittelpunkt geprueft,
  Snap nur bei fallender Bewegung (kein Herunterziehen im Sprung).
  Simulation verifiziert: Hang hoch bis Plateau, kein Durchfallen mehr.
- HUD: weisse Kellogg's-Leiste (Schriftzug aus KELLOGGS.PCC gecroppt),
  Herzen als echte GAMEBAR-Sprites (10=voll/11=leer), Uhr-Box/Layout neu
  verteilt und Startzeit 9:59 (4-stellige Anzeige passt immer in die Zeile).
- RENNEN: ALT halten (Original-Anleitung: Tonys Faehigkeit) bzw. LSHIFT,
  185 px/s + schnellere Laufanimation.

Verifiziert: Slope-Simulation (min_y=559=Plateau, kein Durchfallen),
HUD-Standbild (Leiste/Herzen/Uhr komplett), E2E-Lauf rc=0, --once exit 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 10:01:14 +02:00
duffyduckandClaude Fable 5 973e290cf6 LEVEL 1 SPIELBAR: game/level.py -- Tiles, Kamera, Tony-Physik, HUD, Musik
Weltkarte: SPACE startet Level 1 (Original-Verhalten per DOSBox-Referenz:
Return tut dort nichts, kein sichtbarer Level-Cursor am Spielstart).

Level 1 = W1L1.MAP -- per Template-Matching des DOSBox-Gameplay-Screenshots
gegen die gerenderten Maps identifiziert (W1L0 ist NICHT Level 1).

game/level.py:
- Level: MAP+ICO+Weltpalette laden, komplette Map einmalig vorrendern,
  Kamera blittet 320x176-Ausschnitt (HUD 320x24 darunter, wie Original).
- Kollision: MAP-ctype Bit 32 = solide (40=Boden, 32=Fuellung; empirisch
  an der Spawn-Plattform verifiziert).
- Tony: TONY.BOB (53 Frames; 8-Phasen-Gehzyklus, gerade=links/ungerade=
  rechts), AABB-Physik gegen das Tile-Grid, laufen/springen/ducken,
  Fusspunkt-basiert. Physikwerte v1 nach Gefuehl (Feinschliff nach Test).
- HUD-Nachbildung (Keks/Item/Score/Herzen/Leben/Uhr 10:00-Countdown) mit
  FON_1B-Ziffern; GAMEBAR-Icons geladen (Original-Ziffern-Palette unklar).
- Levelmusik: ONGAME2 Song 0 als v1-ANNAHME (nach Gehoer korrigieren, wie
  beim Factor5-Sound); wird im Audio-Preload mitgerendert.
- ESC -> zurueck zur Karte (Titelmusik loopt wieder), Fenster-X -> Ende.

Verifiziert: E2E unter Xvfb mit gehaltenen XTEST-Tasten -- laufen (Kamera
scrollt), springen, Plattformkante runterfallen, unterm Brueckenbogen
zurueck, ESC->Karte->Menue->QUIT rc=0. Level-Standbild deckungsgleich zur
DOSBox-Referenz. --once-Regression exit 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 01:17:44 +02:00
duffyduckandClaude Fable 5 4517efbdf8 NOTES.md: Factor5-Tail + Menuesystem-Session dokumentiert; README: raw/-Restverweis
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 23:13:49 +02:00
duffyduckandClaude Opus 4.8 8b709f1cc3 NOTES.md: Cleanup-Eintrag (Duplikate entfernt, Soundfiles ins Repo)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 00:16:09 +02:00
aria a6232dd6c8 NOTES.md: kaputtes Encoding (hörbar) gefixt 2026-07-23 11:39:29 +02:00
aria 4deb429282 NOTES.md: Factor5-Sound von Stefan bestaetigt, Repo-Hygiene-Fund dokumentiert 2026-07-23 11:39:00 +02:00
ARIA 9e47f92b64 NOTES.md: Hang-Fix und Song-Rendering-Uebergabe dokumentiert 2026-07-23 06:44:25 +00:00
ARIA af2ead172f Rauser-Aufloesung wirklich gefixt (0.5x Nearest-Neighbor statt native 1:1 oder smoothscale) + Factor5-Sound korrigiert (TITEL2-Song1 statt ONGAME2, Multi-Song-Fund)
Pixelvermessung von Stefans Referenz-Screenshot widerlegt die letzte
"native Groesse ist richtig"-Annahme -- das Logo ist im Original klein
(~34% Bildbreite), nicht bildschirmfuellend. Der eigentliche Bloedsinn war
smoothscale() (bilinear, verwaescht Pixel-Art), nicht die 0.5x-Groesse
selbst. Fix: 0.5x beibehalten, pygame.transform.scale() (Nearest-Neighbor)
statt smoothscale().

Factor5 spielte bisher faelschlich ONGAME2 (~123s Level-Musik) ab. Fund:
TFX-Module buendeln mehrere Songs (v_songs[]) -- TITEL2 hat 2 (Song0 =
2.04s Rauser-Sting, Song1 = 2.40s), TITEL 3, ONGAME2 sogar 14. TITEL2-Song1
passt laenge-maessig exakt zu "nur ein bisschen laenger als der
Rauser-Sound" -- jetzt der Factor5-Sound, feste 5s Anzeigedauer.
2026-07-22 22:12:01 +00:00
ARIA 094aca0e1e Rauser-Fade-Bug (Alpha-Cutout), Musik-Laenge-Bug (real_song_end-Erkennung) und Factor5-Melodie gefixt 2026-07-22 21:31:33 +00:00
ARIAandClaude Sonnet 5 6d196020db Pfade relativ statt hardcodiert + Rauser/Titelbild-Korrektur per Pixelvermessung
- intro_sequence.py, tfmx_audio.py, render_assets.py, dat_extract.py:
  /home/aria/kellogg_remake/... durch PROJECT_ROOT-relative Pfade ersetzt
  (mit optionalem ENV-Override), laeuft jetzt von jedem Checkout aus.
- Rauser-Logo: war 1:1 nativ gezeichnet (viel zu gross) und weisser statt
  grauer Hintergrund. Per frischer DOSBox-Referenzaufnahme (Xvfb-Screenshot-
  Serie) neu vermessen: 0.5x Skalierung, Slide-in-Animation (RAUSER-Box von
  links, "!"-Box von oben, ADVERTAINMENT steht fest), Sound-Sting (TITEL2,
  einmalig) bei Ankunft, danach Fade weiss->grau.
- Titelbild: fruehere Annahme (4 Quadranten voll gestapelt = 320x480) war
  falsch und die Ursache fuer den gemeldeten Squish-Bug. Per Pixel-
  Rekonstruktion verifiziert: jeder Quadrant wird nur auf halber HOEHE
  (160x120 statt 160x240, Breite bleibt nativ) im 2x2-Raster angeordnet ->
  korrektes 320x240-Bild. Zusaetzlich neu entdeckter und nachgebauter
  Scanline/Graustufen-Reveal-Effekt auf der unteren Bildhaelfte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 21:01:47 +00:00
ARIA a34be7ce05 Sound (TFMX) geloest: MIT-lizenzierter Player eingebunden, Titelmusik in Intro-Sequenz 2026-07-22 16:19:25 +00:00
ARIAandClaude Sonnet 5 ea1f5b951e Boot-Sequenz vermessen + Intro-Player gebaut, echten PCC-Decoder-Regressionsbug gefixt
- Regression gefunden+gefixt: pcc_to_png.py war durch einen frueheren Commit
  versehentlich auf den kaputten Hand-RLE-Decoder zurueckgefallen (der
  ImageMagick-Fix ging verloren). Jetzt: kellogg_formats.load_pcc() nutzt
  Pillows PCX-Decoder direkt, kein eigener RLE-Code mehr im Projekt. Alle
  77 PCC neu gerendert, AE=0 (pixelidentisch) zu den alten guten PNGs.
- Boot-Sequenz per echter DOSBox-Screenshot-Serie (0.3s-Intervall) vermessen:
  Rauser-Karte -> Factor5-Logo (statisch, keine Animation) -> Kellogg's-Logo
  mit Palette-Fade des "praesentiert"-Texts (Indizes 34/42/43/44/45) ->
  Titelbild "Tony & Friends in Kellogg's Land" mit echtem Vorhang-Wipe-Effekt
  (320x480 aus 4 Quadranten KELL256A-D, obere Haelfte faehrt runter, untere
  hoch, treffen sich in der Mitte). Korrigiert eine fruehere Fehlannahme:
  der Wipe sitzt auf dem TITELBILD, nicht auf dem Kellogg's-Markenlogo.
- tools/intro_sequence.py: erster spielbarer pygame-Meilenstein, baut die
  komplette Sequenz nach (Asset-Loading, Palette-Rendering, Timing, echter
  Palette-Fade, Wipe-Effekt). Headless getestet, visuell verifiziert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 16:13:32 +00:00
ARIA 3622bd0a1a Plan: Boot-/Intro-Sequenz als erster Python-Meilenstein, tfmx_player-Referenz gesichert 2026-07-22 15:36:09 +00:00
ARIAandClaude Sonnet 5 3410a53ee7 BOB/ICO/MAP-Formate geloest, PCKELL.DAT als echten Asset-Container entdeckt
- PCKELL.DAT ist der eigentliche Asset-Container (Index am Dateiende),
  nicht PCKELL.PRE -- alle 178 Assets fehlerfrei extrahierbar
  (tools/dat_extract.py, tools/kellogg_formats.DATContainer)
- BOB (Sprites): self-modifying x86 draw-code decodiert, alle 32 Dateien /
  462 Frames korrekt (Tony, Gegner, Items) -- tools/kellogg_formats.parse_bob
- ICO (16x16 EGA-Tilesets) und MAP (Level-Grids, big-endian) decodiert und
  gerendert -- alle 19 ICO- und 22 MAP-Dateien fehlerfrei, Level W1L0 sieht
  korrekt aus (Haeuser, Baeume, Berge an den erwarteten Stellen)
- Palette-Regeln (BOB/ICO/MAP -> passende PCC) aus der C#-Referenz
  uebernommen und in Python neu implementiert
- Aufraeumen: PRE-basierte Extraktion (split_pre.py, extracted_pre) und
  alle Blindflug-Explorationsskripte aus der ersten BOB-Sackgasse entfernt,
  VM-Arbeitsverzeichnis von Debug-Screenshots befreit
- pcc_to_png.py aktualisiert (Xmax/Ymin-Dimensionsfix, jetzt visuell
  gegen DOSBox-Referenz verifiziert statt nur behauptet)

Offen: ARE (Kollisionszonen, auch Referenz-Projekt unvollstaendig) und
SAM/TFX (TFMX-Sound) noch nicht angefasst.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 08:21:12 +00:00
ARIA 62af15e91c 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.
2026-07-22 07:58:09 +00:00
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
ARIA 3c650e6aef Initial commit: PCC-Decoder (mit Xmax/Ymax-Bugfix), Notes, DOSBox-Config
- tools/pcc_to_png.py: PCX-artiger Decoder fuer die 77 PCC-Vollbild-/Logo-
  Dateien, mit Fix fuer falsch gelesene Width/Height (muss aus Xmax-Xmin+1/
  Ymax-Ymin+1 statt Offset 12-15 berechnet werden)
- tools/split_pre.py: Extrahiert alle 181 Dateien aus PCKELL.PRE
- png_out/: alle 77 konvertierten PNGs (Arbeitsergebnis, kein Original-Asset)
- NOTES.md: vollstaendiger Analyse-Stand inkl. offener Punkte
- dosbox/dosbox.conf: funktionierende Testkonfiguration (IRQ-Fix)

Bewusst ausgeschlossen (.gitignore): raw/ und extracted_pre/, da Original-
Spieldaten von Kellogg's Tony and Friends (1994), keine Weiterverbreitung.
2026-07-22 07:20:13 +00:00