From 6ac9d7fc6b08867a70920492aabd3d2769128a3e Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 25 Jul 2026 15:53:20 +0200 Subject: [PATCH] NOTES: Animationssystem komplett dekodiert (BOB-Header = Slot+Anker, +50-Richtungsregel, universelle Slot-Semantik, Toucan-Flugphysik) --- NOTES.md | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/NOTES.md b/NOTES.md index 5236b12..34f21ef 100644 --- a/NOTES.md +++ b/NOTES.md @@ -1789,3 +1789,62 @@ Verifiziert: Extraktor-Output == eingebettete Tabelle, Karten-Render weiterhin Pixelfehler 5.14 (= VGA-DAC-Grundrauschen) gegen die DOSBox-Referenz in beiden Blinkphasen. --once exit 0. Das Spiel braucht zur Laufzeit jetzt wieder NUR PCKELL.DAT. + +## 26.07.2026 (18) -- ANIMATIONSSYSTEM KOMPLETT GEKNACKT (Disassembly + BOB-Header) + +Stefans Auftrag: alle Charaktere per Disassembly sauber bauen. Ergebnis: +das komplette Sprite-/Animationssystem des Originals ist jetzt verstanden. + +### Die Schluessel-Erkenntnis: BOB-Frame-Header tragen SLOT-NUMMERN +Die 14-Byte-Frame-Header (Felder u0/u1/u2 vor width/height) bedeuten: + u0 = SLOT-Nummer (Engine-Sprite-Index!), u1 = Anker-X, u2 = Anker-Y + (Anker = Fusspunkt; u2=64 bei Cocos Hangel-Frames = Anker UNTER dem + Sprite, u2=40 bei Smacks-Schwimmframes = tiefer im Wasser. Das ersetzt + unseren SPRITE_SINK-Hack durch Originaldaten.) + +### Richtungs-Regel (aus set_anim, Seg3:0x4cad, Datei 62637) + sprite = slot; wenn Blickrichtung LINKS: sprite += 50 (add ax,0x32) + -> Slots 0-49 rechts, 50-99 links. BOBs sind gepaart gespeichert + (gerade=rechts slot i/2, ungerade=links +50) -- deckt sich mit allen + bisherigen Funden. Einzel-Frames (45, 48, 49, Smacks 29-31) existieren + nur einseitig. + +### Universelle Slot-Semantik (fuer ALLE Charaktere gleich!) + 0-7 Laufzyklus ([delay 4] = 17.5 fps) 8 Stehen/Idle + 9 Springen/Fallen 10,11 Absprung-Hocke + 12 Ducken 13-16 RENNEN (nur Tony hat sie!) + 17,18 (Schaden?) 19,20 Tod + Sturz 22,23,24 Idle-Warteanimation + 22-28 Schwimmen (nur Smacks/Toucan haben die Slots!) + [10][25,26,27,28] = Schwimmstoss-Tabelle + 29-31 Toucan: Fluegelschlag (Paare 32x56) / Smacks: Blasen-Aktion (Einzel) + 33,34 Toucan: Gleiten ([4][34,34,34] mit Status-Flag 0x20) + 35-44 Coco: HANGELN (Paare, Anker-Y 64!) -- Code setzt 43/44/91/92 direkt + 45 In-die-Tuer-gucken (Einzelframe, alle Chars; Code: Flag ds:0xd7a0) + 48,49 Accessoire-Dropitems beim Tod (16x16: Muetze/Schal/...) + -> FAEHIGKEITEN ergeben sich aus vorhandenen Slots: nur Tony hat 13-16 + (rennen), nur Smacks/Toucan 25-28 (schwimmen), nur Coco 35-44 + (hangeln), nur Toucan 29-34 als Paare (fliegen). Deckt sich 1:1 mit + dem Handbuch! + +### Toucan-Flugmechanik (aus Zustandsmaschine Seg3 ~0xfb79) + Absprung/Schlag: v = -0x18000 (16.16 fixed); jeder weitere Schlag + addiert +0x2000 (wird schwaecher); unter -0x4000 kein Schlag mehr -> + genau die "fuenfmal mit den Fluegeln" aus dem Handbuch. Anim [12][29,30,31,30]. + +### Weitere Code-Funde + - Anim-Tabellenformat: [delay_ticks(70Hz)][slots...][ffff=Loop|fffe=Halten] + fffe-Variante: bleibt auf letztem Frame stehen (kein Loop). + - Tuer-Erkennung im Code: ctype-Nibble == 3 (Kopfhoehe y-0x2e) -> Tuer! + ctype == 0xc -> zweiter Spezialfall (y-0x36, vermutlich Levelausgang). + - Objektstruktur es:[di]: +0 x(16.16) +4 y(16.16) +0xc v(16.16) + +0x10 Sprite-Index +0x1c/0x1e Anim-Delay +0x20/0x22 Anim-Pos + +0x26 Richtung (1/-1) +0x28 ctype-Flags +0x3e Idle-Timer +0x6c Sprungkraft + - HUD-Ziffern-Routine (mov ax,218 @0xf084): X-Positionen 186/194/202, + Spriteindex = Ziffer + 500 (GAMEBAR-Slotbasis 500). + - Charakter-Lade-Trios @52417: fros_w/tony/frosties, smac_w/smacks/ + smackies, loop_w/toucan/loops, coco_w/coco/cocopops (via ds:0xb568). + - KARTE0-9-Laderoutine @22834: Handles nach ds:0x9e40 (Karten-Slots 900+). + - 100er/200er-Tabellenwerte (@144006-144152) sind NICHT die Charaktere -- + vermutlich Levelobjekt-/Gegner-Slots (Ladeliste 'ani',A-O,gamebar,keys, + vitamin,platfw1,doors,blume,wolke,KROKO,BOSSNAKE,w2snake,DRAGON @4984). + Noch offen.