Custom Missions
Custom Missions is a feature available in the CTGP-7 modpack that allows loading extra missions for the Mission Mode via the MyStuff folder.
Custom missions are loaded by placing them in the MyStuff/Missions
folder. Each mission should be placed in a subfolder with the name cup-level
where cup
is the cup number and level
is the course number inside the cup. Inside the subfolder, the files settings.cmsn
, data.sarc
and replacement.sarc
can be placed.
settings.cmsn
This file contains all the configuration for the mission, and can be generated using the CTGP-7 EveryFileExplorer plugin. After installing the plugin, new files can be created through File -> New -> CTGP-7 Plugin -> Custom Mission
, or existing files can be opened through File -> Open...
.
The configuration file is divided in the following sections.
Settings
This section holds general settings for the mission.
Field | Description |
---|---|
General | |
Course | Course for the mission. |
Class | CC for the mission. |
Laps | Amount of laps for the mission. |
CPU | CPU difficulty. |
Mission Type and Subtype | Base mission rules, more information below. |
Calculation | What to use to calculate the player grade. |
Conditions | Special conditions to succeed the mission, more information below. |
Timer Configuration | |
Timer Initial Value | The initial value of the timer when the race starts. |
Timer Direction | Whether the timer counts up or down. |
Timer Finish Race | Automatically finish the race when the timer reaches the value. |
Timer Min Grade Timer Max Grade |
Determines the player grade based on the timer value when finishing the race. |
Score Configuration | |
Timer Score Value | The initial value of the score counter when the race starts. |
Yellow Score | The score counter will turn yellow once this value is reached. |
Score Direction | Whether the score counts up or down. |
Score Finish Race | Automatically finish the race when the score reaches the value. |
Score Min Grade Score Max Grade |
Determines the player grade based on the score value when finishing the race. |
Flags | |
Rank Visible | Enabled the position indicator in the top screen. |
Lakitu Visible | Enables Lakitu showing up when going on reverse or crossing the finish line. |
Play Course Intro | Enables playing the course intro cameras. |
Hide Score | Hides the score counter on the top screen. |
Score Is Bad | Determines if getting a point is a good or bad thing, changing the ingame sound for when that happens. |
Force Backwards | Forces the user to drive backwards by activating the backwards camera and disabling the A and Y buttons. |
Finish Race Section 2 | If the lap amount is 1, makes the game finish the race once the section 2 checkpoint is reached. |
Coin Respawn Time | Changes the amount of time coins take to respawn. By default, they respawn every 5 seconds. |
Mission Types
Depending on the mission type, the behavior of the race will be different. The following mission types are available.
Type | Description |
---|---|
Timer | No special behavior or rules. |
Gates | A point is given when the player goes through a gate. The subtype value Order only gives a point when going through the gates in order, while the subtype value All always gives a point.
|
Object | A point is given every time an object determined by the subtype field is "destroyed" or "obtained". |
Boost | A point is given every time the player obtains a boost from the action determined by the subtype field. |
Mission Complete Conditions
If mission complete conditions are set, all of them will need to be met in order to succeed the mission.
Condition | Description |
---|---|
Yellow score reached | Can only be used if the score configuration is enabled. The yellow score needs to be reached. |
Yellow score not reached | Can only be used if the score configuration is enabled. The yellow score must not be reached. The race will end as soon as this condition can no longer be satisfied. |
Player finishes 1st | The player needs to finish the race in 1st position. The race will end as soon as this condition can no longer be satisfied. |
CPU 1 finishes 1st | The first CPU racer needs to finish the race in 1st position. The race will end as soon as this condition can no longer be satisfied. |
Drivers
This section determines the drivers that will appear in the race.
You can choose the amount of drivers as well as their kart combinations. If driver is set to recommended, the game will decide automatically (based on some internal rival tables).
Items
This section determines how items will act in the race.
You can use any of the preset item modes of the game, or set a custom item mode. Furthermore, you can configure the amount of time item boxes take to respawn (2 seconds by default).
If the item mode is set to custom, the following options can be configured.
Field | Description |
---|---|
General | |
Spawn Item Boxes | Determines if item boxes spawn in the race. |
Player/CPU Specific | |
Mode | The mode to calculate which row from the probability table to use. More information below. |
Give Items | Gives an item automatically as if the driver obtained an item box. The interval of time between giving items and the initial time to wait can be configured. |
Disable Cooldown | Disables the cooldown some items have, such as lightnings or blue shells, and allows getting items of a type which their limits have already been reached (previous items of the same type will vanish if the limit has been reached reached and a new one is spawned). |
Roulette Speed | Changes the amount of time the item roulette will spin before deciding the item (3 seconds by default). |
Probability Table | This table determines the chances for getting a specific item. The row is determined by the Mode field. Once the row is decided, the final item to be given is determined by the probability values from that row. The probability algorithm used is weighted probability (for example: a single column with value 100 means that item has a 100% chance of appearing and two columns with value 100 means each item has a 50% chance of appearing).
|
Probability Row Mode
The row used to calculate the item probabilities is determined by the Mode
field, which can take the following values.
Mode | Description |
---|---|
Box ID | The row is determined by the item box ID (settings5 in the KMP object entry). If this mode is used and the item box ID is set to 0, undefined behavior will happen. |
Rank | The row is determined by the driver position. If the driver amount is less than 8, the row is calculated proportionally to the player amount (for example: in a 2 driver race, getting an item in 2nd place may give you items from the rows 4 to 8). |
True Rank | The row is determined by the driver position. Unlike Rank mode, the driver amount has no effect on which row is selected.
|
Driver ID | The row is determined by the driver ID. |
Text
This section holds the different text entries related to the mission. You can set entries for each language found in the MyStuff/Languages
folder, the entry ENG
being mandatory.
The following text fields are available:
Text | Description |
---|---|
Code | The language entry code. Should match the language codes found in MyStuff/Languages .
|
Title | The title of the mission. Will display in several places, including the mission selection screen. This field must not be too long, as it may not fit in the spots reserved for it ingame. |
Description | The mission description, displayed in the mission selection screen. You can use different formatting options, such as bold or font color. Try to mimic the style Nintendo used for describing missions in Mario Kart DS. |
Info
This section has generic information for the mission file, such as the mission unique identifier. It is also possible to reset the mission save data from this section.
data.sarc and replacement.sarc
These two optional archives are SARC files that can be edited directly with EveryFileExplorer. The purpose of this archives is to hold files that will replace the ones found in the target course SZS
file. For example, if the file Gctr_ToadCircuit.kmp
needs special edits for the mission, it can be placed inside data.sarc
to replace the one found in the course SZS
.
NOTE: Keep in mind that file names are not stored inside SARC/SZS
archives, instead a hash of the name is stored (0xXXXXXXXX
, where every X
is a hexadecimal number). If such hash happens to be listed in the file name database of EveryFileExplorer, the file name will be displayed, otherwise, the hash will be displayed.
In the case of data.sarc, the archive can only hold a maximum of 300KB of data. If the archive is bigger than that, it will fail loading. However, you can place any files inside which are bigger in size than the original files found in the course SZS
, and even new files that are not present there (as long as the total size is kept under the limits). Moreover, the following files can be placed in this archive to use some custom mission features.
File | Description |
---|---|
score_icon.bclim |
Replaces the icon next to the score counter. |
itemBox/itemBox.bcmdl |
Replaces the item box model. |
Coin_detail/Coin_detail.bcmdl Coin_lod/Coin_lod.bcmdl |
Replace the coin high and low detail models. |
coin_sound.bcwav |
Replaces the sound effect when collecting a coin. |
In the case of replacement.sarc, the archive can hold any amount of data. However, the individual files inside it should be smaller or equal in size than the original files found in the course SZS
. New files that aren't present in the course SZS
cannot be added.
preview.bcstm
This file can be used to replace the course preview music. It has to be a 2 channel BCSTM file at 32728Hz. If this file is not present, the normal Grand Prix course preview music will play.
music.ini
This file controls the music that will play during the race. It has the same format as the MyStuff MusicSlotsUser.ini file. The actual BCSTM files need to be placed in the mission's own folder and not in the MyStuff stream
folder. If this file is not present, the configuration in the other .ini files will be used instead (normally, this is the course original music).
Custom Objects
Several course objects have been repurposed in order to bring extra behavior to mission mode.
Gate
Replaces the Music Glider Ramp object (ID 0x1AA). As a result, such object needs to be removed from Music Park if a mission is done there, or unexpected results will happen. For this object to work properly, the custom files representing a gate MpBoard/MpBoard.bcmdl
and MpBoard/MpBoard.kcl
are needed in the data.sarc
file (you can grab them from an official mission file). In the kmp, you can specify each gate number by changing Settings3
of the Music Glider Ramp object (set to 0 if you don't want the gate to have a number). The numbers 1 to 10 are available.
Barrier
Replaces the Melting Ice Platform object (ID 0x1C). As a result, such object needs to be removed from Rosalina Ice World if a mission is done there, or unexpected results will happen. For this object to work properly, the custom files representing a barrier MeltIce/MeltIce.bcmdl
and MeltIce/MeltIce.kcl
are needed in the data.sarc file. Barriers are divided in 2 different types, the first type (Settings1
is 0) only has a visual model and no collision, while the second type (Settings1
is 1) only has collision and no visual model. The collision is a vertical plane situated at the origin and 1000 units wide. This value was chosen so you can use dummy Area points in the kmp editor to get an idea of how much to change the ScaleX
to cover the entire length you want. Due to a buggy implementation in Nintendo's collision system, multiple gate collision planes should not intersect (only use a single collision gate object even if you use multiple visual ones).