MOD 制作教程 🏠 主页

三、单位 units.ini 代码讲解

units.ini 用于定义游戏单位(步兵、载具、空军、海军)。格式与游戏本体 data/units_ini.js 内的 INI 文本完全一致。每个 [节名] 就是一个单位,节名即全局唯一 ID。

3.1 完整示例

以游戏自带的「步枪兵」和一辆自定义坦克为例:

[rifleman]
name=步枪兵
desc=便宜好用的基础步兵,克制其它步兵。
kind=infantry
hp=110
armor=infantry
cost=60
build=3.5
speed=52
rad=5
sight=6
turn=12
weapon=mg
from=barracks
req=
tab=inf
art=rifleman
key=1
crush=true

[cz_flameTank]
name=火焰坦克
desc=喷火的装甲单位
kind=vehicle
hp=400
armor=light
cost=800
build=8
speed=64
rad=10
sight=6
turn=3.0
weapon=cz_flamethrower
from=factory
req=
tab=veh
art=cz_flameTank

3.2 单位类型 kind(必填)

kind含义行为
infantry步兵可进驻民房、方向 8 向、行走动画 4 帧
vehicle载具方向 16 向、可碾压(配合 crush)
air空军空中单位,仅防空武器可打
naval海军水面舰艇

3.3 字段速查

[Unit]>name= (string) — 显示名称。
建造列表、说明框显示。
[Unit]>kind= (enum: infantry|vehicle|air|naval) — 必填,单位类别。
决定索敌、进驻、方向帧数等行为。
[Unit]>hp= (int) — 生命值。
步兵约 70-140,载具约 260-650,空军约 100-200。
[Unit]>armor= (enum: infantry|light|heavy|air|naval|sub) — 护甲类型。
决定武器对其的伤害倍率(配合武器 vs= 字段)。
[Unit]>cost= (int) — 造价(信用点)。
遭遇战初始资金购买。步兵 60-600,载具 500-2000。
[Unit]>build= (number) — 建造时间(秒)。
从兵营/工厂生产所需时间。
[Unit]>speed= (number) — 移动速度(像素/秒)。
步兵 40-60,载具 40-120。数值越大越快。
[Unit]>rad= (int) — 碰撞半径(像素)。
影响寻路与碰撞判定。步兵 5,载具 9-12。
[Unit]>sight= (int) — 视野(格数)。
视野范围内的地图可被看见(配合迷雾)。
[Unit]>turn= (number) — 转向速度(每秒角度数)。
越大转向越快。载具约 2.6-4.2。
[Unit]>turretTurn= (number) — 炮塔转向速度(可选)。
有独立炮塔的单位使用,如坦克。
[Unit]>weapon= (weaponId) — 主武器。
引用 weapons.ini 里的武器 ID。设为空或省略则无武装。
[Unit]>secondary= (weaponId) — 副武器(可选)。
有副武器的单位自动按目标智能选择主/副武器:对目标护甲倍率更高的那把优先,副武器冷却独立。兼容旧字段 secondaryWeapon=(作用相同)。空中单位不使用副武器。
[Unit]>secondaryMode= (enum: auto|cooldown|mandatory) — 副武器使用模式(可选)。
auto(默认)按目标护甲智能切换;cooldown 主武器冷却间隙自动打副武器;mandatory 每 secondaryEvery 次主武器射击后强制打一发副武器。
[Unit]>secondaryEvery= (int) — mandatory 模式的副武器节奏(可选)。
如 secondaryEvery=4:每 4 发主武器后打一发副武器。
[Unit]>from= (buildingId) — 生产建筑。
步兵 barracks,载具 factory,空军 helipad。
[Unit]>req= (comma-separated) — 科技前置(可选)。
需先建造对应建筑才能生产。如 req=radar。
[Unit]>tab= (enum: inf|veh|air|navy) — 生产页签。
决定出现在侧边栏哪个分类页。
[Unit]>art= (artKey) — 美术资源名。
决定用哪个绘制函数/PNG/.r 素材。默认取节名。
[Unit]>key= (string) — 建造栏快捷键数字。
如 key=1。
[Unit]>crush= (boolean) — 可碾压步兵。
重型载具设 true。
[Unit]>faction= (factionId) — 阵营专属(可选)。
如 guard / steel,仅该阵营可造。
[Unit]>harvester= ({capacity,rate,unload}) — 采矿能力(JSON 对象)。
设此字段则成为矿车,自动往返矿脉与精炼厂。
[Unit]>engineer= (boolean) — 工程师。
可占领敌方建筑、修复己方建筑。
[Unit]>canGarrison= (boolean) — 可进驻民房。
步兵默认 true,载具默认 false,可显式覆盖。
[Unit]>Infiltrate= (boolean) — 可潜入建筑。
潜入型步兵的基础开关。设 true 才能使用 Saboteur= 爆破能力。默认 false。
[Unit]>Saboteur= (boolean) — 爆破手。
可进入「可爆破」建筑:建筑会像被安放 C4 一样爆炸摧毁,爆破手自身被消耗。
  • 前置:必须同时设 Infiltrate=yes,否则无法对建筑下手。
  • 目标限制:只能进入敌方「可爆破」建筑(见建筑字段 ImmuneToSaboteurs=)。
  • 互斥:不得与偷车/驾驶(CanDrive=yes)、C4=yes、Occupier=yes、engineer=yes 连用;爆破手也无法进驻民房(强制 canGarrison=false)。
  • 默认 false。仅对 kind=infantry 有意义;应为无武装单位(不设 weapon=/secondary=)。
[Unit]>CanDrive= (boolean) — 可驾驶载具(偷车)。
与 Saboteur=yes 互斥,不可同时设置。
[Unit]>C4= (boolean) — 自带 C4 爆破。
与 Saboteur=yes 互斥,不可同时设置。
[Unit]>Occupier= (boolean) — 可进驻建筑。
与 Saboteur=yes 互斥,不可同时设置。
[Unit]>PoweredBy= (comma-separated BuildingType) — 依赖控制建筑。
列出若干建筑 ID,该单位受这些建筑控制:只要还有其中任一座存在于己方(未摧毁),单位可正常指挥;若失去全部依赖建筑,则无法被指挥攻击或移动(原地待命,也不会自动索敌开火;恢复依赖后可再次指挥)。适用于「需前置设施驱动才运转」的单位(如依赖发电机/指挥中心才能动的机器人)。
[Unit]>BuiltAt= (comma-separated BuildingType) — 指定生产建筑。
列出若干建筑 ID,该单位只在这些建筑中被生产。用于实现「不同单位在不同工厂造」(如兵营产步兵、狗屋/特战站只产某类单位)。需与 from=(生产建筑类别)配合,并保证至少有 from 建筑 + 一座 BuiltAt 建筑存在才可加入队列。默认不限定(任同类别工厂均可造)。
[Unit]>forbidFactions= (comma-separated) — 禁止的阵营(可选)。
如 forbidFactions=xness 表示该单位对非洲军禁用。

3.4 单位皮肤

单位皮肤由商店系统管理(data/skins_ini.js),MOD 内可在 art.ini 中为皮肤 artKey 配置 PNG。皮肤字段以 skin_ 前缀区分:

[skin_rifleman_camo]
name=林地迷彩
art=rifleman
skinArt=skin_rifleman_camo
kind=unit
price=300
currency=gold
desc=绿色迷彩,隐蔽性更佳
制作提示:新单位的 art= 若指向 .r 素材或 PNG,需在包内 res/ 提供,并在 mod.ini 的 res= 字段列出。没有对应素材时会显示占位方块。

3.5 本工程新增单位(1.2 系列)

以下单位直接写在 data/units_ini.js 中,可直接作为 MOD 自定义单位的写法参考:

[interceptor]
techLevel=1
name=截击机
desc=高速对空拦截机,专打敌方空军;需回机坪补弹。
kind=air
hp=380
armor=air
cost=1000
build=11
speed=168
rad=12
sight=8
turn=3.0
weapon=flak          ; 复用现有防空武器(air=true 可打空)
from=helipad
req=radar
tab=air
art=interceptor
key=3
ammo=10
rearm=9
alt=30
空军补弹:ammo= + rearm= 令空中单位在弹药耗尽后需回 helipad 补给(与武装直升机一致)。
[awacs]
techLevel=1
name=预警机
desc=无武装。超大视野空中侦察,为友军提前暴露远处敌情。
kind=air
hp=450
armor=air
cost=1200
build=15
speed=112
rad=14
sight=16
turn=2.4
weapon=
from=helipad
req=radar
tab=air
art=awacs
key=4
alt=40
[destroyer]
name=驱逐舰
desc=重鱼雷驱逐舰,反舰反潜;深水炸弹可逼出潜水艇。
kind=naval
moveType=naval
hp=560
armor=heavy
cost=1500
build=15
speed=92
rad=15
sight=9
turn=2.2
turretTurn=2.8
weapon=torpedo
from=shipyard
req=radar
tab=navy
art=gunboat
key=5
techLevel=1
示例要点:空军 kind=air + from=helipad + tab=air;海军 kind=naval + moveType=naval + from=shipyard + tab=navy。