图像
车体、炮塔、建筑与贴花的精灵图:怎么画,阵营色如何生效,以及什么时候播放哪些帧。
定义用 sprite(主体)和 turretSprite(旋转部件)里的图集键来绘制。三种填法:
- **什么都不给。**没有精灵图的定义会画成阵营色的简单占位图,大小按定义,所以图还没画好,模组就能玩。
- 借用。
"sprite": "u.mbt", "turretSprite": "tur.mbt"用野牛的图像;extends继承基础单位的图像。 - **自己画。**每张精灵图一个
sprites条目:一张 PNG(WebP 和 JPEG 也行),frames帧动画从左到右横向排列,等距、无缝隙。主体的键是u.<id>,炮塔的键是tur.<id>,模组不能占用原版的键。
单位与炮塔
车体、炮塔以及一切会转向的东西都是一张朝上的图加 "rotated": true;游戏会烘焙 24 个朝向。fw/fh 是这张图在游戏内的世界像素尺寸(坦克车体约 24×24;按 2–4 倍画,加载器会重采样)。pivotX/pivotY 把旋转枢轴放到炮塔座圈上。
建筑
建筑是不旋转的帧序列,以略带南向倾斜的俯视角绘制:占地是帧底部 fw×32 × fh×32 像素的区域,上面多出的部分会遮住后方地形。宽、高和锚点会按定义的占地自动确定。
阵营色
阵营色是品红:用 #FF66FF、#FF00FF 和 #990099 涂阵营色部件,其他地方不要用品红;游戏会按玩家重新着色。生成的图片在加载时会被清理(去背景、对齐帧、冻结静态像素),所以透明背景最好,但不是必须。
带旋转炮的建筑
带炮塔的建筑和坦克一样是两张图:主体带一个空的安装环,其 sprites 条目用 "mount": [fx, fy] 说明环在帧中的位置(比例),再加一张朝上的 tur.<id> 炮图。它的武器带 "turret": true,炮在引擎里自动追踪目标。仓库里的 Ironworks 碉堡就是这样一座。
多座炮塔
有多门炮的车体——前后都有炮塔的战列舰、四角各有一座炮塔的坦克——在 turretMounts 里为每门炮写一个炮塔环。定义唯一的 turretSprite 会画在每个环上,每个环都对准单位正在瞄准的同一个目标,但只转到自己以 rest 为中心的 arc 射界为止,所以被上层建筑挡住的炮停在射界尽头,由其他炮开火。一次齐射轮流从能指向目标的环上各打一发,muzzleOffset 从发射该发的环算起,所以由几门炮组成的武器应把 burst 设为炮的门数。x/y 与贴花一样,是主体朝上图像上的一点。画在车体上的炮不会转动。
贴花
贴花是定义在 decals 里列出、贴在车体与炮塔之外的图像——舱盖、乘员、描边、车灯——固定在车体或炮塔上(on)并随之转动。静态细节应画进车体自己的图里;贴花留给车体装不下的东西:随炮塔转动的部件、炮管扫过其上的舱盖、天黑才亮的灯、开火时旋转的枪管。
它的精灵图像炮塔那样,键为 dec.<名字>:一张朝上的图(会动的东西则是 frames 帧、fps 速度的序列),由 fw/fh 定尺寸,绕中心绘制;也可以借用车体或炮塔的键。x/y 是该部件朝上图像上的一点:枢轴右侧与下方(车尾方向)的像素,按精灵图 fw×fh 尺寸计,游戏随单位一并缩放。
night 贴花是一盏灯:亮于夜色之上而不被夜色压暗,车灯或亮着的窗户就真的像光;带有它的单位不再由游戏另画车灯。光束要画得柔和,宽而淡地衰减,不要画成硬边三角,否则看起来像玻璃。
动画
主体精灵图的 anims 指定移动、静止或刚开火时播放哪些帧。会变形的单位可以借此在静止时变成完全不同的样子。
参考
精灵图(sprites[])
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| key | string | 必填 | 主体用 `u.<id>`,旋转部件用 `tur.<id>`,贴花用 `dec.<名字>`,弹药用 `prj.<名字>`,武器外观或规则播放的特效用 `fx.<名字>`;地形材质用 `ter.<模组 id>-<名字>`;不可与原版键重名 | |
| file | string | 必填 | 图片路径,相对 mod.json(PNG、WebP 或 JPEG) | |
| frames | integer 1–64 | 1 | 动画帧数,横向排列 | |
| fw | number 4–512 | the footprint (a building) or the image | 游戏内帧宽(世界像素,整数) | |
| fh | number 4–512 | 游戏内帧高(世界像素,整数) | ||
| rotated | boolean | 一张朝上的图;游戏烘焙 24 个朝向(车体、炮塔) | ||
| pivotX | number 0–1 | 0.5 | 旋转枢轴(帧宽比例) | |
| pivotY | number 0–1 | 0.5 | 旋转枢轴(帧高比例) | |
| anchorY | number 0–512 | 顶部到占地中心的像素(高建筑) | ||
| mount | [x, y] | 主体:炮塔安装位置(带维修光环时则是光束的起点),写作 `[fx, fy]` | ||
| barrels | [left, top, right, bottom][] | 外露炮管矩形,每项为朝上原始帧中 0–1 比例的 `[左, 上, 右, 下]`,按炮口开火顺序排列;不含固定炮盾。搭配武器的 `recoil`(美术像素) | ||
| fps | number 0–60 | 动画速度 | ||
| teams | boolean | true | 按阵营重着色品红部分;`false` 则各阵营(以及残骸)都按原图绘制 | |
| ss | integer 1–4 | 超采样倍率;留空由游戏决定 | ||
| fitFootprint | boolean | 缩放内容以填满帧 | ||
| animRegion | [x0, y0, x1, y1] | 动画所在区域 `[x0, y0, x1, y1]`(比例);其余部分冻结 | ||
| stabilize | boolean | true | 对齐漂移的帧 | |
| freezeStatic | boolean | 冻结几乎不变的像素 | ||
| stripBg | boolean | 强制开启/关闭背景去除 | ||
| bgMinLuma | number 0–255 | 仍视为背景的最亮颜色 | ||
| artifactCleanup | boolean | 清理背景去除后的杂点 | ||
| anims | { moving, idle, firing } | 单位主体按状态播放的帧 `{ moving, idle, firing }`,每项为 `[起, 止]` 或 `[起, 止, fps]`:静止时变成树的坦克、只在移动时迈腿的步行机(见“动画状态”) |
动画状态(sprites[].anims)
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| moving | [first, last] or [first, last, fps] | 移动时播放的帧 `[起, 止]`,或 `[起, 止, fps]` | ||
| idle | [first, last] or [first, last, fps] | frame 0 | 静止时播放的帧 | |
| firing | [first, last] or [first, last, fps] | 上次开火后一次装填时间内播放的帧;优先于移动与静止 |
贴花(defs[].decals[])
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| sprite | string | 必填 | 所绘精灵图:本模组的 `dec.<名字>` 精灵图,或任一车体/炮塔键 | |
| on | hull | turret | hull | 固定在何处并随之转动;`turret` 要求该定义有 `turretSprite` | |
| layer | under | hull | over | hull, or over when on a turret | 在图层中的位置:车体之下、车体之上炮塔之下、或最上层 | |
| x | number -256–256 | 0 | 在部件朝上图像上的位置:枢轴右侧的像素,按精灵图 `fw`×`fh` 尺寸计(游戏随单位一并缩放) | |
| y | number -256–256 | 0 | 枢轴下方(车尾方向)的像素 | |
| angle | number -360–360 | 0 | 相对所固定部件再顺时针转动的角度 | |
| upright | boolean | 永不旋转:始终朝屏幕上方 | ||
| scale | number 0.05–8 | 1 | 按精灵图尺寸的此倍数绘制 | |
| alpha | number 0–1 | 1 | 不透明度 | |
| when | always | moving | still | firing | damaged | night | ability | always | 仅在移动/静止(`moving`/`still`)、上次开火后一次装填时间内(`firing`)、生命低于一半(`damaged`)、技能生效或待发时(`ability`)或天黑后(`night`:像灯一样亮于夜色之上,且游戏不再为该单位画自己的车灯)时显示 |
炮塔环(defs[].turretMounts[])
| 字段 | 类型 | 必填 | 默认 | 含义 |
|---|---|---|---|---|
| x | number -256–256 | 0 | 炮塔环在主体朝上图像上的位置:枢轴右侧的像素,按主体精灵图 `fw`×`fh` 尺寸计(游戏随单位一并缩放) | |
| y | number -256–256 | 0 | 枢轴下方(车尾方向)的像素 | |
| rest | number -360–360 | 0 | 转动所围绕的朝向,自车头顺时针计的角度:0 向前、90 向右、180 向后 | |
| arc | number 0–180 | 180 | 在 `rest` 两侧各能转动的角度;180 即全向。无法指向目标的炮塔停在射界尽头,由能指向目标的炮塔开火 |
最后编辑