SM64DS Behaviour Documentation
Users browsing this thread: 1 Guest(s)

Below is a collection of my various documentation for hacking SM64DS (EU).

Spoiler: Misc Routines and Offsets
---OBJECT---
02043CE4: main behavior loop
02010e2c: spawn object (r0 actor id, r1 param, r2 spawn coordinates, r3 param)

--SOUNDS---
02012328: play sound (1)
02021be0: play sound (2)

---GAME---
0202E348: load new level
020e5148: player current action routine

---VARIABLES---
0209f2f4: player lives
0211117c/02092144: player health
0209f2f8: current level id

Spoiler: Collision Types
Byte 3 Camera Settings:

4 - Camera rotates to match direction
3 - Camera does not rotate to match direction

Normal Hard Surface:
196 15 3 0 255 0 0 0
196 15 1 0 255 0 0 0 - higher angle
196 143 5 0 255 0 0 0 - close up, fixed
196 0 4 0 255 0 0 0 - sticks to ff05, indoor camera
5 0 3 0 255 0 0 0 - revolves around ff00, ff01, most others (must be view id 0)

Normal Path Surface:
193 15 3 0 255 0 0 0

Wood:
197 15 3 0 255 0 0 0

Mesh Floor:
204 15 3 0 255 0 0 0

Grass:
194 15 3 0 255 0 0 0

Sand:
200 15 3 0 255 0 0 0

Leaves:
201 15 3 0 255 0 0 0

Water:
244 15 0 0 255 0 0 0
35 0 4 0 255 0 0 0

Climbable Hill:
196 47 115 0 255 0 0 0; Normal
197 47 115 0 255 0 0 0; Wood

Slide:
196 223 3 0 255 0 0 0

Unclimbable Hill:
196 63 3 0 255 0 0 0

Unclimbable Grass Hill:
194 63 4 0 255 0 0 0

Vanish Cap Wall:
76 128 140 1 255 0 0 0 (adding the 1 to anything lets camera pass through)

Death Floor:
192 15 32 0 255 0 0 0
192 15 37 0 255 0 0 0; No Drop

Death Floor (Wind):
192 15 155 0 255 0 0 0

Lethal Lava:
192 143 8 0 255 0 0 0

Lethal Ice:
199 15 12 0 255 0 0 0

Lethal Zone:
192 15 1 3 255 0 0 0

Instant-Death Sand:
8 15 76 0 255 0 0 0

No-Death Sand:
8 0 60 0 255 0 0 0

Snow:
198 63 4 0 255 0 0 0

Peach's Slide Starting Line:
196 223 120 0 255 0 0 0

Peach's Slide Finish Line:
196 223 128 0 255 0 0 0

Hang From Ceiling (Mesh):
204 15 27 1 255 0 0 0 0

Hang From Ceiling (Wood):
197 15 27 0 255 0 0 0 0

Normal Wind (Uses paths):
192 143 92 0 1 0 0 0

King Bob-Omb Mountain Top:
196 143 3 0 255 0 0 0

Level Boundary:
192 63 4 1 255 0 0 0

--------CAMERA TYPES--------
104 - fixed point, always face player
FF00 - point directly inwards to view
FF01 - point away from a point, pans
FF02 - normal, lock when entering level
FF03 - normal?
FF04 - lock and rotate away from set point
FF05 - point outwards to player
FF06 - distant camera, eg fight with Big Bob-omb
FF07 - controls camera position when paused

Spoiler: Disable Level Intro Messages
//Disable Level Intro Messages.
020C4728/0xD166C: NOP

//Disable Bowser Inside Castle Message.
0xD41B8: NOP

//Disable Star Collect Messages.
0xD41A4: NOP
0xF6B8C: NOP
0xF6B94: NOP

Spoiler: Offsets in info.bin of the SDAT

all in info.bin


0x40 - main table
each entry 0x0C long, ends with 40 00 00 00
first word is sseq id
byte 4 controls which sound banks are loaded
bytes 6 and 7 control which byte 1 and 2 need to be selected in sm64dse

MINICLEAR 0x1C0
PLAYROOM 0x1CC
MINIOTATE 0x1D8
JAZZ 0x1F0
CASIO 0x1FC
MINIMERRY 0x208
MINISNOW2(Rolling Star) 0x220
CASINOM3 0x22c
MINICOIN 0x238
MINIMUTEKI 0x244
MINIMOTOS 0x25C
MINIHANA 0x274
ESP 0x280
START 0x298
KPCLEAR 0x2A4
KPCLEARX3 0x2B0
SLVSTAR1 0x2BC
SLVSTAR2 0x2C8
SLVSTAR3 0x2D4
SLVSTAR4 0x2E0
SLVSTAR5 0x2EC
DROPSTAR 0x2F8
GOAL 0x304
CLEAR 0x328
OWLFLY 0x3C4
BIG 0x3DC
SELECT 0x430
SHIRO 0x43C
CHIJOU 0x448
WATER 0x454
SNOW2 0x460
OBAKE 0x46C
DUNGEON 0x478
MOTOS 0x484
EXTRA 0x490
ARTHETIC 0x49C
KAPPA 0x4A8
KAPPA3 0x4B4
DOLPIC 0x4C0
OPENING 0x4E4
STAFFROLL 0x4FC

Open up info.bin from the sdat and go to 0x40 for a table.
First word is the number of entries in the table, each after it is a pointer to details on each sequence and the sseq/sbnk/swar loaded.
After going to where one of the entries points, you'll find the first 4 bytes identify the sseq.
The next 4 bytes identify the sbnk and swar, also effecting which byte 1 and 2 need to be set in order for the music to play in your level.
You can easily copy these from any other sequence to use the same instrument sets multiple times.

Spoiler: Object Visible Distance

02111a3c - possibly clock seed

02111a50(021118a8) - ct mecha 10 rotating
021118cc - store rotation at 0x114 from object
+0xb0 - 1a for inactive, 02 for active? (021905a0 in test)

020110fc - disappear object (draw distance stored +0xc from here)
02011128 - appear object

020110ec - unconditional jump to always be visible

//Everything always visible
0x110EC: 0A 00 00 EB

02043cb8 - jump to object visibility handlers, (02010f78 is one were using)
020110d8 - load max range for each object(0xBC r4)
021905AC: 00 00 00 7F, always visible

02010e20/0201160c - writes max range on level entry
0201161c - runs the previous function for each object
0201160c - reads draw distance from object data (BREAK HERE, then search whatever is at R2)

0x247d2c - mecha 11 object in rom
+0x14 - draw distance
+0x48 - main behavior (02111934)

02108a94 - chuckya window object

//Mecha 11 Always Visible
0x247D40: FF FF FF 7F

//Chuckya window always visible
0x1159eC: FF FF FF 7F

//Stars always visible
0x117998: FF FF FF 7F

//Carriage increased view
0x2D9380: FF FF FF 7F
(This post was last modified: 29-08-2016, 09:46 AM by Skeletons.)

SM64DS Behaviour Documentation
Users browsing this thread: 1 Guest(s)