BINARY-DURCHBRUCH: NE-Overlay geparst, Original-Animationstabellen gefunden

START.EXE = MZ-Stub + ungepackte NE-Executable (Borland DPMI16). Im
DATA-Segment liegen die ANIMATIONSTABELLEN im Klartext (Format
[delay_ticks][frames...]ffff, 70Hz): Engine-Frame x2 = BOB-Frame.
Bestaetigt: Gehzyklus 0-14/17.5fps, Idle 16, Sprung 18, Renn-Rad
26-32. Uebernommen: ECHTE Frosties-Idle-Sequenz (46,48,46,44,...,20x5,
2.8fps) und Original-Anim-Timings (17.5fps Gehen/Rad).

Ausserdem im Binary gefunden: kompletter WELTKARTEN-LAUFPFAD + LEVELPUNKT-
Koordinaten + 22 Levelnamen (Grundlage fuer die Karten-Levelauswahl) und
den "Kellogg's Cheat-Mode" (Level-Waehler). Dump + Offsets in NOTES.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 14:06:45 +02:00
co-authored by Claude Fable 5
parent f7f29a0309
commit cdf6da6f7d
2 changed files with 46 additions and 4 deletions
+40
View File
@@ -1641,3 +1641,43 @@ Stefans Frage: Animations-Zuordnungen aus dem Binary disassemblieren?
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).
## 25.07.2026 (12) -- BINARY-DURCHBRUCH: NE-Overlay + Original-Animationstabellen
Stefans Frage "sollen wir Disassembly versuchen?" -- JA, und es hat sich
gelohnt (kein Voll-Disassembly noetig!):
**START.EXE-Struktur:** MZ-Stub (3.6KB) + NE-Executable als Overlay ab
Offset 3646 (Borland DPMI16, UNGEPACKT, 7 Segmente: 5 CODE ~100KB, 2 DATA).
Borland-Pascal-Shortstrings ("GAMEDATA\" + Name + ".BOB" wird zur Laufzeit
konkateniert -- deshalb fand die fruehe Dateinamen-Suche keine .ARE/.MAP).
String-Fund: "Willkommen im Kellogg's Cheat-Mode" -- Level-Waehler per
Pfeiltasten existiert im Original!
**ANIMATIONSTABELLEN im DATA-Segment (@143858 ff., Format
[delay_ticks][frame...] 0xffff, 70Hz-Ticks):**
FORMEL: Engine-Frame x2 = unser BOB-Frame (gerade=rechts, +1=links)!
- [0,4] 0..7 -> Gehzyklus 0,2..14, delay 4 = 17.5 fps
- [4] 8,8,8 -> Idle 16 (bestaetigt unsere Zuordnung)
- [4] 9 -> Sprung 18 (bestaetigt)
- [4] 10,10,10 -> Frontal 20
- [4] 13,14,15,16 -> RENN-RAD 26,28,30,32 (bestaetigt!)
- [25] 23,24,23,22,...,10x5 -> ECHTE Frosties-Sequenz
46,48,46,44,...,20x5 (delay 25 = 2.8 fps) -- uebernommen.
- Weitere Listen mit globalen Sprite-Indizes (100er/200er/400er/500er/
900er) = andere BOBs/Items/Karten-Sprites (Basis-Offsets noch offen).
**WELTKARTEN-DATEN (@145114-146760):** kompletter Karten-LAUFPFAD als
Records [x,y,flag,25] ((58,40)->...ueber die ganze Karte), dazwischen
[x,y]-Paare = LEVELPUNKT-Positionen ((53,56),(108,51),(126,81),(142,53)
...), am Ende die 22 Levelnamen W1L0..W3L7 als Pascal-Strings. => Die
Weltkarten-Levelauswahl liegt komplett im Binary -- perfekte Grundlage
fuer den naechsten Meilenstein! Voll-Dump gesichert (Session-Scratchpad
anim_tables.txt; bei Bedarf neu erzeugbar, Offsets dokumentiert).
**Angewendet:** Walk/Rad-FPS auf 17.5 (Original-Timing), Frosties-Sequenz
exakt uebernommen, Idle 2.8 fps.
**Offen:** globale Sprite-Basis-Offsets pro BOB entschluesseln (dann sind
ALLE Animationszuordnungen inkl. Smacks-Sprung exakt abzulesen); Karten-
pfad in die Weltkarte einbauen; Cheat-Mode-Aktivierung finden.
+6 -4
View File
@@ -41,10 +41,10 @@ GRAVITY = 900.0
JUMP_VELOCITY = -360.0
SWIM_GRAVITY = 240.0 # Smacks im Wasser: traege sinken
SWIM_KICK = -140.0 # Schwimmstoss mit Space
WALK_ANIM_FPS = 12.0
RUN_ANIM_FPS = 14.0
WALK_ANIM_FPS = 17.5 # Original: delay 4 Ticks @70Hz (Binary-Tabelle)
RUN_ANIM_FPS = 17.5 # Rad hat dasselbe delay 4
IDLE_ANIM_AFTER = 5.0 # Sekunden Stillstand bis zur Idle-Animation
IDLE_ANIM_FPS = 2.5
IDLE_ANIM_FPS = 2.8 # Original: delay 25 Ticks @70Hz
WATER_DAMAGE_EVERY = 1.5 # im Wasser: alle 1.5s ein Herz (Stefan: 5s war arg lang)
SPAWN_ANIM_SECONDS = 1.1 # Start-Sprite beim Levelstart/Charakterwechsel
SPRITE_SINK = 4 # Fuesse sinken optisch in die Blaetter/Gras ein
@@ -73,7 +73,9 @@ CHAR_DEFS = {
# Lauf-Frame bleibt stehen"-Bug)
idle_r=16, idle_l=17, jump_r=18, jump_l=19, duck_r=24, duck_l=25,
swim_r=None, swim_l=None,
idle_anim_r=[44, 46, 48], idle_anim_l=[45, 47, 49],
# ECHTE Sequenz aus der Binary-Animationstabelle (@143966, x2):
idle_anim_r=[46, 48, 46, 44, 46, 44, 46, 44, 46, 48, 46, 44, 46, 20, 20, 20, 20, 20],
idle_anim_l=[47, 49, 47, 45, 47, 45, 47, 45, 47, 49, 47, 45, 47, 21, 21, 21, 21, 21],
spawn_frame=22, # Arm nach oben gestreckt
death_frame=38, drop_frame=40, # erschrocken; fallendes HALSTUCH
peek_frame=50, # in die Tuer reinschauen (Rueckenansicht -- Stefans Fund)