方块世界开发日志

作者:yarray
2019-12-27
10 3 2

方块世界(Tetris World)是在尝试 fantasy console 的过程中实现的一个小作品,虽然小,但是在体验上进行了仔细考量,这里将设计过程记录成文。

起源

差不多去年这个时候,我开始涉足游戏开发,并在机缘巧合之下选择制作一款俄罗斯方块的变种,采用的是捏合不同类型游戏的思路。由于想捏和的东西越来越多而开发只能在部分业余时间进行,这个项目断断续续进行了一年还尚未完成。在大概 9 个月的时候,我渐渐觉得这种捏和的方式未能回到交互和体验的本源上来考虑问题,创新性还是被类型游戏局限住了。也大概是那个时候,突然有一个场景浮现在我脑中:一片开阔的原野上,若干俄罗斯方块缓缓飘落。这个场景的气氛与当今越发竞技化的俄罗斯方块迥然不同。大概 1 个月前我在读 indienova 的博文时发现了 fantasy console 这一门类,把玩之下发现似乎颇为适合实现这个创意,出乎意料的是,这个游戏很快地做完了。

设计

游戏的核心即为上文所述的场景,体验上要足够放松,可以相对佛系地游玩。首先确定的是需要宽大的地图,并可能同时下落多个方块,为了在这个前提下维持俄罗斯方块的玩法,有两个问题必须首先解决:1. 如何切换方块?2. 如何在宽大地图下消行?问题 1 仿佛比较简单,只需要增加两个切换按钮就可以了,问题 2 比较核心:由于行太长,实在是太容易发生失误了,而一旦失误想通过消上面的行来补救几乎是不可能的,解决这个问题是游戏能够成立的关键。

方块实现

在解决两个核心问题之前,我先确定了方块实现的方案。一般用 Tilemap 实现俄罗斯方块,都会把每种方块建模成四个 Tile 的组合,在 TIC80 里这意味着一个方块会有 2432 个像素宽。由于 TIC80 总共只有 240x136 的分辨率,这显然会使得地图显得很小。为此,我将方块建模成四个 2x2 方块的组合,这样地图尺寸就大大扩大。在这种逻辑下,我舍弃了原先以 Sprite 为单位的 Tilemap 计算,全部采用像素运算与操作,特别是写了碰撞检测的逻辑。

我曾经纠结于多个方块在空中的碰撞问题,为此设想过多个方案都既不好玩又不好实现,最后决定专注核心体验避免复杂性,干脆在空中不做碰撞。

降雪机制

在早期设想的时候我曾经考虑过小精灵这个概念:小精灵定期出现,搬运方块帮助玩家填空。然而这个概念并不能在我脑中形成一幅和主场景相容的画面,显得非常刻意。我也考虑过别的机制,比如特殊方块可以形成有耐久的围栏,允许在局部形成更短的行并消除,又比如在 t-spin 等接触面积大于一定值的落地事件时触发同色消除等。但最后我觉得这些都太复杂了,“穿透”成为最可行的关键词,在考虑了几个穿透物的方案后,我回到了最初的比喻:既然方块像雪片一样从空中落下,那雪花便是最合适的可穿透降落物。在试玩的过程中,从最低空隙开始堆积的雪花确实能冲抵大地图带来的问题。此外,降雪单纯随时间递增的效用使得玩家即使不做操作也可以慢慢消行,加上融洽的视觉效果,几乎超出预期地解决了游戏核心体验的问题。

降雪机制

受控标识与色彩设计

在具体实现的过程中,本以为已经解决的问题 1 又冒了出来。虽然控制的切换只是两个按键的事,受控方块的标识却有很多选项。最直白的就是加框,但是由于我格外醉心于方块在夜空中落下的意象,并不能容忍加框这种明显的人造物来破坏沉浸感。为此只能使用不同的颜色来标识,而这需要和色彩设计综合考虑。

传统俄罗斯方块的色彩系统非常简单:每个方块一个色彩。在实际试玩的过程中,我发现这样会使得堆积的方块非常花哨凌乱,方块过多时显著破坏场景的宁静感。我希望方块堆积起来具有相对和谐的颜色,为此限制了色彩的个数,这使得方块开始形成更和谐的更大色块。突然我意识到玩家可能想有意识地用方块堆出一些形状——这是宽大地图带来的意外效果,而当前颜色与方块绑定的做法使得玩家“涂色”时会受限于可用方块的种类。

经过一番考虑我重新设计了色彩系统,让色彩随时间而不是方块变化,每隔一段时间,系统会更换新下落方块将具有的颜色,这样玩家总是有一批同色而形状各异的方块来用,更加容易搭建自己喜欢的图案。

方块的色彩选择的是明亮的暖色系,与之对应,受控方块的色彩自然就要选用亮色的蓝或绿。遗憾的是,这样我喜爱的亮黄+夜空的色彩对比就无法出现在视野的中央。后来我实现了下落标识的功能,这时蓝色就可以只标识在下落标识上,方块本身则保持原有颜色,但是我又发现在这种模式下玩家的眼睛会集中在底部,同样不会关注亮黄+夜空的色彩对比。最后这个感受只能留给任由方块下落的佛系玩家,这是游戏设计的一点遗憾。

粒子系统

在游戏设计过程中我经常克服实现一些花哨特效的诱惑,部分是因为 TIC80 的机能和表现力有限,这种限制其实也是 fantasy console 这类开发环境的好处。但是我还是决定在消行这里作出最棒的视觉效果——消行相比普通俄罗斯方块太难了,必须要给玩家以惊喜,同时,这个视觉效果应当既华丽又同样宁静,具有“不为人知地悄悄发生”的感觉。最后我选择了飘散的效果,通过控制速度可以同时呈现出能量和轻盈感。

TIC80 没有自带粒子系统,我在之前的开发中也并没有用过其它引擎的粒子系统,大概参考了一下网上的常规设计后就干脆开始动手实验。按照单粒子单方向移动->消散->多粒子移动->分批移动->速度扰动的顺序逐渐实现一个自然的粒子效果。在实际操作时,我意外地发现最大的挑战来自像素本身。开始时我用浮点数按帧积累 xy 的值,xy 变化达到一个整数时就结算到位置上,结果导致移动方向只有两种:45 度和水平,形成非常难看的折线。为此需要让 xy 协调变化,在固定时间后或移动超过一定距离后才结算距离。

粒子移动完成后,整体分布效果的处理反而意外顺利,引入了随机速度扰动后,只需要控制随机的区间就可以实现效果的微调。比如根据 x 的位置改变粒子的基准速度,就可以呈现出向右方开口的效果。这里还有一个窍门是为了使随机数被压缩在靠近 0 的区间,可以简单使用两个甚至三个均匀分布的随机数相乘,我用这种处理防止散逸的粒子扎堆。

声音系统

我希望游戏大部分时间是无声的,但一度考虑在下雪和消行时播放一句音乐。TIC80 支持 SFX 的定制,但是折腾了好半天后我基本确信无法使用 8bit 达成我心中的音效。我希望下雪时的音乐有一种回忆色彩,而消行时的音乐明亮而轻盈,这需要类似于钢琴的音色和类似于三角铁的音色。放弃音乐后游戏就完全无声了,作为补偿,我突然意识到可以给方块本身配上音符,就像玩家可以不管消行只是堆图案,他/她也应当可以不管所有积累的东西只进行即逝的创造。于是我为切换控制的按键加上了声音,如果下落的方块比较合适,通过横向摆布方块的相对位置玩家就可以编排出趣的乐句。虽然可能根本不会有人这么玩,这个想法还是让我非常兴奋。实际试玩过程中意外的旋律可能令旁边的人会心一笑,算是一个不错的副产品。

音符选择上,我选择了 C 大调和 F 大调给前两种颜色,高八度的 D 大调给最亮的黄色,红色则用 C 大调的关系小调 a 小调(和声小调)来衔接。音阶的设计理应更花心思,但那已经超过了我的能力范围。

配置与交互设计

我在交互上一度有过稍显奇怪的困扰。比如,我执着于不实现游戏内菜单,实现的枯燥是一方面,另一方面,我觉得这样一个世界不应该有菜单这种完全控制的意象,更何况 TIC80 的游戏自带一个游戏外菜单。但是为了不同目的的玩家能有最佳体验,我还是设计了指示物的开关(开便于游戏,关更有漂浮感),时间和分数的开关(开便于记录刷分,关避免干扰),把交互简化成两个专用的键。

键位上,TIC80 默认 a 对应 XBOX 手柄上的 Xx 对应 B,这使得手柄上正常的左右操作变成了 ax 的奇怪操作,因而我增加了 qw 来切换方块,这样的话立即下落对应的 z(手柄上的 A)就显得干扰太多了,于是我增加了回车来立即下落。

结语

我想我还会使用 fantasy console,可能是 TIC80,也或者购入 PICO-8,这些工具当然不是没有问题,比如自带的代码编辑器对习惯了 vim 的程序员来说过于痛苦,几乎没有什么用,Sprite 编辑器也仅仅够用,与 Aseprite 这种神器相距甚远。但是它们的限制和高度集成的特点会潜移默化地塑造开发进程,迫使开发者不断回到游戏的核心玩法,是一个非常安适的工作环境。

有一种说法是 fantasy console 适合快速开发原型,这点我之前一直不太明白。由于缺少太多游戏引擎的便利功能且工作在十分低的抽象上(sprite、map、甚至像素),实现一个在其它引擎里拖拖拽拽的简单任务都可能颇费周章。现在我开始理解它可能并非适合任何游戏的原型开发。对于一个相对复杂的类型游戏,仅仅建立类型的要件可能就要浪费大量时间,但是对于玩法特殊、渲染特殊的游戏,所有引擎提供的功能都会变成桎梏——对于这类游戏没有什么比直接画像素更自在了。

不长的开发时间却让我感触颇多。作为一个全包型且只能在业余时间进行开发的个人开发者,应当更多地坚持创新的独立玩法。去实现成熟的类型游戏机制当然是有益的,那些机制创立之初本身也极富创意,但是由于珠玉在前,很容易陷入繁琐的细节,反而无法充分体现创意。至少对我而言,理想的游戏开发是一种接近艺术创作的状态,寻求的是触动,而不那么关心传统意义上的“好玩”和“吸引力”,还是应当对目标进行精简,坚持做游戏的初衷,尽快抓住和发展自己的灵感。

游戏目前已经移植到 Love2d 引擎上,后续开发将基于这个版本进行,TIC80 的版本已经上传到 itch.io,可以免费游玩。Love2d 版也放到了 itch.io 上,目前只是加了封面、彩蛋和一点音乐,收费 2 刀,也希望大家支持。Love2d 版本

TETRIS World

去看看

本文为用户投稿,不代表 indienova 观点。

近期点赞的会员

 分享这篇文章

您可能还会对这些文章感兴趣

参与此文章的讨论

  1. N.Y. 2019-12-29 微信会员

    相当喜欢这种充满艺术气息的小品游戏,而且看到作者对游戏美学设计诸多的思考和追求,颇有同类人的感觉。
    我特别喜爱研究视觉交互设计。偶然的机会看到这篇文章,作者在游戏设计中揣摩玩家的乐趣变化,和我经常在交互设计中揣摩用户的体验情绪有异曲同工之处。

    说起经典的俄罗斯方块,其实我个人一直不那么喜欢玩,我的性格有点佛系,俄罗斯方块需要一边跟时间赛跑,一边需要快速思考+精细操作的模式让我很快就变得疲惫。但这确实是个设计感超凡的游戏,我也曾经想过怎么才能改的好玩点但都没仔细思考完整,所以看到作者的文章瞬间就吸引了,随后就戳中了我佛系玩家的点。

    游戏风格如此喜欢,而核心玩法我却颇感差一丝味道,一个小品游戏,玩家的游戏目标最好尽量单一明确,且有比较好的正反馈。目前搭建一个形状的设定,玩家在时间的追赶下不容易完成,完成后的建筑没有明确的正反馈,还会因为雪落消行而被毁掉,这个思路深化下去,没准可以形成一个悲剧艺术,但是太难驾驭我就没作多想。

    在读完作者的文章以及试玩了TIC80的版本后,一个idea逐渐在我脑海中形成和细化,不敢私藏想分享给作者,我也想把我的思考过程完整展现出来,没准可以引发作者新的idea。

    雪落穿透消行的设定与超宽画布组合在一起的设计惊为天人,这个设计下,作者的第二问:如何消行,就确实会成为一个比较难把握的点。 但是我想说,在这种雪落消行+超宽画布的设计下,消行真的还是正反馈吗?游戏通过被动的雪落消行的设定颠覆了传统俄罗斯方块的快速思考+精细操作才能消行的正反馈设定,消行得到的正反馈变得没那么有吸引力了,玩家用方块随意涂鸦的作品随着时间流逝被雪落消去,又让玩家感到一丝茫然。
    所以为何不能反向思考一下,消行其实在现在的设计系统下,已经是一个偏负反馈的效果了。消行效果依然需要,那么玩家能不能开始想办法对抗这种负反馈,尽量保护自己的建筑不被消除?很容易想到,玩家可以搭建充满漏洞的结构,使雪落难以消除。但是这样又会让搭建的建筑快速到顶,面临游戏结束。新的思路来了,游戏结束也可以设计的不那么让人难以接受,我们可以在每次游戏结束的时候,为玩家在这张画布中搭建的整个建筑群给出一个评价。评价需要简单,简单的评价可以让玩家容易学会并开始动脑筋设法追求更好的评价。这张画布中建筑的密度,也即整个画布中最后到顶结束时的方块数量总数,正好适合作为一个足够简单可以引发玩家在游戏进程中不断思考和追求的评价方式。

    那么总结下现在的玩法:
    游戏的基础风格依然是一个宽阔,宁静,色彩优雅的雪域世界。空中不断落下提供给玩家的随机彩色建筑方块,但是同时伴随着飘落的还有看似优雅的雪花,会随时渗透到辛苦搭建的建筑的地基缝隙中,消融掉我们的即兴创作。
    玩家需要想尽办法搭建我们的建筑,逐渐攀升到山顶,天空,天外(背景中表现),触摸到地表人类难以企及的高度;同时搭建尽可能多的建筑群,让雪域世界充满生机,而不是光秃秃的一根杆子捅上天际,那样将会降低你的世界的评价,在这个过程中,玩家需要不断地在“追求造更多更密的建筑”与“抵抗雪落的消融”中寻求平衡,自此游戏中隐含的对抗要素形成了,这就是这个游戏的核心机制。
    玩家可以反复游玩这个游戏,一边在对抗雪落消融中辛苦的设计更多的建筑,从而得到更高的评分,甚至把最后的建筑群图案与分数分享给朋友~ 一边反复体验那些游戏中作者精心设计的艺术元素,建筑的斑斓的色块,雪落引发的消行中弹奏的叮叮咚咚声,方块碎裂飞散的动画,让玩家在惋惜中也不会大觉遗憾。 作者动画很棒,配色审美很认同,音乐可以来点烘托气氛的背景声音,如稍有变化的沙沙的下雪声音,配合消除时叮咚的三角铁应该可以,不会很喧闹。
    反复游玩的过程中,玩家不断在随机雪落的破坏下寻求建筑密度最大的最优解,会逐渐形成一些自己的建筑思路,这将会是这个游戏给玩家的带来的第二层正反馈,这让玩家有动力不断的调整思路开下一局。

    补充一些别的:
    · 脑测了一下各种建筑思路,简单的造型有T形,带间隔的建筑群等都可以降低雪花破坏建筑的速度;还可以是整个画布只有一条笔直缝隙的密铺形建筑,但是这样的建筑思路依然不是最优解,因为没有缝隙的高层建筑在雪落下会让游戏更早结束。那么随后会有玩家想分享他们的设计思路吗,geek们会搞出来算法或者机器学习得到最优解吗~?

    · 这个游戏模式下,画布大小需要在后续的测试中不断调优。画布不能过大,会导致一局游戏的时间太长,玩家会很快疲惫,我们还希望玩家能够反复游玩;画布也不能过小,不然很难呈现更好的艺术效果,也没有足够的思考复杂度。同理方块落下和雪落的密度和速度,也是需要测试平衡。最终找出一个舒适的平衡点是一个需要设计者耐心摸索的过程。

    就先写到这儿啦。。

    最近由 N.Y. 修改于:2019-12-29 20:01:29
    • yarray 2020-01-02

      @N.Y.:非常感谢如此详细和精彩的回复!作品在被理解的前提下被欣赏,可能是创作者在发布阶段的最大幸福了吧。评论对于正反馈的理解和分析非常透彻,让我想了很多,可以从一个更高的维度重新思考设计这个游戏时的考虑,这里记录下来供进一步探讨。

      我认为游戏分为类型游戏、艺术游戏和实验游戏(电子交互艺术),虽然没有明确的界限,但是几个方向所追寻的目标有明确不同。这个分法主要是参照了影像/电影门类中类型电影、艺术电影与实验影像的区别。类型游戏与艺术游戏的区别比较容易理解,前者在既定框架中只做必要的创新,主要追求的是好玩(甚至氪金、成瘾、留存率等),主要考量是商业价值,后者将游戏作为一个艺术作品,在作者的艺术观下追求游戏作为综合媒介的艺术性。一般的游戏范畴到此为止,但是即使是艺术游戏,也是要在游戏这个既定概念的范围内考虑,要好玩、要有明确目标、要遵循特定的游戏语言和满足玩家对游戏这一概念的期待。而实验游戏作为视觉艺术的一种,完全自由,充分挖掘交互这一载体的潜力,提供如同影像、装置等类似的艺术体验。实验游戏不需要好玩,而是需要创新性地使用交互这一媒介,呈现艺术家想要的效果,给玩者以特定的体验或机会。

      在这个概念框架下,方块世界的原始构想应当落在艺术游戏的门类中,但是其实只有主玩法-消行具备了艺术游戏的必备要素,堆叠形状和演奏旋律两个玩法正如评论所述,缺少充分的正反馈,其实只能从实验游戏的角度进行理解(在这种理解下,这两个玩法的艺术性又显得薄弱了,但是这是另一个话题)。

      先来看主玩法。这里我对消行的理解有所不同。我理解评论中质疑消行是有效正反馈的原因主要是,“玩家操作带来成果”这一链路中、操作这一环节的弱化导致链路的合理性存疑。但我认为消行依然是一个有效的正反馈,主要基于以下两个原理。一是“消除”本身带来的舒适感受,以及方块紧致的“整合”本身带来的愉悦(对于强迫症可能尤其明显),这也是所有三消游戏成立的一大支柱。这里消行的奖励不是评价式的而是体验式的,其作为正反馈在最小操作下也可以作用。二是虽然宽广画幅下微观上的极致技巧可能起不了太大作用,玩家却可以通过策略性有效增大消行的效率,如尽可能将方块均匀排布,控制调整方块-加速下落的节奏等。基于以上原因,我觉得对于一个俄罗斯方块玩家来说,主玩法还是是可以成立的。

      堆叠形状和演奏旋律两个玩法情况类似,这里只讨论前者。如评论所述,此时落雪变成负面机制,消行则变为负反馈,不存在正反馈。虽然这里有我自娱自乐的考量(一个艺术游戏通过可能性向实验游戏敞开),但是堆叠形状作为独立的玩法/交互模式确实缺乏打磨。如果从游戏性方向考虑,我觉得评论中“以堆叠特定形状为目标对抗落雪/消行“确实是很好的思路(实际上主要对抗降雪,消行几乎不用刻意对抗,实测无干预情况下可能 20 分钟才能消掉一行),在此基础上我觉得有三个玩法可行。

      1. 解题式玩法,给定形状要满足的条件,让玩家堆出来,可以是填充特定的形状,也可能是密度、最少方块最高、纯色块大小等
      2. 开放地创造形状,这里可能需要关闭/减少下雪,或者设置一键除雪功能,这个玩法下我觉得不太适合引入与降雪的对抗,因为开放式的创造与对抗似乎不太兼容。这里的正反馈我觉得只能靠社交功能,如分享甚至多人游戏。
      3. 给出一个简明又笼统的目标,又足以在掉落的随机性下容纳足够多的变化,也即如评论中所述的“想尽办法搭建我们的建筑,逐渐攀升到山顶,天空,天外(背景中表现),触摸到地表人类难以企及的高度;同时搭建尽可能多的建筑群,让雪域世界充满生机”。此处原文引述因为我很喜欢这个意境。但是比较可惜的是我也没想到这个“目标”到底应该设计成什么。这种玩法下我也觉得画布大小、建筑的可能解法等是需要反复思考和设计的,后者应当是这一玩法最重要的设计点。

      声音方面我还是不希望落雪有声音(雪落无声),消行声音我与评论的想法类似,但尚未找到/制作理想的音效。

      最后,如果您有兴趣也可以对代码直接进行修改和实验(TIC80 的卡带中是带有源码和所有素材的),或者我们也可以通过 github 进行协作(目前是私有 repo,可以加入协作者)。近期我可能并不会积极地修改这个游戏,因为除非显著增大体量,这个游戏已经算是处在一个相对理想的状态;但是非常欢迎进一步对游戏设计进行探讨,新的一年已经来了,也说不定哪一天我会把它发展成一个更丰富的游戏。

您需要登录或者注册后才能发表评论

登录/注册