Custom Game Modes
Overview
The game allows to import custom scenarios and custom scenario presets as json files. This uses file manipulation inside the game folder, you can access it by for example clicking the 'Show Folder' button in the 'Play' menu and going in the parent folder of the folder that just opened.
You can open json files like regular text files or you can use an editor that supports editing them.
To make custom content, you can take and edit what's already in-game. To do that, open the console in-game by pressing F1, then type debug.export-game-data. In the previously mentioned game folder, a new folder should have been created called basedata- followed by a number. In that folder, you can find the json files for the content already in-game.
Custom Scenarios
Custom scenario files must be put in the custom-scenarios folder in the game folder. The in-game scenario files are in the scenarios folder of the exported data folder.
Main Object Format
FormatVersionnumber: The format version of the file, currently2. Note : due to the game checking the format version in the raw json string, this value needs to be specified exactly as"FormatVersion": 2,, i.e. with a space after the:GameVersionnumber: The game version number this scenario was made for. Currently doesn't have any impact.UniqueIdstring: The ID used by the game to indentify the scenario, so it has to be unique, it also means the scenario file name doesn't matter.IsTutorialbool (default:false): Indicates if the scenario is a tutorial scenario.SupportedGameModesarray: An array of strings indicating the game modes supported by this scenario, currently only"RegularGameMode"is used.NextScenariosarray: An array of strings of scenario IDs that can be selected after completing the current scenario. Empty array to indicate none.ExampleShapesarray: An array of strings of shape codes indicating shapes that will be displayed as example shapes in the scenario selection screens.Titlestring: The scenario's title.Descriptionstring: The scenario's description.PreviewImageIdstring: The ID of the image that will show in the background in the scenario selection screens.ResearchConfigobject: An object containing configuration data for the scenario with the following keys:BaseChunkLimitMultipliernumber (Percentage): Multiplies the platform limit rewards.BaseBlueprintRewardMultipliernumber (Percentage): Multiplies the blueprint points rewards.MaxShapeLayersnumber: Determines the maximum number of layers shapes can have.InitialResearchPointsnumber (default:0): Controls the number of research points given when starting a save with the scenario. Will be added to any research points rewards given by initially unlocked milestones and tasks.ShapesConfigurationIdstring: Determines which types of shapes the scenario uses,DefaultShapesQuadConfigurationfor quad shapes andDefaultShapesHexagonalConfigurationfor hex shapes.ColorSchemeConfigurationIdstring: TBD, currentlyDefaultColorSchemeRGBFlex.ResearchLevelsAreProgressivebool:true: Classic display of milestone shapes.false: Display milestone shapes on one line and without arrows in between.BlueprintCurrencyShapesarray: An array indicating the shapes that will give blueprint points, each element is an object with the following keys:Shapestring: The shape code of the shape.RequiredUpgradeIdsarray: An array of upgrade IDs required to unlock that shape.RequiredMechanicIdsarray: An array of mechanic IDs required to unlock that shape.Amountnumber: The amount of blueprint points given when delivering that shape.
IntroductionWikiEntryIdstring: The ID of the knowledge panel entry that should be displayed when starting a save with this scenario.InitiallyUnlockedUpgradesarray: An array of strings of upgrade IDs that should be unlocked when starting a save with this scenario.TutorialConfigstring: What tutorial to use, currentlyTCMainTutorialfor the tutorial andTCNoTutorialfor no tutorial.
Progressionobject: What is included in the research screens, it has the following keys:Levelsobject: It has the following keys:Levelsarray: An array of milestones, each element is an object with the following keys:Definitionobject: Information about the milestone, it has the following keys:Idstring: The milestone's ID.VideoIdstring: The ID of the video that will show when unlocking the milestone.PreviewImageIdstring: The ID of the image that will show in the milestones screen.Titlestring: The milestone's title.Descriptionstring: The milestone's description.WikiEntryIdstring/null (default:null): The knowledge panel entry that will be opened when clicking the 'more information' button in the unlock screen.
Linesobject: It has the following keys:Linesarray: An array of the shape lines required to unlock the milestone, each element is an object with the following keys:ReusedAtNextMilestonebool (default:false): Istrueif the final shape is reused in the next milestone.ReusedAtNextMilestoneOffsetnumber (default:0): No effect currently.ReusedAtSameMilestonebool (default:false): Istrueif the final shape is resued in another line of the milestone.ReusedAtSameMilestoneOffsetnumber (default:0): Indicates in which line it is reused, -1 for above and 1 for below.ReusedForPlayerLevelbool (default:false): Istrueif the final shape is reused in the operator level screen.StartingOffsetnumber (default:0): Indicates by how many shapes the line should be pushed to the right when rendered in the milestones screen.Shapesarray: An array of shapes contained in the line, each element is an object with the following keys:Shapestring: The shape code.Amountnumber: The amount required.
Rewardsobject: It has the following keys:Rewardsarray: An array of rewards objects.
SideQuestGroupsobject: It has the following keys:SideQuestGroupsarray: An array of tasks, each element is an object with the following keys:Titlestring: The task line's title.RequiredUpgradeIdsarray: An array of strings of required upgrade IDs to unlock that task line.RequiredMechanicIdsarray: An array of strings of required mechanic IDs to unlock that task line.SideQuestsarray: An array of tasks in the line, each element is an object with the following keys:Idstring: The task's ID.IsFollowupForLevelbool (default:false): No effect currently.Rewardsarray: An array of rewards objects.Costsarray: An array of costs for the task, each element is an object with the following keys:Shapestring: The shape code.Amountnumber: The amount required.
SideUpgradesobject: It has the following keys:UpgradeCategoriesarray: An array of strings of category IDs indicating which categories the upgrades will be grouped into.SideUpgradesarray: An array of unlockable upgrades, each element is an object with the following keys:Idstring: The upgrade's ID.PreviewImageIdstring: The ID of the image that will show in the upgrades screen.VideoIdstring/null (default:null): TBD.Titlestring: The upgrade's title.Descriptionstring: The upgrade's description.Hiddenbool (default:false): Istrueif the upgrade is hidden in the upgrades screen and requires cheats to unlock.Categorystring: The category ID in which this upgrade should be displayed.RequiredUpgradeIdsarray: An array of strings of required upgrade IDs to unlock that upgrade.RequiredMechanicIdsarray: An array of strings of required mechanic IDs to unlock that upgrade.Rewardsarray: An array of rewards objects.Costsarray: An array of costs objects.
LinearUpgradesobject: It has the following keys:ConverterHubOutputCountUpgradeIdstring/null (default:null): TBD.HubInputSizeUpgradeIdstring: The ID of the upgrade to increase the number of vortex inputs.ShapeQuantityUpgradeIdstring: The ID of the upgrade to multiply delivered shapes.SpeedsToLinearUpgradeMappingsobject: A mapping for which upgrade ID controls which upgradeable value, it has the following keys:BeltSpeedstringCutterSpeedstringStackerSpeedstringPainterSpeedstringTrainSpeedstringTrainCapacitystring
LinearUpgradesarray: An array of upagrades with levels, like speed upgrades, each element is an object with the following keys:Idstring: The upgrade's ID.Titlestring: The upgrade's title.DisplayTypenumber: Indicates how the value of each level should be displayed :1: A speed,2: A percentage,3: The number as is,4: The number divided by 100.Levelsarray: An array of levels for the upgrade, each element is an object with the following keys:Valuenumber: The value of the level, displayed according toDisplayType.Costobject/null (default:null): A costs object,nullfor the first level.
RequiredUpgradeIdsarray: An array of strings of required upgrade IDs to unlock that upgrade.RequiredMechanicIdsarray: An array of strings of required mechanic IDs to unlock that upgrade.Categorystring: The category ID in which this upgrade should be displayed.
StartingLocationobject: Configuration for the starting area, it has the following keys:InitialViewportobject: Configuration about the camera's starting position, it has the following keys:PositionXnumber (default:0): The X position.PositionYnumber (default:0): The Y position.Zoomnumber (default:0): The zoom.RotationDegreesnumber (default:0): The rotation.Anglenumber (default:0): The angle.BuildingLayernumber (default:0): The building floor.IslandLayernumber (default:0): The platform floor.ShowAllBuildingLayersbool: Wether or not to have all building floors visible.ShowAllIslandLayersbool: Wether or not to have all platform floors visible.
InitialIslandsobject: It has the following keys:InitialIslandsarray: An array of initially placed platforms, each element is an object with the following keys:Position_GCobject: Position of the platform with the following keys:xnumber (default:0): The X position.ynumber (default:0): The Y position.znumber (default:0): The Z position.
Rotationnumber (default0): The platform's rotation.LayoutIdstring: The type of platform.
FixedPatchesobject: It has the following keys:FixedPatchesarray: An array of shape patches whose exact position is predetermined, each element is an object with the following keys:Shapestring: The shape code of the shape.Position_LCobject: Position of the patch's origin with the following keys:xnumber (default:0): The X position.ynumber (default:0): The Y position.znumber (default:0): The Z position.
LocalTilesarray: An array of each individual tile of the patch, each element is an object with the following keys:xnumber (default:0): The X offset from the origin.ynumber (default:0): The Y offset.znumber (default:0): The Z offset.
StartingChunksobject: It has the following keys:StartingChunksarray: An array of shape and fluid patches which must generate in each sector, but the position inside that sector is random, each element is an object with the following keys:SuperChunkobject/null (default:null): Position of the super chunk concerned with the following keys (can benullif both coordinates are0):xnumber (default:0): The X position.ynumber (default:0): The Y position.
GuaranteedShapePatchesarray: An array of strings of shape codes.GuaranteedColorPatchesarray: An array of strings of color codes.
PlayerLevelConfigobject: An object containing configuration data for the operator level screen with the following keys:IconicLevelShapesobject: It has the following keys:LevelShapesarray: An array of strings of shape codes indicating the operator level shape badges.
IconicLevelShapeIntervalnumber: Indicates the number of levels each shape badge should last, for example1would change the badge every level, and5would change every 5 levels.GoalLinesarray: An array of operator goal lines, each element is an object with the following keys:Idstring: The ID of the goal line.Randomizedbool (default:false): Istrueif the goal line should be randomized.RandomizedUseCrystalsbool (default:false): Istrueif the goal line is randomized and should use crystals.Shapestring/null (default:null): The shape code if it's not randomized.StartingAmountnumber: How much shapes should be required at the first level.ExponentialGrowthPercentPerLevelnumber: How much each level will increase the number of shapes required.RequiredUpgradeIdsarray: An array of strings of required upgrade IDs to unlock that goal line.RequiredMechanicIdsarray: An array of strings of required mechanic IDs to unlock that goal line.
Rewardsarray: An array of rewards for advancing one operator level, each element is an object with the following keys:MinimumLevelnumber (default:0): Indicates starting at which operator level these rewards should be given. The rewards of other objects in the array are ignored if they have a lowerMinimumLevel.Rewardsarray: An array of rewards objects.
Mechanicsobject: It has the following keys:Mechanicsarray: An array of mechanics unlocked throughout the progression (layers, blueprints, platforms, fluids, trains, etc), each element is an object with the following keys:Idstring: The mechanic's ID.Titlestring: The mechanic's title.Descriptionstring: The mechanic's description.IconIdstring: The ID of the mechanic's icon.
BuildingLayerMechanicIdsarray: An array of strings of mechanic IDs for the building floor mechanics.IslandLayerMechanicIdsarray: An array of strings of mechanic IDs for the platform floor mechanics.IslandLayersUnlockOrderarray: An array of numbers representing the order in which each platform floor index should unlock.BlueprintsMechanicIdstring: The mechanic ID for unlocking blueprints.RailsMechanicIdstring: The mechanic ID for unlocking trains.IslandManagementMechanicIdstring: The mechanic ID for unlocking platform building.PlayerLevelMechanicIdstring: The mechanic ID for unlocking the operator level screen.TrainHubDeliveryMechanicIdstring: The mechanic ID for unlocking throwing trains into the vortex.
ConvertersConfigobject: It has the following keys:Configsobject: TBD.
ResearchStationConfigobject: It has the following keys:Recipesobject: TBD.
RailColorsConfigobject: It has the following keys:RailColorsarray: An array of configuration for the rail colors, each element is an object with the following keys:Idobject: It has the following keys:RailColorIdstring: The ID of the rail color to configure the displayed color.
Tintstring: The color in hexadecimal format.
ToolbarConfigobject: Configuration for the toolbar. Due to a current game issue, this has to be set to"#include_raw:Scenarios/Shared/Toolbar/ToolbarConfig"for some custom scenarios to load in-game. Otherwise, the object has the following keys:ToolbarDataJsonstring: A string of JSON encoded toolbar data.
Rewards Object Format
$typestring: The type of reward, can beBuildingReward,IslandGroupReward,MechanicReward,WikiEntryReward,BlueprintCurrencyReward,ChunkLimitReward, orResearchPointsReward.BuildingDefinitionGroupIdstring/null (default:null): The building variant ID if it's a building reward.GroupIdstring/null (default:null): The platform group ID if it's a platform group reward.MechanicIdstring/null (default:null): The mechanic ID if it's a mechanic reward.EntryIdstring/null (default:null): The entry ID if it's a knowledge panel entry reward.Amountnumber/null (default:null): The amount if it's a blueprint points, platform limit, or research points reward.
Costs Object Format
$typestring: The type of cost, can only beResearchPointsCost.Amountnumber: The amount of research points required.
Custom Scenario Presets
Custom scenario preset files must be put in the custom-scenario-parameter-presets folder in the game folder. The in-game scenario preset files are in the scenario-parameter-presets folder of the exported data folder.
Main Object Format
Versionstring: The format version as a string, currently"1".UniqueIdstring: The ID used by the game to indentify the scenario preset, so it has to be unique, it also means the scenario preset file name doesn't matter.Titlestring: The scenario preset's title.Descriptionstring: The scenario preset's description.Parametersobject: The actual data of the scenario preset, it has the following keys:MapGenerationParametersobject: The configuration of the map generation settings, it has the following keys:FluidsSpawnPrimaryColorsbool: Wether or not to spawn fluid patches of the primary colors.FluidsSpawnSecondaryColorsbool: Wether or not to spawn fluid patches of the secondary colors.FluidsSpawnTertiaryColorsbool: Wether or not to spawn fluid patches of the tertiary colors.FluidPatchLikelinessPercentnumber: The likeliness of fluid patches as a percentage.FluidPatchBaseSizenumber: The base size of fluid patches.FluidPatchSizeGrowPercentPerChunknumber: How much fluid patches should grow per chunk as a percentage.FluidPatchMaxSizenumber: The maximum size of fluid patches.ShapePatchLikelinessPercentnumber: The likeliness of shape patches as a percentage.ShapePatchBaseSizenumber: The base size of shape patches.ShapePatchSizeGrowPercentPerChunknumber: How much shape patches should grow per chunk as a percentage.ShapePatchMaxSizenumber: The maximum size of shape patches.ShapePatchShapeColorfulnessPercentnumber: The colorfulness of shape patches as a percentage.ShapePatchRareShapeLikelinessPercentnumber: The likeliness of rare shapes in shape patches as a percentage.ShapePatchVeryRareShapeLikelinessPercentnumber: The likeliness of very rare shapes in shape patches as a percentage.ShapePatchGenerationLikelinessarray: An array of generation settings for each type of shape patch, each element is an object with the following keys:GenerationTypestring: The type of generation this object affects.MinimumDistanceToOriginnumber: The minimum distance from the center of the map for this type of shape patch to generate.LikelinessPerMillenumber: The likeliness of this type of shape patch.
GameRuleParametersobject: The configuration of the game rules, it has the following keys:RuleIdsarray: An array of strings of game rule IDs that should be enabled.
ScenarioIdstring: The ID of the scenario this scenario preset should use.
Custom Difficulty Presets
The game currently doesn't support loading custom difficulty presets as json files, however you can still find the in-game ones in the difficulty-presets folder of the exported data folder.
Main Object Format
Versionstring: The format version as a string, currently"1".UniqueIdstring: The ID used by the game to indentify the difficulty preset.Titlestring: The difficulty preset's title.Parametersobject: The actual data of the difficulty preset, it has the following keys:ResearchShapeCostMultipliernumber: The Goal Multiplier as a percentage.ChunkLimitMultipliernumber: The Platform Limit multiplier as a percentage.BlueprintCostMultipliernumber: The Copy/Paste Cost multiplier as a percentage.