制作兵种:远程单位
远程单位不是在land_units_tables里填一个伤害数字就结束。它至少要经过“单位 → 远程武器 → 投射物”这条链;爆炸、破片、弹丸外观和切换弹药会继续向下连接。
本篇以震旦玉勇弩手wh3_main_cth_inf_jade_warrior_crossbowmen_0作为普通远程步兵模板,只讲 RPFM 中的数据配置,不制作模型、动画、弹丸模型或特效资产。想逐列理解远程武器、投射物、爆炸、破片、穿透和弹药切换时,继续阅读《远程武器详解》;本篇只说明怎样把现有链路接入一个新兵种。
本例适合什么情况
玉勇弩手适合演示“普通步兵使用单一弩箭弹药”的基础链路。火枪、喷火、多弹丸、曲射、制导、投掷武器、骑射、战车乘员和火炮可能使用不同动作、射击方式、武器入口或附加表,不能把本例的弩箭参数当成通用远程模板。
制作自己的远程单位时,先在land_units_tables找到最接近的原版单位,沿Primary Missile Weapon跳到missile_weapons_tables,再沿Default Projectile跳到projectiles_tables。对比两到三个射击方式相同的单位,并对武器或投射物使用查找引用,确认记录是否共享以及是否存在额外弹药、爆炸、破片、穿透或显示分支。
原版模板从
依赖项 → 游戏文件中查找,截图的Game-RO:表示只读。若缓存里混有其他 Mod,转到定义也可能打开它们的同名记录;检查文件来源,不把“只读”当成“必定原版”。不要从Assembly Kit 文件复制或导入制作数据。下文修改全部在自己的 Pack 内进行,不修改原版文件。
需要一行模板时,在原版表里点击行号选中完整行并复制,粘贴到自己 Pack 内同种、同版本的新建表单。若采用整份导入法,先把自己的data__改成带个人前缀的文件名,例如twcn_ranged,再只保留需要的行;筛选隐藏不等于删除,其余行仍在文件里。文件重命名防止整个原版同路径文件被覆盖,行内 Key 改名则用于建立独立的新武器,两件事不能互相代替。
远程攻击的数据链
land_units_tables.Primary Missile Weapon
↓
missile_weapons_tables.Default Projectile
↓
projectiles_tables
├─ Projectile Display → projectile_displays_tables
├─ Explosion Type → projectiles_explosions_tables
│ └─ Shrapnel → projectile_shrapnels_tables
├─ Scaling Damage → projectiles_scaling_damages_tables
└─ Projectile Penetration → projectile_penetration_junctions_tables
本例这种基础弓弩只需要前三层;没有爆炸、破片、制导或穿透时,不要创建对应记录。其他类型应以原版模板实际使用的分支为准。
本篇常用表单
| 表单 | 作用 |
|---|---|
land_units_tables |
保存远程武器 Key、弹药容量、射击精度、装填技能和是否散兵等单位级数据。 |
missile_weapons_tables |
注册远程武器,并指向默认投射物。 |
projectiles_tables |
保存射程、弹速、伤害、散布、装填、弹丸数量和特殊效果引用。 |
missile_weapons_to_projectiles_tables |
为同一远程武器添加可切换的额外弹药。 |
projectile_shot_type_enum_tables |
定义射击类型,以及是否需要效果解锁、是否替代其他射击类型。 |
projectile_shot_type_displays_tables |
定义弹药切换的图标和声音;显示名称、提示另写在本地化中。 |
projectile_displays_tables |
指定弹丸的可视模型和相关显示。 |
projectiles_explosions_tables |
配置爆炸范围、伤害、推力、特效、音效和友军伤害。 |
projectile_shrapnels_tables |
配置爆炸后产生的破片投射物。 |
projectiles_scaling_damages_tables |
让伤害随目标生命比例缩放。 |
projectile_penetration_junctions_tables |
配置弹丸穿透不同目标后的表现。 |
建立远程武器
本例的原版玉勇弩手在land_units_tables中使用:
Primary Missile Weapon = wh3_cth_crossbow_bolt
Primary Ammo = 22
Accuracy = 10
Can Skirmish = true
- 在原版
missile_weapons_tables找到wh3_cth_crossbow_bolt,将完整行复制到自己 Pack 的同种表单。 - 把复制行的
Key改成twcn_tutorial_cth_crossbow_weapon,或者使用自己的唯一名称。 - 把新单位的
land_units_tables.Primary Missile Weapon改成这个新 Key。 - 根据定位设置
Primary Ammo、Accuracy和Can Skirmish。
这里的 Key 和数值只属于弩手案例。若参考单位的主要远程武器字段为空,应继续检查它是否通过战场器械、乘员武器配置或额外武器连接开火,而不是强行填写一个Primary Missile Weapon。
图中仍是原版模板,不是已经制作好的新单位。武器 Key 和默认投射物 Key 恰好同名,但属于两张不同的表,不要求永远同名。若只修改单位弹药容量而不改武器、弹丸行为,可以直接引用原版武器,不必复制整条链。
missile_weapons_tables.Default Projectile决定默认弹药;Use Secondary Ammo Pool只有确实使用land_units_tables.Secondary Ammo时才勾选,误勾可能让单位看似有主弹药却无法正常射击。
本例没有第二弹药池,直接保留Use Secondary Ammo Pool = false、Primary Ammo = 22、Accuracy = 10和Can Skirmish = true。想让弩手坚持原地射击、由玩家手动后撤时,可以将新单位的Can Skirmish设为false;想保留原版散兵行为则保持true。加弹药改Primary Ammo,加射程或弹丸杀伤改下节投射物,三种需求不用同时改全部字段。
建立投射物
从模板远程武器的Default Projectile继续找到原版projectiles_tables,把完整行复制到自己的表单。需要独立修改弹丸时,把复制行的Key改为twcn_tutorial_cth_crossbow_bolt,再将新武器的Default Projectile改成这个值。保持原版弹丸不变时,则保留原引用,不需要新建投射物。
图中Shot Type = small_arm_default、Explosion Type为空、Projectile Number = 1,是普通弩箭的起点,不是所有远程武器的固定配置。右侧还有很多列,需要横向滚动查看;不要只复制画面里可见的几个单元格。
重点列可以分为四组:
| 类别 | 常用列 |
|---|---|
| 射程与弹道 | Effective Range、Minimum Range、Muzzle Velocity、Gravity、Max Elevation、Expiry Range |
| 射击精度与散布 | Marksmanship Bonus、Spread、Calibration Distance、Calibration Area |
| 基础远程杀伤、破甲远程杀伤与目标 | Damage、AP Damage、Bonus V Infantry、Bonus V Large、Can Damage Buildings、Can Damage Vehicle |
| 射击节奏 | Base Reload Time、Projectile Number、Burst Size、Burst Shot Delay、Shots Per Volley |
Projectile Number是同一时刻发出的弹丸数,Burst Size是一次射击中的连续发射,Shots Per Volley还会受武器和动画设计影响。数值能填进去,不代表现有射击动画能自然配合。
玉勇弩箭的起始数据可直接对照:
| 字段 | 原版值 | 想调整什么时才改 |
|---|---|---|
category、shot_type |
arrow、small_arm_default |
本例保持不变;arrow同时用于这类弩箭,不要自行编写crossbow类别。 |
effective_range、minimum_range |
160、0 |
调整可选射程。 |
muzzle_velocity |
45 |
改变弹速时还要核对弹道、动画和命中表现。 |
damage、ap_damage |
18、6 |
分别调整单枚弹丸的基础及破甲远程杀伤。 |
base_reload_time |
13 |
改基础装填时间,最终节奏还受装填技能和动作影响。 |
projectile_number、burst_size |
1、1 |
本例保持单枚、单次;散射和连射应换用对应模板。 |
当前原版投射物实际使用arrow、artillery、axe、grenade、javelin、misc、musket、sling八种category值。这是投射物内部分类,不是单位分类;普通弩箭保留arrow,火枪应从musket模板开始,火炮则先核对器械使用的炮弹链。射击类型的完整选项与启用条件见远程武器详解。
切换第二种弹药
这里换用“收割者弩炮”的原版结构演示,不是在玉勇弩手身上自动启用第二弹药。它的武器 Key 为wh2_main_def_reaper_bolt_thrower_bolt,默认投射物也是这个 Key;连接表只额外连接wh2_main_def_reaper_bolt_thrower_bolt_spread。
- 确定自己的武器 Key,并让
missile_weapons_tables.Default Projectile指向默认弹药。 - 在
projectiles_tables准备第二弹药记录。沿用原版行为可直接引用已有 Key,需要改变参数才复制并改名。 - 在
missile_weapons_to_projectiles_tables新建连接:Missile Weapon填自己的武器 Key,Projectile填第二弹药 Key。两列共同标识连接,不要重复添加同一对值,也不必再把默认弹药添加一次。 - 检查两条投射物的
Shot Type。收割者弩炮默认使用artillery_default,散射使用artillery_canister;到projectile_shot_type_enum_tables检查对应类型的Requires Effect Enabling和Supersedes Shot Type,不要只换一个看起来像弹药名称的字符串。 - 分别检查两条投射物的
Projectile Shot Type Display。收割者弩炮使用bolt_thrower_single_shot和bolt_thrower_multi_shot,它们连接的是projectile_shot_type_displays_tables,不是弹丸模型表projectile_displays_tables。 - 自定义切换按钮时,在显示表复制记录并改成独立 Key,配置
Icon Name和UI Sound Event,再让投射物引用它。本地化使用projectile_shot_type_displays_onscreen_name_<显示Key>及projectile_shot_type_displays_tooltip_text_<显示Key>;名称、提示不是直接填进 DB 的中文列。原样沿用已有按钮时可以保留原版显示记录。
两种弹药也不是只换图标:本例默认弹药一次生成1枚弹丸,散射弹药一次生成16枚,两者伤害和目标加成分别配置。修改时应一起检查Projectile Number、每枚弹丸伤害和散布,不能把单发弹的伤害原封不动乘到十几枚弹丸上。
“可以切换第二种弹药”与
Use Secondary Ammo Pool不是一回事。前者增加可选投射物,后者选择该武器消耗哪一套单位弹药。不要为开启切换按钮而顺手勾选第二弹药池。
普通弓、弩、火枪没有切换弹药时,不需要这张连接表。
是否需要第二弹药不能只看单位“有两种攻击”。先搜索模板的远程武器 Key,确认missile_weapons_to_projectiles_tables确实存在额外连接,再复制对应结构。
爆炸、破片和穿透
- 投射物会爆炸:在
projectiles_tables.Explosion Type连接projectiles_explosions_tables。 - 爆炸会产生破片:在爆炸记录的
Shrapnel连接projectile_shrapnels_tables,破片本身再指向另一条projectiles_tables记录。 - 需要穿透:使用
Projectile Penetration及projectile_penetration_junctions_tables。 - 需要目标血量缩放:连接
projectiles_scaling_damages_tables。 - 需要自定义弹丸外观:连接
projectile_displays_tables,但显示资产本身仍需正确文件。
以下改用死啸者火箭发射器的分裂链说明:它适合演示“第一阶段爆炸产生新投射物”,不代表普通弩箭必须连接爆炸。只给弩箭添加普通命中爆炸时,应另找这种行为的原版模板,不必复制整条火箭链。
爆炸表中,Key供投射物的Explosion Type引用;引爆方式、爆炸类型、半径、持续时间、传播速度和伤害分别配置,Shrapnel不为空时再连接破片。本例的Key = wh3_dlc23_chd_deathshrieker_rocket_stage_1,Detonator Type = fuse、Detonation Radius = 5、Shrapnel = deathshrieker_rocket。引爆条件还涉及上游投射物数据,不是填了破片 Key 就一定在正确的位置分裂。
破片表中,Key供爆炸记录引用,Projectile指向破片实际生成的另一条projectiles_tables记录,Amount、Launch Type和Sector Angle配置数量及发射方式。本例为8、hemisphere、160。图示的三个部分分别是破片 Key、第二阶段投射物、数量与散射配置。
第一阶段投射物 wh3_dlc23_chd_deathshrieker_rocket_stage_1
→ 同名的第一阶段爆炸
→ 破片 deathshrieker_rocket
→ 8 枚 wh3_dlc23_chd_deathshrieker_rocket_stage_2_shrapnel
→ 第二阶段爆炸 wh3_dlc23_chd_deathshrieker_rocket_stage_2
破片不是直接填写一组额外伤害,而是生成新的投射物。需要独立修改整套分裂武器时,把需要改变的投射物、爆炸、破片记录分别复制改名,并从下游到上游接回自己的 Key;不改的模型、音效和特效仍可引用原版。检查每一级的直接命中伤害、爆炸伤害和破片数量,不能把某一列当成整发武器的最终总伤害。
引爆器detonator_type在当前原版使用percussive和fuse,分别对应接触引爆与引信路线;本例空中分裂沿用fuse,还须保留上游引信条件。破片launch_type使用hemisphere或sector,是半球与扇区发射方式,sector_angle再配置相关角度。本例直接保留hemisphere、160和amount = 8;它们不是要求任何破片武器都填相同的数值。
穿透连接也可能由同一个分组对应多条目标类型记录组成,复制自定义分组时要保留它需要的整组连接,不能随便留一行。Scaling Damage的生命值条件是目标生命比例,不是直接填“还剩多少点血”。具体字段和更多对应截图见《远程武器详解》。
这些效果可以互相嵌套,错误也会成倍增加。第一次制作远程兵种时,先让普通投射物稳定命中并结算伤害,再逐项添加爆炸或破片。
游戏内检查
- 检查射程圈、弹药容量和面板远程威力。
- 分别测试近距离、最大射程和不同高度目标。
- 观察弹道、散布、弹速和装填动作是否匹配。
- 测试对步兵、大型单位、建筑和载具的伤害。
- 有爆炸时同时测试友军伤害、推力和特效。
- 有第二弹药时反复切换,确认两种弹药都能耗弹和造成伤害。
RPFM 诊断无法证明发射挂点、动画事件、弹丸模型和特效在战场中正确;这些必须实战观察。

