NOTES: Animationssystem komplett dekodiert (BOB-Header = Slot+Anker, +50-Richtungsregel, universelle Slot-Semantik, Toucan-Flugphysik)

This commit is contained in:
2026-07-25 15:53:20 +02:00
parent ac6a736d28
commit 6ac9d7fc6b
+59
View File
@@ -1789,3 +1789,62 @@ Verifiziert: Extraktor-Output == eingebettete Tabelle, Karten-Render
weiterhin Pixelfehler 5.14 (= VGA-DAC-Grundrauschen) gegen die weiterhin Pixelfehler 5.14 (= VGA-DAC-Grundrauschen) gegen die
DOSBox-Referenz in beiden Blinkphasen. --once exit 0. Das Spiel braucht DOSBox-Referenz in beiden Blinkphasen. --once exit 0. Das Spiel braucht
zur Laufzeit jetzt wieder NUR PCKELL.DAT. 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.