从0开始做个Brotato(1):拆解游戏篇
友情提示:本文很长,动图、视频、表格都很多,使用桌面浏览器可以获得更好地浏览效果。
这个类型的游戏特指玩家操作一个角色,在一定时间内不被不断涌出的敌人所击败是一个标准的“是男人就撑过xx秒”的类型,只是地图采用了经典的平面俯视视角(经典的RPG类游戏的视角),玩家可以控制角色在一个平面上上下左右的移动,通过移动来躲避敌人,寻找更好的位置,并且拾取道具等。角色的攻击是全自动的,攻击方式是随着武器来变化的,玩家可以通过一些手段来获取不同的武器,并且强化武器。玩家还可以做的事情就是在角色升级的时候来对角色进行强化。
从细节洞察出设计者的原创想法
从画风上,我们可以看出作者采用了类似《以撒结合》的风格,说明作者在喜欢《吸血鬼幸存者》玩法的同时,也对《以撒结合》情有独钟,并且认为这两个游戏可以做一个很好的结合,所以会在游戏中加入一定的《以撒结合》的元素。
《以撒结合》本身是一个平面俯视视角的射击游戏,游戏的核心玩法强调的是走位躲避敌人并且射击的技巧,同时各种强化也都是来自随机的,这些点都恰好与《吸血鬼幸存者》“理论的玩法”有相似之处,因此这两个游戏的结合是存在可能性的。
Brotato的“与众不同”之处
什么是系统拆解
系统拆解就是将游戏中的系统关系捋清楚的过程,这个过程中,我们会列出游戏的所有玩法,也就是俗称的“系统”,找到其中的核心玩法,以及围绕核心玩法展开的不同辅助玩法。所谓的玩法,就是一种规则,比如在经典的JRPG游戏中,战斗采取回合制选指令的模式、获胜目标是战胜所有的敌人、失败条件是己方关键人物被击败;而大地图玩法则是自由的在地图上以格子为单位上下左右的走路——从这里我们不难能看出,这就是2个完全不同的玩法,因为游玩他们的规则是不同的。
通常我们会错误的将一些游戏元素误认为是一个玩法,而实际上元素是隶属于玩法系统下的内容,比如“角色系统”其实是不正确的,包括“角色养成系统”,因为这是一种高度的概括——角色养成到底养成了什么?分为哪些构成?装备系统也是“角色养成”,技能系统也是“角色养成”,但是装备和技能是有区别的,这种区别不是来源上的不同,而是装备提供的是“从多个属性中选择一个作为当前使用的”,技能提供的是“不同的战斗方式来服务于战斗”,所以他们的选择方式和规则都可能是不同的——比如装备是根据部位划分的,头盔部位的装备只能从“头盔”中选择一个;技能则是根据cost来选择的,角色当前有200cost值,装备火球扣除30点,装备毒云扣除110点,这就已经是截然不同的玩法了。
一个好的游戏中,核心系统往往有且仅有一个,而辅助系统则是围绕在核心系统周围的,好的游戏辅助系统也只有一圈,如下图所示:
我们要做的,是列出核心系统与所有辅助系统,最重要的是——每一个辅助系统对核心系统产生的影响,这个影响并不是指“产出”或者“收益”,更不是“会带来什么体验”,而是一个客观存在的作用,比如:“提供双方攻击力、防御力数值上的变化,由此调整关卡的强度。”,通常RPG游戏中的武器装备系统就是起到这个作用,提供给玩家不同的数值,玩家数值与关卡强度成反比关系。
在一些较为复杂的游戏中,可能会出现辅助玩法周围也有一圈子辅助玩法存在,这是一个危险的信号,这说明游戏中的玩法存在了“多核”的情况,要及时进行调整,因为这可能对于游戏性来说是杀手级的。因此我们不论是拆解还是从0设计一个游戏的时候,他所有的玩法关系,都应当确定只有一个核心,和每个玩法对核心玩法的关联。
Brotato中的系统关联
从上图我们可以看出Brotato其实一共有四大玩法:
Brotato的核心玩法是战斗系统,这个战斗系统就是在一个有限大小的地图(元素)上,控制玩家角色(元素)在二维平面上任意方向移动,由武器(元素)发出子弹(元素)来攻击敌人(元素),同时玩家要躲避来自敌人(元素)和子弹(元素),在限定的时间内存活下来(胜利条件)。
升级系统则是通过角色等级提升之后选择一个属性强化、花费资源购买一个升级卡片修正玩家角色(元素)的强度以及赋予一些特性。也就是说,升级玩法以玩家元素为接口,来对核心玩法(战斗)起到改变关卡强度的影响。
武器玩法则是通过强化、改变的方式来影响核心玩法中的武器元素和子弹元素(因为武器可以发射子弹)来改变核心玩法(战斗)中的场面情况,从而带来不同的游戏局面。
关卡玩法包括了选择玩家角色、选择强度、波数推进等元素,这些内容都是为了定制核心玩法(战斗)中的游戏局面和强度而存在的。
而正如上面所说的,为了产生运行时数据,我们也会需要一些“静态数据”去初始化这个“运行时数据”中的一些元素。而这些静态数据,往往是需要策划填表的,所以称为“填表数据”,在许多公司工作流程中定义的“定表头”说的也是设计“填表数据”的结构。
当数据结构设计/拆解得足够清晰之后游戏的玩法也就自然清晰了,因此实际上这部分工作是一个完整的游戏玩法设计工作,所以通常是同一个设计师来设计的。被拆分成系统策划和数值策划工作之后,就需要多花点时间在沟通上,因为这是必须要这两部分策划紧密合作的。
当然,值得注意的是,拆解游戏的过程中拆解游戏元素,更像是一种设计草稿,这是对于原有游戏的结构的一种推测。因此拆解出来的结构,既不一定是原有游戏真实的做法,也不一定是最适合之后开发要用的,所以这里更多的意义是整理思路,在真正动手实现的阶段,我们还需要基于这个拆解,进一步设计数据结构来做到更好的适用于项目级(而非demo级)的结构。
“看破”技巧
当我们真的要开始动手拆解一个玩法,具体到拆解出元素的时候,会需要用到一个“看破”技巧。这个技巧也是对于一些事物的归纳能力——即我们要看穿游戏中很多东西仅仅只是UI或者画面表现不同,可能流程上也会有些不同(流程并不是玩法元素,虽然表现玩法时候需要用到这个技术),它们骨子里面是同一件事情。
比如Brotato中角色升级和购买强化卡片,其实本质上都是一样的东西——他们都是改变了玩家的一些数据。唯一的区别在于它们获取的渠道不同,一个是需要角色每次升级获得1点来解锁,一个则是花费游戏过程中赚取的资源来获取。如果我们将这些资源统一抽象为Currency,而Currency本身是一个Dictionary(Map)结构,Key是货币类别,Value是持有多少,那么这两个过程其实就是完全一样的玩法,让你感觉不同的仅仅只剩下在流程中、UI表现上的不同了。于是,我们看破了一件事情——角色升级和购买卡片是同一件事情(下文会更具体拆解)。
这个技巧在我们拆解游戏的时候是十分重要的,尽管在0到1设计一个(没有参考)的游戏时候他可能不那么有用,但是我们日常工作中、包括激情产生的想做一个游戏的时候,绝大多数的情景都不是从0到1无参考的设计,而是在别人已经有的基础上改进的(这就是拆解,也是本篇的价值所在了),所以“看破”确实是一个十分重要的技巧。
接下去我们就正式开始拆解Brotato的玩法元素了,其实这个拆解要做的事情无非就是3到4件——确定运行时数据→设计运行时数据产生的时间点和方式→判断是否要填表数据→如果需要填表数据就设计这个数据结构:
核心玩法元素:地图
在Brotato中,地图的结构是非常简单的运行时数据,因为在游戏中地图就是一个矩形,不会发生任何变化,也没有阻挡物,所以他的数据包括:
由于游戏中产生地图尺寸的时候仅仅和预设的数值以及玩家的“地图尺寸变化”属性(下文会具体提及)有关,所以不需要“填表数据”,只需要定制一个规则,或者提供一个Config即可。所谓的Config也就是一个默认配置信息,这里面的内容很多是游戏设定的规则填充,与开放给玩家选择屏幕分辨率之类的Config不是同一个东西。
核心玩法元素:敌人
Brotato中的敌人大约有25种,外加树也会被当作敌人处理,一共是26种左右。敌人需要的运行时数据:
敌人的运行时数据是在创建这个敌人的时候被初始化的,值得注意的是,在刷怪时会现在要刷怪的地方标记出来,如果此时有单位(无论是玩家角色还是敌人角色)太过接近(Config配置距离确定“接近”的具体值是多少毫米半径内)会导致敌人不被创建。初始化敌人的时候会根据敌人的配置表,以及关卡的运行时数据(下文会详细提到)算出角色的,所以角色需要一份填表数据,由策划填写(也就是“表头设计”):
当我们在整理到这里的时候,会发现在表里有两个项目:子弹发射器和AI移动配置的类型是问号,因为这2个项目我们要进一步拆解一下,他并不是一个简单的数据类型能够概括的。子弹发射器本身和子弹跟敌人都有关系,所以我们放到下文的《核心玩法元素:子弹》部分再进一步细说,这里我们先就AI移动配置进行深入一步拆解。
敌人AI拆解
当我们熟悉了Brotato之后,可以发现敌人的移动行为大致分为几种:
当然这样的分类只是拆解工作的第一步,因为这些类型中,除了“不移动”之外,都是十分模糊的概括词,没有实际的设计指导意义,所以我们先得继续去看下一步——明确移动需要的数据结构:
以上只是一个构想,所以没有任何数据类型,因为光是构想并不是一个可以落地的设计,所以拆解到这里并没有结束。我们要进一步根据以上的信息和构想,来整理归纳一下游戏中的“进行时”AI的数据,也就是在运行过程中AI需要依赖于什么样的数据来移动,于是,我们先把移动方式进行再进一步的解析:
我们将怪物移动类型归纳为4个类别:
到这里,我们已经不难推断出这个AI的大致的数据结构了:
以上这个数据结构是驱动AI进行移动的数据,他的赋值需要一个规则,这个规则中会依赖到“片段自增id”这项属性,由此来计算当前的数据=f(片段自增id++)。这个数据计算的规则就依赖于不同的移动模式提供的数据,这些都是“填表数据”:
到此,怪物的AI移动已经大致拆解完毕,但是他还缺少一个如何讲这些AI串起来做交互的方式,这个方式我们会在具体实现的时候进一步思考组织,因为光靠现在能拆出来的结构就去组织并不是一件明智的事情——在此之前,我们最好重构一下,也就是看着这些数据进一步抽象一下AI的真正需求。因此到此,我们的拆解工作也就完成了,尽管它看起来还有事情没做,但是实际开发中,事情需要一步步有序的做。
核心玩法元素:主角
尽管当我们打开游戏的UI的时候,就能看到主角的列表了:
如果我们子弹的碰撞判定不是一个胶囊体,那么有可能会因为子弹飞行速度过快,直接穿过了要检测的角色,就导致原本应当发生的碰撞并没有发生,因此我们需要:
这样一来,即使子弹飞行再快,也不会错过应该碰撞到的角色了,而这时候,在这一帧里,世界是静止的(因为是某一帧内,而时间推进又是帧推进,所以“世界是静止的”),这个子弹的上一帧到这一帧的连线便是一条“直线”,恰好符合我们肉眼可见的那个提示的“直线范围”。
当我们建立好运行时的子弹数据表之后,不难看出子弹的模板数据相比运行时,只少4个元素——位置信息,耐久度,剩余时间和创建人,其他的数据都是需要制作“填表数据”来初始化子弹的。
核心玩法元素:掉落物
掉落物的运行时属性仅有2项:
核心玩法元素:武器
武器是Brotato区别于《吸血鬼幸存者》的一个关键元素。在Brotato中,玩家角色可以携带0-12把武器进行战斗。尽管在《吸血鬼幸存者》中,角色也可以同时携带很多武器同时进行攻击,但是和Brotato中的武器不同的是,《吸血鬼幸存者》中的子弹都是从主角身上发出,并且依赖于主角所面对的方向的,brotato中每把武器都是独特的个体,它们仅仅只是坐标和玩家角色的坐标是有个对齐规则的。
虽然从玩家角度看这是一个微不足道的区别,但实际上这却是根本不同的设计,我们完全可以理解为玩家扮演的是一个武器小组,每一把武器都是独特的单位,只是共享了坐标(围绕一个角色)。因为有了这样一个结构,在我们拆解完整个游戏,并进行再设计的时候就可以利用这个性质来选择一些题材,比如一辆冲锋陷阵的吉普车,上面不同的士兵(作为武器)开火攻击敌人,也可以是一个魔法少女,和漂浮在她身边的魔法书、法器等。
武器的核心作用,其实就是一个子弹发射器,无论是远程武器还是近战武器,它的本质都是发射子弹,包括敌人的“发射子弹的AI”,也就是一个看不到外观的武器。那么武器的运行时数据就有:
由运行时数据,我们不难看出填表数据为:图形、瞄准对象、发射范围、开火间隔、动画、子弹和附加效果。在这个结构中有一个“子弹”的结构是BulletLauncher也就是“子弹发射器”,这个结构是用来告诉发射子弹的系统发射子弹的方式的,因为我们发射子弹光靠一个子弹id还是不够的,但是这个结构并不复杂:
核心玩法元素:建造物
建造物是Brotato中的炮塔、地雷等,一些是因为玩家使用了某个武器,一些是因为玩家获得了某些道具之后,每一定时间会在场上生成1个建造物。Brotato中的建筑物主要有:
从每个炮台的作用,我们不难归纳出一个事实——除了地雷之外,其他炮台都能看做“武器”,而地雷本身,则是一个不会移动并且持续时间很长的“子弹”。因此在这里,我们并不需要进一步拆分什么了,因为“建造物”本身并不是一个独特的元素,它只是用别的元素做了一下视觉包装而已。
升级玩法元素:升级内容
游戏中的升级内容表现上有两种:角色等级提升时候选的能力提升和商店里面购买的道具。我们从上面的“主角”中已经可以分析得出,其实这两种升级最终都是改变玩家(或环境)属性的方式来工作的,只是他们的选择出现的机会和选择的价格有所不同而已。因此我们把他们的结构可以定为同一个,只是出现选项的规则(也就是选择的source)不同,与这个结构无关。
(角色升级时候选择的内容之一)
在游戏中升级内容的运行时和填表数据是完全一致的,即直接用填表数据可以获得升级选项,当玩家选择了某个选项,交易成功之后,就会直接立即获得选项内的内容。升级内容的数据结构:
关卡元素玩法:角色选择与解锁
在每一局游戏开始的时候,玩家需要进行一个角色选择,选择角色决定的是一局游戏的初始条件,实际上我们可以把一个角色当做一个道具来理解,只是他是免费购买的,如果解锁了的话。
与装备不同的是,选择角色会同时修改角色若干部位的外观,选完角色之后还可以选择一件初始装备(如果角色允许的话),这也会是在角色数据表中的项目,所以角色的数据表相对于“升级内容”的不同:
在Brotato中,不同角色解锁有不同的的条件,这个条件分为3个大类:
● 初始就送:一些角色只要进入游戏就默认有选择了。
● 通关游戏:危险度几的时候通关游戏解锁,值得一提的是第一次挂掉相当于危险度-1通关。
关卡玩法元素:危险与波数
游戏中设有危险度和波数两个元素,危险度相当于玩家在开始游戏的时候选择一个难度,危险度默认是0,最高5,需要玩家1级1级的解锁出来,通过危险度0可以解锁危险度1,以此类推。危险度的作用是与刷怪挂钩,不论刷怪数量还是刷出来的怪的内容,都会收到危险度影响:
当我们拆完游戏中的系统和元素之后,就可以开始进一步分析,基于这些系统和元素,提炼出可以发挥创意的点,来进行进一步创作,把游戏变得更好玩。这样发挥的创意因为是紧紧围绕着玩法的核心展开的,所以不容易过于天马行空,也不至于破坏游戏的玩法结构。提炼游戏中可发挥创意的点,通常有3种方法:
把性质变成属性
所谓把性质变成属性,就是在游戏中找到游戏规则下天然形成的一些效果,这些效果通常可以描述为一个数值。
比如在《贪吃蛇》游戏中,蛇吃到食物就会增加一节身体,这是一个规则产生的性质,我们可以把他理解为“蛇吃到食物的时候有100%几率增加1节身体”,在这里我们看到了2个数字,一个是100%概率,一个是1节。其中1节身体是贪吃蛇的一个基本规则,是一个规则级参数,因此如果我们改动它,就会牵一发动全局——贪吃蛇原本的规则是:移动时,将最后一个格子(俗称“尾巴”)挪到移动方向上的下一格,如果吃到食物,则不是挪动“尾巴”,而是复制一个“尾巴”到移动方向上的下一格作为头部。这样一来食物增加1节身体的规则其实是固定的,如果增加2节,就有第二节加在哪儿,加完以后会不会直接导致游戏失败等多重问题,这也是去动规则级参数(这个错误行为)产生的不良后果。所以我们能动的参数,是那个提炼出来的100%——我们可能甚至从没想过贪吃蛇的吃食物增加体长是概率性的,但是如果概率是100%确实效果和原来是一样的,谁又知道原来是不是真的有概率,亦或者概率100%才是对的,从反推我们无法得知原来的设计想法,但是可以确定的是——这样设定之后,确实扩展了一个属性,因为既能完整的保证原来的效果,还能在原来效果基础上做了一个增加——达到这样的效果,就是成功的提炼了一个新的属性。
我们再回到Brotato中看,大多属性都是按照Brotato的性质所提炼出来的,比如攻击速度——原本我们就需要做2次开枪之间的一个CD设计,确保不是每一帧都发出子弹,而这个CD完全可以是1秒作为规则,但是这个1秒并不是一成不变的,他是0.8秒,1.6秒都没有问题,于是可以把他提出来作为一个属性,就叫“攻击速度”。包括地图尺寸、大树生成率等我们在界面上无法查阅的属性。
寻找Trigger
所谓寻找Trigger,就是根据游戏中的事件可能存在的触发点来寻找灵感,通常来说一个游戏的规则中,总是存在着一系列“阶段性”的转变时机,这就是“触发点”。
● 比如在《俄罗斯方块》游戏中,每当方块落定之后,就是一个触发点(Trigger),会触发一个“方块落定”事件,在这个事件里面会执行:方块落下了,夺走玩家操作权。
● 检查是否符合失败条件,如果达成就GameOver了。
● 最后创建约定好的下一个方块到关卡里。
我们可以看到这个Trigger执行了4件事情,在对战的俄罗斯方块,如《街霸方块》《噗哟噗哟大战俄罗斯方块》等多人聚会游戏中,策划利用了这个Trigger,在原来的基础上追加了2条事件:
● 如果达成消除,则会为对方添加若干干扰棋盘。
● 如果方块组合出角色的必杀技,则会大幅度干扰对方棋盘。
就这样,简单的创意就做出来了——在俄罗斯方块的基础上,增强了对战的干扰(早期版本俄罗斯方块可以双人进行,但是没有任何对战机制)。
在Brotato中,我们也可以寻找这样的触发点,最基础的触发点,就是当子弹命中时,根据这个子弹命中时,可以做出很多花头,使得子弹看起来多姿多彩,Brotato中的一些原有的独特设计包括且不限于:
类似的利用子弹命中时这个Trigger产生的各种各样的效果,是可以设计出很多的。
外接一个辅助玩法
外接一个辅助玩法是最常见、也是最简单粗暴有效的一种扩展游戏(很难谈得上是“创意”)的手法,即在游戏现有的元素基础上,我们追加一层玩法去强调某个玩法。这个做法的困难在于一不小心就容易搞出“多核系统”(参见《Brotato的系统拆解》章节)来,导致游戏的玩法失衡并造成变味。
在常见的页游、手游中,这样的做法比比皆是,包括著名的MMO端游《魔兽世界》中,围绕着装备元素展开了如附魔、珠宝、幻化等玩法,这些都是将一个元素进一步拆多个系统的做法。
在Brotato中藏着一个并不明显的“外接辅助玩法”,就是武器合成系统,2把完全一样的武器可以合成1把更高级的武器。由于这个玩法所需要的元素很好的“隐藏”在了核心玩法元素中,因此属于融合手法比较高明的,一般不推荐这样来扩展玩法,除非商业化需要。
才13481917497
我超级想玩土豆,兄弟,可以,猫