分类
塔防 游戏设计

塔防基础数值模型(二)

这一篇是《塔防基础数值模型(一)》的续集,有一些前文中提过的概念哦!^o^

本文讨论一些进阶的机制设计,可能会影响到怪物与防御塔的行为,从而产生不同的策略变化。

1,飞弹行为方式

飞弹的行为方式简单来说可以分两种,第一种是追踪目标的,第二种是不会追踪目标的。会追踪目标的飞弹没有碰撞体,只会与其锁定的攻击目标碰撞,只要其速度大于怪物的移动速度,就必然会命中,这类似于《魔兽世界》中的寒冰箭、闪电箭等法术。相当一部分塔防的飞弹使用的是这种飞弹。

不会追踪目标的飞弹会在每一帧,会一切敌方单位进行碰撞检测,若没有碰到任何怪物则有可能飞出屏幕外,这种飞弹更类似于2D射击游戏中的飞弹。《炫光塔防》中的飞弹都是这种类型。

第一种飞弹较为容易估算其数值的平衡性,尤其是当飞弹速度为无限大时(想象一下《星际争霸》中的人族枪兵)。这种飞弹一般移动速度都非常快,若较慢的话则可能永远追不上怪,或者在击中目标前怪物已经撞到了基地上。

第二种飞弹会增加游戏的策略性,虽然这会使得战斗结果更加难以预测。如何利用炮塔的索敌逻辑提高其命中率就成了玩家在部署这种防御塔时要面对的一个很重要的抉择。

第二种飞弹面临着一个问题。传统炮塔的索敌范围与射程是一致的,而这种飞弹的射程不一定会与传统炮塔的索敌半径吻合,这意味着子弹可能打到索敌半径之外的敌人。这种游戏动态有可能被滥用从而导致不可意料的结果。解决方案无非是修改索敌半径或飞行距离,我们先来看看第一种解决方案——使炮塔的索敌范围无限。显然这会大大降低游戏的难度,不过也有对策,比如己方的防御塔能够阻挡己方防御塔的射击。解决方案之二则是使子弹的伤害会衰减,就像现实生活中的子弹威力一样,飞的越远伤害越低。这个概念易于向玩家解释,但如何在画面上表现则是一个问题。

2,炮塔转动速率

玩过《EVE》的朋友会对这个概念相当熟悉。炮塔转动速率就是指炮塔在指定时间内旋转的角度。在一些游戏中,只有怪物处于炮塔正面时炮塔才能开火,还有一些游戏炮塔会不断尝试修正角度,但会在修正角度的时候一直尝试开火。在较为简易的塔防中这个值可以为无限大,即炮塔可以瞬间从一个角度旋转到另一个角度,但这会大大破坏游戏的沉浸感,因为这样一来就根本不像一个炮塔了。

当飞弹不会追踪目标时,炮塔转动速率对命中率的影响非常大。一般的炮塔并不像玩家一样会预判,如果采用了第二种飞弹,是否要结合炮塔转动速率以及怪物的移动速度来为塔制作预判AI是一个设计者需要思考的问题——实际上,我本人认为并不需要。如果设计者是为了提高炮塔命中率的话,不如干脆用第一种飞弹,不是吗?^o^

采用炮塔转动速率的设计也会使玩家面临一个战略选择,这与EVE类似:距离越近的怪线速度越大,越难以瞄准,因此如何尽量降低怪的线速度就成了玩家需要面对的一个重要抉择,而且学习成本很低,因为玩家很容易观测到持续射击的炮塔的旋转速率。《炫光塔防》在这方面做得相当不错。

3,飞弹的溅射半径

指的是飞弹在击中目标时会对多大范围内的敌人造成伤害。这是用于模拟现实中的巨大爆炸对多个附近的单位造成伤害的机制,已经在目前的RTS和塔防游戏中普遍采用了。其作用原理为飞弹在要造成伤害时,搜索自身周围一定范围内的所有敌方单位并对其造成伤害。

进阶一些的版本,会根据目标距离爆炸点的远近造成不同的伤害,这更加拟真,但很难让玩家直观的理解,因为爆炸半径的阶梯很难直观观测到,所以在塔防游戏中这种设计意义不大。

溅射半径是提高有效攻击规模的主要方式之一。但由于其会对溅射半径内的所有敌方单位造成伤害,因此怪物的密度越高其收益也越大。我们之前在制作《阿巴顿之战》的时候就遇到了这个问题,使得拥有溅射半径的防御塔成为了游戏后期的最优解。后来我们加上了伤害个数限制这一借鉴自《魔兽世界》的机制,但效果也不是很好——因为玩家依然很难观测到。《魔兽世界》这个机制本身也不是一个好解决方案。

我之前写过一篇关于溅射伤害的文章,见这里

我一直认为溅射半径并不是提高有效供给规模的好方法。一种代替手段是散弹,即用多个无溅射半径的小飞弹四散炸裂来造成多次伤害,这种做法不会像溅射半径一样由于半径过大而产生穿透效果,最大伤害值易于估算,而且玩家也容易理解。散弹可以有多种应用方式,可以直接从炮塔中发射而出,也可以当某个飞弹爆炸后产生一系列子飞弹,随着应用方式的不同能够诞生出种种花样的弹幕来哦!

还有一种代替方法是弹射,类似于《星际争霸》中飞龙的攻击方式,或者《魔兽世界》中的闪电链,或者《DOTA》中巫妖的大招。当能够产生弹射的距离小于怪物间距时,弹射就会发生,因此相当易于估算伤害值,而且伤害最大值可控。而且其还有一个重要意义是可以穿透,因为这种飞弹都是传统的第一类飞弹,因此与散弹结合也可以产生很有趣的动态。

4,飞弹的销毁条件

飞弹的销毁条件大多与碰撞相关,只不过碰撞的目标不同。如果我们用第一种飞弹,则飞弹都是在击中目标后销毁。当我们采取第二种飞弹时,它的销毁条件就变得花样更多——我们可以为其设定摧毁条件为碰撞过的敌方单位个数,这样一来这个飞弹就能像狙击枪子弹一样穿透很多个敌人并对其造成伤害了。

还有一种销毁条件为对目标点攻击,即飞弹到达了指定位置就会爆炸。这类似于飞机投弹,有可能当飞弹爆炸时,目标已经离开了飞弹出发时锁定的位置——就像《国王守卫军》中的大炮。这种销毁条件往往与溅射伤害搭配使用,但这很容易成为统治性策略,在《国王守卫军》中玩家很容易的就能把大量的怪物用军队抵挡在一个小范围内,然后靠大炮产生超高的有效供给规模而迅速摧毁怪物——说通俗点就是“拉到一起A了”。

销毁条件的不同也能产生大量的策略性。如果是穿透性子弹,玩家会尽力将其安排在弹道能够贯通所有敌方单位的位置上。可以参考《保卫萝卜》中的三叶草塔、导弹塔和飞机塔。

5,炮塔的最小射程

RTS中很多单位拥有最小射程的设计。当敌人距炮塔的距离小于最小射程时,炮塔无法对其发动攻击,就像敌人距炮塔的距离大于最大射程时一样。若我们采取了第二种飞弹,则最小射程会显得十分尴尬,因为飞弹在这个范围内也会与敌人碰撞,因此有最小射程的防御塔往往采用的是第一种飞弹。

有一个有趣的例子是植物大战僵尸中的胆小蘑菇,当他们的附近有敌人时它们就会缩进地里不敢攻击。这种机制也产生了相当有趣的动态,并且比生硬的最小射程机制更容易让玩家理解——不过在俯视图的2D塔防中这并不是很容易应用。

结合这些东西,我们能够产生出及其华丽的各种攻击方式来,但这并不是本文的目的。塔防是策略游戏,因而如何使得不同的攻击方式有其策略上的意义才是最重要的,单单的追求奇葩的攻击方式虽然也能吸引眼球,但长久看来并不能使得游戏更有趣。

分类
塔防 游戏设计

塔防基础数值模型(一)

一直以来都在尝试自己构建一个塔防的数值模型,现在感觉已经理解的差不多了,所以尝试整理一下。 首先要说的是,不同的塔对抗不同的怪会有着不同的战斗效率,因此一个详尽的数值模型表应该是一个二维表,可以评估每一种塔对每一种怪的战斗效率,这样就能找出是否有统治性策略的塔,从而对游戏的平衡性进行游戏。

1,塔

塔的基础属性有以下三部分:

  • DPH:单次攻击的伤害,这里不考虑暴击与攻击上下限浮动。
  • 攻击规模:一次攻击能够攻击到多少个怪物。
  • 攻击速度:单位时间内攻击次数,我们可以1秒或60帧来计算,单位时间同时还会用于怪物移动速度的计算。单位为次/秒。
  • 攻击间隔:攻击速度的倒数,指塔两次攻击之间的时间间隔。单位为秒。
  • 射程:攻击的最大距离。有的游戏中的塔还会有最小距离的设计。

2,怪

怪的基础属性有以下几部分:

  • 生命值:生命值≤0时怪物会死亡。
  • 移动速度:单位时间内移动的距离,可以以1秒或60帧来计算。
  • 时间间隔:若某一类怪是以一组的形式登场,每一只怪与下一只怪刷出时间的间隔。同上,时间单位也可以是秒、毫秒或帧。
  • 空间间隔:时间间隔*移动速度。该组怪在移动时每个怪与下一个怪的间距。
  • 个数:若某一类怪是以一组的形式登场,这一组共有多少个。

3,runtime属性

以下由塔和怪的基础属性计算出来的,在游戏过程中动态变化出来的属性:

  • 有效路径覆盖:指的是某个怪在塔的射程范围内所移动的距离。
  • 通过时间:指的是某个怪通过有效路径覆盖所要消耗的时间,该值=有效路径覆盖÷移动速度。
  • 过量伤害:指的是某个塔在击杀某个怪时浪费掉的伤害值。计算方法为怪的生命值对塔的DPH求余数,若为0,则过量伤害=0;若不为0,则=DPH-余数。
    例:塔的攻击力为3,怪物生命值为6,则过量伤害=0;若怪物生命值为7,则过量伤害=2。塔的攻击力为100,怪物的生命值为20,则过量伤害=80。
  • 击杀次数:指的是某个塔击杀某个怪所需要的攻击次数。计算方法为怪物的生命值/塔的DPH,小数部分向上舍入。
  • 例:塔的攻击力为3,怪物生命值为7,则击杀次数为3。
  • 过量伤害效率:这个值为过量伤害/(DPH*击杀次数),指的是塔击杀某个怪物所浪费的火力所占总火力输出的百分比。0<=这个值<1。
    例:塔的攻击力为3,怪物生命值为6,则过量伤害效率=0。若怪物生命值为7,则过量伤害效率=2/9。若塔的攻击力为100,怪物生命值为20,则过量伤害效率=80/100。
  • 击杀时间:指的是某个塔击杀某个怪所需要的时间,计算方法为击杀次数*攻击速度。
  • 击杀距离:指的是从开始攻击某个怪物到打死这个怪物,这个怪物所走的距离。计算方法为击杀时间*移动速度。
    结论1:若击杀距离>有效路径覆盖,则一个怪也打不死。这个很好理解。
  • 若塔打死了怪物组的第一只怪后,第二只怪还没有进入有效覆盖路径,则该怪物组无论有多长所有怪都会打死,这引出了结论2:若击杀距离<有效路径覆盖且击杀距离<空间间隔,则整个怪物组都会被消灭。
  • 麻烦的是第三种情况下,防御塔能打死几个怪。
    
    012345
    怪    塔
    
    看上面的例子,假设有效覆盖路径为5,击杀距离为4,怪物间距为3。当塔打死了第一个怪的时候,怪物死在了4的位置,第二个怪则已经进入有效覆盖路径1了。当第二个怪被打死在5上的时候,第三个怪走到了2。第三个怪距离不够4了,无法被打死了,因此一共打死了两只怪,计算公式为:
    
    (有效覆盖路径-击杀距离)/(击杀距离-空间间隔)
    ※两个括号中的值都必须为正。
    
    这就是结论3
  • 怪物组强度:这个值等于怪物的HP*怪物的移动速度/怪物的移动间隔。HP的单位为血,移动速度的单位为距离/秒,移动间隔的单位为距离,因此这个值的单位为血/秒
    这个值的意义在于,上一条中的击杀时间只能计算单体攻击的防御塔能否阻止某一个怪物组的通过,却无法计算某个怪物组能否在范围伤害的防御塔的进攻下通过。有了这个值和下一个值,我们就能进行计算了。
  • 有效DPS:这个值在粗略的情况下可以用DPH*攻击速度的方法来计算,但这并不精确,这是因为过量伤害的存在,所以正确的算法是DPH*攻击速度*(1-过量伤害效率)。DPH的单位为血,攻击速度的单位为1/秒,因此这个值的单位为血/秒
  • 若这个值高于怪物组强度,在不考虑攻击规模的情况下,则理论上怪物组一定可以被该塔消灭,即便是在无限长的情况下。
  • 有效攻击规模:这个值因塔的攻击方式而定。在我们仅考虑1个塔对1种怪的时候这个值较为容易计算,而在情况复杂时则难以计算。这个值也是一直以来最麻烦的所在。为了更加方便的估算这个值,我采取以下简化了的防御塔与怪物攻击模型:
    假设防御塔占1个格子,他的周围有8个格子,怪物会从这8个格子中走过,并且怪物同时只会存在在一个格子中。在这种模型中,怪物的移动速度就被替换成了从一个格子走到下一个格子需要的时间的倒数。这种模型的方便之处在于能够简便地指出塔在攻击的一瞬间,每个怪都应该在哪个格子中,这样就能算出有效攻击规模了。
    
    怪 怪 怪
      
    怪 怪 怪
    
    假设某种塔在攻击时,可以对某一个格子内的全部怪物造成伤害,则攻击规模等于那个格子中的怪物数量。假设某个塔能够同时对周围8个格子造成伤害,则攻击规模等于8个格子中所有怪的数量。
    进一步的,若有效DPS*有效供给规模>怪物组强度,则在怪物组长度无限的情况下,也无法通过这个塔。

以上为我能想到的塔防的基础数值模型,可以用来估算绝大多数塔防游戏中塔与怪物组对抗的结果。由于本文已经很长了,还有一些更复杂的涉及塔与怪行为的内容我打算再另写一篇文章。

分类
塔防 星际争霸 游戏设计

《虫子爱水果》原型的问题与对策

在牛牛君的帮助下,放置型塔防《虫子爱水果》的原型出来了,核心玩法上问题不大,扩展空间也很足,不过不出意料地遇到了游戏目标的问题,需要解决。

问题1

游戏目的不明确,玩家并没有长期目标,也无法明确得知自己的进度。

既然保护基地不再是最终目标,我们需要一个其他目标来代替这一点,并且同样能够产生玩家想要追求更强大的塔以及优化更好的防御阵型的动态。

也就是说我们依然要提供足够的挑战,让玩家有理由去获取更多的进度,并获得奖励——打个比方,就像是一连串的面包屑,但要美味而又不刻意。

以下几种做法都是可取的:

  • 不断提供任务,利用任务引导玩家。任务明确的指出了挑战的内容以及报酬,但如果要做的好需要复杂的任务系统作支持。目前可以用来做新手引导以及提示较为长期的游戏目标。
  • 利用新的游戏内容来奖励玩家,鼓励玩家获得进度——也就是科技树,或者是玩家等级解锁新内容。

问题2

目前彻底随机刷怪的做法并不可取,这种挑战混乱而无法预测,由于塔防是一个策略游戏,不能预测会毁坏掉策略游戏的沉浸感。

玩家的能力已经是随机的了,若挑战也是随机的,那么就会变得很糟糕。我们必须给玩家提供明确的挑战,从而让玩家有针对性地去优化自己的战略配置。

再一个问题是,完全随机的怪物无法明确的表明当前玩家挑战的游戏难度,想要与他人比较也很难。如果有一个公认很强的BOSS,玩家很容易结成社群讨论如何打败它,而如果挑战是完全随机的,玩家只会想方设法找出最弱的怪物组合。

若玩家在某次挑战中失败,也没有问题,可以随意的重试,或者回到之前的关卡去练级,这符合放置性的玩法。

然而这并不意味着完全放弃随机刷怪,随机依然可用,但要有让玩家能够主动选择挑战。

参考Roguelike类游戏的探险,玩家可以前进或后退以挑战不同的怪物。

解决思路

在目前的架构上,引入BOSS系统。玩家的最终目的为击败所有BOSS。刷怪器的不同组合会引出不同的BOSS,玩家必须自己尝试不同的组合,我把这个叫做“BOSS配方”系统。BOSS会代替最原始的白送钱的弱怪。BOSS会周期性的登场,并且有专门的计时器。漏掉的BOSS会直接摧毁基地,从而使玩家损失刷怪器,这意味着刷怪器配方的改变。BOSS会奖励大量的金钱。

下面让我们来分析一下这个设计。首先BOSS的周期性出现给了玩家不断的挑战,平时的怪由于是一直在刷,很弱,玩家不怕,基本就是白送钱的,很无聊,因而游戏的主要挑战就变成了在周期内做好迎战BOSS的准备。一旦BOSS被打败能够Farm,它就成了奖励巨额金钱的绝佳来源,玩家依然会不断的刷它。由于玩家能够看到BOSS还有多久会刷出来,也会不断兴奋地等着看BOSS出来,还提高了游戏的成瘾性。配方还会促进玩家间的交流,以及有目的性地去专门刷出某一种怪物来。这都是我从《彩票塔防》上学来的知识!感谢那些韩国人!

由于游戏的目标是击败所有BOSS,因此玩家需要不断的去尝试刷怪器的各种组合,这给了玩家很大的探索性与收集性,并且不同的BOSS往往需要特殊的战术才能打败,也大大提升了游戏的耐玩度。当然,这需要BOSS图鉴的配合,以及明确的指出游戏目标——这两者显然都能在图鉴内完成。

若图鉴被全部完成,则可以推出二周目,只通过修改数值就能大大提高末期游戏的可玩性。

由于每个刷怪器都会刷某一种怪,因此这就可以作为BOSS的配方表。把按照需要刷怪器数的不同进行简单分类,如3、4、5、6(这让我想起了很久以前非量贩式KTV的点歌单,会分3字部,4字部,5字部等等,也许“BOSS点歌单”这个叫法比“BOSS配方”更合适,笑),然后再在每一种内进行怪物的组合,最终决定出来刷的是什么BOSS,或者按照刷怪器的级别来进行组合,都是可取的。不一定所有配方都能刷出BOSS来,这样也能让玩家去不断的尝试可行的配方。这样在大大降低普通怪数量的同时,大大丰富了BOSS的种类,同时普通怪虽然数量少但由于有随机技能也不会显得很无聊,而且后期更新新的BOSS十分方便。

按照我目前的分析,这个“BOSS配方表”的设计能够解决目前面临的中期与长期目标不明、挑战混乱而被动、进度不清楚的这些问题。