• 3424阅读
  • 2回复

动作帧数—Dtalon详解 [复制链接]

上一主题 下一主题
离线铃铛
 

发帖
59624
金钱
6311
91币
0
信誉
0
资产
0 IST
在线时间
3431 小时
注册时间
2009-08-31
最后登录
2021-02-27
只看楼主 倒序阅读 使用道具 楼主  发表于: 2010-11-19 13:07:25
Animation Frame—Dtalon Fpa Specific
Animation Frame
—Dtalon Fpa Specific
动作帧数—Dtalon详解

BY Louis-J
本帖出自:HOLY Clan和暗黑品网

感谢:
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。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
离线铃铛

发帖
59624
金钱
6311
91币
0
信誉
0
资产
0 IST
在线时间
3431 小时
注册时间
2009-08-31
最后登录
2021-02-27
只看该作者 沙发  发表于: 2010-11-19 13:07:57
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
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。
※※※※※※※※※※※
离线铃铛

发帖
59624
金钱
6311
91币
0
信誉
0
资产
0 IST
在线时间
3431 小时
注册时间
2009-08-31
最后登录
2021-02-27
只看该作者 板凳  发表于: 2010-11-19 13:09:19
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
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  |
+-----+------+


快速回复
限100 字节
 
上一个 下一个