设计游戏DEMO首先要做什么?就是建立数值框架。如果是格斗游戏,第一步就是建立战斗数值框架。
AT 最近在尝试制作一些塔防 DEMO,在数值框架的搭建方面积累了一些经验。在本文中,我将直接以示例的方式总结如何从零开始搭建游戏的数值框架。
格斗游戏的第一步,就是确认攻防关系,以及游戏的基本节奏。AT君做的是一款塔防游戏。简单来说,玩家的化身就是一座塔,不断攻击从四面八方逼近塔的一波波怪物,直到一关的所有波数都被击退,或者怪物将他们击溃——换句话说,这是一款有点类似于《滩头阵地》的游戏,只不过塔是自动攻击的。
AT首先确定的就是单关时长。由于这是手游的DEMO,所以单关时长必须在3分钟以内。那么接下来的3分钟,玩家要经历多少波呢?这是更加贴身的体验带来的决定:每波15秒,既不会太密集让人喘不过气来,也不会太松散让人无趣。6波普通战斗之后,还有30秒的BOSS波,这样一关时长120秒,满足了3分钟以内的标准,也为以后的扩展留出了一定的空间——8波甚至9波也可以,但因为目前的目标是做一款最小化的DEMO,所以AT认为这一波6+1,总共120秒是可以的。
这将我们带到了数字框架的第一部分:每波 15 秒,每级 120 秒。
15秒一波会发生什么?最基本的就是怪物冲向玩家,玩家击杀它们。那么一个标准的无伤模式就是,当最后一只怪物冲向玩家时,被玩家全部击杀,然后立即刷新下一波。由于玩家的英雄站在地图中间,我们可以得出:
【结论2】假设标准怪物的移动速度为1,地图半径为15,英雄的攻击半径也为15。
接下来要决定的是标准波有多少怪物,以及玩家的英雄需要攻击多少次才能杀死每个怪物。这是建立游戏的基本节奏,因此非常关键。AT 想要一款具有“无双”风格的游戏,怪物越来越多,被玩家的英雄杀死。这是一款非常爽快的游戏,因此应该有很多标准怪物。AT 拍着大腿,决定标准波应该有 15 个怪物,并且每个后续波都比前一波多 5 个怪物。总共有 7 波,因此分布如下:
15 个标准怪物
20 个标准怪物
25 个标准怪物
30 个标准怪物
35 个标准怪物
40 个标准怪物
1 标准BOSS
我们可以看到怪物数量增加的非常快,而且最后一波标准怪物的数量是第一波的两倍多,所以肯定能够达到非常爽快的目的。当玩家用标准英雄玩这个关卡时,得到的就是一个标准模型。
我们假设一个标准怪物的血量是40,那么第一波15个怪物的血量是600。玩家的英雄需要在15秒内打出600点伤害,因此我们可以得出标准英雄的DPS是40。那么标准英雄需要打多少次才能打中一个标准怪物呢?至少2次,因为肯定有比标准怪物血量少的怪物或者比标准英雄每次攻击伤害高的英雄。所以我们可以得出:
【结论3】假设某标准怪物生命值为40,某标准英雄单体伤害为20,攻击间隔为0.5秒。
我们确定了英雄攻击力和怪物生命值的关系,接下来要确定的就是怪物攻击力和英雄生命值的关系。标准怪物都是近战,那我们以什么为标准呢?由于第一波怪物肯定会被标准英雄无伤击杀,所以英雄的死亡时间肯定在15秒到120秒之间。纯闲的玩家肯定看不到BOSS那波,所以死亡时间可以缩短到15秒到90秒之间。AT一拍大腿,觉得标准英雄的死亡时间应该是60秒,也就是第四波怪物刷新的时候。由于怪物攻击英雄的DPS会随着数量的减少而不断降低,而AT又把高深的数学都忘光了,经过计算和测试,结论是:
【结论4】假设英雄生命值为1000,标准怪物DPS为5。
接下来是BOSS。AT君把标准BOSS的生命值设定为45个标准怪物的生命值,也就是1800(相当于第七波的总生命值)。在移动速度跟普通怪物一样的前提下,可以看出它靠近英雄就会损失600点生命值。如果玩家在BOSS波次中什么都不做,只是普攻挂机的话,是一定会被BOSS击杀的。由于我们设计BOSS波次在30秒内完成,那么BOSS每秒的伤害至少也要1000/15=66.6666点。AT君一拍大腿,设定为100。这样一来,假设玩家的英雄满血进入BOSS波次,然后什么都不做挂机,25秒后游戏就会结束,BOSS还剩下800点生命值。所以我们得出:
【结论5】某标准BOSS生命值为1800,移动速度为1(与标准怪物速度相同),DPS为100。
如果我们换个角度思考:假如我们要求BOSS一波在25秒内结束游戏,前提是BOSS的移动速度为1,那么如果我们要求BOSS在击杀玩家的时候还剩下一半的生命值,则可以得到BOSS的生命值=25秒*英雄的DPS/1/2=25*40*2=2000生命值,DPS=英雄的生命值/(25秒-BOSS的移动速度*地图半径)=1000/(25-1*10)=100。我们只要求BOSS一波在25秒内结束,BOSS还剩下一半的生命值,移动速度为1,那么就可以得到BOSS的生命值和DPS,并且能够得到理论上的极值了。
我们可以在这里总结一下获得的数据:
标准怪物:
标准BOSS:
标准英雄:
标准级别:
这样我们就得到了一组最基础的数据,游戏就可以玩了。我们来回顾一下我们是如何获得这些内容的。我们经历了几个步骤:
根据单场游戏时长以及想要的游戏节奏=>确定移动速度、地图大小、波浪间隔;
根据怪物狩猎风格和标准怪物生命值,计算怪物数量和英雄DPS。
根据我们认为合适的英雄死亡节奏=>推导出怪物的DPS;
根据我们认为合适的BOSS波节奏=>获取BOSS属性;
这样,我们只需要改变以下几个基础值,其他值也会随之改变:
我们会发现,虽然我们在构建战斗数值框架,但是直接与攻击力、攻速、生命值相关的数值其实非常少,我们假设为基本单位的只有一个标准怪物生命值、标准英雄生命值,一切都是基于游戏的基本节奏来计算的。我们会发现,单局游戏的时间、波数、挂机死亡的时间都是时间,也就是节奏,这些都是我们需要确定的数据,这些是我们想要产生的体验,最终的攻击力和防御力数值都是为这些服务的。我们在看别人的游戏时,经常会看到这些结果。经常会有人长篇大论地分析别人的游戏数值,比如这个单位的攻击力是多少,但是如果不能把握“为什么这些数值要这样设定”的原因,就是在做本末倒置的无用功,说白了还是处于外行水平,只是在看热闹而已。 因此,对于一个战斗数值框架来说,首先要设定的是基本的“节奏”,它由空间和时间共同决定,其他的数值基本都是自然而然的,只要一个确定了,其他的就可以计算出来。
总之,最重要的是方法论,要保证每一个数值维度的设计都是合理的,都是基于事实的,而不是仅仅凭感觉。这样后面做调整的时候才有方向。如果出了问题,可以不断验证和调整这个数值框架,避免像AT君一样陷入“傻老婆揉面”的困境——一切都凭感觉,最后只能是面团多了就加水,水多了就再加面团,然后就是无尽的测试地狱。平衡不可能全在纸面上,必须靠测试来调整,但是那些没有理论基础,只靠测试来调整平衡的绝对是愚蠢而不靠谱的做法,等着被程序员、测试员和老板骂死吧。
说了这么多,相信很多人已经开始怀疑一个问题了:现在的模式没法玩,英雄只能正常攻击,60秒后就会死亡!怎样才能获得最后的胜利?
重头戏来了——铛铛铛,这款由AT设计的游戏是一款TCG游戏!玩家需要装备一副卡牌带入游戏进行游戏。和传统的TCG一样,每张卡牌需要支付一定的费用才可以打出,其余能力则要靠卡牌来实现。那么我们需要解决一个问题:
1 法力值多少钱?
任何问题都有其基本起源,我们假设1点法力值等同于1个标准怪物的生命值,那么我们可以得到:
【结论6】假设1点法力值等同于标准怪物的1点生命,那么用于攻击的1点法力值等同于40点伤害。
游戏中有15+20+25+30+35+40个标准怪物,以及一个生命值等于45个标准怪物的boss,总生命值为210*40=8400。游戏时间为120秒,普通英雄一共造成120*40=4800点伤害,剩下的3600点伤害必须从卡牌中处理。我们可以得出,如果想要不受到任何伤害就过一局,需要3600/40=90点的消耗。一局游戏时间为120秒,因此得出下一个结论:
【结论7】每1.3333333秒产生1个手续费点。
也就是说如果玩家带的是10费的卡牌,那么平均每13.3333秒可以打出一张牌。我们可以根据玩家卡组的平均费来计算玩家打出一张牌需要多长时间。由于AT不希望游戏太激烈,所以一局游戏最好不要打出超过30张牌。平均每4秒打出一张牌,平均费就是4*1.33333=5.3333333,也就是我们标准卡组的平均费。
基于结论6,我们可以推导出一系列其他卡牌设计标准。比如一张增加100%伤害的卡牌,1cost的数值能持续多久?按照标准英雄计算是1秒,该英雄的DPS是40,这个效果只要持续1秒就能提供40点伤害。只要伤害以各种方式增加,我们都可以以标准英雄为模板来计算其收益。
另外一个和英雄的生命值有关,比如一张效果为X的卡牌给英雄恢复100点生命值,那么X应该是多少?一张效果为0的卡牌给英雄造成100点伤害,消耗X点生命值,那么X应该是多少?由于英雄的生命值是另一个独立的价值标准,因此也需要一个依据。
我们有个原则,如果玩家只带恢复生命的卡牌游戏搭建,那肯定是输的。我们知道BOSS每秒的伤害是100,那么每花费1点恢复的生命值应该小于133.333333,否则玩家就只能靠治疗卡牌把BOSS磨死了,所以我们可以粗略地拍拍大腿——
【结论8】用于恢复英雄生命值时,每花费1点应该恢复100点生命值(且不能高于133.3333)。
会出现越来越多、越来越复杂的情况,让我们很难预估1点cost应该产生多强的效果。比如召唤防御塔的平衡标准是什么?召唤变道墙的平衡标准是什么?控制类法术的平衡标准应该是什么?游戏中永久提升英雄能力的平衡标准是什么?但只要我们能找到方法论,就能先得出一个我们认为正确的平衡标准,然后通过不断的测试,反复检验我们的平衡标准。如此反复迭代,最终就能得到一款游戏的最终价值。整个框架都是从最基础的原理一点一点搭建起来的动态框架,而不是到处乱拍的数字。
关键在于方法论,就算错了也可以验证,没有方法论我们甚至不知道什么是对什么是错,也就没有验证的基础。游戏中最终的数值可能不是绝对平衡的,但是有一个框架可以保证数值不会崩盘。比如说,假设我们一时兴起设计了一张1点法力值回复200点生命值的卡牌,那么这个数值就崩盘了。如果没有框架,只靠测试,就算我们经过9981个难度确定是这张卡牌导致游戏崩溃,也不知道要不要改成133.3333以下才不至于崩盘,只能靠调整之后无休止的测试,简直就是地狱。框架可以帮我们逃离这个地狱,这就是框架的价值所在,基础扎实了以后要补的坑就少了游戏搭建,否则害人害己害团队害老板。