注释对于动画相当于指令一样的东西,当对应时间点触发注释时,动画也会做出相应的效果,常态来说skyrim本身的行为内已经包含了这些注释,对于独立行为来说,往往作者都会通过外部注释来执行指令而不是行为内置注释,例如现代的战斗系统MCO,因为每个MCO动画都会有不同的HIT时间,如果直接行为内置注释,那么所有动画的HIT时间都会一致,那么快速攻击和慢攻击就区分不开了,或者出现动画和伤害出现时间不匹配的情况
如果修改一个动画的注释?
使用hkanno64是最直接的办法
通过hkanno64的CMD界面输入指令"hkanno64.exe dump -o 导出的数据TXT文件名.txt 你的hkx名.hkx"
可以把hkx中的数据全部导出
通过"hkanno64.exe update -i xxxx.txt xxxx.hkx"
重新导入
不同的注释结构有一定区别,大多数注释采用 时间+指令的结构
例如:
0.50000 HitFrame
则,动画播放到0.5时,触发HIT指令
原版skyrim通用注释:
CastOKStart
preHitFrame
( 预攻击帧,往往是必须的,不同MOD可能有不同作用,某些MOD会用此注释来判定扣除耐力,如英灵殿战斗系统,只有检测到pre才会扣除耐力 )
weaponSwing
( 必要注释,会影响一个攻击是否会出现武器挥舞声音,人物呐喊声,对于精准判定Precision来说,这个是简易的判定胶囊启动器,当检测到swing时,Precision会打开伤害判定,你才能对敌人造成伤害 )
weaponLeftSwing
( 功能同上,主要影响左手武器 )
HitFrame
( 攻击伤害判定帧,在原版skyrim中,当动画触发HitFrame时会对敌人造成伤害,在Precision中该注释被其他注释取代 )
音效注释:
SoundPlay.XXXXXXXXXXXXXX
(动画播放到某个时间点,播放对应音效,这个可以自定义,什么音效都可以)
例:
SoundPlay.WPNBashShieldLSD 盾牌音效
SoundPlay.WPNSwingUnarmed 徒手音效
其他音效:
Footletf 左脚音效
FootRight 右脚音效
FootScuffRight
FootScuffLeft
这些音效不是必要的,但是会印象你走路的声音之类的,某些MOD会监听这些注释来触发效果,如脚印MOD,只有触发这些注释才会产生脚印
以上是最基础的几个指令,任何战斗系统都可以使用
AMR相关注释:
animmotion X Y Z (AMR坐标)
使用案例:
0.0 animmotion 0 0 0
0.5 animmotion 0 50 0
则,角色root在动画0秒时处于0 0 0坐标,0秒 ~ 0.5秒期间匀速移动至正前方50距离
animrotation X (AMR旋转坐标)
使用案例
0.0 animrotation 0
0.5 animrotation 90
则角色 root 0 ~ 0.5秒顺时针旋转90度
SKYSA专用注释:
skysa战斗系统专用的注释,其他系统无法使用
SkySA_TriggerIntervalWin 缓冲
SkySA_AttackWinStart (SKYSA连段开始,则此注释触发时,允许你进行下一次攻击,如轻5=>轻6)
SkySA_AttackLoop (只有最后一个skysa轻攻击才会需要,功能和start一致,但是他不会进行下一个攻击,而是回到第一个攻击,如轻5=>轻1)
SkySA_AttackWinEnd (SKYSA连段结束,触发此注释时,不再允许进行下一次攻击,只能等待动画播放结束)
attackStop (动画结束,只有skysa 1.9需要,2.0以上版本不需要)
SKYSA NPC专用注释:
NPC专用注释用于强制NPC进行下一次攻击,不要给玩家使用,否则你会一键打完一整套攻击
attackStart
强制NPC进行下一次轻攻击(写在SkySA_AttackWinStart
之后)
attackpowerstartforward
强制NPC执行一次重击(严格来说对于skyrim来说是执行一次前重击,skysa的重击调用的是前重击)
轻攻击例子:
0.666667 SkySA_AttackWinStart
0.666668 attackStart
1.000000 SkySA_AttackWinEnd
0.666667秒,可以开始下一个操作,命令NPC0.666668秒使用下一个轻攻击,轻1=》轻2 连段完成,后面的一样这么做就行
最后一个轻攻击会因为带有SkySA_AttackLoop
,自动循环回轻1,除非你让他发动重击
重攻击例子:
0.666667 SkySA_AttackWinStart
0.666668 attackpowerstartforward
1.000000 SkySA_AttackWinEnd
0.666667秒,可以开始下一个操作,命令NPC 0.6666668秒强制进行重攻击,轻1=》重2 连段完成
MCO专用注释:
MCO与skysa不同,可以自由设定攻击派生路线,不一定需要使用轻1=>轻2,MCO完全可以做到轻1=>轻X(任何编号),重击同理,同时还允许重击=>轻,这些都是skysa做不到的,还有很多其他功能,你可以理解成MCO是ABR和SKYSA融合之后集大成者
轻攻击开始结束 (这两个注释决定你在什么时间段内可以进行MCO轻攻击派生)
MCO_WinOpen
MCO_WinClose
如
0.5 MCO_WinOpen
1.0 MCO_WinClose
则你可以在 0.5 ~ 1.0秒时间段内按下一次轻攻击
重击开始结束 (MCO重击窗口注释,和轻攻击同理,允许你在期间派生重击)
MCO_PowerWinOpen
MCO_PowerWinClose
注: 与SKYSA不同,SKYSA轻重窗口是同一个,MCO则是分开的,这意味着MCO的轻攻击和重攻击可以写到不同的时间,如一个动画0 ~ 0.5秒可以派生轻攻击,0.5 ~ 1.0秒才能派生重击,MCO是可以做到的
MCO_Recovery
(MCO中断注释,触发该注释时,允许你使用走路移动来中断动画,对于一些后摇很长的动画很有用,玩家可以自由选择是否观看后摇,另外在MCO LOOP攻击中,中断注释可以解除LOOP状态)
PIE.@SGVI|MCO_nextattack|X
(你的下一个MCO轻攻击是什么,X为变量,如果你填1,那么你这个攻击下一次派生就会是轻1,以此类推,一定要写在MCO_WinOpen
的时间点之前,否则当MCO_WinOpen
开启后又检测不到这个注释,那么MCO会无法识别你要做什么攻击,区别于SKYSA,可以使用这条注释回到轻1,而不需要写LOOP注释)
PIE.@SGVI|MCO_nextpowerattack|X
(功能同上,决定你这个动画下一次重击是哪个文件)
MCO_ChargedAttack
(触发该注释时,进入特殊动画MCO_attackloopX
,loop动画在播放结束之后会自动从头播放,无限循环,直到触发MCO_Recovery
)
LOOP在触发MCO_Recovery
之后会进入MCO_powerattackoutro
,然后回到站姿
SCAR注释:
SCAR可以简单的理解为条件行为,当NPC判断当前满足SCAR指令条件,就会执行一个动画
例:
0.800000 SCAR_ComboStart
1.000000 SCAR_ActionData{"IdleAnimation":"ADXP_NPCPowerAttack", "MinDistance":0, "MaxDistance":83, "StartAngle":-60, "EndAngle":60, "Chance":30, "Type":"RPA"}
0.500000 SCAR_ActionData{"IdleAnimation":"ADXP_NPCNormalAttack", "MinDistance":0, "MaxDistance":91, "StartAngle":-60, "EndAngle":60, "Chance":100, "Type":"RA"}
0.8 SCAR_ComboStart
则代表在0.8秒时检测SCAR条件,如符合条件,则执行下一个动画操作,SCAR_ComboStart必须在MCO_WinOpen之后,因为不到达MCO_WinOpen你无法进行连击,不存在执行下一次攻击的说法,同理其他战斗系统也是如此
与其他注释不同SCAR_ActionData
前面的不是时间,而是权重,数字越大优先级越高,以上面的注释来说,如果满足条件,NPC会优先执行1.0权重的那个动画,而不是0.5的
"IdleAnimation":"XXXXXX"
下一次执行的idle事件,这个不是绝对的,例子中执行的是MCO轻重击事件,用于执行其他事件也可以,如龙吼
"MinDistance":X
最小距离,下一次事件执行最小的距离是多少
"MaxDistance":X
最大距离,下一次事件执行的最大距离是多少
以上面第二行为例,MIN 0 MAX 83
,意思为当敌人和玩家之间的距离是0 ~ 83时,执行MCO重击
你也可以制作一些特殊条件,如 0 ~ 80进行轻击,80 ~ 150进行重击,这样玩家在不同的距离敌人也会做出不同的攻击
"StartAngle":X, "EndAngle":X
顺时针逆时针角度,决定执行事件的角度,如-60 和 60,则玩家处于NPC前方120度扇形范围内,NPC就会执行这个攻击
"Chance":X
执行行为的概率,设置100时,满足条件NPC100%会使用攻击
"Type":"RPA"
攻击类型,对于当代战斗系统来说意义不大 RA则右手攻击,RPA则右手重击,左手同理
俗称I帧,也叫无敌帧,触发I帧时,角色不会受到任何伤害
SpecialFrames_Invincible{"Duration":XX}
时间+注释,XX内是时间变量,任意数值
例如
0.5 SpecialFrames_Invincible{"Duration":0.5}
则动画播放到0.5秒时,触发I帧,并让无敌持续0.5秒({"Duration":0.5} 为持续时间)
payload或阎魔刀或精准之类的MOD注释不做过多讲解,或另外讲解
至于ABR,他没有专用注释