分类
塔防 游戏设计

塔防基础数值模型(三)

一开始没想写这么多的,没想到居然写到第三篇了。这里是第一篇第二篇

在这篇文章中我随便写一些我能想到的提高游戏策略性的设计。好了,开始吧!^o^

脱战

这是从《魔兽世界》中借鉴来的概念。当角色与敌方单位互相产生效果时,就会进入战斗,而当一段时间内没有互相产生效果时就会脱离战斗。这个概念可以引申到塔防上,比如在战斗中会持续不断地提高战斗效率的塔,这样玩家就会尽量将其安排在战况最激烈的地方,确保其一直处于战斗状态。反过来还可以设计一种在脱战的时候不断地积蓄力量,在进入战斗后一下子释放出来的防御塔,这种塔可以放在远离战线的地方,保卫玩家的基地,确保其能消灭漏网之鱼。

塔是否在攻击中是十分容易观察到的,因而这一机制的学习成本极低,不用太浪费了。

同时存在飞弹数

在一些纵版飞行射击游戏中,会存在同时存在飞弹数的限制,比如说如果画面上已经存在了3个玩家发射的飞弹,则玩家无法再发射新的飞弹,直到3个飞弹中的至少1个被销毁。这种机制产生的动态就是只有当玩家距离敌人足够近的时候才能发挥最大效率的火力,但距离敌人越近也就越危险,从而产生了一个有趣的选择。

塔防中也可以借鉴这一点,但如果塔不会受到怪物的攻击,则其效果就差了一些,因为这一机制并没有带来缺点,玩家只会尽力的将其摆放得靠近敌人。另外这一机制很难观测到,这是因为射击游戏玩家只有一个化身,玩家会把相当大一部分注意力放在飞弹上,而塔防中塔的数目众多,且都在射击,玩家不会很用心的观测飞弹。

然而如果是塔能够被怪攻击的游戏,依然有一定的借鉴意义。

击杀时触发的特效

第一篇中说过,DPH越高的单位越容易产生过量伤害,这是其缺陷。然而,容易产生过量伤害也就意味着其击杀敌人的概率更高,因此在击杀时触发的特效能够弥补高DPH防御塔容易产生过量伤害这一缺陷。

光环

光环(Aura,或者叫“灵气”)是一个传统设计了,即在某个单位周围的一定范围内的友军能够持续地受到其提供的加成。《宝石塔防》可谓将光环的机制发扬光大了。由于提供光环的塔往往本身没有战斗力,因此如何安排其位置使其产生1+1>2的效果就成了一个很有趣的抉择。

光环不一定非得要是一个圆形的。也可以是线性或者其他奇形怪状的形状,只要易于让玩家理解的问题都不大。

组合

这种机制借鉴于解谜游戏,比如三种同颜色的塔排列在一条线上能够获得加强的效果,或者一套塔按照某个形式摆放能够获得“套装加成”。这也能大大地提高游戏的策略性,同时也能挖收费点。然而其学习成本相当高,仅凭观察是无法明白的,必须通过教程来向玩家解释,因此不适合在前期就加入游戏中。

不过如果主要面向日本市场的话,也许能够成为主要卖点?比如男女搭配干活不累,双胞胎凑在一起就能放大BEAM之类的噱头……哦,我及时制止住了我的妄想!真是危险哪。

火力压制

传统的防御塔都拥有索敌机制,即“不见鬼子不挂弦”,索敌范围内没有敌人的话是不会开火的。然而RTS中还有“强制攻击”这一设计,即强制向某个位置开火,不管那里是否有敌人。如果某些塔拥有这个机制,也会使得游戏很有趣,但也由于其破坏了索敌AI从而可能导致无法预料的后果。

这个机制可以与上文中提到的线性光环相结合,从而让玩家能够制定光环的方向,同时也可以与无法旋转角度的固定炮台相结合,从而产生一片范围相当有限的火力压制区,玩家是否要选择这个塔也是一种很有趣的抉择,因为其机制的与众不同。

1月12日更新:

不可叠加的debuff

常见的有减速、DOT。最优方式显然是使怪物从头到尾一直都会受到debuff的影响,而若集中建造这类内施加debuff的塔则会大量浪费其能力,因此如何保持最大化覆盖同时最小化重复就成了玩家要面对的战略挑战。

不过这种机制显得稍微复杂,首先要在怪物身上产生对应的光影效果,其次要使得玩家理解debuff是不可叠加的,因此这种机制的学习成本较高,大量使用会使得游戏硬核化。

击杀区域特效

这种机制指的是如果怪物在某个区域内被击杀了,就会产生某种特效,如尸爆、多加钱、多给经验等等,怎么设计都可以。区域的提供手段也有很多种,比如陷阱或者是光环。为了追求利益最大化,如何使防御塔与击杀区域相配合也就成了一个很有趣的策略选择。

这种机制是十分容易观察到的,因而学习成本很低,理解起来也容易。

“胆小鬼”

这一种机制指的是仅当周围没有怪物的时候才能发挥功效的一些建筑,就像《植物大战僵尸》中的胆小菇。这一机制也有些类似于前文中提过的“最小射程”。然而胆小鬼行为必须确保怪物能路过该建筑,这才有意义,否则这个机制就永远不会被执行了。

这个机制带来了很多策略性,为了发挥其最大效益,玩家要思考如何避免怪物接近这些建筑物。另外这些建筑物会有两种状态,需要从画面上直观的进行表现,让玩家能够清楚的理解建筑物现在处于什么状态。

然而也要注意,这种机制较难平衡,如果玩家能够找到某种设计师意料之外的方法使大量这种建筑能够高效率的运转,可能会破坏游戏的平衡性。《植物大战僵尸》中的胆小菇仅售25元,对于熟练玩家来说其胆小鬼特性简直是可以忽略不计的,性价比超高。

无论是固定路径塔防还是自由路径塔防(又叫maze td),这种机制都可以用得上。

分类
塔防 游戏设计

塔防基础数值模型(二)

这一篇是《塔防基础数值模型(一)》的续集,有一些前文中提过的概念哦!^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*有效供给规模>怪物组强度,则在怪物组长度无限的情况下,也无法通过这个塔。

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