霓虹攀升——游戏设计
全文分为两部分,第一部分谈论游戏霓虹攀升的灵感起点、设计准则,展示游戏设计制作理念;第二部分补充我对游戏组成部分的理解。
霓虹攀升 Neon Ascending
1.核心
我发现了一个规律:人类骨子里谋求一种增长之上的增长。
比如钱生钱,资本的聚集。比如聪明人发明机器人来帮自己干活,又有人发明能创造机器人的机器。我们学习知识,然后又强调学习的最高境界是去学习这种学习行为本身。人们把一件事做完,就想到让它更快地做完、自动地做完。这样的例子简直贯穿了人性,人类会不断追逐这样的超越过程。
所以,我从这个点出发:一个能让玩家不断地获取实力增长的游戏。
成长的速度也会成长,而成长速度的成长的速度也会成长,而……(好吧)
这个核心是符合人类本质的,对于喜爱上述这种“增长”的人来说都是好玩的。
在游戏中最类似的情况是什么呢?答案是叠Buff。
简单总结为一个公式:
\[ T=(1+A)*(1+B)*(1+C)*(1+D)... \]
从意义上来说,它对应着人类一层又一层的努力,换来丰硕成果的情况。提升一个个Buff就等效于提升这些因子,最终结果将会无比巨大。
从公式形式上来说,与叠Buff的游戏计算方法也颇为相似。
2.形式
在这个内核之上,可以设计出什么样的形式呢?这里首先要侧重于逻辑形式,然后是程序,最后是美术。
2.1.基本原型
优先在各种方案中选择框架清晰的、易于实现的、可以扩展的、有先例可鉴的。
推敲过程包括从现有游戏中提炼和修改并形成自己的方案,还可以发挥想象力,创造一些新奇和独特之处。
经过思考,我提出一个游戏原型,并且将从空间上、时间上等方面说明它的性质。
原型一
- 整个场景是一个二维方形网格棋盘
- 每个网格允许向其中放置属于玩家的方块,从而发挥不同的效果,比如刚才说到的武器可以进行攻击,其它的则可以提高这些武器的效果。
- 时间是连续的,敌人会源源不断地涌来,武器会自动地攻击靠近的敌人。
- 在击败一定数量的敌人后,玩家获得升级,可以添加方块来提高自己的实力。
- 如果敌人摧毁了玩家的所有方块,那么游戏结束。
这些听起来有点意思了,接下来可以细化这些规则,如有多少个网格,有哪些武器以及可以提高的属性?有什么样的敌人?如何升级?
首先,我认为武器可以看作是不同属性的组合产物,所以要先确定可用的属性有哪些:
最关键的问题:子弹的攻击力、暴击率、暴击伤害、攻击速度
不那么关键但是可以起到特殊作用:子弹的速度、体积、视野范围
一些加戏的特效:燃烧效果、冰冻效果
那么,武器可以有高攻击力、低射速的闪电;有高射速的机枪;有视野很大,攻击很准的武器;有能穿透大量敌人的切割武器……
理论上,敌人也要有与之相对应的特点,但是不妨设计得简单点:
敌人属性:移动速度,攻击力,血量。
敌人的血量会越来越高,数量会变化,这是最直观的,一定程度上可以替代许多花哨的设计。
当然,把敌人设计得简单还有一个重要作用就是简化复杂性,控制开发成本
由于方块不能移动,敌人的进攻行为可以简化为近距离接触造成伤害。敌人的远程攻击其实也可以看作是等效的由较大体积、更快速度的敌人进行的近距离攻击。
敌人从四面八方包围玩家会更加困难,因为能同时接近玩家的敌人数量增加了。四面八方的包围与从一个角度突破本质上是一样的,不过是放置一圈防御塔和放一排防御塔的区别。
玩家选择方块并提升实力的过程非常有rogue-like的感觉,也很匹配叠Buff的初衷,可以从类似的游戏中借鉴提取。
原型二
- 整个场景是一个二维方形网格棋盘,长宽为15x61。
- 每个网格允许向其中放置属于玩家的方块,从而发挥不同的效果。武器和Buff如上。
- 时间是连续的,敌人会源源不断地从上方涌来,武器会自动地攻击靠近的敌人。
- 敌人会对碰到的方块造成伤害并摧毁它们。
- 如果敌人摧毁了玩家的所有方块,那么游戏结束。
- 游戏按波次进行,每一波一定数量的敌人,玩家成功击败一波敌人后随机抽取若干个方块,选择其中的一个进行放置。
现在逻辑形式已经基本敲定,再来探讨一些更具体的方块设计和数值的安排。
对应每一种Buff至少可以设置一种Buff方块,提供视野、射速、攻击力、暴击率等等。
针对游戏的机制也可以设计一些效果,比如重新抽取模块、更多供选择模块的槽位、每回合结束可以放置更多的模块。
对于武器本身的特点也可以设计增益效果,比如穿透武器对越远的敌人造成越多的伤害,比如闪电可以连锁攻击敌人,比如机枪可以获得额外的射速提升……
不局限于添加新的效果和武器来横向增加内容,考虑纵向提高深度,对已有元素进行组合与变化也会很有趣,比如添加一个随着重新抽取模块次数而不断增加攻击力的方块,或者一个特殊效果,使被冰冻的敌人有概率即死……
以上这些规则都是在原型二的基础上延申出来的。我认为,一个好的原型特点之一是不仅能让我们理解它的基本规则,还有比较统一的路径来丰富它,从而使这个体系不易变形而又有活力。
例如:
- 弹药:使同一列上方所有模块获得+n攻击力。
- 齿轮:使斜角方向上所有模块获得+w%攻击速度。
- 核弹:被破坏时爆炸,对敌人造成大量伤害。
- 护甲:拥有额外的生命值,可以抵御敌人更久。
- 超级闪电:每当闪电武器杀死敌人时提升闪电武器的攻击力,有累积上限。
- 燃烧:当武器击中敌人时,敌人会开始燃烧并持续受到伤害。
- 冰点:当被冰冻的敌人受到伤害时有概率即死。
- 维护站:玩家的失误和强迫症必然会出现,给予他们调整和矫正的能力可以使游戏更友好。这个方块允许玩家去即时地交换方块的位置。
- 进步者:模仿一个武器并发射它将发射的子弹,并且继承那个武器的所有Buff。
2.2.数值
不同的Buff和效果之间相辅相成,而可以部署的方块是有限的,这就产生权衡各个Buff的问题。
一方面玩家可以尝试为特定的武器提供非常强力的Buff,精细地培养一个武器,另一方面也可以放置更多的武器,使一个Buff能够被充分地利用。当然,游戏中还有更复杂的因素如方块出现的概率、地图的大小等等,这些限制着各种方案。这些关于权衡的问题往往难以把握,是游玩和设计的难点。
伤害与武器数量的简单权衡: \[ D = N*(A_1+A_2*M) \] N为武器数量,A1为武器基本攻击力,A2为Buff加成效果,M为Buff方块数量。
同样地,多个Buff之间也需要权衡来达到最优化。
总伤害与攻击力、暴击率、暴击倍数、冰冻效果、攻击速度、武器视野之间的关系: \[ Dmg = Spd*Atk*(1+Cri)*T \] \[ Cri = 1+Cri_d*Cri_c (Cri_c <= 1) \] \[ T = Dist/(V*Frz) \] Dmg为武器攻击对单个敌人造成的总伤害,T为这个敌人靠近玩家的方块所需时间,Cri为暴击提升倍数,Cri-d是暴击伤害,Cri-c是暴击概率,Atk是炮塔的基本攻击力,Spd是武器攻击速度,Dist是视野距离,V是敌人速度,Frz是冰冻减速效果。
先前对敌人数值使用了比较简单的设计,敌人强度主要体现在体积、速度、攻击力、生命值上。 简单来说,随波次增加,敌人的总生命值和平均生命值将越来越高,对玩家形成越来越大的压力。相比于方块的设计更加简单直观。
2.3.对流程的设计
对于这个游戏来说,最主要的流程体验就是游戏的难度,即敌人强度随波次的变化情况。
目标是设计一个较好的难度坡度(难度曲线),这涉及两方面,玩家的强度,敌人的强度。
首先一个好的难度曲线应该是“易上手,难精通”,即开始较简单,中间有尝试的机会,最后要面对极限的挑战。
所以流程可以分割为三个阶段,首先是简单,然后是一个攀升阶段,给予一个难度平坦区域,让玩家试一试、爽一爽,最后迎来疯狂的考验。
2.4.附加的内容
围绕游戏的主体设计一些附加增色的项目,如商店升级、排行榜甚至一些彩蛋。
2.5.程序逻辑
此游戏使用Godot 3.4.4 开发,使用一种非常类似于Python的脚本语言GDScript。Godot与Unity3D也有许多相似之处。 > GDScript太好用了!
不论什么引擎,都需要清晰的程序逻辑。在此不讨论具体的代码,而是说明游戏的程序结构。
游戏中有三大基本要素:方块、敌人、子弹
敌人共有基本属性如生命值、攻击力、移动速度、大小,且共有一些基本的方法(函数),如死亡,攻击,被击中时变色等等。
子弹类的基本属性正是前面设计的若干个Buff,即攻击力、暴击率、暴击倍数、飞行速度等等。子弹并没有本质的差别,只是基本属性和外观不同而已。
方块是最为复杂的,它不仅按照位置条件和周围的方块产生互动,而且有的可以主动攻击,有的受玩家控制激活。 为了实现这个功能,首先令所有方块都有一些基本的共同点,即可以放置、破坏等等,可以预留一些虚函数在基类中,以响应玩家的点击事件,然后在具体的方块内再实现它,就可以做到不同方块对点击有不同的响应,其它功能同理。另外,出于优化和便于管理的考虑,又在方块之下抽象出武器类,它们共有类似的寻找敌人的逻辑,以及可以被赋予Buff的效果。所有具体的炮塔武器都继承自武器类。
2.6.美术
美术应该来源于游戏的故事,从策划的角度来说,这个游戏的故事背景非常灵活,很多题材都适合它,比如僵尸、机甲、可爱小动物等等。我选择了一个我认为比较能被大部分人接受的霓虹电子风格(而且好制作)。
美术需要一些才气和灵感,再加上一点点技术可以达成一些美妙的结果。我主要是凭借自己的感受来设计形象的,用到了着色器来增加噪声和动态,以及内置的后处理效果来创造闪闪发光的霓虹风格。
每个方块就像一个个精致的图标一样,怎么摆放都不会难看。
小理论:游戏组成
1.内核
一个没有玩法内核的游戏往往没人会玩第二遍,一个没有精神内核的游戏无法打动玩家。两个都没有就算不上是游戏。
2.形式
形式是对内核的实现。内核是骨头,形式是肉。
我简单地把形式分为逻辑形式、线性流程、表现形式三个部分
2.1.逻辑形式
所谓逻辑形式就是指构成游戏性的那些基本规则。 >如斗地主要求值大的牌胜过值小的;玩家定时要吃东西否则会饿死;当球被踢进球门,进攻方取地分数。
另外,玩法规则对于不同游戏的意义是不一样的:
- 文字冒险游戏极大地削弱了游戏性,而重视其它方面,玩法规则就是点击屏幕而已。
- 冒险游戏、平台跳跃游戏需要玩家躲避怪物,解开谜题,游戏性较高。
- 沙盒游戏中各种规则都与各个独立的元素有关,不同的物体和道具呈现不同效果,玩法丰富复杂。
从提到的最复杂的沙盒游戏来进行分析,可以发现游戏最完善的形态就是对现实的模拟和超越(完成了模拟就已经实现了超越),但是从技术上来说,我们很难利用游戏超越时间和空间的逻辑。即便游戏的内容纵横古今,从城堡到太空,其呈现的时间和空间的逻辑也无外乎几种。
2.1.1.空间性质
连续空间是最拟合现实的,可以分为二维和三维。二维又可以分为俯视和横板卷轴等等。有的游戏看似是三维,具有一定的高低差,但是人物却不能跳也不能遁地;有的游戏看似是二维却有深度的切换和不同场景的传送切换。
网格空间是一种更抽象、更符合人类思维的设计。网格往往也是二维的。网格空间的游戏在规则上往往更加复杂,棋类就是一个好例子。
网格空间还可以衍生为点与线组成的网络,这是一种图结构,也有基于此的游戏。
2.1.2.时间性质
连续时间是最拟合现实的,应用广泛。另一种是回合制,看起来简单,但是回合制的游戏往往会花更多精力来设计玩法规则,一旦与棋牌结合,就会变得无比深邃。
2.1.3.其它
每个游戏都拥有许多独特的规则以实现其独特的核心,并由此变得复杂、丰富而有趣。
- 吃鸡:枪战、苟到最后
- 杀戮尖塔:牌组构建
- 我的世界:创造一切
- Mindustry:流水线、经营、塔防
- 星露谷:代入感、经营养成
- 黑魂:时机、技巧、黑暗奇幻
- 辐射四:一个废土世界、自由的探索
- 奇异人生:穿越时空的友谊故事
- ……
阻止玩家做出意外之举或者说屏蔽一些清奇的思路是应该被重视的。玩家在餐桌上蹲起、跑到地图之外甚至开挂,都是需要思考的。同时用过于明显和强硬的手段控制玩家是不友好的。比如放太多明显的空气墙,设置不可击败的boss,会令人感到不平。
2.2.线性流程
不管是什么游戏最后营造的体验都可以说是线性的,因为玩家的时间只会向未来流动,即便游戏设计有多条可能的分支,玩家最终也只能选择某一条路径。
2.2.1.故事性的
强调故事性的游戏就像是一部可以互动的小说、电影,主要由故事内容支撑起来,游戏的内核转移到故事的内核。其中穿插的解密、冒险等游戏性元素将在故事之上增加它的趣味。
2.2.2.规则性的
强调规则性的游戏更加开门见山,就像篮球比赛和五子棋一样,玩家学习规则然后投入到一些关卡和比赛中去。这一部分强调游戏规则带来的乐趣,在规则上创造出方法和战术,在规则下锻炼快速的反应和准确的记忆力。
2.2.3.二者兼备的
故事性并不与玩法相抵触,但制作游戏往往是有所侧重的,做到故事性与玩法兼顾需要更高的成本。比如开放世界游戏角色扮演游戏,有丰富的人物故事,多种结局,还有一系列考验玩家实力的系统。
2.3.表现形式
现阶段,游戏最终要以图像和声音作为媒介。如果哪一天嗅觉、味觉、触觉被标准化必定会被应用到游戏中。
2.3.1.视觉呈现
2.3.2.听觉呈现
2.3.3.风格
不论是什么样的视觉和听觉传达,最终要达到和谐,并且往往可以用某一种风格来归类它们。如,清新的,血腥的,柔弱的,仇恨的,幽默的,复杂而严谨的,爽快而刺激的。风格也应当搭配游戏的逻辑形式和线性流程,否则就会显得割裂和错乱。