生活情怀-神话暗黑-暗黑破坏神2

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1588|回复: 0
收起左侧

[修改攻略] 动作帧数—Dtalon详解

[复制链接]
  • TA的每日心情
    开心
    前天 00:08
  • 签到天数: 6 天

    [LV.2]石门叩响

    912

    主题

    20万

    元宝

    2370 小时

    在线时间

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    200878
    发表于 2020-1-14 05:07:04 | 显示全部楼层 |阅读模式
    Animation Frame
    —Dtalon Fpa Specific
    动作帧数—Dtalon详解

    BY Louis-J


    感谢:
    jrichard 对Fpa原理和Dtalon攻击特性的详尽论述,本贴许多资料和理论来自他
    Brianc84 对C/C WSM公式的计算推导及提出Dtalon的极限为7/3/3/3……而非7/2/2/2……
    Ruvanal 提出Rollback概念及对其的精彩论述

    写这个帖子前后花费了4天的时间,期间查阅论证了许多资料数据并做了多次测试。本帖虽然主要是说Dtalon这个技能的攻击帧数,但其实是对D2所有动作运行帧数的一个剖析。
    由于我个人对D2这个游戏的认识有效,难免有错误纰漏的地方,请LRs多多指正。


    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    完成一个动作所需的帧数公式
    Frames Per Attack={HitShift*(FramePerDirection) / [AnimationSpeed*(BaseRate+SpeedIncrease)/100]}-1


    Fpa=Frames Per Attack 每次攻击帧数
    HitShift=256
    FramePerDirection 动作长度
    AnimationSpeed 动作速度
    BaseRate 基础效率
    SI=SpeedIncrease=Skill EIAS-100*Slow%-WSM+EIAS   
    SpeedIncrease 速度增量
    Skill EIAS 技能提供的EIAS:包括Asn的BoS(速度爆发),Pal的Fanaticism(狂热光环)
    Slow% 减速效果:包括Slows Target(使目标减速),Clay Golem(土魔),Freeze(各种冰冻效果),Slow Missiles(缓慢攻击),Decrepify(衰老)等等。
    WSM=Weapon Speed Modifier 武器基础速度
    EIAS=Effective Increase Attack Speed = [120*IAS/(120+IAS)] 有效IAS
    IAS=Increased Attack Speed=(120*EIAS)/(120-EIAS) 装备提速属性之和
    { } 向上取整
    [ ] 向下取整
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※



    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    Animation:动作
    Animation types:动作类型
    Weapon types:武器类型
    FramePerDirection:动作长度
    AnimationSpeed:动作速度


    在游戏中,无论角色什么时候做什么动作,包括走、跑、格挡、攻击,甚至站立不动,游戏都会有记录。在这个过程中,首先游戏确定其为什么动作,这取决于角色使用何种动作类型和武器类型;确定后,游戏就会运做这个动作直到下一个动作;再确定下一个为什么动作,运做这个动作到再下一个动作,周而复始。

    与动作相关的参量是动作长度和动作速度。大多数动作的动作速度是256,但也不全是。
    动作类型不同,动作长度和动作速度也会不同。
    同一种动作类型,武器类型不同,动作长度和动作速度也会不同;至于Asn的踢击技能,用的都是鞋子-o-(确切的说不划分在武器类型之内),所以踢击技能的动作长度和动作速度都是一样的;一些动作类型的动作长度和动作速度不受武器类型的影响,比如打击恢复、施法动作,但还是受角色类型的影响(最直观的例子就是Nec的Human形态和Vampire形态其施法动作的速度就不同)。
    当然,如果角色类型不同,即使动作类型和武器类型都相同,其动作长度也可能会有差异,比如Asn/Pal、Ama、Sor、Dru/Nec、Bar使用1HS的武器类型做Zeal的攻击,其动作长度就各不相同。
    (说的有些拗口,希望大家能听懂-o-)



    Animation types:动作类型
    (From PlrMode.txt)              
    A1 – Attack 1
    A2 – Attack 2
    BL – Blocking                 
    DD - Death                     
    DT – Death Throe  
    GH – Get hit(hit recovery)            
    KK - Kick                     
    NU – Neutral(outside of town)
    RN - Run                     
    S1 – Skill 1
    S2 – Skill 2
    S3 – Skill 3
    S4 – Skill 4
    SC – Spell casting
    TH – Get Hit(in town)
    TN – Neutral(in town)
    TW – Walk(in town)
    WL – Walk(outside of town)

    Weapon types:武器类型
    (From Weapons.txt)
    1HS - One Handed Swinging (axes, swords, flails, maces, hammers, clubs and wands)
    1HT - One Handed Thrusting/Throwing* (Daggers, javelins, potions)
    2HS - Two Handed Swords (swords)
    2HT - Two Handed Thrusting (All Spear class weapons)
    BOW – Bows (All Bow class weapons)
    HT1 - Single wielded katars (Katar, Claw, Scissors type assassin class weapons)
    HT2 - Dual wielded katars (Katar, claw, scissors type assassin class weapons)
    HTH - Hand to Hand (Bare fists)
    STF - Two handed Swinging (Staves, polearms, axes, mauls)
    XBW – Crossbows (All Crossbow class weapons)
    *注:throwing axes不属于1HT(One Handed Throwing)类型, 而属于1HS(one handed swinging)类型。

    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※



    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    BaseRate:基础效率
    SpeedIncrease:速度增量
    Skill EIAS:技能提供的EIAS
    WSM:武器基础速度
    EIAS:有效IAS
    IAS:装备提速属性之和



    BaseRate:基础效率
    BaseRate只取决于角色使用何种动作类型,不受装备的影响,大多数的BaseRate为100。Asn的所有BaseRate除了格挡和打击恢复为50及一些顺序攻击如(FoF/CoT/BoI/DC 为70,其实是个攻击速度惩罚-30,即100-30=70);DTail为60(攻击速度惩罚为-40,即100-40=60);其他都是100 。


    (BaseRate+SpeedIncrease)
    上限为175,这也是为什么攻击动作有急速封顶Fpa的原因。
    关于下限,由于角色攻击时基本不考虑减速效果,则SpeedIncrease=Skill EIAS-WSM+EIAS=0-30+0=-30(武器的最慢WSM为30,关于C/C 的WSM在下面论述)。所以SI的下限为-30,所以基本上(BaseRate+SpeedIncrease)下限为100-30=70。
    如果考虑减速效果,则(BaseRate+SpeedIncrease)=BaseRate+Skill EIAS-100*Slow%-WSM+EIAS,很显然能达到0甚至是负数的下限,但是当(BaseRate+SpeedIncrease) < BaseRate*15%,(BaseRate+SpeedIncrease)=BaseRate*15%,则基本上(BaseRate+SpeedIncrease)下限为100*15%=15。


    SI=SpeedIncrease:速度增量
    =Skill EIAS-100*Slow%-WSM+EIAS
    比如9级的BOS(Attack Speed +44),20%的减速效果,WSM=-10,EIAS=20
    则SI=44-100*20%-(-10)+20=54


    Skill EIAS:技能提供的EIAS
    Skill EIAS = ((110*lvl) * (b-a))/(100 * (lvl+6)) + a
    b=60,a=15(BoS速度爆发),
    b=40,a=10(Fanaticism狂热光环)
    (from skillcalc.txt and skills.txt)
    这个公式算出的EIAS和游戏中我们看到的数值个别级别有些出入,比如1级的BOS(Attack Speed +21),但用这个公式的话
    Skill EIAS = ((110*lvl) * (b-a))/(100 * (lvl+6)) + a
    SLVL 1 BOS EIAS=((110*1) * (60-15))/(100 * (1+6)) + 15=110*45 / 100*7 + (15)=22

    其实稍微懂些java方面的语言就很好理解了
    javascript:
    function dm(l,a,b){
    return a+dec((b-a)*dec(110*l/(l+6),0)/100,0)
    }
    其中a,b即相当于上面公式中的a,b;l 即相当于上面公式中的技能等级 Skill Lvl。
    没学过也不要紧,看下面这个公式吧
    IF LEVEL>0
    Skill EIAS = a + ROUNDDOWN( (b-a)*ROUNDDOWN( 110*LEVEL / (LEVEL+6) ) /100)
    b=60,a=15,Level=1代入
    =15 + ROUNDDOWN( 45*ROUNDDOWN(110*1/7) /100)
    =15 + ROUNDDOWN( 45*ROUNDDOWN(15.xxx) /100)
    =15 + ROUNDDOWN(45*15/100)
    =15 + ROUNDDOWN(45*15/100)
    =15 + ROUNDDOWN(6.75)
    =15 + 6
    =21
    搞定。
    (Skill EIAS只要看游戏中直接显示的数值就可以了,这个公式有兴趣的当消遣看吧- - !)


    WSM:武器基础速度
    当装备武器/盾牌或双手武器,没什么说的,就是我们在许多资料上常看到的那样,是该武器的WSM,如-10啊,0啊,30啊什么的。
    当用双爪时
    <1>先放屏幕左边装备槽,再放屏幕右边装备槽
    WSMs=(right_WSM + left_WSM)/2
    例:两把爪的WSM分别为10和-30,则最终WSMs为-10

    <2>先放屏幕右边,再放屏幕左边(EIAS C/C Bug)
    WSMs = (right_WSM + left_WSM)/2 + (right_WSM - left_WSM)
    例:先把WSM为-30的放在屏幕右边,再把WSM为10的放在屏幕左边
    WSMs = (-30+10)/2 +(-30–10)
    = (-20)/2 + (-40)
    = (-10) + (-40)
    = -50
    先把WSM为10的放在屏幕右边,再把WSM为-30的放在屏幕左边
    WSMs = (10+(-30))/2 + (10-(-30))
    = (-20)/2 + (40)
    = (-10) + 40
    = 30
    当把WSM快的爪先放在屏幕右边时,就可以利用这个EIAS Bug了。
    但是当角色在游戏中切换武器后,WSMs将变回<1>的状态- -!。
    注:C/C bug对踢击有效。

    EIAS:有效IAS
    =Effective Increase Attack Speed = [120*IAS/(120+IAS)]
    比如装备提供20IAS,则EIAS=[120*20/(120+20)] =17


    EIAS/IAS 换算表格
    +----+----+ +----+----+ +----+----+ +----+----+
    |EIAS| IAS| |EIAS| IAS| |EIAS| IAS| |EIAS| IAS|
    +----+----+ +----+----+ +----+----+ +----+----+
    |   1|   2| |  31|  42| |  61| 125| |  91| 377|
    |   2|   3| |  32|  44| |  62| 129| |  92| 395|
    |   3|   4| |  33|  46| |  63| 133| |  93| 414|
    |   4|   5| |  34|  48| |  64| 138| |  94| 434|
    |   5|   6| |  35|  50| |  65| 142| |  95| 456|
    |   6|   7| |  36|  52| |  66| 147| |  96| 480|
    |   7|   8| |  37|  54| |  67| 152| |  97| 507|
    |   8|   9| |  38|  56| |  68| 157| |  98| 535|
    |   9|  10| |  39|  58| |  69| 163| |  99| 566|
    |  10|  11| |  40|  60| |  70| 168| | 100| 600|
    |  11|  13| |  41|  63| |  71| 174| | 101| 638|
    |  12|  14| |  42|  65| |  72| 180| | 102| 680|
    |  13|  15| |  43|  68| |  73| 187| | 103| 728|
    |  14|  16| |  44|  70| |  74| 194| | 104| 780|
    |  15|  18| |  45|  72| |  75| 200| | 105| 840|
    |  16|  19| |  46|  75| |  76| 208| | 106| 909|
    |  17|  20| |  47|  78| |  77| 215| | 107| 988|
    |  18|  22| |  48|  80| |  78| 223| | 108|1080|
    |  19|  23| |  49|  83| |  79| 232| | 109|1190|
    |  20|  24| |  50|  86| |  80| 240| | 110|1320|
    |  21|  26| |  51|  89| |  81| 250| | 111|1480|
    |  22|  27| |  52|  92| |  82| 259| | 112|1680|
    |  23|  29| |  53|  95| |  83| 270| | 113|1938|
    |  24|  30| |  54|  99| |  84| 280| | 114|2280|
    |  25|  32| |  55| 102| |  85| 292| | 115|2760|
    |  26|  34| |  56| 105| |  86| 304| | 116|3480|
    |  27|  35| |  57| 109| |  87| 317| | 117|4680|
    |  28|  37| |  58| 113| |  88| 330| | 118|7080|
    |  29|  39| |  59| 117| |  89| 345| | 119|14280
    |  30|  40| |  60| 120| |  90| 360| | 120|inf |
    +----+----+ +----+----+ +----+----+ +----+----+

    注:这个换算表同样适用于EFCR/FCR、EFHR/FHR、EFBR/FBR的相互换算。


    IAS:装备提速属性之和
    =Increased Attack Speed=(120*EIAS)/(120-EIAS) 这个是和EIAS的换算公式
    很简单,装备上所有的IAS叠加起来。
    如果是双爪,只算先装备的爪上的IAS(如果切换后,则只算屏幕左方即手套上面爪的IAS,也是大家常说的主爪位置):这个只相对使用主爪攻击如TS、CS、PS和踢击技能及陷阱放置而言。
    一些双爪轮流击打如normal attack、FoF、CoT、BoI包括WW,则只算当前攻击爪的IAS。
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    Frame:帧数
    Fpa:每次攻击帧数
    Increment:增量
    Terminating_value:终止值
    AFrame:计数范围
    Counter:计数值
    ticks:计数



    Frame:帧数
    D2 每秒运行25Frames。意思是指游戏每秒刷新你的屏幕画面25次,即每0.04秒刷新一次屏幕画面。如果你在游戏里用/fps的命令(frames per second 每秒运行帧数),你会看见每秒的Frames会超过25(这个越高越好啦-o-)。这只是指你的系统可以超过25fps,不是指D2这个游戏能超过25fps。每秒运行25帧是D2这个游戏的程序设定,是不能改变的。


    Fpa(Frames per attack):(完成)一次攻击(所需)帧数
    比如说一种攻击的速度是7Fpa,意思是指完成这个动作需要7帧。


    Increment:增量
    = [AnimationSpeed * (BaseRate + SpeedIncrease) / 100]
    数值越大,则攻击速度越快。如前面所说的,由于(BaseRate + SpeedIncrease)有上下限, 所以Increment也有上下限。


    Terminating_value:终止值
    Terminating_value= 256*FramePerDirection

    比如动作长度为5,则终止值为1280。
    把这个终止值按256分解成5个计数范围
    0-255
    256-511
    512-767
    768-1023
    1023-1279
    即到1279时,整个动作完成。之所以没有1280,是因为从0开始计数。

    AFrame:计数范围
    Counter:计数值
    AFrame表示一个计数范围, 如0 - 255表示AFrame为00,256-511表示AFrame为01。
    如果一个计数值为4000,则/256后为15.625,舍去小数,此时的AFrame为15。



    Counter/AFrame 对照图表
    Counter value     AFrame displayed     Counter value    AFrame displayed
    0 - 255                 00              3328 - 3583           13
    256 - 511               01              3584 - 3839           14
    512 - 767               02              3840 - 4095           15
    768 - 1023              03              4096 - 4351           16
    1024 - 1279             04              4352 - 4607           17
    1280 - 1535             05              4608 - 4863           18
    1536 - 1791             06              4864 - 5119           19
    1792 - 2047             07              5120 - 5375           20
    2048 - 2303             08              5376 - 5631           21
    2304 - 2559             09              5632 - 5887           22
    2560 - 2815             10              5888 - 6143           23
    2816 - 3071             11              6144 - 6399           24
    3072 - 3327             12



    ticks:计数
    许多资料和帖子在解析游戏中的Animation(动作)信息的时候都会提到这个词。这个计数有什么用?让游戏知道一个动作什么时候结束?不是,这只是为了让大家比较直观的了解一个攻击动作的完成所需Fpa而引入的一个游戏程序计数器。


    下面举个例子,还是以上面的动作长度5为例,假设某个动作的动作速度为256,基础效率为100,速度增量为0。
    这个动作的各项参量:
    AnimationSpeed = 256
    FramePerDirection = 5 ( Aframe从00到04,共5个Aframe)
    BaseRate = 100
    SpeedIncrease = 0

    Terminating_value = 256* FramePerDirection = 256*5 = 1280
    Increment = [AnimationSpeed * (BaseRate + SpeedIncrease) / 100] = 256*(100 + 0) / 100=256*100/100 = 256

    代码:

    从0开始计数,动作开始

    Game tick 1
    counter增加, counter=256
    counter < 1280 动作继续
    Aframe = 01(看上面的对照表counter=256时,Aframe = 01)

    Game tick 2
    counter增加, counter=512
    counter < 1280
    Aframe = 02

    Game tick 3
    counter增加, counter=768
    counter < 1280
    Aframe = 03

    Game tick 4
    counter增加, counter=1024
    counter < 1280
    Aframe = 04

    Game tick 5
    counter增加, counter=1280
    counter>=1280
    动作结束,寻找下一个动作,counter重新计数,下一个动作从这个tick开始。


    由于1279时动作就结束,所以Game tick 5将作为下一个动作的Game tick 1(下一个动作从这个tick开始)。而不算在这个假设的动作中。即从tick 1到tick 4共4ticks整个动作完成。就是说这个假设的动作速度增量SI为0时,可达到4Fpa(完成这个动作需4帧)。


    上面是个很简单的例子,下面我们再考虑SI分别为-1、24、25这3种状态。其他参量都不变。
    SI=-1,Increment = [256*(100-1) / 100]=[256*99/100] = 253
    SI=24,Increment = [256*(100+24) / 100]=[256*124/100] = 317
    SI=25,Increment = [256*(100+25) / 100]=[256*125/100] = 320

    代码:

    动作开始

    Game tick 1
    SI=-1,counter=253 Aframe=00
    SI=24,counter=317 Aframe=01
    SI=25,counter=320 Aframe=01

    Game tick 2
    SI=-1,counter=506 Aframe=01
    SI=24,counter=634 Aframe=02
    SI=25,counter=640 Aframe=02

    Game tick 3
    SI=-1,counter=751 Aframe=02
    SI=24,counter=951 Aframe=03
    SI=25,counter=960 Aframe=03

    Game tick 4
    SI=-1,counter=1012 Aframe=03
    SI=24,counter=1268 Aframe=04
    SI=25,counter=1280 动作结束

    Game tick 5
    SI=-1,counter=1265 Aframe=04
    SI=24,counter=1585 动作结束

    Game tick 6
    SI=-1,counter=1518 动作结束


    可见,SI=0时,动作在tick 4就完成;而SI=-1时,动作在tick 5完成。
    SI=25时,动作在tick 3就完成;而SI=24时,动作在tick 4完成。
    -1-,0,25就代表了这个动作Fpa所需SI的3个档次。
    一般情况不考虑Slow影响,SI=Skill EIAS-WSM+EIAS,Skill EIAS和WSM都是已知的,只要知道EIAS的数值,就能知道一个动作的Fpa是多少了。而这个EIAS就取决于你装备上提供的IAS。
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※



    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    Dtalon:龙爪
    Rollback:回退特性
    Initial Kicks:最初踢击
    Follow-Up Kicks:后续踢击
    FrameDataActionFlag:发生回退特性标记点



    Rollback这个概念的解释最早是由Ruvanal在lurkerlounge上给出的,简单的说,就是相对角色完成一个完整动作,具有Rollback特性的只完成其中的某些部分。一些拥有Rollback特性的技能有Fend(Ama的击退技能)、Strafe(Ama的炮轰技能)、Jab(Ama的戳刺技能)、Zeal(Pal的热诚技能)、Fury(Dru的狂怒技能)和Dragon Talon(Asn的龙爪技能),它们共有的特征就是在一次攻击中包括多重打击。这些技能的% Rollback各有不同,比如Zeal/Dtalon为100%,Strafe为50%。

    Dtalon的整个踢击动作包括最后1次踢击(Dtalon只有1 kick的这次踢击也算在最后1次踢击范畴内)和前面的几次多重踢击。通常我们把这最后1次踢击称为Initial Kicks(最初踢击),反而把前面的几次多重踢击称为Follow-Up Kicks(后续踢击),这是一个叫法的习惯问题。比如我们说7/3/3/3,如果按踢击顺序的话应该是3/3/3/7;这样会让许多人认为第1次踢击是7Fpa,其实正确的认识是第1次→第3次这3次多重踢击为3Fpa,最后一次踢击为7Fpa。

    下面就用Counter/AFrame理论来说说DTalon的Rollback。为了完成Dtalon的多重踢击,Counter将回退,也就是AFrame值将会重复,由于Dtalon是个100% Rollback技能,所以发生Rollback时Counter将回退到0然后开始对多重踢击进行计数。一个关于Rollback的参量是FrameDataActionFlag,如果到达这个标记点,表示一次多重踢击结束。Dtalon的FrameDataActionFlag=04。


    举个简单的2 kicks的例子。
    Dtalon的各项参量数值
    AnimationSpeed = 256
    FramePerDirection = 13 (Aframe从00到12)
    FrameDataActionFlag = 04
    BaseRate = 100
    假设其SI = 0

    其增量和终止值分别为
    Increment = [AnimationSpeed * (BaseRate + SpeedIncrease) / 100] = [256*100 / 100] = 256
    Initial Kicks的终止值Terminating_value = 256* FramePerDirection = 256*13 = 3328
    Follow-Up Kicks的终止值Terminating_value = 256* FrameDataActionFlag = 256*4 = 1024

    代码:

    动作开始

    Game tick 1
    counter增加, counter=256
    counter<3328
    Aframe=01
    counter<1024

    Game tick 2
    counter增加,counter=512
    counter<3328
    Aframe=02
    counter<1024

    Game tick 3
    counter增加, counter=768
    is counter<3328
    Aframe=03
    counter<1024

    Game tick 4
    counter增加, counter=1024
    counter<3328
    Aframe=04
    counter>=1024
    第1次(多重)踢击结束,寻找下一个动作
    counter回复到0

    Game tick 5
    counter增加, counter=256
    counter<3328
    Aframe=01
    counter<1024
    第2次踢击开始

    Game tick 6
    counter增加, counter=512
    counter<3328
    Aframe=02
    counter<1024

    Game tick 7
    counter增加, counter=768
    counter<3328
    Aframe=03
    counter<1024

    Game tick 8
    counter增加, counter=1024
    counter<3328
    Aframe=04
    counter>=1024

    Game tick 9
    counter增加, counter=1280
    counter<3328
    Aframe=05
    counter>=1024
    第1次(多重)踢击在 tick 4已完成,counter不需要rolled back到0
    第2次踢击继续
    .
    .
    .
    .
    Game tick 16
    counter增加, counter=3072
    counter<3328
    Aframe=12
    counter>=1024
    第1次(多重)踢击在 tick 4已完成,counter不需要rolled back到0
    第2次踢击继续

    Game tick 17
    counter增加, counter=3328
    counter>=3328
    整个踢击结束


    从这里我们可以看出,第1次踢击从tick 1 到 tick 4完成共4ticks,第2次踢击从tick 5 to tick 16完成共12ticks,整个过程一共是16ticks,即第1次踢击为4Fpa,第2次踢击为12Fpa,整个踢击共16Fpa。 按习惯,我们会说这次踢击的Fpa为12/4。
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※


    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    DTalon Fpa公式
    Initial Kick Frames={256*(FramePerDirection) / [AnimationSpeed*(BaseRate+SpeedIncrease)/100]}-1  
    Follow-Up Kick Frames={256*(FrameDataActionFlag) / [AnimationSpeed*(BaseRate+Speed_Increase)/100]}
    Follow-Up Kicks的Fpa极速上下限
    Initial Kicks的Fpa极速上下限



    DTalon Follow-Up Kicks的Fpa极速上限
    前面说过(BaseRate + SpeedIncrease)的上限为175
    Increment = [AnimationSpeed * (BaseRate + SpeedIncrease) / 100]
    = [256 * 175 / 100] = 448
    增量Increment的上限就是448
    Initial Kicks的终止值Terminating_value = 256* FramePerDirection = 256*13 = 3328
    Follow-Up Kicks的终止值Terminating_value = 256* FrameDataActionFlag = 256*4 = 1024

    以2 Kicks为例
    代码:

    动作开始

    Game tick 1
    counter增加,counter=448
    counter<3328
    Aframe=01
    counter<1024

    Game tick 2
    counter增加,counter=896
    counter<3328
    Aframe=03
    counter<1024

    Game tick 3
    counter增加,counter=1344
    counter<3328
    Aframe=05
    counter>=1024
    ? ? ? ? ? ? ?


    暂且在这里停止。从tick 1到tick 3共 3 ticks,counter在哪里回复到0?第1次踢击从tick 1到tick 几?下次踢击从哪个tick开始?能达到tick 2 (2Fpa)吗?其实这个问题前面已经有答案了。

    前面最早的那个例子有这么一句话:下一个动作从这个tick开始
    即终止值不算在一次动作内,反映在帧数公式上就是最后的“ - 1 ”
    Fpa={256*(FramePerDirection) / [AnimationSpeed*(BaseRate+SI)/100]}-1
    如果这个公式也适用于DTalon的Follow-Up多重踢击的话,那么显然,Follow-Up Kicks是能达到2Fpa的。

    啊啊啊~````不要急不要急 - -!
    看看刚开始说Dtalon的那个简单的2 kicks例子

    Game tick 4
    counter增加, counter=1024
    counter<3328
    Aframe=04
    counter>=1024
    第1次(多重)踢击结束,寻找下一个动作
    counter回复到0

    Game tick 5
    counter增加, counter=256
    counter<3328
    Aframe=01
    counter<1024
    第2次踢击开始
    虽然counter在这个tick 4将回复到0,但是新的动作将从下一个tick开始而不是从这个tick开始。因而,不需要“ - 1 ”。

    所以第1次踢击是从tick 1到tick 3共 3 ticks,下一个动作从tick 4开始,即Follow-Up Kicks的极速上限Fpa为3,HOHO,大功告成 -o- 。


    DTalon Initial Kicks的Fpa极速上限
    继续上面的增量上限448的例子

    代码:

    动作开始
    Game tick 1
    counter增加,counter=448
    counter<3328
    Aframe=01
    counter<1024

    Game tick 2
    counter增加,counter=896
    counter<3328
    Aframe=03
    counter<1024

    Game tick 3
    counter增加,counter=1344
    counter<3328
    Aframe=05
    counter>=1024
    第1次(多重)踢击结束,寻找下一个动作
    counter回复到0

    Game tick 4
    counter增加,counter=448
    counter<3328
    Aframe=01
    counter<1024
    第2次踢击开始

    Game tick 5
    counter增加,counter=896
    counter<3328
    Aframe=03
    counter<1024

    Game tick 6
    counter增加,counter=1344
    counter<3328
    Aframe=05
    counter>=1024
    第1次(多重)踢击在 tick 4已完成,counter不需要rolled back到0
    第2次踢击继续
    .
    .
    .
    .
    Game tick 10
    counter增加,counter=3136
    counter<3328
    Aframe=12
    counter>=1024
    第1次(多重)踢击在 tick 4已完成,counter不需要rolled back到0
    第2次踢击继续

    Game tick 11
    counter增加,counter=3584
    counter>=3328
    Aframe=14
    counter>=1024
    整个踢击结束,寻找新的动作,counter重新计数,下一个动作从这个tick开始。


    可见Initial Kicks从tick 4到tick 10共7ticks,即7Fpa。
    所以Dtalon的极速上限为7/3/3/3/3/3 Fpa。


    如果你是从头开始看到这里的话,应该有些明白了吧:)。
    要是连续2次Dtalon 2kick,这2次之间的下一个动作从这个tick开始怎么理解呢?看下面这个例子。
    连续2次Dtalon 2kick 极速3/7

    代码:

    动作开始
    Game tick 1
    counter增加,counter=448
    counter<3328
    Aframe=01
    counter<1024

    Game tick 2
    counter增加,counter=896
    counter<3328
    Aframe=03
    counter<1024

    Game tick 3
    counter增加,counter=1344
    counter<3328
    Aframe=05
    counter>=1024
    第1次(多重)踢击结束,寻找下一个动作
    counter回复到0

    Game tick 4
    counter增加,counter=448
    counter<3328
    Aframe=01
    counter<1024
    第2次踢击开始

    Game tick 5
    counter增加,counter=896
    counter<3328
    Aframe=03
    counter<1024

    Game tick 6
    counter增加,counter=1344
    counter<3328
    Aframe=05
    counter>=1024
    第1次(多重)踢击在 tick 4已完成,counter不需要rolled back到0
    第2次踢击继续
    .
    .
    .
    .
    Game tick 10
    counter增加,counter=3136
    counter<3328
    Aframe=12
    counter>=1024
    第1次(多重)踢击在 tick 4已完成,counter不需要rolled back到0
    第2次踢击继续

    Game tick 11
    counter增加,counter=3584
    counter>=3328
    Aframe=14
    counter>=1024
    第1次Dtalon结束,找到第2次Dtalon的动作,counter重新计数回复到0,第2次Dtalon从这个tick开始。


    Game tick 11
    counter增加,counter=448
    counter<3328
    Aframe=01
    counter<1024

    Game tick 12
    counter增加,counter=896
    counter<3328
    Aframe=03
    counter<1024

    Game tick 13
    counter增加,counter=1344
    counter<3328
    Aframe=05
    counter>=1024
    第1次(多重)踢击结束,寻找下一个动作
    counter回复到0

    Game tick 14
    counter增加,counter=448
    counter<3328
    Aframe=01
    counter<1024
    第2次踢击开始

    Game tick 15
    counter增加,counter=896
    counter<3328
    Aframe=03
    counter<1024

    Game tick 16
    counter增加,counter=1344
    counter<3328
    Aframe=05
    counter>=1024
    第1次(多重)踢击在 tick 13已完成,counter不需要rolled back到0
    第2次踢击继续
    .
    .
    .
    .
    Game tick 20
    counter增加,counter=3136
    counter<3328
    Aframe=12
    counter>=1024
    第1次(多重)踢击在 tick 13已完成,counter不需要rolled back到0
    第2次踢击继续

    Game tick 21
    counter增加,counter=3584
    counter>=3328
    Aframe=14
    counter>=1024
    第2次Dtalon结束,寻找下一个动作,counter重新计数,下一个动作从这个tick开始。


    即第1次Dtalon
    从tick 1到tick 3,共3ticks 即3fpa。
    从tick 4到tick 10,共7ticks 即7fpa。

    第2次Dtalon
    从tick 11到tick 13,共3ticks 即3fpa。
    从tick 14到tick 20,共7ticks 即7fpa。


    至于下限的问题,前面说过基本不考虑Slow的因素,SI的下限为-30,(BaseRate+SI)下限为100-30=70。
    就由Dtalon的Fpa公式直接计算了,18/6/6/6/6/6。

    Initial Kick Frames={256*(FramePerDirection) / [AnimationSpeed*(BaseRate+SpeedIncrease)/100]}-1  
    Follow-Up Kick Frames={256*(FrameDataActionFlag) / [AnimationSpeed*(BaseRate+Speed_Increase)/100]}

    AnimationSpeed = 256
    FramePerDirection = 13
    FrameDataActionFlag = 4
    BaseRate = 100



    DTalon Initial Kick SI Table:
    +------+-----+
    |  SI  | Fpa |
    +------+-----+
    | -30  |  18 |
    | -27  |  17 |
    | -23  |  16 |
    | -18  |  15 |
    | -13  |  14 |
    |  -7  |  13 |
    |   0  |  12 |
    |   9  |  11 |
    |  19  |  10 |
    |  31  |   9 |
    |  45  |   8 |
    |  63  |   7 |
    +------+-----+

    DTalon Follow-Up Kick SI Table:
    +------+-----+
    |  SI  | Fpa |
    +------+-----+
    | -30  |   6 |
    | -19  |   5 |
    |   0  |   4 |
    |  34  |   3 |
    +------+-----+


    顺便举个例子:1级Bos(Attack Speed +21),拿双爪:主爪巨鹰爪(-30WSM/0IAS),副爪绿爪(0WSM/40IAS),其他装备提供20IAS,Dtalon能达到多少Fpa?

    <1>不考虑C/C bug
    SI=Skill EIAS-WSM+EIAS
    = 21 - (-30+0)/2 + [120*20 / (120+20)]
    = 21 + 15 + 17
    = 53
    能达到8/3/3/3/3……。(绿爪的IAS怎么不算在内?啊啊啊,什么?踢击技能只算主爪的IAS?答对-o-)

    <2>考虑C/C bug
    SI=Skill EIAS-WSM+EIAS
    = 21 -[(-30+0)/2  +(-30-0)] + [120*20 / (120+20)]
    = 21 + 45 + 17
    = 83
    能达到7/3/3/3……急速。
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※



    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
    到这里这个帖子算是结束了,其实举一反三的话,我们还可以计算其他动作的帧数。

    Spell Casting:施法动作
    Asn的施法动作有Psychic Hammer(心灵战锤),Cloak of Shadows(魔影斗篷)和Mindblast(精神爆震),IAS, WSM和BoS对他们的速度都没有影响,FCR决定了施展他们的快慢。

    一个非常有趣的技能就是Dragon Flight(飞龙在天),FCR决定了它的初始cast速度,传送到目标面前后的踢击动作则取决于Asn的IAS、WSM和BOS等这些EIAS特性(即SI),HOHO,完美的结合。

    再顺便说说Teleport(瞬移)吧,现在已经不是Sor的专利了。假设Asn的Cast Rate Frames为9帧,从A点TP到B点,那这9帧的动作是在哪里完成?A点全部、B点全部、A→B整个过程?
    答案是A→B整个过程(上面的DF也是如此),以前一直有存疑,这次终于了解了,施法动作和攻击动作的原理是一样的,算是拨乱反正吧。

    EFCR=Effective Faster Cast Rate:有效FCR
    FCR=Faster Cast Rate:快速施法速度
    EFCR = [(120 * FCR)/(120 + FCR)]
    相应的,EFCR也可转换为FCR:FCR = (120 * EFCR)/(120-EFCR)

    Asn施法动作的各项参量及公式
    Cast Rate Frames = {256*(FramePerDirection) / [AnimationSpeed*(BaseRate+EFCR)/100]}-1
    AnimationSpeed = 256
    FramePerDirection = 17
    BaseRate = 100



    +-----+------+
    | FCR |Frames|
    +-----+------+
    |   0 |  16  |
    |   8 |  15  |
    |  16 |  14  |
    |  27 |  13  |
    |  42 |  12  |
    |  65 |  11  |
    | 102 |  10  |
    | 174 |  9   |
    +-----+------+




    Hit Recovery(打击恢复)和Blocking(格挡动作)
    和施法动作类似。

    EFCR=Effective Faster Hit Recovery:有效FHR
    FHR=Faster Hit Recovery:快速打击恢复
    EFHR = [(120 * FHR)/(120 + FHR)]

    Asn打击恢复的各项参量及公式
    Hit Recovery Frames = {256*(FramePerDirection) / [AnimationSpeed*(BaseRate+EFHR)/100]}-1
    AnimationSpeed = 256
    FramePerDirection = 5
    Base = 50



    +-----+------+
    | FHR |Frames|
    +-----+------+
    |   0 |   9  |
    |   7 |   8  |
    |  15 |   7  |
    |  27 |   6  |
    |  48 |   5  |
    |  86 |   4  |
    | 200 |   3  |
    +-----+------+



    EFBR=Effective Faster Block Rate:有效FBR
    FBR=Faster Block Rate:快速格挡速度
    EFBR = [(120 * FBR)/(120 + FBR)]+ Skill Bonus

    Asn快速格挡的各项参量及公式
    Block Rate Frames = {256*(FramePerDirection) / [AnimationSpeed*(BaseRate+EFBR)/100]}-1
    AnimationSpeed = 256
    FramePerDirection = 3
    Base = 50



    +-----+------+
    | FBR |Frames|
    +-----+------+
    |   0 |   5  |
    |  13 |   4  |
    |  32 |   3  |
    |  86 |   2  |
    | 600 |   1  |
    +-----+------+



    收工。
    ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

    神话战网出品,必出精品!

    嫌怪物和地图素材太小???赶紧找我定制吧!!!
    QQ:281886256
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|神话暗黑 ( 陕ICP备18004004号-1 )

    GMT+8, 2026-1-29 12:45 , Processed in 0.094065 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表