Version differences
Version Differences are differences in Super Mario 64 between different releases. Most differences, like translated text, are obvious; however, there are some subtle differences in the game's logic that aren't as readily apparent. Thanks to the decompilation of Super Mario 64, version differences are easier to spot and make sense of. This page aims to be a complete list of all the version differences in the game's source code (i.e. not text, sounds, etc.) between the original Japanese version (NTSC-J) and the North American version (NTSC-U).
Background
The Japanese version of Super Mario 64 was released on June 23, 1996, and the North American version 3 months later, on September 29. Between finalization of the Japanese version and release of the North American version, over 200 changes were made to the game's main code. Some of these are simple bugfixes, some are additions to the game, and some are as yet undeciphered.
Version differences are found in the audio library and in the main game code. There are no version differences in the game's core engine, nor in the Goddard subsystem (a separate area of the code written in C++ by Giles Goddard and responsible for the draggable Mario head).
Differences
This list is in the form of a color-coded table. Green differences are fully understood; red differences are completely opaque; and yellow differences are in-between, relatively simple but with unexplored effects on the game.
File | Difference |
---|---|
audio/dac.c | In func_80316928, D_80226D7C is (in the U version) set to 172,320 times what it would be set to in the J version. |
audio/data.c | D_80332190 has different data in J and U versions. This may be related to sound glitch. |
audio/dma.c | In func_80317270, osInvalDCache isn't called on the J version. |
audio/interface_1.c | 15 separate numeric literals are doubles in J but floats in U. |
audio/interface_1.c | There are 13 values which are casted to an f32 in the J version and casted to an s32 and then to an f32 in the U version. This was done to simplify the compiled ASM, and has no effect on the game. |
audio/interface_1.c | When func_8031CAD4 processes the instructions 0xDC or 0xDD, it will modify arg0->unkA. In the J version, arg0->unkA gets the return value of func_8031B01C (casted to a signed byte) added to it when the instruction is 0xDC, and when the instruction is 0xDD it's simply set to the return value of func_8031B01C. In the U version, the return value of func_8031B01C is multiplied by 48 in both of these cases. |
audio/interface_1.c | In the J version of func_8031D42C, D_80222A18[arg0].unkA is set to 120. In the U version, it's set to 5760, which is 48 times larger. |
audio/interface_2.c | 32 separate numeric literals are doubles in J but floats in U. |
audio/interface_2.c | 15 separate numeric literals are different between J and U. One of these changes results in a sound difference in Dialog037 (todo: elaborate) |
audio/interface_2.c | D_U_8033323C only exists in the U version. (note: this is apparently unused) |
audio/interface_2.c | The typedefs Arg1T and Arg2T are equivalent to u16 and u8 respectively on J version and s32 (both) on U version. |
audio/interface_2.c | unused_8031E4F0 and unused_8031E568 are remnants of unused debug functions that only exist on U. |
audio/interface_2.c | In the U version, func_8031D630 has a check that increments its second argument if it's 0. This is because later on in the function, a value is divided by this argument. This check does not exist in the J version. |
audio/interface_2.c | In func_8031D924 in the J version, (&D_80226D9C->task.t)->yield_data_ptr is set to gAudioSPTaskYieldBuffer and (&D_80226D9C->task.t)->yield_data_size is set to 0x400. In the U version, yield_data_ptr is set to NULL and yield_data_size is set to 0. |
audio/interface_2.c | Under certain circumstances in func_8031E16C, func_8031E0E4 will be called only in the U version. |
audio/interface_2.c | In the U version of func_8031EB24, "div" is set to "listIndex < 3 ? 2 : 3". |
audio/interface_2.c | In the J version of func_8031EB24, f12 is set to 0 if D_80332028[gCurrLevelNum] < D_80360C48[listIndex][item].unkC, and 1.0 - D_80360C48[listIndex][item].unkC / f0 otherwise. In the U version, if D_80360C48[listIndex][item].unkC > 22000.0f, f12 is set to 0; otherwise, the J logic is run except instead of setting f12 to 0 it sets it to ((22000.0f - D_80360C48[listIndex][item].unkC) / (22000.0f - f0)) * (1.0f - arg2). |
audio/interface_2.c | In the J version of func_8031EB24, when the 0x2000000 flag of D_80360C48[listIndex][item].unk14 is set, (D_80226EB8 & 0xf) / 192.0 is subtracted from f12 unless f12 is 0. In the U version, when the flag is set, (f32) (D_80226EB8 & 0xf) / 192.0f; is subtracted from f12 unless f12 is less than 0.8. |
audio/interface_2.c | In the J version of func_8031ED70, "level" is set to "(gCurrLevelNum > LEVEL_MAX ? LEVEL_MAX : gCurrLevelNum)" and "area" is set to "gCurrAreaIndex - 1". "area" is then capped at 2. In the U version, if the 0x20 flag of D_80360C48[listIndex][item].unk14 is set, "level" and "area" will both be set to 0 instead. |
audio/interface_2.c | In the J version of func_8031EEF8, if D_80360C48[listIndex][index].unk14 & 0xF == 0, func_8031E0E4 and func_8031DFE8 will be called with D_80222A18[2].unk2C[k]->unk54 set to 0 in between. In the U version, if D_80222A18[2].unk2C[k]->unk44 == 0 the same code is run except setting D_80360C48[listIndex][index].unk18 to 0 instead; if D_80222A18[2].unk2C[k]->unk44 != 0, D_80222A18[2].unk2C[k]->unk44->unk0b40 == 0, D_80360C48[listIndex][index].unk14 & 0xF == 0, the same code as in the J version is run. This version difference is responsible for patching Sound Glitch. |
audio/interface_2.c | When pressing a cap switch, the "Correct Solution" jingle (played by play_puzzle_jingle) isn't played on the J version. |
audio/interface_2.c | In the U version, func_80321368 will set both its argument arg0 and D_U_8033323C to 0 if arg0 is greater than 8. |
audio/playback.c | 8 separate numeric literals are doubles in J but floats in U. |
audio/playback2.c | 4 separate numeric literals are doubles in J but floats in U. |
audio/playback2.c | 2 separate numeric literals (both equal to 1) are doubles in J but ints in U. |
audio/something.c | 6 separate numeric literals are doubles in J but floats in U. |
audio/something.c | In the J version, v0 in func_803159EC is initialized to MIN((s32)(arg2 * 127.5), 127) immediately, while in the U version it's set to (s32)(arg2 * 127.5f) & 127 three times, each time right before it's used for something. |
audio/something.c | In func_803159EC, arg0->unk<3C/3E> are set to ((u16)(arg1 * <f0/f2>)) & -0x8100 in the J version, but in the U version they're set to (u16)((s32)(arg1 * <f0/f2>)) & -0x8100. |
game/behavior_actions.c | music_touch.inc.c is only included in the U version. This means the "Music Touch" object doesn't exist on the J version. The only thing the object does is play the "Correct Solution" jingle the first time Mario enters within 200 units of it. This object is only used once in the game, to play the puzzle jingle when Mario enters the shortcut in the CCM slide. |
game/behaviors/bbh_tilt_floor.inc.c | (Nim is making a video on this) |
game/behaviors/boo.inc.c | In Go on a Ghost Hunt, there is a single boo upstairs which spawns in the Eye-to-Eye Secret Room. The premise of the star is that you must kill all of the boos, but since you aren't intended to go upstairs in that star the boo upstairs shouldn't count. Mario is required to kill 5 boos. In the U version, a check was added to make sure that killing the upstairs boo doesn't contribute to spawning the Big Boo. In the J version, you can kill 4 boos downstairs and 1 boo upstairs in any order and the Big Boo will spawn. If you kill the upstairs boo last, the text that normally appears when unlocking the Big Boo doesn't appear, nor does the "Correct Solution" jingle play. |
game/behaviors/boo.inc.c | In the J version, a part of an if statement's condition in ActionBooGivingStar0 is o->oUnk1AC_S32 >= 5 . On the U version, the debug parameter gDebugInfo[5][0] is added to 5. |
game/behaviors/boo.inc.c | boo_stop() is called in ActionBooGivingStar4 only on the U version. |
game/behaviors/boo.inc.c | On the J version, the sound played when opening a chest is also played when the Merry-Go-Round Big Boo is spawned. In the U version, the standard "Correct Solution" jingle is called instead. The difference between the 2 sounds is shown in this video. |
game/behaviors/bowser.inc.c | In the final Bowser fight in the J version, Bowser's hitbox is still able to be interacted with after the Grand Star spawns (video). This was fixed in the U version. |
game/behaviors/bowser.inc.c | In the US version, Bowser checks if he's in a demo to prevent the typical 1/10 chance of dancing. |
game/behaviors/bowser.inc.c | func_u_802B4AF4() is only declared in the U version. |
game/behaviors/bowser.inc.c | In ActionBowser13, func_u_802B4AF4 is called only in the U version if Bowser's subaction is 1 and "o->oBehParams2ndByte == 2 && o->oUnknownUnkF4_S32 & 0x10000". (todo: can't find where 2nd byte of behavior params is set to 2 for bowser, is this code ever reached?) |
game/behaviors/bowser.inc.c | In ActionBowser2, when Bowser's subaction is 2, func_u_802B4AF4 is called in the U version. |
game/behaviors/bowser_key.inc.c | The sound of a Bowser key bouncing has higher priority in the U version, probably to stop it getting overriden by other sounds. It also has a flag set on the U version which seems to indicate that the sound is affected by the camera's distance to the key somehow. |
game/behaviors/bully.inc.c | The sound a bully makes when it spawns a coin after being killed in the U version has a flag set which seems to indicate that the sound is affected by the camera's distance to the bully somehow. |
game/behaviors/camera_lakitu.inc.c | The "Lakitu's Message" music clip that plays when Lakitu comes near Mario to explain the camera controls at the start of the game isn't played or doesn't exist on J version. |
game/behaviors/celebration_star.inc.c | When you collect a Bowser key, the cutscene that plays will show a star instead of a key in the J version. |
game/behaviors/celebration_star.inc.c | On the J version, when a celebration star is turning to face the camera, it is scaled by 1/10 units per frame. On the U version, it checks if it's a key. If it's a key, it scales 1/30 units per frame; if it's the Grand Star, it scales 1/10 units per frame. (todo: check if the function is ever called by the grand star) |
game/behaviors/coin.inc.c | The sound a coin makes when it spawns (through bhvSingleCoinGetsSpawned or bhvMrIBlueCoin) in the U version has a flag set which seems to indicate that the sound is affected by the camera's distance to the coin somehow. |
game/behaviors/coin.inc.c | On the U version, coins will unload if they land on the death barrier. On the J version, they will continue to exist. |
game/behaviors/coin.inc.c | If a coin bounces more than 5 times in a row, it will only continue to the bounce sound on the J version. |
game/behaviors/cruiser.inc.c | On the U version, the wings on the RR cruiser will play a sound every 64 frames. (It waits for the timer to become 64, then plays the sound and sets it to 0.) On the J version, it won't do any of this. |
game/behaviors/dorrie.inc.c | Two if-elseif statements swap places between the J and U versions (todo: elaborate on what effects this has). Also, in the J version, it will raise its head along with Mario if the forward distance to Mario is greater than 830 (i.e. Mario is greater than 830 units away from Dorrie's center) and if set_mario_npc_dialogue returns the expected result indicating a success. In the U version, 830 is changed to 780, and another condition is added: Dorrie's Y offset has to be equal to -17. |
game/behaviors/hidden_star.inc.c | As you collect more secrets, the sound played when collecting secrets gets higher in pitch on the U version. It doesn't change on the J version. |
game/behaviors/king_bobomb.inc.c | In ActionKingBobomb0, King Bob-omb's velocity is only set to 0 in the U version. It is not touched in the J version. This is the cause of this J-specific glitch. |
game/behaviors/king_bobomb.inc.c | King Bob-omb's star spawns from 100 units lower in the U version than in the J version, before moving to its final spot during the cutscene. |
game/behaviors/mips.inc.c | When MIPS has action 1 in the J version, his forward velocity is set to 45. In the U version, it's set to o->oUnk1AC_F32, which is 40 for the 1st MIPS and 45 for the 2nd MIPS. This was probably done to slow him down a bit. |
game/behaviors/mips.inc.c | In the J version, MIPS' gravity is 2.5. In the U version, it's 15. |
game/behaviors/moneybag.inc.c | When turning invisible, moneybags make a sound in U but not in J. |
game/behaviors/mr_i.inc.c | In ActionMrI0, the Mr. I will set its MoveAngle's to 0 on the J version. On the U version, it calls set_object_angle(o, 0, 0, 0), which sets both its FaceAngle's and MoveAngle's to 0. |
game/behaviors/piranha_plant.inc.c | piranha_plant_reset_when_far is only declared in the U version. It resets the piranha plant if it is far away from Mario. This was done to patch this J-specific glitch. |
game/behaviors/piranha_plant.inc.c | When the piranha plant is idle, its size is constantly set to normal. This is to make the piranha plant not permanently small when the aforementioned glitch is tried on U. |
game/behaviors/piranha_plant.inc.c | Mario can run into a sleeping piranha plant and receive knockback. On the U version, he will not get hurt, but on the J version, he will. |
game/behaviors/racing_penguin.inc.c | When the penguin is turning to face Mario at the end of the race (todo: confirm this), func_802BE3B4(1) is called but only on the U version. |
game/behaviors/racing_penguin.inc.c | The penguin's star spawns from 200 units lower in the U version than in the J version, before moving to its final spot during the cutscene. |
game/behaviors/red_coin.inc.c | As you collect more red coins, the sound played when collecting secrets gets higher in pitch on the U version. It doesn't change on the J version. |
game/behaviors/sparkle_spawn_star.inc.c | In bhvUnused080CLoop (not unused), when the object's action is 0, its Y-velocity is negative, it's under its home, and the bitmask o->oUnk190 has flag 0x400 set, the object will call func_803212A0(0) in the J version and func_803212A0(1) in the U version. |
game/behaviors/tox_box.inc.c | The sound the tox-box plays when slamming into the ground has a higher priority in the U version, probably to stop it getting overriden by other sounds. |
game/behaviors/tuxie.inc.c | The Mother Penguin will spawn the star in a completely different location in the U version than in the J version. |
game/behaviors/tuxie.inc.c | On the J version, the baby penguin's cries will not become quieter if Mario/the penguin go further away from the camera (e.g. by fixing the camera). This was fixed on the U version; the cries change in volume depending on the distance from the camera as expected. |
game/behaviors/water_ring.inc.c | As you go through more water rings, the sound played when collecting secrets gets higher in pitch on the U version. It doesn't change on the J version. |
game/camera.c | When func_80286C9C is called while in BitDW (todo: clarify, is this the entire level including the boss fight or just the boss fight?), func_8028BB3C(a, 144) will be called on the J version. On the U version, func_8028BB3C(a, 144) will be called if the demo is not being run; if it is, and the camera's secondary focus is set on an object, that object will have the first byte of its rawData set to 2. |
game/camera.c | When you try to zoom out (press C-Down) when the camera is already zoomed out, a buzz sound will play on the U version. It will not play on the J version. |
game/camera.c | In func_8028B7A4, under some circumstances the sound that normally plays when you press C-Down will not play on J, but will on U. (todo: document camera) |
game/camera.c | In CameraHMC00() in the U version, when a->unk10[1] > -102.f, a->unk10[1] and D_8033B328.unk0[1][1] will both be set to D_8033B328.unk0[3][1]. In the J version, these values are not set. |
game/camera.c | CutsceneIntroPeach0_2 will run func_8031FFB4(0, 60, 40) on the U version but not on the J version. (todo: check what this actually is) |
game/camera.c | CutsceneIntroPeach2_1 will run func_80320040(0, 60) on the U version but not on the J version (todo: check what this actually is) |
game/camera.c | On the U version, if the camera preset is set to CAMERA_PRESET_BOWSER_FIGHT, a->unk4 will be copied into D_8033B4B8.unkC and a->unk10 will be copied into D_8033B4B8.unk0. If the camera preset isn't set to CAMERA_PRESET_BOWSER_FIGHT, func_80290224 will be run instead. On the J version, the if statement doesn't exist, and only func_80290224 is run every time. |
game/camera.c | On the J version, Peach doesn't read out the letter she sent to Mario in the intro. |
game/camera.c | On the U version, the click sound that usually plays when you change the camera mode with R also plays when the HUD turns on in the intro sequence. Here is an example. This click sound does not play in the J version, as can be seen here. |
game/camera.c | On the U version, when the camera lakitu flies under the bridge, out of the bridge, and near Mario's pipe in the intro cutscene, "whoosh" sounds are played. They aren't there on the J version. |
game/file_select.c | sSoundTextX is not declared in the J version. |
game/file_select.c | The sound clip that plays when you select a file in the file select has Mario saying "Okey Dokey!" in the U version. |
game/file_select.c | The "Select File" text has a different font and is in a slightly different position in the U version.[1] |
game/file_select.c | In the U version, sSoundTextX is used to center the name of the current sound setting on the main file select. In the J version, it remains uncentered. |
game/file_select.c | The "Check File" text in the score menu has a different font and is in a slightly different position in the U version. |
game/file_select.c | The "Return", "Copy", and "Erase" texts in the score menu are in slightly different positions in the U version. |
game/file_select.c | All the text in messages that appear when copying a file have a different font and are in slightly different positions in the U version. |
game/file_select.c | The "Return", "View Score", and "Erase" texts in the copy menu are in slightly different positions in the U version. |
game/file_select.c | TIMER_VAR1 and TIMER_VAR2 are set to 0xA4 and 0x91 respectively in the J version and 0xA9 and 0x8C respectively in the U version. |
game/file_select.c | In erase_menu_yes_no_prompt(s16 x, s16 y), sp2C is set to sCursorPos[0] + 160 in the J version and sCursorPos[0] + (x + 70) in the U version. The function is only ever called with x=90, and 90 + 70 = 160, so this results in no difference. |
game/file_select.c | In the U version of erase_menu_display_message, the positions of the "Erase File", "No Saved Data Exists", "Mario A Just Erased", and "Saved Data Exits [sic]" are slightly different. Also, the index into the "Mario A Just Erased" to modify A to match the letter of the file that was erased is different, since in English there are 6 characters before the A and in Japanese there are 3 ("マリオAをけしました"). |
game/file_select.c | The "Return", "View Score", and "Copy File" texts in the erase menu are in slightly different positions in the U version. |
game/file_select.c | In draw_sound_mode_menu, textX is not declared in the J version. |
game/file_select.c | The "Sound Select" text is in a slightly different position in the U version. |
game/file_select.c | The names of the sound modes in the sound menu aren't centered correctly on the J version. This was corrected on the U version (using the textX variable from before). |
game/file_select.c | In score_file_print_course_coin_score, the length of the char arrays in fileNames are 5 in the J version and 8 in the U version. This is to account for the fact that on the J version, they are 4 characters (ex. "マリオA") while on the U version they are 7 (ex. "MARIO A"). |
game/file_select.c | In score_file_print_course_coin_score, when showing high scores over all files, the position of the coin icon, coin count, and file name on the right side of the screen is slightly different in the U version. |
game/file_select.c | Some variable declarations are reorganized in the U version. This has no effect on the game. |
game/file_select.c | In the score menu, the position of the name of the file (ex. "マリオA"/"MARIO A") is slightly different in the U version. |
game/file_select.c | In the score menu, the position of the star symbols is slightly different on the U version. Also, the course names for courses 1-9 are padded to make up for the course numbers' entering into double digits. |
game/file_select.c | In the score menu, the position of the "Castle Secret Stars" text, the secret star counter, and the coin score mode in the top right are slightly different in the U version. |
game/hud.c | The HUD is 1 pixel lower in the U version than in the J version. |
game/hud.c | The star count in the HUD is shifted 5 pixels to the right in the U version from the J version. |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.c | |
game/ingame_menu.h | |
game/interaction.c | The dab is patched in the U version. |
game/interaction.c | Mario only says "Boing!" when he bounces on an enemy that causes him to twirl (e.g. Fly Guys) on the U version. |
game/interaction.c | Mario can press either B or A to read a sign on the U version. On the J version, B must be pressed. |
game/interaction.c | Mario must be facing within 14563 (0x38E3) angle units of a sign to talk to it on the J version. On the U version, the range is wider; he can be within 16384 (0x4000) angle units to talk to it. |
game/level_select_menu.c | In the title screen, Mario says "Hello!", "Press Start to play!", and "Game over!" only on the U version. |
game/level_update.c | The credits text are different in the U version; voice actors were credited and some typos were fixed. Notably, "JYOHO KAIHATUBU" was translated into English as "EAD STAFF". |
game/level_update.c | On the J version, if Mario has more than 999 coins, his lives counter gets set to 999, which overflows to -25 lives. This was fixed in the U version. |
game/level_update.c | On the J version, if Mario enters a teleport while racing Koopa the Quick, the race music will stop. This was fixed in the U version. |
game/level_update.c | func_80320AE8 is called in the U version when Mario enters (or maybe exits?) Bob-omb Battlefield if func_80320E98 does not return 1033 and sTimerRunning is not 0. |
game/level_update.c | SOUND_MENU_MARIOCASTLEWARP is played when Mario warps to a castle warp with ID 31 in the J version and 31 or 32 in the U version. |
game/level_update.c | On the U version, SOUND_MENU_MARIOCASTLEWARP is played when Mario warps to a castle grounds warp with ID 7, 10, 20, or 30, and his destination area index is 1. |
game/level_update.c | The star sound is played when entering Tower of the Wing Cap in the U version. No sound is played on the J version. |
game/main.c | The U version of Mario 64 is able to detect PAL TVs and change its video output accordingly. The J version assumes any connected screen is NTSC, and is therefore not compatible with PAL TVs. |
game/mario_actions_airborne.c | In the U version, when Mario gets air knockback or bonks in the air, Mario will say "Doh!" if his action arg is 0 and he's travelling faster than 28 units per second forwards or backwards, and "Uh!" otherwise. In the J version, he will always say "Uh!" |
game/mario_actions_airborne.c | When Mario gets stuck in the ground, SOUND_MARIO_OOOF will play in the J version and SOUND_MARIO_OOOF2 will play in the U version. |
game/mario_actions_airborne.c | The place where the wind sound for horizontal wind plays was moved from check_horizontal_wind to Mario's general update function in the U version. Sometimes, action functions return before they reach the check_horizontal_wind call, so there are some times that the wind sound doesn't play when Mario is in horizontal wind in the J version. |
game/mario_actions_airborne.c | In the U version, the sound Mario makes when he does a triple jump or zooms up when flying is randomized between "Yahoo!" (60% chance), "Waha!" (20% chance), and "Yippee!" (20% chance). On the J version, Mario says "Yahoo!" every time. |
game/mario_actions_airborne.c | On the J version, if Mario jumps out of water and grabs a ledge during the jump, his model will appear above the floor he grabbed on for a single frame. This is because the game starts the ledge-grabbing animation 1 frame too late, so Mario appears at the location of his hitbox (which is on the floor above him when ledge-grabbing) in the single jump animation for a single frame. This purely graphical glitch doesn't exist on the U version. |
game/mario_actions_airborne.c | In the U version, when Mario lands on the ground after being thrown, his actionArg is set to his HP decrement counter. On the J version, the actionArg is set to the previous actionArg, i.e. it doesn't change. This is also the behavior for both J and U when landing from any other knockback action. |
game/mario_actions_airborne.c | When being blown by wind (e.g. from Fwoosh) on the J version, Mario will attempt to play the "Uh!" sound immediately after playing the "Waaaoow!" sound. However, since the "Waaaow!" sound has higher priority, the "Uh!" sound never plays. The unnecessary sound effect was removed in the U version. |
game/mario_actions_airborne.c | On the J version, if Mario begins flying from a triple jump but dives or ground pounds before he starts flying but after the camera has changed to the wing cap camera mode, the camera will not return to normal and the wing cap camera will remain. This was fixed on the U version. This is another case of the wing cap camera glitch, except the "normal" wing cap camera glitch wasn't patched in the U version. |
game/mario_actions_airborne.c | In the U version, when Mario lands after being thrown, his HP decrement counter is passed to set_mario_action instead of his action arg. |
game/mario_actions_automatic.c | In the U version, Mario will drop off a pole automatically if he's climbing up or down a pole or holding onto one from the side and he is dead or dying. In the J version, he will stay on the pole. Interestingly, he will not drop off the pole on the U version if he is in a handstand at the top of the pole or transitioning into a handstand. |
game/mario_actions_cutscene.c | line height stuff in print_displaying_credits_entry |
game/mario_actions_cutscene.c | When Mario lands after a death exit, he will make a SOUND_MARIO_OOOF on J and SOUND_MARIO_OOOF2 on U. |
game/mario_actions_cutscene.c | In the game's intro cutscene, when Mario exits the pipe, a "boing" sound (similar to the sound that plays when Mario bonks on a ceiling or on out-of-bounds) plays at the same time he says "Yahoo!" on the U version. On the J version, the "boing" sound doesn't play. |
game/mario_actions_cutscene.c | In the U version, Mario says "Haha!" after coming out of the pipe in the intro cutscene. On the J version, he doesn't. |
game/mario_actions_cutscene.c | At the end of the game, before the credits, Peach has voiced dialogue on the U version ("Mario! The power of the Stars is restored to the castle..."). This doesn't exist in the J version. |
game/mario_actions_moving.c | If Mario is sliding on the ground (e.g. when braking, turning around, or crouching while moving) and hits a wall, yellow stars will appear as he bonks in the J version. In the U version, yellow stars will only appear if his horizontal speed is greater than 16. (He will still bonk.) |
game/mario_actions_moving.c | If Mario gets knockback on the ground and his actionArg is less than or equal to 0, he will make a SOUND_MARIO_OOOF on J and SOUND_MARIO_OOOF2 on U. |
game/mario_actions_moving.c | Mario will only say "Mamma Mia!" when exiting a course after dying in Big Boo's Haunt, Hazy Maze Cave, Rainbow Ride, Bowser in the Dark World, Bowser in the Fire Sea, Bowser in the Sky, Vanish Cap under the Moat, and Wing Mario over the Rainbow in the U version; in the J version, he won't say "Mamma Mia!" |
game/mario_actions_object.c | On the U version, if Mario is swinging Bowser faster than 3,584 (0xE00) angle units per frame and throws him, he will say "So long-a Bowser!" But if he's swinging it slower, he'll say "Here we go!" On the J version, he will say "Here we go!" regardless of how fast Bowser is spinning. |
game/mario_actions_stationary.c | On the U version, Mario says "I'm-a tired!" before going to sleep. On the J version, he doesn't. (Note: On the U version, it won't play either sound if the result from an earlier func_802507E8 call is not -1, it's unknown what this function does) |
game/mario_actions_stationary.c | On the J version, when Mario is sleeping, his action state is 2, and the result of func_802507E8(m, 0x87) is 2 or 25, SOUND_MARIO_SNORING2 or SOUND_MARIO_SNORING1 will be played (respectively to the result of the call to func_802507E8). On the U version, func_80250F50 is called with SOUND_MARIO_SNORING3 independent of the result of func_802507E8, and neither SOUND_MARIO_SNORING1 nor SOUND_MARIO_SNORING2 are played. |
game/mario_actions_stationary.c | On the U version, when Mario is waking up and his action timer is greater than 0, func_803205E8 is called three times, with SOUND_MARIO_SNORING1, SOUND_MARIO_SNORING2, and SOUND_MARIO_SNORING3. On the J version, it's only called twice; the SOUND_MARIO_SNORING3 call doesn't exist. |
game/mario_step.c | The place where the wind sound for vertical wind plays was moved from apply_vertical_wind to Mario's general update function in the U version. In apply_vertical_wind, Mario is only affected by vertical wind if his Y position is between -4500 and 500; this is where the sound is played in J. This means that when Mario is outside of this range, the wind sound will not play and Mario's velocity will not change because of the wind, yet wind particles will show and Mario will enter the wind action. |
game/object_helpers.c | In the U version of Geo18_8029D924, when the "run" parameter is set to TRUE, sp34 is set to D_8032CFA0 casted to an object pointer. If the object is not fully opaque, it checks to see if the object is Bowser and is fully transparent. If it is, Bowser's animation state is set to 2. It will also check to see if the GFX node's unk18 property is not set to 10, and if the object has active flag UNK7 set; if both of these are true, gDPSetAlphaCompare is called. On the J version, the opacity/Bowser check is removed, and gDPSetAlphaCompare will be called if the node's unk18 is 10 and gDebugInfo[DEBUG_PAGE_ENEMYINFO][3] is set to TRUE. |
game/object_helpers.c | The move flag OBJ_MOVE_ABOVE_DEATH_BARRIER (1 << 13) is only used in the U version, by coins. Coins use it to unload when they come into contact with the death barrier. In the U version, it is set in obj_update_floor if the object is above the death barrier. In the J version, it is not set. |
game/object_helpers.c | In obj_update_floor_and_resolve_wall_collisions, the object's move flag OBJ_MOVE_ABOVE_LAVA is cleared. In the U version, OBJ_MOVE_ABOVE_DEATH_BARRIER is cleared alongside it. |
game/object_helpers.c | The timestop glitch is patched on the U version. |
game/object_helpers.c | obj_spawn_star_at_y_offset is only declared in the U version. |
game/object_list_processor.c | Spawning displacement is patched in the U version by setting Mario's platform to NULL when an area loads. |
game/platform_displacement.c | set_mario_platform_null is only declared in the U version. This function is only used once, in object_list_processor.c, to patch spawning displacement. |
game/star_select.c | In the U version, the "MY SCORE" text on the star select screen is actually "MYSCORE"; it doesn't have a space. This is in contrast to the "MY SCORE" text in the Score section of the file select, which does have a space. In the Japanese version, these two texts are the same. |
game/star_select.c | The text of the mission name is centered a few pixels farther to the left on the U version than on the J version. |
game/star_select.c | When selecting a star, Mario says "Let's-a Go!" in the U version but not in the J version. |