Tool-assisted game movies
When human skills are just not enough

Game Resources / DS / Super Mario 64DS

Table of contents [expand all] [collapse all]

Memory addresses for Super Mario 64 DS (USA, v1.0)

Side note : The DS framerate is around 60 FPS, but most of this game runs at 30 FPS, which means that almost every sort of timer will decrease every 2 frames. Also, the input given by the player is counted when the actual game frame finishes, not when it lags.

Unfortunately, most of the interesting information is not at a fixed address; it changes as you move from one area to another. The address that refers to the player base is 0x02097490. This address holds a 4-byte pointer to the base of most of the interesting addresses.

For instance, in the castle grounds when you first start the game, 0x02097490 holds 0x02169718. But once you get into the castle, 0x02097490 holds 0x0217AB38.

These are the addresses that have been decoded so far:

Address Size (bytes) Description
base + 0x08 1 Which character you are playing as (Mario: 0, Luigi: 1, Wario: 2, Yoshi: 3)
(Putting a cap will set this value to the character of the cap)
base + 0x5C, 0x60, 0x64 4 Character's X, Y and Z positions
base + 0x8E 2 Facing angle
base + 0x94 2 Motion angle
base + 0x98 4 Speed
base + 0x6ED 1 Y run timer (max is 30)
base + 0xA4 4 X Velocity
base + 0xA8 4 Y Velocity (To prevent players from doing Vertical Speed Conservation, the value it holds is always -32678 when on the ground)
base + 0xAC 4 Z Velocity
base + 0x644 4 The Y position of the floor that is under you (-2,147,483,648 if there is no floor under you)
base + 0x706 1 Water state. When in the water or when the game thinks so, this address holds a value of 1. If not, the value it holds is 0.
base + 0x370, 374, 378 4 These addresses have to do with what mode you're in (walking/jumping/swimming/crouching/etc.)
0x02096750 4 RNG. Understandable if shown as Hexadecimal
0x0217A11E 1 SSL Pillar counter (also used for some other counts in the game)
0x02151D14 4 Koopa the Quick's speed in Bomb-Omb Battlefield
0x02167F84 4 Koopa the Quick's speed in Tiny Huge Island
0x0217B1D4 2 Bowser's revolution speed, the higher it is the faster you’re spinning him.
0x02176464 4 Water level in the basement. Not fully tested, useful for hacking the 30 stars door skip to be easier.
base + 0xCC 1 Character's room reference. This address is unsigned and links the character to the main room currently loaded.
When unloading the main room you're supposed to currently be in and loading another one instead, you will need to cheat this value to keep the character alive to avoid softlocking.

The following addresses are actually less than base; this means they are probably in a separate object, so they might not always be at the same place relative to base (although they are consistent in limited testing).

Address Size (bytes) Description
base - 0x12C, 0x128, 0x124 4 camera X, Y and Z positions
base - 0x3A 2 camera up/down angle

Informations about the addresses given

Angles are 2-byte values that use the full range from 0 to 65535 and then wrap (so an angle of 65535 is almost the same as an angle of 0). The character's facing angle controls what angle the character is drawn on the screen (relevant for glitchy longjumps, kicks, crouch, yoshi's tongue, etc.); the character's motion angle controls what direction the character is moving. When you're going in a straight line then the two angles are the same; when you're turning quickly (or some other things such as redirected jumps), the model angle lags behind the motion angle.

The game uses fixed point 20.12 units for speed and position (so an internal speed value of 32678 represents a speed of 8). However, we will use the internal values (consider them to be ints) in order to be more precise.

Koopa the Quick's maximum speed is 98,304 but it becomes 196,108 when you finish the race (if you finish before him). Though, it will become 98,304 again if you go close to him, even after finishing the race.

Y run is set as 30 as soon as you can run fast, even if you're still standing holding Y. The Y run timer only decreases when you're running/walking and you can conserve it by doing a move. Even crouching keeps it. If the Y run timer eventually reaches 0 and that you want to keep the speed as long as possible, you need to press no-direction for 6 frames, then pressing forward again for 2 frames, then pressing no-direction for 6 frames, etc. This is only useful if you are heading to go straight forward.

The Random Number Generator (RNG) is set to the frame counter when entering a new area. Therefore it has limited manipulations which means that you need to be lucky and hope you get a good RNG when entering a level. The way to manipulate it is to delay the entrance to a level, or try to save frames earlier to get a larger choice.

Maximum speeds

Note that the maximum speed for a move does not mean you cannot get a higher speed while doing that move. In fact, you can get a higher speed than the maximum speed in some instances. For example, if you jump immediately after doing a long jump, you will notice that your speed is much higher than the maximum speed for a jump. In that case, you will need to check about the no-direction trick further below. Also, the maximum speed when you're sliding, regardless of the move you are in, is 409,600.

Here are listed the maximum speeds of every character for every move :

Character Walking Running Y running Jumping (most air moves) Long Jump Swimming
Mario 36,860 147,440 176,921 121,638 221,160 65,536
Luigi 32,760 131,040 157,242 108,108 196,560 98,304
Yoshi 32,760 131,040 157,242 108,108 196,560 58,976
Wario 30,720 122,880 147,450 101,376 184,320 42,592

Glitches and Tricks

See also

Combined RSS Feed
GameResources/DS/SuperMario64DS last edited by Migu on 2020-02-23 19:13:00
Page info and history | Latest diff | List referrers | View Source