全面战争模组中文站全面战争模组中文站
搜索/

搜索教程

输入标题,直接打开已发布教程。

输入教程标题开始搜索。

教程目录

远程武器详解

创建时间:2026年9月4日最后更新:2026年9月4日

远程攻击不是一个伤害数字,而是一条由多个表单共同组成的数据链。普通弓弩至少要连接“单位 → 远程武器 → 投射物”;火箭、炸弹、霰弹、制导弹、穿透弹和可切换弹药还会继续连接爆炸、破片、显示、命中效果、弹药类型等表单。

本文只讲 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 后,可以使用下面两种方式准备表单。

方法一:新建空表单

  1. 在自己的 Pack 上右键,选择新建 DB 表。
  2. 选择需要的表,例如projectiles_tables
  3. 新增一行,再从依赖项中的同类原版记录逐列复制。
  4. 立刻把key改成自己的唯一 Key。

这种方法适合字段很少、你已完全理解结构的表。projectiles_tables字段很多,手工漏列的风险较高,通常更适合用第二种方法。

方法二:从依赖项导入原版表单

  1. 依赖项中搜索表单名或模板 Key。
  2. 打开原版表单,确认选中的确是目标单位使用的记录。
  3. 将原版表单导入自己的 Pack。
  4. 把导入后的data__重命名为自己的名称,例如twcn_tutorial_projectiles
  5. 只保留要复制的记录:选中目标行后反选,再删除其他所有行。
  6. 把保留记录的主 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_bonuscalibration_areacalibration_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_boltaccuracy = 10primary_ammo = 22secondary_ammo = 0。这只是一条普通弩手模板,不是远程单位的固定数值。

主要弹药、次要弹药和可切换弹药不是一回事

  • primary_ammosecondary_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_tablesbattlefield_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。它只选择弹药池,不生成第二种投射物,也不生成切换按钮。

为新武器建立记录时,最低限度要保证:

  1. key不与原版或其他 Mod 重复。
  2. default_projectile确实存在于你的 Pack 或已加载依赖中。
  3. audio_type与开火方式相近。
  4. use_secondary_ammo_pool与单位实际填写的弹药池一致。

如果多个单位共享同一条远程武器,而你只想修改其中一个单位,必须先复制远程武器并给它新 Key。否则所有引用原武器的单位都可能一起变化。

投射物核心:projectiles_tables

projectiles_tables决定弹丸怎样飞、飞多远、落点多散、直接造成多少伤害、能否命中某类目标,以及它是否连接爆炸、制导、穿透和显示。下面按功能解释当前表中的全部字段。

身份、类别与基础发射方式

投射物的类型、爆炸、旋转、数量和弹道

字段 含义与使用要点
key 投射物唯一 Key。远程武器、破片和其他系统都可能引用它。
category 投射物大类。当前可见类型包括arrowartilleryaxegrenadejavelinmiscmusketsling。它不是纯 UI 标签:Schema 特别说明artillerymisc等类别可能无视盾牌,artillery还有独立的士气惩罚,因此不要只为改图标随意换类别。
shot_type 射击类型,影响弹药切换、效果启用和界面分类。它与projectile_shot_type_display不是同一列:前者是规则类别,后者是玩家看见的显示定义。
explosion_type 爆炸 Key,引用projectiles_explosions_tables。普通箭矢应留空;填错或引用不存在会使爆炸分支失效。
high_air_resistance 高空气阻力开关。当前 Schema 没有进一步解释具体公式;只在同类原版模板确实使用时复制,并通过弹道实测确认。
spin_type 飞行旋转方式。当前常见枚举包括noneaxe_spinchain_shot_spingrenade_spinshell_spin。它需要与可视模型方向和动画相配。
projectile_number 每个发射位置、每次发射同时生成的投射物数量。它是霰射数量,不是弹药池数量,也不是一轮连续射击次数。
trajectory_sight 瞄准和弹道类型。当前常见值包括lowhighfixeddual_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_radiusbuilding_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. 伤害可能结算多次

一枚带爆炸和破片的投射物,可能具有:

  1. 主投射物的damage + ap_damage直击伤害。
  2. 主投射物连接爆炸的detonation_damage + detonation_damage_ap
  3. 每枚破片投射物自己的直击伤害。
  4. 每枚破片再次连接的第二段爆炸伤害。
  5. 对步兵或大型单位加成。
  6. 近失冲击波、接触状态效果、旋涡和其他额外效果。

平衡时必须算完整链,不能只看主投射物那一行。

投射物外观: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 引爆器类型。当前常见值包括fusefuse_grenadepercussive。可大致对应普通引信、手雷式引信和撞击式触发,但具体时机必须以原版模板和实战为准。
detonation_type 爆炸传播或上下文类型。当前可见值包括noneshockwaveblinding_shockwaveboiling_oilcarcassfire_ignitionflaming_groundquicklime。它们不是单纯特效名称,可能影响爆炸规则;不要把视觉相似当作可以互换。
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 破片发射形状。当前值包括hemispherespheresector,分别表示半球、球形和扇区式分布。
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 = 420minimum_range = 60fixed_elevation = 55,在距目标60米时触发第一段爆炸;第一段爆炸生成8枚第二阶段破片。这个例子说明破片还可以继续爆炸,也说明总伤害不能只看第一行。

如果复制这类结构,至少需要一起复制主投射物、第一段爆炸、破片组、破片投射物,以及破片连接的第二段爆炸和所需显示记录。少一环都可能出现“有第一段爆炸但没有破片”“有伤害但没有模型”或“破片飞出却不爆炸”。

弹药切换

可切换弹药指同一件missile_weapons_tables远程武器在战斗中提供多个projectiles_tables选项。它不是primary_ammosecondary_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_nameui_sound_eventonscreen_nametooltip_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。

弹药切换的完整步骤

  1. 选一个原本就能切换弹药且机制接近的武器作为模板。
  2. 复制远程武器,改成自己的missile_weapons_tables.key
  3. 复制默认投射物和额外投射物,并分别改成新 Key。
  4. 让远程武器default_projectile指向第一种投射物。
  5. missile_weapons_to_projectiles_tables把同一武器连接到第二种投射物。
  6. 为两种投射物选择能够区分的shot_type
  7. 为两种投射物分别填写projectile_shot_type_display
  8. 复用或新建两条显示记录,补齐图标、名称、说明和音效。
  9. 检查两种投射物是否使用同一弹药池;如要使用不同池,必须重新核对武器与单位的弹药池结构,不能只改投射物。
  10. 进战斗确认按钮数量、默认选项、切换、弹药消耗、射击和 AI 使用全部正常。

效果替换整件武器不是弹药切换

unit_missile_weapon_junctions_tables配合effect_bonus_value_missile_weapon_junctions_tables,可以通过科技、技能、特性或其他效果给单位启用另一件远程武器。这条路线适合“解锁升级武器”“战役效果替换弹丸”等情况,但它替换的是missile_weapons_tables记录,不是同一武器下的普通弹药按钮。

选择哪条路线取决于目标:

  • 玩家在战斗中手动切换:优先研究missile_weapons_to_projectiles_tables和射击类型显示。
  • 由科技、技能、状态或派系效果改变:研究武器连接与效果连接表。
  • 只是让武器消耗另一组数量:使用use_secondary_ammo_poolsecondary_ammo

三种完整制作案例

下面的案例只展示通用思路。Key 和数值来自对应原版模板,不是新武器的唯一正确答案。

案例一:普通单弹丸弩箭

适用条件:普通步兵、单一弹药、没有爆炸、没有破片、没有制导。

  1. 从目标单位的land_units_tables.primary_missile_weapon找到原版弩武器。
  2. 复制missile_weapons_tables记录,改成自己的武器 Key。
  3. 复制default_projectile指向的projectiles_tables记录,改成自己的投射物 Key。
  4. 让新武器指向新投射物,让新单位指向新武器。
  5. 先保持显示、音频、穿透和弹道与模板一致,只改射程、伤害或装填中的一个目标参数。
  6. 进战斗确认能瞄准、能开火、会扣弹药、弹丸能命中并结算伤害。

原版玉勇弩箭wh3_cth_crossbow_bolt当前使用effective_range = 160damage = 18ap_damage = 6base_reload_time = 13projectile_number = 1。制作火枪、投矛或霰弹时不要照抄这些值,应重新找相同机制模板。

案例二:拥有两种可切换弹药的弩炮

适用条件:同一远程武器始终存在两种战斗内可选投射物。

  1. 复制收割者弩炮或其他同类可切换武器的完整结构。
  2. 分别建立默认单发投射物和额外多发投射物。
  3. 在连接表中只添加额外投射物。
  4. 分别设置artillery_defaultartillery_canister或其他符合目标的类型。
  5. 分别设置单发和多发显示 Key。
  6. 根据用途配置projectile_number、单枚伤害、对步兵/大型加成、散布与穿透。
  7. 在战斗中反复切换,确认按钮、投射数量、弹药消耗和 AI 行为。

若你的目标是“科技研究后永久改用更强炮弹”,这个案例不合适,应改走效果驱动的武器替换路线。

案例三:空爆并产生二段爆炸破片的火箭

适用条件:主投射物在目标附近空爆,生成多枚破片,破片落地或命中后再爆炸。

  1. 复制主投射物、第一段爆炸、破片组、破片投射物和第二段爆炸。
  2. 给五组记录都改成自己的唯一 Key,并逐条修复引用。
  3. 先保留原版引信距离、固定仰角、初速和最小射程,确认空爆位置正确。
  4. 再调整破片amountlaunch_type和破片投射物的弹道。
  5. 分别计算主投射物直伤、第一段爆炸伤害、每枚破片直伤和第二段爆炸伤害。
  6. 检查两段affects_alliesis_magicalis_spellignition_amount
  7. 测试静止步兵、移动步兵、大型单位、友军混战、建筑、高低差和最大射程。

如果只想做“撞击地面后爆炸一次”的炮弹,不需要破片表,也不需要第二段投射物;直接连接一条爆炸记录更简单、更稳定。

怎样自行找到需要的数据

已知单位,沿引用向下找

  1. land_units_tables搜索单位 Key。
  2. 读取primary_missile_weapon
  3. 跳到missile_weapons_tables,读取default_projectile
  4. missile_weapons_to_projectiles_tables搜索远程武器 Key,检查是否还有额外投射物。
  5. 打开每条projectiles_tables记录,逐个检查爆炸、显示、制导、穿透、缩放和弹药显示引用。
  6. 对每个非空引用继续跳转,直到所有分支都闭合。

只知道想要的效果,反向找模板

  • 想做空爆:在projectiles_explosions_tables比较使用fuse_distance_from_target的记录,再查找哪些投射物引用它们。
  • 想做制导:在projectiles_tables筛选homing_params非空的记录。
  • 想做多弹丸:筛选projectile_number > 1,再比较spreadcalibration_area与单枚伤害。
  • 想做破片:从projectile_shrapnels_tables找到amountlaunch_type相近的记录,再反查爆炸。
  • 想做弹药切换:从missile_weapons_to_projectiles_tables找原版武器,再检查默认投射物、额外投射物和两套显示。
  • 想做接触状态:筛选contact_stat_effect或爆炸contact_phase_effect非空的记录,再沿能力阶段继续查。

每次至少比较三类信息

  1. 表中数值:字段到底填了什么。
  2. 引用关系:哪些单位、武器、投射物和效果共享这条记录。
  3. 游戏表现:原版单位实际如何发射、命中、爆炸、切换和扣除弹药。

只复制数值而不看引用,会漏表;只看引用而不看游戏,会复制到机制不同的模板。

常见故障与排查顺序

单位没有远程攻击或不肯开火

  1. 检查land_units_tables.primary_missile_weapon是否存在且拼写完全一致。
  2. 检查远程武器default_projectile是否存在。
  3. 检查primary_ammo或实际使用的secondary_ammo是否大于0
  4. 检查use_secondary_ammo_pool有没有误勾。
  5. 检查射程和最小射程是否把目标排除在外。
  6. 检查该单位的射击动画、开火事件和发射点;这些不能只靠 DB 补齐。
  7. 对传统火炮检查battlefield_engines_tables和乘员/引擎链。

有开火动作,但看不到弹丸

  1. 检查projectile_display引用是否存在。
  2. 检查display_model实际资产是否存在、路径和格式是否正确。
  3. 检查模型缩放、轴向和tip_offset
  4. 检查弹丸是否因为expiry_range过短或引信错误而立即失效。
  5. 暂时复用已验证的原版显示记录,区分“数据链错误”和“自定义资产错误”。

看得到弹丸,但打不中或飞不到

  1. 比较effective_rangeexpiry_range
  2. 检查trajectory_sightfixed_elevationmax_elevationmuzzle_velocitygravity是否属于同一套弹道。
  3. 检查calibration_areacalibration_distance、单位accuracymarksmanship_bonus
  4. 检查minimum_range以及目标高低差。
  5. 制导弹还要检查start_time、转向角和转向强度。

伤害远高于预期

  1. 先算projectile_number × burst_size可能生成的主投射物数量。
  2. 加上主投射物直击普通/破甲伤害。
  3. 加上爆炸普通/破甲伤害。
  4. 再算shrapnel.amount × 每枚破片完整伤害链
  5. 检查对步兵/大型加成、damage_mod_missile、建筑倍率和缩放伤害。
  6. 检查投射物与爆炸是否重复施加同一接触效果。

有爆炸特效,但没有爆炸伤害

  1. 确认projectiles_tables.explosion_type不是只填了粒子 Key,而是正确的爆炸记录 Key。
  2. 检查爆炸detonation_damagedetonation_damage_ap
  3. 检查半径、触发类型、固定引信或距离引信。
  4. 检查爆炸是否在目标前过早触发。
  5. 检查目标是否因友军、法术或其他上下文规则被排除。

有第一段爆炸,但没有破片

  1. 检查爆炸记录shrapnel是否指向存在的破片组。
  2. 检查破片amount是否大于0
  3. 检查projectile引用的破片投射物是否存在。
  4. 暂时让破片复用一个可见的原版显示,排除模型问题。
  5. 检查发射形状、角度和破片投射物最小射程/失效距离。

看不到弹药切换按钮

  1. 检查额外投射物连接的远程武器 Key 是否与单位实际使用的武器一致。
  2. 检查默认与额外投射物是否是两条不同记录。
  3. 检查两者的shot_type能否区分。
  4. 检查两者的projectile_shot_type_display是否存在。
  5. 检查显示记录的图标、名称和说明。
  6. 检查射击类型是否要求由效果启用。
  7. 如果复制的是效果驱动武器替换模板,确认你真正需要的是否是另一条路线。

RPFM 诊断没有报错,但游戏仍然不对

RPFM 诊断主要能发现缺失引用、字段类型、重复 Key 等结构问题。它不能证明下面这些行为正确:

  • 射击动画中存在正确的开火事件。
  • 发射点数量与shots_per_volley相符。
  • 弹丸模型轴向、缩放和挂点正确。
  • 粒子、尾迹和音频在当前场景可加载。
  • AI 会按你的设计选择和切换弹药。
  • 伤害、击退、穿透和破片数量在实际战斗中平衡。

这些必须通过自定义战斗或战役环境实测。

游戏内验收清单

每改完一种机制,只测试该机制,不要一次改完所有数值再找问题。

基础开火

  • 单位能选择目标并进入射程。
  • 开火动作、发射时机和发射位置正确。
  • 每轮正确扣除主要或次要弹药。
  • 装填节奏没有被动画卡住或跳过。

弹道与命中

  • 近距离不会因最小射程或引信立即失效。
  • 最大射程处弹丸不会在目标前消失。
  • 平地、高处射低处、低处射高处都能工作。
  • 静止编队、移动编队、大型单位和飞行单位分别测试。
  • 弹丸模型、尖端、尾迹和飞行方向一致。

伤害与目标

  • 分别记录对低甲、高甲、小型和大型目标的伤害。
  • 检查对建筑、城门、载具和友军的行为。
  • 多弹丸要确认实际生成数量与单枚伤害。
  • 穿透弹要观察命中第一排、后排和大型实体后的表现。

爆炸与破片

  • 空中、地面和直接命中时的爆点都正确。
  • 普通伤害、破甲伤害、推力和镜头震动符合设计。
  • 破片数量、方向、二次命中和二次爆炸可见。
  • 友军混入目标时,直击与爆炸两阶段的友伤都符合设置。
  • 大量单位同时开火时没有明显性能问题。

弹药切换

  • 默认弹药正确。
  • 按钮图标、名称、说明和音效正确。
  • 每一种弹药都能选择、开火、扣弹和造成不同效果。
  • 来回切换后不会卡在错误动画或错误投射物。
  • AI 控制该单位时也能产生可接受行为。

最后检查 Pack

  1. 每张 DB 子表都已从data__改成唯一名称。
  2. 所有自定义 Key 使用统一前缀。
  3. 没有为了单个单位直接修改共享的原版远程武器或投射物。
  4. 所有非空引用都能在自己的 Pack 或已加载依赖中找到。
  5. 没有把显示 Key、粒子 Key、投射物 Key和爆炸 Key填错列。
  6. 没有同时把固定时间引信和距离引信当成主要触发方式。
  7. 没有把次要弹药池误当成可切换弹药。
  8. RPFM 诊断已检查,但没有把“诊断通过”当成游戏验收通过。
  9. 自定义战斗已按基础、弹道、伤害、爆炸、破片和切换分阶段测试。

本文的字段结构以 RPFM 当前《战锤 III》Schema和本机 Assembly Kit 原始数据库为依据;旧版《战锤 II》远程武器资料仅用于追踪历史线索。游戏更新后如果字段发生变化,应先更新 RPFM Schema,再以新版本原版记录和实际游戏表现重新核对。