Skip to content

其他 JSON 文件

Difficulties.json

链接到原始文件

此可选文件定义玩家在开始新游戏时可以选择的难度级别。

基础规则集模组可以省略文件或提供空列表,尽管至少需要一种难度,在这种情况下,它们继承来自 Vanilla 规则集的那些

每个难度级别具有以下结构:

属性类型默认值说明
nameString必需
baseHappinessInteger0
extraHappinessPerLuxuryFloat0
researchCostModifierFloat1
unitCostModifierFloat1
unitSupplyBaseInteger5
unitSupplyPerCityInteger2
buildingCostModifierFloat1
policyCostModifierFloat1
unhappinessModifierFloat1
barbarianBonusFloat0
barbarianSpawnDelayInteger0
playerBonusStartingUnitsList of Strings也可以是 'Era Starting Unit',映射到 Eras 文件的 startingMilitaryUnit。所有其他单位必须在 Units.json 中。仅适用于人类玩家文明
aiDifficultyLevelString从选择的难度对 AI 应用一些修饰符。诸如 unhappinessModifier 和 aiUnhappinessModifier 等修饰符会相乘堆叠。如果为空:默认为 "Chieftain" 或第一个可用的难度。
aiCityGrowthModifierFloat1
aiUnitCostModifierFloat1
aiBuildingCostModifierFloat1
aiWonderCostModifierFloat1
aiBuildingMaintenanceModifierFloat1
aiUnitMaintenanceModifierFloat1
aiUnitSupplyModifierInteger5
aiFreeTechsList of Strings必须在 Techs.json
aiMajorCivBonusStartingUnitsList of Strings与 playerBonusStartingUnits 相同的规则,请参阅上文。仅适用于 AI 主要文明
aiCityStateBonusStartingUnitsList of Strings与 playerBonusStartingUnits 相同的规则,请参阅上文。仅适用于城邦文明
aiUnhappinessModifierFloat1
turnBarbariansCanEnterPlayerTilesInteger0
clearBarbarianCampRewardInteger25
uniquesList of Strings选择此难度时将被视为 GlobalUniques 的一部分

Eras.json

链接到原始文件

此文件应包含你想要在模组中使用的所有时代。

每个时代可以具有以下属性:

属性类型默认值说明
nameString必需
researchAgreementCostInteger (≥0)300当科技最先进的文明处于此时代时,研究协议的成本
iconRGBList of 3× Integerwhite此时代的科技图标在科技屏幕中应具有的 RGB 颜色
startingSettlerCountInteger (≥0)1在此时代开始游戏时应生成的定居者单位数量(不建议将其设置为零 [^1])
startingSettlerUnitString"Settler"应用于前一个字段的单位名称。必须在 Units.json 中,或者必须存在具有 "Founds a new city" unique 的单位
startingWorkerCountInteger (≥0)0在此时代开始游戏时应生成的工人单位数量
startingWorkerUnitString"Worker"应用于前一个字段的单位名称。如果 startingWorkerCount>0,则它必须存在于 Units.json 中,或者必须存在具有 "Can build [filter] improvements on tiles" unique 的单位
startingMilitaryUnitCountInteger (≥0)1在此时代开始游戏时应生成的军事单位数量
startingMilitaryUnitString"Warrior"应用于前一个字段的单位名称。必须在 Units.json
startingGoldInteger (≥0)0每个文明在此时代开始游戏时应收到的金币数量
startingCultureInteger (≥0)0每个文明在此时代开始游戏时应收到的文化数量
settlerPopulationInteger (>0)1在此时代开始游戏时定居时每个城市应有的人口数量
settlerBuildingsList of Strings在此时代开始游戏时每当建立城市时应自动建造的建筑
startingObsoleteWondersList of Strings在此时代开始游戏时应无法建造的奇观(以及技术上建筑)。在基础游戏中用于移除所有早于 2 个时代的奇观
baseUnitBuyCostInteger200用于独特能力 "Can be purchased with [stat] [cityFilter]" 的默认值
embarkDefenseInteger3此时代中登船单位的默认防御力
startPercentInteger0开始时,在 Speed.json 中指定的总回合数中跳过的百分比([0]%-[100])
citySoundString"cityClassical"在此时代建立城市时使用的声音
uniquesList of Strings进入此时代后应用这批uniques作为等价的全局uniques

[^1]: 在模组中成功将 startingSettlerCount 设置为零(想法:征服或死亡)并不容易。某些玩家控制的设置需要至少一个定居者,通过任何来源(请参阅难度设置以了解其他可能的定居者来源),否则你将无法开始游戏:一旦城市挑战需要所有玩家都有一个,并且允许任何城邦需要那些城邦有一个。还会影响失败规则。

Speeds.json

链接到原始文件

此可选文件应包含你想要在模组中使用的所有速度。

基础规则集模组可以省略文件或提供空列表,尽管至少需要一种游戏速度,在这种情况下,它们继承来自 Vanilla 规则集的那些

每个速度可以具有以下属性:

属性类型默认值说明
nameString必需速度的名称
modifierFloat (≥0)1.0整体游戏速度修饰符
productionCostModifierFloat (≥0)modifier缩放单位和建筑的生产成本
goldCostModifierFloat (≥0)modifier缩放金币成本
scienceCostModifierFloat (≥0)modifier缩放科学成本
cultureCostModifierFloat (≥0)modifier缩放文化成本
faithCostModifierFloat (≥0)modifier缩放信仰成本
improvementBuildLengthModifierFloat (≥0)modifier缩放工人建造地块改良设施所需的时间
barbarianModifierFloat (≥0)modifier缩放野蛮人生成之间的时间
goldGiftModifierFloat (≥0)modifier缩放向城邦赠送金币获得的影响力
cityStateTributeScalingIntervalFloat (≥0)6.5玩家向城邦索要的金币数量增加 5 金币所需的回合数
goldenAgeLengthModifierFloat (≥0)modifier缩放黄金时代的长度
religiousPressureAdjacentCityInteger (≥0)6定义一个城市对附近城市施加的宗教压力
peaceDealDurationInteger (≥0)10和平协议持续的回合数
dealDurationInteger (≥0)30非和平协议(研究协议、开放边界等)持续的回合数
startYearFloat-4000游戏的起始年份(负数为公元前)
turnsList必需每回合的时间间隔列表,请参阅下文
uniquesList of Strings选择此速度时将被视为 GlobalUniques 的一部分

每回合时间间隔

"turns" 属性定义回合之间经过的年数。该属性由对象列表组成,每个对象具有 2 个必需属性:"yearsPerTurn"(Float)和 "untilTurn"(Integer)

属性类型默认值说明
yearsPerTurnInteger必需回合之间经过的年数
untilTurnInteger必需此间隔的结束(如果是最后一个对象,请参阅下文)

对于每一行,"yearsPerTurn" 应用于从 "untilTurn"-1 到 "untilTurn" 步骤。 列表中最后一个 "untilTurn" 在年份计算中被忽略,即如果游戏超过了该回合数,年份将继续按最后一个条目的 "yearsPerTurn" 增加。 但是,这在后期时代开始游戏时使用:Era.startPercent 相对于最后一个 "untilTurn"。

下面的代码是有效的 "turns" 定义的示例,它指定游戏的前 50 回合每回合持续 60 年,接下来的 30 回合(以及第 80 回合之后玩的任何回合)每回合持续 40 年。

json
"turns": [
    {"yearsPerTurn": 60, "untilTurn":  50},
    {"yearsPerTurn": 40, "untilTurn":  80}
]

Events.json

事件允许用户在触发器的选项之间进行选择以激活。

属性类型默认值说明
nameString必需用于通过 "Triggers a [event] event" unique 进行触发
textStringNone向用户显示的风味文字
presentationOne of: "None", "Alert", "Floating"Alert"Alert" 表示常规弹出窗口,"None" 表示随机选择,"Floating" 用于教程风格的指示器
civilopediaTextList可选请参阅 civilopediaText 章节
choicesList of EventChoices用户可以选择触发其中一个可行的选择

你可以使用 text 和/或 civilopediaText,如果两者都存在,则两者都显示(但为什么呢?)

事件选择由以下组成:

属性类型默认值说明
textString必需作为按钮显示给用户。应该是动作名称 - "Do X"
uniquesList of uniques to trigger or limit conditions必需此选择在被选中时激活的触发器,以及 "Unavailable" / "Only available" uniques
keyShortcutkey to select (name)none键名称请参阅 Gdx.Input.Keys
civilopediaTextList可选请参阅 civilopediaText 章节

在这里,civilopediaText 显示在活动按钮之外,在 triggeredUniques 之前。

ModOptions.json

此文件略有不同:

  • 在 Vanilla 规则集中不存在
  • 完全是可选的,但在下载模组后会创建

请注意,此文件控制_声明性模组兼容性_(进行中)- 例如,有 uniques 表示你的模组应该只或从不作为'永久视觉模组'使用。 不兼容性过滤目前适用于扩展模组和基础模组之间,但请随意使用相同的 Unique 记录已知的扩展到扩展的不兼容性。敬请期待!

该文件可以具有以下属性,不包括 Unciv 自动设置的值:

属性类型默认值说明
isBaseRulesetBooleanfalse如果为 true,则替换 vanilla 规则集
uniquesList模组范围的特性,请参阅此处
techsToRemoveList要移除的技术technologyFilter列表(仅适用于 isBaseRuleset=false)
buildingsToRemoveList要移除的建筑或奇观buildingFilter列表(仅适用于 isBaseRuleset=false)
unitsToRemoveList要移除的单位unitFilter列表(仅适用于 isBaseRuleset=false)
nationsToRemoveList要移除的国家nationFilter列表(仅适用于 isBaseRuleset=false)
policyBranchesToRemoveList要移除的政策分支列表(仅适用于 isBaseRuleset=false)
policiesToRemoveList要移除的政策列表(仅适用于 isBaseRuleset=false)
beliefsToRemoveList要移除的信仰列表(仅适用于 isBaseRuleset=false)
religionsToRemoveList要移除的宗教列表(仅适用于 isBaseRuleset=false)
constantsObject请参阅 ModConstants
tilesetString仅适用于基础规则集
unitsetString仅适用于基础规则集

通常从 github 元数据自动设置的值是:

属性类型默认值说明
modUrlString从中下载模组的 github 页面,或者如果使用了免费托管的 zip 则为空
defaultBranchStringmaster仓库的默认分支

为了澄清:当你的模组通过 github 分发时,在模组仓库中包含这些没有任何影响。 但是,当模组在_没有_ github 仓库的情况下分发时,这些值可以_应该_由作者在分发的 ModOptions.json 中设置。

ModConstants

存储在 ModOptions.constants 中,这是 Unciv 内部使用的常量集合。 这是唯一_逐字段_从模组合并的结构,而不是覆盖,因此你可以在一个模组中更改来自野蛮人的 XP,在另一个模组中更改城市距离。在冲突的情况下,无法保证哪个模组获胜,只保证忽略_默认_值。

属性类型默认值说明
maxXPfromBarbariansInt30[^A]
cityStrengthBaseFloat8.0[^B]
cityStrengthPerPopFloat0.4[^B]
cityStrengthFromTechsMultiplierFloat5.5[^B]
cityStrengthFromTechsExponentFloat2.8[^B]
cityStrengthFromTechsFullMultiplierFloat1.0[^B]
cityStrengthFromGarrisonFloat0.2[^B]
baseCityBombardRangeInt2[^S]
cityWorkRangeInt3[^T]
cityExpandRangeInt5[^U]
cityAirUnitCapacityInt6[^W]
unitSupplyPerPopulationFloat0.5[^C]
minimalCityDistanceInt3[^D]
minimalCityDistanceOnDifferentContinentsInt2[^D]
unitUpgradeCostObject请参阅下文[^J]
naturalWonderCountMultiplierFloat0.124[^E]
naturalWonderCountAddedConstantFloat0.1[^E]
ancientRuinCountMultiplierFloat0.02[^F]
spawnIceBelowTemperatureFloat-0.8[^G]
maxLakeSizeInt10[^H]
riverCountMultiplierFloat0.01[^I]
minRiverLengthInt5[^I]
maxRiverLengthInt666[^I]
religionLimitBaseInt1[^K]
religionLimitMultiplierFloat0.5[^K]
pantheonBaseInt10[^L]
pantheonGrowthInt5[^L]
workboatAutomationSearchMaxTilesInt20[^M]
maxSpyRankInt3[^N]
spyRankSkillPercentBonusFloat30[^O]
minimumWarDurationInt10[^P]
baseTurnsUntilRevoltInt4[^Q]
cityStateElectionTurnsInt15[^R]
maxImprovementTechErasForwardIntNone[^S]
goldGiftMultiplierFloat1[^T]
goldGiftTradeMultiplierFloat0.8[^U]
goldGiftDegradationMultiplierFloat1.0[^V]

图例:

  • [^A]: 可以从与野蛮人的战斗中获得的最大经验值
  • [^B]: 城市力量公式: 力量 = baseStrength + strengthPerPop + strengthFromTiles + ((%techs * multiplier) ^ exponent) * fullMultiplier + (garrisonBonus * garrisonUnitStrength * garrisonUnitHealth/100) + defensiveBuildingStrength 其中 %techs 是科技树中已完成的科技的百分比 如果此规则集中不存在科技,则 %techs = 0.5(=50%)
  • [^S]: 城市可以攻击的距离
  • [^T]: 城市中人口可以工作的地块的距离。注意:较高的值可能会导致性能问题并可能导致错误。cityWorkRange 可以大于 cityExpandRange。
  • [^U]: 城市可以扩展其边界的距离。注意:较高的值可能会导致性能问题并可能导致错误。
  • [^C]: 单位供应公式: 供应 = unitSupplyBase(difficulties.json) unitSupplyPerCity * amountOfCities +(difficulties.json) unitSupplyPerPopulation * amountOfPopulationInAllCities unitSupplyBase 和 unitSupplyPerCity 可以在 difficulties.json 中找到 unitSupplyBase、unitSupplyPerCity 和 unitSupplyPerPopulation 也可以通过 uniques 增加
  • [^D]: 任何两个城市之间必须的最小距离,不包括城市所在的地块 数字是两个城市之间的地块数,不包括城市所在的地块。 例如,"C__C",其中 "C" 是有城市的地块,"_" 是没有城市的地块,距离为 2。 第一个常量适用于同一大陆上的城市,第二个适用于不同大陆上的城市。
  • [^E]: NaturalWonderGenerator 使用这些来确定给定地图大小要生成的自然奇观数量。数量与地图半径线性缩放:#wonders = radius * naturalWonderCountMultiplier + naturalWonderCountAddedConstant。默认值实际上意味着 Tiny - 1,Small - 2,Medium - 3,Large - 4,Huge - 5,自定义半径 >=109 - 所有 G&K 奇观。
  • [^F]: MapGenerator.spreadAncientRuins:遗迹数量 = 合适地块数量 * 此值
  • [^G]: MapGenerator.spawnIce:在 T < 此值的地方生成冰,其中 T 从温度极端、纬度和 perlin 噪声计算。
  • [^H]: MapGenerator.spawnLakesAndCoasts:最多此地块数量的水体变成湖泊
  • [^I]: RiverGenerator:河流频率和长度边界
  • [^J]: UnitUpgradeCost 子结构。
  • [^K]: 可发现的最大宗教数量 = religionLimitBase + floor(MajorCivCount * religionLimitMultiplier)
  • [^L]: 万神殿的成本 = pantheonBase + CivsWithReligion * pantheonGrowth
  • [^M]: 当 AI 决定是否建造工作船时,从城市中心搜索可改进地块的回合数
  • [^N]: 任何间谍可以达到的最大等级
  • [^O]: 每个等级给予的技能加成
  • [^P]: 文明在谈判和平之前必须等待的回合数
  • [^Q]: 在生成叛乱之前的回合数
  • [^R]: 城邦选举之间的回合数
  • [^S]: 如果设置,改进选择器将静默跳过技术要求比你的当前时代 + 此值更先进的改进。例如:使用 0 时,贸易站在中世纪之前不会显示,使用 1 时,它们将在古典时代显示。
  • [^T]: 单边贸易的金币价值乘数,作为礼物存储。
  • [^U]: 常规贸易的金币价值乘数,作为礼物存储。设置为 0 以禁用双边贸易中的金币赠送。
  • [^U]: 修改 "GaveUsGifts" 外交修饰符耗尽的速度。较高的值使其耗尽得更快。通常,根据外交关系,默认值每回合减少约 2.5%。
  • [^W]: 可以驻扎在城市中的空中单位数量,不包括携带/运输的空中单位。

UnitUpgradeCost

这些值不会单独合并,只会合并整个子结构。

属性类型默认值说明
baseFloat10
perProductionFloat2
eraMultiplierFloat0
exponentFloat1
roundToInt5

单位升级的金币成本公式是(向下舍入到 roundTo 的倍数): ( max((base + perProduction * (new_unit_cost - old_unit_cost)), 0) * (1 + eraNumber * eraMultiplier) * civModifier ) ^ exponent 其中 civModifier 是适用于 "[relativeAmount]% Gold cost of upgrading" uniques 的乘法聚合。

GlobalUniques.json

链接到原始文件

GlobalUniques 定义全局应用的 uniques。例如,Vanilla 规则集在此定义不满意的效果。

基础规则集模组可以省略文件,在这种情况下,它们继承来自 Vanilla 规则集的那些。 或者,它们可以提供带有空对象({})的文件,意味着该模组没有全局 Uniques。

它具有以下结构:

属性类型默认值说明
nameString"GlobalUniques"name 字段未使用,但仍必须设置(规则集验证器可能会显示它)。
uniquesList of Strings全局应用的独特能力列表
unitUniquesList of Strings应用于每个单位的独特能力列表

当扩展规则集定义 GlobalUniques 时,所有 uniques 都会合并。目前,无法更改/移除基础模组设置的 uniques。

Tutorials.json

链接到原始文件

注意基础规则集模组可以通过添加名称等于模组名称的 "Tutorial" 在此处定义"欢迎页面"! 作为一般规则的例外,基础规则集模组中的此文件不会_替换_默认值,而是像扩展模组一样添加到其中。 此外,即使原始文件在 vanilla json 之上找到一级,通常也将它放在 <mod>/jsons/ 下。

每个教程具有以下结构:

属性类型默认值说明
nameString必需条目名称
categoryString可选此教程将显示的类别。"Tutorials" 是默认值。
civilopediaTextList可选请参阅 civilopediaText 章节
stepsList of Strings可选纯文本

如果条目同时包含 stepscivilopediaText 属性,则首先显示 civilopediaText。 显示为 Popup 的教程可以显示外部图像(不是纹理图集的一部分),如果 ExtraImages 中(直接位于资源或模组文件夹下)有同名的图像。 这是搜索到的,意味着定义教程的模组无关紧要,模组可以覆盖内置的 ExtraImages,区分大小写取决于操作系统。

VictoryTypes.json

链接到原始文件

这些文件包含此模组提供的胜利,以及要实现胜利必须达到的里程碑。 文件的大部分包含在胜利屏幕上向用户显示的字符串,其余部分是获胜的要求。

基础规则集模组可以省略文件或提供空列表,尽管至少需要一种胜利类型,在这种情况下,它们继承来自 Vanilla 规则集的那些

每个胜利具有以下结构:

属性类型默认值说明
nameString必需胜利的名称
victoryScreenHeaderStringnone显示在胜利屏幕中"我们的状态"中的胜利页脚中
victoryStringStringnone当你用此胜利赢得游戏时,显示在胜利屏幕的页脚中
defeatStringStringnone当其他人用此胜利赢得游戏时,显示在胜利屏幕的页脚中
hiddenInVictoryScreenBooleanfalse此胜利的进度是否在胜利屏幕中隐藏
requiredSpaceshipPartsList of Strings必须添加到首都以实现相应里程碑的太空船部件
MilestonesList of Strings必需必须完成以获胜的里程碑列表,请参阅下文
civilopediaTextList可选请参阅 civilopediaText 章节

里程碑

目前支持以下里程碑:

里程碑要求
Build [building]在任何城市建造建筑 [building]
Anyone should build [building]所有人必须建造建筑 [building] 才能使所有玩家拥有此里程碑
Add all [comment] in capital将此胜利的 requiredSpaceshipParts 字段中的所有单位添加到首都
Destroy all players你必须是唯一剩下城市的主要文明
Capture all capitals捕获游戏中所有主要文明的原始首都
Complete [amount] Policy branches完全完成至少 [amount] 个政策分支
Win diplomatic vote在游戏中的任何时候赢得外交投票(联合国)。你以后可能会失去,但仍保留此里程碑
Become the world religion使你的宗教成为所有主要文明中大多数城市的主流宗教
Have highest score after max turns基本上是时间胜利。启用"最大回合"滑块并在达到该数量时计算分数
Have more [countable] than each player's [countable]使你给定的 countable 多于每个其他文明的 countable 以实现此胜利。这对于模拟类似于美丽新世界中的文化胜利很有用。

Civilopedia 文本

在 json 中定义并列在文明百科中的任何"东西"都可以提供额外的文本,特别是针对文明百科的。当自动生成的显示不足时,这可以用来更好地解释特殊考虑,或者用于"风味"、背景故事等。此类文本可以格式化并链接到其他文明百科条目,在限制范围内。

格式示例:

json
"civilopediaText": [
    { "text": "古代遗迹在探索时提供一次性的随机奖励" },
    { "separator": true },
    {
        "text": "这一行是红色的,并链接到侦察兵,包括图标",
        "link": "Unit/Scout",
        "color": "red"
    },
    {
        "text": "带有金色星号的粗大标题",
        "header": 1,
        "starred": true,
        "color": "#ffeb7f"
    },
],

属性列表 - 注意并非所有组合都有效:

属性类型说明
textString要显示的文本
linkString创建链接和图标,格式:Category/Name 或 外部 链接('http://'、'https://'、'mailto:')
iconString显示图标而不链接,格式:Category/Name
extraImageString显示图像而不是文本。可以是在纹理集中找到的路径,或者是 ExtraImages 文件夹中的 png 或 jpg 的名称
imageSizeFloat[extraImage] 的世界单位大小,较小的坐标在保持纵横比的情况下计算。可用宽度
headerInteger标题级别。1 表示双倍文本大小,并从那里递减
sizeInteger文本大小,是 18。使用 sizeheader 但不要同时使用
indentInteger缩进级别。0 表示文本将跟随图标,1 与所有图标的右侧对齐,每进一步是 30 单位
paddingFloat行之间的垂直填充,5 单位
colorString设置文本颜色,接受名称或 6/3 位 Web 颜色(例如 #FFA040)
separatorBoolean渲染分隔线而不是文本。只能与 colorsize(线宽,默认 2)结合使用
starredBoolean用星号图标装饰文本 - 如果设置,它接收 color 而不是文本
centeredBoolean居中该行(并关闭自动换行)。对于 extraImage,启用裁剪到内容以平衡透明边框
iconCrossedBooleaniconlink 图像上绘制红色 X

来自 json 的行将"包围"自动生成的行,使得后者刚好插入在第一个带有链接的 json 行上方(如果有)。如果没有 json 行有链接,它们将插入在自动标题和自动信息之间。然而,此方法将来可能会更改。

注意:text 现在也支持内联颜色标记。插入 «color» 开始为文本着色,«» 停止。color 可以是名称或 6/8 位十六进制符号,如 #ffa040(与 color 属性符号不同仅在于不允许 3 位代码,但允许 alpha 通道)。 实际上,«» 标记在翻译_之后_被替换为 [],然后传递到 gdx 标记语言

注意:在模组中使用 ExtraImages 文件夹直到版本 4.11.5 才能正常工作。

RGB 颜色列表

某些对象可以指定具有自己的独特颜色。颜色由以下顺序的 3× Integer 列表定义:红色、绿色、蓝色。颜色范围从 [0, 0, 0](黑色)到 [255, 255, 255](白色)。

注意:某些对象的默认值是 gdx 颜色类。常量的值如下:

名称
gold[225, 215, 0]
white[255, 255, 255]
black[0, 0, 0]