Ideas是一种向国家添加修正的固定方式,尤其是包括民族精神、法案、设计商(p社在1.13版本中已经用MIO系统代替了该类别)、内阁和隐藏民族精神。Ideas被定义在 /Hearts of Iron IV/common/ideas/*.txt文件中,并且Ideas的类别被定义在 /Hearts of Iron IV/common/idea_tags/*.txt文件中
创建民族精神
译者注:大家在各种翻译内看到的民族精神和国家精神,实际上指的是同一个idea。本文翻译则使用“民族精神”作为译词。
民族精神文件在/Hearts of Iron IV/common/ideas/*.txt中创建。这是不存在任何效果的民族精神(虽然该民族精神内不存在修正,但仍可通过 add_ideas = idea_name
的效果代码进行添加)。
ideas = { country = { my_idea_1 = { } my_idea_2 = { } } }
上述内容中,ideas = {...}
中包含了所有的idea,这是由于《钢铁雄心4》引擎的限制所必须的。同时,country = {...}
是一个idea类别(这个类别定义了该idea为民族精神),这就是为什么游戏会把 my_idea_1 和 my_idea_2 识别为民族精神,而不是同样属于idea的法案或是内阁。
本地化
对于简体中文(Simp_chinese)的制作者来说,idea的本地化可以在任意 UTF-8-BOM 编码的/Hearts of Iron IV/localisation/simp_chinese/*_simp_chinese.yml 文件中定义。 如果一个idea没有名称,游戏会使用 /Hearts of Iron IV/common/names 中国家的随机名称列表创建一个名称。但这不适用于民族精神,因为民族精神使用的是idea的ID。
并且,一个idea可以同时拥有一个名称和一个描述,将鼠标悬停在其上时会显示其描述。下图则以 ZZZ_example_idea 为例,它们的本地化条目是这样定义的:
l_simp_chinese: ZZZ_example_idea: "Idea的名字" ZZZ_example_idea_desc: "idea的描述"
name = new_idea_name
会将idea名称指定为另一条本地化条目。如果您计划通过多次交换来修改一个idea,这将非常有用,因为这样就不必为该idea的每个实例创建重复的本地化条目。这同样需要在本地化文件中定义:
l_simp_chinese: new_idea_name: "新的idea名字" new_idea_name_desc: "新的idea描述"
图片(图标)
General sprite overview |
---|
For loading GFX, the game uses the sprite system. Sprites are code definitions that attach a name to an image file, as well as optionally adding additional information, such as animation, the amount of frames, the way that the image will be loaded, and so on. This means placing an image into the gfx folder isn't enough for it to work, a sprite has to use that image file as well.
Sprites are defined in any /Hearts of Iron IV/interface/*.gfx file (this is separate from gfx/interface/), opened with a text editor. To create a new .gfx file, a text file can be created and renamed to change the extension (on Windows, the Windows Explorer needs to show the extensions, which it doesn't by default). In particular, sprites are defined within a spriteTypes = { spriteType = { name = GFX_first_sprite # In some cases, beginning with GFX_ is mandatory for it to work. texturefile = gfx/interface/folder/filename.dds # The folder and filename don't matter, as long as they are correct } # Only the forward slash '/' (can be doubled as '//') can be used to separate folders. spriteType = { # The image doesn't have to be .dds, as .tga and .png are acceptable. name = GFX_second_sprite texturefile = gfx/interface/folder2/filename2.dds noOfFrames = 2 # Splits the image into 2 halves, which may be switched between dynamically in GUI } } In this case, this creates a sprite with the name of In order to add animation, a frameAnimatedSpriteType is used. It's never mandatory to copy a base game file to change a sprite. If there are duplicate definitions of a sprite with the same name in different files, the game will prioritise the one that would be evaluated later, based on the filename, and the older sprite will be ignored in entirety. This can be ensured by beginning the replacement file's name with a symbol late in the ASCII character table. Typically the lowercase letter 'z' is used for this purpose. For example, to change the amount of frames in Since most .gfx files define integral parts of the user interface, copying them over can lead to the mod's loaded files missing sprites upon a major game update, which would appear in-game as the default image, which is the error dog by default. As to ease the burden of needing to check the interface files, it's best to never copy over .gfx files, unless more additions would be actively harmful to the mod, such as with interface/subuniticons.gfx |
默认情况下,一个idea会使用一个与该idea名称相同的sprite图形,但需要开头加上GFX_idea_
。例如,名称为my_idea_1
的idea将使用名称为 GFX_idea_my_idea_1
的sprite。
这可以使用idea中的 picture = my_sprite
属性来更改。游戏仍会在参数中插入 GFX_idea_
前缀,以决定应使用的sprite,例如 picture = XYZ
会导致 GFX_idea_XYZ
被用作sprite。如果游戏找不到与它期望的名称相同的sprite,就会使用 默认图标代替。
插入前缀意味着,在大多数情况下,picture = GFX_XYZ
(这会使 GFX_idea_GFX_XYZ
用作sprite)或picture = idea_XYZ
(这会使 GFX_idea_idea_XYZ
用作sprite)会导致游戏试图调用一个不存在的sprite,而不遵循 GFX_idea_XYZ
命名模式的sprite不能用作idea的图标。
如果sprite中的texturefile
文件不正确,该idea在国家政治视图中将不可见,但仍会应用修正效果。所以确保idea以相同的文件夹路径位置、相同的文件名(包括扩展名)存储,并使用正确的文件夹分隔符。
还可以让图片根据 /Hearts of Iron IV/common/countries/*.txt 文件中定义的国家 graphical_culture_2d
变化。具体做法是在图片名称后添加该名称,并用下划线分隔。例如,在定义中包含 GFX_idea_my_picture_middle_eastern_2d
名称的精灵将代替 GFX_idea_my_picture
,出现在拥有 middle_eastern_2d
文化的国家中。
实际运用
民族精神只能通过效果手动添加. 在相关效果块(如国策完成奖励)内 add_ideas = idea_name
可添加国家精神,而 remove_ideas = idea_name
则会将其移除。
为了交换两个idea并让游戏显示追加效果的变化,需要使用 swap_ideas
。虽然无法直接修改一个idea,但如果被交换的两个idea在本地化文件中具有相同的名称(id相同),游戏中的效果就会显示追加该idea的效果(modifier - 持续性效果)。但是p社仅仅在这里展示了swap_ideas
的idea效果的特殊用法,即实现追加效果。一般情况下,swap_ideas
效果的原意则是替换两个民族idea,若id相同,则被识别为追加效果;如若id不同,则是替换效果(先移除一个idea,后添加一个新的idea)。
替换(追加)idea的方法如下:
swap_ideas = { remove_idea = old_idea add_idea = new_idea }
在大多数情况下,创建多个idea并在它们之间交换就足够了,比如有几个阶段的线性流程(Scripted effects 可用于创建一系列条件语句,并在每次需要时重复使用)。如果创建多个idea太不可行,比如有多个可以并行的修改流程,动态修正将允许用变量作为修正数值,但它们只接受修正(也就是不接受研究或装备加成等无关属性),而且由于没有自动的热更新,因此更难操作。
为了让民族精神持续有限的一段时间(暂时性民族精神),可以使用 add_timed_idea
效果:
add_timed_idea = { idea = my_timed_idea days = 365 }
可通过 modify_timed_idea 效果来延长或加快计时。
为了让一个国家在游戏开始就有idea,可以在 /Hearts of Iron IV/history/countries/ 中的国家文件这个决定游戏开始时的历史信息的效果块中,使用add_ideas(通常以扩展形式使用,可同时分配多个idea)可以让国家在游戏开局时就拥有民族精神。为了使该idea显示在国家选择界面中,需要对 bookmark文件进行编辑,将该idea包含在国家条目中的 ideas = { ... }
块中。
修正(持续性效果)
Modifiers are applied continuously as long as the spirit is applied to a country. Alongside modifiers, the spirit can also add a bonus to a technology category or modify an equipment archetype. The spirit can only apply modifiers towards the country that has the spirit, there is no way to scope into a different country. Each of these attributes is entirely separate within the idea and so each one should be located directly inside of the idea. For example, defining research_bonus
inside of modifier = { ... }
is erroneous, since research_bonus
is an attribute of the idea rather than a modifier.
modifier = { ... }
stores the regular modifiers, applied to the country with the spirit. A modifier block can list multiple modifiers, and negatives are also allowed. Variables do not work in this section: instead, use dynamic modifiers. A typical example of a modifier block is the following:
modifier = { political_power_cost = 0.1 stability_factor = -0.2 }
targeted_modifier = { ... }
is for using modifiers targeted towards a different country. The target is specified as tag = ABC
, where ABC represents the target's tag. These are still applied towards the country with the spirit, but their effect is targeted towards a different country. For example, the following block will give the country with the idea a 10% attack bonus against 阿富汗:
targeted_modifier = {tag = AFG attack_bonus_against = 0.1}
research_bonus = { ... }
grants the country a boost to researching a specific technology category. An unsorted list of technology categories can be found in /Hearts of Iron IV/common/technology_tags/ or, if desiring to know which technologies exactly are assigned to each category, individual technologies can be checked in /Hearts of Iron IV/common/technologies/. The following example would provide a +10% bonus to researching destroyers and a -20% bonus to artillery:
research_bonus = {dd_tech = 0.1 artillery = -0.2}
equipment_bonus = { ... }
applies the bonuses towards an equipment archetype or a type of equipment archetypes. By default, the bonus is not granted immediately, but rather requiring to research a new tech first, which is how it's done within designer ideas. This can be prevented by adding instant = yes
inside of the equipment archetype within the equipment bonus. Equipment archetypes are defined in /Hearts of Iron IV/common/units/equipment/*.txt, which is where you can also find what can be applied to them. The name of the block within the /Hearts of Iron IV/common/units/equipment/*.txt file would be the archetype, while type = { ... }
or type = archetype_type
provides the types that the equipment archetype has. The following example will modify the cost to produce equipment within the artillery
type (including artillery, rocket artillery, and tank artillery) by -20%, applying immediately, as well as increasing soft attack of any infantry equipment researched after the spirit was added by 10%:
equipment_bonus = {artillery = { instant = yes build_cost_ic = -0.2 } infantry_equipment = { soft_attack = 0.1 }}
rule
modifies the set of rules that decide what the country is allowed to do. This usually includes diplomatic options (such as peace conference options or being called to war). They show up in the tooltip only if the rule differs from the value without the idea, e.g. can_create_factions = no
will usually not appear in the tooltip as countries are already unable to create a faction by default.
rule = { can_join_factions = no can_send_volunteers = yes } |
游戏规则 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
The following game rules exist as possible options:
|
效果(瞬时性效果)
可以设置民族精神在添加或删除时应用的效果。具体做法是分别使用 on_add
和 on_remove
效果块,如下所示:
on_add = { add_stability = 0.1 } on_remove = { add_political_power = -50 }
只有在游戏开始后添加idea时,效果才会被执行:如果是通过history文件或bookmark文件的 effect = { ...}
块,则不会执行效果。在这种情况下,需要在添加idea的同一个效果块中复制添加idea时给出的效果。
取消效果
在已存在民族精神的前提下,使其在满足一组触发条件后取消该民族精神。这可以通过cancel
效果实现。如果代码块中存在on_remove
效果,取消也会触发idea中的on_remove
效果。如下所示:
cancel = { has_political_power > 50 }
补充效果
另一个触发条件是 allowed_civil_war = { ... }
当开始内战时,会对每一方进行条件判断,只有当条件判断结果为ture(即满足条件)时,才会继承民族精神,即当内战爆发时,分裂的国家满足某种条件会继承原有国家民族精神。例如has_government = democratic
将确保内战中只有 民主主义 的一方才能获得民族精神。默认情况下,若某国判断为false(即不满足条件),则会导致内战开始时无法继承原有民族精神。若将其设置为 always = yes
则在双方中都出现。
do_effect = { ... }
是一个条件效果,它为idea应用modifier指定了必要条件。如果不满足内条件,则该民族精神的modifier(包括研究和装备修正)无效,但该idea不会被删除。
完整的民族精神例子
ideas = { country = { # Necessary for the game to consider them spirits rather than a different idea type. my_spirit = { picture = my_picture # Using GFX_idea_my_picture modifier = { training_time_factor = -0.1 } targeted_modifier = { tag = QAT defense_bonus_against = 0.2 } research_bonus = { infantry = 0.1 } equipment_bonus = { infantry_equipment = { instant = yes defense = 0.2 } } rule = { can_join_factions = no } } my_spirit_2 = { # Using GFX_idea_my_spirit_2 allowed_civil_war = { has_government = democratic # Only appear in a civil war for the democratic side. } cancel = { democratic > 0.6 } on_add = { add_popularity = { ideology = democratic popularity = 0.2 } } on_remove = { if = { limit = { democratic > 0.6 } start_civil_war = { ideology = democratic size = 0.6 } } } do_effect = { NOT = { has_government = democratic } } modifier = { democratic_drift = 0.005 } } } }
其他Idea类别
非民族精神的idea可以使用民族精神idea中可以使用的一切,但是,在非民族精神的idea中有更多的有意义的代码类型,而这些代码类型在民族精神中没有任何作用,或者是没有必要加入。
隐藏Idea
除了必须定义为 hidden_ideas
idea类别而不是 country
,隐藏idea在创建的各个方面都与普通国家精神完全相同。这将确保idea被隐藏起来,不会显示在存放民族精神的页面中。不过,为它们制作本地化仍然是有意义的: 如果隐藏Idea自动取消,则会弹出宣布Idea被取消的窗口;将鼠标悬停在某些界面元素上(如稳定度或研究速度),就会显示这个隐藏Idea所作出的修正。
Idea的类别定义
这些定义方式用于/Hearts of Iron IV/common/ideas/*.txt 文件中。
designer = yes
将整个类别标记为设计商idea。这主要用于AI。
law = yes
将整个类别标记为法案。这主要用于AI。
use_list_view = yes
将整个类别标记为使用列表视角来选择idea,类似于原版游戏中的法案的选择。
这些内容在idea文件中将如下所示:
ideas = { my_law_category = { law = yes use_list_view = yes my_law_1 = { } my_law_2 = { } } }
补充代码
以下补充代码可用的前提条件是该idea属于可以在游戏中选择的类型,例如法案或设计商。
allowed
是一个条件块,只在游戏开始或加载保存时进行检查,主要用于将一个idea限制在一个国家(tag = BHR
或 original_tag = POL
)和/或一个 DLC(has_dlc = "One Step Back"
)中。如果一个idea的allowed未被满足,那么它将永远不会出现在相关Idea列表中中,除非在重新加载保存时变成了真;不过,通过 add_ideas
进行手动分配可以绕过检查。如果未填写,则默认always = yes
。并且该条件仅开局或重新加载的时候检测一次!
allowed_to_remove
是一个条件块,详细说明了何时可以删除idea,将其更改为类别中的另一个idea。与allowed
不同,它是随时检测的。
visible
是一个条件块,它会随时检测当前状态是否符合规定的条件,这是使idea在决策选择屏幕上可见的必要条件。提示:最好将国家(tag = xxx)或 DLC (has_dlc = "xxx")检查放在allowed
中。
available
是一个条件块,它会随时检测是否满足可见条件,这是实际采纳idea的必要条件。如果为假,idea将保持可见,但会显示为灰色,无法采纳。这是在政治点数花费的基础上应用的。
cost = 123
是添加idea所需的政治点数。如果未设置,则所需政治点数将变为 150。
removal_cost = 123
是移除该idea所需的政治点数。如果设置为-1,则无法手动移除该idea。如果未设置,则默认为 0。
level = 2
用于在idea中创建不断攀升的花费,类似于动员法案。如果你拥有等级为 1 的法律,那么如果改成等级 3,除了等级 3 外,还需要支付等级 2 的idea的费用,反之亦然。
traits
是分配给这个idea的特质块,在 /Hearts of Iron IV/common/country_leader/*.txt中定义,也会赋予一个静态修正,并显示在idea附近。
ledger
决定将该想法分配给哪个intelligence ledger
。这主要是适用于character系统的遗留问题,但仍可用于军官团精神。可能的值有army
, air
, navy
, military
(出现在之前的每个ledger
)、civilian
, all
和 hidden
例子
ideas = { law_category = { law = yes use_list_view = yes my_law = { allowed_to_remove = { num_of_civilian_factories > 10 } removal_cost = 100 cost = 100 level = 3 modifier = { production_speed_industrial_complex_factor = 0.2 } } } designer_category = { designer = yes my_designer = { # No cost is defined, defaults to 150 allowed = { tag = QAT } visible = { has_tech = infantry_weapons1 } available = { has_equipment = { infantry_equipment > 1000 } } traits = { infantry_equipment_manufacturer } } } }
Idea类别
idea类别在/Hearts of Iron IV/common/idea_tags/*.txt文件中定义。所有类别都将包含在 idea_categories
的头部代码块中,并可包含以下参数:
slot
是一个严格的idea类别槽。这是在玩家政治菜单中显示的内容,也是idea定义中必须包含的类别。character_slot
是一个character槽。也可以定义idea使用这个槽,但它会像普通idea槽一样显示在GUI中。cost
在该类别的一个插槽中添加一个idea的默认政治点数花费。如果该idea没有设置政治点数花费,则会应用此花费。removal_cost
是删除本类别中某个idea的默认默认点数花费。ledger
是为本类别中的idea定义的intelligence ledger
,除非在slot
、idea
或角色中被重载。可能的值有army
,air
,navy
,military
(出现在之前的每个ledger
),civilian
,all
和hidden
。此外,还可以使用invalid
,这将迫使ledger
的定义级别降低一级。hidden
是一个布尔值,表示该类别不会在GUI中显示。选填,默认为 "no"。politics_tab
是一个布尔值,用于使该分类显示在政治视图中。选填,默认为“yes”。
如下所示:
idea_categories = { my_category = { slot = my_slot character_slot = my_character_slot cost = 30 removal_cost = 10 ledger = hidden } }
然后,idea将通过slot使用该类别(这样就可以把一个idea映射到一个类别)。
该文件还包括 slot_ledgers
,用于将idea_slots
单独分配给情intelligence ledger
,intelligence ledger
的优先级高于idea类别的ledger
。使用它的一个例子是:
slot_ledgers = { XXX_idea_slot = civilian ZZZ_idea_slot = invalid }
如果无效,则需要在每个idea中逐一标明。
GFX and GUI
- 每个idea类别代表国家政治视图中的一行,而每个slot代表该行下的一个slot。
在/Hearts of Iron IV/interface/countrypoliticsview.gui文件中的country_politics_idea_category_entry
容器窗口决定了每一行的用户界面信息。这里最重要的是网格框,因为它决定了以下内容:
- 类别中每个idea槽的大小,默认为宽 80,高 64。这用于确定slot之间的距离。
- slot的最大数量,默认为横向 7 个,纵向 1 个。如果不调整,一行中就不可能有超过 7的ideas。
- 网格框的格式,决定在哪个方向添加idea slot。
idea类别的图标显示在类别的行的左侧,由 GFX_idea_categories
这个sprite决定。该sprite在水平方向上被分割成多帧,每个类别根据 /Hearts of Iron IV/common/idea_tags/*.txt. 中定义的顺序被分配到其中的一帧。该sprite在 /Hearts of Iron IV/interface/countrypoliticsview.gfx 中定义,其在基础游戏中的定义包括以下内容:
spriteType = { name = "GFX_idea_categories" texturefile = "gfx/interface/idea_categories.dds" noOfFrames = 6 }
添加新类别时,请确保相应地更新sprite和frame数量。 可以为idea slot定义一个图标,如果没有为该slot分配idea,就会使用该图标。以 XXX_idea_slot 为例,在任何 /Hearts of Iron IV/interface/*.gfx 文件中都可以通过以下方式进行定义:
spriteType = { name = GFX_idea_slot_XXX_idea_slot textureFile = gfx/interface/filename.dds }
换句话说,sprite的名称必须与idea相同,但在开头要加上 GFX_idea_slot_
。
修改slot的成本
<idea slot>_cost_factor
修正可用于修改在此slot中添加idea或角色的政治点数花费。但是,该修正有一个限制。为了让它发挥作用,idea slot必须事先定义好任何idea或角色。
在/Hearts of Iron IV/common/ideas/*.txt文件夹中的文件是按照 Unicode 字符 ID 的顺序加载的,即大写字母在下划线之前,下划线在小写字母之前。例如,这意味着文件名为 TAG.txt
的文件会在 _economy.txt
或 _manpower.txt
(游戏中的基本法案位置)之前加载,而 _economy.txt
或 _manpower.txt
会在 country.txt
之前加载。基于上述特性,这意味着如果文件名以大写字母开头,则其中包括的法案花费的修正(例如,economy_cost_factor = -0.10
)会出错,除非法案存储在不同于基础游戏的文件中。
主要有两种方法可以解决这个问题。第一种是简单地更改国家文件的文件名,例如从 GER.txt
改为 germany.txt
。如果为了覆盖文件而必须保持文件名不变,则可以创建一个新文件。另外,如果有对 ideas 文件夹的 replace_path
,也可以将存储法案的文件重命名为以 ID 较小的字符开头的文件,例如 00_economy.txt
,该文件将在 TAG.txt 之前加载。
此外,这也意味着必须角色slot中定义idea,修正才会起作用,例如 political_advisor_cost_factor = 0.1
。这是因为角色的加载时间晚于idea或国家领袖特质的加载时间,因此在计算修正时它们尚未加载,从而导致错误。可以通过在/Hearts of Iron IV/common/ideas/*.txt文件中为角色slot创建idea来绕过这个问题。由于这些是角色slot而不是idea slot,因此不会出现在国家中,但事先加载的idea会避免错误。
文件 | 效果 • 条件 • 定义 • 修正 • 修正列表 • 作用域 • 本地化 • on action • 数据结构 (标记, 临时标记, 国家别名, 变量, 数组) |
脚本 | 成就修改 • AI修改 • AI focuses • 自治领修改 • 权力平衡修改 • 剧本/标签 (游戏规则)• 建筑修改 • 人物修改 • 修饰性TAG修改 • 国家创建 • 军队修改 • 决议制作 • 装备修改 • 事件修改 • Idea修改 • 意识形态修改 • 军工商修改 • 国策制作 • 资源修改 • Scripted GUI • 科技制作 • 单位修改 |
地图 | 地图 • 省份 • 补给区域 • 战略区域 |
图形图像 | 界面 • 图形资产 • 实体模型 • 后期特效 • 离子效果 • 字体 |
装饰性 | 肖像 • 命名列表 • 音乐 • 音效 |
其他 | 控制台指令 • 故障排除 • 模组结构 • 成就代码分析 • Mod相关 • Nudger修改 |