Trailer: https://youtu.be/h6T6zOdWeeA
Play: https://foslock.itch.io/the-waiting-room (Free macOS and Windows download, no account needed, 约60-90分钟完成)
What's the game
The Waiting Room 是一部以门为主题的第一人称谜题游戏,灵感来源于 The Stanley Parable、Portal 和 Blue Prince。你在等候室的沙发上醒来,显然那里是为了面试。每个门后都有一个正确的门和线索/谜题来寻找它。选择错误的门,你会回到等候室,整个大楼会重新排列。一位平静的工作人员通过摄像头观察你,随着房间变得更奇怪,很明显这场面试并不是为了找工作。游戏共有五个章节,超过50个独特房间。
它是如何制作的
我构思了概念并最初编写了谜题,策划了每个房间,并全部自行测试。我使用 macOS 桌面应用 Claude Code 进行编程,自己从未打开 Godot。我大约两周前开始做这个项目,总共大约用了几百条提示。我仍在进行一些为了乐趣而进行的微调,但我认为它基本完成了。
- 代码: Claude Code, Opus 5.5。约 113k 行代码:78k 行 GDScript(Godot 4.7),31k 行 Python 工具(Blender 模型构建器、纹理生成器、ElevenLabs 流水线、预告片)以及 2.7k 行着色器。没有手动制作的场景:每个房间都是从种子生成的代码中构建的。
- 3D 模型: 办公家具和厨房来自几个小型付费资源包和 CC0 模型。其余 400 多个道具是由 Claude 编写的纯 Python 生成的 Blender 模型,每个都有渲染和三角形报告,可在不打开 Blender 的情况下进行检查。
- 艺术和纹理: CC0 纹理来自 ambientCG 和 Poly Haven,绘画来自 Met、芝加哥艺术学院、克利夫兰艺术博物馆和 SMK 的公开收藏。
- 音频: 我几乎全部使用 ElevenLabs。共有 400 多条语音,两种声音,21 首音乐曲目和约 150 个音效。几个音效是用 Python 合成的。
- 预告片: 游戏本身渲染每个镜头,基于脚本化的相机移动和固定帧率,Python 脚本将它们剪辑到配乐的节拍,并混音至 YouTube 的响度目标。
运行时没有 AI。旁白不是在游戏内的 LLM,而是一段固定的已录制的文本,触发条件包括你拾取的物品、你返回的频率、你静止的时间长短,谜题是普通的种子代码。
它成功了
- 一个简短的 CLAUDE.md,配有精心撰写的规格说明。 Card Clash 的 巨型 CLAUDE.md 变得笨重,这次大约只有 15 行规则和提示。详细内容包含编写房间的指南和涵盖每个房间的设计文档,在触碰之前由会话阅读。Claude Code 的记忆中保存了其余信息:已诊断的引擎错误、我的偏好、需要避免的事项。
- 种子房间和不变性测试。 由于每个房间都是从种子重建的,每个谜题必须生成而非手动放置。烟雾测试会使用十几个种子重建所有房间,检查恰好有一个正确的门,解决方案存在,以及房间自己的规则有效(“谜题的答案仅在一扇门上”)。76 个无头测试场景并行运行,约 4 分钟。
- 给代理眼睛。 Claude 可以启动游戏,从任意位置拍摄屏幕截图并查看。调查脚本会拍摄每个房间的 13 张照片(到达、每面墙、每个角落),后续可以重放相同的相机进行前后对比。我通过这种方式在夜间运行视觉检查,并在早上回顾。
- 真实输入的 QA 代理。 CI 测试会传送玩家并直接调用房间代码,因此它们会漏掉玩家会碰到的情况。我让三个子代理在无头模式下通过模拟键盘和鼠标移动进行游戏,发现了一个硬锁(通过关闭的门向后跑掉出世界),以及可以卡住自己的位置和死胡同。这些在 CI 中未出现。
- 生成的音频需要工程化才能使用。 与 Card Clash 同理,电台歌曲通过类似游戏内收音机的带通滤波进行语音转文字检查,确保歌词包含所需内容。语音转文字的时间戳用于延长旁白句子之间的停顿。TTS 也有只能通过聆听发现的怪癖,例如 "IT" 大写会被拼读为 I-T。
它很困难
- 引擎错误看起来像是你的错误。 墙上的深色方块闪烁看起来像是光照或阴影问题,需要长时间二分查找才能追溯到 Godot 4.7 在 Metal 上的一个仅在 4.8(仍为 beta)中修复的错误。打开 Godot 的着色器烘焙会导致 Mac 导出崩溃。代理擅长缩小这些问题范围,但它需要被推动去检查引擎是否出错,而不是继续调整场景。
- 首次启动。 导出的首次启动会编译所有着色器管线,在冷启动的 Mac 上超过三分钟。在加载画面后进行预加载并懒加载 Metal 着色器,将时间缩短到约 80 秒。我的机器的缓存完全隐藏了这一点,因此测试需要一份拥有自己 Bundle ID 和独立设置文件夹的应用副本。
- 为 55 个房间供光照。 Godot 的实时全局光照提供了漂亮的反射光,但未被任何灯光照亮的物体面会呈现纯黑,光泽的木纹会出现灰色椭圆(灯泡的倒影),而通过关闭门的下一房间漏出的光也会影响。使后期房间的视觉效果与前几个相当需要多次调试。Opus 5.5 在视觉效果上远优于前代模型,但仍需截图来评估其自身工作。
我希望得到的反馈
- 你卡在了哪里,提示(她在你静止一段时间后提供一个)帮助了你,还是提供了过多信息?
- 特别是 Windows 玩家:我没有 Windows 机器,所以它能否正常启动并运行良好?
- 旁白对你有效吗,还是她说话太多?她的声音/语调有多明显是“AI 生成”的?
- 如果你在 3D 视觉 QA 中使用代理,你是如何设置的?以及你如何为游戏生成 3D 模型?
评论 (0)