行为
让定义变形、生成单位、回血、给钱或爆炸的规则;卡片上的按钮;护盾;以及航母的舰载机群。
定义可以带 rules:发生在它身上的事——变成本模组的另一个定义、生成单位、回血、给钱、获得增益、爆炸——在某事发生时(on)、某条件成立时(when)、定时(every),或玩家按下卡片上的按钮时(button)。这些词是一套封闭的词汇,模组载入时逐一校验,所以规则只能做游戏本来就能安全做到的事:没有脚本,生成单位永远不会超出一方的人口上限,游戏自带的单位也没有任何规则。
变形
静止时是一棵树、移动或开火时又变回坦克的幻影坦克——两个定义,互相变换。精灵图的 anims 让它移动时显示坦克的帧、静止时显示树的帧;伪装形态为 untargetable,敌方无法选中它:
{ "id": "mymod-mirage", "extends": "mbt", "name": "Mirage Tank",
"rules": [{ "when": { "still": 1, "quiet": 0.8 }, "do": { "morph": "mymod-mirage-tree" } }] },
{ "id": "mymod-mirage-tree", "extends": "mymod-mirage", "name": "Mirage Tank", "producedBy": [],
"untargetable": true,
"rules": [{ "when": { "moving": true }, "do": { "morph": "mymod-mirage" } },
{ "on": "fired", "do": { "morph": "mymod-mirage" } }] }
在卡片上自己升级的英雄:每个按钮都是一个显示目标形态的图块,像生产一样边做边付钱,并等待它所 requires 的建筑:
{ "id": "mymod-hero", "extends": "mbt", "name": "Hero Tank",
"rules": [
{ "button": { "cost": 600, "time": 20, "ai": true }, "do": { "morph": "mymod-hero-gunner" } },
{ "button": { "cost": 900, "time": 30, "requires": ["radar"] }, "do": { "morph": "mymod-hero-sniper" } }
] }
变形(morph)保留的是同一个单位:选中与编队、击杀与等级、生命值的比例,以及新形态能执行的命令。
生成单位
死者为击杀者一方复活是 { "on": "destroyed", "do": { "spawn": { "unit": "mymod-zombie", "side": "killer" } } };会繁殖的巢穴是带 spawn 的 every;自带乘员的车辆是 { "on": "created", "do": { "spawn": { "unit": "…", "count": 4, "into": "hold" } } }。
护盾
定义可以有先于船体承受伤害的能量护盾 shield,以及自我修复的 regen。
舰载机群
单位可以带有舰载机群 wing:搭载本模组的飞机,向它攻击的目标出击,返航补给,损失后重新制造——轻航母的无人机、驱逐舰的那架反潜机。这些飞机作为己方单位作战,但玩家不能选中或指挥它们。
参考
规则(defs[].rules[])
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| on | created | destroyed | fired | damaged | kill | morphed | 在发生这些事时执行:被造出(`created`,地图上预置的也算)、被摧毁(`destroyed`,在倒下的地方)、开火(`fired`)、受伤(`damaged`)、击杀(`kill`)、变形完成(`morphed`) | ||
| when | condition | 当此条件变为成立时执行;须先变回不成立才会再次触发(见“条件”) | ||
| every | number 0.25–3600 | 在存活期间每隔若干秒执行一次 | ||
| button | button | 卡片上由玩家按下的按钮(见“按钮”) | ||
| if | condition | 触发时同时检查:仅当它也成立时才执行;用于按钮时,不成立则按钮置灰 | ||
| chance | number 0–1 | 1 | 触发时执行的概率 | |
| cooldown | number 0–3600 | 再次执行前的冷却秒数 | ||
| max | integer 1–1000 | 同一单位上最多执行的次数 | ||
| do | effect | effect[] | 必填 | 执行的效果:一个效果或最多 8 个效果的列表,依次执行(见“效果”) |
每条规则只有一个触发方式。when 在条件变为成立的那一刻执行,须先变回不成立才会再次触发;被 if 或 cooldown 拦下的,会在条件仍成立时再试。every 从单位被造出或上次变形起计时。do 依次执行,遇到变形即停止。
条件(when、if)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| moving | boolean | 正在移动(true)或静止(false) | ||
| still | number 0–3600 | 已静止至少这么多秒 | ||
| firedWithin | number 0–3600 | 最近这么多秒内开过火 | ||
| quiet | number 0–3600 | 已至少这么多秒没有开火 | ||
| hurtWithin | number 0–3600 | 最近这么多秒内受过伤 | ||
| hpBelow | number 0–1 | 生命低于总量的此比例 | ||
| hpAbove | number 0–1 | 生命高于总量的此比例 | ||
| age | number 0–36000 | 自被造出或上次变形以来的秒数 | ||
| flag | string | 规则设置的某个标记为开 | ||
| noFlag | string | 该标记为关 | ||
| kills | integer 0–10000 | 击杀数至少为此 | ||
| rank | integer 1–3 | 老兵等级至少为此 | ||
| onWater | boolean | 位于水面(true)或陆地(false) | ||
| enemyWithin | number 0.5–32 | 己方可见的敌人在此格数之内 | ||
| near | { units, kind, side, within, count } | 附近有其他单位:`within` 格之内至少有 `count` 个属于 `side` 一方的 `units` 或 `kind`(见“附近”) | ||
| night | boolean | 是夜晚(true)或白天(false) | ||
| carrying | integer 1–50 | 载有至少这么多单位 | ||
| killedBy | id[] | 用于 `destroyed`:击杀它的是这些定义之一(只有被丧尸杀死的才会尸变) | ||
| any | condition | 条件列表,其中任一成立即可 | ||
| not | condition | 必须不成立的条件 |
附近(when.near)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| units | id[] | 仅限这些定义:原版或任何模组的 | ||
| kind | unit | building | 仅限单位,或仅限建筑 | ||
| side | friend | enemy | any | any | 归属:己方及盟友(`friend`)、敌方(仅限己方可见的),或任何一方 | |
| within | number 0.5–32 | 必填 | 从它到对方边缘的格数 | |
| count | integer 1–50 | 1 | 至少这么多个 |
单位附近有什么,量到对方的边缘:只有附近有东西可钩时才起飞的飞行兵({ "kind": "building", "within": 8 })、在指挥官身边更勇猛的部队({ "units": ["mymod-captain"], "side": "friend", "within": 10 })、主人走近时苏醒的城墙。敌方单位只有在己方可见时才计入。
效果(do)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| morph | id | 原地变为本模组的另一个定义:仍是同一个单位(选中状态、击杀与等级、新形态能执行的命令都保留),生命值按比例保留。建筑只能变为占地相同的建筑 | ||
| spawn | { unit, count, side, into, max } | 在其旁边或其载舱内生成单位(见“生成”) | ||
| heal | number -1000000–1000000 | 回复的生命值;负数为扣除,但不会致死 | ||
| healPct | number -1–1 | 按总生命比例回复 | ||
| metal | number -99999–99999 | 给予己方的金属;负数为扣除,最低为零 | ||
| flag | string | 设置一个标记,供条件读取 | ||
| unflag | string | 清除该标记 | ||
| buff | { speed, damage, reload, taken, for } | 持续 `for` 秒的倍率:`speed` 速度、`damage` 造成伤害、`reload` 装填时间、`taken` 承受伤害;新的增益会替换旧的 | ||
| explode | { dmg, radius, cls, friendlyFire } | 以自身为中心爆炸:中心伤害 `dmg`,在 `radius`(世界像素)边缘降为一半,按 `cls`(默认 he)的装甲倍率计算;除非 `friendlyFire`,否则不伤己方 | ||
| fx | string | 在其位置播放的特效:本模组的 `fx.<名字>` 精灵图,或 fx.expl.s、fx.expl.m、fx.expl.l、fx.spark、fx.flak、fx.smoke、fx.splash、fx.splash.l、fx.muzzle、fx.repair、fx.emp、fx.nuke | ||
| fxScale | number 0.05–8 | 1 | 特效的缩放倍数 | |
| sound | string | 在其位置播放的声音:武器音效、expl、explBig、upgrade,或本模组的 `sounds` | ||
| die | boolean | 被摧毁,如同无人击杀(其 `destroyed` 规则会执行) | ||
| remove | boolean | 无痕消失:没有残骸、不计损失、不触发 `destroyed` |
生成(do.spawn)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| unit | id | 必填 | 生成的单位:原版或本模组的 | |
| count | integer 1–16 | 1 | 数量 | |
| side | own | killer | own | 归属:己方,或(在 `destroyed` 中)击杀者一方 | |
| into | hold | 直接放进自身载舱(以剩余空间为限),而不是放在旁边 | ||
| max | integer 1–64 | 此规则生成的单位同时存活的上限 |
按钮(rule.button)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| name | text | the form it makes | 按钮名称 | |
| desc | text | 提示中的描述 | ||
| cost | number 0–99999 | 0 | 金属,随工作进度支付 | |
| time | number 0–3600 | 0 | 满电力下的工作秒数;0 为立即 | |
| requires | id[] | 按下(及持续进行)所需存在的建筑或已研究的科技 | ||
| ai | boolean | 电脑一方在有余钱时也会按下它 |
护盾(shield)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| hp | number 1–1000000 | 必填 | 在船体受损前可吸收的伤害 | |
| regen | number 0–100000 | 0 | 每秒恢复量 | |
| delay | number 0–600 | 3 | 未受伤多少秒后开始恢复 |
舰载机群(wing)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| unit | id | 必填 | 舰载机:本模组的飞行器,须为 `"pop": 0`、`"producedBy": []`,只由母舰制造 | |
| count | integer 1–16 | 1 | 搭载的飞机数 | |
| rebuild | number 0.5–600 | 10 | 损失后多少秒免费补充一架,逐架补充 | |
| sortie | number 1–600 | 15 | 飞机出击多少秒后返航 | |
| rearm | number 0–120 | 3 | 返航后多少秒才能再次出击,期间会被修复 | |
| range | number 1–32 | 10 | 飞机在离母舰多少格内出击 |
最后编辑