远程武器详解
远程攻击不是一个伤害数字,而是一条由多个表单共同组成的数据链。普通弓弩至少要连接“单位 → 远程武器 → 投射物”;火箭、炸弹、霰弹、制导弹、穿透弹和可切换弹药还会继续连接爆炸、破片、显示、命中效果、弹药类型等表单。
本文只讲 RPFM 中能够完成的数据配置,不制作发射动画、开火事件、弹丸模型、粒子特效或音频资产。第一次制作远程单位时,可以先完成制作兵种:远程单位中的基础流程,再用本文逐项理解和扩展数据。
本文列名以《全面战争:战锤 III》当前表结构为准。RPFM 会把字段显示为带空格的标题,例如
primary_missile_weapon显示成Primary Missile Weapon。本文优先写数据库原名,方便搜索、对照 Schema 和 Assembly Kit。
先看完整数据链
land_units_tables.primary_missile_weapon
↓
missile_weapons_tables.default_projectile
↓
projectiles_tables
├─ projectile_display ─────────→ projectile_displays_tables
│ └─ impact → projectile_impacts_tables
├─ explosion_type ─────────────→ projectiles_explosions_tables
│ └─ shrapnel → projectile_shrapnels_tables
│ └─ projectile → projectiles_tables
├─ homing_params ──────────────→ projectile_homing_params_tables
├─ projectile_penetration ─────→ projectile_penetration_junctions_tables
├─ scaling_damage ─────────────→ projectiles_scaling_damages_tables
└─ projectile_shot_type_display → projectile_shot_type_displays_tables
missile_weapons_tables.key
└─ missile_weapons_to_projectiles_tables ─→ 额外可切换投射物
普通远程步兵一般从land_units_tables.primary_missile_weapon进入。传统火炮还可能先由land_units_tables.engine连接battlefield_engines_tables,再由战场引擎记录连接远程武器;无乘员战争机器、怪兽坐骑或特殊载具也可能继续使用单位自身的primary_missile_weapon。因此,发现模板单位的主要远程武器为空时,不要强行填写,先沿单位的战场引擎、坐骑和原版引用继续查。
需要哪些表单
| 表单 | 什么时候需要 | 负责什么 |
|---|---|---|
land_units_tables |
普通远程单位必需 | 连接远程武器,保存单位级弹药量、命中、装填修正、散兵和弹药池设置。 |
missile_weapons_tables |
必需 | 注册一件远程武器,指定默认投射物、音频类型和使用哪个弹药池。 |
projectiles_tables |
必需 | 定义真正飞出去的投射物,包括弹道、射程、精度、直击伤害、连射、目标限制及所有可选分支。 |
battlefield_engines_tables |
传统火炮等情况需要 | 让战场引擎使用指定远程武器。不是所有远程单位都经过此表。 |
projectile_displays_tables |
使用可见弹丸、飞行特效或命中效果时需要 | 连接弹丸模型、尾迹、发射特效、飞行动画和命中效果集合。 |
projectile_impacts_tables |
自定义不同材质命中效果时需要 | 按水面、木材、岩石、血肉等表面选择命中效果。 |
projectiles_explosions_tables |
投射物会爆炸时需要 | 定义爆炸触发、半径、伤害、推力、特效、音效、友伤和引信。 |
projectile_shrapnels_tables |
爆炸后生成破片时需要 | 定义破片数量、发射形状和破片使用的另一条投射物。 |
projectile_homing_params_tables |
投射物会制导时需要 | 定义开始制导、转向强度、视角与提前量。 |
projectile_penetration_junctions_tables |
投射物可穿透多个实体时需要 | 按目标尺寸限制穿透,并设置最大穿透次数。 |
projectiles_scaling_damages_tables |
伤害随目标生命比例变化时需要 | 用生命比例区间映射伤害倍率。 |
missile_weapons_to_projectiles_tables |
同一武器具有额外可切换弹药时需要 | 把第二种或更多投射物连接到同一远程武器。 |
projectile_shot_type_enum_tables |
使用或新建弹药类别时需要 | 定义射击类型、是否需要效果启用以及它取代哪类弹药。 |
projectile_shot_type_displays_tables |
弹药需要在战斗界面显示和切换时需要 | 定义弹药按钮的图标、名称、说明和界面音效。 |
unit_missile_weapon_junctions_tables |
效果驱动的整件武器替换时才需要 | 给单位关联可由效果启用的其他远程武器;它不是普通战斗中的弹药切换表。 |
effect_bonus_value_missile_weapon_junctions_tables |
用科技、技能、特性等效果替换远程武器时需要 | 把效果与替换用远程武器连接起来。 |
没有爆炸就不要创建爆炸表,没有破片就不要创建破片表,没有制导就不要创建制导参数。表单越多并不代表武器越高级,只会增加断链和重复结算伤害的机会。
开始前:安全复制原版记录
不要直接编辑或保存db.pack。建立自己的Mod类型 Pack 后,可以使用下面两种方式准备表单。
方法一:新建空表单
- 在自己的 Pack 上右键,选择新建 DB 表。
- 选择需要的表,例如
projectiles_tables。 - 新增一行,再从依赖项中的同类原版记录逐列复制。
- 立刻把
key改成自己的唯一 Key。
这种方法适合字段很少、你已完全理解结构的表。projectiles_tables字段很多,手工漏列的风险较高,通常更适合用第二种方法。
方法二:从依赖项导入原版表单
- 在
依赖项中搜索表单名或模板 Key。 - 打开原版表单,确认选中的确是目标单位使用的记录。
- 将原版表单导入自己的 Pack。
- 把导入后的
data__重命名为自己的名称,例如twcn_tutorial_projectiles。 - 只保留要复制的记录:选中目标行后反选,再删除其他所有行。
- 把保留记录的主 Key 以及它引用的自定义子 Key 全部改成自己的命名。
不要把导入后的表单继续命名为
data__。原版 DB 表也使用这个子表名;把同路径的data__放进 Mod 可能覆盖整张原版子表,而不是只覆盖你保留的那一行。每张导入表都应改成清楚、唯一的子表名。
建议统一前缀,例如:
twcn_tutorial_crossbow_weapon
twcn_tutorial_crossbow_projectile
twcn_tutorial_rocket_explosion
twcn_tutorial_rocket_shrapnel
同一个概念是否必须共用同一个 Key,取决于字段的引用。不要因为原版常把远程武器 Key 和默认投射物 Key 写成相同文本,就误以为它们必须相同;它们位于不同表中,可以同名,也可以分别命名。分别命名通常更容易看懂数据链。
怎样选模板
模板要按“射击机制”选择,不要只按外观或兵种名称选择。
| 目标 | 优先寻找的模板 |
|---|---|
| 普通弓、弩 | 同样是单弹丸、同样曲射或直射、同样持弓动作的单位。 |
| 火枪 | 同样使用火枪射击动画、弹道速度和射击音频的单位。 |
| 投掷武器 | 同样从人物手部发射、射程和抛物线接近的标枪、斧或手雷单位。 |
| 多弹丸霰射 | 原版已经使用多个projectile_number并具有相似散布的武器。 |
| 传统火炮 | 同样通过battlefield_engines_tables开火、具有相似炮架和发射点数量的火炮。 |
| 火箭或空爆弹 | 原版本身已使用projectiles_explosions_tables和引信的投射物。 |
| 制导弹 | 原版本身已填写homing_params的投射物。 |
| 可切换弹药 | 原版本身已出现在missile_weapons_to_projectiles_tables中的远程武器。 |
先比较两到三个原版模板,再决定复制哪个。只看一条记录很难判断某个0、空值或特殊枚举是通用默认值,还是该武器独有的例外。
单位级远程字段:land_units_tables
| 字段 | 含义与使用要点 |
|---|---|
primary_missile_weapon |
单位主要远程武器的 Key,引用missile_weapons_tables.key。普通远程单位通常从这里进入完整链路。 |
accuracy |
单位自身的命中能力。它会与投射物的marksmanship_bonus、calibration_area和calibration_distance共同影响落点,不是单独决定命中率的百分比。 |
primary_ammo |
主要弹药池的数量。大多数普通远程武器消耗这一池。 |
secondary_ammo |
次要弹药池的数量。只有远程武器勾选use_secondary_ammo_pool时才消耗它;它不等同于“第二种可切换弹药”。 |
reload |
对投射物装填时间的百分比削减,是单位级修正,不是秒数。基础装填秒数在projectiles_tables.base_reload_time。不要把两列填成相同数值。 |
damage_mod_missile |
单位级远程伤害修正。当前 Schema 说明中,0表示不修改,-100表示伤害加倍,+100表示伤害被抵消,方向与一般人直觉相反。除非要做特殊单位,否则保持模板值。 |
can_skirmish |
是否允许单位使用散兵模式。勾选只提供散兵行为,不会替单位补齐远程武器、射击动画或 AI 配置。 |
infinite_secondary_ammo |
是否让次要弹药池无限。只对次要池有意义,不会使主要弹药无限。 |
以原版玉勇弩手wh3_main_cth_inf_jade_warrior_crossbowmen_0为例,它使用wh3_cth_crossbow_bolt,accuracy = 10、primary_ammo = 22、secondary_ammo = 0。这只是一条普通弩手模板,不是远程单位的固定数值。
主要弹药、次要弹药和可切换弹药不是一回事
primary_ammo和secondary_ammo是两个“数量池”。missile_weapons_tables.use_secondary_ammo_pool决定这件远程武器从哪个池扣除数量。missile_weapons_to_projectiles_tables决定同一件武器是否还有别的投射物可选。- 一件武器可以只有一种投射物却使用次要池;也可以拥有两种可切换投射物但仍共享同一个主要池。
不要看到“Secondary Ammo”就自动认为它负责弹药切换。
远程武器入口:missile_weapons_tables
missile_weapons_tables本身只有少量字段,但它是单位与投射物之间不可缺少的入口。
| 字段 | 含义与使用要点 |
|---|---|
key |
远程武器唯一 Key。land_units_tables、battlefield_engines_tables和其他替换武器表会引用它。 |
precursor |
当前 RPFM Schema 没有给出明确的引擎说明。不要把它当作“前置投射物”或其他字面含义自行猜测;复制完全同类原版模板时保留原值,需要改变时必须进游戏专项验证。普通玉勇弩和收割者弩炮都使用false。 |
default_projectile |
默认投射物 Key,引用projectiles_tables.key。没有弹药切换时,单位始终使用它。 |
audio_type |
武器开火动作使用的音频类型,例如弓、弩、火枪或大型弩炮类别。它不是飞行音效;投射物飞行音频由projectiles_tables.projectile_audio控制。 |
use_secondary_ammo_pool |
勾选后消耗land_units_tables.secondary_ammo,否则消耗primary_ammo。它只选择弹药池,不生成第二种投射物,也不生成切换按钮。 |
为新武器建立记录时,最低限度要保证:
key不与原版或其他 Mod 重复。default_projectile确实存在于你的 Pack 或已加载依赖中。audio_type与开火方式相近。use_secondary_ammo_pool与单位实际填写的弹药池一致。
如果多个单位共享同一条远程武器,而你只想修改其中一个单位,必须先复制远程武器并给它新 Key。否则所有引用原武器的单位都可能一起变化。
投射物核心:projectiles_tables
projectiles_tables决定弹丸怎样飞、飞多远、落点多散、直接造成多少伤害、能否命中某类目标,以及它是否连接爆炸、制导、穿透和显示。下面按功能解释当前表中的全部字段。
身份、类别与基础发射方式
| 字段 | 含义与使用要点 |
|---|---|
key |
投射物唯一 Key。远程武器、破片和其他系统都可能引用它。 |
category |
投射物大类。当前可见类型包括arrow、artillery、axe、grenade、javelin、misc、musket、sling。它不是纯 UI 标签:Schema 特别说明artillery和misc等类别可能无视盾牌,artillery还有独立的士气惩罚,因此不要只为改图标随意换类别。 |
shot_type |
射击类型,影响弹药切换、效果启用和界面分类。它与projectile_shot_type_display不是同一列:前者是规则类别,后者是玩家看见的显示定义。 |
explosion_type |
爆炸 Key,引用projectiles_explosions_tables。普通箭矢应留空;填错或引用不存在会使爆炸分支失效。 |
high_air_resistance |
高空气阻力开关。当前 Schema 没有进一步解释具体公式;只在同类原版模板确实使用时复制,并通过弹道实测确认。 |
spin_type |
飞行旋转方式。当前常见枚举包括none、axe_spin、chain_shot_spin、grenade_spin、shell_spin。它需要与可视模型方向和动画相配。 |
projectile_number |
每个发射位置、每次发射同时生成的投射物数量。它是霰射数量,不是弹药池数量,也不是一轮连续射击次数。 |
trajectory_sight |
瞄准和弹道类型。当前常见值包括low、high、fixed、dual_low_fixed。不同类型会决定哪些仰角和初速字段参与计算;不要只为了“看起来更弯”随意更换。 |
射程、弹道、精度与直击伤害
| 字段 | 含义与使用要点 |
|---|---|
effective_range |
武器的有效射程,也是单位通常能够选择目标和显示射程圈的核心值之一。它不等于弹丸绝对存活距离。 |
minimum_range |
最小射程。目标进入该距离后,某些武器不能射击或不能按预期触发空爆。空爆引信距离较大时尤其要检查此值。 |
max_elevation |
最大允许发射仰角。Schema 建议普通非固定弹道通常设得较高,常高于45度;火炮等特殊武器例外。trajectory_sight = fixed时此列不参与普通弹道计算。 |
muzzle_velocity |
出膛初速,单位为米/秒。负值会让引擎按45度、命中effective_range的方式计算初速;fixed弹道不使用普通初速逻辑。速度越大通常越平直、更快,但必须与动画、特效和瞄准方式一起测试。 |
marksmanship_bonus |
投射物自身的精度加成,会与land_units_tables.accuracy一起缩小校准区域。它不是“额外命中率百分比”。 |
spread |
同次多弹丸或发射方向的散布参数。具体可见效果与投射数量、校准区域和模板机制共同决定;不要把它当成唯一的准度列。 |
damage |
单枚投射物直接命中造成的普通伤害。爆炸伤害和破片伤害不在这里。 |
ap_damage |
单枚投射物直接命中的破甲伤害。单位面板上显示的远程伤害可能还受投射数量、加成、单位修正、技能和效果影响。 |
can_bounce |
投射物是否能够弹跳。必须同时确认模型、碰撞和同类模板行为;勾选不代表所有地面或目标都会产生自然反弹。 |
collision_radius |
弹丸用于判断与建筑碰撞的半径。它不是爆炸半径,也不是单位命中框大小。 |
base_reload_time |
基础装填时间,单位为秒。最终射速还会受单位reload、经验、技能、科技、效果、动画时长和发射事件限制。只把数值改得很小,动画不一定能按同样速度可靠开火。 |
校准区域、目标加成、显示和掠过效果
| 字段 | 含义与使用要点 |
|---|---|
calibration_distance |
校准区域达到100%大小时对应的距离。它定义精度随距离变化的参照点。 |
calibration_area |
投射物可能落入的校准区域大小。该区域会按calibration_distance缩放,并由单位accuracy和投射物marksmanship_bonus进一步缩小。数值越小通常越集中,但应与同类模板比较。 |
bonus_v_infantry |
对小型或极小型实体的额外伤害。额外伤害会沿用该投射物总直击伤害中的普通/破甲比例。 |
bonus_v_large |
对中型及更大实体的额外伤害,同样沿用直击伤害的普通/破甲比例。它不是单独全额破甲伤害。 |
projectile_display |
投射物显示 Key,引用projectile_displays_tables。它决定模型、尾迹和命中效果入口,但不能凭空生成缺失的资产文件。 |
overhead_stat_effect |
投射物从单位上空掠过时应用的special_ability_phases_tables阶段,可用于压制或其他掠过效果。没有明确需求时留空。 |
contact_stat_effect |
投射物直接命中单位时应用的能力阶段。它与爆炸表中的contact_phase_effect属于不同结算阶段,重复填写可能重复施加效果。 |
projectile_audio |
投射物飞行或相关弹丸音频,引用audio_projectiles_tables。它与远程武器audio_type和爆炸explosion_audio分别负责不同阶段。 |
近失伤害、建筑、连射、重力与质量
| 字段 | 含义与使用要点 |
|---|---|
shockwave_radius |
弹丸周围仍可造成伤害的半径,让擦过目标的近失弹也能结算伤害;-1通常表示关闭。它不是projectiles_explosions_tables.detonation_radius。 |
can_damage_buildings |
直击是否可伤害建筑。还要结合collision_radius与building_damage_multiplier。 |
burst_size |
一次连射中包含的射击次数;1表示没有连射模式。它不是每发同时生成的弹丸数。 |
burst_shot_delay |
同一次连射内部,相邻两发之间的延迟。只有burst_size > 1时才有直接意义。 |
gravity |
自定义重力/空气阻力表现。负值表示使用正常重力;其他值可让投射物更少或更多地受重力影响。不要只凭数值猜外观,必须观察完整弹道。 |
mass |
投射物质量,参与碰撞和物理表现。它不等于伤害,也不等于爆炸推力。 |
制导、目标限制、友伤与穿透
| 字段 | 含义与使用要点 |
|---|---|
homing_params |
制导参数 Key,引用projectile_homing_params_tables。留空就是不连接这套制导参数。 |
first_person_params |
第一人称投射物参数 Key,引用projectile_first_person_params_tables。普通单位战斗镜头通常无需自建。 |
ignition_amount |
投射物对点燃的贡献。大于0时也会让它在上下文中被视为火焰攻击。它与爆炸自身的ignition_amount分开。 |
is_magical |
是否在上下文中视为魔法攻击。它不等于is_spell;魔法攻击与法术伤害是两种不同判定。 |
can_target_airborne |
是否允许把飞行单位作为目标。它不保证弹道、转向或动画一定能打中飞行目标。 |
can_damage_allies |
投射物直击是否能伤害友军。爆炸是否影响友军还要看爆炸记录的affects_allies。 |
fixed_elevation |
固定弹道使用的发射仰角。只有相应弹道模式使用它时才生效。 |
projectile_penetration |
穿透规则 Key,引用projectile_penetration_junctions_tables。留空表示不连接自定义穿透规则。 |
expiry_range |
弹丸的最大飞行距离。正值表示飞到该距离后失效,负值通常表示不使用该限制。它不是单位可选择目标的effective_range。 |
is_beam_launch_burst |
用于光束发射:让视觉效果匹配弹丸飞行,并在命中时使用裁切面隐藏命中点前方不应继续显示的部分。普通箭弹不要启用。 |
命中后的行为、齐射、坐骑和目标选择
| 字段 | 含义与使用要点 |
|---|---|
expire_on_impact |
命中后立即失效,不再插入目标或从目标表面偏转。爆炸或特殊破片是否仍触发,要按模板实测。 |
can_roll |
落地后是否能继续滚动。通常用于炮弹或特殊投射物,需要显示模型和物理参数配合。 |
trail_always_on |
无论玩家是否关闭投射物尾迹显示,都强制显示该投射物的尾迹。 |
shots_per_volley |
一轮齐射对应的射击数,主要给拥有多个动画发射点的系统作参考。Schema 特别说明许多其他逻辑并不知道这一数值,所以它不能代替正确的动画发射点。 |
fired_by_mount |
发射实体是宏实体时,由坐骑而不是骑手开火。它不负责选择武器挂点,也不自动修复骑乘射击动画。 |
lock_on_multiple_fire_pos |
多个发射点开火时,全部锁定目标原始位置;关闭时,各发射点会继续追踪目标当前的位置。 |
prefer_central_targets |
优先瞄准目标编队中央附近的实体,而不是优先选择射界中最近的实体。 |
can_damage_vehicles |
是否能伤害载具。不要与can_damage_buildings混为一谈。 |
building_damage_multiplier |
命中建筑或载具时的伤害倍率。Schema 还记录了火炮类别存在额外规则:通常为1.5,多投射物火炮可用1.25覆盖,单实体火炮可用2.0;因此最终伤害不一定只由这一格决定。 |
缩放伤害、法术、植被、镜像与弹药显示
| 字段 | 含义与使用要点 |
|---|---|
scaling_damage |
缩放伤害规则 Key,引用projectiles_scaling_damages_tables。只有需要按目标生命比例改变伤害时填写。 |
is_spell |
此投射物的伤害是否受法术抗性影响。它与is_magical分开;不要因为投射物有魔法视觉就自动勾选。 |
vegetation_ignore_time |
发射后忽略植被碰撞或影响的时间窗口。当前 Schema 没有更详细的单位与边界说明,应复制同类模板并在树林中实测。 |
missile_mirror_start_time |
与投射物镜像显示开始时机有关。没有自定义镜像需求时保留同类模板值,不要只凭字段名修改。 |
spawned_vortex |
投射物与地面碰撞时生成的battle_vortexs_tables旋涡 Key。它不是普通爆炸;同时配置爆炸时要分别检查两套效果。 |
projectile_shot_type_display |
弹药/射击类型显示 Key,引用projectile_shot_type_displays_tables。需要玩家在战斗中识别或切换弹药时必须正确填写。 |
四组最容易混淆的数值
1. 可选射程与弹丸存活距离
effective_range:单位通常能选择并射击目标的范围。minimum_range:武器不能正常攻击的近距离区域。expiry_range:弹丸离开发射点后最多还能飞多远。fuse_distance_from_target:爆炸在距离目标多少米时触发。
把effective_range调到500,却把expiry_range留在300,可能出现单位愿意开火但弹丸飞不到目标的情况。空爆距离又大于目标距离时,爆炸可能在投射物刚激活时立即发生。
2. 精度不是一列
最终散布至少要同时看:
land_units_tables.accuracy
+ projectiles_tables.marksmanship_bonus
+ projectiles_tables.calibration_distance
+ projectiles_tables.calibration_area
+ projectiles_tables.spread
其中calibration_area是落点区域,单位精度与投射物精度会缩小它;spread还会影响同次多个投射物之间的散布。只把accuracy改得很高,不能证明多弹丸就会完全重合。
3. 一次到底发出多少东西
| 字段 | 计数对象 |
|---|---|
projectile_number |
每个发射点在同一发射动作中同时生成多少枚投射物。 |
burst_size |
一次连射动作连续开多少发。 |
shots_per_volley |
动画一轮齐射有多少个射击点/射击参考。 |
projectile_shrapnels_tables.amount |
一次爆炸额外生成多少枚破片投射物。 |
理论上这些层可以叠加,但最终生成数量、伤害和性能消耗会迅速放大。不要为了做“更密集”同时把四个数字全部加大。
4. 伤害可能结算多次
一枚带爆炸和破片的投射物,可能具有:
- 主投射物的
damage + ap_damage直击伤害。 - 主投射物连接爆炸的
detonation_damage + detonation_damage_ap。 - 每枚破片投射物自己的直击伤害。
- 每枚破片再次连接的第二段爆炸伤害。
- 对步兵或大型单位加成。
- 近失冲击波、接触状态效果、旋涡和其他额外效果。
平衡时必须算完整链,不能只看主投射物那一行。
投射物外观:projectile_displays_tables
projectiles_tables.projectile_display只保存显示 Key,真正的模型、尾迹、发射效果和命中效果在projectile_displays_tables。
| 字段 | 含义与使用要点 |
|---|---|
key |
显示记录唯一 Key,由projectiles_tables.projectile_display引用。 |
display_model |
飞行中显示的弹丸模型。填写 Key 不代表模型文件已被打包;自定义模型仍要放在正确路径并使用游戏支持的格式。 |
impact |
命中效果集合 Key,引用projectile_impacts_tables。它负责按表面材质选择效果。 |
launch_fx |
发射瞬间使用的效果。它与远程武器音频、飞行尾迹和爆炸效果分开。 |
trail_fx |
飞行中的尾迹效果。projectiles_tables.trail_always_on决定是否强制显示尾迹。 |
stationary_fx |
投射物静止或特定停留状态下使用的效果。普通快速弹丸常沿用模板空值。 |
airborne_anim |
弹丸在空中时使用的动画。模型本身没有相应动画时,填写其他单位的动画 Key 不会自动兼容。 |
landing_anim |
弹丸落地时使用的动画。只对有落地阶段的显示结构有意义。 |
tip_offset |
弹丸尖端相对模型原点的偏移,用于对齐命中、尾迹或显示。单位与轴向应照同类模型模板验证。 |
trail_spin |
尾迹随弹丸旋转的设置。它与projectiles_tables.spin_type相互配合,但不是同一个概念。 |
launch_camera_shake |
发射时使用的镜头震动参数。爆炸表还有独立的爆炸镜头震动。 |
impact_bounce |
弹丸弹跳时的命中效果集合。 |
impact_penetrate |
弹丸穿透目标时的命中效果集合。 |
impact_blood |
普通命中血肉目标时的带血命中效果集合。 |
impact_bounce_blood |
弹跳并命中血肉目标时的效果集合。 |
impact_penetrate_blood |
穿透血肉目标时的效果集合。 |
mirroring_start |
镜像显示开始相关参数。Schema 没有给出完整引擎公式,保留同类模板值。 |
mirroring_trail |
镜像后的尾迹显示设置。没有明确镜像结构时保留模板值。 |
scale |
投射物显示模型缩放。它只改变视觉尺寸,不会同比改变碰撞半径、爆炸半径、质量或伤害。 |
显示模型放大十倍而
collision_radius不变,会出现“画面看起来撞到了,实际判定没有撞到”的错觉;反过来只放大碰撞半径,也可能让弹丸在视觉上尚未接触时就命中。
不同表面的命中效果:projectile_impacts_tables
projectile_impacts_tables不是伤害表,它为不同表面指定视觉或音效资源。自定义弹丸只要能够接受原版命中效果,就可以复用已有记录;只有需要新表现时才复制或新建。
| 字段 | 负责的表面或效果 |
|---|---|
key |
命中效果集合唯一 Key。 |
water |
水面。 |
sails |
船帆等帆布表面。 |
mud |
泥地。 |
grass |
草地。 |
road |
道路。 |
rock |
岩石或硬质石面。 |
sand |
沙地。 |
snow |
雪地。 |
leather |
皮革类表面。 |
wood |
木材。 |
blood |
命中血肉目标时的血迹效果。 |
camera_shake |
命中时使用的镜头震动参数。 |
某些格为空并不一定是错误,可能表示该弹丸对相应表面不使用独立效果。不要为了“补全”把同一个粒子 Key 填进所有材质;粒子方向、颜色、规模和生命周期可能只适合特定表面。
穿透规则:projectile_penetration_junctions_tables
projectiles_tables.projectile_penetration连接一组穿透规则。每组规则可以有多行,用目标实体尺寸决定是否继续穿透。
| 字段 | 含义与使用要点 |
|---|---|
key |
穿透规则组 Key。多行可以共用同一 Key,组成一整套规则。 |
entity_size_cap |
该行规则适用的实体尺寸上限。具体枚举应从原版引用中选择,不要手写猜测。 |
max_penetration |
对符合尺寸条件的目标允许穿透的最大数量或上限。最终表现还受弹丸类别、质量、碰撞和目标排列影响。 |
description |
给制作人员看的说明,不参与玩家界面显示。可写清用途,方便以后维护。 |
复制穿透投射物时,应把该 Key 下的所有相关行一起复制。只复制其中一行,可能让某些尺寸目标完全不遵守预期规则。
制导参数:projectile_homing_params_tables
| 字段 | 含义与使用要点 |
|---|---|
key |
制导参数唯一 Key,由projectiles_tables.homing_params引用。 |
lookahead_time |
制导计算的预判时间,用于考虑目标未来位置。数值不是“命中率”;过大或过小都可能产生奇怪转向。 |
max_target_angle_delta |
允许追踪目标的最大角度变化范围。限制过小会失去目标,过大可能产生急转弯。 |
start_time |
发射后经过多长时间开始制导。可让弹丸先按初始方向飞行,再开始修正。 |
steering_coefficient |
转向强度或响应程度。必须结合速度、目标角速度和模型朝向实测。 |
制导只解决飞行方向修正,不会自动解决发射动画、目标选择、飞行模型朝向、尾迹转弯或近距离穿模。制作新制导弹时,最好先复制速度和体量接近的原版制导投射物,再一次只改一个参数。
按目标生命缩放伤害:projectiles_scaling_damages_tables
| 字段 | 含义与使用要点 |
|---|---|
key |
缩放伤害规则唯一 Key,由projectiles_tables.scaling_damage引用。 |
min_health_ratio |
低生命端的目标生命比例。 |
min_damage_multiplier |
目标位于低生命端时使用的伤害倍率。 |
max_health_ratio |
高生命端的目标生命比例。 |
max_damage_multiplier |
目标位于高生命端时使用的伤害倍率。 |
这组字段描述生命比例区间和两端倍率。区间内部怎样插值应以同类原版记录和游戏实测为准;不要把health_ratio当作生命点数,也不要把倍率写成面板伤害值。
爆炸:projectiles_explosions_tables
投射物是否会爆炸,由projectiles_tables.explosion_type是否连接爆炸记录决定。爆炸记录的 Key 不强制与投射物 Key 同名,但同名便于沿链查找。
爆炸的全部字段
| 字段 | 含义与使用要点 |
|---|---|
key |
爆炸记录唯一 Key,由projectiles_tables.explosion_type引用。 |
detonator_type |
引爆器类型。当前常见值包括fuse、fuse_grenade、percussive。可大致对应普通引信、手雷式引信和撞击式触发,但具体时机必须以原版模板和实战为准。 |
detonation_type |
爆炸传播或上下文类型。当前可见值包括none、shockwave、blinding_shockwave、boiling_oil、carcass、fire_ignition、flaming_ground、quicklime。它们不是单纯特效名称,可能影响爆炸规则;不要把视觉相似当作可以互换。 |
detonation_radius |
爆炸作用半径。它决定影响范围,不会自动放大粒子特效模型。 |
detonation_duration |
爆炸传播或持续过程的时长参数。Schema 没有给出完整计算公式,应与detonation_speed一起复制同类模板。 |
detonation_speed |
爆炸作用向外传播的速度参数。它不是投射物飞行速度。 |
detonation_damage |
爆炸对每个命中实体造成的普通伤害。它与投射物直击damage叠加计算。 |
detonation_damage_ap |
爆炸对每个命中实体造成的破甲伤害。 |
shrapnel |
破片组 Key,引用projectile_shrapnels_tables。没有破片时留空。 |
explosion_particle_effect |
通常用于空中或一般情况下的爆炸粒子效果。 |
fuse_distance_from_target |
距目标还有多少米时触发爆炸。如果该数值大于投射物激活时到目标的距离,爆炸可能立即发生;此时需要结合投射物minimum_range避免近距离错误触发。 |
explosion_particle_effect_on_ground |
爆炸发生在地面时使用的粒子效果。留空时是否回退到一般爆炸效果应按模板验证。 |
explosion_audio |
爆炸音频 Key,引用audio_explosions_tables。它与开火音频和飞行音频分开。 |
contact_phase_effect |
爆炸接触或作用时应用的special_ability_phases_tables阶段。不要与投射物contact_stat_effect重复套用同一效果,除非这是明确设计。 |
ignition_amount |
爆炸对点燃的贡献;大于0时也会使爆炸在上下文中视为火焰攻击。 |
is_magical |
爆炸是否在上下文中视为魔法攻击。主投射物也有独立的is_magical。 |
camera_shake |
爆炸时使用的镜头震动参数。大范围爆炸不必然需要强震动,应按视觉规模选择。 |
detonation_force |
爆炸施加的物理推力,影响击退等结果。推力很大不等于伤害很高,也可能只把目标炸飞而没有相称伤害。 |
fuse_fixed_time |
固定引信时间,单位为秒;-1表示不使用固定时间。Schema 明确要求固定时间与目标距离引信二选一。 |
affects_allies |
爆炸是否影响友军。即使主投射物can_damage_allies = false,爆炸这一阶段仍要单独检查此列。 |
is_spell |
爆炸伤害是否受法术抗性影响。主投射物也有独立的is_spell,两处应按各自伤害阶段设置。 |
固定时间引信与目标距离引信
两种引信不要同时当成有效控制量:
- 按飞行时间爆炸:设置
fuse_fixed_time,让fuse_distance_from_target保持同类模板中不参与的值。 - 按距目标距离爆炸:设置
fuse_distance_from_target,令fuse_fixed_time = -1。
固定时间引信的爆点会受初速、弹道和目标距离影响;距离引信则更适合在目标附近空爆。两者都需要测试目标静止、目标移动、近距离、最大射程和高低差。
火焰、魔法和法术是三种不同判定
| 判定 | 投射物字段 | 爆炸字段 | 作用 |
|---|---|---|---|
| 火焰上下文 | ignition_amount > 0 |
ignition_amount > 0 |
参与点燃,并使相应阶段被视为火焰攻击。 |
| 魔法攻击 | is_magical |
is_magical |
把相应阶段标记为魔法上下文。 |
| 法术伤害 | is_spell |
is_spell |
决定相应伤害是否受法术抗性影响。 |
不要因为粒子是蓝色、紫色或燃烧外观就自动勾选魔法或法术;视觉资源不决定伤害上下文。
破片:projectile_shrapnels_tables
破片不是爆炸伤害中的一个倍率,而是爆炸时另外生成的一批projectiles_tables投射物。每一枚破片都有自己的弹道、直击伤害、显示、穿透,甚至还能再次连接爆炸。
| 字段 | 含义与使用要点 |
|---|---|
key |
破片组唯一 Key,由爆炸表shrapnel引用。 |
launch_type |
破片发射形状。当前值包括hemisphere、sphere、sector,分别表示半球、球形和扇区式分布。 |
amount |
每次爆炸生成的破片投射物数量。它会直接放大实体数量、潜在伤害和性能开销。 |
sector_angle |
扇区角度或相关发射角参数。不同launch_type下的解释可能不同;即使原版在非sector记录中也可能保留数值,因此不要擅自清零。 |
projectile |
破片实际使用的投射物 Key,引用另一条projectiles_tables记录。 |
死嚎火箭的完整两段结构
原版死嚎火箭提供了一条清楚的空爆破片链,可作为“机制模板”,但它的数值不适合所有火箭:
主投射物
wh3_dlc23_chd_deathshrieker_rocket_stage_1
└─ explosion_type = 同名爆炸记录
└─ shrapnel = deathshrieker_rocket
├─ launch_type = hemisphere
├─ amount = 8
├─ sector_angle = 160
└─ projectile = wh3_dlc23_chd_deathshrieker_rocket_stage_2_shrapnel
└─ explosion_type = wh3_dlc23_chd_deathshrieker_rocket_stage_2
主投射物的当前原版记录使用effective_range = 420、minimum_range = 60、fixed_elevation = 55,在距目标60米时触发第一段爆炸;第一段爆炸生成8枚第二阶段破片。这个例子说明破片还可以继续爆炸,也说明总伤害不能只看第一行。
如果复制这类结构,至少需要一起复制主投射物、第一段爆炸、破片组、破片投射物,以及破片连接的第二段爆炸和所需显示记录。少一环都可能出现“有第一段爆炸但没有破片”“有伤害但没有模型”或“破片飞出却不爆炸”。
弹药切换
可切换弹药指同一件missile_weapons_tables远程武器在战斗中提供多个projectiles_tables选项。它不是primary_ammo与secondary_ammo之间的自动切换,也不是科技效果替换整件远程武器。
连接额外投射物
missile_weapons_to_projectiles_tables只有两个核心字段:
| 字段 | 含义 |
|---|---|
missile_weapon |
要增加额外弹药的远程武器 Key。 |
projectile |
额外可选的投射物 Key。默认投射物不需要在这里重复,它已经由missile_weapons_tables.default_projectile连接。 |
需要三种可切换投射物时,可以为同一远程武器建立多行,每行连接一个额外投射物。不要把默认投射物再次作为额外投射物连接,否则可能产生重复或无法区分的选项。
射击类型规则
projectile_shot_type_enum_tables定义弹药规则类型:
| 字段 | 含义与使用要点 |
|---|---|
key |
射击类型 Key,由projectiles_tables.shot_type引用。 |
requires_effect_enabling |
是否必须由某个效果启用后才能使用。只做始终可用的战斗切换时,优先复制同类原版配置,不要随意勾选。 |
supersedes_shot_type |
当前射击类型取代的其他射击类型,用于处理解锁、升级或优先关系。没有明确替代逻辑时不要自建关系。 |
当前原版可见的射击类型包括:
artillery_default
artillery_canister
artillery_explosive
artillery_flammable
artillery_poison
artillery_whistling
explosives
oil
small_arm_default
small_arm_extended
small_arm_flaming
small_arm_heavy
small_arm_poison
small_arm_whistling
torch
这些名称描述规则类别,不等于所有武器都能使用。比如把普通弓箭的shot_type改成artillery_canister,不会自动生成霰弹、火炮士气惩罚、正确图标或切换按钮。
弹药按钮和说明
projectile_shot_type_displays_tables负责玩家在战斗界面看到的弹药信息:
| 字段 | 含义与使用要点 |
|---|---|
key |
显示记录 Key,由projectiles_tables.projectile_shot_type_display引用。 |
icon_name |
弹药按钮使用的图标名。图标资产必须真实存在于正确 UI 路径。 |
ui_sound_event |
选择或切换该弹药时的界面音效。 |
onscreen_name |
玩家看到的弹药名称。本地化字段的实际编辑方式按当前 RPFM Schema 和 Loc 结构处理。 |
tooltip_text |
鼠标悬停时的说明文本,同样需要正确本地化。 |
有些旧版结构会在projectile_shot_type_enum_tables中显示已弃用的icon_name、ui_sound_event、onscreen_name和tooltip_text。当前应以独立的projectile_shot_type_displays_tables为主,不要同时在新旧位置重复维护。
原版收割者弩炮案例
原版收割者弩炮的远程武器wh2_main_def_reaper_bolt_thrower_bolt具有两种投射物:
| 项目 | 单发大型弩箭 | 多发霰射 |
|---|---|---|
| 投射物 Key | wh2_main_def_reaper_bolt_thrower_bolt |
wh2_main_def_reaper_bolt_thrower_bolt_spread |
| 连接位置 | default_projectile |
missile_weapons_to_projectiles_tables |
shot_type |
artillery_default |
artillery_canister |
projectile_number |
1 |
16 |
damage / ap_damage |
30 / 120 |
3 / 8,但一次生成 16 枚 |
bonus_v_large / bonus_v_infantry |
50 / 0 |
0 / 11 |
projectile_shot_type_display |
bolt_thrower_single_shot |
bolt_thrower_multi_shot |
这说明真正可区分的两种弹药至少需要不同投射物记录、不同规则类型和不同显示定义。不要只复制连接表一行,却让两种投射物仍使用完全相同的shot_type和显示 Key。
弹药切换的完整步骤
- 选一个原本就能切换弹药且机制接近的武器作为模板。
- 复制远程武器,改成自己的
missile_weapons_tables.key。 - 复制默认投射物和额外投射物,并分别改成新 Key。
- 让远程武器
default_projectile指向第一种投射物。 - 在
missile_weapons_to_projectiles_tables把同一武器连接到第二种投射物。 - 为两种投射物选择能够区分的
shot_type。 - 为两种投射物分别填写
projectile_shot_type_display。 - 复用或新建两条显示记录,补齐图标、名称、说明和音效。
- 检查两种投射物是否使用同一弹药池;如要使用不同池,必须重新核对武器与单位的弹药池结构,不能只改投射物。
- 进战斗确认按钮数量、默认选项、切换、弹药消耗、射击和 AI 使用全部正常。
效果替换整件武器不是弹药切换
unit_missile_weapon_junctions_tables配合effect_bonus_value_missile_weapon_junctions_tables,可以通过科技、技能、特性或其他效果给单位启用另一件远程武器。这条路线适合“解锁升级武器”“战役效果替换弹丸”等情况,但它替换的是missile_weapons_tables记录,不是同一武器下的普通弹药按钮。
选择哪条路线取决于目标:
- 玩家在战斗中手动切换:优先研究
missile_weapons_to_projectiles_tables和射击类型显示。 - 由科技、技能、状态或派系效果改变:研究武器连接与效果连接表。
- 只是让武器消耗另一组数量:使用
use_secondary_ammo_pool和secondary_ammo。
三种完整制作案例
下面的案例只展示通用思路。Key 和数值来自对应原版模板,不是新武器的唯一正确答案。
案例一:普通单弹丸弩箭
适用条件:普通步兵、单一弹药、没有爆炸、没有破片、没有制导。
- 从目标单位的
land_units_tables.primary_missile_weapon找到原版弩武器。 - 复制
missile_weapons_tables记录,改成自己的武器 Key。 - 复制
default_projectile指向的projectiles_tables记录,改成自己的投射物 Key。 - 让新武器指向新投射物,让新单位指向新武器。
- 先保持显示、音频、穿透和弹道与模板一致,只改射程、伤害或装填中的一个目标参数。
- 进战斗确认能瞄准、能开火、会扣弹药、弹丸能命中并结算伤害。
原版玉勇弩箭wh3_cth_crossbow_bolt当前使用effective_range = 160、damage = 18、ap_damage = 6、base_reload_time = 13、projectile_number = 1。制作火枪、投矛或霰弹时不要照抄这些值,应重新找相同机制模板。
案例二:拥有两种可切换弹药的弩炮
适用条件:同一远程武器始终存在两种战斗内可选投射物。
- 复制收割者弩炮或其他同类可切换武器的完整结构。
- 分别建立默认单发投射物和额外多发投射物。
- 在连接表中只添加额外投射物。
- 分别设置
artillery_default和artillery_canister或其他符合目标的类型。 - 分别设置单发和多发显示 Key。
- 根据用途配置
projectile_number、单枚伤害、对步兵/大型加成、散布与穿透。 - 在战斗中反复切换,确认按钮、投射数量、弹药消耗和 AI 行为。
若你的目标是“科技研究后永久改用更强炮弹”,这个案例不合适,应改走效果驱动的武器替换路线。
案例三:空爆并产生二段爆炸破片的火箭
适用条件:主投射物在目标附近空爆,生成多枚破片,破片落地或命中后再爆炸。
- 复制主投射物、第一段爆炸、破片组、破片投射物和第二段爆炸。
- 给五组记录都改成自己的唯一 Key,并逐条修复引用。
- 先保留原版引信距离、固定仰角、初速和最小射程,确认空爆位置正确。
- 再调整破片
amount、launch_type和破片投射物的弹道。 - 分别计算主投射物直伤、第一段爆炸伤害、每枚破片直伤和第二段爆炸伤害。
- 检查两段
affects_allies、is_magical、is_spell与ignition_amount。 - 测试静止步兵、移动步兵、大型单位、友军混战、建筑、高低差和最大射程。
如果只想做“撞击地面后爆炸一次”的炮弹,不需要破片表,也不需要第二段投射物;直接连接一条爆炸记录更简单、更稳定。
怎样自行找到需要的数据
已知单位,沿引用向下找
- 在
land_units_tables搜索单位 Key。 - 读取
primary_missile_weapon。 - 跳到
missile_weapons_tables,读取default_projectile。 - 在
missile_weapons_to_projectiles_tables搜索远程武器 Key,检查是否还有额外投射物。 - 打开每条
projectiles_tables记录,逐个检查爆炸、显示、制导、穿透、缩放和弹药显示引用。 - 对每个非空引用继续跳转,直到所有分支都闭合。
只知道想要的效果,反向找模板
- 想做空爆:在
projectiles_explosions_tables比较使用fuse_distance_from_target的记录,再查找哪些投射物引用它们。 - 想做制导:在
projectiles_tables筛选homing_params非空的记录。 - 想做多弹丸:筛选
projectile_number > 1,再比较spread、calibration_area与单枚伤害。 - 想做破片:从
projectile_shrapnels_tables找到amount和launch_type相近的记录,再反查爆炸。 - 想做弹药切换:从
missile_weapons_to_projectiles_tables找原版武器,再检查默认投射物、额外投射物和两套显示。 - 想做接触状态:筛选
contact_stat_effect或爆炸contact_phase_effect非空的记录,再沿能力阶段继续查。
每次至少比较三类信息
- 表中数值:字段到底填了什么。
- 引用关系:哪些单位、武器、投射物和效果共享这条记录。
- 游戏表现:原版单位实际如何发射、命中、爆炸、切换和扣除弹药。
只复制数值而不看引用,会漏表;只看引用而不看游戏,会复制到机制不同的模板。
常见故障与排查顺序
单位没有远程攻击或不肯开火
- 检查
land_units_tables.primary_missile_weapon是否存在且拼写完全一致。 - 检查远程武器
default_projectile是否存在。 - 检查
primary_ammo或实际使用的secondary_ammo是否大于0。 - 检查
use_secondary_ammo_pool有没有误勾。 - 检查射程和最小射程是否把目标排除在外。
- 检查该单位的射击动画、开火事件和发射点;这些不能只靠 DB 补齐。
- 对传统火炮检查
battlefield_engines_tables和乘员/引擎链。
有开火动作,但看不到弹丸
- 检查
projectile_display引用是否存在。 - 检查
display_model实际资产是否存在、路径和格式是否正确。 - 检查模型缩放、轴向和
tip_offset。 - 检查弹丸是否因为
expiry_range过短或引信错误而立即失效。 - 暂时复用已验证的原版显示记录,区分“数据链错误”和“自定义资产错误”。
看得到弹丸,但打不中或飞不到
- 比较
effective_range与expiry_range。 - 检查
trajectory_sight、fixed_elevation、max_elevation、muzzle_velocity和gravity是否属于同一套弹道。 - 检查
calibration_area、calibration_distance、单位accuracy和marksmanship_bonus。 - 检查
minimum_range以及目标高低差。 - 制导弹还要检查
start_time、转向角和转向强度。
伤害远高于预期
- 先算
projectile_number × burst_size可能生成的主投射物数量。 - 加上主投射物直击普通/破甲伤害。
- 加上爆炸普通/破甲伤害。
- 再算
shrapnel.amount × 每枚破片完整伤害链。 - 检查对步兵/大型加成、
damage_mod_missile、建筑倍率和缩放伤害。 - 检查投射物与爆炸是否重复施加同一接触效果。
有爆炸特效,但没有爆炸伤害
- 确认
projectiles_tables.explosion_type不是只填了粒子 Key,而是正确的爆炸记录 Key。 - 检查爆炸
detonation_damage和detonation_damage_ap。 - 检查半径、触发类型、固定引信或距离引信。
- 检查爆炸是否在目标前过早触发。
- 检查目标是否因友军、法术或其他上下文规则被排除。
有第一段爆炸,但没有破片
- 检查爆炸记录
shrapnel是否指向存在的破片组。 - 检查破片
amount是否大于0。 - 检查
projectile引用的破片投射物是否存在。 - 暂时让破片复用一个可见的原版显示,排除模型问题。
- 检查发射形状、角度和破片投射物最小射程/失效距离。
看不到弹药切换按钮
- 检查额外投射物连接的远程武器 Key 是否与单位实际使用的武器一致。
- 检查默认与额外投射物是否是两条不同记录。
- 检查两者的
shot_type能否区分。 - 检查两者的
projectile_shot_type_display是否存在。 - 检查显示记录的图标、名称和说明。
- 检查射击类型是否要求由效果启用。
- 如果复制的是效果驱动武器替换模板,确认你真正需要的是否是另一条路线。
RPFM 诊断没有报错,但游戏仍然不对
RPFM 诊断主要能发现缺失引用、字段类型、重复 Key 等结构问题。它不能证明下面这些行为正确:
- 射击动画中存在正确的开火事件。
- 发射点数量与
shots_per_volley相符。 - 弹丸模型轴向、缩放和挂点正确。
- 粒子、尾迹和音频在当前场景可加载。
- AI 会按你的设计选择和切换弹药。
- 伤害、击退、穿透和破片数量在实际战斗中平衡。
这些必须通过自定义战斗或战役环境实测。
游戏内验收清单
每改完一种机制,只测试该机制,不要一次改完所有数值再找问题。
基础开火
- 单位能选择目标并进入射程。
- 开火动作、发射时机和发射位置正确。
- 每轮正确扣除主要或次要弹药。
- 装填节奏没有被动画卡住或跳过。
弹道与命中
- 近距离不会因最小射程或引信立即失效。
- 最大射程处弹丸不会在目标前消失。
- 平地、高处射低处、低处射高处都能工作。
- 静止编队、移动编队、大型单位和飞行单位分别测试。
- 弹丸模型、尖端、尾迹和飞行方向一致。
伤害与目标
- 分别记录对低甲、高甲、小型和大型目标的伤害。
- 检查对建筑、城门、载具和友军的行为。
- 多弹丸要确认实际生成数量与单枚伤害。
- 穿透弹要观察命中第一排、后排和大型实体后的表现。
爆炸与破片
- 空中、地面和直接命中时的爆点都正确。
- 普通伤害、破甲伤害、推力和镜头震动符合设计。
- 破片数量、方向、二次命中和二次爆炸可见。
- 友军混入目标时,直击与爆炸两阶段的友伤都符合设置。
- 大量单位同时开火时没有明显性能问题。
弹药切换
- 默认弹药正确。
- 按钮图标、名称、说明和音效正确。
- 每一种弹药都能选择、开火、扣弹和造成不同效果。
- 来回切换后不会卡在错误动画或错误投射物。
- AI 控制该单位时也能产生可接受行为。
最后检查 Pack
- 每张 DB 子表都已从
data__改成唯一名称。 - 所有自定义 Key 使用统一前缀。
- 没有为了单个单位直接修改共享的原版远程武器或投射物。
- 所有非空引用都能在自己的 Pack 或已加载依赖中找到。
- 没有把显示 Key、粒子 Key、投射物 Key和爆炸 Key填错列。
- 没有同时把固定时间引信和距离引信当成主要触发方式。
- 没有把次要弹药池误当成可切换弹药。
- RPFM 诊断已检查,但没有把“诊断通过”当成游戏验收通过。
- 自定义战斗已按基础、弹道、伤害、爆炸、破片和切换分阶段测试。
本文的字段结构以 RPFM 当前《战锤 III》Schema和本机 Assembly Kit 原始数据库为依据;旧版《战锤 II》远程武器资料仅用于追踪历史线索。游戏更新后如果字段发生变化,应先更新 RPFM Schema,再以新版本原版记录和实际游戏表现重新核对。

