开始前
在开始这个项目之前,我的想法是做一款小型解谜游戏。回想起小时候玩过的一款滚动方块的Flash游戏,我在网上找了很久,终于找到了它——《Bloxorz》。我的计划是保留游戏的核心机制,即翻滚方块,但去掉《Bloxorz》中的机关块、橙色块和传送门等机制。因为我觉得《Bloxorz》后期的谜题更多是探索,而不是推理。我想做一款专注于翻滚的静态谜题游戏,类似于《见证者》。理论上,你可以在谜题开始时就推理出答案,同时加入一些不破坏静态性的机制。
第一周(7月8日-7月14日)
这周的重点是快速试验游戏机制,并评估其开发难度和所需的开发时间。
我原本的想法是做一个真3D的方块翻转游戏,不仅支持任意形状的方块,地形也是3D的。虽然程序实现3D翻转相对简单,但编写Solver有些困难,算法性能也有些吃力。基于之前塔防实验室项目的经验,我深知所有问题一旦进入3D空间,难度都会大幅上升。因此,我迅速放弃了这个想法,转而采用类似原版的长条块在平面上翻转的机制。这个机制的巧妙之处在于,虽然看似是3D的,但实际上完全可以当成2D问题来解决。
在机制设计上,我主要参考了自己的老项目PuzzleMino。当时我总结了一些常见谜题的变体方式,如挡板、对称、多起点、多终点、颜色等(这些都是从见证者总结出来的,真是个谜题宝库)。考虑到时间关系,我的目标是实现4种机制(最终只完成了3种),并预估完成40个谜题(最终只完成了31个)。
确定了把工作重点放在谜题设计上,所以删去了非必要的功能,包括不做开始菜单(New Game页面)、不做选关页面,谜题采用线性开启。
- 代码方面,我实现了核心的翻滚机制,编写了Solver以及随机谜题生成器。
- 通过玩随机生成的谜题,总结解题技巧,分析解题心流,收集有趣的局部题面。
- 我完成了前5个谜题,并制作了第一版美术(简单的原型方块)。
下图展示了实现的翻滚操作。
下图展示的用A星算法求解这种非常规移动,不过其对应评估函数我没去深究,所以算出来的不一定是最短路径,但能求出是否有解。下图有时不显示路径,就代表无解。
下图是简单实现的随机谜题生成器,随机出有价值题目的概率大概是10%。
第二周(7月15日-7月21日)
这周的主要任务是支持挡板机制。
- 由于时间紧迫,我秉持着“怎么快怎么来”的原则写代码,因此这周快速对代码进行了必要的重构,使后续扩展更容易,降低模块的耦合度。
- 我开始寻找合适的背景音乐,同时尝试了第二版美术设计(从老项目PuzzleMino中拷贝了圆角方块)。
- 高强度地玩随机挡板谜题,总结解题技巧,分析解题心流,收集有趣的局部题面。
- 完成了关于挡板机制的6个谜题。
第三周(7月22日-7月28日)
这周的重点是提高美术表现力。
- 从插件库里找来了动态格子水面效果。
- 开始优化方块滚动动画以及关卡切换动画。
- 从塔防实验室项目中拷贝了地形格子系统,这种带裂缝的柱子风格是我个人非常喜欢的。
- 从mota24项目中拷贝了UI菜单系统。
- 实现了最简单的存档系统(只保存玩家当前玩到的关卡编号)。
- 支持手柄操作(研究New Input System花了一些时间)。
- 快速重构代码。
- 完成了关于白色方块的5个谜题。
- 由于存在多个可操作的方块,实现了选中系统(我理想的选中系统要复杂很多,这里只实现了最简单的版本,所以导致谜题中不能有太多可操作方块,否则选中操作会变得很麻烦)。
- 游戏字体采用了得意黑(可惜得意黑不支持繁体,所以后续改了)。
- 高强度地玩随机多方块谜题,总结解题技巧,分析解题心流,收集有趣的局部题面(多方块谜题的Solver写不出来,太难了,所以随机题目不一定可解,这导致花了不少时间去解一些其实无解的题目)。
下图是最终被抛弃的水面效果。
第四周(7月29日-8月4日)
- 尝试制作多终点、多方块谜题。
- 尝试了新的美术风格,去掉了水面,整个背景完全采用随机高度的柱子,氛围感很强。
- 关卡切换采用了程序化动画,通过背景柱子形成题面(效果非常好)。
- 进一步优化了方块的翻滚动作,加入了很多不易察觉的细节。
- 整理音效需求,从素材库中寻找合适的音效(可惜最终音效的匹配度还是偏低)。
- 谜题数量达到21个,并根据最新的美术对所有谜题进行了优化。
下图接近游戏最终的美术效果了(下图关卡切换时有颜色闪烁问题)
第五周(8月5日-8月8日)
- 增加了多语言支持(简体中文、繁体中文、英语)。
- 游戏字体改用了阿里巴巴普惠体。
- 修复了手柄操作UI引起的各种bug(由于工作中没做过手柄相关的功能,所以这方面花了不少时间)。
- 制作了简单的选择关卡系统以及清空存档系统。
- 完成了操作引导的相关内容(将引导嵌入到谜题中,同时将谜题名字也嵌入到谜题中)。
- 完成了总共31道谜题(未达到预期的40题)。
- 制作了游戏通关场景(想看的自己通关去)。
- 重构了关卡切换效果,确定了最终的美术表现。
- 在最后一天制作了itch.io和indienova的页面,包括游戏icon、banner等素材。
下图是大宝剑谜题
回顾
虽然机制和谜题数量上没达到预期,选关系统过于“极简”,选中系统也有些敷衍。但游戏的完成感很强,必要的内容都有了,而且谜题质量让我个人非常满意。喜欢挑战硬核谜题的玩家赶紧来试试吧,免费的!
大概估算这次项目80%的时间都花在了设计谜题上。好的谜题需要灵感、迭代和沉淀,是非常创意型的工作,不是增加工时就能增加产出的。想提高谜题设计效率,还是只能不断设计谜题,积累经验。
关于一个月做一款游戏的方法,我个人觉得非常好用,强烈推荐。不仅能顺利发布游戏,还顺带解决了我的分享焦虑。
更好的开发日志分享方法
我以前也定期写过开发日志,但日志内容大多是流水账,不仅别人看了没意义,自己也没太多回顾的价值。如果想写出好的日志,分享一些开发过程中的技巧和心得,需要投入不少时间,这会打断开发节奏,自己也会过分关注开发外的事情。
在之前的项目中,我其实有很多技巧和心得想分享,但总感觉随着项目进展这些技巧和心得还会持续改变,而且写好文章真的太耗心力了,总想着以后有时间再分享,结果最后都不了了之。
在上一个项目mota24发布后,我发现自己非常高效地写出了2篇分享文章,原因可能有两点:
- 项目发布后有种完结感,项目不会再变了,自己也有空闲时间可以跳脱出项目,从外部观察总结。
- 由于开发时间只有1个月,即使过程中没有做任何记录,但对每周的工作印象还是很深刻,用到的技术、总结的心得都记得很清楚。
趁着分享欲爆棚,基本文章都是一口气写完,非常舒畅。
这次Bloxpath项目结束后,我也有类似的感受,而且更强烈了。除了这篇回顾文章外,我还计划写一篇关于谜题设计技巧总结的文章,对这个感兴趣的可以期待一下。
后续计划
本来预计月底开始下一个独立游戏开发(也是一个月),但最近有些新想法,所以一切都不确定。不过,接下来的两周肯定是休息时间。一个月的高强度开发还是挺耗精力的,需要恢复一下。
一时开坑一时爽,一直开坑一直爽,一月一坑秃头颅
@mnikn:发量还不足以开大坑,只能多开些小坑,趁头发还没注意就结束了