大家好,我正在开发《梦层 Oneirscript》,一款以梦境和潜意识为背景的传统 Roguelike。目前已经开放抢先体验,免费游玩,源码也已公开。
一面墙挡住去路,你可以绕行、破坏,也可以检查它的描述中有没有能够篡改的内容。选择修改,预览结果,支付想象力和相应代价,然后看着描述里的变化落到地图上。
同样的想法也进入了装备系统。联想盘允许玩家拿起、移动和旋转装备,搭配功能词,组织条件、行为和对象。装备的价值取决于它能做什么,也取决于它能与其他东西组成什么句子。一个不起眼的词,可能比换一件数值更高的装备更有用。
组合可以复杂,结果必须说清楚。设计了联想盘会展示生效语句和效果,篡改会提供预览。以便玩家阅览。
题材选择与这些玩法是一回事。梦境中的物品经常超出它在现实中的用途,一句话、一个名字、一段记忆都可能改变眼前的世界。美工刀、水枪、睡衣这些熟悉的东西,可以顺着联想进入构筑;房间、洞穴和陌生走廊,也可以在下潜过程中接到一起。
传统西幻有一套成熟的职业、装备和魔法语言,而我更想从日常经验中取材。玩家看到某件东西,能先产生自己的联想,再看看游戏是否允许这样使用它。
下潜和上浮在梦境中获得了天然的叙事钩子。我不是在地牢中寻找入口和出口,而是随着梦境逐渐崩解,获得前往下一个梦的能力。
潜意识题材给这种尝试留下了很大的空间,也让心智、清醒度和想象力自然地成为需要管理的资源。传统的生命值被两条功能存在差异的心智与清醒度条替代。随着两个条不断变低,会产生不同的环境效果、画面变化,乃至梦境地图也陷入混乱。
环境负责让这些选择彼此发生关系。火会蔓延,液体能够参与传导,气体、光照与声音也会改变遭遇。
最近录制的一个演示场景中,电弧弹命中异象后接通了附近的导电介质,电场留在原地;火墙与爆炸随后改变了危险区域,玩家自己也得撤离。
我喜欢这种复杂结果带来的策略:技能释放完了,事情还没有结束。你改变了地图,接下来还要在这张地图里行动。刚刚帮你挡住敌人的火,可能也封住了退路;某种装备组合的价值,则可能因为地面上多出一片积液而改变。
《梦层》采用网格、回合制、程序生成和失败重开,以及多重选择的复杂度。并非借用概念的Rougelite。移动、攻击和等待都在推进局势,你有时间观察,也要承担每一步的结果。它主要考验对规则、资源和空间的理解。这是我把它定义为传统 Roguelike 的原因。
我期待的游玩节奏,是停下来读清局面,再决定下一步:该绕行还是交战,是否值得消耗一次篡改,要不要把这件装备拆下来重新组织。而不是因为瞬时的反应不够而遗憾退场。
《NetHack》让我看到规则互动可以容纳多少意外,《CDDA》展示了环境和物品系统能够延伸到什么程度。 说到高密度界面和装备构筑,也很容易想到《Cogmind》, 但比起机器人身体组件的随时更换,《梦层》更关注装备之间如何组织成行动语句,以及这些行动如何与梦境发生联系,这一点上是语言学的,而不是物理的,这种想法倒与 《Baba Is You》这样的解谜文字游戏有了一些共同之处。 但本作思路更接近的是《DCSS》,将复杂的规则和数值毫无保留地交给玩家决策,有多个自由操作和分配的界面。《梦层》把重点集中在一次次梦境下潜中:改写眼前的描述、组织自身的行动语句,再用环境验证这些想法。
《梦层》的桌面端运行在终端里,自带并推荐使用 WezTerm。
在游戏的想法阶段,我想到emoji和复杂Unicode字符能否组织游戏画面,这样的游戏前人尝试不多,没有什么名作。若能实现,不仅节省美术资源,还能作为一种游戏画面的新潮美术风格。以往的终端游戏多以ASCII字符为主,且游戏画面大都抽象,依赖人去联想和记忆。用emoji等双宽字符,想要对齐瓦片宽度不错位,也是难题。
在玩了《Rebels in the sky》《Pokete》等近年的终端新游后,我意识到20年代的终端技术发展与当年早已今非昔比。Rich等渲染库发展成熟,能固定格子宽度。终端刷新率高,甚至部分支持内嵌图片、像素图形、超链接、AI助手等。Windows Terminal与Linux的各主流终端提供主流平台强大终端能力,让我的想法有了落地基础。
如果字符的表现力不够,物品太多,字符对应不过来,怎么办?自定义混合字体的Unicode PUA(私有字符区)提供取之不尽的自定义瓦片空间。有部分作品曾用这种方式实现地图,还有专用字体,但在终端游戏里还不够普及。通过自制字体贴图,以及使用授权的其他字体自制贴图,让游戏庞大的物品和环境有了贴切、具体、不易重复的对应图形。
选择 WezTerm,还有很实际的原因。它提供跨平台的终端环境,三大系列主流桌面皆支持。支持字体分区配置和终端图像显示,能承载字符地图之外的图形与动画。这样,我可以保留终端的字格结构,同时加入彩色地图、专用字形和演出效果。
当然,终端也存在刷新率比不上专业渲染引擎图形界面,可能不够流畅,表现力仍然存在上限等问题。未来推出图形前端是必要的。但作为终端美学的创新者之一,落地了很多前人的探索和现在的新技术,拓宽终端的渲染空间。
这也是一种表达上的偏好。用符号和颜色传递环境变化,让玩家逐渐学会阅读地图,本身就是我喜欢的游戏体验。而本作在传统的字符上增添了贴图的易懂,让人一眼看出代表什么。
游戏逻辑使用 Python。Textual 和 Rich 负责界面、输入与富文本,NumPy 用数组运算来渲染光线,Pillow 和 FontTools 处理图像与字形,asciimatics 参与游戏特效与界面动画,pygame 负责音频。这些工具拼起来,已经能支撑我目前需要的表达。
Godot 做2D有成熟的编辑器和制作流程,C++、Rust 也有性能优势。我没有用,而是选择这套组合,是因为《梦层》最频繁的工作发生在规则、数据和交互上:加一个条件,修改一种材料反应,检查几套系统同时运行时会怎样。同时,游戏引擎不是终端的原住民,而Python可谓如鱼得水。
Textual极大简化了终端分区,让终端有复杂的UI。Rich不仅负责美化,还突破了传统的2宽度字符瓦片限制,压缩横向长度,让2宽的字符浓缩为正方形格子,完美适配地图要求。
Python 让我能较快地把这些想法写出来,运行,观察,再修改。性能问题需要沿着具体热点处理;开发阶段,我也很看重试错的速度。
另一个更长远的理由,是别人能不能接着改。Python 普及、语法相对直观。一个玩家可能在工作、学习或写脚本时已经接触过它。当他想修改一件物品、增加一种构想时,熟悉的语言可以少挡住他一步。对AI辅助开发协作者,更是最适合的语言之一。对一个希望社区参与的项目来说,这个门槛很重要。正如《像素地牢》社区繁荣离不开Java的大众和Libgdx的便利,《梦层》同样以Python提供更低的参与门槛。
《破碎的像素地牢》《NetHack》《CDDA》给我的启发,也延伸到了分发和开发方式上。游戏可以通过发行包直接交给玩家,源码则让愿意深入的人有机会理解、修改和继续维护它。《CDDA》的公开仓库就同时提供发行入口、源码、贡献说明和社区渠道。
尤其值得学习的是《像素地牢》系列。原版源码衍生出《破碎的像素地牢》等作品,其他分支又继续发展自己的内容。玩家可以在不同版本之间流动,也可以从玩家变成修改者,再成为一个分支的作者。这种网状的开发与游玩社区,我认为是抗风险和鼓励玩家创新的典范。
一个作者暂时停下,已有的代码和经验仍然可以被接续。大家对难度、题材或玩法产生分歧,也可以各自做出版本,让玩家实际体验。不同方向的尝试有机会积累下来,而不必全部挤进同一个主版本。
这也是我为《梦层》选择的路线:itch 和未来筹备中的Steam、TapTap承担直接游玩和下载,GitHub与Gitee提供源码与发行包,在机核等社区介绍设计、交流体验。免费游玩,自愿赞助,让感兴趣的人先接触游戏,再决定是否参与。
我希望采用相对宽松的合并策略,给新玩法、合理的跨界联动和不同作者的表达留下空间。提交者需要自己读过、跑过代码,我会检查兼容性和主题适配。方向差异很大的改动,完全可以建立独立仓库,继续做下去。
AI 辅助开发技术的井喷式发展,让这件事多了一种可能。《梦层》的开发已经使用了Codex、DeepSeek 等工具。过去,一个玩家可能有很具体的想法,却卡在代码入口、工具配置或实现细节上;现在,他更容易把想法做成一个能运行、能拿给别人试的版本。
我尤其期待这种变化与 Python、开源代码和宽松的参与方式结合。有人增加一种构想,有人发现它与旧材料的意外交互,有人据此设计新地图,还有人觉得这套玩法值得单独发展。最初的作者不需要预先想出所有组合。
终端是《梦层》现在的载体。长期来看,我还计划制作脱离终端宿主的独立图形界面前端,让地图、面板、动画和交互拥有更自由的布局,也让不熟悉终端的玩家更容易上手。
这个方向会尽量复用现有的规则核心。终端版与图形版可以有各自合适的显示和操作方式,共享游戏系统,也方便社区继续尝试不同的前端。
移动端同样在长期计划中。回合制允许玩家随时停下来思考,但现在密集的侧栏、快捷键和联想盘操作,需要针对小屏幕重新设计。我希望把观察、瞄准、篡改和装备编排真正做成适合触摸的交互,而不是把桌面界面直接缩小。
这些还没有确定的发布时间。眼下会先把现有版本的引导、界面和平衡继续做好,再逐步推进新的前端。
《梦层》还在早期。我把它放出来,也是想看看:当别人真正开始玩、开始修改之后,这个游戏会长出哪些我没有想到的东西。
评论区
共 2 条评论热门最新