Fix table formatting in all file documentation

This commit is contained in:
Yair Morgenstern
2024-03-09 21:38:14 +02:00
parent 20b4e6674b
commit 1fc0f0ea68
5 changed files with 413 additions and 413 deletions

View File

@ -59,13 +59,14 @@ Almost all Unciv JSON files start with a "[" and end with a "]". In between thes
This file contains two unit objects, one for a warrior and one for a spearman. These objects have different attributes, in this case "name", "cost" and "promotions". All these attributes have a certain type, a String (text) for "name", an Integer for "cost" and a List of Strings for "promotions".
There are different types of attributes:
| type | notes |
| --------- | ----- |
| String | A word or sentence. Should be between double quotes (") |
| Integer | A number. Can be both positive or negative. Should **not** be between quotes |
| Boolean | A value that can either be 'true' or 'false'. Should **not** be between quotes |
| type | notes |
|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| String | A word or sentence. Should be between double quotes (") |
| Integer | A number. Can be both positive or negative. Should **not** be between quotes |
| Boolean | A value that can either be 'true' or 'false'. Should **not** be between quotes |
| List of [type] | If multiple values could apply (such as with the promotions above), they should be put inside a list. Each element of the list should be written like a normal attribute, separated by commas, and enclosed between square braces. E.g.: ["Shock I", "Shock II"] or [1, 2, 3]. |
| Object | The most complicated type of attribute. An object is comprised of multiple attributes, each of which again has a type. These attributes have a key (the part before the ":") and a value (the part behind it). For an example, see below. |
| Object | The most complicated type of attribute. An object is comprised of multiple attributes, each of which again has a type. These attributes have a key (the part before the ":") and a value (the part behind it). For an example, see below. |
Example of a Buildings.json adding a new "Cultural Library" building which gives +50% science and +50% culture:

View File

@ -8,12 +8,12 @@ This file contains the beliefs that can be chosen for religions in your mod.
Each belief has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- |-----------------------------------------------------------------------------------|
| name | String | Required | |
| type | Enum | Required | Type of belief. Value must be Pantheon, Founder, Follower or Enhancer |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this belief adds to cities following it |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| Attribute | Type | Default | Notes |
|-----------------|-----------------|----------|-----------------------------------------------------------------------------------|
| name | String | Required | |
| type | Enum | Required | Type of belief. Value must be Pantheon, Founder, Follower or Enhancer |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this belief adds to cities following it |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
## Buildings.json
@ -23,30 +23,30 @@ This file contains all the buildings and wonders you want to use in your mod.
Each building has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| cost | Integer | -1 | Amount of production required to build the building. If -1, the `buildingCost` from `requiredTech` [column](#column-structure) is used |
| [`<stats>`](3-Map-related-JSON-files.md#general-stat) | Float | 0 | Per-turn yield produced by the building |
| maintenance | Integer | 0 | Maintenance cost of the building |
| isWonder | Boolean | false | Whether this building is a global wonder |
| isNationalWonder | Boolean | false | Whether this building is a national wonder |
| requiredBuilding | String | none | A building that has to be built before this building can be built. Must be in [Buildings.json](#buildingsjson) |
| requiredTech | String | none | The tech that should be researched before this building may be built. Must be in [Techs.json](#techsjson) |
| requiredResource | String | none | The resource that is consumed when building this building. Must be in [TileResources.json](3-Map-related-JSON-files.md#tileresourcesjson) |
| requiredNearbyImprovedResources | List of Strings | empty | The building can only be built if any of the resources in this list are within the borders of this city and have been improved. Each resource must be in [TileResources.json](3-Map-related-JSON-files.md#tileresourcesjson) |
| replaces | String | none | The name of a building that should be replaced by this building. Must be in [Buildings.json](#buildingsjson) |
| uniqueTo | String | none | If supplied, only the nation with this name can build this building. Must be in [Nations.json](#nationsjson) |
| cityStrength | Integer | 0 | Strength bonus the city in which this building is built receives |
| cityHealth | Integer | 0 | Health bonus the city in which this building is built receives |
| hurryCostModifier | Integer | 0 | When this building is bought using gold or faith, the price is increased by this much percent |
| quote | String | none | If this building is a (national) wonder, this string will be shown on the completion popup |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this building has |
| replacementTextForUniques | String | none | If provided, this string will be shown instead of all of the uniques |
| percentStatBonus | Object | none | Percentual bonus for stats provided by the building. Same format as [specialized stats](3-Map-related-JSON-files.md#specialized-stats) (numbers are in percent. i.e. `[30]` represents 30% __bonus__ to a stat) |
| greatPersonPoints | Object | none | Great person points by this building generated per turn. Valid keys are the names of units (Great Scientist, Warrior, etc.), valid values are Integers |
| specialistSlots | Object | none | Specialist slots provided by this building. Valid keys are the names of specialists (as defined in [Specialists.json](3-Map-related-JSON-files.md#specialistsjson)), valid values are Integers, the amount of slots provided for this specialist |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| Attribute | Type | Default | Notes |
|-------------------------------------------------------|-----------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| cost | Integer | -1 | Amount of production required to build the building. If -1, the `buildingCost` from `requiredTech` [column](#column-structure) is used |
| [`<stats>`](3-Map-related-JSON-files.md#general-stat) | Float | 0 | Per-turn yield produced by the building |
| maintenance | Integer | 0 | Maintenance cost of the building |
| isWonder | Boolean | false | Whether this building is a global wonder |
| isNationalWonder | Boolean | false | Whether this building is a national wonder |
| requiredBuilding | String | none | A building that has to be built before this building can be built. Must be in [Buildings.json](#buildingsjson) |
| requiredTech | String | none | The tech that should be researched before this building may be built. Must be in [Techs.json](#techsjson) |
| requiredResource | String | none | The resource that is consumed when building this building. Must be in [TileResources.json](3-Map-related-JSON-files.md#tileresourcesjson) |
| requiredNearbyImprovedResources | List of Strings | empty | The building can only be built if any of the resources in this list are within the borders of this city and have been improved. Each resource must be in [TileResources.json](3-Map-related-JSON-files.md#tileresourcesjson) |
| replaces | String | none | The name of a building that should be replaced by this building. Must be in [Buildings.json](#buildingsjson) |
| uniqueTo | String | none | If supplied, only the nation with this name can build this building. Must be in [Nations.json](#nationsjson) |
| cityStrength | Integer | 0 | Strength bonus the city in which this building is built receives |
| cityHealth | Integer | 0 | Health bonus the city in which this building is built receives |
| hurryCostModifier | Integer | 0 | When this building is bought using gold or faith, the price is increased by this much percent |
| quote | String | none | If this building is a (national) wonder, this string will be shown on the completion popup |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this building has |
| replacementTextForUniques | String | none | If provided, this string will be shown instead of all of the uniques |
| percentStatBonus | Object | none | Percentual bonus for stats provided by the building. Same format as [specialized stats](3-Map-related-JSON-files.md#specialized-stats) (numbers are in percent. i.e. `[30]` represents 30% __bonus__ to a stat) |
| greatPersonPoints | Object | none | Great person points by this building generated per turn. Valid keys are the names of units (Great Scientist, Warrior, etc.), valid values are Integers |
| specialistSlots | Object | none | Specialist slots provided by this building. Valid keys are the names of specialists (as defined in [Specialists.json](3-Map-related-JSON-files.md#specialistsjson)), valid values are Integers, the amount of slots provided for this specialist |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
## Nations.json
@ -56,33 +56,32 @@ This file contains all the nations and city states, including Barbarians and Spe
Each nation has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- |-------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| leaderName | String | none | Omit only for city states! If you want LeaderPortraits, the image file names must match exactly, including case |
| style | String | none | Modifier appended to pixel unit image names |
| cityStateType | String | none | Distinguishes major civilizations from city states (must be in [CityStateTypes.json](#citystatetypesjson)) |
| startBias | List of strings | empty | Zero or more of: [terrainFilter](../../Unique-parameters.md/#terrainfilter) or "Avoid [terrainFilter]". [^S] |
| preferredVictoryType | String | Neutral | The victory type major civilizations will pursue (need not be specified in [VictoryTypes.json](5-Miscellaneous-JSON-files.md#victorytypesjson)) |
| personality | String | none | The name of the personality specified in [Personalities.json](#personalitiesjson)
| favoredReligion | String | none | The religion major civilization will choose if available when founding a religion. Must be in [Religions.json](#religionsjson) |
| startIntroPart1 | String | none | Introductory blurb shown to Player on game start... |
| startIntroPart2 | String | none | ... second paragraph. ___NO___ "TBD"!!! Leave empty to skip that alert. |
| declaringWar | String | none | Another greeting, voice hook supported [^V] |
| attacked | String | none | Another greeting, voice hook supported [^V] |
| defeated | String | none | Another greeting, voice hook supported [^V] |
| introduction | String | none | Another greeting, voice hook supported [^V] |
| neutralHello | String | none | Another greeting, voice hook supported [^V] |
| hateHello | String | none | Another greeting, voice hook supported [^V] |
| tradeRequest | String | none | Another greeting, voice hook supported [^V] |
| innerColor | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | black | RGB color for outer ring of nation icon |
| outerColor | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | Required | RGB color for inner circle of nation icon |
| uniqueName | String | none | Decorative name for the special characteristic of this nation |
| uniqueText | String | none | Replacement text for "uniques". If empty, uniques are listed individually |
| uniques | List | empty | List of [unique abilities](../../uniques) this civilisation has |
| cities | List | empty | City names used sequentially for newly founded cities. Required for major civilizations and city states |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
<!-- | adjective | String | none | Currently unused | -->
| Attribute | Type | Default | Notes |
|----------------------|---------------------------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| leaderName | String | none | Omit only for city states! If you want LeaderPortraits, the image file names must match exactly, including case |
| style | String | none | Modifier appended to pixel unit image names |
| cityStateType | String | none | Distinguishes major civilizations from city states (must be in [CityStateTypes.json](#citystatetypesjson)) |
| startBias | List of strings | empty | Zero or more of: [terrainFilter](../../Unique-parameters.md/#terrainfilter) or "Avoid [terrainFilter]". [^S] |
| preferredVictoryType | String | Neutral | The victory type major civilizations will pursue (need not be specified in [VictoryTypes.json](5-Miscellaneous-JSON-files.md#victorytypesjson)) |
| personality | String | none | The name of the personality specified in [Personalities.json](#personalitiesjson) |
| favoredReligion | String | none | The religion major civilization will choose if available when founding a religion. Must be in [Religions.json](#religionsjson) |
| startIntroPart1 | String | none | Introductory blurb shown to Player on game start... |
| startIntroPart2 | String | none | ... second paragraph. ___NO___ "TBD"!!! Leave empty to skip that alert. |
| declaringWar | String | none | Another greeting, voice hook supported [^V] |
| attacked | String | none | Another greeting, voice hook supported [^V] |
| defeated | String | none | Another greeting, voice hook supported [^V] |
| introduction | String | none | Another greeting, voice hook supported [^V] |
| neutralHello | String | none | Another greeting, voice hook supported [^V] |
| hateHello | String | none | Another greeting, voice hook supported [^V] |
| tradeRequest | String | none | Another greeting, voice hook supported [^V] |
| innerColor | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | black | RGB color for outer ring of nation icon |
| outerColor | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | Required | RGB color for inner circle of nation icon |
| uniqueName | String | none | Decorative name for the special characteristic of this nation |
| uniqueText | String | none | Replacement text for "uniques". If empty, uniques are listed individually |
| uniques | List | empty | List of [unique abilities](../../uniques) this civilisation has |
| cities | List | empty | City names used sequentially for newly founded cities. Required for major civilizations and city states |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
[^S]: A "Coast" preference (_unless_ combined with "Avoid") is translated to a complex test for coastal land tiles, tiles next to Lakes, river tiles or near-river tiles, and such civs are processed first. Other startBias entries are ignored in that case.
Other positive (no "Avoid") startBias are processed next. Multiple positive preferences are treated equally, but get no "fallback".
@ -98,16 +97,16 @@ This file contains all Personalities for computer players.
Each personality has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| preferredVictoryType | String | Neutral | The victory type major civilizations will pursue (need not be specified in [VictoryTypes.json](5-Miscellaneous-JSON-files.md#victorytypesjson)) |
| [`<stats>`](3-Map-related-JSON-files.md#general-stat) | Float | 5 | Amount of focus on the stat the computer player will have. Typically ranges from 0 (no focus) to 10 (double focus) |
| military | Float | 5 | Amount of focus on the military growth the computer player will have. Typically ranges from 0 (no focus) to 10 (double focus) |
| priorities | Object | none | Priorities for each policy branch [^B] |
| uniques | List | empty | List of [unique abilities](../../uniques) this personality has |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
<!-- | warMongering | Float | 5 | Amount of focus on declaring war the computer player will have. Typically ranges from 0 (no focus) to 10 (double focus) |-->
| Attribute | Type | Default | Notes |
|-------------------------------------------------------|--------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| preferredVictoryType | String | Neutral | The victory type major civilizations will pursue (need not be specified in [VictoryTypes.json](5-Miscellaneous-JSON-files.md#victorytypesjson)) |
| [`<stats>`](3-Map-related-JSON-files.md#general-stat) | Float | 5 | Amount of focus on the stat the computer player will have. Typically ranges from 0 (no focus) to 10 (double focus) |
| military | Float | 5 | Amount of focus on the military growth the computer player will have. Typically ranges from 0 (no focus) to 10 (double focus) |
| priorities | Object | none | Priorities for each policy branch [^B] |
| uniques | List | empty | List of [unique abilities](../../uniques) this personality has |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| warMongering | Float | 5 | Amount of focus on declaring war the computer player will have. Typically ranges from 0 (no focus) to 10 (double focus) |
[^B]: Similar to [policy priorites](#branch-priorities) The "priorities" object defines the priority major civilizations' AI give to a policy branch. The AI chooses the policy branch with the highest number for their preferred victory type. If two or more candidate branches have the same priority, the AI chooses a random branch among the candidates.
@ -132,12 +131,12 @@ Cultured, Maritime, Mercantile, Militaristic, Religious.
Each city state type has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| friendBonusUniques | List of Strings | empty | List of [unique abilities](../../uniques) granted to major civilizations when friends with this city state |
| allyBonusUniques | List of Strings | empty | List of [unique abilities](../../uniques) granted to major civilizations when allied to city state |
| color | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | [255, 255, 255] | RGB color of text in civilopedia |
| Attribute | Type | Default | Notes |
|--------------------|---------------------------------------------------------------------|-----------------|------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| friendBonusUniques | List of Strings | empty | List of [unique abilities](../../uniques) granted to major civilizations when friends with this city state |
| allyBonusUniques | List of Strings | empty | List of [unique abilities](../../uniques) granted to major civilizations when allied to city state |
| color | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | [255, 255, 255] | RGB color of text in civilopedia |
## Policies.json
@ -153,30 +152,30 @@ The properties of the 'opener' are defined with the branch level, while the 'fin
Each policy branch has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| era | String | Required | Unlocking era as defined in [Eras.json](5-Miscellaneous-JSON-files.md#Eras.json) |
| priorities | Object | none | Priorities for each victory type, [see here](#branch-priorities)
| uniques | List | empty | List of [unique abilities](../../uniques) this policy branch grants upon adopting it |
| policies | List | empty | List of [member policies](#member-policy-structure) and [branch 'finisher'](#branch-finisher-structure) - pay attention to the nesting of {} and [] |
| Attribute | Type | Default | Notes |
|------------|--------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| era | String | Required | Unlocking era as defined in [Eras.json](5-Miscellaneous-JSON-files.md#Eras.json) |
| priorities | Object | none | Priorities for each victory type, [see here](#branch-priorities) |
| uniques | List | empty | List of [unique abilities](../../uniques) this policy branch grants upon adopting it |
| policies | List | empty | List of [member policies](#member-policy-structure) and [branch 'finisher'](#branch-finisher-structure) - pay attention to the nesting of {} and [] |
#### Member policy structure
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| row | Integer | Required | Placement in UI, each unit approximately half the icon size |
| column | Integer | Required | Placement in UI, each unit approximately half the icon size |
| requires | List | empty | List of prerequisite policy names |
| uniques | List | empty | List of [unique abilities](../../uniques) this policy member grants upon adopting it |
| Attribute | Type | Default | Notes |
|-----------|---------|----------|--------------------------------------------------------------------------------------|
| name | String | Required | |
| row | Integer | Required | Placement in UI, each unit approximately half the icon size |
| column | Integer | Required | Placement in UI, each unit approximately half the icon size |
| requires | List | empty | List of prerequisite policy names |
| uniques | List | empty | List of [unique abilities](../../uniques) this policy member grants upon adopting it |
#### Branch finisher structure
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| uniques | List | empty | List of [unique abilities](../../uniques) this finisher grants upon adopting all the policy members in the branch |
| Attribute | Type | Default | Notes |
|-----------|--------|----------|-------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| uniques | List | empty | List of [unique abilities](../../uniques) this finisher grants upon adopting all the policy members in the branch |
### Branch priorities
@ -204,39 +203,39 @@ This file contains the quests that may be given to major civilizations by city s
Each quest has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | Defines criteria of quest, [see below](#quest-name) |
| description | String | Required | Description of the quest shown to players. Can add extra information based on `name`, [see below](#quest-name) |
| type | Enum | Individual | Individual or Global |
| influence | Float | 40 | Influence reward gained on quest completion |
| duration | Integer | 0 | Maximum number of turns to complete the quest. If 0, there is no turn limit |
| minimumCivs | Integer | 1 | Minimum number of Civs needed to start the quest. It is meaningful only for type = Global |
| weightForCityStateType | Object | none | Relative weight multiplier to this quest for each [city state type](#citystatetypesjson) or city state personality (Friendly, Neutral, Hostile, Irrational), [see below](#quest-weight) |
| Attribute | Type | Default | Notes |
|------------------------|---------|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | Defines criteria of quest, [see below](#quest-name) |
| description | String | Required | Description of the quest shown to players. Can add extra information based on `name`, [see below](#quest-name) |
| type | Enum | Individual | Individual or Global |
| influence | Float | 40 | Influence reward gained on quest completion |
| duration | Integer | 0 | Maximum number of turns to complete the quest. If 0, there is no turn limit |
| minimumCivs | Integer | 1 | Minimum number of Civs needed to start the quest. It is meaningful only for type = Global |
| weightForCityStateType | Object | none | Relative weight multiplier to this quest for each [city state type](#citystatetypesjson) or city state personality (Friendly, Neutral, Hostile, Irrational), [see below](#quest-weight) |
### Quest name
The name of the quest defines the criteria for the quest. If they are not defined in the predefined enum, they will have no behavior. In the description, square brackets `[]` in the description of the quest is replaced with extra information (except for `Invest`). The list of predefined quest names are as follows:
| Name | Criteria | Additional info |
| ---- | -------- | --------------- |
| Route | Connect the city state to the major civilization's capital using roads or railways | |
| Clear Barbarian Camp | Destroy the target barbarian camp | |
| Construct Wonder | Construct the target wonder | target `wonder` |
| Connect Resource | Connect the target resource to the major civilization's trade network | target `tileResource` |
| Acquire Great Person | Acquire the target great person | target `greatPerson` |
| Conquer City State | Defeat the target city state | target `cityState` |
| Find Player | Meet the target major civilization | target `civName` |
| Find Natural Wonder | Find the target natural wonder | target `naturalWonder` |
| Give Gold | Donate gold to the city state (amount does not matter) | `civName` "bully" for city state |
| Pledge to Protect | Pledge to protect city state | `civName` "bully" for city state |
| Contest Culture | Be the major civilization with the highest increase to culture during the duration | major civilization's `cultureGrowth` |
| Contest Faith | Be the major civilization with the highest increase to faith during the duration | major civilization's `faithGrowth` |
| Contest Technology | Be the major civilization with the most technologies researched during the duration | major civilization's `techsResearched` |
| Invest | Donating gold yield extra Influence based on value provided | __IMPORTANT__: value in square brackets is the extra influence in percent. i.e. \[50\] means 50% |
| Bully City State | Demand tribute from the target city state | target `city state` |
| Denounce Civilization | Denounce the major civilization which "bullied" the city state | `civName` "bully" for city state |
| Spread Religion | Spread major civilization's religion to the city state | major civilization's `religionName` |
| Name | Criteria | Additional info |
|-----------------------|-------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| Route | Connect the city state to the major civilization's capital using roads or railways | |
| Clear Barbarian Camp | Destroy the target barbarian camp | |
| Construct Wonder | Construct the target wonder | target `wonder` |
| Connect Resource | Connect the target resource to the major civilization's trade network | target `tileResource` |
| Acquire Great Person | Acquire the target great person | target `greatPerson` |
| Conquer City State | Defeat the target city state | target `cityState` |
| Find Player | Meet the target major civilization | target `civName` |
| Find Natural Wonder | Find the target natural wonder | target `naturalWonder` |
| Give Gold | Donate gold to the city state (amount does not matter) | `civName` "bully" for city state |
| Pledge to Protect | Pledge to protect city state | `civName` "bully" for city state |
| Contest Culture | Be the major civilization with the highest increase to culture during the duration | major civilization's `cultureGrowth` |
| Contest Faith | Be the major civilization with the highest increase to faith during the duration | major civilization's `faithGrowth` |
| Contest Technology | Be the major civilization with the most technologies researched during the duration | major civilization's `techsResearched` |
| Invest | Donating gold yield extra Influence based on value provided | __IMPORTANT__: value in square brackets is the extra influence in percent. i.e. \[50\] means 50% |
| Bully City State | Demand tribute from the target city state | target `city state` |
| Denounce Civilization | Denounce the major civilization which "bullied" the city state | `civName` "bully" for city state |
| Spread Religion | Spread major civilization's religion to the city state | major civilization's `religionName` |
### Quest weight
@ -268,12 +267,12 @@ This file should contain a list of all possible specialists that citizens can be
Each specialist has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| [`<stats>`](3-Map-related-JSON-files.md#general-stat) | Float | 0 | Per-turn yield produced by the specialist |
| color | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | Required | Color of the image for this specialist |
| greatPersonPoints | Object | none | Great person points generated by this specialist per turn. Valid keys are the names of units (Great Scientist, Warrior, etc.), valid values are Integers |
| Attribute | Type | Default | Notes |
|-------------------------------------------------------|---------------------------------------------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| [`<stats>`](3-Map-related-JSON-files.md#general-stat) | Float | 0 | Per-turn yield produced by the specialist |
| color | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | Required | Color of the image for this specialist |
| greatPersonPoints | Object | none | Great person points generated by this specialist per turn. Valid keys are the names of units (Great Scientist, Warrior, etc.), valid values are Integers |
## Techs.json
@ -285,23 +284,23 @@ This file contains all the technologies that can be researched with science. It
Each tech column has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| columnNumber | Integer | Required | Horizontal placement in the Tech Tree |
| era | String | Required | Determines era reached after researching any technologies in this column. Must be in [Eras.json](5-Miscellaneous-JSON-files.md#Eras.json) |
| techCost | Integer | 0 | Default cost of the techs in this column |
| buildingCost | Integer | Required | Default cost of buildings requiring this tech |
| wonderCost | Integer | Required | Default cost of wonders requiring this tech |
| techs | List | Required | List of [techs](#tech-structure) - pay attention to the nesting of {} and [] |
| Attribute | Type | Default | Notes |
|--------------|---------|----------|-------------------------------------------------------------------------------------------------------------------------------------------|
| columnNumber | Integer | Required | Horizontal placement in the Tech Tree |
| era | String | Required | Determines era reached after researching any technologies in this column. Must be in [Eras.json](5-Miscellaneous-JSON-files.md#Eras.json) |
| techCost | Integer | 0 | Default cost of the techs in this column |
| buildingCost | Integer | Required | Default cost of buildings requiring this tech |
| wonderCost | Integer | Required | Default cost of wonders requiring this tech |
| techs | List | Required | List of [techs](#tech-structure) - pay attention to the nesting of {} and [] |
#### Tech structure
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| row | Integer | 0 | Vertical placement in the Tech Tree, must be unique per column |
| cost | Integer | [Column techCost](#column-structure) | The amount of science required to research this tech |
| prerequisites | List of Strings | empty | A list of the names of techs that are prerequisites of this tech. Only direct prerequisites are necessary |
| quote | String | none | A nice story presented to the player when they research this tech |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this technology grants |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#Civilopedia-text) |
| Attribute | Type | Default | Notes |
|-----------------|-----------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| row | Integer | 0 | Vertical placement in the Tech Tree, must be unique per column |
| cost | Integer | [Column techCost](#column-structure) | The amount of science required to research this tech |
| prerequisites | List of Strings | empty | A list of the names of techs that are prerequisites of this tech. Only direct prerequisites are necessary |
| quote | String | none | A nice story presented to the player when they research this tech |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this technology grants |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#Civilopedia-text) |

View File

@ -8,22 +8,22 @@ This file contains the base terrains, terrain features and natural wonders that
Each terrain entry has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | [^A] |
| type | Enum | Required | Land, Water, TerrainFeature, NaturalWonder [^B] |
| occursOn | List of Strings | none | Only for terrain features and Natural Wonders: The baseTerrain it can be placed on |
| turnsInto | String | none | Only for NaturalWonder: the base terrain is changed to this after placing the Natural Wonder |
| weight | Integer | 10 | Only for NaturalWonder: _relative_ weight of being picked by the map generator |
| [`<stats>`](#general-stat) | Float | 0 | Per-turn yield or bonus yield for the tile |
| overrideStats | Boolean | false | If true, a feature's yields replace any yield from underlying terrain instead of adding to it |
| unbuildable | Boolean | false | If true, nothing can be built here - not even resource improvements |
| impassable | Boolean | false | No unit can enter unless it has a special unique |
| movementCost | Integer | 1 | Base movement cost |
| defenceBonus | Float | 0 | Combat bonus for units being attacked here |
| RGB | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | Gold | RGB color for 'Default' tileset display |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this terrain has |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| Attribute | Type | Default | Notes |
|----------------------------|---------------------------------------------------------------------|----------|-----------------------------------------------------------------------------------------------|
| name | String | Required | [^A] |
| type | Enum | Required | Land, Water, TerrainFeature, NaturalWonder [^B] |
| occursOn | List of Strings | none | Only for terrain features and Natural Wonders: The baseTerrain it can be placed on |
| turnsInto | String | none | Only for NaturalWonder: the base terrain is changed to this after placing the Natural Wonder |
| weight | Integer | 10 | Only for NaturalWonder: _relative_ weight of being picked by the map generator |
| [`<stats>`](#general-stat) | Float | 0 | Per-turn yield or bonus yield for the tile |
| overrideStats | Boolean | false | If true, a feature's yields replace any yield from underlying terrain instead of adding to it |
| unbuildable | Boolean | false | If true, nothing can be built here - not even resource improvements |
| impassable | Boolean | false | No unit can enter unless it has a special unique |
| movementCost | Integer | 1 | Base movement cost |
| defenceBonus | Float | 0 | Combat bonus for units being attacked here |
| RGB | [List of 3× Integer](5-Miscellaneous-JSON-files.md#rgb-colors-list) | Gold | RGB color for 'Default' tileset display |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this terrain has |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
[^A]: Some names have special meanings. `Grassland` is used as fallback in some cases - e.g. Civilopedia prefers to displays a TerrainFeature on top of it, unless `occursOn` is not empty and does not contain it.
`River` is hardcoded to be used to look up a [Stats](../../uniques.md#global-uniques) unique to determine the bonuses an actual River provides (remember, rivers live on the edges not as terrain).
@ -40,17 +40,17 @@ Note that improvements have two visual representations - icon and pixel graphic
Each improvement has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | [^A] |
| terrainsCanBeBuiltOn | List of Strings | empty | Terrains that this improvement can be built on [^B]. Removable terrain features will need to be removed before building an improvement [^C]. Must be in [Terrains.json](#terrainsjson) |
| techRequired | String | none | The name of the technology required to build this improvement |
| uniqueTo | String | none | The name of the nation this improvement is unique for |
| [`<stats>`](#stats) | Integer | 0 | Per-turn bonus yield for the tile |
| turnsToBuild | Integer | -1 | Number of turns a worker spends building this. If -1, the improvement is unbuildable [^D]. If 0, the improvement is always built in one turn |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this improvement has |
| shortcutKey | String | none | Keyboard binding. Currently, only a single character is allowed (no function keys or Ctrl combinations) |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| Attribute | Type | Default | Notes |
|----------------------|-----------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | [^A] |
| terrainsCanBeBuiltOn | List of Strings | empty | Terrains that this improvement can be built on [^B]. Removable terrain features will need to be removed before building an improvement [^C]. Must be in [Terrains.json](#terrainsjson) |
| techRequired | String | none | The name of the technology required to build this improvement |
| uniqueTo | String | none | The name of the nation this improvement is unique for |
| [`<stats>`](#stats) | Integer | 0 | Per-turn bonus yield for the tile |
| turnsToBuild | Integer | -1 | Number of turns a worker spends building this. If -1, the improvement is unbuildable [^D]. If 0, the improvement is always built in one turn |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this improvement has |
| shortcutKey | String | none | Keyboard binding. Currently, only a single character is allowed (no function keys or Ctrl combinations) |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
[^A]: Special improvements: Road, Railroad, Remove \*, Cancel improvement order, City ruins, City center, Barbarian encampment - these have special meanings hardcoded to their names.
[^B]: Improvements with an empty `terrainsCanBeBuiltOn` list and positive `turnsToBuild` value can only be built on [resources](#tileresourcesjson) with `improvedBy` or `improvement` that contains the corresponding improvement.
@ -69,18 +69,18 @@ Note also that resources have two visual representations - icon and pixel graphi
Each resource has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| resourceType | Enum | Bonus | Bonus, Luxury or Strategic |
| terrainsCanBeFoundOn | List of Strings | empty | Terrains that this resource can be found on. Must be in [Terrains.json](#terrainsjson) |
| [`<stats>`](#stats) | Integer | 0 | Per-turn bonus yield for the tile |
| improvementStats | Object | none | The additional yield when improved, see [specialized stats](3-Map-related-JSON-files.md#specialized-stats)|
| revealedBy | String | none | The technology name required to see, work and improve this resource |
| improvedBy | List of strings | empty | The improvements required for obtaining this resource. Must be in [TileImprovements.json](#tileimprovementsjson) |
| improvement | String | none | The improvement required to obtain this resource. Must be in [TileImprovements.json](#tileimprovementsjson) (redundant due to `improvedBy`) |
| unique | List of Strings | empty | List of [unique abilities](../../uniques) this resource has |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| Attribute | Type | Default | Notes |
|----------------------|-----------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| resourceType | Enum | Bonus | Bonus, Luxury or Strategic |
| terrainsCanBeFoundOn | List of Strings | empty | Terrains that this resource can be found on. Must be in [Terrains.json](#terrainsjson) |
| [`<stats>`](#stats) | Integer | 0 | Per-turn bonus yield for the tile |
| improvementStats | Object | none | The additional yield when improved, see [specialized stats](3-Map-related-JSON-files.md#specialized-stats) |
| revealedBy | String | none | The technology name required to see, work and improve this resource |
| improvedBy | List of strings | empty | The improvements required for obtaining this resource. Must be in [TileImprovements.json](#tileimprovementsjson) |
| improvement | String | none | The improvement required to obtain this resource. Must be in [TileImprovements.json](#tileimprovementsjson) (redundant due to `improvedBy`) |
| unique | List of Strings | empty | List of [unique abilities](../../uniques) this resource has |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
## Ruins.json
@ -90,13 +90,13 @@ This optional file contains the possible rewards ancient ruins give. If omitted,
Each of the objects in the file represents a single reward you can get from ruins. It has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | Name of the ruins. Never shown to the user, but they have to be distinct |
| notification | String | Required | Notification added to the user when this reward is chosen. If omitted, an empty notification is shown. Some notifications may have parameters, refer to the table below. |
| weight | Integer (≥0) | 1 | _Relative_ weight this reward is chosen next [^E] |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) that will trigger when entering the ruins. If more than 1 unique is added, the notification will be shown multiple times due to a bug (may be outdated) |
| excludedDifficulties | List of Strings | empty | A list of all difficulties on which this reward may _not_ be awarded |
| Attribute | Type | Default | Notes |
|----------------------|-----------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | Name of the ruins. Never shown to the user, but they have to be distinct |
| notification | String | Required | Notification added to the user when this reward is chosen. If omitted, an empty notification is shown. Some notifications may have parameters, refer to the table below. |
| weight | Integer (≥0) | 1 | _Relative_ weight this reward is chosen next [^E] |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) that will trigger when entering the ruins. If more than 1 unique is added, the notification will be shown multiple times due to a bug (may be outdated) |
| excludedDifficulties | List of Strings | empty | A list of all difficulties on which this reward may _not_ be awarded |
[^E]: The exact algorithm for choosing a reward is the following:
@ -109,14 +109,14 @@ Each of the objects in the file represents a single reward you can get from ruin
Some of the rewards ruins can give will have results that are not deterministic when writing it in the JSON, so creating a good notification for it would be impossible. An example for this would be the "Gain [50]-[100] [Gold]" unique, which will give a random amount of gold. For this reason, we allow some notifications to have parameters, in which values will be filled, such as "You found [goldAmount] gold in the ruins!". All the uniques which have this property can be found below.
<!-- (need to update) -->
| Unique | Parameters |
| ------ | ---------- |
| Free [] found in the ruins | The name of the unit will be filled in the notification, including unique units of the nation |
| [] population in a random city | The name of the city to which the population is added will be filled in the notification |
| Gain []-[] [] | The exact amount of the stat gained will be filled in the notification |
| Unique | Parameters |
|--------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Free [] found in the ruins | The name of the unit will be filled in the notification, including unique units of the nation |
| [] population in a random city | The name of the city to which the population is added will be filled in the notification |
| Gain []-[] [] | The exact amount of the stat gained will be filled in the notification |
| [] free random reasearchable Tech(s) from the [] | The notification must have placeholders equal to the number of techs granted this way. Each of the names of these free techs will be filled in the notification |
| Gain enough Faith for a Pantheon | The amount of faith gained is filled in the notification |
| Gain enough Faith for []% of a Great Prophet | The amount of faith gained is filled in the notification |
| Gain enough Faith for a Pantheon | The amount of faith gained is filled in the notification |
| Gain enough Faith for []% of a Great Prophet | The amount of faith gained is filled in the notification |
### Specific uniques
@ -132,16 +132,16 @@ A few uniques can be added to ancient ruin effects to modify when they can be ea
A mod can define new Tilesets or add to existing ones, namely FantasyHex. There is one json file per Tileset, named same as the Tileset, and placed in a subfolder named "TileSets" relative to the other json files. This is called TileSetConfig and has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| [useColorAsBaseTerrain](../../Creating-a-custom-tileset.md#useColorAsBaseTerrain) | Boolean | false | |
| [useSummaryImages](../../Creating-a-custom-tileset.md#useSummaryImages) | Boolean | false | |
| [unexploredTileColor](../../Creating-a-custom-tileset.md#unexploredTileColor) | Color | Dark Gray | `{"r":0.25,"g":0.25,"b":0.25,"a":1}` |
| [fogOfWarColor](../../Creating-a-custom-tileset.md#fogOfWarColor) | Color | Black | `{"r":0,"g":0,"b":0,"a":1}` |
| [fallbackTileSet](../../Creating-a-custom-tileset.md#fallbackTileSet) | String | "FantasyHex" | null to disable |
| [tileScale](../../Creating-a-custom-tileset.md#tileScale) | Float | 1.0 | The scale of all tiles. Can be used to increase or decrease the size of every tile |
| [tileScales](../../Creating-a-custom-tileset.md#tileScales) | Object | empty | Used by the "Minimal" tileset to scale all its tiles except the base terrain down. Overrides `tileScale` value for specified terrain |
| [ruleVariants](../../Creating-a-custom-tileset.md#ruleVariants) | Object | empty | [See here](#layering-images) |
| Attribute | Type | Default | Notes |
|-----------------------------------------------------------------------------------|---------|--------------|--------------------------------------------------------------------------------------------------------------------------------------|
| [useColorAsBaseTerrain](../../Creating-a-custom-tileset.md#useColorAsBaseTerrain) | Boolean | false | |
| [useSummaryImages](../../Creating-a-custom-tileset.md#useSummaryImages) | Boolean | false | |
| [unexploredTileColor](../../Creating-a-custom-tileset.md#unexploredTileColor) | Color | Dark Gray | `{"r":0.25,"g":0.25,"b":0.25,"a":1}` |
| [fogOfWarColor](../../Creating-a-custom-tileset.md#fogOfWarColor) | Color | Black | `{"r":0,"g":0,"b":0,"a":1}` |
| [fallbackTileSet](../../Creating-a-custom-tileset.md#fallbackTileSet) | String | "FantasyHex" | null to disable |
| [tileScale](../../Creating-a-custom-tileset.md#tileScale) | Float | 1.0 | The scale of all tiles. Can be used to increase or decrease the size of every tile |
| [tileScales](../../Creating-a-custom-tileset.md#tileScales) | Object | empty | Used by the "Minimal" tileset to scale all its tiles except the base terrain down. Overrides `tileScale` value for specified terrain |
| [ruleVariants](../../Creating-a-custom-tileset.md#ruleVariants) | Object | empty | [See here](#layering-images) |
### Layering images

View File

@ -8,29 +8,29 @@ This file should contain a list of all the units, both military and civilian, th
Each unit has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| unitType | String | Required | The type of the unit. Must be in [UnitTypes.json](#unittypesjson) |
| cost | Integer | -1 | The amount of production required to build this unit. The production needed is always positive |
| movement | Integer | 0 | The amount of movement points the unit has by |
| strength | Integer | 0 | The melee attack and defensive strength of the unit. If this and rangedStrength are ommited or 0, the unit will be a civilian |
| rangedStrength | Integer | 0 | The ranged attack strength of the unit. If omitted, the unit cannot ranged attack. If used, strength must be set too. |
| religiousStrength | Integer | 0 | The religious attack and defensive strength of the unit |
| range | Integer | 2 | The range from which ranged attacks can be preformed |
| interceptRange | Integer | 0 | Air units attacking within in this range will be intercepted |
| requiredTech | String | none | The tech required to build this unit. Must be in [Techs.json](2-Civilization-related-JSON-files.md#techsjson) |
| obsoleteTech | String | none | After researching this tech, the unit can no longer be build. Must be in [Techs.json](2-Civilization-related-JSON-files.md#techsjson) |
| requiredResource | String | none | Resource that is consumed by building this unit. Must be in [TileResources.json](3-Map-related-JSON-files.md#tileresourcesjson) |
| upgradesTo | String | none | Unit that this unit can upgrade to when it is available. Must be in [Units.json](#unitsjson) |
| replaces | String | none | If this unit is unique to a nation, this is the unit it replaces. Must be in [Units.json](#unitsjson) |
| uniqueTo | String | none | The nation that this unit is unique to. Must be in [Nations.json](2-Civilization-related-JSON-files.md#nationsjson) |
| hurryCostModifier | Integer | 0 | If this unit is bought for gold, its price is increased by so much percent |
| promotions | List of Strings | empty | A list of all the promotions the unit automatically receives upon being built. Each promotion must be in [UnitPromotions.json](#unitpromotionsjson) |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this unit has |
| replacementTextForUniques | String | none | If provided, this will be displayed instead of the list of uniques. Can be used for better formatting. |
| attackSound | String | none | The sound that is to be played when this unit attacks. For possible values, see [Sounds](../../Images-and-Audio.md#sounds)
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| Attribute | Type | Default | Notes |
|---------------------------|-----------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| unitType | String | Required | The type of the unit. Must be in [UnitTypes.json](#unittypesjson) |
| cost | Integer | -1 | The amount of production required to build this unit. The production needed is always positive |
| movement | Integer | 0 | The amount of movement points the unit has by |
| strength | Integer | 0 | The melee attack and defensive strength of the unit. If this and rangedStrength are ommited or 0, the unit will be a civilian |
| rangedStrength | Integer | 0 | The ranged attack strength of the unit. If omitted, the unit cannot ranged attack. If used, strength must be set too. |
| religiousStrength | Integer | 0 | The religious attack and defensive strength of the unit |
| range | Integer | 2 | The range from which ranged attacks can be preformed |
| interceptRange | Integer | 0 | Air units attacking within in this range will be intercepted |
| requiredTech | String | none | The tech required to build this unit. Must be in [Techs.json](2-Civilization-related-JSON-files.md#techsjson) |
| obsoleteTech | String | none | After researching this tech, the unit can no longer be build. Must be in [Techs.json](2-Civilization-related-JSON-files.md#techsjson) |
| requiredResource | String | none | Resource that is consumed by building this unit. Must be in [TileResources.json](3-Map-related-JSON-files.md#tileresourcesjson) |
| upgradesTo | String | none | Unit that this unit can upgrade to when it is available. Must be in [Units.json](#unitsjson) |
| replaces | String | none | If this unit is unique to a nation, this is the unit it replaces. Must be in [Units.json](#unitsjson) |
| uniqueTo | String | none | The nation that this unit is unique to. Must be in [Nations.json](2-Civilization-related-JSON-files.md#nationsjson) |
| hurryCostModifier | Integer | 0 | If this unit is bought for gold, its price is increased by so much percent |
| promotions | List of Strings | empty | A list of all the promotions the unit automatically receives upon being built. Each promotion must be in [UnitPromotions.json](#unitpromotionsjson) |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques) this unit has |
| replacementTextForUniques | String | none | If provided, this will be displayed instead of the list of uniques. Can be used for better formatting. |
| attackSound | String | none | The sound that is to be played when this unit attacks. For possible values, see [Sounds](../../Images-and-Audio.md#sounds) |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
## UnitPromotions.json
@ -44,15 +44,15 @@ Remember, promotions can be "bought" with XP, but also granted by the unit type,
Each promotion has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | See above for "I, II, III" progressions |
| prerequisites | List of Strings | empty | Prerequisite promotions |
| column | Integer | Optional | Determines placement order on the promotion picker screen. Name is historical, these coordinates no longer control placement directly. Promotions without coordinates are ensured to be placed last. (…) |
| row | Integer | Optional | … In base mods without any coordinates, promotions without prerequisites are sorted alphabetically and placed top down, the rest of the screen will structure the dependencies logically. If your mod has a "Heal instantly", it is suggested to use row=0 to place it on top |
| unitTypes | List of Strings | empty | The unit types for which this promotion applies as specified in [UnitTypes.json](#unittypesjson) |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques.md) this promotion grants to the units |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| Attribute | Type | Default | Notes |
|-----------------|-----------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | See above for "I, II, III" progressions |
| prerequisites | List of Strings | empty | Prerequisite promotions |
| column | Integer | Optional | Determines placement order on the promotion picker screen. Name is historical, these coordinates no longer control placement directly. Promotions without coordinates are ensured to be placed last. (…) |
| row | Integer | Optional | … In base mods without any coordinates, promotions without prerequisites are sorted alphabetically and placed top down, the rest of the screen will structure the dependencies logically. If your mod has a "Heal instantly", it is suggested to use row=0 to place it on top |
| unitTypes | List of Strings | empty | The unit types for which this promotion applies as specified in [UnitTypes.json](#unittypesjson) |
| uniques | List of Strings | empty | List of [unique abilities](../../uniques.md) this promotion grants to the units |
| civilopediaText | List | empty | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
## UnitTypes.json
@ -63,8 +63,8 @@ Civilian, Melee, Ranged, Scout, Mounted, Armor, Siege, WaterCivilian, WaterMelee
Each unit type has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| movementType | Enum | Required | The domain through which the unit moves. Allowed values: "Water", "Land", "Air" |
| uniques | List of String | none | List of [unique abilities](../../uniques.md) this promotion grants to units of this type |
| Attribute | Type | Default | Notes |
|--------------|----------------|----------|------------------------------------------------------------------------------------------|
| name | String | Required | |
| movementType | Enum | Required | The domain through which the unit moves. Allowed values: "Water", "Land", "Air" |
| uniques | List of String | none | List of [unique abilities](../../uniques.md) this promotion grants to units of this type |

View File

@ -8,35 +8,34 @@ This file defines the difficulty levels a player can choose when starting a new
Each difficulty level has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| baseHappiness | Integer | 0 | |
| extraHappinessPerLuxury | Float | 0 | |
| researchCostModifier | Float | 1 | |
| unitCostModifier | Float | 1 | |
| unitSupplyBase | Integer | 5 | |
| unitSupplyPerCity | Integer | 2 | |
| buildingCostModifier | Float | 1 | |
| policyCostModifier | Float | 1 | |
| unhappinessModifier | Float | 1 | |
| barbarianBonus | Float | 0 | |
| barbarianSpawnDelay | Integer | 0 | |
| playerBonusStartingUnits | List of Strings | empty | Can also be 'Era Starting Unit', maps to `startingMilitaryUnit` of the Eras file. All other units must be in [Units.json](4-Unit-related-JSON-files.md#Units.json). Applies only to human player civs |
| aiCityGrowthModifier | Float | 1 | |
| aiUnitCostModifier | Float | 1 | |
| aiBuildingCostModifier | Float | 1 | |
| aiWonderCostModifier | Float | 1 | |
| aiBuildingMaintenanceModifier | Float | 1 | |
| aiUnitMaintenanceModifier | Float | 1 | |
| aiUnitSupplyModifier | Integer | 5 | |
| aiFreeTechs | List of Strings | empty | Must be in [Techs.json](2-Civilization-related-JSON-files.md#techsjson) |
| aiMajorCivBonusStartingUnits | List of Strings | empty | Same rules as playerBonusStartingUnits, See above. Applies only to AI major civs |
| aiCityStateBonusStartingUnits | List of Strings | empty | Same rules as playerBonusStartingUnits, See above. Applies only to city-state civs |
| aiUnhappinessModifier | Float | 1 | |
| turnBarbariansCanEnterPlayerTiles | Integer | 0 | |
| clearBarbarianCampReward | Integer | 25 | |
<!-- | aisExchangeTechs | Boolean | | Unimplemented | -->
| Attribute | Type | Default | Notes |
|-----------------------------------|------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| baseHappiness | Integer | 0 | |
| extraHappinessPerLuxury | Float | 0 | |
| researchCostModifier | Float | 1 | |
| unitCostModifier | Float | 1 | |
| unitSupplyBase | Integer | 5 | |
| unitSupplyPerCity | Integer | 2 | |
| buildingCostModifier | Float | 1 | |
| policyCostModifier | Float | 1 | |
| unhappinessModifier | Float | 1 | |
| barbarianBonus | Float | 0 | |
| barbarianSpawnDelay | Integer | 0 | |
| playerBonusStartingUnits | List of Strings | empty | Can also be 'Era Starting Unit', maps to `startingMilitaryUnit` of the Eras file. All other units must be in [Units.json](4-Unit-related-JSON-files.md#Units.json). Applies only to human player civs |
| aiCityGrowthModifier | Float | 1 | |
| aiUnitCostModifier | Float | 1 | |
| aiBuildingCostModifier | Float | 1 | |
| aiWonderCostModifier | Float | 1 | |
| aiBuildingMaintenanceModifier | Float | 1 | |
| aiUnitMaintenanceModifier | Float | 1 | |
| aiUnitSupplyModifier | Integer | 5 | |
| aiFreeTechs | List of Strings | empty | Must be in [Techs.json](2-Civilization-related-JSON-files.md#techsjson) |
| aiMajorCivBonusStartingUnits | List of Strings | empty | Same rules as playerBonusStartingUnits, See above. Applies only to AI major civs |
| aiCityStateBonusStartingUnits | List of Strings | empty | Same rules as playerBonusStartingUnits, See above. Applies only to city-state civs |
| aiUnhappinessModifier | Float | 1 | |
| turnBarbariansCanEnterPlayerTiles | Integer | 0 | |
| clearBarbarianCampReward | Integer | 25 | |
## Eras.json
@ -46,26 +45,26 @@ This file should contain all the era's you want to use in your mod.
Each era can have the following attributes:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | |
| researchAgreementCost | Integer (≥0) | 300 | Cost of research agreements when the most technologically advanced civ is in this era |
| iconRGB | [List of 3× Integer](#rgb-colors-list) | white | RGB color that icons for technologies of this era should have in the Tech screen |
| startingSettlerCount | Integer (≥0) | 1 | Amount of settler units that should be spawned when starting a game in this era (setting this to zero is discouraged [^1]) |
| startingSettlerUnit | String | "Settler" | Name of the unit that should be used for the previous field. Must be in [Units.json](4-Unit-related-JSON-files.md#unitsjson), or a unit with the "Founds a new city" unique must exist |
| startingWorkerCount | Integer (≥0) | 0 | Amount of worker units that should be spawned when starting a game in this era |
| startingWorkerUnit | String | "Worker" | Name of the unit that should be used for the previous field. If startingWorkerCount>0, then it must exist in [Units.json](4-Unit-related-JSON-files.md#unitsjson), or a unit with the "Can build [filter] improvements on tiles" unique must exist |
| startingMilitaryUnitCount | Integer (≥0) | 1 | Amount of military units that should be spawned when starting a game in this era |
| startingMilitaryUnit | String | "Warrior" | Name of the unit that should be used for the previous field. Must be in [Units.json](4-Unit-related-JSON-files.md#unitsjson) |
| startingGold | Integer (≥0) | 0 | Amount of gold each civ should receive when starting a game in this era |
| startingCulture | Integer (≥0) | 0 | Amount of culture each civ should receive when starting a game in this era |
| settlerPopulation | Integer (>0) | 1 | Amount of population each city should have when settled when starting a game in this era |
| settlerBuildings | List of Strings | empty | Buildings that should automatically be built whenever a city is settled when starting a game in this era |
| startingObsoleteWonders | List of Strings | empty | Wonders (and technically buildings) that should be impossible to built when starting a game in this era. Used in the base game to remove all wonders older than 2 era's |
| baseUnitBuyCost | Integer | 200 | Default value used for the unique `Can be purchased with [stat] [cityFilter]` |
| embarkDefense | Integer | 3 | Default defense for embarked unit in this era |
| startPercent | Integer | 0 | When starting, percentage (\[0\]%-\[100\]%) of turns skipped in total turns specified in [Speed.json](#speedsjson) |
| citySound | String | "cityClassical" | Sound used when city is founded in this era |
| Attribute | Type | Default | Notes |
|---------------------------|----------------------------------------|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | String | Required | |
| researchAgreementCost | Integer (≥0) | 300 | Cost of research agreements when the most technologically advanced civ is in this era |
| iconRGB | [List of 3× Integer](#rgb-colors-list) | white | RGB color that icons for technologies of this era should have in the Tech screen |
| startingSettlerCount | Integer (≥0) | 1 | Amount of settler units that should be spawned when starting a game in this era (setting this to zero is discouraged [^1]) |
| startingSettlerUnit | String | "Settler" | Name of the unit that should be used for the previous field. Must be in [Units.json](4-Unit-related-JSON-files.md#unitsjson), or a unit with the "Founds a new city" unique must exist |
| startingWorkerCount | Integer (≥0) | 0 | Amount of worker units that should be spawned when starting a game in this era |
| startingWorkerUnit | String | "Worker" | Name of the unit that should be used for the previous field. If startingWorkerCount>0, then it must exist in [Units.json](4-Unit-related-JSON-files.md#unitsjson), or a unit with the "Can build [filter] improvements on tiles" unique must exist |
| startingMilitaryUnitCount | Integer (≥0) | 1 | Amount of military units that should be spawned when starting a game in this era |
| startingMilitaryUnit | String | "Warrior" | Name of the unit that should be used for the previous field. Must be in [Units.json](4-Unit-related-JSON-files.md#unitsjson) |
| startingGold | Integer (≥0) | 0 | Amount of gold each civ should receive when starting a game in this era |
| startingCulture | Integer (≥0) | 0 | Amount of culture each civ should receive when starting a game in this era |
| settlerPopulation | Integer (>0) | 1 | Amount of population each city should have when settled when starting a game in this era |
| settlerBuildings | List of Strings | empty | Buildings that should automatically be built whenever a city is settled when starting a game in this era |
| startingObsoleteWonders | List of Strings | empty | Wonders (and technically buildings) that should be impossible to built when starting a game in this era. Used in the base game to remove all wonders older than 2 era's |
| baseUnitBuyCost | Integer | 200 | Default value used for the unique `Can be purchased with [stat] [cityFilter]` |
| embarkDefense | Integer | 3 | Default defense for embarked unit in this era |
| startPercent | Integer | 0 | When starting, percentage (\[0\]%-\[100\]%) of turns skipped in total turns specified in [Speed.json](#speedsjson) |
| citySound | String | "cityClassical" | Sound used when city is founded in this era |
[^1]: Successfully setting startingSettlerCount to zero in a mod (idea: conquer or die) is not easy. Some player-controlled settings require at least one Settler, through any source (see difficulties for other possible settler sources), or you won't be able to start a game: Once City Challenge requires one for all players, and allowing any city-states requires one for those. Would also affect defeat rules.
@ -77,34 +76,34 @@ This file should contain all the speeds you want to use in your mod.
Each speed can have the following attributes:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | Name of the speed |
| modifier | Float (≥0) | 1.0 | Overall game speed modifier |
| productionCostModifier | Float (≥0) | `modifier` value | Scales production cost of units and buildings |
| goldCostModifier | Float (≥0) | `modifier` value | Scales gold costs |
| scienceCostModifier | Float (≥0) | `modifier` value | Scales science costs |
| cultureCostModifier | Float (≥0) | `modifier` value | Scales culture costs |
| faithCostModifier | Float (≥0) | `modifier` value | Scales faith costs |
| improvementBuildLengthModifier | Float (≥0) | `modifier` value | Scales the time it takes for a worker to build tile improvements |
| barbarianModifier | Float (≥0) | `modifier` value | Scales the time between barbarian spawns |
| goldGiftModifier | Float (≥0) | `modifier` value | Scales the influence gained from gifting gold to city-states |
| cityStateTributeScalingInterval | Float (≥0) | 6.5 | The number of turns it takes for the amount of gold a player demands from city-states to increase by 5 gold |
| goldenAgeLengthModifier | Float (≥0) | `modifier` value | Scales the length of golden ages |
| religiousPressureAdjacentCity | Integer (≥0) | 6 | Defines how much religious pressure a city exerts on nearby cities |
| peaceDealDuration | Integer (≥0) | 10 | The number of turns a peace deal lasts |
| dealDuration | Integer (≥0) | 30 | The number of turns a non-peace deal (research agreement, open borders, etc.) lasts |
| startYear | Float | -4000 | The start year of the game (negative is BC/BCE) |
| turns | List | Required | List of time interval per turn, [see below](#time-interval-per-turn) |
| Attribute | Type | Default | Notes |
|---------------------------------|--------------|------------------|-------------------------------------------------------------------------------------------------------------|
| name | String | Required | Name of the speed |
| modifier | Float (≥0) | 1.0 | Overall game speed modifier |
| productionCostModifier | Float (≥0) | `modifier` value | Scales production cost of units and buildings |
| goldCostModifier | Float (≥0) | `modifier` value | Scales gold costs |
| scienceCostModifier | Float (≥0) | `modifier` value | Scales science costs |
| cultureCostModifier | Float (≥0) | `modifier` value | Scales culture costs |
| faithCostModifier | Float (≥0) | `modifier` value | Scales faith costs |
| improvementBuildLengthModifier | Float (≥0) | `modifier` value | Scales the time it takes for a worker to build tile improvements |
| barbarianModifier | Float (≥0) | `modifier` value | Scales the time between barbarian spawns |
| goldGiftModifier | Float (≥0) | `modifier` value | Scales the influence gained from gifting gold to city-states |
| cityStateTributeScalingInterval | Float (≥0) | 6.5 | The number of turns it takes for the amount of gold a player demands from city-states to increase by 5 gold |
| goldenAgeLengthModifier | Float (≥0) | `modifier` value | Scales the length of golden ages |
| religiousPressureAdjacentCity | Integer (≥0) | 6 | Defines how much religious pressure a city exerts on nearby cities |
| peaceDealDuration | Integer (≥0) | 10 | The number of turns a peace deal lasts |
| dealDuration | Integer (≥0) | 30 | The number of turns a non-peace deal (research agreement, open borders, etc.) lasts |
| startYear | Float | -4000 | The start year of the game (negative is BC/BCE) |
| turns | List | Required | List of time interval per turn, [see below](#time-interval-per-turn) |
### Time interval per turn
The "turns" attribute defines the number of years passed between turns. The attribute consists of a list of hashmaps, each hashmaps in turn having 2 required attributes: "yearsPerTurn" (Float) and "untilTurn" (Integer)
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| yearsPerTurn | Integer | Required | Number of years passed between turns |
| untilTurn | Integer | Required | Which turn that this "speed" is active until (if it is the last object, this is ignored) |
| Attribute | Type | Default | Notes |
|--------------|---------|----------|------------------------------------------------------------------------------------------|
| yearsPerTurn | Integer | Required | Number of years passed between turns |
| untilTurn | Integer | Required | Which turn that this "speed" is active until (if it is the last object, this is ignored) |
The code below is an example of a valid "turns" definition and it specifies that the first 50 turns of a game last for 60 years each, then the next 30 turns (and any played after the 80th) last for 40 years each.
@ -129,26 +128,26 @@ Incompatibility filtering works so far between extension and base mods, but feel
The file can have the following attributes, not including the values Unciv sets automatically:
| Attribute | Type | | Notes |
| --------- | ---- | ------- | ----- |
| isBaseRuleset | Boolean | false | Replaces vanilla ruleset if true |
| uniques | List | empty | Mod-wide specials, [see here](../../uniques.md#modoptions-uniques) |
| techsToRemove | List | empty | List of [Technologies](2-Civilization-related-JSON-files.md#techsjson) or [technologyFilter](../../Unique-parameters.md#technologyfilter) to remove (isBaseRuleset=false only) |
| buildingsToRemove | List | empty | List of [Buildings or Wonders](2-Civilization-related-JSON-files.md#buildingsjson) or [buildingFilter](../../Unique-parameters.md#buildingfilter) to remove (isBaseRuleset=false only) |
| unitsToRemove | List | empty | List of [Units](4-Unit-related-JSON-files.md#unitsjson) or [unitFilter](../../Unique-parameters.md#baseunitfilter) to remove (isBaseRuleset=false only) |
| nationsToRemove | List | empty | List of [Nations](2-Civilization-related-JSON-files.md#nationsjson) or [nationFilter](../../Unique-parameters.md#nationfilter) to remove (isBaseRuleset=false only) |
| constants | Object | empty | See [ModConstants](#modconstants) |
| Attribute | Type | | Notes |
|-------------------|---------|-------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| isBaseRuleset | Boolean | false | Replaces vanilla ruleset if true |
| uniques | List | empty | Mod-wide specials, [see here](../../uniques.md#modoptions-uniques) |
| techsToRemove | List | empty | List of [Technologies](2-Civilization-related-JSON-files.md#techsjson) or [technologyFilter](../../Unique-parameters.md#technologyfilter) to remove (isBaseRuleset=false only) |
| buildingsToRemove | List | empty | List of [Buildings or Wonders](2-Civilization-related-JSON-files.md#buildingsjson) or [buildingFilter](../../Unique-parameters.md#buildingfilter) to remove (isBaseRuleset=false only) |
| unitsToRemove | List | empty | List of [Units](4-Unit-related-JSON-files.md#unitsjson) or [unitFilter](../../Unique-parameters.md#baseunitfilter) to remove (isBaseRuleset=false only) |
| nationsToRemove | List | empty | List of [Nations](2-Civilization-related-JSON-files.md#nationsjson) or [nationFilter](../../Unique-parameters.md#nationfilter) to remove (isBaseRuleset=false only) |
| constants | Object | empty | See [ModConstants](#modconstants) |
The values normally set automatically from github metadata are:
| Attribute | Type | | Notes |
| --------- | ---- | ------- | ----- |
| modUrl | String | | The github page the mod was downloaded from, or empty if a freely hosted zip was used |
| defaultBranch | String | master | The repo's default branch |
| author | String | | Repo owner |
| lastUpdated | String | | ISO date |
| modSize | Integer | 0 | Size in kB |
| topics | List | empty | A list of "unciv-mod-*" github topics |
| Attribute | Type | | Notes |
|---------------|---------|--------|---------------------------------------------------------------------------------------|
| modUrl | String | | The github page the mod was downloaded from, or empty if a freely hosted zip was used |
| defaultBranch | String | master | The repo's default branch |
| author | String | | Repo owner |
| lastUpdated | String | | ISO date |
| modSize | Integer | 0 | Size in kB |
| topics | List | empty | A list of "unciv-mod-*" github topics |
To clarify: When your Mod is distributed via github, including these in the Mod repo has no effect.
However, when a Mod is distributed _without_ a github repository, these values can and _should_ be set by the author in the distributed `ModOptions.json`.
@ -159,31 +158,31 @@ Stored in ModOptions.constants, this is a collection of constants used internall
This is the only structure that is _merged_ field by field from mods, not overwritten, so you can change XP from Barbarians in one mod
and city distance in another. In case of conflicts, there is no guarantee which mod wins, only that _default_ values are ignored.
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| maxXPfromBarbarians | Int | 30 | [^A] |
| cityStrengthBase | Float | 8.0 | [^B] |
| cityStrengthPerPop | Float | 0.4 | [^B] |
| cityStrengthFromTechsMultiplier | Float | 5.5 | [^B] |
| cityStrengthFromTechsExponent | Float | 2.8 | [^B] |
| cityStrengthFromTechsFullMultiplier | Float | 1.0 | [^B] |
| cityStrengthFromGarrison | Float | 0.2 | [^B] |
| unitSupplyPerPopulation | Float | 0.5 | [^C] |
| minimalCityDistance | Int | 3 | [^D] |
| minimalCityDistanceOnDifferentContinents | Int | 2 | [^D] |
| unitUpgradeCost | Object | [See below](#unitupgradecost) | [^J] |
| naturalWonderCountMultiplier | Float | 0.124 | [^E] |
| naturalWonderCountAddedConstant | Float | 0.1 | [^E] |
| ancientRuinCountMultiplier | Float | 0.02 | [^F] |
| spawnIceBelowTemperature | Float | -0.8 | [^G] |
| maxLakeSize | Int | 10 | [^H] |
| riverCountMultiplier | Float | 0.01 | [^I] |
| minRiverLength | Int | 5 | [^I] |
| maxRiverLength | Int | 666 | [^I] |
| religionLimitBase | Int | 1 | [^K] |
| religionLimitMultiplier | Float | 0.5 | [^K] |
| pantheonBase | Int | 10 | [^L] |
| pantheonGrowth | Int | 5 | [^L] |
| Attribute | Type | Default | Notes |
|------------------------------------------|--------|-------------------------------|-------|
| maxXPfromBarbarians | Int | 30 | [^A] |
| cityStrengthBase | Float | 8.0 | [^B] |
| cityStrengthPerPop | Float | 0.4 | [^B] |
| cityStrengthFromTechsMultiplier | Float | 5.5 | [^B] |
| cityStrengthFromTechsExponent | Float | 2.8 | [^B] |
| cityStrengthFromTechsFullMultiplier | Float | 1.0 | [^B] |
| cityStrengthFromGarrison | Float | 0.2 | [^B] |
| unitSupplyPerPopulation | Float | 0.5 | [^C] |
| minimalCityDistance | Int | 3 | [^D] |
| minimalCityDistanceOnDifferentContinents | Int | 2 | [^D] |
| unitUpgradeCost | Object | [See below](#unitupgradecost) | [^J] |
| naturalWonderCountMultiplier | Float | 0.124 | [^E] |
| naturalWonderCountAddedConstant | Float | 0.1 | [^E] |
| ancientRuinCountMultiplier | Float | 0.02 | [^F] |
| spawnIceBelowTemperature | Float | -0.8 | [^G] |
| maxLakeSize | Int | 10 | [^H] |
| riverCountMultiplier | Float | 0.01 | [^I] |
| minRiverLength | Int | 5 | [^I] |
| maxRiverLength | Int | 666 | [^I] |
| religionLimitBase | Int | 1 | [^K] |
| religionLimitMultiplier | Float | 0.5 | [^K] |
| pantheonBase | Int | 10 | [^L] |
| pantheonGrowth | Int | 5 | [^L] |
Legend:
@ -218,13 +217,13 @@ Legend:
These values are not merged individually, only the entire sub-structure is.
| Attribute | Type | | Notes |
| --------- | ---- | ------- | ----- |
| base | Float | 10 | |
| perProduction | Float | 2 | |
| eraMultiplier | Float | 0 | |
| exponent | Float | 1 | |
| roundTo | Int | 5 | |
| Attribute | Type | | Notes |
|---------------|-------|----|-------|
| base | Float | 10 | |
| perProduction | Float | 2 | |
| eraMultiplier | Float | 0 | |
| exponent | Float | 1 | |
| roundTo | Int | 5 | |
The formula for the gold cost of a unit upgrade is (rounded down to a multiple of `roundTo`):
(
@ -248,14 +247,15 @@ When extension rulesets define GlobalUniques, all uniques are merged. At the mom
**Note a Base Ruleset mod can define a "welcome page" here by adding a "Tutorial" with a name equal to the name of the mod!**
As an exception to the general rule, this file in a Base Ruleset mod will not _replace_ the default, but add to it like extension mods do.
Also, place it under `<mod>/jsons/` normally even if the original is found one level above the vanilla jsons.
Also, place it under `<mod>/jsons/` normally even if the original is found one level above the vanilla jsons.
Each tutorial has the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | Entry name |
| civilopediaText | List | Optional | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| steps | List of Strings | Optional | Plain text |
| Attribute | Type | Default | Notes |
|-----------------|-----------------|----------|-------------------------------------------------------------------------------|
| name | String | Required | Entry name |
| civilopediaText | List | Optional | See [civilopediaText chapter](5-Miscellaneous-JSON-files.md#civilopedia-text) |
| steps | List of Strings | Optional | Plain text |
If an entry contains both `steps` and `civilopediaText` attributes, the `civilopediaText` is shown first.
@ -268,31 +268,31 @@ Most of the file contains of strings that are shown to the user in the victory s
Each victory have the following structure:
| Attribute | Type | Default | Notes |
| --------- | ---- | ------- | ----- |
| name | String | Required | Name of the victory |
| victoryScreenHeader | String | none | Shown in the footer of the victory in the `our status` in the victory screen |
| victoryString | String | none | Shown in the footer of the victory screen when you won the game with this victory |
| defeatString | String | none | Shown in the footer of the victory screen when someone else won the game with this victory |
| hiddenInVictoryScreen | Boolean | false | Whether progress of this victory is hidden in the victory screen |
| requiredSpaceshipParts | List of Strings | empty | What spaceship parts must be added to the capital for the corresponding milestone |
| Milestones | List of Strings | Required | List of milestones that must be accomplished to win, [see below](#milestones) |
| Attribute | Type | Default | Notes |
|------------------------|-----------------|----------|--------------------------------------------------------------------------------------------|
| name | String | Required | Name of the victory |
| victoryScreenHeader | String | none | Shown in the footer of the victory in the `our status` in the victory screen |
| victoryString | String | none | Shown in the footer of the victory screen when you won the game with this victory |
| defeatString | String | none | Shown in the footer of the victory screen when someone else won the game with this victory |
| hiddenInVictoryScreen | Boolean | false | Whether progress of this victory is hidden in the victory screen |
| requiredSpaceshipParts | List of Strings | empty | What spaceship parts must be added to the capital for the corresponding milestone |
| Milestones | List of Strings | Required | List of milestones that must be accomplished to win, [see below](#milestones) |
### Milestones
Currently the following milestones are supported:
| Milestone | Requirement |
| --------- | ----------- |
| Build [building] | Build the building [building] in any city |
| Anyone should build [building] | Anyone must build the building [building] for all players to have this milestone |
| Add all [comment] in capital | Add all units in the `requiredSpaceshipParts` field of this victory to the capital |
| Destroy all players | You must be the only major civilization with any cities left |
| Capture all capitals | Capture all the original capitals of major civilizations in the game |
| Complete [amount] Policy branches | Fully complete at least [amount] policy branches |
| Win diplomatic vote | At any point in the game win a diplomatic vote (UN). You may lose afterwards and still retain this milestone |
| Become the world religion | Have your religion be the majority religion in a majority of cities of all major civs |
| Have highest score after max turns | Basically time victory. Enables the 'max turn' slider and calculates score when that amount is reached |
| Milestone | Requirement |
|------------------------------------|--------------------------------------------------------------------------------------------------------------|
| Build [building] | Build the building [building] in any city |
| Anyone should build [building] | Anyone must build the building [building] for all players to have this milestone |
| Add all [comment] in capital | Add all units in the `requiredSpaceshipParts` field of this victory to the capital |
| Destroy all players | You must be the only major civilization with any cities left |
| Capture all capitals | Capture all the original capitals of major civilizations in the game |
| Complete [amount] Policy branches | Fully complete at least [amount] policy branches |
| Win diplomatic vote | At any point in the game win a diplomatic vote (UN). You may lose afterwards and still retain this milestone |
| Become the world religion | Have your religion be the majority religion in a majority of cities of all major civs |
| Have highest score after max turns | Basically time victory. Enables the 'max turn' slider and calculates score when that amount is reached |
## Civilopedia text
@ -320,21 +320,21 @@ An example of the format is:
List of attributes - note not all combinations are valid:
| Attribute | Type | Description |
| --------- | ---- | ----------- |
| `text` | String | Text to display |
| `link` | String | Create link and icon, format: Category/Name or _external_ link ('http://','https://','mailto:') |
| `icon` | String | Show icon without linking, format: Category/Name |
| `extraImage` | String | Display an Image instead of text. Can be a path found in a texture atlas or or the name of a png or jpg in the ExtraImages folder |
| `imageSize` | Float | Size in world units of the [extraImage], the smaller coordinate is calculated preserving aspect ratio. available width |
| `header` | Integer | Header level. 1 means double text size and decreases from there |
| `size` | Integer | Text size, is 18. Use `size` or `header` but not both |
| `indent` | Integer | Indent level. 0 means text will follow icons, 1 aligns to the right of all icons, each further step is 30 units |
| `padding` | Float | Vertical padding between rows, 5 units |
| `color` | String | Sets text color, accepts names or 6/3-digit web colors (e.g. #FFA040) |
| `separator` | Boolean | Renders a separator line instead of text. Can be combined only with `color` and `size` (line width, default 2) |
| `starred` | Boolean | Decorates text with a star icon - if set, it receives the `color` instead of the text |
| `centered` | Boolean | Centers the line (and turns off automatic wrap). For an `extraImage`, turns on crop-to-content to equalize transparent borders |
| Attribute | Type | Description |
|--------------|---------|-----------------------------------------------------------------------------------------------------------------------------------|
| `text` | String | Text to display |
| `link` | String | Create link and icon, format: Category/Name or _external_ link ('http://','https://','mailto:') |
| `icon` | String | Show icon without linking, format: Category/Name |
| `extraImage` | String | Display an Image instead of text. Can be a path found in a texture atlas or or the name of a png or jpg in the ExtraImages folder |
| `imageSize` | Float | Size in world units of the [extraImage], the smaller coordinate is calculated preserving aspect ratio. available width |
| `header` | Integer | Header level. 1 means double text size and decreases from there |
| `size` | Integer | Text size, is 18. Use `size` or `header` but not both |
| `indent` | Integer | Indent level. 0 means text will follow icons, 1 aligns to the right of all icons, each further step is 30 units |
| `padding` | Float | Vertical padding between rows, 5 units |
| `color` | String | Sets text color, accepts names or 6/3-digit web colors (e.g. #FFA040) |
| `separator` | Boolean | Renders a separator line instead of text. Can be combined only with `color` and `size` (line width, default 2) |
| `starred` | Boolean | Decorates text with a star icon - if set, it receives the `color` instead of the text |
| `centered` | Boolean | Centers the line (and turns off automatic wrap). For an `extraImage`, turns on crop-to-content to equalize transparent borders |
The lines from json will 'surround' the automatically generated lines such that the latter are inserted just above the first json line carrying a link, if any. If no json lines have links, they will be inserted between the automatic title and the automatic info. This method may, however, change in the future.
@ -347,8 +347,8 @@ Certain objects can be specified to have its own unique color. The colors are de
Note: The default of some objects are [gdx color classes](https://javadoc.io/doc/com.badlogicgames.gdx/gdx/latest/com/badlogic/gdx/graphics/Color.html). The values of the constants are as follows:
| name | value |
| ---- | ----- |
| gold | [225, 215, 0] |
| name | value |
|-------|-----------------|
| gold | [225, 215, 0] |
| white | [255, 255, 255] |
| black | [0, 0, 0] |
| black | [0, 0, 0] |