Timeout-Fix: Levelzeit 0 loest Sterbeanimation + Leben-Abzug aus, Respawn mit frischer Zeit

This commit is contained in:
2026-07-26 10:48:46 +02:00
parent 696e3c1d8e
commit b9532758cb
2 changed files with 19 additions and 1 deletions
+9
View File
@@ -1965,3 +1965,12 @@ ALT beim Schwimmen/Tauchen (nur mit Slots 29-31 = Smacks): Blase waechst
platzt an der Oberflaeche oder nach 4s. Gegner-Fang (Blase + rauswerfen) platzt an der Oberflaeche oder nach 4s. Gegner-Fang (Blase + rauswerfen)
kommt zusammen mit den Gegnern, sobald die Typ-Zuordnung steht. Gegner- kommt zusammen mit den Gegnern, sobald die Typ-Zuordnung steht. Gegner-
Sterbeanimationen (wie bei den Spielfiguren) ebenfalls dann. Sterbeanimationen (wie bei den Spielfiguren) ebenfalls dann.
## 26.07.2026 (25) -- Levelzeit-Timeout hat jetzt Konsequenzen
Stefans Fund: Timer lief runter, aber bei 0 passierte nichts. Fix in
run_level: time_left wird am Rundenanfang berechnet; bei <= 0 startet die
Sterbeanimation (wie Herzen leer), danach Leben -1, Respawn mit vollen
Herzen und FRISCHER Levelzeit (start-Reset auch beim Respawn nach
normalem Tod). E2E: Levelzeit auf 2s gestutzt -> 3 Versuche + Rueckkehr
zur Karte nach 13.4s. --once exit 0.
+10 -1
View File
@@ -780,6 +780,15 @@ def run_level(clock, assets, audio_paths, map_name='W1L1'):
vx=55.0 * player.facing, t=0.0)) vx=55.0 * player.facing, t=0.0))
keys = pygame.key.get_pressed() keys = pygame.key.get_pressed()
time_left = info['time'] - (time.monotonic() - start)
# Zeit abgelaufen -> wie Herzen leer: Sterbeanimation, Leben -1
# (Stefans Fund: "bei 0 wird mir kein Leben abgezogen")
if dying is None and time_left <= 0:
hearts = 0
player.hurt_t = 0.0
player.force_slot = SLOT_DEATH
dying = dict(t=0.0, vy=-260.0,
drop_y=player.y - 40.0, drop_vy=-30.0)
if dying is None: if dying is None:
player.update(level, dt, keys) player.update(level, dt, keys)
else: else:
@@ -800,6 +809,7 @@ def run_level(clock, assets, audio_paths, map_name='W1L1'):
player.x, player.y = spawn_px player.x, player.y = spawn_px
player.vy = 0.0 player.vy = 0.0
player.spawn_t = SPAWN_ANIM_SECONDS player.spawn_t = SPAWN_ANIM_SECONDS
start = time.monotonic() # neuer Versuch = frische Levelzeit
# Tuer-Sequenz: offen zeigen (Figur schaut rein), nach 1s die Aktion # Tuer-Sequenz: offen zeigen (Figur schaut rein), nach 1s die Aktion
if door_open_t is not None: if door_open_t is not None:
@@ -908,7 +918,6 @@ def run_level(clock, assets, audio_paths, map_name='W1L1'):
overlay.fill(WATER_TINT) overlay.fill(WATER_TINT)
canvas.blit(overlay, (0, top)) canvas.blit(overlay, (0, top))
time_left = info['time'] - (time.monotonic() - start)
hud.draw(canvas, VIEW_H, player.d, cookies=0, score=0, hud.draw(canvas, VIEW_H, player.d, cookies=0, score=0,
hearts=hearts, lives=lives, time_left=time_left) hearts=hearts, lives=lives, time_left=time_left)