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>
This commit is contained in:
2026-07-25 14:18:30 +02:00
co-authored by Claude Fable 5
parent cdf6da6f7d
commit 68be969e0d
4 changed files with 251 additions and 6 deletions
+13 -3
View File
@@ -957,7 +957,10 @@ def main():
else:
from . import menu as menu_mod
from . import level as level_mod
from . import worldmap as worldmap_mod
m = menu_mod.MenuAssets(assets)
map_state = {}
pending_map = 'W1L1'
def play_title_music():
path = audio_paths.get(('TITEL', None))
@@ -976,10 +979,17 @@ def main():
r = menu_mod.run_menu(clock, m)
state = {'start': 'map', 'title': 'title'}.get(r, 'quit')
elif state == 'map':
r = menu_mod.run_worldmap(clock, m)
state = {'level': 'level', 'menu': 'menu'}.get(r, 'quit')
r = worldmap_mod.run_worldmap(clock, assets, m, state=map_state)
if isinstance(r, tuple) and r[0] == 'level':
pending_map = r[1]
state = 'level'
elif r == 'menu':
state = 'menu'
else:
state = 'quit'
elif state == 'level':
r = level_mod.run_level(clock, assets, audio_paths)
r = level_mod.run_level(clock, assets, audio_paths,
map_name=pending_map)
if r == 'map':
play_title_music() # Karte/Menue laufen mit Titelmusik
state = 'map'