admin 发表于 2018-5-22 21:29:02

角色动作帧数相关原理及修改

使用animdata_edit工具,解析animdata.d2为animdata.txt文件


游戏中的动作基本都是按照下边的公式来计算的。一些特殊动作可能稍有不同,但基本也都一致。
FPA={HitShift*FramePerDirection/[(BaseRate+SI)*AnimationSpeed/100]}-1
名词解释
FPA                           每次动作的帧数
HitShift                      攻击精度参数,数值固定为256
FramePerDirection             在每个方向上的动作长度(基础帧数)
BaseRate                      基础速率,数值取决于动作类型,大部分情况数值为100
SI                            速度增量
AnimationSpeed                动作速度
注意事项
1. FramePerDirection通常随武器及动作类型取值于Animdata.D2,其中武器类型在weapons.txt中定义,动作类型在skills.txt中定义。唯一特殊的是拥有顺序动作的技能,它的FramePerDirection由D2Common.dll定义。
2. AnimationSpeed通常随武器及动作类型取值于Animdata.D2。唯一特殊的是拥有顺序动作的技能,它的AnimationSpeed同Get Hit(GH)动作类型。
3. Animdata.D2文件存放于D2exp.mpq文件中的data/global文件夹下。
4. BaseRate为基础速率,取决于动作类型。绝大多数动作类型BaseRate=100。格档和打击回复=50。另有一小部分技能例外。
5. SI=Speed Increase,速度增量。
当动作为攻击动作时,数值为SI=EIAS+SIAS-WSM。其中
   EIAS=[(120*IAS)/(120+IAS)]
   SIAS为各种技能的加速或减速效果,例如狂热灵气,速度爆发,衰老,圣冰减速等。
   WSM为武器的基础速度。
当动作为施法动作时,SI=EFCR=[(120*FCR)/(120+FCR)]
当动作为格挡动作时,SI=EFBR=[(120*FBR)/(120+FBR)]。如果开启了神圣之盾技能,则SI再加50.
当动作为打击恢复动作时,SI=EFHR=[(120*FHR)/(120+FHR)]
6. BaseRate+SI最大值为175(所以攻击速度有上限),最小值为BaseRate*15%
7. []为向下取整,{}为向上取整。
具体原理可参考攻击速度计算全解析。

动作代码定义方法

可以看出,主要的未知参数便是FramePerDirection和AnimationSpeed两项。这两项通常存放于Animdata.D2文件中。查找时需要依据具体的动作来查询。
每个动作在该文件中均有一个名称,该名称主要由三部分组成:角色或怪物类型,动作类型,武器类型。
举例来讲吧。比如我想查询法师的打击恢复动作参数。
首先角色代码,查询得知,Sorceress对应代码为SO
然后是动作类型,打击恢复动作类型代码为GH
最后是武器类型,SOR拿单手Orb的时候,武器代码为1HS
综上可知,拿Orb的法师打击恢复动作对应代码为SOGH1HS.
角色类型代码见下表。怪物类型代码存放于Monstats.txt文件中。
───────
角色职业代码
───────
Amazon   AM
SorceressSO
Necroman   NE
Paladin    PA
Barbaria   BA
Druid      DZ
Assassin   AI
───────
NEC-Vamp   VA
WereWolf   40
WereBear   TG
ACT1-Rog   RG
ACT2-Des   GU
ACT3-Eas   IW
ACT5-Bar   0A
───────
动作类型代码见下表。
──────────
名称         代码
──────────
Death         DT
Neutral         NU
Walk            WL
Run             RN
Get Hit         GH
Town Neutral    TN
Town Walk       TW
Attack1         A1
Attack2         A2
Block         BL
Cast            SC
Throw         TH
Kick            KK
Skill1          S1
Skill2          S2
Skill3          S3
Skill4          S4
Dead            DD
Sequence      SQ
Knock back      KB
──────────
武器类型代码见下表。怪物的武器类型代码存放于Monstats2.txt中
────────────────────────────────────
武器代码      含义
────────────────────────────────────
1HS         单手挥击武器-除1HT和HT1外的单手武器(包括throwing axes)
1HT         单手戳刺武器-daggers,javelins,throwing knives,potions
2HS         双手挥击武器-所有双手剑(野蛮人单手用时为1hs)
2HT         双手戳刺武器-spears
STF         除2HS和2HT外的双手武器
BOW         弓
XBW         弩
HT1         爪
HT2         双手持爪
HTH         空手
1JS         Left Jab Right Swing
1JT         Left Jab Right Thrust
1SS         Left Swing Right Swing
1ST         Left Swing Right Thrust
────────────────────────────────────上文中介绍动作均存放于Animdata.D2文件中。因为该文件是二进制文件,无法读取,故需要使用特定工具来把它转化为文本格式文件。

一般情况下使用Animdata.d2_editor软件

可以看出,Animdata.D2文件已经存放在该文件夹中。运行Extract.bat文件,便可把它转化为文本文件:AnimData.txt文件。

使用办公软件Microsoft Excel,或者专业查看均可打开。

第一列CofName便是动作类型代码了。后边对应的两个参数便是我们需要查询的参数。

修改动作长度
如果你想修改某个动作的动作长度,修改该动作对应的FramePerDirection和AnimationSpeed两个参数即可。修改完毕保存后,退出D2excel软件,再次进入Animdata.d2_editor软件的文件夹,运行Pack.bat文件即可重新生成Animdata.D2文件。


将生成的Animdata.D2文件放入data/global文件夹下,然后将data文件夹放入游戏目录下,游戏快捷方式挂上参数 -direct进入游戏,便调用了新生成的Animdata.D2文件,你之前所做的修改生效了。
页: [1]
查看完整版本: 角色动作帧数相关原理及修改