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>
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>
- 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>
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>
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>
- 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>
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>
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>
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>
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>
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>
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>