引擎改造的取舍:能玩才有动力,审美服务于手感
日期:2026-08-07
1. 为什么坚持在浏览器里改
OpenYRWeb 是浏览器里的红警引擎。有人会问:为什么不把游戏重写成 Rust 原生窗口?答案很实际:
- 能玩才有动力:浏览器版本能跑、能注入、能进遭遇战,每一次改动都有即时反馈;重写意味着失去所有迭代动力;
- 能测才敢改:playwright 无头浏览器可以自动化进遭遇战、检查 canvas、扫描错误——这是「改引擎不怕改坏」的底气;
- 生态红利白嫖:@2x 高清资源、WebGL 渲染、OPFS 持久化、fetch 加载,都是浏览器白送的。
Rust 窗口、终端是更「属于自己」的形态,但这个项目是「跟随生态的妥协」——妥协换来的是可玩与可测。
2. 三条取舍原则
2.1 素材格式贴合个人审美
- 图块/建筑用 PNG(RGBA 直色),不用 SHP 调色板——图像工具链通用,还能出 @2x;
- 语音用 WAV(TTS 合成),不用 mix 内的原版 wav——想换中英双语随时重生成;
- 结果是素材目录干净、可复现、可版本管理。
2.2 配置贴合 Agent
- 规则、语音映射、MOD 元数据全部 JSON + JSON Schema;
- Schema 锁死枚举(事件名、阵营、分类),
additionalProperties:false挡住拼写错误; - 构建脚本把 design JSON 生成引擎能读的 flat INI——人读 JSON,引擎读 INI,Agent 改 JSON。
2.3 能玩是回归基准
引擎渲染链的任何改动,回归验证都是「进遭遇战能不能玩」:点选、框选、展开、攻击。崩溃链的终点往往是交互失效而不是红屏——「能玩」是最真实的冒烟测试。
3. 取舍的代价
- 引擎源码改动十几个文件,每次 repack 后浏览器必须硬刷新(Cmd+Shift+R);
- PNG 直色与 SHP 调色板两套渲染管线并存,维护面变大;
- 新增引擎文件必须手工注册
_module-map.json,否则 SystemJS 404; - 浏览器形态决定了调试工具链是 console/元素面板,而不是 Rust 的编译器和终端——这是妥协的一部分。
4. 结论
改造的取舍不是「技术最优」,而是「审美 + Agent 协作 + 能玩」三方平衡:素材用 PNG/WAV 讨好自己,配置用 JSON/Schema 讨好 Agent,回归用「能玩」讨好手感。这套原则让改造可持续——每一步都有正反馈,才有动力继续改下去。
本文采用木兰开放作品许可协议 署名-专利许可,第1版 (MulanOWL BY-PL v1) 授权,亦可选用 CC0-1.0(公共领域奉献)。版权归作者所有,转载须署名并保留本声明,企业合规请保留原始声明。 原始版本见:https://k4m7v2pz.github.io/zh/blog/games/openyrweb-modding-tradeoffs.html