The Cutting Room Floor now has a Patreon page. Thanks for all your support!

If you've blocked our ad, please consider unblocking it.
We promise it isn't annoying. No flash, no sound, ever.

Ads by Project Wonderful! Your ad here, right now: $0

Mario Kart 64

From The Cutting Room Floor
Jump to: navigation, search

Title Screen

Mario Kart 64

Developer: Nintendo
Publisher: Nintendo
Platforms: Nintendo 64, iQue Player
Released in JP: December 14, 1996
Released in US: February 10, 1997
Released in EU: June 24, 1997
Released in CN: December 17, 2003


CodeIcon.png This game has unused code.
GraphicsIcon.png This game has unused graphics.
MusicIcon.png This game has unused music.
DebugIcon.png This game has debugging material.
LevelSelectIcon.png This game has a hidden level select.
RegionIcon.png This game has regional differences.


NotesIcon.png This game has a notes page
BugsIcon.png This game has a bugs page
PrereleaseIcon.png This game has a prerelease article

Mario Kart 64 basically takes all the wishes and feature requests from Super Mario Kart and makes them come true. Four players! Tunnels! No Koopa Troopa! All good stuff. Except that last one, clearly.

Debug Menu

Push B, receive debug mode

This game contains a debug menu; to enable it, use the GameShark code 8818EDEF 0002 (NTSC-U), 8818C80F 0002 (NTSC-J 1.0), 8818B5BF 0002 (NTSC-J 1.1) and press the GS button at the title screen.

  • DEBUG_MODE activates key combinations during play:
    • L+R+A+B: Reset game
    • R+B: Toggle CPU meter
    • Left: Advance player 1 and everyone behind them to final lap
    • Down: Advance everyone to final lap
    • Up: Advance player 1 and one other to final lap
    • Z or C-Down can be pressed during the race start sequence to start early. This will glitch the game if done too soon.
  • MAP_NUMBER selects the track. Available are the 16 single-player tracks plus the four tracks from battle mode.
Level Select Course
0 M CIRCUIT Mario Raceway
1 MOUNTAIN Choco Mountain
2 CASTLE Bowser's Castle
3 GHOST Banshee Boardwalk
4 MAZE Yoshi Valley
5 SNOW Frappe Snowland
6 BEACH Koopa Troopa Beach
7 P CIRCUIT Royal Raceway
8 L CIRCUIT Luigi Raceway
9 FARM Moo Moo Farm
10 HIGHWAY Toad's Turnpike
11 DESERT Kalimari Desert
12 SHERBET Sherbet Land
13 RAINBOW Rainbow Road
14 STADIUM Wario Stadium
15 BLOCK Block Fort
16 SKYSCRAPER Skyscraper
17 DECK Double Deck
18 JUNGLE D.K.'s Jungle Parkway
19 DOUGHNUT Big Donut
  • SCREEN_MODE selects the screen mode, and thus the players that participate. Available values are 1 player, 2 player up/down, 2 player left/right, 3 players and 4 players. The two player left-right view is never used in the final game, and is somewhat glitchy.
  • PLAYER selects the first player. If you have more than one player, the game assumes Luigi for player 2, Yoshi for player 3 and Toad for player 4.
  • SOUND MODE simply selects the sound mode (mono, headphones, stereo).
  • PUSH B TO GET ALL GOLDCUP is fairly self-descriptive. This option only appears when the cursor is moved all the way to the bottom.

Note that if you try to start a one-player game on a battle map, the game will automatically add a second player.

XXX Sound Mode

GameShark code 8018EDF2 0002 switches the sound mode to "XXX" on the debug menu and blank in the Options menu. Its purpose is not known.

Debug Menu Options Menu
I HAFF COME TO FIX ZE WASHING MACHINE Ahh, shaddap.

CPU and Graphic Display

Debug Displays. Go north, young man!

When Debug Mode is enabled, the following GameShark codes can be used:

  • 810DC515 0001 Shows which master display list is currently in use.
  • 800DC663 0001 Shows bars at the bottom measuring CPU usage and other resources.

Frame-by-Frame advance

The following code activates a frame-by-frame advance mode if Debug Mode is enabled:

81001760 3C03
81001762 800E
81001794 3C0B
81001796 800E
810017C4 240C
810017C6 0000

When the game is paused, player 1 can hold A and B and press L to advance a frame. This unfortunately conflicts with using A to unpause the game; you must hold A before pausing. Alternatively, adding the code 81001784 2400 makes it require only holding B and pressing L while paused.

Crash Debug Screen

Exception Information. Gaze upon what you have wrought!

If the game crashes, it will draw a small white square with red border near the upper left corner of the screen. At that point, entering the code L, Up, Left, Down, Right, R, L, B, A will display some information about the cause of the crash.

The first line displays three numbers - first is unknown (usually 5, probably thread ID), second is the address of the faulty instruction, third is the exception code (as defined in the R4300i manual). The second line displays the $RA register. The third line is unknown (usually zero).

The GameShark code 810DC6FE FFFF will shorten this code to simply "press L".

This display cannot be seen on most emulators, as most plugins don't seem to continue redrawing the screen after the game crashes.

Unused Code

Hmmm...
To do:
Supposedly there's some coding that allows A.I. racers to drift.

Track Scaling Function

Koopa Troopa Beach at 5x scale.

Next to the mirror mode flag in memory (address 800DC608 in USA version) is a floating-point value that appears to always be set to 1.0. When a track is loaded, its height is scaled by this amount. (All polygon vertices are multiplied by this value.) Use GameShark code 810DC608 ???? (default value 3F80) to activate this feature.

This value only affects track polygons, and hit detection is not altered to compensate for the steeper hills and/or shorter vertical walls, so changing it often produces unplayable tracks and strange effects such as floating trees, low areas being considered underwater/out of bounds, and walls that are no longer solid.

No similar scaling functions exist for the X and Z axes. This may have been intended as a debugging function to test slopes, or a bonus mode that would scale tracks to various sizes.

Vertical Splitscreen

This unused vertical splitscreen display for 2-player mode is only accessible via the Debug Menu. It's pretty clear why this isn't accessible normally: it's unfinished. The lap counter still displays in Battle Mode, the map goes over the second player's lap counter, and no V's and E's come out when drifting in race mode.

Lightning in Battle Mode

When used in Battle Mode, the Lightning Bolt makes all other players lose one balloon; however, it isn't normally possible to obtain this item, likely because it would have made battles horribly unbalanced. Code that specifically handles the Lightning Bolt's effects in Battle Mode can be found around 8008E0FC in RAM.

Bomb Warning

An unused multiplayer feature that warns players when they approach the moving bombs on the track.

Feather Jump State

The player-state code contains flags indicating whether "large feather jump state" and "small feather jump state" are active. This can be activated by setting the state at 0x0F699E (NTSC-U) to 0x10 to trigger a small feather jump or by setting the state at 0x0F699D (NTSC-U) to 0x02 for a large feather jump with a slower floating animation. The feather item from Super Mario Kart wasn't included in the final game, though it can be seen in certain prerelease material.

(Source: tasvideos.org)

Unused Graphics

Among the menu graphics are two unused options, untranslated from Japanese:

Graphic Translation
Mk64-graphic-withoutitem.png Without Item
Mk64-graphic-withitem.png With Item
(Source: Origami64)

Version Differences

Mk64 luigiblink.gif
Audio Differences
LOTS of audio was changed from the Japanese version.

Billboards

The billboards in the Japanese version are all clever parodies of real-life companies. They were changed during localization because this would have gotten Nintendo of America in hot water.

Japan International
Tastes good like a cigarette should A bit generic

Marioro (a pun on Marlboro) was changed to Mario Star.

Japan International
Warning: Highly explosive A nice Italian restaurant

Luigip (a pun on Agip) was changed to Luigi's.

Japan International
Warning: Highly eggsplosive. Sorry What about him?

Yoshi1 (a pun on Mobil1) was changed to Yoshi, with a pawprint similar to the one added to English versions of Super Mario World.

Japan International
Color change... ...and done

The Koopa Air sign is colored yellow and blue in the Japanese version (a pun on Goodyear). It's white and violet in international versions.

Japan International
Orange you glad you avoided a trademark infringement lawsuit? Yeah yeah, I know. Blue ball

The orange 64 ball in Luigi's Raceway (a parody of the 76 gas station) was changed to blue and the 64 was given a different design..

You can't destroy me!

The orange ball can however still be seen on the track preview even in international versions.

Moo Moo Farm

The course "Moo Moo Farm" is called "Moh Moh Farm" in Japan. This is because mooing in Japanese is pronounced with a long "O" sound, which sounds like "moh moh".

Japan North America
Moh no! Moo moo moo, moo moo moo moo.
(Source: The Mushroom Kingdom)

Trophy Ceremony

The trophy ceremony in the Japanese version displays the text "You are in (position)". The international versions change this to "You placed (position)". The punctuation was also removed.

Japan International
YOU ARE SUPER RACER! Punctuation is for squares
(Source: The Mushroom Kingdom)

Course Names

Courses have different names depending on the region.

Japanese International
Luigi Circuit Luigi Raceway
Moh Moh Farm Moo Moo Farm
Noko Noko Beach Koopa Troopa Beach
Karakara Sabaku Kalamari Desert
Kinopio Highway Toad's Turnpike
Mario Circuit Mario Raceway
Peach Circuit Royal Raceway
Koopa Castle Bowser's Castle
Donkey Jungle Park DK's Jungle Parkway
Hyūdoro Ike Banshee Boardwalk
Big Donuts Big Donut
Block Toride Block Fort
Matenrou Skyscraper

Credits Differences

In the Japanese version, completing the Special Cup on 150cc will display a Japanese-language version of the credits. This was removed from the English version for obvious reasons.

Additionally, the Japanese version has six voice actors, while the English version only has three. Charles Martinet (the voice of Mario) is the only one to be credited in both versions. Additionally, his name is misspelled as "Charles Martinee" in the Japanese version.

Japan International
The Japanese don't believe in one word having two "T"s. Who needs those guys?
(Source: The Mushroom Kingdom)

Wii Virtual Console Differences

Although the Virtual Console releases use the exact same ROMs as the cartridges, some minor visual differences exist due to emulation errors and in-memory patches:

  • The train wheels on Kalimari Desert are black instead of red.
  • The waterfall on Koopa Troopa Beach is a brighter blue instead of grey.
  • The characters/numbers of the timer are spaced out by 1 pixel.
  • The flash from using lightning was toned down to avoid risk of seizures.
Hmmm...
To do:
  • Figure out what these changes in the WiiU version do and document them

Misplaced Item Boxes

They're on Mario's screen

Hidden underneath the Big Donut arena are two misplaced item boxes. These item boxes can be seen by getting the camera behind the green bars and waiting, eventually the two item boxes will float up into view.

Hidden Music Loop

The "Winning Results" track was likely intended to alternate between two ~100 second sections of music, each composed of a 50-second segment repeated twice. Due to a binary counter bug, the first segment repeats, incidentally, 64 times (for 54 minutes and 39 seconds!) before the second segment ever has a chance to play—at which point it repeats twice and correctly returns to the first segment.

Debugging Text

Most of this text probably would have been spat out to a debug console on development systems, but goes unused in the final game.

Terminate-Canceled
Channel %d,Phase %d
Copy %d
%d->%d
pitch %x: delaybytes %d : olddelay %d
cont %x: delaybytes %d : olddelay %d
Warning:Kill Note  %x
Kill Voice %d (ID %d) %d
Warning: Running Sequence's data disappear!
Audio:Memory:Heap OverFlow : Not Allocate %d!
Audio:Memory:DataHeap Not Allocate
StayHeap Not Allocate %d
AutoHeap Not Allocate %d
Status ID0 : %d  ID1 : %d
id 0 is Stopping
id 0 is Stop
id 1 is Stopping
id 1 is Stop
WARNING: NO FREE AUTOSEQ AREA.
WARNING: NO STOP AUTO AREA.
AND TRY FORCE TO STOP SIDE
Check ID0 (seq ID %d) Useing ...
Check ID1 (seq ID %d) Useing ...
No Free Seq area.
CH %d: ID %d
TWO SIDES ARE LOADING... ALLOC CANCELED.
WARNING: Before Area Overlaid After.
WARNING: After Area Overlaid Before.
MEMORY:SzHeapAlloc ERROR: sza->side %d
Audio:MEMORY:SzHeap Overflow error. (%d bytes)
Auto Heap Unhit for ID %d
Heap Reconstruct Start %x
AHPBASE %x
AHPCUR  %x
HeapTop %x
SynoutRate %d / %d
FXSIZE %d
FXCOMP %d
FXDOWN %d
WaveCacheLen: %d
SpecChange Finished
Fbank Seq %x
Already Load Type %d,ID %d
Warning:Emem Over,not alloc %d
Write %d
Romcopy %x -> %x ,size %x
Romcopyend
CAUTION:WAVE CACHE FULL %d
LOAD Rom :%x -> Ram :%x  Len:%x
BASE %x %x
LOAD %x %x %x
INSTTOP    %x
INSTMAP[0] %x
already flags %d
ERR:SLOW BANK DMA BUSY
ERR:SLOW DMA BUSY
Check %d  bank %d
Cache Check
NO BANK ERROR
BANK %d LOADING START
BANK %d LOAD MISS (NO MEMORY)!
BANK %d ALREADY CACHED
BANK LOAD MISS! FOR %d
Seq %d Loading Start
Heap Overflow Error
SEQ  %d ALREADY CACHED
Ok,one bank slow load Start
Sorry,too many %d bank is none.fast load Start
Seq %d:Default Load Id is %d
Seq Loading Start
Error:Before Sequence-SlowDma remain.
Cancel Seq Start.
SEQ  %d ALREADY CACHED
Clear Workarea %x -%x size %x
AudioHeap is %x
Heap reset.Synth Change %x
Heap %x %x %x
Main Heap Initialize. 
----------
Init Completed. ------------
Syndrv    :[%6d]
Seqdrv    :[%6d]
audiodata :[%6d]
---------------------------------------
Audio: setvol: volume minus %f
Audio: setvol: volume overflow %f
Audio: setpitch: pitch minus %f
Audio: voiceman: No bank error %d
Audio: voiceman: progNo. overflow %d,%d
Audio: voiceman: progNo. undefined %d,%d
Audio: voiceman: No bank error %d
Audio: voiceman: Percussion Overflow %d,%d
Audio: voiceman: Percussion table pointer (bank %d) is irregular.
Audio: voiceman: Percpointer NULL %d,%d
--4 %x
Stoped Voice
CAUTION:SUB IS SEPARATED FROM GROUP
Error:Wait Track disappear
Slow Release Batting
Audio:Wavemem: Bad voiceno (%d)
Audio: C-Alloc : Dealloc voice is NULL
Alloc
Error:Dim voice-Alloc %d
Error:Same List Add
Already Cut
Audio: C-Alloc : lowerPrio is NULL
Sub Limited Warning:
Drop Voice Warning: Drop Voice
Env-Clear 0
Audio:Envp: overflow  %f
Audio:Track:Warning: No Free Notetrack
SUBTRACK DIM
Audio:Track: Warning :SUBTRACK had been stolen by other Group.
SEQID %d,BANKID %d
ERR:SUBTRACK %d NOT ALLOCATED
Error:Same List Add
Macro Level Over Error!
WARNING: NPRG: cannot change %d
Audio:Track:NOTE:UNDEFINED NOTE COM. %x
Audio: Note:Velocity Error %d
Error: Subtrack no prg.
ERR %x
 Error: Your assignchannel is stolen.
Audio:Track :Call Macro Level Over Error!
Audio:Track :Loops Macro Level Over Error!
SUB:ERR:BANK %d NOT CACHED.
Audio:Track: CTBLCALL Macro Level Over Error!
[%2x]
Err :Sub %x ,address %x:Undefined SubTrack Function %x
Disappear Sequence or Bank %d
Group:Undefine upper C0h command (%x)
Group:Undefined Command
Error : Queue is not empty ( %x )
specchg error
***** CAM MAX %d *****
entryout !!! %d
AFTER GOAL VOICE FLAME %d
*** Pause On ***
*** Pause Off ***
CALLED!! Na_ChangeSoundMode player %d
CALLED!! Na_ChangeSoundMode spec   %d
Interfaced Spec Change player %d
Interfaced Spec Change spec   %d
FX MIX %d
************** Seq Fadeout ***************
SEQ FADE OUT TIME %d
DAC:Lost 1 Frame.
DMA: Request queue over.( %d )
DMA [ %d lines] TIMEOUT
Warning: WaveDmaQ contains %d msgs.
Audio:now-max tasklen is %d / %d
Audio:Warning:ABI Tasklist length over (%d)
AudioSend: %d -> %d (%d)
Undefined Port Command %d
(num %d) (rank %d) (e_rank %d)
(num %d  org_bipas %d  bipas %d)
(%d) rap %3d
rate_count_F %10.2f
rap_count_F %10.2f
area %5d
enemy %d (%d --> %d)
enemy voice set (%d  slip_flag %x  weapon %x)
(%d , name %d)
===== ENEMY DRIVE SUB (%d) =====
ENEMY END
(1)enemy stick angle over!! (%d)
(2)enemy stick angle over!! (%d)
ENEMY END
AREA ERR!!!
%d AREA ERR!!!
SOUTH
EAST
NORTH
WEST
get_oga_area_sub_BP() ...
(b_num = %d)
(%d, %d, %d) 
<%d> (%d, %d, %d) [%d] lng %f
(area %d, y %7.2f)
(num %d: area %d ) (%d,%d,%d)
(num %d: area %d ==>%d) (group %d) (%d,%d,%d)
BOM(%d) (%7.2f, %7.2f, %7.2f)
BOM HIT CHECK
BOM HIT !!!!! (%d)
RESULT BOM area(%d)
BOM
SET
(TABLE IS FULL)
(category %d)
MAP NUMBER %d
center_EX ptr             = %x %x (%x)
center_BP[%d] ptr         = %x %x (%x)
side_point_L_BP[%d] ptr   = %x %x (%x)
side_point_R_BP[%d] ptr   = %x %x (%x)
curve_BP[%d] ptr          = %x %x (%x)
angle_BP[%d] ptr          = %x %x (%x)
short_cut_data_BP[%d] ptr = %x %x (%x)
CENTER LINE
(map:%d)
ROM center (BP%d) line adr. = %x (%x)
center (BP%d) line adr. = %x (%x)
BP center_point_number : %d
(%d -> %d)
extern POINT rom_center_KT
area read from ROM (%d)
(num %d, act %d)
(num %d,  act %d,  old_act_num %d)
SL: center_point_number : %d
SL: CENTER LINE
SHIP: center_point_number : %d
SHIP: CENTER LINE
(num %d, permit %d, %d)
OGA CAMERA INIT (%d)
OGA CAMERA INIT END
ERR !!! (ncx = %f)
ERR !!! (ncz = %f)
ERR !!! (ecx = %f)
ERR !!! (ecz = %f)
OGA DRIVERS POINT CAMERA MODE
OGA WINNER CAMERA MODE
OGA TIMEATTACK QUICK CAMERA INIT
OGA BATTLE CAMERA INIT win(%d)
GOAL! <<rank 1>> camera %d  rank %d
GOAL! <<rank 2,3,4>> camera %d  rank %d
GOAL! <<rank 5,6,7,8>> camera %d  rank %d
<<< ITEM OBJ NUMBER ERR !! >>> item %d  obj_num %d
<<< BANANA SET >>> obj_num %d   zure %f
BANANA
EXISTOBJ
category
sparam
num
BANANA HOLD (num %d  time %d   hold_time %d)
<<< BANANA NAGE SET >>> obj_num %d
BANANA NAGE MOVE
BANANA NAGE END
G_SHELL HOLD (num %d  time %d   hold_time %d)
<<< G_SHELL SET >>> obj_num %d
<<< G_SHELL SET >>> object_count %d
G_SHELL
R_SHELL HOLD (num %d  time %d   hold_time %d  obj_num %d)
<<< R_SHELL SET >>> obj_num %d
<<< R_SHELL SET >>> object_count %d
R_SHELL
R_SHELL SHOOT (num %d  time %d   hold_time %d  obj_num %d)
S_BANANA HOLD (num %d  time %d   hold_time %d)
<<< SUPER_BANANA SET >>> obj_num %d
<<< SUPER_BANANA SET >>> object_count %d
S_BANANA
S_BANANA RELEASE (num %d  time %d )
<<< FAKE IBOX SET >>> obj_num %d
IBOX
FBOX HOLD (num %d  time %d   hold_time %d)
START (%d)
END (%d)
map_number = %d - > 20
OGA Move
OGAWA DEBUG DRAW
S_MARIO
S_LUIZI
S_YOSSY
S_KINOP
S_DONKY
S_WARIO
S_PEACH
S_KUPPA
J_MARIO
J_LUIZI
J_YOSSY
J_KINOP
J_DONKY
J_WARIO
J_PEACH
J_KUPPA
debug_mode
on
off
map_number
screen_mode
player
sound mode
push b to get all goldcup
effectcount < 0 !!!!!!(kawano)
MAX effectcount(760) over!!!!(kawano)