Making mods
New languages, card backs, backgrounds, music and pictures — or your own cards, commanders, bases, decks, scenarios and Expedition events. No programming: folders, pictures and a few JSON files.
A mod is a folder with a mod.json file and the files it changes or adds: texts, pictures, music, cards, commanders, bases, missions or events. You write mods in a text editor; you need no programming and no game engine. Players put the folder in the game's mods folder and switch it on in main menu → Mods.
This guide explains every file a mod can have, with all the values the game understands.
Contents: Quick start · What a mod can do · Where mods go · mod.json · Texts in several languages · Ids · Translations · Pictures · Music · Cards · Commanders · Bases · Changing the game's cards · Decks · Missions · Expedition events · Other texts · Testing and fixing a mod · Sharing a mod · The game's ids
Quick start
- Download the example mod (on the website: https://soldivided.eu/modding.html; in the game's source:
docs/modding/example_mod/). It has three cards, a token, a commander, a base, a ready deck, a mission, an Expedition event, a card back, pictures and a changed text. - Copy its folder, rename the folder (for example
my_mod) and change"id"inmod.jsonto the same name. - Change the files (any text editor; save as UTF-8). Delete the files you do not need.
- Put the folder in the game's
modsfolder: in the game, Mods → Open the folder. - In the game, Mods: tick your mod. The game asks to restart; changes to mods always need a restart.
- Open Mods again and click your mod: under Skipped the game lists everything it could not read, with the reason. Fix it, restart, look again.
What a mod can do
| A mod with … | Files | Online play |
|---|---|---|
| Fixes or a new language | translations/<language>.csv | ✅ stays on |
| Battle backgrounds | backgrounds/ | ✅ stays on |
| Music | music/ | ✅ stays on |
| Card backs | card_backs/ | ⛔ off |
| Pictures of cards, commanders, bases | card_art/ | ⛔ off |
| Ready decks | decks.json | ⛔ off |
| Missions (in the campaign's Mods tab) | scenarios.json | ⛔ off |
| Expedition events | events.json | ⛔ off |
| New cards and tokens | cards.json | ⛔ off, changes the rules |
| New commanders | commanders.json | ⛔ off, changes the rules |
| New bases | bases.json | ⛔ off, changes the rules |
| Changes to the game's cards | card_changes.json | ⛔ off, changes the rules |
- One mod can have any of these together. If it has anything from the ⛔ rows, the whole mod is offline only.
- Online play is off while an offline-only mod is on: the online buttons are grey and say which mod blocks them. The server plays every online battle itself with the game's own cards, and the other player would not see your pictures or backs anyway.
- Changes the rules: battles played while such a mod is on count as modded in the statistics.
- The campaign's rewards and enemies never use a mod's new cards. The tutorial always uses the game's own cards.
Where mods go
| System | Folder |
|---|---|
| Windows, Linux | mods next to the game (SolDivided.exe) |
| macOS (and everyone, as a second place) | mods in the game's data folder, where the saves are |
Mods → Open the folder in the game opens the right one. Each mod is one folder in it:
mods/
my_mod/
mod.json
icon.png
cards.json
card_art/
plasma_lancer.jpg
translations/
bg.csv
mod.json
Every mod needs it. Only id is required.
{
"id": "my_mod",
"name": {"en": "The Red Guard", "bg": "Червената гвардия"},
"author": "Your name",
"version": "1.0",
"description": {"en": "What it does, in a sentence or two.", "bg": "Какво прави."},
"replace_battle_music": false,
"language_name": "Español"
}
| Field | What it is |
|---|---|
id | 2–32 small Latin letters, digits or _ (my_mod, red_guard_2). Different from every other mod: two mods with one id cannot both load. It goes in front of the ids of your cards, decks and so on (see Ids). |
name | The name in the Mods screen. One text or a text per language. |
author, version | Shown in the Mods screen. |
description | A sentence or two in the Mods screen. |
replace_battle_music | true: in battles only your tracks play (see Music). |
language_name | The name of the new language your mod adds, as it shows in Settings (see Translations). |
icon.png next to mod.json (square, 128×128 is plenty) is the mod's picture in the Mods screen.
Texts in several languages
Every text in a mod's files (names, descriptions, briefings…) can be:
- one text for every language:
"name": "Plasma Lancer" - a text per language:
"name": {"en": "Plasma Lancer", "bg": "Плазмен копиеносец", "zh_CN": "等离子枪兵"}
The game's languages are en (English), bg (Bulgarian) and zh_CN (Simplified Chinese). A language your text does not have shows the first one you wrote.
Ids
- Your cards, tokens, commanders, bases, decks, missions and events get your mod's id in front:
plasma_lancerin the modred_guardbecomesred_guard_plasma_lancer. That is how two mods can both have a card calledlancer. - Inside your own mod, use the short id (
"summon": "guard_drone"). The long one works too. - To use something of the game (a card in a deck, a commander for an enemy), use its own id:
mars_stormtrooper,mercer,fortified_bunker. See The game's ids. - An id the game already has is not allowed: a mod called
marswith a cardstormtrooperwould bemars_stormtrooper, a card of the game, so that card is skipped. To change a card of the game, usecard_changes.json. - A mod's card backs and backgrounds are
mod_<mod id>_<file name>:card_backs/red.jpginmy_modismod_my_mod_red.
Translations — translations/<locale>.csv
A CSV file with two columns, key and text. The first line is the header:
key,text
UI_TAGLINE,The war for the Solar System
CARD_MARS_STORMTROOPER_NAME,Storm Trooper
UI_QUIT,"Quit, for now"
- The file name is the language:
en.csv,bg.csv,zh_CN.csv,es.csv,de.csv,pt_BR.csv, … - Fixing a language the game has (
en,bg,zh_CN): put in only the keys you change, even one. Every other text stays the game's. Players of that language see your texts after the restart, without choosing anything. - A new language (
es,de, …): it becomes a choice in Settings → Display → Language once the file has at least 200 texts."language_name"inmod.jsonis its name in the list. The player picks it there; a key you have not translated shows in English. - Two mods with the same key: the one lower in the Mods list wins.
- All the keys with the Bulgarian and English texts are in the translation template (columns
key,bg,en,text). The game also reads atextcolumn, so you can fill in that column and use the file as it is. - A text with a comma or a quote goes in quotes, and a quote inside is doubled:
"He said ""no""". - A new line inside a text:
\n. %sand%dare filled in by the game (a name, a number);%%is a percent sign. Keep the same ones in the same order.- Save as UTF-8 (with or without BOM). Windows line ends are fine.
Pictures
| Folder | What | Size |
|---|---|---|
card_backs/ | card backs: every player can pick them for a deck (Decks → Choose card back) | 832×1216 (portrait) |
backgrounds/ | battle backgrounds: Settings → Display → Background, or they come up at random | 1920×1080 or bigger |
card_art/<id>.jpg | the picture of a card or a token | 832×1216 (portrait) |
card_art/<id>.jpg | the picture of a commander or a base | 1216×832 (landscape) |
- PNG, JPG or WEBP. Keep the files reasonably small (a card picture as JPG is about 150 KB).
<id>is the short id of your card (card_art/plasma_lancer.jpg) or the id of the game's card, commander or base (card_art/mars_stormtrooper.jpg), whose picture it then replaces.- A card of your mod without a picture is drawn with a simple outline of the kind set in its
artfield (see Cards). - A file that is not a readable picture is listed under Skipped and left out.
Music
| File | When it plays |
|---|---|
music/menu.ogg | the main menu (instead of the game's) |
music/credits.ogg | the credits |
music/tension.ogg | a battle when a base is low on life |
music/battle/*.ogg | battles: your tracks join the random battle playlist |
- OGG Vorbis is best; MP3 works too.
- With
"replace_battle_music": trueinmod.jsononly your battle tracks play. - Tracks are played in a loop, so make the end fit the start.
Cards — cards.json
{"cards": [
{"id": "guard_drone", "token": true, "faction": "mars", "kind": "unit", "type": "ground",
"subtype": "drone", "cost": 1, "attack": 1, "health": 1, "art": "drone",
"name": {"en": "Guard Drone", "bg": "Охранителен дрон"}},
{"id": "plasma_lancer", "faction": "mars", "kind": "unit", "type": "ground", "subtype": "infantry",
"cost": 3, "attack": 3, "health": 2, "keywords": {"assault": 1},
"abilities": [{"trigger": "on_play", "target": "enemy_ground", "effects": [{"damage": 1}]}],
"name": {"en": "Plasma Lancer", "bg": "Плазмен копиеносец"},
"flavor": {"en": "\"Closer. Always closer.\""}},
{"id": "drone_nest", "faction": "mars", "kind": "unit", "type": "ground", "subtype": "station",
"cost": 4, "attack": 0, "health": 5, "no_attack": true,
"abilities": [{"trigger": "turn_start", "target": "none", "effects": [{"summon": "guard_drone"}]}],
"name": {"en": "Drone Nest"}},
{"id": "red_banner", "faction": "mars", "kind": "tactic", "cost": 2,
"abilities": [{"trigger": "on_play", "target": "all_friendly_units",
"effects": [{"buff": {"attack": 1, "this_turn": true}}]}],
"name": {"en": "Red Banner"}}
]}
| Field | Values | If left out |
|---|---|---|
id | the card's short id | required |
faction | mars, col (Belt colonies), earth, corp (corporations), neutral (fits every commander) | neutral |
kind | unit or tactic | unit |
type | ground or ship (units only) | ground |
subtype | a word that bonuses can name: infantry, engineers, android, vehicle, tank, mech, artillery, turret, drone, support, transport, station, fighter, bomber, corvette, frigate, gunship, destroyer, cruiser, battleship, carrier, flagship, … | none |
cost | 0–10 cores | 1 |
attack | 0–20 | 0 |
health | 1–30 | 1 |
keywords | {"armor": 1, "taunt": 1} or ["taunt", "haste"] (each with 1); see Keywords | none |
abilities | a list; see Abilities | none |
token | true: not in decks or the collection, only summoned by an ability | false |
no_attack | true: the unit never attacks (a station, a wall) | false |
art | the outline drawn when there is no picture: trooper, heavy, militia, hunter, aa, fighter, cruiser, drone, hauler, strike, cannon, mines | trooper |
name, flavor | the card's name and its line in italics | the id |
The card's rules text is written by the game from its keywords and abilities, in every language: you do not write it.
Keywords
| Keyword | In the game | What it does |
|---|---|---|
taunt | Guardian | Must be attacked first in its line. While it lives, the base cannot be attacked from that line. |
camo | Camouflage | The enemy cannot attack or target it until it attacks. |
first_strike | First Strike | If it kills its target when attacking, the target does not strike back. |
armor N | Armor | Takes N less damage from each hit. |
shield | Energy Shield | Prevents all damage from the first hit, then disappears. |
assault N | Assault | +N attack while attacking. |
haste | Haste | Can attack the turn it is played. |
regen N | Regeneration | Heals N at the start of your turn. |
bombard | Bombard | A ship that can also attack ground units. |
antiair | Anti-air | A ground unit that can also attack ships. |
jam | Jamming | A unit it damages in combat cannot attack in its next turn. |
power N | Tactic Power | Your tactics deal N more damage. |
proto | Protomolecule | A unit it damages in combat is infected (loses 1 health each turn; the infection moves on when it dies). |
debt N | Debt | Cheap now: next turn you have N fewer cores. |
Abilities
{"trigger": "on_play", "target": "enemy_unit", "combo": false, "effects": [{"damage": 2}, {"draw": 1}]}
All the effects of one ability go to its target. To do two things to two different targets (deal damage to a unit and draw a card yourself), write two abilities.
trigger | When |
|---|---|
on_play | when the card is played (units and tactics) |
last_signal | when this unit dies |
turn_start | at the start of your turn, while this unit is on the field |
aura | always, while this unit lives: use it with buff and an other_friendly_… or all_friendly_… target |
"combo": true — the ability works only if you already played another card this turn.
target | Who |
|---|---|
enemy_unit, enemy_ground, enemy_ship | an enemy unit / ground unit / ship the player picks |
enemy_ground_or_base | an enemy ground unit or the enemy base, picked |
enemy_unit_atk_le2 | an enemy unit with 2 attack or less, picked |
friendly_unit, friendly_unit_or_base | one of your units (or your base), picked |
random_enemy_unit | a random enemy unit |
all_enemy_units, all_enemy_ground, all_enemy_ships | every enemy unit / ground unit / ship |
all_friendly_units, all_friendly_ground, all_friendly_ships | every one of your units / … |
other_friendly_units, other_friendly_ground, other_friendly_ships | your others, not this unit |
self | this unit |
own_base, enemy_base | a base |
player | you (for draw, cores, discover) |
none | no target (for summon, march) |
If the player must pick a target and there is none, a tactic cannot be played (a unit can, without the ability).
| Effect | What it does |
|---|---|
{"damage": 2} | deals 2 damage to the target (tactics: + Tactic Power) |
{"heal": 3} | heals the target by 3 |
{"destroy": true} | destroys the target unit |
{"draw": 1} | you draw 1 card |
{"summon": "guard_drone", "count": 2} | puts 2 of the token on your field (a token of your mod or of the game) |
{"discover": "unit"} | you choose 1 of 3 random cards of your factions: unit, ship, tactic or "" (any) |
{"reactor": 1} | your reactor grows by 1 core for good |
{"march": true} | the units you played this turn can attack at once |
{"status": "jam"} | jam: cannot attack next turn; infect: the protomolecule |
{"credit": 1} | 1 core now, 1 fewer next turn |
{"buff": {"attack": 1, "health": 1}} | +1/+1; add "this_turn": true for this turn only |
{"buff": {"keyword": "taunt"}} | gives a keyword; with a number: {"keyword": "armor", "value": 2} |
Commanders — commanders.json
{"commanders": [
{"id": "colonel_reza", "factions": ["mars", "earth"],
"bonuses": ["infantry_atk_1", "drone_hp_1"],
"power": {"trigger": "on_play", "target": "friendly_unit", "effects": [{"buff": {"keyword": "shield"}}]},
"power_cost": 2,
"name": {"en": "Colonel Nadia Reza"}, "bio": {"en": "A few lines about her."},
"bonus_texts": {"drone_hp_1": {"en": "Your drones have +1 health.", "bg": "Дроновете ти имат +1 живот."}}}
]}
| Field | What it is |
|---|---|
factions | the commander's own faction first (it gives the colour), then the ally: a deck may have cards of both and neutral ones. One faction is fine too. |
bonuses | passive bonuses, see below |
power | the commander's ability: once a turn the player pays power_cost cores and uses it (an ability as in cards; its trigger does not matter) |
power_cost | 0–10 cores (2 if left out) |
name, bio | the name and the text in the Codex |
bonus_texts | the text of a bonus the game has no text for |
| picture | card_art/<id>.jpg, 1216×832 |
Bonuses (commanders and bases)
A bonus is written as an id: <who>_<what>_<number>.
| What | Meaning |
|---|---|
<who>_atk_N | those units have +N attack |
<who>_hp_N | those units have +N health |
<who>_<keyword>_N | those units have the keyword (first_strike, antiair, bombard, assault, armor, shield, haste, regen, taunt, camo) |
<who>_cost_minus_N | those cards cost N less |
<who> is all, ground, ships, infantry (infantry, engineers, androids), machine (ground units that are not infantry), tank, mech, artillery, fighter, drone, token, cheap (cost 1–2), big (cost 6+), tactic (cost only), any other subtype (cruiser), or a keyword (units that have it: camo_atk_1).
Special bonuses: base_hp_plus_N, base_defense_plus_N, turn_heal_base_N (your base heals N each turn), air_damage_plus_N (your ships deal N more to the base), tactic_damage_plus_N, regen_plus_N, first_tactic_draw (your first tactic each turn draws a card), base_heal_double.
The game has texts for the bonuses its own commanders and bases use (for example ground_assault_1, ships_cost_minus_1, infantry_hp_1, drone_atk_1, base_hp_plus_3); for any other bonus give its text in bonus_texts, or it shows as its id.
Bases — bases.json
{"bases": [{"id": "red_bastion", "faction": "mars", "health": 28, "defense": 6,
"defense_type": "armor", "ability": "drone_atk_1",
"name": {"en": "Red Bastion"},
"bonus_texts": {"drone_atk_1": {"en": "Your drones have +1 attack."}}}]}
| Field | Values |
|---|---|
faction | mars, col, earth or corp: a deck can use it with a commander of that faction |
health | 5–60 (30 if left out) |
defense | 0–20 (5): takes damage before the base |
defense_type | field (Force Field) or armor (Armored Shell): the same rule, another look; moat (Mined Moat): the unit that breaks it takes 2 damage |
ability | a bonus as above, or none, bunker (the first ground unit each turn +1 health), relay (the first tactic each turn costs 1 less), lunar_yard (the first ship each turn +1 health), ice_mines (with 10 cores at the start of the turn, draw a card), saturn (when its defense falls, draw 1 more card) |
| picture | card_art/<id>.jpg, 1216×832; it is also the battle's background when this base is the enemy's |
Changing the game's cards — card_changes.json
{"mars_stormtrooper": {"cost": 2, "attack": 4, "health": 3,
"name": {"en": "Storm Trooper Mk II"}},
"mars_phobos_recruit": {"abilities": [{"trigger": "on_play", "target": "player", "effects": [{"draw": 1}]}]},
"col_ceres_militia": {"keywords": {"taunt": 1, "shield": 1}}}
- The key is the id of a card or token of the game. Give only what you change:
cost,attack,health,keywords,abilities,no_attack,name,flavor. keywordsandabilitiesreplace the card's whole list: write all you want it to have.- The changes count everywhere: campaign (its rewards and enemies too), Expedition, against the AI, two players at one computer, missions. Not in the tutorial.
- Every changed card has a purple MOD mark; the Mods screen lists the cards a mod changes.
- If two mods change the same card, the one lower in the Mods list wins.
Decks — decks.json
{"decks": [{"id": "starter", "commander": "colonel_reza", "base": "red_bastion",
"card_back": "mod_red_guard_back_red_guard", "name": {"en": "Red Guard"},
"cards": {"plasma_lancer": 2, "drone_nest": 2, "mars_stormtrooper": 2}}]}
- A legal deck: exactly 40 cards, at most 2 of each, only cards of the commander's factions and neutral ones, no tokens. A deck that breaks a rule is still listed but cannot be played; its problems show in the deck builder.
cardsis{"id": copies}or a list of ids (["plasma_lancer", "plasma_lancer", …]).card_backis optional: a back of the game (back_sol,back_mars,back_earth,back_belt,back_lunar,back_laurel,back_navigator,back_ring_station,back_singularity,back_torch_drive) or of a mod (mod_<mod id>_<file name>).- Decks are for your mod's own cards (so players can try them at once) and for your missions' enemies. To share a deck of the game's cards, use its deck code (Decks → Deck code): no mod needed, and it works online.
Missions — scenarios.json
A battle like a campaign mission. Players find it in the campaign, in the Mods tab next to the acts (at its planet on the map), and in the Mods screen. It gives no rewards; its stars are kept apart from the campaign's.
{"scenarios": [
{"id": "landing", "planet": "mars",
"title": {"en": "Landing"}, "briefing": {"en": "Destroy the outpost."},
"tip": {"en": "Its base has armor: use many small units."},
"after_win": {"en": "The outpost is ours."}, "after_loss": {"en": "We fall back."},
"enemy": {"commander": "col_cmd_rook", "base": "base_hidden_asteroid", "ai": 0},
"enemy_deck": "col_starter", "enemy_base": [20, 4],
"enemy_units": ["col_ceres_militia", "col_belt_miner"],
"arena": "base_hidden_asteroid", "turns": 10, "life": 50},
{"id": "hold_out", "planet": "ceres", "after": "landing",
"title": {"en": "Hold out"}, "briefing": {"en": "Hold out for 7 turns."},
"enemy": {"commander": "earth_cmd_hale", "base": "base_ganymede_lab", "ai": 2},
"survive": 7, "turns": 7, "life": 40}
]}
| Field | What it is |
|---|---|
title, briefing | the name and the text of the mission panel |
tip, after_win, after_loss | optional: a tip, and the line after a win or a loss |
planet | where it is on the map: mercury, venus, earth, mars, ceres (the Belt), jupiter, saturn, neptune (mars if left out) |
enemy.commander, enemy.base | the enemy's commander and base (of the game or your mod) — required |
enemy.ai | 0 Recruit, 1 Veteran, 2 Commander (1 if left out) |
enemy_deck | a ready deck for the enemy; without it the game makes one from the commander's factions |
enemy_base | [life, defense] of the enemy base, instead of the base's own |
enemy_units | units already on the enemy's field at the start (ids of units, not tactics) |
survive | win by holding out this many turns (2–30); without it you win by destroying the base |
turns | the 2nd star: win by this turn (2–40) |
life | the 3rd star: win with at least this % of your base's life (1–100) |
arena | a base whose picture is the background |
after | the id of a mission of this mod, listed before this one, that must be won first |
- The player plays with any deck they choose.
- A chain of missions: give each mission after the first an
after. The map draws the route between them, the next one opens when the one before is won, and a win offers Next mission. Missions withoutafterare open from the start, so a mod can have a chain and some single missions together. - Each mod numbers its missions from 1. With two or more mods with missions on, the Mods tab has a list to show one mod at a time.
Expedition events — events.json
An event that can come up on the Expedition's map, with exactly two choices.
{"events": [{"id": "drone_cache", "title": {"en": "Drone cache"},
"text": {"en": "A sealed military cache floats in the debris."},
"choices": [
{"text": {"en": "Guess the password"}, "chance": 0.5,
"win": {"card": "high"}, "lose": {"life": -4},
"win_text": {"en": "It opens."}, "lose_text": {"en": "It defends itself."}},
{"text": {"en": "Sell the beacon"}, "effects": {"credits": 25}}]}]}
- A choice has
effects(certain), orchance(0–1) withwinandlose(risky), or nothing ({"text": …}: leave). win_textandlose_textare optional lines after a risky choice.
| Effect | What it does |
|---|---|
life N | repairs (or, negative, damages) the flotilla's base |
max_life N | more maximum life |
credits N | gives credits; negative costs credits, and the choice needs that many |
points N | Expedition points |
card | a card: low, mid or high (rarer) |
remove 1 | the cheapest card leaves the deck |
upgrade 1 | a card becomes Mk II |
module | a module: common or rare |
reserve 1 | one more reserve (a lost battle costs one) |
Other texts — texts.json
Any text of the game or of your mod by its key, in several languages at once:
{"UI_TAGLINE": {"en": "The war for the Solar System — now with the Red Guard",
"bg": "Войната за Слънчевата система — вече с Червената гвардия"}}
The same as a line in each language's CSV; use whichever is easier.
Testing and fixing a mod
- Restart after every change to a mod's files (the game reads mods when it starts).
- Mods screen: a mod that cannot be loaded at all is red, with the reason (usually its
mod.json). Under Skipped is everything the game had to leave out of a mod that loaded, and why: an unknown keyword, a deck with a card it cannot find, a picture it cannot read, … The rest of the mod still works. - Common mistakes: a comma missing or one too many in a JSON file (paste it into any JSON checker); a text in quotes where a number is needed (
"cost": "3"works,"cost": "three"does not); a short id where the game's long id is needed or the other way round; a file saved in another encoding than UTF-8. - A value of the wrong kind is listed under Skipped and the default is used.
- Try a mod with a fresh deck in a battle against the AI: hover the cards to read the rules text the game wrote for them.
- Switching a mod off: decks with its cards stay but cannot be played until it is on again, an Expedition run loses its cards, and its pictures, music and texts are gone after the restart. A player's progress is not lost.
Sharing a mod
- Zip the mod's folder (the folder itself, not only the files in it) and share the zip: players unzip it into their
modsfolder. - Do not include files of the game (its pictures, music or texts) — only your own work or work you may share. Say who made what in
description. - Mods that only change texts, backgrounds and music can be used online; everything else is for single player and two players at one computer.
The game's ids
- Cards: every card of the game, with its id, is in https://soldivided.eu/cards/cards.json (
"id"), and on the card gallery: https://soldivided.eu/cards.html. - Commanders:
mercer,valez,vex,mbele,mars_cmd_drakos,mars_cmd_sato,mars_cmd_okafor,mars_cmd_lindqvist,col_cmd_rook,col_cmd_tamsin,col_cmd_ivanov,col_cmd_noor,earth_cmd_hale,earth_cmd_varma,earth_cmd_moreau,earth_cmd_chen,earth_cmd_kowalski,earth_cmd_adeyemi,corp_cmd_sterling,corp_cmd_kane,corp_cmd_voss,corp_cmd_lin,corp_cmd_brandt,corp_cmd_unit7. - Bases:
fortified_bunker,base_olympus_citadel,base_valles_dome,base_phobos_outpost,base_derelict_cruiser,comm_relay,europa_ice_mines,saturn_ring_station,base_ceres_port,base_pallas_refinery,base_hidden_asteroid,base_comet_station,orbital_station,lunar_shipyard,base_luna_command,base_geneva_spire,base_l5_fortress,base_neptune_watch,base_corp_arcology,base_venus_platform,base_mercury_mine,base_titan_harbor,base_ganymede_lab,base_tycho_station. - Ready decks:
mars_starter,col_starter,earth_starter,corp_starter. - Texts: every key is in the translation template. A card's name is
CARD_<ID>_NAMEand its flavorCARD_<ID>_FLAVOR; a commander's nameCMD_<ID>_NAME; a base's nameBASE_<ID>_NAME(ids in capitals).