Difference between revisions of "Mission Mode"

From Custom Mario Kart
Jump to navigation Jump to search
m (...And fixed a line spacing issue.)
m (Tidy up the formatting.)
Line 1: Line 1:
 
'''Mission Mode''' is an unused, incomplete game mode present in [[Mario Kart Wii]]. It seems to have been intended to function very similarly to [[Mario Kart DS]]'s Mission Mode, but was ultimately cancelled before completion and hidden away. It is likely that [[Tournaments|Competition/Tournament Mode]], which shares many similarities with Mission Mode, became its replacement. The leftover code and screens of Mission Mode were discovered by [[User:MrBean35000vr|MrBean35000vr]] on '''August 3rd, 2017''', over 9 years after Mario Kart Wii's release date.
 
'''Mission Mode''' is an unused, incomplete game mode present in [[Mario Kart Wii]]. It seems to have been intended to function very similarly to [[Mario Kart DS]]'s Mission Mode, but was ultimately cancelled before completion and hidden away. It is likely that [[Tournaments|Competition/Tournament Mode]], which shares many similarities with Mission Mode, became its replacement. The leftover code and screens of Mission Mode were discovered by [[User:MrBean35000vr|MrBean35000vr]] on '''August 3rd, 2017''', over 9 years after Mario Kart Wii's release date.
 
 
__TOC__
 
 
  
 
== What Still Exists ==
 
== What Still Exists ==
 
  
 
Because Mission Mode was cancelled from the game and was never intended to be accessed, it is missing a lot of data that it's supposed to have in order to work properly. However, most code elements do still exist and can be accessed via cheat codes. The menu screens that allow a user to pick a level, view the level objective and start the game all still exist, albeit with no text. The gameplay mode itself still exists, meaning that it is possible to play the mode and fulfill various objectives, although the game doesn't seem to have a concept of failing, if you fail your objective, the game acts as though you have won anyway. However, the scenarios that Nintendo created for the mode do not exist anymore, meaning that although we can test out the objectives, we do not know how Nintendo would have originally used them and there are no leftover complete missions available in the game filesystem. However, based on certain similarities between game modes present in Mission Mode and Competition/Tournament Mode, it's very possible that some of the missing scenarios were remade as tournaments.
 
Because Mission Mode was cancelled from the game and was never intended to be accessed, it is missing a lot of data that it's supposed to have in order to work properly. However, most code elements do still exist and can be accessed via cheat codes. The menu screens that allow a user to pick a level, view the level objective and start the game all still exist, albeit with no text. The gameplay mode itself still exists, meaning that it is possible to play the mode and fulfill various objectives, although the game doesn't seem to have a concept of failing, if you fail your objective, the game acts as though you have won anyway. However, the scenarios that Nintendo created for the mode do not exist anymore, meaning that although we can test out the objectives, we do not know how Nintendo would have originally used them and there are no leftover complete missions available in the game filesystem. However, based on certain similarities between game modes present in Mission Mode and Competition/Tournament Mode, it's very possible that some of the missing scenarios were remade as tournaments.
 
  
 
A look through the menus and some of the objectives can be seen in the following video:
 
A look through the menus and some of the objectives can be seen in the following video:
  
 
{{youtube-box||v9xP56_V0M8|Mission Mode Discovery Video}}
 
{{youtube-box||v9xP56_V0M8|Mission Mode Discovery Video}}
 
  
 
== Gameplay and Features ==
 
== Gameplay and Features ==
Line 56: Line 49:
 
| 0x0D || Get slipstreams from CPU opponents to score points.
 
| 0x0D || Get slipstreams from CPU opponents to score points.
 
|}
 
|}
 
  
 
=== Tutorials ===
 
=== Tutorials ===
Line 94: Line 86:
 
| 13_itemequip.thp || Dragging items behind you
 
| 13_itemequip.thp || Dragging items behind you
 
|}
 
|}
 
  
 
== The Missing Mission Objectives File ==
 
== The Missing Mission Objectives File ==
  
When accessing the leftover menus for Mission Mode, the game attempts to load information from a file called '''mission_single.kmt''', which is supposed to reside in '''/Race/MissionRun''' in the game filesystem. This file is not present and presumably permanently lost. Without it, Mission Mode crashes when you try to start a level because it cannot read this file. However, it is possible to get an idea of how it is supposed to work based on a surviving routine in the game's code that is designed to load and parse this file, and thus create a new one that allows the game to continue without crashing.
+
When accessing the leftover menus for Mission Mode, the game attempts to load information from a file called '''mission_single.kmt''', which is supposed to reside in '''/[[Filesystem/Race|Race]]/[[Filesystem/Race/MissionRun|MissionRun]]/mission_single.kmt''' in the game filesystem. This file is not present and presumably permanently lost. Without it, Mission Mode crashes when you try to start a level because it cannot read this file. However, it is possible to get an idea of how it is supposed to work based on a surviving routine in the game's code that is designed to load and parse this file, and thus create a new one that allows the game to continue without crashing.
  
 
The file is meant to be a long list of 64 mission objectives, as well as listing supplementary files to load to build the game world. It would have been 0x1C10 bytes long. The first 0x10 bytes are a header of unknown properties, but it doesn't matter what is written in there as it is not checked or validated by the game.
 
The file is meant to be a long list of 64 mission objectives, as well as listing supplementary files to load to build the game world. It would have been 0x1C10 bytes long. The first 0x10 bytes are a header of unknown properties, but it doesn't matter what is written in there as it is not checked or validated by the game.
Line 106: Line 97:
 
The format for these entries is as follows:
 
The format for these entries is as follows:
  
{| class="textbox alt headline grid"
+
{| class="wikitable"
 
|+ KMT Scenario Entry
 
|+ KMT Scenario Entry
! Offset !! Size/Usage
+
! Offset !! Size !! Usage
 
|-
 
|-
| 0x00 || (u16) Mission Run file (mrxxxxx.szs, see below)
+
| 0x00 || UInt16 || Mission Run file (mrxxxxx.szs, see below)
 
|-
 
|-
| 0x02 || (u16) Game Mode (see above)
+
| 0x02 || UInt16 || Game Mode (see above)
 
|-
 
|-
| 0x04 || (u8) Course ID
+
| 0x04 || UInt8 || Course ID
 
|-
 
|-
| 0x05 || (u8) Character ID
+
| 0x05 || UInt8 || Character ID
 
|-
 
|-
| 0x06 || (u8) Vehicle ID
+
| 0x06 || UInt8 || Vehicle ID
 
|-
 
|-
| 0x07 || (u8) Engine class (0 = 50cc, 1 = 100cc, 2 = 150cc)
+
| 0x07 || UInt8 || Engine class (0 = 50cc, 1 = 100cc, 2 = 150cc)
 
|-
 
|-
| 0x08 || (u32) Unknown
+
| 0x08 || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x0C || (u32) Unknown
+
| 0x0C || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x10 || (u8) Unknown
+
| 0x10 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x11 || (u8) Unknown
+
| 0x11 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x12 || (u8) Unknown
+
| 0x12 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x13 || (u8) Unknown
+
| 0x13 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x14 || (u8) Unknown
+
| 0x14 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x15 || (u8) Unknown
+
| 0x15 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x16 || (u8) Unknown
+
| 0x16 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x17 || (u8) Unknown
+
| 0x17 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x18 || (u8) Unknown
+
| 0x18 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x19 || (u8) Unknown
+
| 0x19 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x1A || (u8) Unknown
+
| 0x1A || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x1B || (u8) Unknown
+
| 0x1B || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x1C || (u32) Unknown
+
| 0x1C || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x20 || (u8) Unknown
+
| 0x20 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x21 || (u8) Unknown
+
| 0x21 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x22 || (u8) Unknown
+
| 0x22 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x23 || (u8) Unknown
+
| 0x23 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x24 || (u8) Unknown
+
| 0x24 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x25 || (u8) Unknown
+
| 0x25 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x26 || (u8) Unknown
+
| 0x26 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x27 || (u8) Unknown
+
| 0x27 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x28 || (u8) Unknown
+
| 0x28 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x29 || (u8) Unknown
+
| 0x29 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x2A || (u8) Unknown
+
| 0x2A || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x2B || (u8) Unknown
+
| 0x2B || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x2C || (u16) Time limit (seconds)
+
| 0x2C || UInt16 || Time limit (seconds)
 
|-
 
|-
| 0x2E || (u8) Unknown
+
| 0x2E || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x2F || (u8) Unknown
+
| 0x2F || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x30 || (u32) Score required
+
| 0x30 || UInt32 || Score required
 
|-
 
|-
| 0x34 || (u32) Unknown
+
| 0x34 || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x38 || (u32) Unknown
+
| 0x38 || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x3C || (u32) Unknown
+
| 0x3C || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x40 || (u32) Unknown
+
| 0x40 || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x44 || (u32) Unknown
+
| 0x44 || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x48 || (u16) Unknown
+
| 0x48 || UInt16 || {{Unknown}}
 
|-
 
|-
| 0x4A || (u16) Unknown
+
| 0x4A || UInt16 || {{Unknown}}
 
|-
 
|-
| 0x4C || (u16) Unknown
+
| 0x4C || UInt16 || {{Unknown}}
 
|-
 
|-
| 0x4E || (u16) Unknown
+
| 0x4E || UInt16 || {{Unknown}}
 
|-
 
|-
| 0x50 || (u16) Unknown
+
| 0x50 || UInt16 || {{Unknown}}
 
|-
 
|-
| 0x52 || (u16) Unknown
+
| 0x52 || UInt16 || {{Unknown}}
 
|-
 
|-
| 0x54 || (u32) Unknown
+
| 0x54 || UInt32 || {{Unknown}}
 
|-
 
|-
| 0x58 || (u16) Unknown
+
| 0x58 || UInt16 || {{Unknown}}
 
|-
 
|-
| 0x5A || (u8) Unknown
+
| 0x5A || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x5B || (u8) Unknown
+
| 0x5B || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x5C || (u8) Unknown
+
| 0x5C || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x5D || (u8) Unknown
+
| 0x5D || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x5E || (u8) Unknown
+
| 0x5E || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x5F || (u8) Unknown
+
| 0x5F || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x60 || (u8) Unknown
+
| 0x60 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x61 || (u8) Unknown
+
| 0x61 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x62 || (u8) Unknown
+
| 0x62 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x63 || (u8) Unknown
+
| 0x63 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x64 || (u8) Unknown
+
| 0x64 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x65 || (u8) Unknown
+
| 0x65 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x66 || (u8) Unknown
+
| 0x66 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x67 || (u8) Unknown
+
| 0x67 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x68 || (u8) Unknown
+
| 0x68 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x69 || (u8) Unknown
+
| 0x69 || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x6A || (u8) Unknown
+
| 0x6A || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x6B || (u8) Unknown
+
| 0x6B || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x6C || (u8) Unknown
+
| 0x6C || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x6D || (u8) Unknown
+
| 0x6D || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x6E || (u8) Unknown
+
| 0x6E || UInt8 || {{Unknown}}
 
|-
 
|-
| 0x6F || (u8) Unknown
+
| 0x6F || UInt8 || {{Unknown}}
 
|}
 
|}
  
 
+
The "Mission Run" file listed at 0x00 into the entry is a supplementary file to load from the disc, and it can contain things such as alternate KMP files, additional models to load, etc. The number entered is converted to decimal, then appended to the string "mr", and finally ".szs" is appended. If the number is less than ten, one leading zero is added. The game will then seek the file in '''/[[Filesystem/Race|Race]]/[[Filesystem/Race/MissionRun|MissionRun]]''''. So, for example, if it were set to 0x0000, the game will try to load '''mr00.szs'''. If set to 0x000F, it would load '''mr15.szs''', etc. If it fails to find the file, the mode will still load, but no file replacements will occur.
The "Mission Run" file listed at 0x00 into the entry is a supplementary file to load from the disc, and it can contain things such as alternate KMP files, additional models to load, etc. The number entered is converted to decimal, then appended to the string "mr", and finally ".szs" is appended. If the number is less than ten, one leading zero is added. The game will then seek the file in Race/MissionRun. So, for example, if it were set to 0x0000, the game will try to load "mr00.szs". If set to 0x000F, it would load "mr15.szs", etc. If it fails to find the file, the mode will still load, but no file replacements will occur.
 
  
 
It is also worth noting that the drift restrictions and tutorial suggestions are not inside of this file, they seem to be somewhere else. It is also not possible to define any CPUs to load, which makes fulfilling some mission objectives completely impossible. However, it is possible to add CPUs via cheat codes, which then allows the objectives to be fulfilled.
 
It is also worth noting that the drift restrictions and tutorial suggestions are not inside of this file, they seem to be somewhere else. It is also not possible to define any CPUs to load, which makes fulfilling some mission objectives completely impossible. However, it is possible to add CPUs via cheat codes, which then allows the objectives to be fulfilled.
 
 
  
 
== Accessing Mission Mode ==
 
== Accessing Mission Mode ==
  
 
It is not possible to access Mission Mode ordinarily, so in order to access it, you need to use a [[Cheat_Code|cheat code]]. At present, only PAL cheat codes exist. Other regions will be posted as they become available.
 
It is not possible to access Mission Mode ordinarily, so in order to access it, you need to use a [[Cheat_Code|cheat code]]. At present, only PAL cheat codes exist. Other regions will be posted as they become available.
 
  
 
=== Playing the Mode ===
 
=== Playing the Mode ===
Line 272: Line 259:
  
 
'''Please be aware that completing missions may damage your save file.''' It may attempt to overwrite non-existent mission leaderboards. If in doubt, use a backup!
 
'''Please be aware that completing missions may damage your save file.''' It may attempt to overwrite non-existent mission leaderboards. If in doubt, use a backup!
 
  
 
<spoiler text="Mission Mode and KMT Patch [PAL]">
 
<spoiler text="Mission Mode and KMT Patch [PAL]">
Line 353: Line 339:
 
60632DA0 7C6903A6
 
60632DA0 7C6903A6
 
7FE3FB78 3880007A
 
7FE3FB78 3880007A
4E800421 00000000
+
4E800421 00000000</pre>
 
 
  
 
Replace the MMMMMMMMM block with a KMT Scenario Entry.  
 
Replace the MMMMMMMMM block with a KMT Scenario Entry.  
 
For example, if you enter the following:
 
For example, if you enter the following:
  
00FF0000 23071602
+
<pre>00FF0000 23071602
 
00000000 00000000
 
00000000 00000000
 
00000000 00000000
 
00000000 00000000
Line 372: Line 357:
 
00000000 00000000
 
00000000 00000000
 
00000000 00000000
 
00000000 00000000
00000000 00000000
+
00000000 00000000</pre>
  
Then you will get a mission where you play as Luigi/Mach Bike on Funky Stadium and the objective is to get 15 miniturbos in 60 seconds.</pre></spoiler>
+
Then you will get a mission where you play as Luigi/Mach Bike on Funky Stadium and the objective is to get 15 miniturbos in 60 seconds.</spoiler>
  
 
<spoiler text="Mission Mode without KMT Patch [PAL]">
 
<spoiler text="Mission Mode without KMT Patch [PAL]">
Line 439: Line 424:
 
60632DA0 7C6903A6
 
60632DA0 7C6903A6
 
7FE3FB78 3880007A
 
7FE3FB78 3880007A
4E800421 00000000
+
4E800421 00000000</pre>
  
 
You will need to create /Race/MissionRun/mission_single.kmt in the filesystem and fill it with scenario data, as outlined above.
 
You will need to create /Race/MissionRun/mission_single.kmt in the filesystem and fill it with scenario data, as outlined above.
If the KMT fails to load, a dummy mission will spawn with Mario/Standard Kart M on Mario Circuit, and end instantly.</pre></spoiler>
+
If the KMT fails to load, a dummy mission will spawn with Mario/Standard Kart M on Mario Circuit, and end instantly.</spoiler>
  
 
In both cases, to activate the code, load the Single Player menu, and then press START or +, depending on your controller. The Mission Mode Menu will pop up after a brief delay.
 
In both cases, to activate the code, load the Single Player menu, and then press START or +, depending on your controller. The Mission Mode Menu will pop up after a brief delay.
 
  
 
=== Other Useful Codes ===
 
=== Other Useful Codes ===
  
 
These are some other codes that may be useful when testing Mission Mode, and allow greater functionality of the mode.
 
These are some other codes that may be useful when testing Mission Mode, and allow greater functionality of the mode.
 
  
 
The following code allows CPUs to be loaded in Mission Mode:
 
The following code allows CPUs to be loaded in Mission Mode:
Line 466: Line 449:
 
39200001 913D0008
 
39200001 913D0008
 
38E7FFFF 4BFFFFD4
 
38E7FFFF 4BFFFFD4
A0E30068 00000000
+
A0E30068 00000000</pre>
  
 
This code makes use of some of the unknown bytes in the KMT scenario entry format.
 
This code makes use of some of the unknown bytes in the KMT scenario entry format.
Line 473: Line 456:
  
 
Example:
 
Example:
0x58 = 0x0002
+
0x58 = 0x0002
0x5A = 0x07
+
0x5A = 0x07
0x5B = 0x16
+
0x5B = 0x16
0x5C = 0x15
+
0x5C = 0x15
0x5D = 0x05
+
0x5D = 0x05
 
 
Would yield 2 CPU opponents, one Luigi/Mach Bike, one Dry Bowser/Offroader.</pre></spoiler>
 
  
 +
Would yield 2 CPU opponents, one Luigi/Mach Bike, one Dry Bowser/Offroader.</spoiler>
  
 
The following code prevents the game from crashing if a track does not have valid MSPT entries:
 
The following code prevents the game from crashing if a track does not have valid MSPT entries:
Line 497: Line 479:
 
41A10008 3CC08170
 
41A10008 3CC08170
 
7FE3FB78 00000000</pre></spoiler>
 
7FE3FB78 00000000</pre></spoiler>
 
  
 
The following code replaces the missing text in Mission Mode with text IDs, allowing you to see where text normally renders:
 
The following code replaces the missing text in Mission Mode with text IDs, allowing you to see where text normally renders:
Line 508: Line 489:
 
38A5001C 38800D7B
 
38A5001C 38800D7B
 
3CC0808C 00000000</pre></spoiler>
 
3CC0808C 00000000</pre></spoiler>
 
  
 
All codes were created by [[User:MrBean35000vr|MrBean35000vr]].
 
All codes were created by [[User:MrBean35000vr|MrBean35000vr]].
 
  
 
== Porting Tournaments/Competitions to Mission Mode ==
 
== Porting Tournaments/Competitions to Mission Mode ==
  
 
If you can extract the U8 archive out of a tournament, you can in most cases convert it to work with Mission Mode. Save the extracted U8 archive as a Mission Run file (mrxx.szs) for the Race/MissionRun folder (where xx is the number you define in the KMT scenario), open any and all CommonObj files that the tournament usually requires and copy their internal files into the Mission Run file, then set up the KMT with the correct objective, and correct file ID and add mrxx.szs to the filesystem. You will then be able to play the tournament in Mission Mode, though you will be restricted to whatever character/vehicle you specified in the KMT, and you will have a time limit (which you will also need to specify). There do not seem to be any modes in Mission Mode that do not feature a time limit, so it is not possible to remove that.
 
If you can extract the U8 archive out of a tournament, you can in most cases convert it to work with Mission Mode. Save the extracted U8 archive as a Mission Run file (mrxx.szs) for the Race/MissionRun folder (where xx is the number you define in the KMT scenario), open any and all CommonObj files that the tournament usually requires and copy their internal files into the Mission Run file, then set up the KMT with the correct objective, and correct file ID and add mrxx.szs to the filesystem. You will then be able to play the tournament in Mission Mode, though you will be restricted to whatever character/vehicle you specified in the KMT, and you will have a time limit (which you will also need to specify). There do not seem to be any modes in Mission Mode that do not feature a time limit, so it is not possible to remove that.
 +
 +
[[Category:Game Mode]]

Revision as of 12:39, 17 August 2017

Mission Mode is an unused, incomplete game mode present in Mario Kart Wii. It seems to have been intended to function very similarly to Mario Kart DS's Mission Mode, but was ultimately cancelled before completion and hidden away. It is likely that Competition/Tournament Mode, which shares many similarities with Mission Mode, became its replacement. The leftover code and screens of Mission Mode were discovered by MrBean35000vr on August 3rd, 2017, over 9 years after Mario Kart Wii's release date.

What Still Exists

Because Mission Mode was cancelled from the game and was never intended to be accessed, it is missing a lot of data that it's supposed to have in order to work properly. However, most code elements do still exist and can be accessed via cheat codes. The menu screens that allow a user to pick a level, view the level objective and start the game all still exist, albeit with no text. The gameplay mode itself still exists, meaning that it is possible to play the mode and fulfill various objectives, although the game doesn't seem to have a concept of failing, if you fail your objective, the game acts as though you have won anyway. However, the scenarios that Nintendo created for the mode do not exist anymore, meaning that although we can test out the objectives, we do not know how Nintendo would have originally used them and there are no leftover complete missions available in the game filesystem. However, based on certain similarities between game modes present in Mission Mode and Competition/Tournament Mode, it's very possible that some of the missing scenarios were remade as tournaments.

A look through the menus and some of the objectives can be seen in the following video:

Mission Mode Discovery Video

Gameplay and Features

Had it been completed, Mission Mode would have put the player through a series of 64 challenges with increasing difficulty, where in each the player would have been required to perform a certain objective within a time limit. The player is not given any choice of what character or vehicle they wish to use, and the nature of the objective would vary depending on the level selected. Furthermore, the game could restrict what drift mode you were allowed to use (Automatic/Manual) or let you choose. This is the only game mode in Mario Kart Wii where a player may not have free choice over what drift mode they can select, a concept not applied anywhere else in the game. At the end of each level, the player would be awarded a rank based on how well they performed (3 stars, 2 stars, 1 star, A, B, etc) and this would be displayed next to the level name in the menu.

Objectives

The known objectives are as follows:

Game Modes
ID Objective
0x00 Release miniturbos to score points.
0x01 VS Mode. Complete 3 laps before time runs out.
0x02 VS Mode. Complete 3 laps before time runs out. (Seems identical to mode 0x01).
0x03 Perform any drift to score. (Faulty, increments score too quickly)
0x04 Break item boxes to score points.
0x05 Hit enemies with items to score points.
0x06 Attack a boss to score points. (E.g. Spiky Topmen, Big Pokey, etc)
0x07 Unknown. (Most likely unused or deleted. No references are found to this mode in the game's code).
0x08 Gather coins to score points.
0x09 Drive through gates to score points.
0x0A Perform any level of boost start to immediately win the mission. (If you miss the boost start, you can no longer win, at all).
0x0B Hit CPU opponents with certain items to score points. (All projectiles. Stars, Mushrooms, Mega Mushrooms and Bullet Bills do not score).
0x0C Perform wheelies to score. (Faulty, increments score too quickly, increments for wheelies on the spot).
0x0D Get slipstreams from CPU opponents to score points.

Tutorials

In addition to these game modes, the interface for Mission Mode also has a set of screens for tutorials on how to play the game. In certain missions, before starting, you are given the ability to view a tutorial on a gameplay mechanic. This would have taken you to a screen featuring a simple text entry, and a movie clip demonstrating what to do. These tutorials do not match up completely with the objectives shown above, indicating they were probably meant as supplementary information, rather than a direct guide on how to win your objective. While there is no text for the tutorials, and the movie clips are also not present in the game's filesystem, the names of the movie clips can be found in the game's memory, indicating what they would have been about.

Tutorials
Filename Estimation of Contents
00_curve.thp Steering without drifting (?)
01_drift.thp Manual Drifting
02_miniturbo.thp Obtaining miniturbos from Manual Drift
03_autodrift.thp Automatic Drifting
04_jumpaction.thp Performing tricks on ramps
05_halfpipejump.thp Performing tricks on halfpipe ramps
06_wheelie.thp Performing wheelies
07_spinturn.thp Turning on the spot (using A+B)
08_back.thp Reversing (?)
09_startdush.thp Getting a boost start in the countdown
10_jugemdush.thp Getting a boost start after respawning
11_slipstream.thp Getting a slipstream from another racer
12_itemthrow.thp Throwing/using items
13_itemequip.thp Dragging items behind you

The Missing Mission Objectives File

When accessing the leftover menus for Mission Mode, the game attempts to load information from a file called mission_single.kmt, which is supposed to reside in /Race/MissionRun/mission_single.kmt in the game filesystem. This file is not present and presumably permanently lost. Without it, Mission Mode crashes when you try to start a level because it cannot read this file. However, it is possible to get an idea of how it is supposed to work based on a surviving routine in the game's code that is designed to load and parse this file, and thus create a new one that allows the game to continue without crashing.

The file is meant to be a long list of 64 mission objectives, as well as listing supplementary files to load to build the game world. It would have been 0x1C10 bytes long. The first 0x10 bytes are a header of unknown properties, but it doesn't matter what is written in there as it is not checked or validated by the game.

Following on from that, there are a series of 0x70 length entries, one for each level (thus 0x40 in total), starting with 1-1, then moving to 1-2, etc. The game offsets into the file based on which level you select at the menu (0x70 * level number + 0x10), and loads data from there.

The format for these entries is as follows:

KMT Scenario Entry
Offset Size Usage
0x00 UInt16 Mission Run file (mrxxxxx.szs, see below)
0x02 UInt16 Game Mode (see above)
0x04 UInt8 Course ID
0x05 UInt8 Character ID
0x06 UInt8 Vehicle ID
0x07 UInt8 Engine class (0 = 50cc, 1 = 100cc, 2 = 150cc)
0x08 UInt32 Unknown
0x0C UInt32 Unknown
0x10 UInt8 Unknown
0x11 UInt8 Unknown
0x12 UInt8 Unknown
0x13 UInt8 Unknown
0x14 UInt8 Unknown
0x15 UInt8 Unknown
0x16 UInt8 Unknown
0x17 UInt8 Unknown
0x18 UInt8 Unknown
0x19 UInt8 Unknown
0x1A UInt8 Unknown
0x1B UInt8 Unknown
0x1C UInt32 Unknown
0x20 UInt8 Unknown
0x21 UInt8 Unknown
0x22 UInt8 Unknown
0x23 UInt8 Unknown
0x24 UInt8 Unknown
0x25 UInt8 Unknown
0x26 UInt8 Unknown
0x27 UInt8 Unknown
0x28 UInt8 Unknown
0x29 UInt8 Unknown
0x2A UInt8 Unknown
0x2B UInt8 Unknown
0x2C UInt16 Time limit (seconds)
0x2E UInt8 Unknown
0x2F UInt8 Unknown
0x30 UInt32 Score required
0x34 UInt32 Unknown
0x38 UInt32 Unknown
0x3C UInt32 Unknown
0x40 UInt32 Unknown
0x44 UInt32 Unknown
0x48 UInt16 Unknown
0x4A UInt16 Unknown
0x4C UInt16 Unknown
0x4E UInt16 Unknown
0x50 UInt16 Unknown
0x52 UInt16 Unknown
0x54 UInt32 Unknown
0x58 UInt16 Unknown
0x5A UInt8 Unknown
0x5B UInt8 Unknown
0x5C UInt8 Unknown
0x5D UInt8 Unknown
0x5E UInt8 Unknown
0x5F UInt8 Unknown
0x60 UInt8 Unknown
0x61 UInt8 Unknown
0x62 UInt8 Unknown
0x63 UInt8 Unknown
0x64 UInt8 Unknown
0x65 UInt8 Unknown
0x66 UInt8 Unknown
0x67 UInt8 Unknown
0x68 UInt8 Unknown
0x69 UInt8 Unknown
0x6A UInt8 Unknown
0x6B UInt8 Unknown
0x6C UInt8 Unknown
0x6D UInt8 Unknown
0x6E UInt8 Unknown
0x6F UInt8 Unknown

The "Mission Run" file listed at 0x00 into the entry is a supplementary file to load from the disc, and it can contain things such as alternate KMP files, additional models to load, etc. The number entered is converted to decimal, then appended to the string "mr", and finally ".szs" is appended. If the number is less than ten, one leading zero is added. The game will then seek the file in /Race/MissionRun'. So, for example, if it were set to 0x0000, the game will try to load mr00.szs. If set to 0x000F, it would load mr15.szs, etc. If it fails to find the file, the mode will still load, but no file replacements will occur.

It is also worth noting that the drift restrictions and tutorial suggestions are not inside of this file, they seem to be somewhere else. It is also not possible to define any CPUs to load, which makes fulfilling some mission objectives completely impossible. However, it is possible to add CPUs via cheat codes, which then allows the objectives to be fulfilled.

Accessing Mission Mode

It is not possible to access Mission Mode ordinarily, so in order to access it, you need to use a cheat code. At present, only PAL cheat codes exist. Other regions will be posted as they become available.

Playing the Mode

There are two distinct cheat codes available to load and play Mission Mode. The first one is designed so that you do not need to create mission_single.kmt, and allows you to test a KMT entry by entering it directly into the cheat code. In this case, every single level will load the scenario entered in the cheat code. The second one assumes that you have created mission_single.kmt and therefore does not allow you to enter scenario data into the code; however you can run many different levels in one session because you can select from the level list to load different scenarios. You cannot run both at once.

Please be aware that completing missions may damage your save file. It may attempt to overwrite non-existent mission leaderboards. If in doubt, use a backup!

Mission Mode and KMT Patch [PAL]


Mission Mode without KMT Patch [PAL]


In both cases, to activate the code, load the Single Player menu, and then press START or +, depending on your controller. The Mission Mode Menu will pop up after a brief delay.

Other Useful Codes

These are some other codes that may be useful when testing Mission Mode, and allow greater functionality of the mode.

The following code allows CPUs to be loaded in Mission Mode:

CPUs in Mission Mode [PAL]


The following code prevents the game from crashing if a track does not have valid MSPT entries:

MSPT Antifreeze [PAL]


The following code replaces the missing text in Mission Mode with text IDs, allowing you to see where text normally renders:

Mission Text ID Labels [PAL]


All codes were created by MrBean35000vr.

Porting Tournaments/Competitions to Mission Mode

If you can extract the U8 archive out of a tournament, you can in most cases convert it to work with Mission Mode. Save the extracted U8 archive as a Mission Run file (mrxx.szs) for the Race/MissionRun folder (where xx is the number you define in the KMT scenario), open any and all CommonObj files that the tournament usually requires and copy their internal files into the Mission Run file, then set up the KMT with the correct objective, and correct file ID and add mrxx.szs to the filesystem. You will then be able to play the tournament in Mission Mode, though you will be restricted to whatever character/vehicle you specified in the KMT, and you will have a time limit (which you will also need to specify). There do not seem to be any modes in Mission Mode that do not feature a time limit, so it is not possible to remove that.