欢迎光临散文网 会员登陆 & 注册

原神拆解5-战斗公式

2022-03-20 12:27 作者:精通魔法的蓝孩子  | 我要投稿

        上一部分,我们从游戏中可以爬取到的数据,简单推测了以下原神设计属性的思路那么接下来的工作就是把属性带入到公式当中,实际的战斗中遵循着这样的流程:

        1.初始化角色的属性,为角色状态赋值。

        2.判断角色自身buff,debuff状态修正,对属性计算得到实时属性。

        3.将实时属性带入战斗公式,计算出伤害值或者受伤害减免值。

        4.判断技能特点(技能还是普攻,单体还是群体),算出最终伤害值和作用范围。

        5.进行血量扣除,解除当前战斗流程。

        我们上一期实际上是对于第一,二步做了探讨。本期对原神战斗公式进行分析。

战斗公式分析大纲

         本章节我计划从下面的思路展开分析:

        1.基础战斗公式的选择

        2.战斗的初始值

        3.战斗流程


一.基础战斗公式的选择

        基础的战斗公式是由最基本的三个属性对于伤害计算得到的伤害值而套用的公式,也就是仅有“攻击力”,“防御力”,“血量”参与得到的战斗公式雏形。业界常用的形式有减法公式,乘法公式,除法公式,公式的选择依据场景各有不同,公式效果也各有千秋。原神选择的公式是“乘法公式”。首先,让我们看一下原神的战斗公式的形式:

                    %E4%BC%A4%E5%AE%B3%E5%80%BC%3D%E6%94%BB%E5%87%BB%E5%8A%9B%5Ctimes%20%EF%BC%881-%EF%BC%88%5Cfrac%7B%E6%95%8C%E6%96%B9%E9%98%B2%E5%BE%A1%E5%8A%9B%7D%7B%E6%95%8C%E6%96%B9%E9%98%B2%E5%BE%A1%E5%8A%9B%2B5%5Ctimes%20L%2B%20500%7D%20%EF%BC%89

        在这个公式中:L=攻击方等级。

        这就是一个典型的乘法公式,乘法公式的基本雏形为:

    %E4%BC%A4%E5%AE%B3%E5%80%BC%3Da%E6%94%BB%E5%87%BB%E5%8A%9B%5Ctimes%20(1-%E5%85%8D%E4%BC%A4%E7%8E%87)

%E5%85%8D%E4%BC%A4%E7%8E%87%3D%5Cfrac%7Bb%E9%98%B2%E5%BE%A1%E5%8A%9B%7D%7Bc%E9%98%B2%E5%BE%A1%E5%8A%9B%2BX%7D%20     

        其中a,b,c,X都是可以调整的参数,可以是常数也可以是函数。那么把上述公式a,b,c=1,X=L*500,就得到了原神的基础战斗公式。那么为什么选择的是乘法公式,系数又为什么这样赋值,这些会在后面的环节和章节来说明,这部分属于了对战斗体验的评价环节,后面会对战斗部分做一个总结的时候提起。

二.战斗的初始值

       在上面,我们得到了战斗的基础公式,那么,三个基础属性就可以被带入计算了。那么这个赋值的依据是什么,这就涉及到我们的对于战斗公式部分的初始值选择问题。让我们继续看一下之前用到的的旅行者数据。

旅行者数据(未携带武器)

       可以看到,初始值大概是极大值的1/10左右,也就是说整体的伤害提升幅度,其实是随着升级。突破提升很大的。

        初始值的规划是为了优化玩家的新手游戏体验,将战斗规定在一个理想的回合数,让玩家对战斗有初步的认识,原神中的伤害聚合是使用的乘法,所以数值是比较大的,所以初始值选择较小,为成长养成提供了空间。

三.战斗流程

         原神在战斗流程的选择上,采用的是常用且好理解的规范流程模式,而没有使用圆桌理论。两者各有利弊吧。规范流程清晰易懂,逻辑性强,但是会稀释计算过程中的一部分价值,比方说命中和暴击这两个概念,当玩家命中率和暴击率均为50%的时候,根据规范流程,会先判定玩家一次攻击是否命中,那么如果没有命中也就没有暴击的概念,此时50%的暴击率就被稀释了,实际并没有50%的收益,然而圆桌理论中会避免这个问题,但是整体的对于属性的范围要求很死,并且百分比属性理应要有100%,圆桌理论也会与这部分自然的人为理解相悖。那么说了这么多,原神到底采用了如何的战斗流程呢。下面会根据原神的一次战斗伤害计算展开分析,剖析战斗的详情,也是本章节的重头戏。

1.流程描述

        整个流程为以下顺序:

        1.命中判断

        2.暴击判断

        3.判断攻击属性(物理,各种元素)。

        4.计算技能/普攻倍率和元素反应增幅倍率和伤害加成倍率,倍率乘以攻击得到未减免伤害值。

        5.暴击修正

        6.计算防御力的伤害减免。

        7.计算抗性减免

2.计算顺序

        后端在实现会根据上面的一个流程实现,但是策划在计算时候则应该从基本战斗公式入手展开:

        首先将目光聚焦到基础战斗公式,也就是

        %E4%BC%A4%E5%AE%B3%E5%80%BC%3D%E6%94%BB%E5%87%BB%E5%8A%9B%5Ctimes%20%EF%BC%881-%EF%BC%88%5Cfrac%7B%E6%95%8C%E6%96%B9%E9%98%B2%E5%BE%A1%E5%8A%9B%7D%7B%E6%95%8C%E6%96%B9%E9%98%B2%E5%BE%A1%E5%8A%9B%2B5%5Ctimes%20L%2B500%7D%20%EF%BC%89

       上面的公式放到全局情况其实就可以总结成下面的这个整体公式

%E9%80%A0%E6%88%90%E4%BC%A4%E5%AE%B3%3D%E6%9C%AA%E5%87%8F%E5%85%8D%E4%BC%A4%E5%AE%B3*%E4%BC%A4%E5%AE%B3%E6%95%88%E7%8E%87

        我们从这个公式入手展开最终伤害的计算,

①:基础公式

       我们先将传入的属性攻击力带入到公式里,然后被攻击单位的防御属性,还有角色的等级带入算出防御力对于伤害的减免。我们暂时将这部分分别放置,传入的属性攻击力我们成为面板攻击力,再保存起来(1-免伤率)=防御伤害效率。

②:倍率修正

        现在面板攻击力那一部分,我们首先对其乘“技能/普攻倍率”。该部分       

%E4%BC%A4%E5%AE%B3%E5%80%8D%E7%8E%87%3D%EF%BC%88%E6%8A%80%E8%83%BD%2F%E6%99%AE%E6%94%BB%E5%80%8D%E7%8E%87%EF%BC%89%5Ctimes%20%EF%BC%881%2B%E6%8A%80%E8%83%BD%2F%E6%99%AE%E9%80%9A%E5%80%8D%E7%8E%87%E6%8F%90%E5%8D%87%EF%BC%89

        到这一步为止,我们的上面的整体公式的未减免伤害部分=面板攻击力*伤害倍率

③:属性加成和其他加成判断

        接下来,我们要读取本次造成伤害的元素属性,再读取人物的对应属性的属性伤害加成,和其他加成,此时把加成伤害汇总,进行加算,直接按照(1+x%)作用于前面的攻击部分提升。(这里的伤害加成仅在满足条件的时候才能生效。)

%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90%3D%EF%BC%881%2B%E5%85%83%E7%B4%A0%2F%E7%89%A9%E7%90%86%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90%2B%E5%85%B6%E4%BB%96%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90%EF%BC%89

        到这一步为止,我们的上面的整体公式的未减免伤害部分=面板攻击力*伤害倍率*伤害加成

④:元素反应提升

        如果涉及到元素反应(见元素反应讲解部分),还要计算元素反应对于伤害的提升,其提升强度与“元素精通”息息相关。

%E5%85%83%E7%B4%A0%E7%B2%BE%E9%80%9A%E6%8F%90%E5%8D%87%3D%5Cfrac%7B2.78%5Ctimes%20%E5%85%83%E7%B4%A0%E7%B2%BE%E9%80%9A%7D%7B%E5%85%83%E7%B4%A0%E7%B2%BE%E9%80%9A%2B1400%0A%7D%20

        至此为止,们的上面的整体公式的未减免伤害部分=面板攻击力*伤害倍率*伤害加成*元素反应提升

⑤:暴击提升

        如果本次伤害行为发生了暴击,那就还需要计算暴击伤害的提升,如果不触发暴击,则不计算暴击伤害的提升。此时未减免伤害部分:

        未暴击:未减免伤害部分=面板攻击力*伤害倍率*伤害加成*元素反应提升

        暴击:未减免伤害部分=面板攻击力*伤害倍率*伤害加成*元素反应提升*(1+暴击伤害)

        可以得到期望未减免伤害部分=面板攻击力*伤害倍率*伤害加成*元素反应提升*(1+暴击率*暴击伤害)

⑥:抗性伤害减免

        伤害效率分为两个部分,第一是我们上面说到的防御伤害效率。此外还有就是抗性伤害效率。游戏中每种伤害属性都有对应抗性(各种元素和物理伤害),抗性作为伤害类型的对抗属性,是限制未减免伤害部分的除防御力以外的另一道保险。其公式遵循以下结论,

        当抗性>75%

        %E6%8A%97%E6%80%A7%E4%BC%A4%E5%AE%B3%E6%95%88%E7%8E%87%3D%5Cfrac%7B1%7D%7B1%2B4%5Ctimes%20%E6%8A%97%E6%80%A7%7D%20

        当0<抗性<75%

        %E6%8A%97%E6%80%A7%E4%BC%A4%E5%AE%B3%E6%95%88%E7%8E%87%3D1-%E6%8A%97%E6%80%A7

        游戏中存在一定的减抗性手段,所以抗性是可以<0的这时候抗性伤害效率会变成增幅伤害。

        %E6%8A%97%E6%80%A7%E4%BC%A4%E5%AE%B3%E6%95%88%E7%8E%87%3D1-%E6%8A%97%E6%80%A7%2F2

        可以看到,0-75%其实是一个正常能接受的抗性范围,离开这个范围效果都会被稀释。

⑦:最终伤害

        至此为止,一次伤害输出的所有伤害部分就计算完毕了,可以得到,最终伤害的公式为:

 E(%E6%9C%80%E7%BB%88%E4%BC%A4%E5%AE%B3)%3D(%E6%94%BB%E5%87%BB%E5%8A%9B)%5Ctimes%20%E4%BC%A4%E5%AE%B3%E5%80%8D%E7%8E%87%5Ctimes%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90%5Ctimes%20(1%2B%E6%9A%B4%E5%87%BB%E7%8E%87%5Ctimes%20%E6%9A%B4%E5%87%BB%E4%BC%A4%E5%AE%B3)%5Ctimes%20%E5%85%83%E7%B4%A0%E4%BC%A4%E5%AE%B3%E5%8A%A0%E6%88%90%5Ctimes%20%E9%98%B2%E5%BE%A1%E5%87%8F%E5%85%8D%5Ctimes%20%E6%8A%97%E6%80%A7%E5%87%8F%E5%85%8D

⑧:一个实例

        下面,让我们根据一个实际的例子,验证一下上面的结论。

        首先,我们看一下本次的主角---我的宵宫的面板信息。

        

基础面板1
基础面板2
武器信息
圣遗物信息
普攻倍率
元素战技

        根据上面的信息,我们可以总结出如下的数据。

信息总结(游戏中仅显示出百分比后一位,可能存在计算误差)

        我们选择的对手为85级的丘丘人,丘丘人的防御属性可以参考下面:

丘丘人防御属性(防御力=level*5+500)

        那么我们计算一下发生暴击的话,把数值带入我们上面的公式可以得到未减免之前的伤害为:

未减免伤害部分

        伤害效率部分,把丘丘人的防御属性数据带入上面的公式,可以得到

伤害效率

        将两部分相乘,得到计算出的伤害值为:

计算伤害

        下面在游戏里,我们实际考察一下

实际伤害

        我们计算的结果为5707,游戏中实际造成了5709,这在误差范围内,因为游戏中的数据只显示了百分比的小数点后一位,实际上这个误差应该就是显示的浮点数位数不足导致的误差。比如我们把计算过程中的伤害倍率一栏56.3%改成56.32%

        

稍作修改

        可以得到,上面的公式是没问题的。

四.小结

        这一章,我们简单谈了谈战斗公式的设计,策划设计选择了乘法公式,对于伤害类型不同则采用了对抗属性的方法来修正平衡。那么,为什么采取这一系列选择,公式设计成这样,优点在哪里?属性和战斗公式的联系,是如何做到平衡的?这些内容会在下期讨论。

原神拆解5-战斗公式的评论 (共 条)

分享到微博请遵守国家法律