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>
This commit is contained in:
duffyduck
2026-07-25 01:17:44 +02:00
co-authored by Claude Fable 5
parent 4517efbdf8
commit 973e290cf6
5 changed files with 420 additions and 7 deletions
+42
View File
@@ -1371,3 +1371,45 @@ deckungsgleich).
2. Gameplay: Tony auf W1L0 (Map/Tiles/Sprites laengst dekodiert).
3. Copyright-Tafel-Ausloeser im Original klaeren (niedrig).
4. Highscores persistent machen + Eintrag-Eingabe (erst mit Gameplay relevant).
## 25.07.2026 -- LEVEL 1 SPIELBAR (erster Gameplay-Slice)
Stefans Auftrag: Weltkarte Level 1 auswaehlbar + "schauen was du aus Level 1
machst". Ergebnis: das erste Level laeuft.
**Referenz-Erkenntnisse (DOSBox, Xvfb+XTEST mit gehaltenen Tasten):**
- Auf der Weltkarte startet SPACE das Level (Return tut nichts, Pfeiltasten
bewegen am Spielstart keinen sichtbaren Cursor -- 0 Pixel Diff nach 2x
Right). Kurze Schwarzblende, dann steht das Level sofort.
- **Level 1 = W1L1.MAP** -- per Template-Matching des Gameplay-Screenshots
gegen die gerenderten Maps (diff W1L1=35.4 vs W1L0=56.5/W1L2=58.8; Kamera-
Match bei Map-Pixel 128,496). W1L0 ist also NICHT Level 1 (vermutlich
Bonus-/Sonderlevel).
- HUD unten 320x24 (Viewport 320x176): Kellogg's-Schriftzug, Keks-Zaehler,
Item-Box, Score, 4 Herzen, Tony-Kopf + Leben (3), Uhr zaehlt von 10:00.
- Kollision: MAP-ctype **Bit 32 = solide** (40=Boden-Oberkante=32|8,
32=Fuellung; 0=Luft, 4=Item-Marker, 16=Special). Empirisch an der
Spawn-Plattform (Zeile 40) verifiziert.
- TONY.BOB-Frames: 8-Phasen-Gehzyklus, GERADE Indizes = links, UNGERADE =
rechts (0..15); 16/17 Sprung, 24/25 Ducken (Zuordnung v1, ggf. justieren).
- GAMEBAR.BOB: 0-9 Ziffern, 10-16 Herzen/Schluessel(rot/blau/gruen)/Kopf --
Ziffern rendern mit bob-Regel-Palette dunkelrot statt weiss wie im
Original-HUD (Laufzeit-Palette unklar) -> HUD v1 nutzt FON_1B-Ziffern.
**Implementiert (game/level.py, Commit siehe git):** Level-Klasse (MAP+ICO
einmal komplett vorgerendert, Kamera blittet Ausschnitt), Tony (AABB-Physik
gegen Tile-Grid: laufen 110px/s, Sprung -300px/s, g=900 -- v1 nach Gefuehl,
Feinschliff nach Stefans Test), HUD-Nachbildung, ONGAME2-Song0 als
Levelmusik-ANNAHME (wie Factor5: nach Gehoer korrigieren). ESC -> Karte
(Titelmusik startet wieder). Weltkarte: Space/Return -> Level.
ONGAME2 wird im Audio-Preload mitgerendert (Levelstart blockiert nie).
**Verifiziert:** E2E unter Xvfb mit gehaltenen Tasten -- Tony laeuft rechts
(Kamera scrollt), faellt Plattformkante runter, laeuft links unterm
Brueckenbogen durch, ESC->Karte->Menue->QUIT rc=0. Level-Standbild praktisch
deckungsgleich mit DOSBox-Referenz (Haus/Baum/?-Block/Bruecke/Saeulen).
--once-Regression exit 0.
**Offen:** Items (ctype 4) einsammeln, Gegner, Duck-Frame-Zuordnung pruefen,
Original-HUD-Grafik, Karten-Animationen (KARTE0-9), Levelmusik-Song nach
Gehoer, Zeitablauf/Leben-Logik, weitere Level freischalten.