【干货长文】《循环破译者》开发背后的故事
精华修改于11/25394 浏览技术交流
大家好,这里是响尾猫工作室。
经过紧张刺激的开发,我们终于为大家呈上了《循环破译者》的早期DEMO(或者叫Gamejam特供版)。
正好大家状态有所恢复,给大家分享一下我们的开发经验。☺️
开始阅读前,可以帮忙点个赞吗![[TapFamily庆生-万物皆可联动_期待]](https://img.tapimg.com/market/images/f92dfd0dd5bfa530416d9801af2cb6c4.gif)
![[TapFamily庆生-万物皆可联动_期待]](https://img.tapimg.com/market/images/f92dfd0dd5bfa530416d9801af2cb6c4.gif)


协作与工作流
It just works
说到DEMO,我这里想说一句废话
游戏游戏开发最重要的是开发出游戏
一个存在缺陷但可玩的DEMO,远比一份停留在纸面上的完美策划案更有意义。
无论如何先让整个项目跑起来,然后才能发现问题并考虑优化/重构/重写
管理学还在发力
项目管理和团队分工是重中之重。因为我们半路才开开工,时间非常的紧张,所以项目管理和清晰的团队分工成为了首要任务。
这就是我们三个的羁绊啊
我想这就是🔱三叉戟吧!
策划:游戏玩法策划、背景故事撰写,编写核心战斗逻辑,包括单位技能、回合流程、关卡搭建等
程序:负责底层架构、UI实现、shader和动画等视觉效果、各种弹出面板的交互等
美术:负责游戏整体的视觉风格、UI设计、角色和场景资源
这种模式最大的优势在于并行效率,没有人需要停下来等另一个人。
美术可以独立输出视觉资源,程序可以同步搭建功能框架,核心玩法也能独立迭代。
确定好分工后只需要下派任务,然后尽可能把任务拆到原子化,后面只需要一个个打勾就可以了。
整个团队的工作互不阻塞,保证了开发引擎能全速运转(至少大脑没挂起)。
活着才能做出游戏
这么短的时间内开发出一款完整的游戏必然需要爆肝。但肝是战略资源,不是消耗品。
为了防止在显示器前变成化石,我们使用了番茄钟工作法。每专注敲码35分钟,就必须离开椅子,动动脖子喝口水,放空大脑歇一会。
之所以是35分钟而不是25分钟,是因为我们发现代码工作25分钟有点完不成任务,35分钟能给自己留出足够的时间完成正好一个事项。
35分钟番茄钟
休息真的不会浪费时间,反而会让你每一次工作都是头脑清醒的,避免出现找一晚上bug结果发现是少个锁进的情况。
虽然人和代码总得有一个能跑,但是人死了代码就跑不了了。
人类才能做出游戏
人和动物最大的区别在于使用工具
我知道你已经准备好反驳了,但这里只是想介绍一下几款工具:
- Affine:支持文档、白板两种展现形式,多人协作免费,有notion绝大部分功能,本地在线均可用。是一个非常好的All in One工作空间
- Miro:无限白板,Figma平替,服务器稳定,白板功能比Affine丰富,非常好的头脑风暴工具,图比文字多时好用,对美术比较友好
- WPS:市场证明一切,传统办公套件确实好用。确定好整体框架和内容,做一些数值改动和简单的文案改动的时候,创建一个共享表格就是效率最高的做法,最主要的是方便策划边写文字边算数值,拉个表算算你的dps🐰
开发中使用Affine
开发中使用miro


策划
我们也许有策划案
做出策划案的前提是做出小策划案,做出小策划案的前提是做出小小策划案,做出小小策划案的前提是...
我们真正的策划流程是这样的:先把游戏大致的背景设定想出来,甚至可以不是人话,就是一堆关键词、半句话、或者用语音转文字输出的碎片信息。然后,把这些玩意儿一股脑地全都塞进Affine里。
不要觉得丑陋,这叫工作留档。
然后在背景确定了情况下,可以设计核心玩法,一条条零散的列出来是没问题的,反倒还好改。
当程序问策划要策划案的时候,策划会直接口述,忘了的去Affine里找,然后再口述出来。
说真的,在GameJam里搞一份几十上百页的策划案,属于是行为艺术。
Bug驱动设计
这次比赛主题和Bug相关,那咱就从平时能遇到的Bug里找元素。我们把这些程序员的日常尽量揉进世界观里,时不时再往里加点梗、加点料。
比如我们的单位设计:
这个屎山代码看一次笑一次
“差不多得了”平衡法
然后聊聊数值平衡。我们的平衡方式,突出一个凭感觉。毕竟,在这么短的时间里,根本没机会拉个复杂的Excel表去算什么DPS。我们的流程通常是这样的:
- 给怪物填一个感觉上差不多的血量和攻击力。
- 进去打一遍。
- 打不过?加我方单位血量、攻击力,砍敌人血量、攻击力,再不行砍敌人数量。
- 太轻松?把上面的流程反过来,反正关卡又不多。
- 感觉“差不多得了”,就下一个。
面多加水,水多加面
不过我感觉我的数值直觉还是可以的
终于来到了AI的强项
把前面那些背景故事的碎片扔给AI,让它补全缺失的部分,然后我们进行人工筛选。AI和策划想的不一样的就补充设定,继续扔给AI碎片。直到故事没问题了,让AI整理好内容,一篇完整的故事就诞生了。
游戏机制就不要让AI做了,传统手艺不能丢。咱们之前不是说一条条零散地列出核心玩法嘛,这时候就可以让AI来整理格式,重新组织成一份看起来很专业的文档。这样,当程序再来问策划的时候,就再也不怕找不到了!


美术
前期探索
在确立《循环破译者》视觉方向的初期,我们围绕游戏背景中的“虚拟生存”与“末世灾变”核心矛盾,将美术关键词锚定为 “理性赛博朋克”、“复古未来科技” 与 “高技感架构” 。这些关键词不仅定义了游戏的未来主义基调,也深刻体现了技术垄断与文明崩塌交织的末世图景。
游戏情绪板构建
我们通过创建系统的情绪板进行风格探索,最终决定构建一个以暗色调与黑白素色为基底,辅以功能性霓虹光效的视觉世界。其核心理念是表现一个高度理性、却因底层技术陈旧而处处显现破损与噪频的“数据废墟”。
游戏GUI设计
在界面设计上,我们深入挖掘了“复古未来科技”这一概念。我们没有选择流光溢彩的全息投影,而是回溯了数字技术的童年时期,从早期CRT显示器的菲林色调、命令行终端与原始的网络弹窗中汲取灵感。
这直接导向了我们独特的色彩系统:采用印刷与胶片标准的CMYK色彩模型。我们为其中三原色赋予了严格的功能语义:
青蓝色 对应秩序与安全,是安全节点与我方的代表色。
洋红色 标识错误、混沌与敌方侵蚀,是深渊代码的视觉表征。
黄色 用于世界的中立区域,例如探索节点,在这里,你能够凭借运气和策略获得物资。
游戏色卡
视觉呈现上,我们融合了高技感的轴测投影布局与复古的二进制代码、电视噪频作为背景纹理。这种设计不仅营造了独特的“数字考古”氛围,更让每一次弹出的弹窗都成为一次直接的世界观叙事。
游戏GUI设计
建筑与藏品设计
基于“高技感架构”与“理性赛博朋克”的指引,游戏内的建筑由基础的几何图案堆叠构建。建筑设施以规整的菱形与球体构建为主,覆盖着统一的黑白噪频材质,形成一种冷峻、去人性化的数字秩序,就如同“全息投影”。
不同的归档网里的建筑,实际上也是对应人类意识中的现代建筑。
“探索”节点的设计是一个“高速收费路口”,进入节点后,不同的选项节点也代表着玩家不同的收获,也会影响到最终的结局。
安全交易节点便利店和奶茶店的设计,则是neta自罗森全家的便利店与街边的寻常奶茶店,毕竟,没有什么比来一杯“奶茶”“鸡排”来的惬意了。
而战斗节点则是一个废弃的施工井,安放着几个东倒西歪的路障,冒险进入,可能就会遭遇来自深渊代码的攻击。
在归档网的第一层“核心归档层”中的广场建筑,则是neta自东方明珠塔,他来自人类心中一个奇特的记忆,好像在塔下的奶茶店消费3归档币,就会发生神奇的事情。
而“废弃医院”、“共生核心”“方舟遗迹”“意识熔炉”则是游戏的不同结局建筑。
游戏建筑设计
与之形成强烈对比的是我们的藏品系统。我们选择使用真实渲染来制作每一件物品的美术,并保留其作为“旧时代科技文物”的所有使用痕迹与物理细节,这种极致的物质感,与虚拟建筑的黑白几何体并置,旨在让玩家通过发现使用这些真实的“遗骸”,切身感受文明断层的深度与技术的沉重历史。
游戏藏品设计


使用 Capabilities 编写玩法代码
什么是 Capabilities?
Capability Pattern 是一种灵活组织 Gameplay 代码的方式,它是 EC 架构的一种(注意是EC而非ECS),这一模式广泛应用于《双影奇境》的开发中^[参见 GDC 2025 Hazelight 工作室的演讲],其优势在于使玩法结构十分直观,从而让设计师可以直接在引擎中实验玩法和机制。
Pros & Cons
Capability System 的优势在生产效率高,对设计变更灵活,代码所见即所得,整洁地处理特殊情况扩展,易于组合,能够充分发挥创造力。
与此同时,它也带来一定的代价:每帧轮询,复制粘贴玩法代码。这使得它适合做性能不关键,但机制复杂的玩法,这正好是我们所需要的。
把 Capability 搬到 Godot 中
由于 Hazelight 工作室在 EC 架构的虚幻引擎中制作游戏,而 Godot 则是节点式架构的引擎,所以将 Capability 搬到 Godot 里需要做一些本土化的工作。我们将 CapabilitySystem 与 Capability 都制作为 Node,并且 Capability 必须作为 CapabilitySystem 的子孙节点。
使用 Capability 构建马里奥示例
上图是一个简单的使用 Capability System 构建的 2D 马里奥示例,插头图标的是 Capability,例如 MarioDie 和 MarioIdle。CapabilityBoard会每帧深度优先遍历自己的子节点,依次运行它们的处理逻辑,因此可以简单地通过嵌套 Node 和上下换位来调整 Capability 的运行顺序。
调试器
为了方便对基于 Capability 的玩法进行调试,我编写了一个用来调试它的编辑器插件。它会记录并显示项目中你想追踪的 CapabilityBoard 下所有 Capability 的激活和失活情况。
用于调试的时间轴
将指示器移动至对应的激活或失活帧可以看到调试信息,这极大地方便了我们的玩法开发。我们在《循环破译者》中大量使用 Capabiilty。
可以看到某一帧发生了什么
开源
目前这个实现已经开源。
Godot Capa
https://github.com/hapenia/godot-capa
后记
最后,衷心感谢每一位下载并试玩《循环破译者》的朋友。你们的每一次点击、每一次反馈,都是我们继续前进的宝贵动力。
响尾猫工作室的故事才刚刚开始,这次Gamejam作品也只是我们前进的第一步,欢迎大家加入《循环破译者》交流群(1032331755),来当我们的赛博甲方![[表情_狗头]](https://img.tapimg.com/market/images/a5aee440f53d1d44bf40658f0983769e.png)
![[表情_狗头]](https://img.tapimg.com/market/images/a5aee440f53d1d44bf40658f0983769e.png)
如果您觉得本文写的很好或者对你有所帮助,请不要吝啬您的点赞和评论,谢谢啦!
![[TapFamily1_动次打次]](https://img.tapimg.com/market/images/1d560d44cee0d425e37dc46c1de03607.gif)



