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>
This commit is contained in:
@@ -1621,3 +1621,23 @@ Tony-auf-Wasser+Frosties-Idle von Stefan als "sehr geil" abgenommen (kein Fix).
|
||||
SMACKS Frame 48 -- jeweils der letzte Frame vor den Magenta-
|
||||
Platzhaltern. Der als "gebueckt/kriechend" einsortierte Tony-50 war in
|
||||
Wahrheit das Reinschauen.
|
||||
|
||||
## 25.07.2026 (11) -- Disassembly-Frage + Smacks-Sprung per Referenz geklaert
|
||||
|
||||
Stefans Frage: Animations-Zuordnungen aus dem Binary disassemblieren?
|
||||
- Byte-Muster-Suche nach Frame-Tabellen (0,2,4..14 / 26,28,30,32 / 37,39,
|
||||
41,43 als u8- und u16le-Folgen) in START.EXE und RTM.EXE: KEINE Treffer
|
||||
-- die Sequenzen liegen nicht als nackte Tabellen im Binary (gepackt oder
|
||||
als Code). Voll-Disassembly von 148KB 16-bit-Borland-Code waere ein
|
||||
Wochenprojekt -- der empirische Weg (DOSBox-Frameserie) bleibt schneller
|
||||
und sicherer.
|
||||
- Stattdessen DOSBox-Session mit 0.12s-Intervall: per TUER zu Smacks
|
||||
gewechselt (verifiziert dabei UNSER Tuer-/Menue-Design gegen das
|
||||
Original: Menue-Layout deckungsgleich, Coco/Toucan grau ✓) und
|
||||
Spruenge aufgenommen. ERKENNTNISSE:
|
||||
1. Der Original-Sprung hat eine ABSPRUNG-HOCKE (Kauer-Frame im
|
||||
Absprungmoment, dann Streckung im Flug) -- das fehlte bei uns
|
||||
("Sprunganimation nicht richtig"-Gefuehl). Eingebaut:
|
||||
JUMP_SQUAT_SECONDS=0.09 zeigt kurz den Duck-Frame.
|
||||
2. Die TUER-SEQUENZ DIMMT DEN LEVEL AB (Szene dunkel waehrend der
|
||||
Interaktion) -- eingebaut (Overlay waehrend door_open_t).
|
||||
|
||||
@@ -56,6 +56,8 @@ WATER_BOUNCE_V = -110.0 # Auto-Huepfer auf der Wasseroberflaeche
|
||||
# (Endlosschleife, Stefans Beschreibung);
|
||||
# manueller Sprung (voll) geht trotzdem
|
||||
DEATH_ANIM_SECONDS = 2.4 # Tuch faellt, Figur fliegt aus dem Bild
|
||||
JUMP_SQUAT_SECONDS = 0.09 # Absprung-Hocke (DOSBox-Referenz: kurzer
|
||||
# Kauer-Frame im Absprungmoment, dann Streckung)
|
||||
|
||||
SOLID_BIT = 32
|
||||
SLOPE_CT = 16
|
||||
@@ -257,6 +259,7 @@ class Player:
|
||||
self.spawn_t = 0.0 # Start-Sprite-Sequenz (Arm hoch/Daumen hoch)
|
||||
self.force_frame = None # erzwungener Frame (Tuer-Peek, Tod)
|
||||
self.hurt_t = 0.0 # Rest-Blinkzeit nach Schaden
|
||||
self.jump_squat_t = 0.0 # Absprung-Hocke (kurz nach dem Absprung)
|
||||
self._grounded_before = False
|
||||
self.set_character(char, pos)
|
||||
|
||||
@@ -280,6 +283,8 @@ class Player:
|
||||
def update(self, level, dt, keys):
|
||||
if self.hurt_t > 0:
|
||||
self.hurt_t -= dt
|
||||
if self.jump_squat_t > 0:
|
||||
self.jump_squat_t -= dt
|
||||
if self.spawn_t > 0:
|
||||
self.spawn_t -= dt
|
||||
# Eingabe bricht die Start-Pose sofort ab
|
||||
@@ -332,6 +337,7 @@ class Player:
|
||||
self.vy = JUMP_VELOCITY
|
||||
self.on_ground = False
|
||||
self.idle_t = 0.0
|
||||
self.jump_squat_t = JUMP_SQUAT_SECONDS
|
||||
self.vy = min(self.vy + GRAVITY * dt, 480.0)
|
||||
|
||||
# X + Wandkollision. STEP_UP: die untersten Pixel der Hitbox blocken
|
||||
@@ -428,6 +434,8 @@ class Player:
|
||||
if self.ducking:
|
||||
return self._pick('duck_r', 'duck_l')
|
||||
if not self.on_ground:
|
||||
if self.jump_squat_t > 0:
|
||||
return self._pick('duck_r', 'duck_l') # Absprung-Hocke
|
||||
return self._pick('jump_r', 'jump_l')
|
||||
if self.vx:
|
||||
if self.running and d['run_r']:
|
||||
@@ -730,6 +738,12 @@ def run_level(clock, assets, audio_paths, map_name='W1L1'):
|
||||
drop = player.surfs[player.d['drop_frame']]
|
||||
canvas.blit(drop, (int(player.x - drop.get_width() / 2 - cam_x),
|
||||
int(dying['drop_y'] - cam_y)))
|
||||
# Tuer offen: Level abdunkeln (Original dimmt die Szene waehrend der
|
||||
# Tuer-Interaktion -- DOSBox-Referenz)
|
||||
if door_open_t is not None:
|
||||
dim = pygame.Surface((VIEW_W, VIEW_H), pygame.SRCALPHA)
|
||||
dim.fill((0, 0, 30, 120))
|
||||
canvas.blit(dim, (0, 0))
|
||||
# Wasser: dunkles Overlay unterhalb der Wasserlinie (im Original ein
|
||||
# VGA-Palette-Effekt, nur bei machine=vgaonly sichtbar -- Stefans Fund)
|
||||
wy = info.get('water_y')
|
||||
|
||||
Reference in New Issue
Block a user