the cutting room mirror

Mario Kart 7

This article has a talk page!
view on tcrf.net

Gctr_MarioCircuit_Divide (Early Mario Circuit Track)#

Watch on YouTube

Download Gctr_MarioCircuit_Divide.szs (Restoration)

File: MK7 Gctr MarioCircuit Divide Restoration.zip (1.30 MB) (info)

This is the only unused track in the game. It is essentially an early version of Mario Circuit, with slightly different geometry, collision and parameters. There are no references to this course in the game's code.

Course archive (.szs)#

Since the course archive lacks many important files, and the course information (kmp) file is in an early format, the track crashes when trying to load it.

The following files can be found in the course archive:

File Name

Description

Gctr_MarioCircuit_Divide.bclgt

Light information file, similar to the final version found in the Mario Circuit course archive.

Gctr_MarioCircuit.bclgt (*)

Another light information file, differs from the previous one and the final version.

Gctr_MarioCircuit_Divide_ch0.bclgt

Character light information file, uses different internal names than the ones found in used courses.

Gctr_MarioCircuit_Divide.div

Model division file, seems to match the main course model appropriately.

Gctr_MarioCircuit_Divide.bcmdl

Main course model file, more info below.

Gctr_MarioCircuit_Divide.kcl

Main collision file, matches the main course model appropriately, more info below.

Gctr_MarioCircuit.kcl (*)

Another collision file, doesn't match the main course model nor the final Mario Circuit course model, more info below.

Gctr_MarioCircuit_Divide.kmp

Course info file, more info below.

Gctr_MarioCircuit_Divide_map.bcmdl (**)

3D model of the course minimap.

(*) This file is a duplicate file and should not belong to this course archive.
(**) This file is unique and cannot be found in any other course archive.

The following files are missing from the course archive:

File Name

Description

UIMapPos.bin

Determines the position offsets for the bottom screen minimaps.

Gctr_MarioCircuit_Divide_map.bclim

Bottom screen global minimap (small)

Gctr_MarioCircuit_Divide_map2.bclim

Bottom screen global minimap (full)

Course Object Models

3D models for the objects defined in the kmp (Skybox variant 1, Goomba, Red Mushroom, Tree Variant 1 and pipe models).

Course Model (.bcmdl)#

The .bcmdl course models are quite similar between the early and final versions, however a few textures are different. The spotlight texture was stretched to double the width and the castle wall texture and shading was slightly modified (matching prerelease footage). The four small trick ramps are missing, so the shadow map lacked shadows for these.

Early

Final

In addition, the early version in general is a bit bigger, there are no trick ramps, and the texture animation for the water doesn't loop, so it will only play once before stopping completely.

Collision (kcl)#

Strangely, there are two collisions files Gctr_MarioCircuit.kcl and Gctr_MarioCircuit_Divide.kcl inside the .szs, second concording with the model.

They are almost identical to each other. The only difference seems to be that, in Gctr_MarioCircuit.kcl, when players drive into the flowers located before the entrance of the castle, the tires won't emit a flower graphical effect.

Both collision models don't have a water barrier. This is because the water barrier is actually added as an object in the early version, rather than being part of the collision model. Said object is named internally as WaterFix (ID 0x132).

The glider pad uses the same collision type that is used in the blue glider mushroom from Wii Mushroom Gorge. Mario Circuit originally had a bouncy mushroom instead of a glider pad when exiting the castle.

Interestingly, both collision models show that, originally, the dirt path located after the exit of the castle used to be connected with the castle walls. MK7_-_divide_collision.jpeg

Course info (kmp)#

The early kmp is partially empty, only global objects, routes and areas exist. Checkpoints, cpu/item routes, respawn points and some other necessary sections to make the course load are missing.

  • The course doesn't have any itemboxes or coins.
  • There are three large Goombas rather than two normal-sized ones.
  • The air flowing from the pipes near the gliding section is missing.
  • The course uses Toad Circuit trees in the early version, rather than pink Sakura trees.
  • There are no hills in the background of the track when you start the race.
  • The course has replay/result cameras that go unseen, as there are no checkpoints defined, so players won't be able to complete the race to see them. Most of them are very different to the cameras in the final version of the course. The one located at the end of the pipe before the finish line seems to be a leftover from the beginning of the game's E3 2010 autodemo. Curiously, there are 3 extra cameras located out of bounds to the east of the finish line. They cannot be activated normally, as the triggers (AREAs) that are used to trigger these are also located out of bounds as well.

Touch Screen Map#

The bottom screen map is stored in a different model (.bcmdl) in the same way as Mario Kart Wii did, instead of an image file (bclim). It even has the two bones that are used to position the map, named exactly how all minimap models from Mario Kart Wii are (posLD and posRU).

Unused Car Route in Wii Coconut Mall#

Watch on YouTube

There's an unused route in Wii Coconut Mall that suggests that the third car (which appeared in the Wii version) also appeared here at some point in development. Here, they extended its path so that it goes from wall to wall, rather than from one of the walls to the boost panel like in the Wii version.

Unused Code#

Unused Super Thwomp Behavior#

Watch on YouTube

Super Thwomps, the type of Thwomps that appear in SNES Rainbow Road, have unused code that removes the Star item effect from players when they are stomped.

This is impossible to achieve in the normal game, since the Star item makes the player completely invincible to those enemies. In the adjacent video, a cheat code was used to make players vulnerable to Super Thwomps while on a Star, in order to show the unused behavior.

This behavior is only found in Super Thwomps, and not regular Thwomps. The function that manages this behavior is named Kart::VehicleReact::reactStarEnd(), and can be found at RAM address 0x002DF154 (US v1.1 prepatched, aka US Rev1). Said function is only ever called from Field::ObjectStarDossun::doReaction_againstKart + 0x148, at RAM address 0x0038B790 (US v1.1 prepatched, aka US Rev1).

(Source: Ro)

Unused 99 coins limit in Coin Runners#

The game stores a maximum coin limit variable, which is usually 10. However, for Coin Runners exclusively, said limit is set to 99. This is all done in function RaceSys::KartInfo::init (set by the instruction at 0x00468FE8 in RAM, USA Rev1).

Despite this, it's not possible to get more than 10 coins in Coin Runners, much like with every other mode. This is due to some code in function Object::CoinManager::addCoin that prevents the player from adding more than 10 coins.

If we remove those checks, the player will be able to score up to 99 coins in Coin Runners as originally intended by the developers, which we can do by using the following Gateway code:

USA Rev1

Gateway Code

00416028 EA000002
00416044 E320F000

Unused Objects#

ObjFlow#

ObjFlow.bin contains all the info on the game's objects, which acts as a database file to load the objects themselves and give them unique IDs. However, this file also has some unused object entries. Some of which are duplicate entries of current objects (possibly test or earlier variants of them), and some objects that don't exist in any track at all. No models of those exist. Most of these also don't have any references in the game's code.

To do:

  • Differences between MovingRoad, MovingRoad1 and MovingRoad2.
  • UgTreeL and UgTreeS have code associated to them.

Name (ObjFlow.bin)

Name (Code's class)

Object ID

Notes

ef_env_sun

ObjectOldSun

0x002

Unused sun object, leftover from the E3 2010 demo. Its only unique code (function "Field::ObjectOldSun::initObj") forcefully disables the object and makes it invisible. A comment associated to this object in the code reads "old sun( to be delete )".

jugem

-

0x009

A Lakitu object. When placing this object, it doesn't use the Lakitu model from RaceCommon.szs, but rather it loads it from the track szs, and without animations (due to there not being code specifically for this object), so it's just placed in a T-pose.

RrStarRing

ObjectStarRingJmap

0x011

Unused Star Ring. It inherits its code from the used Star Ring, but otherwise has no unique behaviour that's different from the used variant. The used one's ID is 0x17F.

MovingRoad

ObjectTwistWay

0x012

Unused moving road.

MovingRoad1

ObjectTwistWay1

0x016

Unused moving road.

MovingRoad2

ObjectTwistWay2

0x015

Unused moving road.

WiiCarB

ObjectFixedWiiCar

0x06F

Removed car object for Wii Coconut Mall. This one was meant for the cars parked in the parking lot (similar to Mario Kart Wii since those were objects), but these were moved to the track model, as the texture name for them are Wiicm_CarB.

CruiseShip

-

0x073

A removed cruise ship object. This was probably a background object.

WiiCarA

ObjectWiiCar

0x07A

Duplicate of Parking Car Variant A, but without collision.

DsSkyCastle

-

0x14A

Removed Sky Castle object. Meant to be a background object for DS Airship Fortress, since a texture name in the track model uses ds_skycastle, which is for the castle and airships in the background.

WiiParasol

-

0x15A

Removed Parasol object. Possibly meant to be a decoration for Wii Coconut Mall.

CmnTree1

ObjectCmnTreeNoHitCmnTree1

0x169

Duplicate Tree Variant 1, but without collision. The used one has object ID 0x130.

CmnTree2

ObjectCmnTreeNoHitCmnTree2

0x16A

Duplicate Tree Variant 2, but without collision. The used one has object ID 0x133.

CmnTree3

ObjectCmnTreeNoHitCmnTree3

0x16B

Duplicate Tree Variant 3, but without collision. The used one has object ID 0x157.

CmnTree4

ObjectCmnTreeNoHitCmnTree4

0x16C

Duplicate Tree Variant 4, but without collision. The used one has object ID 0x149.

CmnTree5

ObjectCmnTreeNoHitCmnTree5

0x16D

Duplicate Tree Variant 5, but without collision. The used one has object ID 0x15F.

WiTree1

ObjectCmnTreeNoHitWiTree1

0x16E

Duplicate Wii Tree Variant 1, but without collision. The used one has object ID 0x134.

WiTree2

ObjectCmnTreeNoHitWiTree2

0x16F

Duplicate Wii Tree Variant 2, but without collision. The used one has object ID 0x135.

WiTree3

ObjectCmnTreeNoHitWiTree3

0x170

Duplicate Wii Tree Variant 3, but without collision. The used one has object ID 0x136.

DsDeadTree

ObjectCmnTreeNoHitDsDeadTree

0x171

Duplicate dead tree from DS Luigi's Mansion, but without collision. The used one has object ID 0x14D.

DsSpookytree

ObjectCmnTreeNoHitDsSpookytree

0x172

Duplicate spooky tree from DS Luigi's Mansion, but without collision. The used one has object ID 0x156.

GcTree1

ObjectCmnTreeNoHitGcTree1

0x173

Duplicate GC tree, but without collision. The used one has object ID 0x161.

MrBush

-

0x179

Removed Bush object for Cheep Cheep Lagoon. This was probably the seaweed, which is part of the track model instead. Although according to the file GeoHitTableKart.bin, this object is solid and uses the same collision as a normal tree. The seaweed isn't solid in the final, so either they were at some point (which wouldn't make much sense considering tricks were probably implemented at this point), or this was the bushes at the start of the track, which is out of bounds.

IsAnemone

-

0x185

Removed Anemone object for Rosalina's Ice World. This was most likely the Anemone already present on the track in the underwater section, which is part of the track model, however they aren't animated. It's possible at some point they were going to be animated.

RrMovingRoad

ObjectRrWaveWay1

0x186

Unused Moving Road for Rainbow Road.

UgTreeS

ObjectUgTreeS

0x194

Removed Small Tree for Piranha Plant Slide. Most likely removed since the trees are part of the track model rather than objects.

UgTreeL

ObjectUgTreeL

0x195

Removed Large Tree for Piranha Plant Slide. Most likely removed since the trees are part of the track model rather than objects.

SfcMovingRoad

-

0x19B - 0x19E

4 unused versions of the SNES Rainbow Road moving roads.

Unused Battle Mode Item Functions#

Watch on YouTubeThe Blue Shell, Lightning, and Bullet Bill can't be obtained under normal circumstances. These items will have unusual effects when hacked in.

Blue Shell

Acts like a Green Shell but it goes on forever. The game crashes if it goes out of bounds.

Lightning

Shocks the players but it doesn't always give out a point per player. The players do not shrink, and they keep any items they had.

Bullet Bill

Follows a route similar to the CPUs, and like the Blue Shell, the effect lasts forever. It performs tricks automatically. After a while it will get stuck in a loop.

(Source: Huntereb)

(video: Mankalor)

Unused "Race Number" Strings#

Inside the message file at UI\common-XX.szs\Common.msbt, there are the messages for indicating the race number (1st, 2nd, 3rd, final). However, there are also messages for all the way up to "31th race", allowing for a maximum of 32 races. It is likely that this would have been used with a feature for customizing the number of races in VS mode or online tournaments, both of which are locked to 4 races at a time.

Unused Lap Setting#

Like in Mario Kart Wii, there is an unused value in the track's settings file which controls the number of laps. Modifying it doesn't seem to affect anything in-game, however. The game only has Lakitu signs for three laps, so it would be unable to properly indicate any extra laps.

Unseen Blue Glider Mushroom#

In the award ceremony track (Gctr_WinningRun.szs), there is an unseen blue glider mushroom (like the one in Mushroom Gorge) near the tunnel section on the right-hand side. It is possible to see the stem of the mushroom by using a hack that increases the speed of the karts. It is possible that the mushroom is simply there to allow the winner to glide in from above, as the mushroom looks out of place in Toad Circuit, which the track is based on.

Debug Material#

Debug Strings#

To do:
Check for this content in other regions and versions.

Inside the .code of the European v1.1 ExeFS at 0x4F1A18, there are some references to a debug menu, such as "SndSceneDebug.MapObj", "SndSceneDebug", and "DebugPageList".

There are also a few debug controls:

Debug Option

Button

Exit DebugPageSelect

B

Enter DebugPageSelect

R+B

Select DebugPage

Up/Down

Also, at 0x37B078, where there are all the options shown when finishing a race, there are debug options such as "Debug_Next", "Debug_Reload" and "Debug_Exit"

After a RAM dump, the following debug tasks can be found:

  • DebugMenuMainPage
  • SoundTest
  • DebugShiraiwa
  • DebugSuzuki
  • DebugObayashi
  • DebugKartRun
  • DebugField
  • DebugSakuraba
  • DebugChannelScene

Note that Shiraiwa, Suzuki, Obayashi and Sakuraba are some of the game's main programmers.

Function Symbols#

Download Mario Kart 7 (Download Play Child) Symbol Map

File: MK7 Download Play Child Symbol Maps.zip (234 KB) (info)

In the download play child application (sent by the game to other consoles in Download Play mode) there is a 1.5MB file called CTRDash.xmap which has all of the 21305 function names and their respective addresses in RAM of the download play executable. Since all of the addresses match the assembly code, the file was probably added or updated with the latest compilation of the child app. Here is a portion of it:

...
30d790  Enemy::AIEngine::stateReady()
30d8b8  Enemy::AIEngine::stateInitIdle()
30d8bc  Enemy::AIEngine::stateInitStop()
30d8c0  Enemy::AIEngine::stateAfterGoal()
30d918  Enemy::AIEngine::stateGhostIdle()
30d91c  Enemy::AIEngine::stateInitReady()
30d968  Enemy::AIEngine::statePlayerIdle()
30da1c  Enemy::AIEngine::initAfterPathMgr()
30da48  Enemy::AIEngine::stateInitAfterGoal()
30da78  Enemy::AIEngine::stateInitGhostIdle()
30da7c  Enemy::AIEngine::stateInitPlayerIdle()
30dacc  Enemy::AIEngine::init()
30dbb4  Enemy::AI::startKiller()
30dbdc  Enemy::AIEngine::awake()
30dc88  Enemy::AIEngine::sleep()
...

This file can only be found in the European, American and Japanese builds of the game, indicating that this file might have been kept by mistake and only removed in later builds, such as the Taiwanese, Chinese and Korean releases.

Oddities#

Lakitu and Shy Guy's Mugshots#

To do:
Check if this applies to more characters.

Character select

Trophy screen

Lakitu

Shy Guy

Lakitu and the Shy Guys are the only characters in the game to use different mugshot renders for the trophy screen than anywhere else in the game. For brevity's sake, only the red Shy Guy's mugshots are pictured here.

Download Play Icon#

To do:
Is the icon stored in the Download Play ROM header not used?

Download Play

Main

The icon for the Download Play ROM (which is displayed by the 3DS Download Play app), early version of the one used for the main ROM (which is displayed on the home menu and in data management). It is located in the banner folder. This discrepancy was fixed in the Chinese version.

(Source: Original TCRF research)

BGMs#

The bgms for the retro battle courses (N64 Big Donut, GBA Battle Course 1, and DS Palm Shore), along with the unlock jingle, the watch race bgm, and the award ceremony winning run, all have the Project Sample Rate (Hz) as 32000, and the rest of the game's bgms uses 32728. This is because these bgms were ripped directly from Mario Kart Wii unmodified (except the watch race bgm, which is very likely a leftover from the E3 2010 build), besides winning run being shortened and fading out.

Unusual Item Boxes#

To do:
Get a better video.

Watch on YouTubeOn Rainbow Road. after the first gliding section, there are three Item Boxes hidden under the planet's rings. They can only be collected by flying under the rings and back up onto the course. Unlike the Super Item Box retained in DK Pass (DS), which has a unique item distribution of only speed items and Red Shells, they appear to have no special characteristics.

(video: SuperNickid)

Miscellaneous#

Unused Items#

The game has two different ways of referencing items. The items that appear in the item roulette (item slots or eItemSlot) and the items that appear in the races as 3D models (item types or eItemType).

Unused Item Slots#

Watch on YouTube

There are two test item slots referenced as Test3 (ID 0xF) and Test4 (ID 0x10) with zero probability to appear in any game mode. They display in the item roulette as star items, but since the conversion from item slot to item type is stubbed and the game doesn't have any special code for when the player uses them, they do nothing when obtained and used. These two items actually appear in the item roulette spin animation, as the game just takes a random item slot ID in the range 0x0 (Single Banana) and 0x13 (Triple Red Shells), which includes the test item IDs. This has the side effect of making the star graphic appear more often in the spin animation.

Unused Item Types#

The game features 3 unused item types. The first of them is the Golden mushroom (KinokoP, ID 0x08) item type. While this item appears in the game, its behaviour is hardcoded and it doesn't have a 3D model, so the item type is stubbed. The other two correspond to the Fake Item Box (FakeBox, ID 0x07) and Mega Mushroom (BigKinoko, ID 0x0B). All the code and assets related to these item types are stubbed or missing, and only a few references remain in a table that determines how items interact with each other (RaceCommon.szs/ItemReactTable.bin).

Test Kart#

Inside a file where there are all the kart body model names, there is a reference to a kart body called "std_lod_oneTest", probably for testing. However, there isn't any model or file with that name. "std" means standard, "lod" means the model is used by the other racers, "oneTest" can mean is the first model is for testing.

Regional Differences#

Across different regions, certain tracks and vehicles have different names. These are the names that differ between the European and North American releases, along with a direct translation of the Japanese original (not counting retro courses).

Interestingly, unlike a number of other Nintendo games with separate localizations per region, it's the American script that tends to be more literal and the European script that takes more liberties. Go figure.

Track Names#

Japanese

European

American

Kinopio Circuit

Toad Circuit

Toad Circuit

Pukupuku Lagoon

Cheep Cheep Cape

Cheep Cheep Lagoon

Heiho Carnival

Shy Guy Bazaar

Shy Guy Bazaar

Wuhu Island 1

Wuhu Island Loop

Wuhu Loop

Music Park

Melody Motorway

Music Park

Rock Rock Mountain

Alpine Pass

Rock Rock Mountain

Pakkun Slider

Piranha Plant Pipeway

Piranha Plant Slide

Wario Ship

Wario's Galleon

Wario Shipyard

Neo Koopa City

Koopa City

Neo Bowser City

Wuhu Island 2

Wuhu Mountain Loop

Maka Wuhu

Rosetta Planet

Rosalina's Ice World

Rosalina's Ice World

Koopa Castle

Bowser's Castle

Bowser's Castle

Honeybee House

Honeybee House

Honeybee Hive

Despite the name change, the Japanese and North American name "Music Park" can still be seen on banners in the level in the European version.

Kart Bodies#

Japanese

European

American

Gold Kart

Gold Kart

Gold Standard

Birthday Girl

Royal Ribbon

Birthday Girl

Mach Queen

Bumble V

Bumble V

War Beetle

Growlster

Bruiser

Jet Soda

Soda Jet

Soda Jet

B Dash

B Dasher

B Dasher

Tarupoppo

Barrel Train

Barrel Train

Retromaru

Tiny Tug

Tiny Tug

Sand Runner

Cact-X

Cact-X

H2O

Cloud 9

Cloud 9

Dangan Duck

Gherkin

Zucchini

Cobalt Seven

Blue Seven

Blue Seven

Banana Buggy

Bolt Buggy

Bolt Buggy

Skeleton

Pipe Frame

Pipe Frame

The Japanese version also calls this kart part a frame rather than a body.

Kart Tires#

Japanese

European

American

Normal Tire

Normal

Standard

Gold Tire

Gold Wheels

Gold Tires

Roller Tire

Roller

Roller

Ring Tire

Slim

Slim

Slick Tire

Slick

Slick

Sponge Tire

Sponge

Sponge

Super Kinoko

Mushroom

Mushroom

Wood Ring

Wooden

Wood

Wild Red

Monster Red

Monster Red

Wild Tire

Monster

Monster

The European version also calls this kart part a wheel rather than a tire.

Kart Gliders#

Japanese

European

American

Super Kite

Super Glider

Super Glider

Gold Kite

Gold Glider

Gold Glider

Flower Kite

Flower Glider

Flower Glider

Beast Kite

Ghastly Glider

Beast Glider

Basa Basa Kite

Swoop

Swooper

Parafoil

Parafoil

Paraglider

Swoop is another name for Swooper in some recent games. The names seem to be used interchangeably. Oddly, the North American name for the Parafoil wasn't carried over to Mario Kart 8.

Revisional Differences#

Each update is required to go online.

Version 1.1#

Released on May 15, 2012 as a downloadable patch on the eShop. Other than adding "Ver. 1.1" to the Online Multiplayer tab, this update fixed four respawn glitches that could be used to skip parts of several courses during online play:

  • GBA Bowser Castle 1
  • DK Jungle
  • Wuhu Loop / Wuhu Island Loop / Wuhu Island 1
  • Maka Wuhu / Wuhu Mountain Loop / Wuhu Island 2

Note that these glitches were only fixed for online play to avoid exploits; in every other mode, these glitches are still present.

The patch itself actually fixes all the respawn glitches, including the ones that can only be done by hacking. Though they are not included in the patch folder, so it's impossible to make them work again online. However, if you were to replace the existing kmp files in the patch with their original kmp, only Maka Wuhu's would work. The Daisy Crusier and Maple Treeway ones were not fixed.

Version 1.2#

Watch on YouTubeReleased on December 13, 2022 - over 11 years after the original release.

  • Adds "Ver. 1.2" to the Online Multiplayer tab.
  • Fixes a severe vulnerability in the game's network code that would allow remote code execution. This vulnerability is now known as ENLBufferPwn.

Internal Project Name#

Mario Kart 7 is referred to as "CTRDash" internally. "CTR" is the product code for the 3DS.