整个项目立项书只有一句话:"换成悬疑访谈吧。"从这一句出发,agent 交付了一部悬疑微恐审讯视觉小说——三位证人各有三种表情且脸部完全一致、每个角色一把独立的合成嗓音、氛围配乐、分支对话,以及浏览器可玩的版本。五种 Floniks 能力——文生图、图生图、去背景、TTS、文生音乐——在一条流水线里运转,由 agent 端到端统筹。人类写了零条提示词。
这是上下两篇中的下篇。上篇《从一张截图,做出一款解谜游戏》讲这套方法的地基。

一句话进,一份游戏设计出
"换成悬疑访谈吧"展开成了下面这些,没有一条是被明确要求的:
| 人类说的 | agent 分解出的 |
|---|---|
| "悬疑访谈" | 剧情设定:名画《凝视者》深夜在画廊失窃;审讯三位证人,读表情,指认真凶 |
| (没说) | 三个有职业、性格与隐情的角色:网球教练、会计、美术史讲师 |
| (没说) | 素材规格:3 角色 × 3 表情、干净/惊悚两版场景、3 条开场语音、1 首氛围循环乐 |
| (没说) | 带打字机字幕与表情切换的分支对话引擎 |
| (没说) | 绕开 Lua 保留字地雷(分支字段名 goto),自行改名 |
立绘管线:同一张脸,四个阶段
视觉小说最难的问题是角色一致性——同一张脸要承载平静、紧张、惊惧三种状态,还得是透明底。这条管线全程 Floniks,经 MCP 调用:

一张文生图底图锁定脸、服装与气质。图生图从底图派生紧张与惊惧变体——同一张脸,只动表情。去背景产出最终透明立绘。惊悚场景同理:干净的画廊底图,图生图改出一幅"墙上的画在看你"的变体。
语音:一人一音色,用仪器验证
人类的要求就一行:每个角色一把固定的、符合性别的独立嗓音。第一次"修好"听起来挺像回事——直到一句追问触发了声学分析:三把嗓音的基频实测 128、122、131 Hz。实质上是同一把。根本没修好。
根因是一个写错的参数字段;平台期望的是另一种形态的 voiceId。修正后再测:291、202、158 Hz——三把真正不同的嗓音,并且逐角色固定进游戏数据,每次重新生成都保持一致。
这条教训适用于任何 AI 工作流:"修好了"需要仪器读数,不是听感。
一张截图报障,三个根因
上线后人类发来一张截图:"声音有了,但没人抠图——三个人都还带着背景。"agent 的处理链:九张立绘全部过 Floniks 去背景;顺手修掉网页版无声(浏览器会挂起 AudioContext 直到首次交互);修好的图仍不显示时,定位第三个元凶——浏览器缓存,改贴图名破掉。
一句现象描述,一次引擎重构
开发后期,人类报告的是现象而非方案:"音轨管理很混乱——轨道互相叠加;系统性地解决。"agent 把引擎音频重建为三条声道:音效可叠加但帧内去重;同名音乐重复请求不重启;语音声道播新台词前先停旧的,对话永不互相压声。补丁修一个 bug,模型修一类 bug。合集里的每个游戏都继承了它。

五种能力,一条流水线
每种 Floniks 能力都落在一个早已等在那里的引擎契约上:
| 能力 | Floniks 侧(经 MCP 的工具) | 引擎侧(数据即契约) |
|---|---|---|
| 立绘 | 文生图底图 + 图生图表情 | 贴图按文件名加载;一次调用切换表情 |
| 抠图 | 去背景 | 透明 PNG 直接合成,引擎零改动 |
| 语音 | TTS,逐角色固定音色 | 专用语音声道:新台词停旧台词,永不重叠 |
| 氛围 | 文生音乐 | 永不重复播放的音乐声道 |
| 剧情 | ——(agent 直接写分支树;LLM 即编辑器) | 热重载 Lua;分支数据是纯文本,可 diff |
与上篇同一个结论,在这里更锋利:不是 agent 快,是路上没有关卡。 剧本、立绘、抠图、配音、配乐、测试、部署:一个会话,零人工搬运。
完全跨平台:同一份脚本,原生与浏览器
这是合集中要求最苛刻的游戏——立绘、语音、音乐、分支剧情——而这一切在原生 macOS、原生 iOS 120Hz 与浏览器 WebAssembly 上,由同一份逐字节相同的 Lua 脚本驱动。浏览器音频解锁这类平台怪癖被引擎层吸收;脚本毫无感知。本文两张截图都是 headless 浏览器中 WASM 版的实机捕捉。
问答
表情之间的角色一致性是如何做到的?
每个角色一张文生图底图锁定身份;紧张与惊惧变体用图生图从底图派生,只有表情在变。之后去背景产出透明立绘。
如何保证每个角色的嗓音不变?
voice ID 固定在角色数据里,每次 TTS 生成复用同一音色——而且修复是靠测量基频(291 / 202 / 158 Hz)验证的,不是靠耳朵。
第一句话之后,人类还贡献了什么?
只有一行话的要求和报障截图。调研、分解、生成、debug 与音频引擎重构都是 agent 的工作。
浏览器版真的在跑同一个游戏吗?
是——同一份 Lua 脚本逐字节驱动原生与 WASM 构建;引擎在相同 API 之后按平台切换 Lua VM。
用 Floniks MCP 服务接好你自己的流水线——如果还没看这套方法的起点,请读上篇。

