Custom Modes

From Zero-K
Revision as of 10:49, 9 January 2022 by RandomX (talk | contribs)
Jump to navigation Jump to search

Custom modes are mods, maps, or just a set of Adv Options that can be selected when hosting the game or in the battle room via 'Select Custom Mode' in Adv Options. Each custom mode is defined by a file in Zero-K/CustomModes. The game deploys a few of these files, but players can also create their own and share them around to act as presets.

This system can be used to save and share disabled lists and Quick Stat Tweaks to create new game modes without going through the work of full modding.

Specification

Custom modes are json files and may have the following parameters.

Key Usage
shortName A unique name identifying the custom mode. Do not change it when making an update, or else duplicate files for old versions will be created. Must match the file name of the mode when uploaded.
name This is required to display the mode in the mode list. Bad things will happen if there is a clash. Add a version number to the end of this name and increment it upon each update.
description The tooltip for the mode in the 'Select Custom Mode' menu.
roomType Optional. Can be Custom, 1v1, Team, FFA, Chicken.
map Optional. Use this to set the map. The text must match exactly, as is written below the minimap in the battle room.
game Optional. Set a mutator or game. It should match game name exactly, as is shown left of the map when the game is selected.
rapidTag Optional. Set a rapid tag. Modes that use base Zero-K should set this to "zk:stable".
hideFromHostMenu Optional boolean. This is used to hide a mode from the Game Type menu while hosting.
options Optional table of Adv Option values. All the keys can be found in the file ModOptions.lua.

Example

Here is an example that would run Zero Wars with a 2× health multiplier.

{
    "shortName": "zw_hp_tweak",
    "name" : "Zero Wars with Tweaks v1.0",
    "description" : "Send waves of units across the map to destroy the enemy nexus",
    "roomType" : "Team",
    "map" : "ZeroWars v2.0.7",
    "rapidTag" : "zk:stable",
    "options" : {
        "hpmult" : 2
    }
}

Be careful with the commas in JSON, as they need to be placed after all but the last item in the set.