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

MOD制作指南SP——关于动作的命名与注释

2022-11-07 17:54 作者:甜味剂豆浆  | 我要投稿

mod版本内容时有变更,如有错误和遗失请见谅。

本文最后更新与2023年3月6日。


关于上古卷轴动作动画的制作,已经有大佬制作了一系列的视频,但关于注释什么的却都是点到即止,所以这里我就在这里做出一些微不足道的补充。

这里是有关教程:BV17B4y167rP

相比于视频,还是文字更适合这些内容。


关于动作制作我在之前曾经发布过一个视频,但视频的一小部分内容在现在有些许争议性,所以我个人将其下架。


然而这有什么可争论的?

已经公开了10年的方法还有什么遮遮掩掩的必要?

此工具最早于2011年发布。

https://www.nexusmods.com/skyrim/mods/1797

我整了个用3DMAX的,在这个网站里

https://finkiin.com.cn/d/172


当然,比起那些打着所谓“赞助”旗号的付费mod,我更痛恨只会偷窃的废物。

至少他们真的有花费时间做出了属于他们自己的东西,而某些人呢?只会拿着别人的东西苟且偷生,恬不知耻的改几个注释做成一个包公开售卖,不会吧?不会真有人废物到这种程度吧?

对,说的就是你这拿着家谱冲浪的东西。

https://space.bilibili.com/612414153?spm_id_from=333.337.0.0

挂着这个尸体,作为威慑。


(你说重置一遍重新发上来?给我送钱我马上做!!!)


好了,废话不多说。

本期我们的主题是

本体动作文件的修改

围绕MCO动作系统与其前置的注释文件相关书写格式与注意事项。

包括

MCO

DAR(MCO的前置之一)

AMRMCO的前置之一)

Payload InterpreterMCO的前置之一)

SCAR(这个不是MCO的前置。。。)

Precision(精准判定,也不是这个mod的前置)


但在开始之前,如果你是mod作者,在做动作的话,我们先安装一个blender插件,让你写注释没那么痛苦。。。

https://www.skyrim-guild.com/distar/guides/blender-annotation-addon

插件作者:Distar,SKYSA,MCO作者。


下载这俩。

打开blender

安装第一个下载的文件

之后打开你的工程文件(rig)

右边的菜单会出现这个栏位

接着按菜单里的那个import,找到第二个下载的文件

当你看见有这个骨骼组,就算成功了

如果失败,就把那个黄色小人改成此名字

当你做过一些动作再看,这些名字是不是有些眼熟?为他们设置关键帧,就是写注释了

完成后,再export,就是注释了!!!

其中的具体数据可以自己再修改


那么本期教程,正式开始。

首先是关于如何将你制作的动作修改为原版动作。

很简单,把名字改成一样的就行了,对,就这么傻瓜。

不过需要注意的是,战斗时动作需要尽量与原版时间相同,不然会看起来很尴尬。。。

这里就写一些人类常用的动作前缀与名字

具体的可以自己拆包自己一个一个查看。


这些是关键词,通常会出现在名字的开头或某个地方。

mt 非战斗,不拔出武器时的状态

1hm 单手(或双持的行为动作)

2hm 手双剑(或锤、斧的行为动作)

h2h 空手

bow 弓

mag 装备法术时(未攻击)

magic 施展法术时(攻击)

staff 法杖

staff magic cast 手持法杖施法(攻击)

dw1hm1hm 双持(有独立的站立动作)

sneak 潛行状态

2hw 锤 斧(有独立的站立动作)

tor_ 火把

idle 站立

jump 跳 (fast起跳fall下落land着地)

run 跑

sprint 冲刺

walk 走

attack 攻击

attackpower 重击

block 格挡

shd 盾牌

mlh_ 左手单持法术

mrh_ 右手单持法术

forward 前(fw是命令简写)fwd

backward 后(此命令只对walk等有效)bwd

left 左

right 右

turn 转向

crossbow 弩


下面是具体的一部分,也是经常被修改的,还有些莫名其妙的命名就自己找方法查看吧。。。

mt_idle.hkx —— 闲置站姿
mt_runbackward.hkx —— 向后奔跑
mt_runbackwardleft.hkx —— 向左后奔跑
mt_runbackwardright.hkx —— 向右后奔跑
mt_runforward.hkx —— 向前奔跑
mt_runforwardleft.hkx —— 向左前奔跑
mt_runforwardright.hkx —— 向右前奔跑
mt_runleft.hkx —— 向左奔跑
mt_runright.hkx —— 向右奔跑
mt_turnleft60.hkx —— 原地向左转身1
mt_turnleft180.hkx —— 原地向左转身2
mt_turnright60.hkx —— 原地向右转身1
mt_turnright180.hkx —— 原地向右转身2
mt_walkbackward.hkx —— 向后行走
mt_walkbackwardleft.hkx —— 向左后行走
mt_walkbackwardright.hkx —— 向右后行走
mt_walkforward.hkx —— 向前行走
mt_walkforwardleft.hkx —— 向左前行走
mt_walkforwardright.hkx —— 向右前行走
mt_walkleft.hkx —— 向左行走
mt_walkright.hkx —— 向右行走
mt_sprintforward.hkx —— 冲刺
mt_getupfromback.hkx —— 从躺姿起身(仅女性)
mt_getupfromfront.hkx —— 从趴姿起身(仅女性)
mt_idlemuscularoffset.hkx —— (仅女性)
chair_idlebasevar1.hkx —— 主角坐姿
chair_idlebasevar1shoulders.hkx 和 chair_idlebasevar2.hkx —— NPC可见的两个坐姿,主角用不到
chair_idlechildbasevar1.hkx —— 小孩坐姿

单手武器
1hm_idle.hkx —— 单手武器闲置动作
1hm_attackpower.hkx —— 强力攻击
1hm_attackpowerbwd.hkx —— 向后强力攻击
1hm_attackpowerfwd.hkx —— 向前强力攻击
1hm_attackpowerleft.hkx —— 左键强力攻击
1hm_attackpowerright.hkx —— 右键强力攻击
1hm_attackleft.hkx —— 左键攻击
1hm_attackright.hkX —— 右键攻击
1hm_runforward.hkx —— 单手武器向前奔跑
1hm_runforwardleft.hkx —— 单手武器向左前奔跑
1hm_runforwardright.hkx —— 单手武器向右前奔跑
1hm_runbackward.hkx —— 单手武器向后奔跑
1hm_runbackwardleft.hkx —— 单手武器向左后奔跑
1hm_runbackwardright.hkx —— 单手武器向右后奔跑
1hm_runleft.hkx —— 单手武器向左奔跑
1hm_runright.hkx —— 单手武器向右奔跑
1hm_turnleft60.hkx —— 单手武器原地向左转身1
1hm_turnleft180.hkx —— 单手武器原地向左转身2
1hm_turnright60.hkx —— 单手武器原地向右转身1
1hm_turnright180.hkx —— 单手武器原地向右转身2
1hm_walkforward.hkx —— 单手武器向前行走
1hm_walkforwardleft.hkx —— 单手武器向左前行走
1hm_walkforwardright.hkx —— 单手武器向右前行走
1hm_walkbackward.hkx —— 单手武器向后行走
1hm_walkbackwardleft.hkx —— 单手武器向左后行走
1hm_walkbackwardright.hkx —— 单手武器向右后行走
1hm_walkleft.hkx —— 单手武器向左行走
1hm_walkright.hkx —— 单手武器向右行走
1hm_boundswordequip.HkX —— 召唤剑装备
1hm_equip.hkx —— 单手剑拔出
1hm_unequip.hkx —— 单手剑收起
axe_equip.hkx —— 单手斧(锤)拔出
axe_unequip.hkx —— 单手斧(锤)收起
dag_equip.hkx —— 匕首拔出
dag_unequip.hkx —— 匕首收起
mt_sprintforwardsword.hkx —— 单持武器冲刺
1hm_sprintforwardsword.hkx —— 单持武器冲刺(貌似多余的无用文件)


双持单手武器(运动状态延用单手武器)
dw_sprintforwardsword.hkx —— 双持冲刺
dw1hm1hmidle.hkx —— 双持站姿
dw_attackpowerback.HKX 双持向后强力攻击
dw_attackpowerforward.HKX 双持向前强力攻击
dw_attackpowerknifeslashcombo.HKX (刀斜向组合攻击)
dw_attackpowerleft.HKX 双持向左强力攻击
dw_attackpowerright.HKX 双持向右强力攻击
dw_attackpowerstab.hkx 双持强力后退重击
dw1hm1hm_attackright.hkx 双持向右攻击
dw1hm1hm_attackrightintro.hkx 双持向右攻击前奏
dw1hm1hm_powerattack.hkx 双持功耗(强力)攻击
dw1hm1hm_specialattackpower.hkx 双持特殊攻击
dwrunback_attackright.hkx 双持向后奔跑右键攻击
dwrunforward_attackright.hkx 双持向前奔跑右键攻击
dwrunleft_attackright.HKX 双持向左奔跑右键攻击
dwrunright_attackright.HKX 双持向右奔跑右键攻击
dwwalkback_attackright.hkx 双持向后行走右键攻击
dwwalkforward_attackright.hkx 双持向前行走右键攻击
dwwalkleft_attackright.HKX 双持向左行走右键攻击
dwwalkright_attackright.HKX 双持向右行走右键攻击


双手武器
2hc_equip.hkx —— 双手武器拔出
2hc_unequip.hkx —— 双手武器收起
2hm_idle.hkx —— 双手剑闲置动作
2hm_runforward.hkx —— 双手剑向前奔跑
2hm_runforwardleft.hkx —— 双手剑向左前奔跑
2hm_runforwardright.hkx —— 双手剑向右前奔跑
2hm_runleft.hkx —— 双手剑向左奔跑
2hm_runright.hkx —— 双手剑向右奔跑
2hm_turnleft60.hkx —— 双手剑原地向左转身1
2hm_turnleft180.hkx —— 双手剑原地向左转身2
2hm_turnright60.hkx —— 双手剑原地向右转身1
2hm_turnright180.hkx —— 双手剑原地向右转身2
2hm_walkforward.hkx —— 双手剑向前行走
2hm_walkforwardleft.hkx —— 双手剑向左前行走
2hm_walkforwardright.hkx —— 双手剑向右前行走
2hm_sprintforwardsword.HkX —— 双手剑冲刺
2hw_idle.hkx —— 双手斧(锤)闲置动作



接着是如何将动作中的注释导出为可编辑模式,然后将其导入。

什么是注释?我们先按下不表,看到后面你自然会明白的。

当然这里有个全英文的视频简单介绍了annotation(国内称其为注释)

BV18T411R7Zn


工具我直接在这里提供给你。

pan.baidu.com/s/1Obnm_2bQ7rwX0iOT_0HC8w?pwd=2076 

2076 


解压缩至任意处,接着打开那个后缀为exe的东西

安装


当你想修改有一个动作的注释时,将hkx文件拖到解压出来的文件夹里

接着将其拖到一个名叫dump.bat的文件上,会接着



什么是MCO?

简单来说就是一个新的战斗动作框架,我们看个gif自己感受。
这是原版位移与mco位移。

这里的效果其实是由AMR做到的。。。



mco战斗时动作。





理论上一套动作其中有多少变招和连段随你心意,而其中动作的判定伤害时间,位移限制,变招设计,都是由所谓注释判定。我们直接打开一个MCO动作注释举例。



我直接说明他们怎么写的,自己写时照着葫芦画瓢就行了。
像0.450000这种数字就是具体某一帧对应的时间。
# numOriginalFrames: 48
# duration: 1.600000 动作总时间
# numAnnotationTracks: 99
# numAnnotations: 24
上面这些不用管。


0.450000 CastOKStart 

注释开始判定时间帧,可写可不写,没写也不要紧
0.500000 preHitFrame 

预输入时间判定,在武器开始挥动前
0.600000 weaponSwing

判定武器开始挥动,剑影,挥动音效生成
0.640000 HitFrame 

伤害生成判定,设多少个就会造成多少次伤害(可以写在原版动作里,嘿嘿嘿)
0.680000 MCO_WinOpen 

这个是输入指令就会触发下个轻攻击动作的时间点开始
1.400000 MCO_WinClose 

这是结束
0.680000 MCO_PowerWinOpen 

重攻击的开始
1.400000 MCO_PowerWinClose 

结束
0.060000 PIE.@SGVI|MCO_nextattack|3 

输入轻攻击指令会出现的下个动作
0.060000 PIE.@SGVI|MCO_nextpowerattack|1 

输入重攻击指令会出现的下个动作
0.000000 PIE.@SGVF|MCO_AttackSpeed|0.6 

决定攻击速度,是的,这意味着原版攻速perk无用了
1.500000 MCO_Recovery 

在这帧过后输入位移指令会取消动作后摇


下面是AMR相关,最累的就是写位移,哪几帧做出了位移,你都要写上去
0.400000 animmotion 0 0 0
0.440000 animmotion 0 9 0
0.500000 animmotion 0 65 0
0.560000 animmotion 0 149 0
0.600000 animmotion 0 208 0
0.680000 animmotion 0 264 0
1.020000 animmotion 0 264 0
1.590000 animmotion 0 278 0


其中有几个注意事项

1.写的顺序不是很重要,可以排乱。

2.指定下一个是什么动作的注释时间不重要,可以乱填。

3.设置攻速的时间也不重要。



这时对于从来没做过动作的新手肯定会有疑问,动作文件在哪?注释去哪搞的?


好啦,慢慢来,现在我们打开一个以MCO为前置的动作包。这就是动作的文件路径。

你这时也应该明白,为什么MCO的动作最后都以1,2,3,4,5命名


很遗憾,目前MCO还无法做到以下这样的操作
A1——A2或延迟后A3或B1
只能
A1——A2或B1
A1——A3或B1
很可惜啊。。。我想看拳皇!!!教练我想看这个!!!

这个也行!!!



为什么我会把这里圈起来?那个condition.txt是什么?

这里就跟一个MCO的前置MOD有关了!!!


下面有请本期教程的另一个主角登场!

Dynamic Animation Replacer(DAR)

简单来说就是不占用原版资源的动作替换器,但动作数量被mod作者限制在了16384,n网的评论区有破除限制到32000多的方法。
当然直接装是没有任何效果的,它只是一个相当与fnis和FC女神的动作引擎,不过DAR最大的优势就是不用启动引擎刷新动作,直接打开游戏就能使。
那么我们再回到上面这张图

一个DAR为前置的动作都是这样的结构,别问为什么,问就是祖宗之法不可变。

meshes\actors\character\animations\DynamicAnimationReplacer\_CustomConditions/(数字)

想改第一人称就把animations之前加一个_1stperson文件夹。
之后的数字是什么?
它代表这这个动作的优先级,数字越高就越先判定。如果装的其他mod中使用数字有重复,就会不生效,这点千万注意!!!

文件夹的数字命名在-214748364和2147483647之间,看样子都根本用不完啊,哈哈哈

所以,新建一个数字文件夹,把你想修改的动作hkx放进去。
如果想区分性别,在里面建立male和female文件,分别对应男女。
但还没完,我们需要一个判定文件来完成我们的修改操作,新建一个_conditions.txt,至于怎么写,我直接列个表吧

以下表单由贴吧老哥 半只大肥猫 撰写,感谢他的付出

原帖

https://tieba.baidu.com/p/7946076420?pn=1


IsEquippedRight(Form item)
Does the actor have the specified item equipped to his right hand?
右手是否装备了特定物品。(一般用not指令排除特定mod装备动作)


IsEquippedRightType(GlobalVariable type)
Is the item equipped to the actor's right hand the specified type?
右手是否装备了特定类型的装备(最常用,比如双手剑单手剑等等)


IsEquippedRightHasKeyword(Keyword keyword)
Does the item equipped to the actor's right hand have the specified keyword?
右手装备是否有特定的关键字(几乎不用)


注:左手就把上面的【Right】换成【Left】。

IsEquippedShout(Form shout)
Does the actor currently have the specified shout?
是否装备了特定的龙吼


IsWorn(Form item)
Is the actor wearing the specified item?
是否穿戴了特定的装备(就比如戴个项圈就猫爬)


IsWornHasKeyword(Keyword keyword)
Is the actor wearing anything with the specified keyword?
是否穿戴了含有特定关键字的装备(我几乎不用)


GlobalVariable type:
-1=Others
0=Fists空手
1=Swords单手剑
2=Daggers匕首
3=War Axes单手斧
4=Maces单手锤
5=Greatswords双手剑
6=Battleaxes双手斧
7=Bows弓
8=Staff法杖
9=Crossbows弩
10=Warhammers双手锤
11=Shields盾牌
12=Alteration Spells变换系
13=Illusion Spells幻术系
14=Destruction Spells毁灭系
15=Conjuration Spells召唤系
16=Restoration Spells恢复系
17=Scrolls法术卷轴(不是上古卷轴)
18=Torches(火把)

IsFemale()
Is the actor female?

是女性,男性则写NOT IsFemale()


IsChild()
Is the actor a child?

是儿童,非写not


IsPlayerTeammate()
Is the actor currently a teammate of the player?

是否是队友,同上


IsInInterior()
Is the actor in an interior cell?

在室内?


IsInFaction(Faction faction)
Is the actor in the specified faction?

是否是特定派别


HasKeyword(Keyword keyword)
Does the actor have the specified keyword?

是否有关键字


HasMagicEffect(MagicEffect magiceffect)
Is the actor currently being affected by the given Magic Effect?

身上是否受到特定魔法效果影响


HasMagicEffectWithKeyword(Keyword keyword)
Is the actor currently being affected by a Magic Effect with the given Keyword?

是否受到有特定关键字的魔法影响


HasPerk(Perk perk)
Does the actor have the given Perk?

是否有指定的技能点?


IsEquippedShout(Form shout)

Does the actor have the given Spell or Shout?

是否解锁了某项技能或者龙吼


IsActorValueEqualTo(GlobalVariable id, GlobalVariable value)
Is the ActorValue of the specified ID equal to the value?

角色的GlobalVariable id是否等于某个值(0-1之间的小数)


IsActorValueBaseEqualTo(GlobalVariable id, GlobalVariable value)
Is the base ActorValue of the specified ID equal to the value?

角色的GlobalVariable id基础值是否等于特定值


下面的这些是受到特定的debuff之后的减损,比如变成吸血鬼了在白天最大体力值和生命值会减少。
IsActorValueMaxEqualTo(GlobalVariable id, GlobalVariable value)
Is the max ActorValue of the specified ID equal to the value? 

给定角色的特定GlobalVariable id的最大值是否低于某个值


IsActorValueMaxLessThan(GlobalVariable id, GlobalVariable value)
Is the max ActorValue of the specified ID less than the value? 

给定角色的特定GlobalVariable id的最大值是否低于某个值


IsActorValuePercentageEqualTo(GlobalVariable id, GlobalVariable value)
Is the percentage ActorValue of the specified ID equal to the value?

给定角色的特定GlobalVariable id是否等于特定值


IsActorValuePercentageLessThan(GlobalVariable id, GlobalVariable value)
Is the percentage ActorValue of the specified ID less than the value?

给定角色的特定GlobalVariable id是否低于特定值


IsAttacking()
Is the actor currently attacking?

正在进攻


IsRunning()
Is the actor currently running?

在跑步(游戏默认的移动)


IsSneaking()
Is the actor currently sneaking?

在潜行


IsSprinting()
Is the actor currently sprinting?

在冲刺(按下alt的动作)


IsInAir()
Is the actor in the air?

在空中(就是跳跃还没落地的状态)


IsInCombat()
Is the actor in combat?

处于战斗状态,(就是响战斗音乐了)


IsWeaponDrawn()
Does the actor have his equipped weapon and/or magic spell drawn?

弓、法杖等蓄力


IsInLocation(Location location)
Is the actor in the specified location or a child of that location?

在特定地点(这个我没用过所以不知道括号里面的地点怎么填


IsParentCell(Cell cell)
Is the actor in the specified cell?

cell相关,你可以简单理解为某个具体地点)


IsMovementDirection(GlobalVariable direction)
Is the actor moving in the specified direction?

是否朝特定方向移动
GlobalVariable direction填写数字
0=Standing Still
1=Forward
2=Right
3=Back
4=Left


那现在我们写一个男性在室内生命值低于百分之三十非战斗状态的_conditions.txt:
NOT IsFemale() AND
IsInInterior() AND
IsActorValuePercentageLessThan(24, 0.30) AND
NOT IsInCombat()

not为判断为否

and为并且

剩下的就对照上面的自己看好了


还有一个关于概率问题

random(1)是绝对发生,random(0)是绝对不发生,
一个_condition.txt只决定它所在的子文件夹的几率。
所以就是说,如果存在100、101、102三个文件夹,那要让三者的动作发生概率相等的话:
102:random(0.33)
101:random(0.5)
100:random(1)或者不填写random在_conditions.txt里。


如果想指定玩家,就添加

IsActorBase("Skyrim.esm"|0x00000007)

这里是指是指定哪一位角色使用此动作

"Skyrim.esm"|0x00000007这个是什么?

"Skyrim.esm" 是指你想指定的mod的esp地址,这里是本体

0x00000007是指定角色的简化版fromID,简单来说就是数字身份证,这里是指定为玩家

怎么确定fromID?打开SSEEDIT,没有就去下载,N网!


怎么用SSEEDIT?

去看我在贴吧写的MOD使用指南01!顺便教你怎么做补丁!

https://tieba.baidu.com/p/7949958510?


找到并启动这个esp,去掉0x搜索即可。

记住写条件函数时,formID要加0x,去掉前两位字母或数字。

其他的东西自己想想怎么做。。。举一反三。

接下来是AMR相关

Animation Motion Revolution(AMR)




AMR简单来说就是给动作增加了位移限制的插件,本身不做任何事。需要你给动作添加所谓注释的东西才会启用。之后该动作会在播放时出现你想要的位移。如果不加的话做动作人物可能会直接飞出去到宇宙去了。。。所以需要我们作者自己决定在动作运行时的位移为多少。

0.560000 animmotion 0 149 0

第一个带小数点的数字为动作运行的某一个帧的时间,animmotion则是必须要写的的东西,你可以看成夹菜用的筷子,剩下的三个分别为X,Y,Z轴对应的位移距离。这些距离计算已经由上面的插件帮你设计好了,相对来说最好的数字。



别忘了AMR的注释!!!!

Payload Interpreter

中国作者。强无敌!!!

你可能见过别人视频中动作中释放的那些炫酷魔法效果,而这些,都由此实现。


首先在mod里注册你想要的spell或魔法效果或其他什么乱七八糟的东西
我们拿艾尔登战技MOD举例

中国作者。

绅士桑·Achang·Alex

在b站内出没,感谢他的优秀作品。


创建这些文件夹
你的mod\SKSE\PayloadInterpreter\Config
之后像图里创建一个后缀为ini的文件,名字随便你取

用记事本编辑
这里我举个例子
艾尔登战技的月影剑气
$ES_ES_MoonV = @CAST|0X852|EldenSkyrim.esp|1|1|0|0|0|0|0|15|15
$ES_ES_MoonV是你要在注释上写的东西,必须要有$
@CAST 为释放技能
0X852 为。。。跟DAR一样。。。fromID。。。
EldenSkyrim.esp 跟DAR一样
1|1|0|0|0|0|0|15|15 我们一个一个数字说明,看过ck说明书02应该了解我想表达什么
(1):effectiveness,我很难解释这个是什么,这里应该指的是剑气数量?吗?
(2):magnitude,法术强度值,剑气的话这里指的是伤害
(3):是否以自身为目标,此处为1即作用于自身
(4):需要的血量值,随便你填多少
(5):消耗生命值
(6):需要的耐力值
(7):消耗耐力值
(8):需要的法力值
(9):消耗法力值

(当然这个步骤是不必要的,可以直接在注释里的@的后面接castspell,直接在注释里写释放的魔法formid和相关参数,写ini主要是方便管理)

这里我也列出所有提供的参数(为什么中国作者不写个中文的介绍哼啊啊啊啊啊啊啊啊!)

  • set animation variable bool(设置动画为bool变量,脚本和某些mod可能会用到)

@SGVB|(string)graph variable|(bool)value

  • set animation variable float(设置为float变量,同上)

@SGVF|(string)graph variable|(float)value

  • set animation variable int(设置为int变量,同上)

@SGVI|(string)graph variable|(int)value

  • Apply a spell and its magic effect onto the actor instantly. Spell may stay on actor.(将设定的spell直接释放于actor上)

@APPLYSPELL|(string)spell formID|(string).esp/.esm/.esl containing the spell

  • Remove a spell's effect from the actor.(将设定的spell于actor上移除)

@UNAPPLYSPELL|(string) spell formID|(string.esp/.esm/.esl containing the spell

  • set the actor to ghost(invincible). If the argument is false, "unghost" the character, and vice versa.(将自己设置为无敌状态,不会受到任何伤害)


    @SETGHOST|(bool)isghost


  • play a nif particle effect on the actor(添加nif于actor上,主要是添加特效)


    @PLAYPARTICLE|(string).nif file's relative path|(int)body part index|(float)nif scale|(float)play time|(utin32) flags|(float)X offset|(float)Y offset|(float)Z offset

    • 只能用于人类。

    • nif的路径一般为 ValhallaCombat/block_Counter.nif(作者举例)

    • 设定的身体部位参数

    kHead = 0,

    kHair = 1, 

    kBody = 2, 

    kHands = 3,

    kForearms = 4,

    kAmulet = 5,

    kRing = 6, 

    kFeet = 7,

    kCalves = 8, 

    kShield = 9, 

    kTail = 10, 

    kLongHair = 11,

    kCirclet = 12, 

    kEars = 13, 

    kDecapitateHead = 20, 

    kDecapitate = 21, 

    kFX01 = 31, 

    kEditorTotal = 32, 

    kHandToHandMelee = kEditorTotal, 

    kOneHandSword = 33, 

    kOneHandDagger = 34, 

    kOneHandAxe = 35,

    kOneHandMace = 36, 

    kTwoHandMelee = 37,

     kBow = 38, 

    kStaff = 39, 

    kCrossbow = 40, 

    kQuiver = 41, 

    kTotal = 42


    怎么在注释上添加呢?
    举个例子,你马上能看懂了
    0.700000 PIE.$Verdimillious
    0.899999 HitFrame.$ES_Strikefly(这行注释在1.0后被弃用)
    是不是豁然开朗?

最后是SCAR

SCAR - Skyrim Combos AI Revolution

简单来说就是敌人版的MCO,让敌人根据你的距离和角度来做出相应的动作。

其实弄起来挺简单的。。。
首先下载这个玩意,在SCAR的文件下面

之后找到你用于导入和导出注释的文件夹

支持SCAR的mod都有一个这个文件


SCAR_1hmReadyDummy.hkx为武器或空手动作判定文件,本身不做任何事
SCAR_BlockIdleDummy.hkx为格挡动作
那么怎么判定呢?就要靠注释来决定
但怎么生成呢?
1.直接新建一个就好了!只是注释要一个一个写。
2.使用n网的那个文件,具体怎么用我们慢慢说

打开这个


确定注释导入程序文件夹的位置



这个是动作路径,接着按RUN即可,看他慢慢弹窗即可



接着你看SCAR_1hmReadyDummy.hkx的注释里有没有这两行
1.000000 SCAR_ActionData{"IdleAnimation":"ADXP_NPCPowerAttack", "MinDistance":70, "MaxDistance":160, "StartAngle":-60, "EndAngle":60, "Chance":60, "Type":"RPA"}
0.500000 SCAR_ActionData{"IdleAnimation":"ADXP_NPCNormalAttack", "MinDistance":0, "MaxDistance":90, "StartAngle":-60, "EndAngle":60, "Chance":100, "Type":"RA"}


这些东西代表什么?
1.000000代表动作的优先级,数字越高越先触发
SCAR_ActionData{"IdleAnimation":

这些为必须有的东西,不能动


"ADXP_NPCPowerAttack"

为武器判定注释,确定动作是武器重攻击动作判定


"ADXP_NPCPowerAttack_H2H"

则为最新版本添加的空手动作判定


"ADXP_NPCNormalAttack"

则为武器轻攻击动作判定


"MinDistance":70, "MaxDistance":160, "StartAngle":-60, "EndAngle":60, "Chance":60
"MinDistance"

为作此动作的最小判定距离


"MaxDistance"

为最大判定距离

当你距离敌人这些距离区间时,敌人可能会做此动作
"StartAngle"和"EndAngle"则为角度


那么这些东西我该怎么计算?
打开SACR文件里的这个

把EnableDebugOverlay的值改为true
进游戏你就会看见这个东西

自己看着办吧

Chance即为触发动作的几率

Type为动作类型,这里为作者列出的数据

RA - RightAttack 右手攻击动作
RPA - RightPowerAttack 右手重击动作
LA - LeftAttack 左手
LPA - LeftPowerAttack 左手重攻击
DA - DualAttack 双持攻击
DPA - DualPowerAttack 双持重攻击
BA - BashAttack 盾击
BPA - BashPowerAttack 点了perk的盾击动作
IDLE - Regular Idle 普通姿势?


最后,由程序做出的注释少了一个东西,让敌人只会做出动作包里的第一个动作。。。
怎么让敌人做出连贯的动作?
打开随便一个attck动作
在1.000000 SCAR_ActionData{"IdleAnimation"这行注释前加一个
1.550000 SCAR_ComboStart
就行了!接着他会根据下面的注释判断条件继续动作
1.550000为此动作时间帧
你还可以在SCAR_ComboStart加一个
.50
这个为执行下个动作的概率


到此,本期教程结束。

感谢各位大佬的付出,谢谢你们的作品。


还是想废话一句。

什么作品不重要,重要的是中国作者。

我想说的说完了。


(来个富哥V我50吧,真不想做视频。。。哈哈哈哈)

(求求你们去看孤独摇滚吧!!!!!)


MOD制作指南SP——关于动作的命名与注释的评论 (共 条)

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