跳到正文

单位与建筑

定义:单位、建筑或升级等级带有什么,各自在哪里生产,以及 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)
isHQboolean仅建筑总部:提供建造范围和生产槽位,遵循普通总部的失守与出售规则;格式 2
idid必填在所有模组和原版中唯一;通用名字前加上模组 id 前缀
nametext必填HUD 中显示的名称
desctext""提示中的描述
extendsid要复制的原版定义 id(或本模组中前面的定义),再逐字段覆盖;继承其图像和生产位置
kindunit | building必填单位或建筑(除非 `extends` 已说明,否则必填)
domainground | ship | air | amphibious仅单位ground移动域;潜艇是带 `underwater` 的 `ship`,`amphibious` 既能行驶也能泅渡(在水上算舰船目标,上岸算地面目标)
tierinteger 1–31出现的工厂等级与徽标
costnumber 0–99999必填金属造价
buildTimenumber 0–3600cost ÷ 14满电力下的建造秒数
popinteger 0–501 for a unit, 0 for a building占用人口
hpnumber 1–100000000必填生命值;standard 上限为 1000000,large 上限为 100000000
armorlight | medium | heavy | ship | sub | air | structureby domain武器倍率所针对的装甲类型
impactMaterialarmor | earth | concreteconcrete for structure armor, armor otherwise弹体命中音效材质,不改变伤害;普通与重型爆炸使用对应的录音组
directionalArmor{ front, side, rear }仅单位地面车体直击倍率 `{front, side, rear}`,各为 0–10;正面、背面各 90°,两侧各 90°。抛射、溅射、地雷与火焰不计朝向。向车后短距离移动时会慢速倒车
speednumber 0–1000仅单位60世界像素/秒(一格 32)
turnRatenumber 0–50仅单位3.5弧度/秒
visionnumber 0–648视野(格);启用内容时四舍五入为整格
radiusnumber 1–2009, or the footprint碰撞半径(世界像素),也是*战斗*基准:射程、溅射与命中都以它为准
body{ r, len }仅单位the circle of `radius`单位互相推挤时所占的形状(世界像素):`r` 为半宽,`len` 为去掉两端半圆后的长度。圆形无法表达细长的船体。船宽(`r` 的两倍)超过一格(32)的舰船需要相应格数的水面(向上取整),永远不会驶入比自身更窄的水道
weaponsweapon[][]武器列表(见下);空列表即无武装
fwinteger 1–8仅建筑2占地宽度(格)
fhinteger 1–8仅建筑2占地高度(格)
producedByid[]仅单位the line for its domain, from its tier up加入哪些建筑的生产列表(原版或本模组的),或由本模组的哪些单位生产(航母)
producesid[]工厂:可生产的单位。写在单位上,就是自己生产它们的航母或母舰:造好的单位在它当前的位置旁出现
builtByid[]仅建筑["engineer"]可建造它的工程单位
buildsid[]仅单位工程单位:可建造的建筑
buildRatenumber 0–10000仅单位工程单位:每秒建造量
reachnumber 0–256仅单位工程单位:超出目标半径多远即可施工(世界像素;默认工程车的 46,工程船为 64)
powernumber -10000–10000−pop for a unit, 0 for a building正为发电,负为耗电;单位默认耗电等于其人口
metalRatenumber 0–1000每秒金属:采矿场,或能赚钱的单位(补给舰)
needsDepositboolean仅建筑必须建在矿点上
offshoreboolean仅建筑立于开阔海面:占地全为海水,无需岸边;配合 needsDeposit 即为海上矿点,只有水上的建造者(工程船)够得到
wallboolean仅建筑墙:单格建筑,与相邻的同种建筑连成一体(精灵图为 16 帧,按相邻方向的掩码取帧:北 1、东 2、南 4、西 8),是火炮最后才会射击的目标,不受电磁脉冲影响,倒塌时没有爆炸
repairRangenumber 0–64维修光环范围(格);单位维修地面与海军单位,建筑还可维修飞机与建筑
repairAirRangenumber 0–64repairRange飞机维修范围(格);不改变维修来源可维修的目标类型
repairNavalRangenumber 0–64repairRange舰船、潜艇与泅渡中两栖单位的维修范围(格)
repairRatenumber 0–10000每目标每秒维修量
repairTargetsinteger 1–50同时维修的目标数
upgradeOfid仅建筑作为哪座建筑的下一等级;那座建筑获得升级按钮
upgradeCostnumber 0–99999仅建筑cost − the source's cost配合 `upgradeOf`:升级价格
upgradeTimenumber 0–3600仅建筑buildTime配合 `upgradeOf`:升级秒数
requiresid[]建造前必须存在的建筑 id,或必须研究完成的科技节点 id(`suicideDrones`、`activeProtection`…)
nukeCapacityinteger 0–10发射器:可储存的弹头数
nukeCostnumber 0–99999发射器:每枚弹头的金属
nukeTimenumber 0–3600发射器:每枚弹头的秒数
armsAtBasenumber 0–64仅单位发射器:只在距己方同类基地(舰船为造船厂,飞机为机场)此格数内制造弹头(`underwater` 的还须浮出水面),否则暂停(海妖与幽魂为 4)
rearmTimenumber 0.1–60015在同类基地把所有带 `ammo` 的武器从空装满所需秒数
hatchnumber 0–30发射器:发射前舱门打开所需秒数,发射后关闭亦然;不填则即刻发射
antiWarheadboolean其防空武器无需老兵等级即可攻击核弹头
interceptRangenumber 0–64拦截:范围(格)
interceptMaginteger 1–200拦截:备弹数
interceptReloadnumber 0.05–600拦截:每发补充秒数
interceptMuzzleOffsetnumber 0–200拦截:发射器长度(世界像素)
transportCapinteger 1–50仅单位运输载具:载重
transportMaxWeightnumber 0–50仅单位transportCap运输载具:单个乘员的最大载重
cargoReachnumber 0.5–4仅单位1运输载具:装卸距离相对默认值的倍率(登陆艇 1.1,海鳗 1.5);舰船的卸载落点范围也随之扩大
landsForCargoboolean仅单位装卸时降落的运输机
cargoWeightnumber 0–50仅单位pop占用的载重
underwaterboolean仅单位潜艇:仅声呐可见
sonarnumber 0–64仅单位声呐范围(格)
stealthnumber 0–64仅单位仅在敌方此距离内可见
detectnumber 0–64在此范围内揭示隐形
radarboolean靠无线电观测:视野不受天气与昼夜影响,电力不足时缩至 7 格
remoteVisionboolean仅单位远程图像传输:敌方干扰阻止其揭示干扰区内的视野
jamRangenumber 0–64仅建筑电子战半径(格):需充足电力,会暴露自身位置,阻断敌方雷达与远程视野,不影响目视与声呐
hoversboolean仅单位悬停而非盘旋的飞行器
kamikazeboolean仅单位自身即弹药:从不自行索敌,唯一的武器是被命令攻击时撞向目标(黄蜂)
lowFlyingboolean仅单位贴着树梢飞行的飞行器:对地的机枪与机炮也能打到它(直升机与黄蜂)
limitinteger 1–200仅单位每个阵营同时最多拥有的数量,在役与排队中合计(黄蜂为 10)
altitudenumber 0–64仅单位12飞行器的绘制高度(像素)
fireOnMoveboolean仅单位移动时持续开火
burnMultnumber 0–4仅单位1地面火焰对它的伤害倍率(火龙为 0.5)
trailtread | tire | wake | none仅单位by domain留下的痕迹,也决定行驶声:履带与轮胎行驶时可闻;步行单位或气垫船用 `none`,既不留痕也没有引擎声
shadowbooleantrue游戏为它投下的影子:单位是车体与炮塔的剪影,在地面上向东南偏一步,在空中则更远;建筑是其炮塔投在屋顶上的影子;图像自带阴影或不需要时设为 `false`(潜艇不投影)
spritestringthis mod's u.<id> sheet, else the base's art主体图像键:本模组的精灵图,或借用原版的键
turretSpritestringthis mod's tur.<id> sheet, else the base's (when its art is kept)旋转部件的图像键(若有)
turretMountsmount[]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` 绘制,并在各自射界之内瞄准同一个目标(见下)
decalsdecal[]the base's, when its art is kept除车体与炮塔本身之外贴在其上的图像(见下),最多 12 个
abilitysprint | afterburner | smoke | incendiary | barrage | countermeasures | damageControl | emergencyRepair仅单位the base's唯一的主动技能,按 id 取原版技能(`sprint`、`smoke`、`countermeasures`…):点击、计时与解锁条件与原版单位相同
aliasesstring[]控制台 `give` 接受的别名
aiWeightnumber 0–10仅单位0AI 生产它的倾向:野牛是 3,侦察车 1;0 为从不
rulesrule[]行为:在事件、条件、定时或按钮触发时让它变形、生成单位、回血、给钱、增益或爆炸的规则(见“行为”),最多 24 条;不会通过 `extends` 继承
shield{ hp, regen, delay }能量护盾 `{ hp, regen, delay }`:先于船体承受伤害,未受伤 `delay` 秒后每秒恢复 `regen`
regennumber 0–10000每秒自我修复的生命值
untargetableboolean敌方无法将其选为目标或下令攻击它;爆炸仍能伤到它(伪装、诱饵)
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 秒。

最后编辑