单位与建筑
定义:单位、建筑或升级等级带有什么,各自在哪里生产,以及 AI 如何使用它们。
定义就是一个单位、一座建筑或一个升级等级,它可以带的每个字段都是游戏自身单位定义的字段。下面是一个自带图像、带防御建筑、并为发电厂线加上第四级的模组:
{
"format": "steel-tide-mod",
"v": 4,
"id": "ironworks",
"name": [
"Ironworks",
"铁工厂"
],
"version": "1.0.0",
"author": "you",
"description": [
"A hover tank, a bunker and a fusion plant.",
"一辆悬浮坦克、一座碉堡和一座聚变电站。"
],
"license": "CC-BY-4.0",
"defs": [
{
"id": "ironworks-hover",
"name": [
"Skimmer Hover Tank",
"掠行悬浮坦克"
],
"desc": [
"Fast, thin-skinned, rockets.",
"快、皮薄、打火箭。"
],
"kind": "unit",
"domain": "ground",
"tier": 2,
"cost": 260,
"hp": 320,
"armor": "light",
"speed": 110,
"turnRate": 5,
"radius": 9,
"body": {
"r": 10,
"len": 10
},
"trail": "tire",
"weapons": [
{
"id": "pods",
"cls": "rocket",
"dmg": 16,
"reload": 2.2,
"range": 4.5,
"burst": 4,
"burstDelay": 0.1,
"splash": 10,
"spread": 14
}
],
"producedBy": [
"factory2",
"factory3"
],
"aiWeight": 1
},
{
"id": "ironworks-bunker",
"name": [
"Bunker",
"碉堡"
],
"desc": [
"A gun pit that takes a beating.",
"扛打的火力点。"
],
"kind": "building",
"cost": 380,
"hp": 1600,
"fw": 2,
"fh": 2,
"power": -3,
"vision": 8,
"weapons": [
{
"id": "gun",
"cls": "autocannon",
"dmg": 22,
"reload": 0.5,
"range": 5,
"turret": false,
"targets": [
"ground",
"ship"
]
}
]
},
{
"id": "ironworks-fusion",
"name": [
"Fusion Plant",
"聚变电站"
],
"desc": [
"The plant line's fourth level.",
"发电厂线的第四级。"
],
"extends": "power3",
"upgradeOf": "power3",
"cost": 2200,
"hp": 2600,
"power": 500,
"upgradeCost": 1100,
"upgradeTime": 60,
"requires": [
"radar",
"reactor"
]
}
],
"sprites": [
{
"key": "u.ironworks-hover",
"file": "sprites/u.ironworks-hover.png",
"frames": 1,
"rotated": true,
"fw": 24,
"fh": 26
},
{
"key": "u.ironworks-bunker",
"file": "sprites/u.ironworks-bunker.png",
"frames": 1
}
],
"screenshots": [
"screenshots/skimmers.png"
]
}计量单位
一格是 32 个世界像素。speed 和弹药 speed 是世界像素/秒;range、minRange、vision、sonar、stealth、detect、repairRange 和 interceptRange 以格计;radius、splash、spread 和 muzzleOffset 以世界像素计;所有时间都是秒。作为参照,野牛主战坦克 的造价 280、生命 620、速度 60、半径 10,主炮每 1.8 秒 60 伤害、射程 4.6;侦察车 造价 60、生命 150、速度 120;战车工厂 占地 3×3、生命 1500、耗电 8。
在哪里生产
- 单位会加入
producedBy中各建筑的生产列表。不写的话,加入其移动域的生产线,从它的等级起:二级地面单位出现在二级和三级战车工厂,一级舰船出现在每座造船厂。用了extends,就在基础单位的生产处生产。 - 建筑由
builtBy中的单位建造,不写就是工程车。带produces列表的建筑就是工厂;单位在producedBy里写了一座普通建筑,也会把它变成工厂。 - 带
produces列表的单位会自己生产这些单位,比如航母、母舰:造好的单位在它当前的位置旁出现,并停在那里。本模组的其他单位可以在producedBy里写它;原版单位不能被变成生产者。 - 升级等级是带
upgradeOf的建筑:被指名的建筑获得一个升级按钮,花upgradeCost、用upgradeTime秒变成这个定义,而这个定义永远不能直接放置。一座建筑只有一个下一级,所以upgradeOf可以指向原版某条线末端的建筑(power3、factory3、extractor3、gatling、cannonturret2、samsite、interceptor2、radar、repairtower、reactor、nukesilo),或者本模组的另一个定义。 requires列出建造前必须存在的建筑,就像 T3 需要雷达站一样。
AI
AI 对手会按 aiWeight 生产模组单位,量表和原版一致(野牛是 3,侦察车 1),前提是 requires 已满足。不写就永远不造。建筑和升级等级只有你自己会用。
参考
定义(defs[])
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| extensions | { capability: configuration } | 按必需引擎能力命名的配置(格式 3) | ||
| isHQ | boolean | 仅建筑 | 总部:提供建造范围和生产槽位,遵循普通总部的失守与出售规则;格式 2 | |
| id | id | 必填 | 在所有模组和原版中唯一;通用名字前加上模组 id 前缀 | |
| name | text | 必填 | HUD 中显示的名称 | |
| desc | text | "" | 提示中的描述 | |
| extends | id | 要复制的原版定义 id(或本模组中前面的定义),再逐字段覆盖;继承其图像和生产位置 | ||
| kind | unit | building | 必填 | 单位或建筑(除非 `extends` 已说明,否则必填) | |
| domain | ground | ship | air | amphibious | 仅单位 | ground | 移动域;潜艇是带 `underwater` 的 `ship`,`amphibious` 既能行驶也能泅渡(在水上算舰船目标,上岸算地面目标) |
| tier | integer 1–3 | 1 | 出现的工厂等级与徽标 | |
| cost | number 0–99999 | 必填 | 金属造价 | |
| buildTime | number 0–3600 | cost ÷ 14 | 满电力下的建造秒数 | |
| pop | integer 0–50 | 1 for a unit, 0 for a building | 占用人口 | |
| hp | number 1–100000000 | 必填 | 生命值;standard 上限为 1000000,large 上限为 100000000 | |
| armor | light | medium | heavy | ship | sub | air | structure | by domain | 武器倍率所针对的装甲类型 | |
| impactMaterial | armor | earth | concrete | concrete for structure armor, armor otherwise | 弹体命中音效材质,不改变伤害;普通与重型爆炸使用对应的录音组 | |
| directionalArmor | { front, side, rear } | 仅单位 | 地面车体直击倍率 `{front, side, rear}`,各为 0–10;正面、背面各 90°,两侧各 90°。抛射、溅射、地雷与火焰不计朝向。向车后短距离移动时会慢速倒车 | |
| speed | number 0–1000 | 仅单位 | 60 | 世界像素/秒(一格 32) |
| turnRate | number 0–50 | 仅单位 | 3.5 | 弧度/秒 |
| vision | number 0–64 | 8 | 视野(格);启用内容时四舍五入为整格 | |
| radius | number 1–200 | 9, or the footprint | 碰撞半径(世界像素),也是*战斗*基准:射程、溅射与命中都以它为准 | |
| body | { r, len } | 仅单位 | the circle of `radius` | 单位互相推挤时所占的形状(世界像素):`r` 为半宽,`len` 为去掉两端半圆后的长度。圆形无法表达细长的船体。船宽(`r` 的两倍)超过一格(32)的舰船需要相应格数的水面(向上取整),永远不会驶入比自身更窄的水道 |
| weapons | weapon[] | [] | 武器列表(见下);空列表即无武装 | |
| fw | integer 1–8 | 仅建筑 | 2 | 占地宽度(格) |
| fh | integer 1–8 | 仅建筑 | 2 | 占地高度(格) |
| producedBy | id[] | 仅单位 | the line for its domain, from its tier up | 加入哪些建筑的生产列表(原版或本模组的),或由本模组的哪些单位生产(航母) |
| produces | id[] | 工厂:可生产的单位。写在单位上,就是自己生产它们的航母或母舰:造好的单位在它当前的位置旁出现 | ||
| builtBy | id[] | 仅建筑 | ["engineer"] | 可建造它的工程单位 |
| builds | id[] | 仅单位 | 工程单位:可建造的建筑 | |
| buildRate | number 0–10000 | 仅单位 | 工程单位:每秒建造量 | |
| reach | number 0–256 | 仅单位 | 工程单位:超出目标半径多远即可施工(世界像素;默认工程车的 46,工程船为 64) | |
| power | number -10000–10000 | −pop for a unit, 0 for a building | 正为发电,负为耗电;单位默认耗电等于其人口 | |
| metalRate | number 0–1000 | 每秒金属:采矿场,或能赚钱的单位(补给舰) | ||
| needsDeposit | boolean | 仅建筑 | 必须建在矿点上 | |
| offshore | boolean | 仅建筑 | 立于开阔海面:占地全为海水,无需岸边;配合 needsDeposit 即为海上矿点,只有水上的建造者(工程船)够得到 | |
| wall | boolean | 仅建筑 | 墙:单格建筑,与相邻的同种建筑连成一体(精灵图为 16 帧,按相邻方向的掩码取帧:北 1、东 2、南 4、西 8),是火炮最后才会射击的目标,不受电磁脉冲影响,倒塌时没有爆炸 | |
| repairRange | number 0–64 | 维修光环范围(格);单位维修地面与海军单位,建筑还可维修飞机与建筑 | ||
| repairAirRange | number 0–64 | repairRange | 飞机维修范围(格);不改变维修来源可维修的目标类型 | |
| repairNavalRange | number 0–64 | repairRange | 舰船、潜艇与泅渡中两栖单位的维修范围(格) | |
| repairRate | number 0–10000 | 每目标每秒维修量 | ||
| repairTargets | integer 1–50 | 同时维修的目标数 | ||
| upgradeOf | id | 仅建筑 | 作为哪座建筑的下一等级;那座建筑获得升级按钮 | |
| upgradeCost | number 0–99999 | 仅建筑 | cost − the source's cost | 配合 `upgradeOf`:升级价格 |
| upgradeTime | number 0–3600 | 仅建筑 | buildTime | 配合 `upgradeOf`:升级秒数 |
| requires | id[] | 建造前必须存在的建筑 id,或必须研究完成的科技节点 id(`suicideDrones`、`activeProtection`…) | ||
| nukeCapacity | integer 0–10 | 发射器:可储存的弹头数 | ||
| nukeCost | number 0–99999 | 发射器:每枚弹头的金属 | ||
| nukeTime | number 0–3600 | 发射器:每枚弹头的秒数 | ||
| armsAtBase | number 0–64 | 仅单位 | 发射器:只在距己方同类基地(舰船为造船厂,飞机为机场)此格数内制造弹头(`underwater` 的还须浮出水面),否则暂停(海妖与幽魂为 4) | |
| rearmTime | number 0.1–600 | 15 | 在同类基地把所有带 `ammo` 的武器从空装满所需秒数 | |
| hatch | number 0–30 | 发射器:发射前舱门打开所需秒数,发射后关闭亦然;不填则即刻发射 | ||
| antiWarhead | boolean | 其防空武器无需老兵等级即可攻击核弹头 | ||
| interceptRange | number 0–64 | 拦截:范围(格) | ||
| interceptMag | integer 1–200 | 拦截:备弹数 | ||
| interceptReload | number 0.05–600 | 拦截:每发补充秒数 | ||
| interceptMuzzleOffset | number 0–200 | 拦截:发射器长度(世界像素) | ||
| transportCap | integer 1–50 | 仅单位 | 运输载具:载重 | |
| transportMaxWeight | number 0–50 | 仅单位 | transportCap | 运输载具:单个乘员的最大载重 |
| cargoReach | number 0.5–4 | 仅单位 | 1 | 运输载具:装卸距离相对默认值的倍率(登陆艇 1.1,海鳗 1.5);舰船的卸载落点范围也随之扩大 |
| landsForCargo | boolean | 仅单位 | 装卸时降落的运输机 | |
| cargoWeight | number 0–50 | 仅单位 | pop | 占用的载重 |
| underwater | boolean | 仅单位 | 潜艇:仅声呐可见 | |
| sonar | number 0–64 | 仅单位 | 声呐范围(格) | |
| stealth | number 0–64 | 仅单位 | 仅在敌方此距离内可见 | |
| detect | number 0–64 | 在此范围内揭示隐形 | ||
| radar | boolean | 靠无线电观测:视野不受天气与昼夜影响,电力不足时缩至 7 格 | ||
| remoteVision | boolean | 仅单位 | 远程图像传输:敌方干扰阻止其揭示干扰区内的视野 | |
| jamRange | number 0–64 | 仅建筑 | 电子战半径(格):需充足电力,会暴露自身位置,阻断敌方雷达与远程视野,不影响目视与声呐 | |
| hovers | boolean | 仅单位 | 悬停而非盘旋的飞行器 | |
| kamikaze | boolean | 仅单位 | 自身即弹药:从不自行索敌,唯一的武器是被命令攻击时撞向目标(黄蜂) | |
| lowFlying | boolean | 仅单位 | 贴着树梢飞行的飞行器:对地的机枪与机炮也能打到它(直升机与黄蜂) | |
| limit | integer 1–200 | 仅单位 | 每个阵营同时最多拥有的数量,在役与排队中合计(黄蜂为 10) | |
| altitude | number 0–64 | 仅单位 | 12 | 飞行器的绘制高度(像素) |
| fireOnMove | boolean | 仅单位 | 移动时持续开火 | |
| burnMult | number 0–4 | 仅单位 | 1 | 地面火焰对它的伤害倍率(火龙为 0.5) |
| trail | tread | tire | wake | none | 仅单位 | by domain | 留下的痕迹,也决定行驶声:履带与轮胎行驶时可闻;步行单位或气垫船用 `none`,既不留痕也没有引擎声 |
| shadow | boolean | true | 游戏为它投下的影子:单位是车体与炮塔的剪影,在地面上向东南偏一步,在空中则更远;建筑是其炮塔投在屋顶上的影子;图像自带阴影或不需要时设为 `false`(潜艇不投影) | |
| sprite | string | this mod's u.<id> sheet, else the base's art | 主体图像键:本模组的精灵图,或借用原版的键 | |
| turretSprite | string | this mod's tur.<id> sheet, else the base's (when its art is kept) | 旋转部件的图像键(若有) | |
| turretMounts | mount[] | one, where the body sheet's `mount` puts it (else the pivot); the base's, when its art is kept | 炮塔所在并由此开火的炮塔环,最多 8 个:有多门炮的车体每门各写一个(战列舰的 A、B、X 炮塔),每个都用同一个 `turretSprite` 绘制,并在各自射界之内瞄准同一个目标(见下) | |
| decals | decal[] | the base's, when its art is kept | 除车体与炮塔本身之外贴在其上的图像(见下),最多 12 个 | |
| ability | sprint | afterburner | smoke | incendiary | barrage | countermeasures | damageControl | emergencyRepair | 仅单位 | the base's | 唯一的主动技能,按 id 取原版技能(`sprint`、`smoke`、`countermeasures`…):点击、计时与解锁条件与原版单位相同 |
| aliases | string[] | 控制台 `give` 接受的别名 | ||
| aiWeight | number 0–10 | 仅单位 | 0 | AI 生产它的倾向:野牛是 3,侦察车 1;0 为从不 |
| rules | rule[] | 行为:在事件、条件、定时或按钮触发时让它变形、生成单位、回血、给钱、增益或爆炸的规则(见“行为”),最多 24 条;不会通过 `extends` 继承 | ||
| shield | { hp, regen, delay } | 能量护盾 `{ hp, regen, delay }`:先于船体承受伤害,未受伤 `delay` 秒后每秒恢复 `regen` | ||
| regen | number 0–10000 | 每秒自我修复的生命值 | ||
| untargetable | boolean | 敌方无法将其选为目标或下令攻击它;爆炸仍能伤到它(伪装、诱饵) | ||
| wing | { unit, count, rebuild, sortie, rearm, range } | 仅单位 | 母舰:搭载本模组的飞机 `{ unit, count, rebuild, sortie, rearm, range }`,出击它所攻击的目标,返航补给,损失后重新制造;玩家不能直接指挥(见“行为”);不会通过 `extends` 继承 |
没有 extends 时的默认值:单位是 domain: "ground"、tier: 1、pop: 1、speed: 60、turnRate: 3.5、vision: 8、radius: 9,装甲按移动域(地面 medium、舰船 ship、空中 air),陆地留履带痕(步行单位用 trail: "none",也就不会有行驶声)、海上留尾迹;建筑是 fw: 2, fh: 2、armor: "structure"、power: 0、pop: 0。buildTime 默认为造价 ÷ 14 秒。
最后编辑