the cutting room mirror

Debug Content

This is a sub-page of Super Mario 64 (Nintendo 64).

To do:

  • Add Dennis's info.
  • Frame Advance needs to be added.
  • Add the missing codes for every version, if found.

Several debug menus and tools remain in the final game. These can be activated via hacking or GameShark codes. Because some characters in the font used for the debug text were overwritten for the North American release, players using this version to test out debug features will find a few letters don't display properly.

Classic Debug Display#

This debug menu was one of the first found in-game with the use of a GameShark. It displays information on Mario's angle, speed, and action, as well as memory info.

Labelled as DebugMessage in the source code.

Access#

Originally this was accessed by pressing: Down, Down, Up, Up, Left, Right, Left, Right on the D-Pad. To enable the classic debug display, enter the appropriate GameShark code for your version of the game.

Japan

USA

Europe

Japan (Shindou)

iQue

LodgeNet

64DD

A032C658 0059
A032D598 0059
A02F9748 0059
A030CCC8 0059
A030F228 0059
A030187C 0059
804A7768 0059

Items#

Label

Meaning

Description

ANG

Angle

The steepness of the floor Mario is standing on.

SPD

Speed

Mario's current speed.

STA

State

Mario's current action (in hex). Shows only the 9 least significant bits of a 32-bit value.

MEM

Memory

Current RAM usage.

BUF

Buffer

Size of the display list buffer.

Complex Debug Display#

This more comprehensive debug display depicts everything from map information to the current number of loaded objects.

Labelled as yjdebug in the source code, after one of the object programmers "Hajime Yajima".

To do:
Add yoshielectron's info.

Access#

To enable the complex debug display, enter the appropriate GameShark code for your version of the game.

Japan

USA

Europe

Japan (Shindou)

iQue

Lodgenet

64DD

8033BEF3 0001
D0339C30 0008
8032FF34 0001
D0339C30 0001
8032FF34 0002
D0339C30 0004
8032FF34 0003
D0339C30 0002
8032FF34 0004
D0339C31 0020
8032FF34 0005
8033D263 0001
D033AFA0 0008
80330E94 0001
D033AFA0 0001
80330E94 0002
D033AFA0 0004
80330E94 0003
D033AFA0 0002
80330E94 0004
D033AFA1 0020
80330E94 0005
8030AE93 0001
D0309260 0008
802FD054 0001
D0309260 0001
802FD054 0002
D0309260 0004
802FD054 0003
D0309260 0002
802FD054 0004
D0309261 0020
802FD054 0005
8031F423 0001
D031D560 0008
803105C4 0001
D031D560 0001
803105C4 0002
D031D560 0004
803105C4 0003
D031D560 0002
803105C4 0004
D031D561 0020
803105C4 0005
80321DD3 0001
D0320610 0008
80312B24 0001
D0320610 0001
80312B24 0002
D0320610 0004
80312B24 0003
D0320610 0002
80312B24 0004
D0320610 0020
80312B24 0005
80310D43 0001
D030F110 0008
80305174 0001
D030F110 0001
80305174 0002
D030F110 0004
80305174 0003
D030F110 0002
80305174 0004
D030F111 0020
80305174 0005
804B7C13 0001
D04B60C0 0008
804AAC54 0001
D04B60C0 0001
804AAC54 0002
D04B60C0 0004
804AAC54 0003
D04B60C0 0002
804AAC54 0004
D04B60C1 0020
804AAC54 0005

Options#

D-Right - Map Info#

Press D-Right to display the "MAPINFO" screen.

Option

Meaning

Description

Notes

AREA

Area

What cell of the collision grid Mario is in.

WX

World X

Mario's current X coordinate.

WY

World Y

Mario's current Y coordinate.

WZ

World Z

Mario's current Z coordinate.

BGY

Boundary Ground Y

Y coordinate of the ground below Mario.

ANGY

Angle Y

Y angle of the ground below Mario.

BGCODE

Boundary Ground Code

Type of the triangle below Mario.

Terrain types can denote slipperyness, camera mode, special properties (sand, snow, wind, water flow), special triangles (painting entrances)

BGSTATUS

Boundary Ground Status

Status bits of triangle below Mario.

1 means the triangle is part of an object, 2 means the camera won't collide with this triangle. 3 means both apply.

BGAREA

Boundary Ground Area

Which room the floor triangle belongs to.

In the castle, Hazy Maze Cave and Big Boo's Haunt the area is split up into rooms which are defined by this property of triangles.

DPRINT OVER

Debug Print Overflow

Appears when text doesn't fit on the screen anymore.

WATER

Water level

Y coordinate of surface of water if Mario is standing or swimming in it

Only appears when you ensure DPRINT OVER doesn't happen

OBJ

Objects

Number of objects currently loaded.

Only appears when you ensure DPRINT OVER doesn't happen

D-Down - Stage Info#

Press D-Down to display the "STAGEINFO" screen.

Option

Meaning

Description

Notes

STAGE PARAM

Stage Parameter

At what time you entered Tick-Tock Clock.

0 means that the long hand was pointing to 3, resulting in slow time; 1 means that the long hand was pointing to 9, resulting in fast time; 2 means that the long hand was pointing to 6, resulting in things moving at random; 3 means that the long hand was pointing to 12, resulting in a still stage.

OBJ

Objects

Number of objects currently loaded.

D-Left - Effect Info#

Press D-Left to display the "EFFECTINFO" screen.

Option

Meaning

Description

Notes

A

?

Currently unknown.

Value does not seem to change.

A0

?

Currently unknown. Internally labelled as effect_p0.

Value does not seem to change.

A1

?

Currently unknown. Internally labelled as effect_p1.

Value does not seem to change.

A2

?

Currently unknown. Internally labelled as effect_p2.

Value does not seem to change.

A3

?

Currently unknown. Internally labelled as effect_p3.

Value does not seem to change.

A4

?

Currently unknown. Internally labelled as effect_p4.

Value does not seem to change.

A5

?

Currently unknown. Internally labelled as effect_p5.

Value does not seem to change.

A6

?

Currently unknown. Internally labelled as effect_p6.

Value does not seem to change.

A7

?

Currently unknown. Internally labelled as effect_p7.

Value does not seem to change.

OBJ

Objects

Number of objects currently loaded.

D-Up - Check Info#

Press D-Up to display the "CHECKINFO" screen. This screen shows info related to collision checking.

Option

Meaning

Description

Notes

AREA

Area

What cell of the collision grid Mario is in.

DG

Data Ground?

Amount of floor triangle checks / such triangles in Mario's area.

Two columns

DW

Data Wall?

Amount of wall triangle checks / such triangles in Mario's area.

DR

Data Roof?

Amount of ceiling triangle checks / such triangles in Mario's area.

LISTAL

List Area Length?

Amount of triangle nodes loaded.

STATBG

Static Boundaries

Amount of level triangles loaded.

MOVEBG

Moving Boundaries

Amount of object triangles loaded.

NULLBG

Null Background

How often a floor-check couldn't find a triangle this frame.

OBJ

Objects

Number of objects currently loaded.

L - Enemy Info#

Some of the values were used to set enemy parameters for debugging. A debug function (try_modify_debug_controls in debug.c in decomp) was implemented to allow the values to be changed in-game with the controller. Changing the parameters would activate certain debug checks/functions used for debugging enemies. It's referred to as yjeditor, named after one of the object programmers "Hajime Yajima".

One example remaining in the code is in boo.inc.c in decomp. The code checked the value of B0 to determine whether Big Boo should spawn. This code was active only for the Japanese version and is a remnant of debugging code.

Press L to display the "ENEMYINFO" screen.

Option

Meaning

Description

Notes

B

?

Currently unknown.

Value does not seem to change.

B0

?

Currently unknown. Internally labeled as enemy_p0.

Value does not seem to change.

B1

?

Currently unknown. Internally labeled as enemy_p1.

Value does not seem to change.

B2

?

Currently unknown. Internally labeled as enemy_p2.

Value does not seem to change.

B3

?

Currently unknown. Internally labeled as enemy_p3.

Value does not seem to change.

B4

?

Currently unknown. Internally labeled as enemy_p4.

Value does not seem to change.

B5

?

Currently unknown. Internally labeled as enemy_p5.

Value does not seem to change.

B6

?

Currently unknown. Internally labeled as enemy_p6.

Value does not seem to change.

B7

?

Currently unknown. Internally labeled as enemy_p7.

Value does not seem to change.

OBJ

Objects

Number of objects currently loaded.

Debug Resource Meter#

This function causes colored bars to appear along the bottom of the screen, which serve as a visual representation of the time different threads take. The bottom four bars are for reference and each mark 1/60 of a second. On top, the time of the audio thread (red), game logic thread (yellow) and video thread (orange) are plotted. When the top bars reach the orange reference bar, processing the frame took longer than 1/30 of a second and a lag frame is introduced. A little red bar appears in the middle whenever this happens. Forces the Star Select screen to appear when entering a level from the Level Select screen. Originally this was accessed by pressing: Up, Up, Down, Down, Left, Right, Left, Right on the D-Pad. Labelled as ProcessMeter in the source code.

Japan

USA

Europe

Japan (Shindou)

iQue

LodgeNet

64DD

8032C654 0001
8032D594 0001
802F9744 0001
8030CCC4 0001
8030F224 0001
80301878 0001
804A7764 0001

Debug Spawn#

This function causes various objects to spawn that alter Mario's movement. Press the D-Pad buttons to spawn either nothing, a normal Koopa Shell, a water Koopa Shell, or a Crazy Box. Don't try to use it inside the castle, though, or the game might crash. Labelled as s_debug in the source code.

Japan

USA

Europe

Japan (Shindou)

iQue

Lodgenet

64DD

8032FF34 0003
8133BF6E 0001
80330E94 0003
8133D2DE 0001
802FD054 0003
8130AF0E 0001
803105C4 0003
8131F49E 0001
80312B24 0003
81321E4E 0001
80305174 0003
81310DBE 0001
804AAC54 0003
804B7C8F 0001

Free Movement Mode#

This function enables a free-movement mode that lets Mario zoom about freely, though not pass through obstacles because floor checks and wall checks are still done. When holding B, you go fast enough to clip through the hitboxes though. Labelled as FREEMOVE in the source code.

Controls:

  • D-Right+Z: Enable free-movement mode.
  • Joystick: Move Mario horizontally.
  • D-Up: Move Mario up.
  • D-Down: Move Mario down.
  • B: Multiply movement speed by 4.
  • L: Multiply movement speed by 0.01.
  • A: Exit free-movement mode.

Japan

USA

Europe

Japan (Shindou)

iQue

D1339C30 2100
8126976E 5F0D
D1339C30 8000
8126976E 97D1
D133AFA0 2100
81269BDA 5FAB
D133AFA0 8000
81269BDA 98D5
D1309260 2100
8125E0FA 3FCE
D1309260 8000
8125E0FA 6CE2
D131D560 2100
81266456 6045
D131D560 8000
81266456 8DA2
D1320610 2100
812668F6 616D
D1320610 8000
812668F6 8ECA

(Source: dudaw, AltoXorg)

Object Movement Status Display#

To do:

  • Find a way to attach this to an object.

An old debug display can be seen here. It was meant to be used for object movement flags. For the debug display to function it needs to be attached to an object. With the code on, press the GS Button while in-game to enable it. Don't press it at the main menus. It's referred to as disp_movestat.

The text means as follows

  • Bound: Object has landed.
  • Touch: Object is on the ground.
  • Takeoff: Object has left the ground.
  • Dive: Object has entered water.
  • S Water: Object is moving at the water's surface.
  • U Water: Object is moving below the water's surface.
  • B Water: Object is moving on the ground in water.
  • Sky: Object is moving in the air.
  • Out Scope: Removed movement flag, unknown what this was for, probably would have been used when an object has either unloaded or is out of the camera's view. In order to display this correctly, you must not be in Big Boo's Haunt, Hazy Maze Cave, or inside the castle.

If you're using Project 64 for this code, it will only work on 2.0 or higher.

Japan

USA

Japan (Shindou)

89248BB8 0000
89248BBA 0000
89248BE2 2A2D
8833BEF3 0001
812CA8CC 0000
812CA8CE 0000
812CA8FC 0000
812CA8FE 0000
812CA92C 0000
812CA92E 0000
812CA95C 0000
812CA95E 0000
812CA98C 0000
812CA98E 0000
812CA9BC 0000
812CA9BE 0000
812CA9EC 0000
812CA9EE 0000
812CAA1C 0000
812CAA1E 0000
812CAA4C 0000
812CAA4E 0000
89248BE8 0000
89248BEA 0000
89248C12 2CE5
8833D263 0001
812CB3AC 0000
812CB3AE 0000
812CB3DC 0000
812CB3DE 0000
812CB40C 0000
812CB40E 0000
812CB43C 0000
812CB43E 0000
812CB46C 0000
812CB46E 0000
812CB49C 0000
812CB49E 0000
812CB4CC 0000
812CB4CE 0000
812CB4FC 0000
812CB4FE 0000
812CB52C 0000
812CB52E 0000
8924BC04 0000
8924BC06 0000
8924BC1A CCE1
8831F423 0001
812B33A8 0000
812B33AA 0000
812B33C8 0000
812B33CA 0000
812B33EC 0000
812B33EE 0000
812B3410 0000
812B3412 0000
812B3434 0000
812B3436 0000
812B3458 0000
812B345A 0000
812B347C 0000
812B347E 0000
812B34A0 0000
812B34A2 0000
812B34C4 0000
812B34C6 0000

(Source: Punk7890, AltoXorg (Shindou))

Level Select#

Access#

Originally, this was able to be accessed by holding C-Left + C-Right + Z + Start on the Mario Head screen, this button combo can still be used to exit the level select in the final however.

Japan

USA

Europe

Japan (Shindou)

iQue

LodgeNet

64DD

A032C64C 0001
A032D58C 0001
A02F973C 0001
A030CCBC 0001
A030F21C 0001
A0301870 0001
804A775C 0001

Options#

To do:
Where are the "STAGE X" names from? Pretty sure they aren't in the ROM.

Please elaborate.
Having more detail is always a good thing.
Specifically: Elaborate on "gigaleak code"

This level select features an early version of the title screen. When enabled, it replaces the file select screen. The courses are listed in the order that their data appears in the game's memory.

When a level is selected, Mario will automatically be sent to the first Star, bypassing the Star selection screen. Exiting a course via Star collection, death, or the pause menu will bring you back to the level select screen. Attempting to access one of the removed entries causes the game to reset. However, thanks to gigaleak code (files in bbgames/sm64/map), it was discovered that the 7 missing entries were test levels. These levels names are only present in their models or other references to that stage. For consistency reasons the names of these test levels will be listed along with the used level names. Labelled as DebugSelect in the source code.

Controls:

  • A: Scroll forward by 1.
  • B: Scroll backward by 1.
  • D-Up: Scroll forward by 1.
  • D-Down: Scroll backward by 1.
  • D-Right: Scroll forward by 10.
  • D-Left: Scroll backward by 10.
  • Start: Enter level.
  • Z + C-Left + C-right + Start: Reboot game without level select.

Entries with * are taken from the gigaleak, and are not present in final.

No.

Name

Literal Translation

Final Location

1

STAGE 1

-

*Castle

2

STAGE 2

-

*Athletic

3

STAGE 3

-

*Donjon

4

TERESA OBAKE

Boo Apparition

Big Boo's Haunt

5

YYAMA1 % YSLD1

Snow Mountain 1 & Snow Slide 1

Cool, Cool Mountain

6

SELECT ROOM

Select Room

Inside Peach's Castle

7

HORROR DUNGEON

Horror Dungeon

Hazy Maze Cave

8

SABAKU % PYRMD

Desert & Pyramid

Shifting Sand Land

9

BATTLE FIELD

Battlefield

Bob-omb Battlefield

10

YUKIYAMA2

Snow Mountain 2

Snowman's Land

11

POOL KAI

Pool Stage

Wet-Dry World

12

WTDG % TINBOUTU

Water Dungeon & Sunken Ship

Jolly Roger Bay

13

BIG WORLD

Big World

Tiny-Huge Island

14

CLOCK TOWER

Clock Tower

Tick Tock Clock

15

RAINBOW CRUISE

Rainbow Cruise

Rainbow Ride

16

MAIN MAP

Main Map

Outside the Castle

17

EXT1 YOKO SCRL

Extra 1 - Side-Scroller

Bowser in the Dark World

18

EXT7 HORI MINI

Extra 7 - Moat (Mini)

Vanish Cap Under the Moat

19

EXT2 TIKA LAVA

Extra 2 - Basement Lava

Bowser in the Fire Sea

20

EXT9 SUISOU

Extra 9 - Fish Tank

The Secret Aquarium

21

EXT3 HEAVEN

Extra 3 - Heaven

Bowser in the Sky

22

FIREB1 % INVLC

Fire Bubble & In the Volcano

Lethal Lava Land

23

WATER LAND

Water Land

Dire, Dire Docks

24

MOUNTAIN

Mountain

Whomp's Fortress

25

ENDING

Ending

"The End" Image/EXT10

26

URANIWA

Back Garden

Castle Courtyard

27

EXT4 MINI SLID

Extra 4 - Mini Slider

The Princess's Secret Slide

28

IN THE FALL

In the Fall

Cavern of the Metal Cap

29

EXT6 MARIO FLY

Extra 6 - Mario Fly

Tower of the Wing Cap

30

KUPPA1

Bowser 1

Bowser in the Dark World (Boss)

31

EXT8 BLUE SKY

Extra 8 - Blue Sky

Wing Mario Over the Rainbow

32

STAGE 32

-

*Yajima Land

33

KUPPA2

Bowser 2

Bowser in the Fire Sea (Boss)

34

KUPPA3

Bowser 3

Bowser in the Sky (Boss)

35

STAGE 35

-

*Dummy

36

DONKEY % SLID2

Monkey & Slide 2

Tall Tall Mountain

37

STAGE 37

-

*IWtest

38

STAGE 38

-

*Sand/Cave Dungeon

For some reason, if Peach's Castle is entered via the level select, no background music will play there, this seems because the game didn't check that bowser text is readed, causing the bowser themed song to not play and making the background music to not play. Also, it is impossible to drown in any level entered via the level select, as Mario's health meter doesn't deplete when he is underwater.

While bonus levels marked "EXT1" to "EXT9" are present (standing for "extra"), "EXT5" and "EXT10" are missing. Source code reveals that EXT5 was missing from the entry for Cavern of the Metal Cap, as the stage model folder is labelled ext5_in_fall, while EXT10 was supposed to be ending screen stage.

The use of "Donkey" for "Monkey" is a tongue-in-cheek reference to Donkey Kong.

Unused Crash Handler#

In these versions of Super Mario 64 (Europe, Shindou and iQue), there exists unused thread code (from 80241850 to 802422F0 in Europe) for the same crash handler found in Paper Mario; however, it's not initialized in neither of the versions mentioned, so it's not used. The only notable difference between both handlers is that Paper Mario prints the MM value, whereas Super Mario 64 does not.

Use the following GameShark codes to call the initialization function and make it work as intended.

Europe

Japan (Shindou)

iQue

8126A762 0891
81272CF2 2693
81273312 2697

This handler does not exist in the USA, Japanese or DD versions.

Mario Head Guide Cubes#

Watch on YouTubePink cubes mark areas where Mario's face can be grabbed on the title screen. Normally, these cubes are invisible, but changing a single line of code reveals them. Using the GameShark codes below will make them visible.

Japan

USA

Europe

Japan (Shindou)

iQue

LodgeNet

8018F2E3 0000
8018F423 0000
8018E453 0000
8018E8A3 0000
8018F6E3 0000
8018DC53 0000

Source from decomp, located at src/goddard/joints.c:276

struct ObjJoint *make_grabber_joint(struct ObjShape *shape, s32 flags, f32 x, f32 y, f32 z) {
    struct ObjJoint *j;

    j = make_joint(0, x, y, z);
    j->shapePtr = shape;
    j->type = 5;
    j->flags |= flags;
    j->colourNum = COLOUR_PINK;
    j->header.drawFlags |= OBJ_IS_GRABBABLE;
    j->header.drawFlags |= OBJ_INVISIBLE;  // <--- removing this line will make them visible.
    j->updateFunc = grabbable_joint_update_func;
    j->rootAnimator = NULL;

    return j;
}

Oddly, there's cubes for the eyes, but they're ungrabable, it seems that the eyes were also grabable earlier in development.