the cutting room mirror

Unused Code

This is a sub-page of Super Mario Odyssey.

E3 Leftovers#

This needs some investigation.
Discuss ideas and findings on the talk page.

There are a few classes in the game's code that reference E3. There is a sequence director that tells the game which sequence to load: the main game (under the name "Hakoniwa"), or the E3 sequence (under the name "E3Sequence"). Of course, the game passes the former instead of the latter. The resource loader would load the resources used in the Sand Kingdom and the Metro Kingdom.

It is possible to force the game to load this sequence by changing the string passed to SequenceFactory::createSequence(char const *sequenceName). However, loading has been tested and will fail on launch due to it trying to load the layouts E3TitleMenu, E3StageSelect, and E3Thank. Creating these with the needed panes fixes this problem and lets you load into a start menu.

Trying to load into a stage crashes though due to missing shaders that E3Sequence tries to load. Nobody has been able to get around this crash yet.

Version Display#

There is a (functionally) unused layout called "MenuRight". It contains a pane named 'TxtVersion' in the top-right corner with the placeholder text "Ver.1.0.". In 1.0.0, if the game's version didn't match 1.0.0 (which is impossible without editing the game's metadata), the game would display whatever the version is in this pane, in the format ("x.x.x"). In 1.0.1, the code was changed so that the pane would not display, no matter what the version was.

Player States#

To do:
All of the information about the states are speculation by viewing the game's code. It would be great if we could get these working in-game! Might also be a good idea to put the decompiled code here.

In the game's code, most of Mario's actions are done through 'PlayerState' functions. Unused ones are not initialized by the player.

PlayerStateAutoDash#

Seems to be a leftover from very early development, and it barely covers any animation stuff. If the player's speed was greater or equal to 12.0, then the 'exeRun' function would run. It looks like it would start using the 'exeDash' after some time of running, where the 'Dash' animation would play.

PlayerStateCeilingKeep#

Also a very early state. If you collided with the ceiling, then you would go into this state. It looks like you would have slid forward on the ceiling with a velocity of 20.0 in whatever direction Mario was already looking at, until you weren't on it anymore. If you fell off the ceiling, then you would slowly fall to the ground and another state would start.

PlayerStateFreeRun#

Very fleshed out running action. It looks like you would have gone really fast and stopping would mean to 'brake'. It would start with the animation 'RunStart' and get faster from that point to a dash. The 'Dash' animation is for dashing, 'DashBrake' is for stopping, 'DashTurn' is for turning while dashing, and 'Turn' is for turning while braking.

PlayerStateJump2D3D#

Unused function for jumping out of a 2D area.

PlayerStateNormalFall#

Unused function for falling.

PlayerStateNormalWait#

Unused function for when you're just standing on the ground. The used function of this is 'PlayerStateWait'.

PlayerStateRun#

Unused function for running. It uses the same 'Dash' animations from 'PlayerStateFreeRun'. There's even an unused function that doesn't get used in the state. 'exePivot' would have turned the player with a 'TurnPoint' animation.

PlayerStateRun2D3D#

It would have been used to check whether the game should use 'PlayerStateRun' or 'PlayerStateRun2D'.

PlayerStateSwordAttack#

In this state, Mario would have wielded a 'PowerGrove' actor. This is a typo for a power glove. It used the animations 'Punch' and 'Fire', and would have been for punching. Each punch would result in a 'CapAttack' action based off of the code for the glove itself.

PlayerStateTargetJump#

This would have been a pretty powerful jump. It would have been activated by a TouchTargetKeeper. The animations for it are 'TouchJumpLong', 'TouchJump', and 'JumpBroad'.

PlayerStateTouchMove#

Also activated by a TouchTargetKeeper, this one does literally nothing. The only instruction in the 'exeJump' function is a return.

Unused Modes#

Watch on YouTubeIn the game's code, there is 6 check functions hardcoded to return false, making them return true with mods can enable different modes.

To enable these modes, use this (version 1.0 only) IPSwitch patch:

Download Super Mario Odyssey Unused Modes

File: SMO-E3-10.zip (359B) (info)

rs::isModeE3MovieRom
rs::isModeE3LiveRom
rs::isModeE3Rom
rs::isModeDiverOrJungleGymRom
rs::isModeDiverRom
rs::isModeMovieRom

rs::isModeE3MovieRom#

This mode slows the game down to 30 FPS, and removes most UI elements including their animations.

rs::isModeE3LiveRom#

This mode snaps to a black screen after the controller screen, and plays the title song without Mario's voice.

rs::isModeE3Rom#

This mode removes all warp paintings, disables amiibo, crashes the game when trying to scan an amiibo by talking to Uncle amiibo, makes the shop say "Sold Out" on the map if youve bought everything from the shop, crashes the game when talking to the shop, prevents you from using the globe on the odyssey (just like in the Kiosk Demo and E3 Demo), disables snapshot mode, crashes the game when you warp, and makes the game crash when entering any loading zone.

rs::isModeDiverOrJungleGymRom#

This mode resets Mario's clothes to default when entering, prevents you from changing the clothes, and also removes most UI elements in the same way that rs::isModeE3MovieRom does.

rs::isModeDiverRom#

This mode resets Mario's clothes to default when entering, but doesn't prevent you from changing them later.

rs::isModeMovieRom#

This mode slows the game down to 30 FPS, while keeping the UI elements.

Chinese-exclusive "Thank You Very Much" Message#

The Chinese release of the game added a boolean to the CapRack actor called "IsUseCaptionThankYou". If this is true, it will display the text "thank you very much" when Cappy is thrown at the scarecrow. The coins in Darker Side have this flag too, but it goes unused in the code.