Effective date: October 31, 2023

General information

Uniset is a way how you can change parameters (like speed, attack, hits and many others) and create a new set of units you can play with. It does not require any development skills and is as simple as modifying a text file.

Hints:

  • Already available unisets - please review them, perhaps some of your ideas are already implemented in one of them.
  • Your unisets - the place where you can create new or modify your existing unisets.
  • Download uniset file example - you can download uniset file example as a starting point for your new uniset. In a such way you can download any available uniset, just change last URL parameter (85 in example) to ID of the uniset you want to download.
  • Uniset page - each uniset has it's own individual page with description. Here you can also compare uniset with any other and also display uniset data.

Uniset selection

Unisets created by you will automatically appear in the game options screen. If you want to play using custom uniset created by someone else - you need to open Uniset Page (find that uniset in the list of already available unisets) and click "Add to my list" button:

JSON file structure

JSON file contains following section, which serves specific purpose:
  • Localizations - language localization for unit names and description
  • Clans - clan list with units bonuses
  • Upgrades - gold & research upgrade settings
  • Resources - resource generator settings
  • Units - unit parameters

Localizations

Language localization for unit names and description, typically looks like this:

    "localizations": {
        "en": {
			"airplant_name": "Air Units Plant",
			"airplant_name_short": "Air Plant",
			"airplant_description": "Builds fighters, ground attack planes, and air transports.\nA heavy factory ...",
			"airplant_short_description": "Air units factory"
			...
		}
	}

Where `airplant` is the unit `_type`.

  • {type}_name - Long unit name
  • {type}_name_short - Short unit name, not more than 10 chars. Displayed in unit popup infobox, when unit is selected.
  • {type}_description - Long unit description. Can consist of multiple lines. New line char should be replaced with \n
  • {type}_short_description - Short unit description, not more than 29 chars. Displayed in the list of plants / starting deployment / upgrades.

Clans

Clan list with units bonuses, typically looks like this:

    "clans": [
        {
            "_flags": 0,
            "_image": "CLN1LOGO",
            "_name": {
                "en": "Zero Gravity"
            },
            "_number": 0,
            "_text": {
                "en": "Better Air Units:"
            },
            "_unitMods": [
                {
                    "_unitModParams": [
                        {
                            "_modValue": 2,
                            "_paramName": "speed"
                        },
                        {
                            "_modValue": 16,
                            "_paramName": "fuel"
                        },
                        ...
                    ],
                    "_unitType": "airtrans"
                },
                ...
            ]
        },
        ...
    ]

Upgrades

Gold & research upgrade settings, typically looks like this:

		"upgrades" : {
		"factors" : {
			"attack" : 4,
			"shots" : 4,
			"range" : 1.8,
			"armor" : 6,
			"ammo" : 9,
			"hitpoints" : 6,
			"speed" : 4,
			"scan" : 2.4,
			"cost" : 1.8,
			"gas" : 9
		},
		"increments" : {
			"for1max" : 20,
			"for2max" : 50,
			"for5max" : 100
		},
		"maxUpgradeCost" : 1000,
		"exp" : 7.7,
		"kUpgrade" : 18.0,
		"kResearch" : 72.0
	}
  • increments - defines gold upgrade step. Gold upgrade step can be: +1, +2, +5 or +10:
    - for1max maximum base parameter value, where upgrade step will be +1
    - for2max maximum base parameter value, where upgrade step will be +2
    - for5max maximum base parameter value, where upgrade step will be +5
    base parameter value is initial unit parameter value considering clan bonus but without any upgrades.
  • maxUpgradeCost - maximum upgrade cost for a parameter. It will not be possible to upgrade parameter further if next upgrade cost is more than maxUpgradeCost
  • Gold upgrade - according to following formula: pow(newValue / prevValue, exp) * kUpgrade / factor - prevUpgradeCost
    newValue - new parameter value, for example 22 when upgrading tank attack from 20
    prevValue - old or previous parameter value, for example initial tank attack 20
    exp - from uniset settings
    kUpgrade - from uniset settings
    factor - from uniset settings, for example factors.attack
    As an example of upgrade calculations you can use Upgrade cost spreadsheet.
  • factors - "cost difficulty" of the parameter to upgrade, 1 - means maximum difficulty. More means it will be cheaper to do upgrades. Real values supported.
  • Research upgrade - according to following formula: round(pow(newValue / prevValue, exp) * kResearch / factor - prevUpgradeCost
    newValue - new parameter value, for example 110 (+10%) when upgrading attack
    prevValue - old or previous parameter value, for example 100 (initial attack)
    exp - from uniset settings
    kResearch - from uniset settings
    factor - from uniset settings, for example factors.attack
    As an example of upgrade calculations you can use Upgrade cost spreadsheet.

Resources

Resource generator settings:

	"resources" : {
		"2x2" : 0,
		"freeResRows" : 4,
		"resCounts" : [160, 280, 400],
		"WEIGHTS" : {
			"CONCENTRATE_RAW" : {
				"RICH" : 50,
				"MEDIUM" : 40,
				"POOR" : 30
			},
			"CONCENTRATE_GOLD" : {
				"RICH" : 15,
				"MEDIUM" : 10,
				"POOR" : 5
			},
			"CONCENTRATE_FUEL" : {
				"RICH" : 30,
				"MEDIUM" : 20,
				"POOR" : 10
			},
			"NORMAL_RESOURCES" : {
				"RICH" : 30,
				"MEDIUM" : 20,
				"POOR" : 10
			}
		},
		"FUEL" : {
			"RICH" : {
				"CONCENTRATE" : {
					"MIN" : 18,
					"MAX" : 18
				},
				"MINE" : {
					"MIN" : 9,
					"MAX" : 9
				},
				"NORMAL" : {
					"MIN" : 2,
					"MAX" : 4
				}
			},
			"MEDIUM" : {
				"CONCENTRATE" : {
					"MIN" : 12,
					"MAX" : 18
				},
				"MINE" : {
					"MIN" : 8,
					"MAX" : 8
				},
				"NORMAL" : {
					"MIN" : 2,
					"MAX" : 3
				}
			},
			"POOR" : {
				"CONCENTRATE" : {
					"MIN" : 8,
					"MAX" : 12
				},
				"MINE" : {
					"MIN" : 7,
					"MAX" : 7
				},
				"NORMAL" : {
					"MIN" : 1,
					"MAX" : 2
				}
			}
		},
		"GOLD" : {
			"RICH" : {
				"CONCENTRATE" : {
					"MIN" : 8,
					"MAX" : 12
				},
				"MINE" : {
					"MIN" : 1,
					"MAX" : 1
				},
				"NORMAL" : {
					"MIN" : 0,
					"MAX" : 1
				}
			},
			"MEDIUM" : {
				"CONCENTRATE" : {
					"MIN" : 5,
					"MAX" : 9
				},
				"MINE" : {
					"MIN" : 0,
					"MAX" : 0
				},
				"NORMAL" : {
					"MIN" : 0,
					"MAX" : 0
				}
			},
			"POOR" : {
				"CONCENTRATE" : {
					"MIN" : 3,
					"MAX" : 6
				},
				"MINE" : {
					"MIN" : 0,
					"MAX" : 0
				},
				"NORMAL" : {
					"MIN" : 0,
					"MAX" : 0
				}
			}
		},
		"RAW" : {
			"RICH" : {
				"CONCENTRATE" : {
					"MIN" : 20,
					"MAX" : 22
				},
				"NORMAL" : {
					"MIN" : 2,
					"MAX" : 5
				},
				"MINE" : {
					"MIN" : 16,
					"MAX" : 16
				}
			},
			"MEDIUM" : {
				"CONCENTRATE" : {
					"MIN" : 14,
					"MAX" : 16
				},
				"NORMAL" : {
					"MIN" : 2,
					"MAX" : 5
				},
				"MINE" : {
					"MIN" : 12,
					"MAX" : 12
				}
			},
			"POOR" : {
				"CONCENTRATE" : {
					"MIN" : 8,
					"MAX" : 12
				},
				"NORMAL" : {
					"MIN" : 0,
					"MAX" : 3
				},
				"MINE" : {
					"MIN" : 10,
					"MAX" : 10
				}
			}
		},
		"DIFFUSIONS" : {
			"CONCENTRATE_RAW" : {
				"RICH" : 4,
				"MEDIUM" : 6,
				"POOR" : 8
			},
			"CONCENTRATE_GOLD" : {
				"RICH" : 8,
				"MEDIUM" : 10,
				"POOR" : 12
			},
			"CONCENTRATE_FUEL" : {
				"RICH" : 4,
				"MEDIUM" : 6,
				"POOR" : 8
			},
			"NORMAL_RESOURCES" : {
				"RICH" : 4,
				"MEDIUM" : 6,
				"POOR" : 8
			}
		}
	}
  • 2x2 - Resource shape type:
    - 0 takes 3x3 cells and will be placed in shape of "H" (5 cells with recources) or "+" (4 cells with recources)
    - 1 takes 2x2 cells and will be placed in shape of "r" (3 cells with recources)
    - 2 takes 2x2 cells and will be placed in shape of square (all 4 cells with resources)
  • freeResRows - integer, not less than 1. Square block size, for example 4 is square block of 16 cells. Whole map will be divided by this size blocks and in each such block generator will place same amount of resources (proportional to the area free from player deployment zones).
  • resCounts - count of resource places on the map (for 112x112 maps, if size differs then values will be adjusted proportional area. For maps size 56x56 - will be in 4 times less resource places) Resource shape type:
    - 160 corresponds to game setting Mineral Fields: Rare
    - 280 corresponds to game setting Mineral Fields: Average
    - 400 corresponds to game setting Mineral Fields: Many
  • FUEL, GOLD, RAW - settings for each resource type
    - RICH, MEDIUM, POOR corresponds to game setting Amount of ...
    - CONCENTRATE main resource type
    - MINE resource type under deployment mining station
    - NORMAL secondary resources around main resource
  • WEIGHTS - resource type weights. Using type of resource (fuel, material, gold) and relevant Amount of XXX (Rich, Medium, Poor) value from game setting.
    Considering example of Rich material, Medium fuel and Poor gold:
    Resulting weights will be: 50, 20, 5
    Considering that we have Mineral fields game setting equal to Average, which is 280 according to resCounts
    - Resulting Material resource count: 280*50 / (50 + 20 + 5) = 186
    - Resulting Fuel resource count: 280*20 / (50 + 20 + 5) = 74
    - Resulting Material resource count: 280*5 / (50 + 20 + 5) = 18
  • DIFFUSIONS - sets count of cells, which resource generator will retain between neighbour resource of same type.
    NORMAL_RESOURCES - same setting, which is valid for mineral fields, which does not contain concentrated resource.

Units

Unit parameters, typically looks like this:

    "units": [
        {
            "_assetName": "Tank",
            "_bLevel": 4,
            "_bMoveType": 0,
            "_bNumber": 52,
            "_bSelfCreatedType": 4,
            "_bSelfCreatorType": 0,
            "_bSize": 1,
            "_canBuildHere": false,
            "_isAbleToFire": true,
            "_isAbsCantSelect": false,
            "_isAllwaysOn": false,
            "_isAnimated": false,
            "_isAntiStealth": false,
            "_isAutorepair": false,
            "_isBombMine": false,
            "_isBombMinelayer": false,
            "_isBridge": false,
            "_isBuilding": false,
            "_isBuldozer": false,
            "_isCanBuy": true,
            "_isCantSelect": false,
            "_isConnector": false,
            "_isGivePoints": false,
            "_isInfantry": false,
            "_isInfiltrator": false,
            "_isLanding": false,
            "_isMine": false,
            "_isNeedUndercover": false,
            "_isPlatform": false,
            "_isReloader": false,
            "_isRepair": false,
            "_isResearch": false,
            "_isRetranslator": false,
            "_isRoad": false,
            "_isSeeMines": false,
            "_isSeeUnderwater": false,
            "_isSpacePort": true,
            "_isStealth": false,
            "_isSurvivor": false,
            "_isUnderwater": false,
            "_isUpgrades": false,
            "_nEnergy": 0,
            "_nFuel": 0,
            "_nGold": 0,
            "_nMaterial": 0,
            "_nMoney": 0,
            "_nPeoples": 0,
            "_order": 1,
            "_pAmmo": 10,
            "_pArmor": 12,
            "_pAttack": 20,
            "_pBulletType": 1,
            "_pCost": 12,
            "_pFireType": 1,
            "_pFuel": 54,
            "_pHealth": 30,
            "_pMatPerTurn": 0,
            "_pMoveAndShot": 0,
            "_pRange": 5,
            "_pScan": 5,
            "_pShots": 2,
            "_pSpeed": 6,
            "_pZone": 0,
            "_rEnergy": 0,
            "_rFuel": 0,
            "_rGold": 0,
            "_rMaterial": 0,
            "_rPeoples": 0,
            "_retEnergy": 0,
            "_retFuel": 0,
            "_retGold": 0,
            "_retMaterial": 0,
            "_retMoney": 0,
            "_retPeoples": 0,
            "_sAir": 0,
            "_sGround": 0,
            "_sInfantry": 0,
            "_sSea": 0,
            "_type": "tank"
        },
        ...
    ]
  • _nEnergy - building energy consumption on first building speed (1x)
  • _nEnergyLevels - array of building energy building energy consumption on building speed > 1x
    - 1x building speed is taken from _nEnergy
    - 2x building speed is taken from the first element of _nEnergyLevels array (index 0)
    - 3x building speed - not used, may be same as 2x, is taken from the second element of _nEnergyLevels array (index 1)
    - 4x building speed is taken from the third element of _nEnergyLevels array (index 2)
    - 8x building speed - not used, may be same as 4x is taken from the fourth element of _nEnergyLevels array (index 3)
  • _rEnergy - energy storage, will be able to store defined amount of energy points
  • _pMoveAndShot - starting from V19 - real value from 0 to 1, which defines percentage of movement, which unit can do and still have ability to fire.
    For example:
    - value 1 means that unit will be able to move _pSpeed cells and still able to fire
    - value 0.25 means that unit will be able to move _pSpeed*0.25 cells and still able to fire
    In v18 it is integer value (only 0, 1 are allowed) with same meaning