头盔一换,sprite 就变
那些矩形变成了角色。法师有紫色长袍和法杖,战士有板甲、头盔和长剑,按一个键就能把钢盔换成金色的,不用重新加载任何东西。这是可见装备的第一次测试,用的是从 Liberated Pixel Cup 借来的美术。
为什么做
MushRog 最大的美术风险,是装备要一件一件地显示在角色身上。在美术师画下第一件装备之前,游戏得先证明自己能拼出一个分层角色,实时换掉其中一层,并让所有层一起动画。LPC 正好是这种格式,所以我们用它来测试管线,而不是长期使用。
怎么实现的
每个角色是一份配方:一个图层列表(阴影、身体、裤子、靴子、躯干、头发、头盔、武器),带有深度顺序。换装备就是换一个图层的图片。所有图层使用同一套帧网格,所以一个动画会让身体、衣服和武器同步移动。走路、挥砍、施法、刺击和受伤都已经能用了。
网格(帧尺寸、每个动画的行数、帧数)放在一个数据文件里,代码从不假设是 64 像素。等美术师定下她的标准,我们就换掉这个文件和 sprite 目录。
一个脚本只会从 LPC 生成器里复制用到的图层,检查图集的尺寸,并根据 LPC 自己的作者表格重新生成署名。借来的 sprite 不进入仓库:克隆项目的人运行这个脚本,就能得到一样的原型,纳入版本管理的只有配方。
boss 变成了 LPC 里一个肌肉发达的身体,放大两倍,染成橙色。很丑,但够用,因为重点是同一套系统对敌人也适用。
更换来源
我们改用生成器的官方仓库,由 Liberated Pixel Cup 组织维护。它的格式变了:每个动画一张图,颜色按调色板来,而不是每种颜色一个文件。导出脚本现在会把每个图层合成为一张符合游戏布局的图集,颜色变体交给 shader。战士暂时失去了长剑,因为大型武器的帧大于 64 像素,游戏还不能读取。在支持之前,他先用匕首战斗。
不加 sprite 就能换色
同一个下午,shader 重新着色也加入了:一个图层可以在显卡上偏移色相、饱和度和亮度。sprite 里的每一种颜色恰好变成另一种颜色,所以像素画的颜色数量不变,也不会变糊。H 键会转动发色,boss 也通过同样的路径得到了火焰红。美术师把头发画一次,游戏就能给出所有颜色。
第 0 阶段结束
切换、反应、闪避、分层装备和重新着色都能用了,内部试玩的反馈是 “喜欢,我总是输,想学”,第 0 阶段兑现了它的承诺。下一步:让四个人进到同一个房间。
变更
- feat(client): layered paper-doll characters from LPC sprites
PaperDoll node builds a character from a layer recipe (data/dolls.json) over a shared frame grid (data/sprite_spec.json) and animates walk, slash, thrust, spellcast and hurt across all layers. tools/lpc_export.py copies only the used sheets from a local LPC generator clone into the gitignored assets/lpc/ and regenerates CREDITS.md. E key swaps the warrior helmet as the live equipment test.
- art: compose sprites from the official LiberatedPixelCup generator
The upstream generator now ships one image per animation and recolors by palette. tools/lpc_export.py composes each layer into the game's single-sheet layout from data/sprite_spec.json; recipes point at layer folders; helmet variants come from the HSV shader. Warrior carries a dagger until oversize weapon frames are supported.