法术详解
法术复用部队技能的底层框架,但一条能正常施放的法术还要同时处理魔法之风消耗、施法目标、载荷、失误、普通版与增幅版、魔法之风分组,以及法术怎样被人物技能、兵种或 Effect 授予。只创建unit_abilities_tables一行,只会得到一个界面身份,不会自动产生完整法术。
本文只讲 RPFM 中可完成的数据配置。施法动作、投射物模型、爆炸、魔法漩涡、粒子特效、声音和复合场景必须引用已经存在的资源,或另行制作后放入 Pack。
本文使用游戏内术语“法术”“绑定法术”“魔法之风”“增幅法术”“法术精通”和“法术失误”。数据库中的
lore、overpower、overchage、mana等标识保留原文,只用于搜索和技术索引,不把它们直接翻译成新的游戏术语。
先看完整数据链
法术界面与普通/增幅关系
unit_abilities_tables
├─ key
├─ source_type = spell / bound
├─ type = 增益 / 妖法 / 魔法射击 / 轰击 / 吹息 / 魔法漩涡……
└─ overpower_option ─────────→ 增幅法术 Key
│ 相同 Key
↓
法术运行规则
unit_special_abilities_tables
├─ mana_cost / miscast_chance / target_* / range / wind_up
├─ activated_projectile ─────→ projectiles_tables
├─ bombardment ──────────────→ projectile_bombardments_tables
├─ vortex ───────────────────→ battle_vortexs_tables
├─ spawned_unit ─────────────→ land_units_tables
└─ special_ability_to_special_ability_phase_junctions_tables
↓
special_ability_phases_tables
├─ special_ability_phase_stat_effects_tables
├─ special_ability_phase_attribute_effects_tables
├─ special_ability_phase_displays_tables
└─ additional UI effects
魔法之风分组与战斗界面
special_ability_groups_tables
├─ special_ability_groups_to_unit_abilities_junctions_tables
└─ special_ability_groups_to_units_junctions_tables
人物技能授予
character_skills_tables
↓
character_skill_level_to_effects_junctions_tables
↓
effects_tables
↓
effect_bonus_value_unit_ability_junctions_tables
├─ enable
└─ enable_overchage
这条链不是所有法术都完整使用:
- 增益、妖法、直接伤害和治疗常以阶段为主要效果;
- 魔法射击常以
activated_projectile为主要伤害来源; - 轰击常使用
bombardment; - 魔法漩涡和部分吹息、风类法术可能使用
vortex; - 召唤和变身使用
spawned_unit及生成字段; - 绑定法术常不消耗魔法之风,而用有限次数控制;
- 特殊法术可以同时使用阶段和载荷。
游戏界面显示的法术类型不会自动决定底层载荷。制作前必须查看相似原版法术实际填写了哪条分支。
需要哪些表单
| 表单 | 什么时候需要 | 负责什么 |
|---|---|---|
unit_abilities_tables |
所有可见法术 | 定义法术 Key、名称、说明、图标、游戏内类型、来源类型和增幅版本入口。 |
unit_special_abilities_tables |
所有可施放法术 | 定义魔法之风消耗、失误概率、施放时间、冷却、目标、范围、载荷、动画、AI 和自动战斗数据。 |
special_ability_to_special_ability_phase_junctions_tables |
法术使用阶段时 | 连接法术与一个或多个阶段,并指定阶段作用对象。 |
special_ability_phases_tables |
增益、减益、持续伤害、治疗、附魔等 | 定义阶段持续时间和阶段级效果。 |
special_ability_phase_stat_effects_tables |
修改战斗数值 | 修改近战攻防、护甲、领导力、速度、抗性等。 |
special_ability_phase_attribute_effects_tables |
添加或压制属性 | 修改潜行、心理免疫等属性;以实际属性 Key 和官方游戏名称核对。 |
special_ability_phase_displays_tables及界面效果表 |
阶段需要特效和说明 | 负责阶段视觉与玩家看到的额外效果条目。 |
unit_abilities_to_additional_ui_effects_juncs_tables、special_ability_phases_to_additional_ui_effects_junctions_tables、unit_abilities_additional_ui_effects_tables |
法术自身或阶段需要额外说明 | 前两张分别连接法术 Key 和阶段 Key,最后一张定义说明身份;具体文字另写入 Loc,不在这里修改机制数值。 |
projectiles_tables及其子表 |
魔法射击、弹丸或爆炸载荷 | 定义弹道、制导、直击伤害、爆炸、破片、显示和命中效果。 |
projectile_bombardments_tables及相关表 |
轰击法术 | 定义从目标上空生成的投射物组。 |
battle_vortexs_tables及相关表 |
魔法漩涡、风类和持续区域载荷 | 定义移动、持续时间、伤害、半径和表现。 |
special_ability_groups_tables |
法术需要进入某种魔法之风分组 | 定义分组的图标、名称、颜色、排序和界面行为。 |
special_ability_groups_to_unit_abilities_junctions_tables |
把法术加入魔法之风分组 | 连接分组与普通版、增幅版或其他法术。 |
special_ability_groups_to_units_junctions_tables |
让单位在战斗界面拥有该分组 | 连接魔法之风分组与main_units_tables记录,并设置页面顺序。 |
effect_bonus_value_unit_ability_junctions_tables |
通过 Effect 启用法术、增幅版或修改消耗等 | 连接 Effect、Bonus Value 和法术 Key。 |
character_skill_level_to_effects_junctions_tables |
人物技能升级授予法术 | 规定人物技能第几级应用哪个 Effect。 |
land_units_to_unit_abilites_junctions_tables |
兵种固定自带法术或绑定法术 | 直接把法术连接给land_units_tables。 |
| 限制、自动关闭、冷却上下文和行为组表 | 模板本身使用时 | 控制目标排除、战场状态、互斥、共享冷却和特殊施法条件。 |
如果只是把一个已有绑定法术永久给某个兵种,通常只需要新增授予连接;如果要制作全新普通法术与增幅法术,则要复制并改完两套界面记录、运行记录和实际载荷。
先分清四个容易混淆的概念
普通法术
普通法术通常使用source_type=spell,消耗魔法之风,并可能由人物技能或其他 Effect 启用。它可以没有增幅版本,但大多数标准魔法之风法术具有普通版与增幅版。
增幅法术
增幅法术是普通法术的强化施放版本。常见数据关系是:
- 普通版
unit_abilities_tables.overpower_option指向增幅版 Key; - 增幅版拥有独立的
unit_abilities_tables和unit_special_abilities_tables记录; - 增幅版可以使用更高
mana_cost、不同目标、不同范围、不同载荷或不同阶段; - Effect 使用
enable_overchage启用增幅施放。
数据库保留了overchage这个拼写。搜索和填写 Bonus Value 时必须使用真实 Key enable_overchage或disable_overchage,不要擅自改成overcharge。
绑定法术
绑定法术在游戏中通常表现为不消耗魔法之风、由有限使用次数控制的法术。常见模板会使用:
source_type = bound
mana_cost = 0
num_uses = 有限正整数
miscast_chance = 0
这只是常见结构,不是硬编码规则。特殊装备、派系机制或新版内容可能使用不同次数、冷却和授予方式,应以同类原版为准。
魔法之风
这里要分清资源、法术类型和法术分组:战斗中消耗的是“魔法之风”;类型 Key wh_type_wind在游戏里也显示“魔法之风”,用于一种沿地面移动的法术类型;而special_ability_groups_tables中的wh_main_lore_fire,官方名称是“火焰系法术”。它们不是同一张表,也不是同一种数值。下文说“魔法之风分组”时指法术列表的组织关系,具体分组仍写官方名称,例如“火焰系法术”,不把英文lore机翻成新的游戏术语。
怎样选择原版法术模板
不要只看名称、颜色和伤害数字。模板应按施法机制选择。
| 目标法术 | 优先比较的原版模板 |
|---|---|
| 单体魔法射击 | 同样以敌军为目标、从施法者发射制导或非制导弹丸的法术。 |
| 地面直线吹息 | 同样允许地面目标、方向选择和相似施法距离的吹息法术。 |
| 移动风类法术 | 同样使用移动区域载荷、宽度、速度和方向控制的原版法术。 |
| 原地魔法漩涡 | 同样使用battle_vortexs_tables、持续时间和移动规则相近的法术。 |
| 头顶轰击 | 同样使用projectile_bombardments_tables、落点分布和预警时间相近的法术。 |
| 单体增益或妖法 | 同样以单位为目标、阶段数量和数值类型相近的法术。 |
| 范围增益或妖法 | 同样允许地面或单位目标、影响人数和目标刷新方式相近的法术。 |
| 直接伤害或持续治疗 | 同样使用阶段生命变化频率、实体上限和持续时间的法术。 |
| 召唤 | 同样的生成类型、持续方式、单位许可和 AI 用法。 |
| 绑定法术 | 同样不消耗魔法之风、次数和冷却接近的绑定法术。 |
至少比较普通版和增幅版两条记录。某些增幅法术只增加范围,某些改变目标数量,某些更换载荷,还有些只提高伤害;不能假设增幅版就是“所有数字乘二”。
八个可以直接复制研究的入口
在unit_abilities_tables.key按完整 Key 筛选,再以相同 Key 打开unit_special_abilities_tables。名称已按相同 Loc Key 对照官方英文、繁体中文和简体中文;下表显示简中名称。八条均为source_type=spell,各自的增幅入口均为本 Key 后加_upgraded,复制时分别保留两版实际数据。
| 官方名称 | 普通法术 Key | 原版类型 | 首先追踪的运行载荷 |
|---|---|---|---|
| 火球术 | wh_main_spell_fire_fireball |
wh_type_magic_missile |
activated_projectile=wh_main_spell_fire_fireball |
| 鲁因火焰剑 | wh_main_spell_fire_flaming_sword_of_rhuin |
wh_type_area_of_augments |
阶段连接及阶段效果 |
| 大地之血 | wh_dlc05_spell_life_earth_blood |
wh_type_area_of_regeneration |
阶段连接及阶段效果 |
| 灵魂榨取 | wh_main_spell_death_spirit_leech |
wh_type_direct_damage |
阶段连接及阶段效果 |
| 尤瑞诺闪电箭 | wh_main_spell_heavens_urannons_thunderbolt |
wh_type_bombardment |
bombardment=wh3_dlc27_spell_heavens_urannons_thunderbolt_v2 |
| 幽暗深渊 | wh_dlc05_spell_shadow_pit_of_shades |
wh_type_vortex |
vortex=wh_dlc05_spell_shadow_pit_of_shades |
| 烈焰之颅 | wh_main_spell_fire_the_burning_head |
wh_type_wind |
vortex=wh_main_spell_fire_the_burning_head |
| 驱役亡灵 | wh_main_spell_vampires_raise_dead |
wh_type_summon_unit |
spawned_unit=wh_main_vmp_inf_zombie_summoned |
绑定法术可先在unit_abilities_tables按source_type=bound筛选,再用上述普通法术 Key 的核心名称缩小结果;随后比较mana_cost、num_uses和授予入口。把source_type从spell改为bound只改分类,不能代替清除魔法之风消耗、配置次数和接入授予对象。
自行查找数据
- 在游戏中记录法术准确名称、所属魔法之风和一个确实会使用它的人物。
- 在 RPFM 全局搜索的 Loc 范围搜索中文名称,找到
unit_abilities_onscreen_name_法术Key。 - 搜索法术 Key,打开
unit_abilities_tables与unit_special_abilities_tables。 - 查看普通版的
overpower_option,找到增幅版 Key。 - 继续搜索普通版和增幅版,记录它们的阶段、投射物、轰击、魔法漩涡、分组和 Effect 引用。
- 使用
查找引用确定哪些人物技能、单位和魔法之风分组使用它。 - 再找一个同类型法术作对照,确认哪些字段属于共通机制,哪些是单个法术特例。
不要只按 Key 中的spell_fire、vortex或upgraded判断结构。原版历史数据会保留旧命名,真正的运行方式以字段引用为准。
安全复制法术
原版记录统一从依赖项 → 游戏文件查找,打开后核对Game-RO:只读页签和原版data__子表。游戏文件缓存中如果混有其他 Mod 的子表,不能仅凭Game-RO:认定它来自 CA;通过“转到定义”跳转后也要重新确认来源,并清除目标页签遗留的无关筛选。不要从Assembly Kit 文件导入、复制或编辑表单,也不要把其中的记录当作游戏引用来源。在自己的Mod类型 Pack 中复制时,先建立完整 Key 映射。
twcn_tutorial_spell_ember
twcn_tutorial_spell_ember_upgraded
twcn_tutorial_spell_ember_phase
twcn_tutorial_spell_ember_phase_upgraded
twcn_tutorial_spell_ember_projectile
twcn_tutorial_lore_ember
twcn_tutorial_effect_enable_ember
twcn_tutorial_effect_enable_ember_overcast
新建空表单
适合字段很少的连接表,例如法术—阶段连接或分组—法术连接。不要手工从零填写字段众多的unit_special_abilities_tables,除非已经完全理解所选载荷和所有末尾字段。
导入原版表单
- 从依赖项找到普通版和增幅版原版记录。
- 导入本次真正需要的表单。
- 把每张导入表的
data__改成自己的唯一子表名。 - 筛选目标法术并按行选中需要保留的完整记录,清除筛选,确认这些行仍被选中,再反选删除其他行。只在筛选结果里反选,可能漏掉隐藏的原版记录。
- 先改界面与运行记录 Key,再按引用依次修改阶段、载荷、显示、分组和 Effect Key。
- 全局搜索旧 Key,确认没有漏改,也没有误把共享原版资源全部复制成自定义资源。
保留
db/某表/data__可能覆盖原版同名子表。法术涉及的表多,任何一张漏改都可能让 Mod 覆盖一整块原版数据。建议使用twcn_tutorial_unit_abilities、twcn_tutorial_unit_special_abilities等清楚的子表名。
完全复用某个原版投射物、轰击、魔法漩涡、音频或特效时,可以继续引用原版 Key。只有需要修改该资源,或必须避免影响其他引用者时,才复制子记录。
法术的界面定义:unit_abilities_tables
截图中可以看到多组普通法术和带_upgraded后缀的增幅记录;普通版的Overpower Option指向对应增幅版。后缀只是原版命名习惯,真正的连接仍由字段决定。
| 字段 | 法术中的作用 |
|---|---|
key |
法术唯一 Key。普通版和增幅版必须是两条不同记录。 |
requires_effect_enabling |
是否需要 Effect 启用。由人物技能解锁的普通法术通常会使用此机制。 |
onscreen_name(本地化,不是 Pack DB 列) |
在 Loc 中建立unit_abilities_onscreen_name_法术Key,填写法术名称,不要在这张 DB 表里找这一列。 |
tooltip_text(本地化,不是 Pack DB 列) |
在 Loc 中建立unit_abilities_tooltip_text_法术Key,填写法术说明。 |
icon_name |
法术图标名,常从ui/battle ui/ability_icons/读取。普通版和增幅版可以共用图标。 |
overpower_option |
普通版指向增幅版。增幅版通常留空,避免形成循环。 |
type |
游戏内法术类型,例如增益、妖法、直接伤害、魔法射击、轰击、吹息或魔法漩涡。它影响界面说明,但不会自动创建载荷。 |
video |
法术预览视频入口。复用原版视频时必须确保它确实描述当前法术;自定义法术可以暂时留空。 |
uniqueness |
界面稀有度或分类。不是施法次数。 |
is_unit_upgrade |
是否参与自定义战斗界面的单位升级开关。普通法术通常沿用模板。 |
is_hidden_in_ui |
是否在通常界面隐藏。隐藏记录仍可能被脚本或其他技能调用。 |
source_type |
普通法术使用spell,绑定法术使用bound;特殊灾变法术、装备或军队技能应按实际来源选择。 |
is_hidden_in_ui_for_enemy |
是否对敌方隐藏。普通公开法术通常沿用原版模板。 |
superseded_abilities_set |
法术替代集合。只有模板使用升级替代关系时才复制。 |
技能类型完整对照
type引用unit_ability_types_tables.key。下面是当前原版全部 30 项及其官方简中显示名称,可直接按所需效果查 Key;分类名称不会代替投射物、阶段或召唤等实际载荷。先选一个同类型、同目标方式的原版技能,再复制其完整运行规则。
type |
官方简中名称 |
|---|---|
wh_type_area_of_augments |
增益(区域) |
wh_type_area_of_augments_of_the_winds |
魔法之风强化(区域) |
wh_type_area_of_direct_damage |
直接伤害(区域) |
wh_type_area_of_hexes |
妖法(区域) |
wh_type_area_of_regeneration |
重生(区域) |
wh_type_area_of_ward_save |
特殊保护(区域) |
wh_type_area_of_ward_save_hex |
特殊保护妖法(区域) |
wh_type_augment |
增益 |
wh_type_augment_of_the_winds |
魔法之风强化 |
wh_type_bombardment |
轰击 |
wh_type_breath |
吹息 |
wh_type_chain_augment |
链式增益 |
wh_type_chain_direct_damage |
链式直接伤害 |
wh_type_chain_hex |
链式妖术 |
wh_type_chain_regeneration |
链式重生 |
wh_type_direct_damage |
直接伤害 |
wh_type_explosion |
爆炸 |
wh_type_formation |
阵型 |
wh_type_hex |
妖法 |
wh_type_hex_of_the_winds |
魔法之风妖法 |
wh_type_hiding |
隐蔽 |
wh_type_magic_missile |
魔法射击 |
wh_type_magic_missiles |
魔法射击 |
wh_type_regeneration |
重生 |
wh_type_summon_unit |
召唤部队 |
wh_type_transform |
变形 |
wh_type_vortex |
魔法漩涡 |
wh_type_ward_save |
特殊保护 |
wh_type_ward_save_hex |
特殊保护妖法 |
wh_type_wind |
魔法之风 |
wh_type_magic_missile与wh_type_magic_missiles的官方显示名相同,选择时仍要区分单个模板的载荷和发射方式。wh_type_wind在这一类型表中显示为“魔法之风”,这里指技能类型,不能与魔法之风资源或法术分组混为同一个字段。
普通版与增幅版的 Loc
两条记录需要各自的名称和说明 Loc。普通版和增幅版可以显示相同名称,但说明应准确反映差异。不要直接复制原版 Loc Key 而只改文本,否则会覆盖原版法术。
原版示例的官方名称分别是“火球术”和“高级火球术”。后者是这条法术的具体显示名称,“增幅法术”则是施放机制的称呼;不要把所有增幅版的名称统一改成自己直译的术语。
unit_abilities_onscreen_name_twcn_tutorial_spell_ember
unit_abilities_tooltip_text_twcn_tutorial_spell_ember
unit_abilities_onscreen_name_twcn_tutorial_spell_ember_upgraded
unit_abilities_tooltip_text_twcn_tutorial_spell_ember_upgraded
法术运行规则:unit_special_abilities_tables
普通版和增幅版各有一条记录,Key 分别与unit_abilities_tables对应。
截图最后两行是标准“火球术”和“高级火球术”;上面的特殊人物、召唤和绑定版本只是筛选时一并命中的记录,不能把它们混成同一法术。标准两行的冷却为29、次数为-1;这里的-1表示不按有限次数使用,并不是冷却也无限。
魔法之风、失误、冷却和施法时间
| 字段 | 含义与使用要点 |
|---|---|
mana_cost |
本次施放消耗的魔法之风。增幅版通常更高,但应按效果收益和平衡设计。 |
miscast_chance |
法术失误概率,通常按比例表示,例如0.5为 50%。普通版常为0,增幅版按模板设置。 |
miscast_explosion |
失误时使用的爆炸记录。只提高概率而不连接有效失误效果,可能与预期不一致。 |
miscast_global_bonus |
是否接受全局失误概率修正。 |
wind_up_time |
下令后到法术正式生效的前摇时间。要与施法动作、音频和载荷出现时机一致。 |
active_time |
法术持续时间。投射物法术常用-1,因为弹丸寿命由投射物控制;阶段或区域法术应与实际持续时间协调。 |
recharge_time |
普通冷却时间。法术树解锁和魔法之风不足与冷却是不同限制。 |
initial_recharge |
战斗开始或获得法术后的初始冷却。 |
shared_recharge_time |
与同组其他法术共享的冷却时间。只有模板明确使用共享冷却时填写。 |
num_uses |
每场次数。普通法术常不靠次数限制,绑定法术常使用有限次数。 |
current_mana_moves_to_reserve |
特殊魔法之风机制。没有同类原版模板时保持为空或默认。 |
以当前原版“火球术”数据为例,普通版wh_main_spell_fire_fireball消耗 5 点魔法之风,增幅版消耗 9 点;普通版失误概率为 0,增幅版为 0.5,并连接失误爆炸。这个例子只说明普通版和增幅版可以分别配置,不是所有法术都应照抄这些数值。
横向滚动后 Key 列暂时离开画面,可用左侧原始行号2768、2769对照前图的标准两版。行号只帮助识别这次截图,游戏更新后可能变化,实际查找始终使用 Key。创建新法术时还要替换unique_id,不能因为沿用原版动作而把原版数值标识也复制给新记录。
目标与范围
标准两版允许选择敌军,不允许选择地面,目标距离均为300,但分别引用普通与高级投射物。前图中阶段可影响的敌军部队数量为0,不代表弹丸无法伤害敌军:这条法术主要通过投射物产生效果,阶段可影响的部队、光标允许选取的目标和弹丸碰撞各有控制条件。
| 字段 | 含义与使用要点 |
|---|---|
target_self |
是否允许以自身为目标。是否应启用取决于法术设计和实际模板,不能按“普通法术”或“特殊法术”一概判断;还要核对阶段目标和无效目标限制。 |
target_friends |
是否允许友军目标。 |
target_enemies |
是否允许敌军目标。 |
target_ground |
是否允许选择地面位置。吹息、轰击、风类和魔法漩涡常需要地面目标。 |
target_ground_under_allies |
是否允许选择友军脚下地面。 |
target_ground_under_enemies |
是否允许选择敌军脚下地面。 |
min_range |
最小施法距离。 |
target_intercept_range |
目标搜索或施法距离。不要把它和载荷自身射程、魔法漩涡移动距离混为一谈。 |
effect_range |
收集受影响单位的作用半径。单体弹丸法术可以为 0,范围阶段法术通常按模板设置。 |
num_effected_friendly_units |
最多影响多少友军。 |
num_effected_enemy_units |
最多影响多少敌军。 |
affect_self |
范围收集时是否包含施法者。 |
always_affect_self |
无论普通目标筛选如何都强制包含施法者。 |
only_affect_target |
只影响直接选择的单位,不继续搜索周围单位。 |
update_targets_every_frame |
持续重新计算范围内目标。移动区域、持续光环和一次性选择的法术通常设置不同。 |
affect_siege_equipment |
是否影响攻城器械实体。 |
only_affect_owned_units |
只影响拥有关系符合条件的单位。 |
目标链至少要同时检查三处:
unit_special_abilities_tables 的可选目标
special_ability_to_special_ability_phase_junctions_tables 的阶段作用对象
special_ability_to_invalid_target_flags_tables 的排除条件
其中一处填反,都可能出现光标允许施放但没有效果,或法术影响了不应影响的对象。
范围显示与施法表现
| 字段 | 含义与使用要点 |
|---|---|
targetting_aoe |
选择目标时显示的圆、线或区域样式。 |
passive_aoe |
已下令但仍在移动或等待施放时的区域显示。 |
active_aoe |
法术正式生效时的区域显示。 |
wind_up_stance |
施法前摇动作。 |
wind_down_stance |
施法结束动作。 |
use_loop_stance |
是否循环施法姿态。 |
activation_effect |
下令或生效时的一次性粒子特效。 |
special_ability_display |
特殊显示记录,常与施法动画元数据配合。 |
composite_scene_group_on_wind_up |
前摇期间触发的复合场景。 |
composite_scene_group_on_active |
生效时触发的复合场景。 |
display_stops_when_display_expires |
让载荷显示按资产自然结束。循环资产设置错误可能残留。 |
复制不同人物的法术时,不能只看法术本身。人物动画套装是否包含模板要求的wind_up_stance,也会影响实际施法表现。
AI、自动战斗和音频
| 字段 | 含义与使用要点 |
|---|---|
ai_usage |
AI 使用模板,例如单体弹丸、范围增益、近战减益等。 |
ai_usage_template_group |
AI 模板组。 |
autoresolver_usage |
自动战斗如何理解法术,不能为空。 |
autoresolve_cp_multiplier |
自动战斗战力倍率。 |
autoresolver_targets |
自动战斗估算的目标数量。 |
additional_melee_cp |
增加的近战战力估值,不能为负。 |
additional_missile_cp |
增加的远程战力估值,不能为负。 |
audio |
法术音频定义。 |
voiceover_state |
施法语音状态。 |
audio_switch_casting_override |
覆盖模块化施法音频。 |
audio_switch_ui_override |
覆盖模块化界面音频。 |
audio_vo_actor_override |
覆盖语音演员。 |
增幅版可以沿用普通版 AI 模板,也可以使用不同模板。改变范围、目标数或载荷后,应重新评估 AI 是否仍能正确选点。
法术类型与实际载荷
魔法射击
常见入口是activated_projectile,指向projectiles_tables.key。
投射物表负责弹道、速度、射程、制导、直击伤害、爆炸和显示。法术的target_intercept_range与投射物的有效射程都要合理;只增加其中一个,可能让法术能选择远处目标却打不到,或弹丸射程足够但法术按钮无法选中。
普通版和增幅版可以:
- 使用不同投射物;
- 共用投射物,但通过其他阶段增加效果;
- 共用图标和动画,只改变魔法之风消耗与目标;
- 完全更换为不同载荷。
需要修改投射物时,继续按《远程武器详解》复制并检查投射物、爆炸、破片、制导和显示链。不要直接改共享原版投射物,否则所有引用它的单位和法术都会变化。
轰击
bombardment指向projectile_bombardments_tables。轰击记录再决定生成哪些投射物、数量、分布、高度、延迟和落点。法术本体负责目标、魔法之风和施放;轰击链负责真正落下什么。
下面的运行表对照同时筛选穿刺焰矢与烈焰风暴,因此包含特殊和绑定版本。当前截图后四行才是标准的两组普通/高级法术,行号分别为2770、2771、2774、2775;行号只是本次查看定位,不是要填写的 Key。查看自己的版本时以完整 Key 为准。
标准穿刺焰矢的最后两行在bombardment中分别填写普通与高级载荷,前摇均为5,施法动作均为cast_up_long,魔法之风消耗分别为10与16。这些字段各司其职:提高消耗不会自动增加弹丸,修改动作名称也不会创建轰击。
主案例使用“穿刺焰矢”和“高级穿刺焰矢”。筛选piercing_bolts_of_burning时,截图还命中一条共用相关资源的其他记录;真正的两版载荷是后两行wh_main_spell_fire_piercing_bolts_of_burning及其_upgraded版。任意列搜索不是只搜 Key,复制前一定看清左列。
| 字段 | 含义与使用要点 |
|---|---|
bombardment_key |
轰击载荷唯一 Key。法术运行表的bombardment引用它,不是直接引用弹丸。 |
projectile_type |
实际生成的projectiles_tables记录,弹丸的直击、爆炸、破片还要往下追。 |
num_projectiles |
此轰击生成的投射物数量。不是目标部队数,也不是每枚伤害。 |
arrival_window |
投射物生成所分布的时间窗口;与最早生成时间一起阅读。不能把它直接当成弹丸飞行时间。 |
start_time |
载荷开始后最早生成投射物的时间。前面还可能有法术前摇,不能简单当成点击后立即开始倒数的唯一延迟。 |
radius_spread |
相对于目标中心的落点散布半径,不是每枚弹丸的爆炸半径。 |
launch_source |
生成位置模式,引用原版枚举定义,例如本例的above_target。其他模板也可以从施法者实体或其他位置生成,不限于天空轰击。 |
launch_vfx |
生成时使用的特效引用,不决定伤害。 |
launch_height |
常规战场生成高度。高度会与弹丸速度共同影响玩家看到的落下过程。 |
launch_height_underground |
地下战场使用的生成高度,不应因为普通地图测试正常便忽略。 |
audio_type |
轰击声音定义,继续查看audio_projectile_bombardments_tables。 |
randomise_launch |
随机化生成的开关。按同类原版模板配置,不把它理解成“勾选就会随机选择一种法术”。 |
deterministic_launch_cadence |
采用固定生成节奏的开关,和随机化生成不是同一个字段。当前原版表中两版均未勾选。 |
两版都是arrival_window=3、start_time=2、launch_source=above_target,但普通版num_projectiles=30、radius_spread=8,高级版分别为60与16,并引用各自的投射物。这不能简化为“高级版伤害翻倍”:落点区域也扩大了,同一敌军实际吃到多少弹丸,取决于队形、移动和每枚弹丸的爆炸等设置。
向右看,两版共用wh3_dlc23_bolts_of_burning生成特效,常规高度为150、地下高度为75,并勾选randomise_launch。这些是当前原版案例值,不是所有轰击都必须照抄的规定。
制作自己的轰击时按这条顺序接线:
- 在自建 Pack 复制同类轰击记录,把
bombardment_key改成独立 Key。 - 如果只改变数量、时间或散布,保留已有
projectile_type;如果改变弹丸本身,则复制投射物及需要独立修改的爆炸等子记录,并改好引用。 - 在新法术的
unit_special_abilities_tables.bombardment填入新轰击 Key,不是填新投射物 Key。 - 核对允许的目标、地面选点、目标距离、前摇、范围指示和声音。范围圈只是显示,不能代替实际散布与爆炸半径。
- 分别在常规与地下战场检查第一枚出现时间、最后一枚落下时间、散布、伤害、友军影响及特效收尾。本文没有把 DB 检查当成这些游戏内测试已经通过。
轰击生成位置的全部定义
projectile_bombardment_launch_sources_tables提供六个 Key;下列中文解释依据定义表说明,属于技术说明。
launch_source |
生成位置或方式 | 当前轰击记录使用情况 |
|---|---|---|
above_activater |
尝试在施放者上方生成。Key 中activater按原拼写保留。 |
未找到使用记录。 |
above_target |
尝试在目标上方生成。 | 有,适合从上空轰击的模板。 |
activaters_entities |
从施放者的实体生成;定义说明会忽略普通弹丸数量参数。 | 有,不能照搬天空轰击的数量配置。 |
at_target |
在目标附近、稍高于目标的位置生成。 | 有。 |
launch_and_explode |
直接产生爆炸。 | 有。 |
off_map |
按投射物射程朝部署区域方向偏移生成位置。 | 有。 |
实际显示还受launch_height、地下战斗高度、粒子效果和投射物控制。没有施放者的生成入口不能直接套用依赖施放者实体的模式。
魔法漩涡、风类和部分吹息
vortex指向battle_vortexs_tables。这条链控制区域载荷的持续时间、移动、碰撞、影响范围、伤害和特效。游戏界面类型为“吹息”或“魔法漩涡”,不保证底层只使用某一种表;以原版引用为准。也不要把阶段表的hp_change_frequency套到这张表上,它们不是同一个结算分支。
同一组运行记录中,标准烈焰风暴的2770、2771两行通过vortex引用各自载荷。左侧范围指示与右侧实际载荷是不同字段;只复制范围指示会让玩家看到选点圈,却不会自动生成烈焰风暴。
主案例是“烈焰风暴”与“高级烈焰风暴”,两条载荷 Key 为wh_main_spell_fire_flame_storm及其_upgraded版。这张表也服务于其他区域效果,不是每一行都对应玩家法术;选择模板时要看生成、移动和目标机制,不能只搜颜色相近的名称。
伤害、持续时间和附带状态:
| 字段 | 含义与使用要点 |
|---|---|
vortex_key |
区域载荷唯一 Key,法术运行表的vortex引用它。 |
damage |
基础伤害参数。Schema 说明伤害会向区域边缘衰减,不能把这个数字当成整场法术的固定总伤害。 |
damage_ap |
破甲伤害参数,和基础伤害分别设置。 |
duration |
载荷持续秒数,不等于阶段持续时间,也不等于法术冷却。 |
contact_effect |
命中实体时向其部队附加的阶段 Key。若只改载荷伤害,不必克隆不变的接触阶段;若要改附带状态,则复制阶段并改引用。 |
ignition_amount |
大于零时带有火焰伤害性质。不是额外增加同值伤害。 |
is_magical |
魔法攻击性质,不自动提供火焰伤害或破甲伤害。 |
is_spell |
此伤害是否受法术抗性影响,和is_magical是独立字段。 |
affects_allies、affects_enemies |
载荷是否影响友军、敌军,不能只检查法术选点时允许选谁。 |
当前原版普通版damage=11、damage_ap=6、duration=27,高级版为16、6、54。高级版既调整基础伤害,也延长存在时间,但破甲部分没有跟着翻倍。实际总伤害还受目标在区域内停留多久、区域移动、伤害衰减及抗性等影响,本教程没有用字段相乘冒充实测总伤害。
形状、半径和移动:
| 字段 | 含义与使用要点 |
|---|---|
shape |
区域形状,例如本例的circle。其他形状要沿用同类原版的尺寸组合。 |
start_radius、goal_radius |
初始半径与最终半径,单位为米。不是直径,也不是法术施放距离。 |
expansion_speed |
每秒扩张速度;还与detonation_force共同参与冲击动量。负值可产生向中心拉动的情况,Schema 要求此时起始与最终半径相同;不是“负数会自动成为另一种法术”。 |
infinite_height |
勾选时使用无限高度柱状体而不是球状体。仍需结合目标限制与其他空间设置测试飞行、平台等对象。 |
start_height、goal_height |
shape=rectangle时使用的形状尺寸参数。不是生成点离地高度;圆形案例的值不能当作矩形模板。 |
height_off_ground |
区域中心离地高度。普通贴地案例通常为0。 |
movement_speed |
中心移动速度,米/秒;0表示中心保持不动,不代表取消伤害或停止范围扩张。 |
move_change_freq |
移动方向改变的时间间隔,单位是秒,不是“每秒改变几次”。 |
change_max_angle |
随机改变方向的最大角度,最大360;0表示不改变方向。 |
follow_target |
勾选时按movement_speed跟随目标单位,并忽略其他移动属性。不能同时假设随机游走参数仍按原方式生效。 |
两版烈焰风暴都是初始半径1、最终半径10、扩张速度20、中心移动速度2、改向间隔1、最大改向角360,并勾选infinite_height。想制作原地持续区域可从同类静止模板入手;想制作沿直线移动的法术,要对照原版同类的方向、生成点与形状,而不是只把烈焰风暴改向角设为零便宣布完成。
生成、碰撞和表现:
| 字段 | 含义与使用要点 |
|---|---|
launch_source |
生成位置模式。本例为target_centre,其他模板可能使用target_near_edge、activator_front等,必须从实际枚举选择。 |
launch_source_offset |
为 AI 的吹息、风类选点提供偏移参数,不是任意模型位移。 |
delay |
载荷生成后等待多久才开始造成伤害、移动和碰撞等;不能直接等同于“特效也晚这么久生成”。 |
num_vortexes |
生成多少个区域载荷,不是伤害结算次数。 |
delay_between_vortexes |
多个载荷之间的生成间隔。不要照旧注释认定永远每秒一个。 |
detonation_force |
冲击力度,与扩张速度一起影响击退、击倒等表现,不是生命伤害值。 |
building_collision |
区域中心遇到建筑时的处理类型,完整两项为1.ignore与2.expire;第一项的定义说明与 Schema 注释存在冲突,见下文。 |
launch_vfx |
生成时的特效引用,可与持续视觉资源分开。 |
composite_scene |
区域使用的 Composite Scene 资源,可以包含特效和声音。修改路径不会自动创建资源。 |
composite_scene_blood |
血腥表现对应资源,沿同类原版处理。 |
composite_scene_group |
通过场景组组织多个 Composite Scene;需继续追踪组内资源,不是法术分组表。 |
battle_vortex_launch_sources_tables只有三个定义,当前原版均有使用:activator_front在施放者前方,target_centre在指定目标位置,target_near_edge在指定区域靠近施放者的一侧边缘。不存在本教程可供选用的target_near_centre定义。shape当前使用circle与rectangle;选择矩形还要配置对应长宽,不能只换形状名称。
battle_vortex_collision_responses_tables完整定义为1.ignore与2.expire。2.expire的定义说明是在碰撞时结束;1.ignore的定义说明是忽略建筑继续移动,但 RPFM Schema 注释将同一值解释为反向反弹。两份只读资料存在冲突,本教程保留原版1.ignore,不将穿过或反弹当作已验证表现。需要改变建筑碰撞时,直接以同一法术对照两值,在同一建筑位置验收。
烈焰风暴两版各自引用flame_storm.csc与flame_storm_upgraded.csc,生成点为target_centre、冲击力度500。数值修改不会自动重做这两个视觉资源,尤其扩大范围或延长时间后,应检查视觉大小、声音和结束时刻是否仍与伤害区域一致。
两版的delay=0、num_vortexes=1,并勾选affects_allies。法术允许玩家选择地面,并不意味着伤害只打敌军;友军伤害必须到载荷这一层核对。composite_scene_group为空,也不能得出没有视觉效果的结论,因为前面的composite_scene已有资源引用。
两版勾选is_spell与affects_enemies,形状为circle,没有勾选follow_target。因此本例不能当作持续追踪目标的模板;需要追踪时要同时考虑移动速度、目标能否失效及 AI 使用方式。
制作新区域载荷时,先复制并重命名vortex_key,只克隆需要改变的接触阶段或表现引用,再把新法术运行记录的vortex改指新载荷。分别测试选点、移动路径、边缘伤害、友军、建筑碰撞、飞行单位、持续时间和结束清理。仅把法术type改成“魔法漩涡”,不会自动建立这些连接。
增益、妖法、直接伤害和治疗
这些法术常由阶段直接完成数值、属性或生命变化。它们也可以附带显示、音频、接触效果或其他载荷。
召唤和变身
spawn_type在当前unit_special_abilities_tables中的非空值为unit_position和unit_position_offset。它们用于生成位置配置,不能仅凭名称推导偏移距离;在spawn_type列筛选后,连同spawned_unit、生成朝向、动作和生命处理一起比较,普通法术没有生成部队时保留空值。
这类法术不是把普通伤害数值换成一个单位名称,而是由运行记录选择生成的陆战单位,并决定它与施法者是什么关系。以下列都位于unit_special_abilities_tables,不是main_units_tables:
| 字段 | 应怎样理解和检查 |
|---|---|
spawned_unit |
生成目标,引用land_units_tables.key。不要填写主单位 Key、模型路径或中文兵种名。 |
spawn_type |
引用special_ability_spawn_types_tables.key,选择生成方式;先从同类原版法术追踪,不要凭英文名称自造值。 |
spawn_is_transformation |
描述生成新单位时是否替换施法者,区分“额外召唤一支部队”和“施法者变成另一种形态”。 |
spawn_is_decoy |
表示生成的是施法者的诱饵副本,界面可使用原施法者的数据;它不是普通召唤必勾的开关。 |
spawn_shares_health_and_fatigue |
控制变身单位与原施法者是否共享生命和疲劳状态。不是给新单位回满生命,也不是随意填写生命值的列。 |
can_be_copied_to_transformation_unit |
决定这项技能是否可以复制到相关变身单位;不是决定模型能否完成变形。 |
选择模板时先分清目标是普通召唤、替换形态还是诱饵。用游戏中的法术名称找到 Loc 和技能 Key,再在unit_special_abilities_tables中对比上述列,沿spawned_unit追到陆战记录,沿spawn_type追到生成方式;如果目标是自己制作的新部队,必须先把它的单位数据、实体、模型和动作配齐。
普通召唤不应照搬变身的生命共享开关,变身也不能只照搬普通召唤的施法动作。还要对照同类模板检查阶段中的持续、召唤后限制、结束处理以及相关许可。自定义战斗能选到某部队,与该部队能否被特定法术正确生成,是两件需要分别验证的事。
上述字段关系可在当前 Schema 中核对,但不同原版机制的生成和回收行为不能只凭列名断言。完成后在游戏里检查生成数量与位置、所属玩家、寻路、兵牌、动作、剩余生命、疲劳、法术结束和施法者死亡时的处理。不能只看到模型出现,就认为召唤或变身已经完整实现。
法术与阶段的连接
special_ability_to_special_ability_phase_junctions_tables包含:
| 字段 | 含义 |
|---|---|
special_ability |
普通版或增幅版法术 Key,直接引用unit_abilities_tables.key,与对应运行记录使用同一个值。 |
phase |
阶段 Key。 |
order |
多阶段顺序。 |
target_self |
阶段作用于施法者。 |
target_friends |
阶段作用于友军。 |
target_enemies |
阶段作用于敌军。 |
普通版和增幅版可以共用阶段,但这会让两者同步变化。需要不同持续时间、数值或显示时,应复制成两个阶段 Key,再分别连接。
“尼科之咒”和“高级尼科之咒”的标准两行分别连接同名阶段,允许阶段作用于自身和友军,不作用于敌军。其他特殊版本可能共用标准阶段,所以改原版共享阶段前必须查找引用;新法术需要独立治疗强度时,应复制阶段并改连接,而不是改所有使用者共用的那一行。
多阶段法术不一定按“第一阶段结束后才进入第二阶段”这么简单。order、持续时间、目标和引擎处理会共同决定表现;复制模板时保留完整记录,并通过实战观察每个阶段的出现和移除时机。
法术阶段详解
持续时间、正负面和动作控制
| 字段 | 含义与使用要点 |
|---|---|
id |
阶段唯一 Key。 |
duration |
阶段持续秒数。应与法术持续时间和界面说明一致。 |
effect_type |
阶段的正面或负面分类,影响界面表达;不会自动替你改变数值正负,也不是属性连接表的attribute_type。 |
requested_stance |
阶段期间请求的动作姿态。 |
cant_move |
阶段期间不能接收普通移动或攻击命令。 |
freeze_fatigue |
阶段期间将体力保持为“精神饱满”(疲劳数值为0),不会把已经疲劳的状态原样锁住。 |
fatigue_change_ratio |
按比例改变疲劳。 |
inspiration_aura_range_mod |
修改激励光环范围。 |
ability_recharge_change |
修改目标的技能冷却。 |
伤害、治疗、复活和魔法之风
| 字段 | 含义与使用要点 |
|---|---|
hp_change_frequency |
每隔多少秒结算一次生命变化。 |
damage_amount |
每个受影响实体、每次结算的伤害量。 |
heal_amount |
《战锤 III》的生命恢复比例参数,不能把旧 Schema 中“总治疗量”的注释理解成固定生命点。当前标准尼科之咒两版均为0.008,按比例为0.8%;同时查看生命变化间隔、持续时间和治疗上限。不是每个士兵固定恢复0.008点。 |
max_damaged_entities |
每次最多影响多少实体。负值常表示不使用普通上限,但要按模板验证。 |
resurrect |
过量治疗能否复活阵亡士兵。 |
mana_regen_mod |
每秒改变魔法之风恢复。 |
mana_max_depletion_mod |
修改魔法之风系统的最大耗竭参数。Schema 没有给出它在当前游戏中的完整结算关系,不能直接当作法术消耗或储量上限;沿用同类原版模板并实测。 |
imbue_magical |
赋予魔法攻击。 |
imbue_ignition |
赋予火焰攻击相关状态。 |
直接伤害和治疗法术必须同时考虑单位人数。每实体伤害、实体上限、结算频率和持续时间会共同决定总效果;不能只看damage_amount一个数字。
这次截图中标准尼科之咒两版持续18秒,生命变化间隔1秒,勾选resurrect,damage_amount=0。两版的阶段治疗参数相同并不代表高级版没有变化,还要回到运行表比较作用半径、目标数量和魔法之风消耗。实际总回复还受治疗上限、剩余实体、修正效果和结算时机影响,不能仅凭18 × 0.8%承诺实战一定回复多少;本轮未运行游戏验证边界帧和实体分配。
接触效果、显示、音频和作用对象
| 字段 | 含义与使用要点 |
|---|---|
imbue_contact |
让目标攻击临时附带另一个接触阶段。 |
phase_display |
连接阶段显示效果。 |
phase_audio |
阶段音频。 |
is_hidden_in_ui |
隐藏阶段的界面条目,不会关闭效果。 |
affects_allies |
阶段标记为影响友军。 |
affects_enemies |
阶段标记为影响敌军。 |
原版尼科之咒阶段里的affects_allies和affects_enemies都勾选,但前面的阶段连接明确不选择敌军。这正说明这些字段不能机械地设成一模一样,更不能只看阶段表便断言该治疗法术会治疗敌军。保持所选原版链完整,改目标时同时核对运行表、阶段连接和排除条件,再在游戏中测试。
弹药、传播和冷却控制
| 字段 | 含义与使用要点 |
|---|---|
replenish_ammo |
按最大弹药比例恢复或消耗弹药。 |
composite_scene_group |
阶段开始时触发复合场景。 |
spreading |
连接传播规则。 |
freeze_recharge |
阶段期间暂停目标技能的冷却计时。 |
治疗、移除魔法攻击和斩杀
| 字段 | 含义与使用要点 |
|---|---|
heal_amount |
前面生命变化章节解释的同一个治疗量字段,实际位于当前表右侧,不是第二个需要重复填写的治疗量。 |
barrier_heal_amount |
魔屏恢复比例。没有魔屏系统的单位不会因此自动获得魔屏。 |
remove_magical |
临时移除魔法攻击,不是驱散全部法术或移除所有阶段。 |
execute_ratio |
生命比例低于或等于阈值时直接击杀。 |
阶段数值和属性效果
special_ability_phase_stat_effects_tables包含phase、stat、value和how。常见add用于固定加减,mult用于倍率。倍率1.15通常表示乘以 1.15,而不是增加 1.15 点。
一个阶段可以有多行数值效果。截图里的“灵魂枯萎”和“高级灵魂枯萎”各有三行:stat_armour=-30 add降低 30 点护甲强度,stat_melee_damage_ap=0.75 mult和stat_melee_damage_base=0.75 mult分别把破甲武器杀伤与基础武器杀伤乘以 0.75。这里不是“减少 0.75 点”,也不是“增加 75%”。
两版这三项数值恰好相同,所以不能把“高级版”理解成每项减益都翻倍;差异还可能在目标、范围、持续时间等位置。自定义高级版若要把护甲减益改成-60 add,应只修改新高级阶段的对应行;如果两版共用一个阶段,修改阶段会同时改变两者。
special_ability_phase_attribute_effects_tables使用:
| 字段 | 含义 |
|---|---|
phase |
阶段 Key。 |
attribute |
unit_attributes_tables中的引擎属性。 |
attribute_type |
positive通常添加,negative通常压制。 |
属性与数值是两套机制。想临时赋予潜行,应使用属性效果;想提高远程抗性,应使用阶段数值效果。不要根据游戏说明文字猜表单。
截图中的“征战之光”和“高级征战之光”使用unbreakable,官方名称为“永不战败”,并用positive赋予属性。这里的正负表示“获得还是压制该属性”,不是对玩家有利还是有害;例如赋予silenced(沉默)也可以是positive,不能因沉默是负面状态便填成negative。阶段的effect_type与这里的attribute_type不要混淆。
阶段显示和额外说明
special_ability_phase_displays_tables负责旗帜底部特效(banner_vfx)、激活特效(active_vfx)、实体特效(entity_vfx)、挂接方式和缩放方式。它只控制表现,不提供伤害或属性。
尼科之咒的普通与高级阶段共用wh_main_spell_vampires_invocation_of_nehek显示记录:active_vfx为空,banner_vfx=wh_main_generic_banner_buff,entity_vfx=wh_main_generic_entity_hp_regen,挂接类型为top,并启用use_new_vfx_scaling。没有填写active_vfx不代表没有特效,因为旗帜与实体分支仍有引用。复制新显示记录后,还要把新阶段的phase_display改到新 Key;只建显示记录而不连接不会自动生效。
额外说明有两种入口,不能把它们混成一张表。法术按钮自身的说明使用:
unit_abilities_tables.key
↓ ability
unit_abilities_to_additional_ui_effects_juncs_tables
↓ effect
unit_abilities_additional_ui_effects_tables.key
截图中标准尼科之咒连接三条说明,高级版连接四条,多出wh_main_spell_upgraded_added_effect_range(效果范围扩大)。左列是法术 Key,右列是额外说明 Key;不是治疗量,也不是战役effects_tables中的 Effect。要给新法术添加一条说明,在自己的连接表新增ability=新法术Key、effect=说明Key,并保证这两个值的组合不重复。
如果是某个阶段生效后才需要补充说明,另一条入口是:
special_ability_phases_tables
↓
special_ability_phases_to_additional_ui_effects_junctions_tables
↓
unit_abilities_additional_ui_effects_tables
这条链负责补充需要单独说明的界面文字,不是所有“近战攻击”“护甲”等自动数值提示都必须走这条链。额外说明的定义只保存 Key、排序和显示状态,文字在 Loc 中,Key 格式为unit_abilities_additional_ui_effects_localised_text_说明Key。它不会替代阶段实际效果;修改机制后要核对说明是否仍然准确。
原版wh_main_spell_upgraded_added_effect_range的sort_order=1、effect_state=magic,对应 Loc 文本是“效果范围扩大”。这些值只负责提示的排序与样式,不会把范围改成 1,也不会自动给法术增加范围。新说明需要独立 Key、定义行、Loc 和正确的法术或阶段连接;只写一句 Loc 而没有连接,按钮不会凭空找到它。
阶段特效挂接位置速查
special_ability_phase_displays_tables.entity_vfx_attach_type在当前原版中实际使用七项:bottom、bottom_rotated、front、front_rotated、hips、top、top_rotated。它们分别以底部、前方、髋部或顶部作为挂接位置;带_rotated的值采用对应旋转方式,模型朝向仍须实看。
先在同表按已有entity_vfx筛选,比较它搭配的挂接类型与use_new_vfx_scaling。只换同尺寸效果时保留挂接方式;要从脚下光环改为头顶效果,再选择top同类记录作为整体模板。没有实体特效时,不需要为凑齐字段新建粒子 Key。
施法目标和使用限制
无效目标
special_ability_to_invalid_target_flags_tables把法术连接到不能成为目标的状态或类别。例如飞行、地面、大型、生命比例、单位类型或特殊派系属性。
无效使用条件
special_ability_to_invalid_usage_flags_tables在施法者或战场满足某条件时禁止使用,例如正在近战、正在移动、魔法之风不足、没有目标在范围内或其他法术正在施放。
自动关闭
special_ability_to_auto_deactivate_flags_tables用于已经激活的技能在条件出现后自动结束,常见于被动、姿态和特殊持续法术。
图中编号①是无效目标标记,②是使用该限制的法术。这里的关系表示“遇到这种目标时不可用”,不能把标记名称当作允许目标理解。
尼科之咒的普通与高级版各连接hp_replenish_cap_reached、living_unit和on_a_platform。第一项在官方提示中是“已达到生命恢复上限”;living_unit的对应另一面提示是“亡灵”,不能把它理解成“只要还有生命值就不能治疗”。第三项的官方提示为“位于平台上或下”,不要自行缩写成只禁止某一种城墙目标。
做一种可治疗其他对象的新法术时,复制治疗阶段还不够:还要检查并调整新法术的这些限制连接。只给新 Key 增删连接,不去改全游戏共用的标记定义;删掉一个限制也不表示所有对象都变成合法目标,运行规则和阶段对象设置仍会参与判断。
这些连接引用special_ability_invalid_usage_flags_tables.flag_key。原版 Key 经常包含not、no、above、below等词,而连接表本身又代表“无效”,容易形成双重否定。不要凭英文名称直接填写,必须读取说明并检查一个实际使用者。
查说明时,在 Loc 搜索special_ability_invalid_usage_flags_flag_description_标记Key和special_ability_invalid_usage_flags_alt_description_标记Key。两条提示常从相反方向描述条件,应结合连接表用途阅读,不能随便选一条当成“允许条件”。
常用条件 Key 与两种提示
条件定义共有 229 项,包含大量特定资源、生命阈值和派系机制。普通技能先使用下面这些已核对的常见项;需要特殊条件时,在special_ability_invalid_usage_flags_tables.flag_key筛选完整 Key,再用同值在目标、使用或自动关闭连接表中查实际使用者。
| 条件 Key | 官方主提示 | 官方反向提示 |
|---|---|---|
flying_currently |
飞行时 | 已落地 |
flying_unit |
飞行部队 | 地面部队 |
ground_unit |
地面部队 | 飞行部队 |
grounded |
已落地 | 飞行时 |
unit_is_large |
兵模体积必须为小 | 兵模体积为小 |
unit_is_not_large |
兵模体积必须为大 | 兵模体积为大 |
on_a_platform |
位于平台上或下 | 不位于平台上或下 |
moving |
移动时 | 未移动 |
not_moving |
未移动 | 移动时 |
engaged_in_melee |
陷入近战 | 脱离近战 |
out_of_melee |
脱离近战 | 近战时 |
health_above_50% |
生命值高于50% | 生命值低于50% |
undead_unit |
亡灵 | 存活时 |
这两列是界面提示,不应直接当成同方向的逻辑表达式。例如在无效目标表中用unit_is_large排除大型目标时,玩家会看到要求小型目标的提示。限制目标用special_ability_to_invalid_target_flags_tables.invalid_target;限制施放者使用条件用special_ability_to_invalid_usage_flags_tables.invalid_usage_flag;要求技能运行中停止用special_ability_to_auto_deactivate_flags_tables.deactivate_flag。三张表都在special_ability填写技能 Key,每个条件各建一行。
原版还定义health_above_10%、health_above_20%、health_above_25%、health_above_50%、health_above_75%等阈值条件。若希望生命值高于一半时不能使用,可从使用条件中的health_above_50%模板开始;先保留一条明确条件验证,不把多个含否定词的条件同时拼进去。
魔法之风分组
special_ability_groups_tables
这张表定义某种魔法之风或复合施法分组在战斗界面中的身份。
| 字段 | 含义与使用要点 |
|---|---|
ability_group |
分组唯一 Key。 |
name(本地化,不是 Pack DB 列) |
分组名称在 Loc 中配置,Key 为special_ability_groups_name_分组Key。面向玩家使用官方游戏名称。 |
icon_path |
分组图标路径。 |
sort_order |
自定义战斗或法术选择界面中的排序,数值较小通常更靠前。 |
colour_r、colour_g、colour_b |
分组界面颜色。当前 RPFM 把这组三通道合并显示为Colour Hex,不是少了三个字段。 |
button_name |
战斗界面分组按钮图片的查找名。 |
sound_event |
分组界面声音事件。 |
sound_switch |
模块化界面音频开关。 |
is_naval |
是否用于海军或海军人物的历史字段。普通陆战法术不要随意勾选。 |
is_composite_group |
分组在界面中的复合分组标记。不能只根据名称认定它必须包含不同种类的法术:原版火焰系高级分组也勾选了它。沿用目标分组模板,并一起检查成员和显示开关。 |
unique_id |
分组唯一数值标识,不能与其他分组冲突。 |
show_lore_icon |
是否在兵牌或战斗界面显示魔法之风图标。 |
special_edition_mask |
特殊版本掩码。没有明确模板时沿用同类原版。 |
图中编号①是分组 Key,②是共用的图标路径,③是排序。普通版与高级版分组各有独立记录;截图里的排序分别为4与0,不是法术的学习等级。
向右查看这两行:普通分组没有勾选Is Composite Group,高级分组勾选;Show Lore Icon则普通分组勾选、高级分组不勾选。两者共用lore_fire按钮查找名、fire声音开关和D35F12颜色。它们说明分组还承担界面组织工作,不只是一个法术名单;不能把这些开关全改成同一个值。
把法术加入分组
special_ability_groups_to_unit_abilities_junctions_tables包含:
| 字段 | 含义 |
|---|---|
special_ability_groups |
魔法之风分组 Key。 |
unit_special_abilities |
加入该分组的法术 Key。 |
图中编号①是魔法之风分组,②是加入分组的具体法术。一个分组有多少法术,就会出现多少条成员连接。
普通分组与增幅分组可能分别连接普通版和增幅版。当前原版“火球术”普通版出现在wh_main_lore_fire等分组中,增幅版出现在对应的wh_main_lore_fire_upgraded分组中。不同人物还可能使用复合分组或专用分组,所以不能看到法术属于火焰系就只搜索一个固定分组。
把分组给单位
special_ability_groups_to_units_junctions_tables包含ability_group、unit和group_page_order。其中unit引用main_units_tables.unit,不是land_units_tables.key。
这张表主要决定单位在战斗界面拥有哪个法术分组和页面顺序。把分组连接给单位,不等于其中所有requires_effect_enabling法术都会自动解锁;具体法术仍可能需要人物技能或 Effect 启用。
原版烈焰法师的wh_main_emp_cha_wizard_fire_0至_3分别有一条连接,全部指向wh_main_lore_fire,group_page_order=0。这四行不是四个法术,而是四个单位记录使用同一法术页面。制作有不同坐骑或形态的施法者时,逐个检查实际使用的main_units_tables.unit,不要只连步行形态便认为所有形态都齐全;也不要把人物agent_subtype填进unit。
新增连接时先在自己的表里复制对应行,再把unit改成自己的 Main Units Key。复用原版分组时保留ability_group;制作独立法术列表时才新建分组和成员连接,并把这里改指新分组。之后仍要检查每个法术是否需要 Effect 解锁。
修改整组法术
effect_bonus_value_special_ability_group_junctions_tables可以让 Effect 修改整个魔法之风分组。当前可用 Bonus Value 包括:
| Key | 作用 |
|---|---|
cost_percentage_mod |
按百分比修改组内法术的魔法之风消耗。 |
miscast_percentage_mod |
按百分比修改组内法术失误概率。 |
recharge_rate_percentage_mod |
按百分比修改组内法术冷却速度。 |
spell_mastery_percentage_mod |
修改法术精通。 |
target_intercept_range_mod |
按百分比修改组内法术目标距离。 |
storm_of_magic_ascendency_weight_mod |
修改特殊魔法风暴模式中的优势权重。 |
整组修正适合“某人物更擅长一种魔法之风”之类设计;只想修改一个法术时,应使用effect_bonus_value_unit_ability_junctions_tables,不要误伤同组所有法术。
制作普通版与增幅版
第一步:复制两条界面记录
- 复制普通版和增幅版
unit_abilities_tables记录。 - 改成两个自定义 Key。
- 普通版
overpower_option指向自定义增幅版。 - 增幅版
overpower_option留空,除非原版机制明确还有下一层。 - 为两条记录分别建立名称和说明 Loc。
第二步:复制两条运行记录
- 在
unit_special_abilities_tables中复制普通版和增幅版。 - 让 Key 与界面记录一一对应。
- 分别设置魔法之风消耗、失误、目标、范围、冷却和载荷。
- 为新
unique_id检查冲突。 - 保留机制相近模板的 AI、自动战斗、声音和施法动作。
第三步:处理实际效果
- 阶段型:复制两组阶段和效果,或有意共用不变部分。
- 投射物型:分别连接普通和增幅投射物,或共用投射物后用阶段增加差异。
- 轰击、魔法漩涡:复制相应载荷及其子记录。
- 召唤:检查生成单位、生成类型、生命共享和许可。
第四步:加入魔法之风分组
把普通版和增幅版分别连接到正确的普通分组与增幅分组。复合施法者、特殊人物和独立法术页面可能使用不同分组路径,应沿目标人物的原版数据复制。
第五步:授予并解锁
选择兵种固定自带、人物技能 Effect、装备、科技、特性或脚本中的一种真实入口。不要同时添加多条授予路径,除非设计上确实需要。
授予法术
路线一:兵种永久自带
land_units_to_unit_abilites_junctions_tables可以直接把法术 Key 连接给land_units_tables.key。这条路径适合:
- 兵种天生拥有的主动技能式法术;
- 固定绑定法术;
- 不需要人物技能树解锁的特殊单位法术。
如果requires_effect_enabling已勾选,直接连接后仍可能因为缺少enableEffect而不可见。复用原版法术时先检查原法术的启用方式,不要只复制拥有者连接。
截图使用末日火术士wh2_dlc10_def_cav_doomfire_warlocks_0。前两行分别连接“弱化毁灭魔矢”wh2_dlc10_spell_bound_lesser_doombolt和“灵魂枯萎”wh2_dlc10_spell_bound_soulblight;后面还有该兵种的其他技能,不能把筛选出的五行都当成法术。冒号后的中文是 RPFM 的查找显示,不是要写入 Key 的内容。
如果只给自己的兵种添加这里的一种已有绑定法术:在自己的连接表复制相应一行,保留ability,把land_unit改成自己的 Land Units Key,然后检查法术本身的目标、次数、冷却、载荷和启用要求。不要顺带复制该兵种的全部派系技能。要改变法术机制时才另建新法术 Key,并把这条连接的ability改指新 Key。
路线二:人物技能解锁
常见链路是:
character_skills_tables
↓ 第几级应用什么 Effect
character_skill_level_to_effects_junctions_tables
↓
effects_tables
↓ Effect 对法术做什么
effect_bonus_value_unit_ability_junctions_tables
├─ bonus_value_id = enable
└─ bonus_value_id = enable_overchage
character_skill_level_to_effects_junctions_tables关键字段:
| 字段 | 含义 |
|---|---|
character_skill_key |
人物技能 Key。 |
level |
该技能等级。 |
effect_key |
应用的 Effect。 |
value |
Effect 数值。启用类通常参考原版使用1。 |
effect_scope |
Effect 作用范围。个人法术常参考character_to_character_own等人物自身范围。 |
图中编号①是人物技能 Key,②是 Effect Key,③指向等级、作用范围与数值。这张当前 WH3 表只有五个字段,没有单独的is_factionwide列;不要寻找旧教程中的勾选框,作用对象要查看effect_scope。学会技能后是否获得法术,要沿②继续追到法术 Bonus Value 连接。
截图的两个技能等级共七条效果连接,全部使用character_to_character_own。wh2_main_effect_ability_overcast_fireball在等级 1 和等级 2 都是value=1;等级 2 还列出了高级火球术失误修正,以及普通与高级版各自的消耗修正。这里的level是该人物技能的等级,不是法术版本序号,也不是人物等级。
effect_bonus_value_unit_ability_junctions_tables关键字段:
| 字段 | 含义 |
|---|---|
effect |
effects_tables.effect。 |
bonus_value_id |
启用、增幅、消耗、冷却、失误等操作。 |
unit_ability |
普通法术 Key。增幅关系通常由该法术的overpower_option继续找到增幅版。 |
当前原版“火球术”的人物技能链说明了为什么必须追完整引用:wh_main_skill_all_magic_fire_01_fireball应用wh2_main_effect_ability_overcast_fireball;这个 Effect 在技能 Bonus Value 表中既有enable,也有enable_overchage,目标都是普通版wh_main_spell_fire_fireball,普通版再通过overpower_option指向增幅版。不能只看 Effect 名称猜它只启用增幅版。
制作自己的解锁 Effect 时,在effects_tables新建独立 Key,再复制这里所需的操作连接,把effect改成新 Effect,把unit_ability改成新普通法术 Key。若设计为先学普通版、再学高级版,就分别建立只含enable和只含enable_overchage的 Effect,再让人物技能相应等级授予;不能复用图中这个同时启用两者的 Effect,却期望它只启用其中一个。
不同原版法术可能把普通解锁和增幅解锁拆成两个 Effect,也可能由虚拟人物技能、专用人物技能或脚本处理。复制前必须搜索你选定模板的实际链。
把人物技能放进技能树
如果使用已有人物技能,只需复用或扩展它的 Effect 链。新建人物技能时,还要处理:
character_skills_tables
character_skill_nodes_tables
character_skill_node_sets_tables
character_skill_node_set_items_tables
character_skill_node_links_tables
这些表决定技能节点属于哪个人物技能树、位置、前置和连线。它们不是法术运行链本身。只建立法术 Effect 而没有把人物技能节点放进目标人物的技能树,玩家仍然无法学习。
路线三:装备、科技、特性或事件
这些系统最终也常通过effects_tables进入effect_bonus_value_unit_ability_junctions_tables。区别在于 Effect 的上游来源不同:装备、科技、特性或事件各有自己的连接表和作用范围。
不要因为示例使用人物技能,就把所有法术都塞进人物技能树。先决定玩家应该通过什么条件获得法术,再从对应系统向下追到 Effect。
路线四:魔法之风分组
给单位连接special_ability_groups_tables记录主要决定战斗界面中的法术页面与分组。它不能代替单个法术的enableEffect。常见施法者同时拥有分组连接和人物技能解锁链,两者职责不同。
修改法术消耗、冷却、次数和法术精通
effect_bonus_value_unit_ability_junctions_tables当前常用 Bonus Value:
| Key | 作用 |
|---|---|
enable / disable |
启用或禁用法术。 |
enable_overchage / disable_overchage |
启用或禁用增幅施放。 |
cost_mod |
加减固定魔法之风消耗。 |
cost_percentage_mod |
按百分比修改消耗。 |
recharge_mod |
按百分比修改冷却。 |
shared_cooldown_mod |
修改共享冷却。 |
uses_mod |
加减使用次数。 |
miscast_percentage_mod |
按百分比修改失误概率。 |
active_time_mod |
按百分比修改持续时间。 |
effect_range_mod |
按百分比修改效果范围。 |
target_intercept_range_mod |
按百分比修改目标距离。 |
spell_mastery_percentage_mod |
修改法术精通。 |
forced_spell_mastery_mod |
强制替换法术精通原始值。没有明确模板时不要使用。 |
固定值和百分比修正方向不能只凭正负号猜。查看同一个 Bonus Value 的多个原版 Effect,再在游戏内对比修改前后面板和实际消耗。
制作绑定法术
- 选择一个载荷、目标方式和施法动作相近的原版绑定法术。
- 复制
unit_abilities_tables并使用source_type=bound。 - 复制
unit_special_abilities_tables,通常将mana_cost设为0,用num_uses和recharge_time控制。 - 按模板保留或清除失误设置;不要仅凭“绑定法术不会失误”删除特殊机制。
- 复制实际阶段或载荷。
- 通过兵种、装备、Effect 或其他符合设计的来源授予。
- 检查游戏界面显示为“绑定法术”,而不是普通法术或主动技能。
绑定法术不是普通法术把消耗改成 0 就结束了。来源类型、次数、授予来源、分组、冷却和界面说明都要一致。
常见故障
法术完全不出现
依次检查:
- 法术是否被兵种、魔法之风分组或人物技能正确授予。
unit_abilities_tables与unit_special_abilities_tablesKey 是否一致。requires_effect_enabling是否需要enableEffect。- 人物技能等级、Effect、作用范围和数值是否正确。
is_hidden_in_ui是否误勾选。- 普通版是否加入正确的魔法之风分组。
普通版出现但不能增幅
检查普通版overpower_option、增幅版两张核心表、enable_overchageEffect、增幅分组连接、魔法之风消耗和人物技能等级。数据库字段拼写必须是overchage。
可以选择目标但施放后没有效果
检查法术目标字段、阶段连接的目标勾选、阶段 Key、阶段效果引用,以及载荷字段是否指向有效投射物、轰击、魔法漩涡或召唤单位。
法术打错目标
同时检查target_friends、target_enemies、target_ground、地面目标下方限制、阶段连接目标、阶段affects_allies/affects_enemies和无效目标条件。
增幅版与普通版伤害相同
检查两者是否意外共用同一阶段或载荷,以及增幅版是否真的连接到自定义阶段、投射物、轰击或魔法漩涡。只提高mana_cost不会自动提高效果。
法术失误不生效或概率异常
检查miscast_chance、miscast_explosion、miscast_global_bonus、个人与分组 Effect 的miscast_percentage_mod。确认数值是比例还是百分比修正,不要混用。
法术图标、名称或说明错误
检查icon_name、普通与增幅 Loc Key、type、source_type、额外界面效果和魔法之风分组名称。不要直接覆盖原版 Loc。
人物学会技能后仍没有法术
检查人物技能等级是否连接正确 Effect、Effect 是否连接enable、effect_scope是否作用于人物自身,以及法术requires_effect_enabling和授予分组是否匹配。
AI 不会施法
检查ai_usage、AI 模板组、目标类型、施法距离、载荷、魔法之风消耗和自动战斗字段。复制外观相似但目标机制不同的模板,最容易导致 AI 无法选点。
游戏内验收清单
RPFM 诊断不能验证施法动画、目标选择、总伤害和游戏内术语。至少进行以下检查:
- 法术名称、说明、图标、类型和来源显示正确。
- 普通版与增幅版可以按预期切换,消耗和失误概率正确。
- 魔法之风分组名称、图标、颜色、顺序和页面位置正确。
- 自身、友军、敌军、地面、飞行与大型目标的允许和禁止状态正确。
- 最小距离、最大目标距离、作用范围和载荷射程互相匹配。
- 前摇、施法动作、声音、粒子特效和载荷出现时间同步。
- 阶段持续时间、结算频率、实体上限、数值和属性与说明一致。
- 投射物、轰击、魔法漩涡、爆炸和阶段没有重复结算伤害。
- 增幅版确实使用自己的阶段或载荷,没有意外继续引用普通版共享记录。
- 法术失误会在正确条件下发生,并使用正确爆炸或惩罚。
- 绑定法术不错误消耗魔法之风,次数和冷却正确。
- 人物技能在未学习、普通等级、增幅等级和重置技能后分别表现正确。
- AI 能在合理目标和时机施法,自动战斗没有明显异常。
- 与其他 Mod 同时加载时,没有法术 Key、分组 Key、
unique_id和 Loc Key 冲突。

