Custom Missions

From MK7
Revision as of 17:57, 27 September 2021 by PabloMK7 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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).