前言:本教程仅在踩蘑菇发布,你可以发布我的教程链接,但禁止未经授权的任何形式的转载、搬运及再发布行为。
You should not upload to any other site without my permission.
依旧,先放一张镇楼图。
嗯,大家好,这里是唯。这个教程本身应该说,可有可无。mhwi的mod制作,已经逐渐透彻,文件的理解也逐渐深入挖掘,从西索的fsm教程到Xovea的fsm教程,其实fsm该讲的东西早就讲完了,不过,鉴于他们两的教程,一个过于简略,只适合于最初级的入门;另一个虽然透彻但缺少了一些内容的补充,说明不够细致,在和Xovea大佬,冰冰子交流的过程中,我逐渐还是决定和lmt一样,自己来给各位理一下脉络,或者说体系。至此,动作方面的教程已经完备,剩下的就是探求心与努力。好的,那么话不多说,我们开始。
前言:fsm的结构是递归的,其模板也是递归的,这里只是提一下,不理解对于后续学习没有影响,理解的话可能会了解的更深一些。
一、准备工作
fsm用010打开的话,右边的文字可能不正常,为了解决乱码问题,我们先调一下编码。
改成这个,就能看到右边的日文文字了。
二、模板的使用
先打开模板。
点开最下边的root,你会看到一堆条目。这里要求记住的只有两个,02 Cluster和 03 ConditionTree。英文好的人大概已经知道是什么东西了,稍微解释一下。
02 Cluster:动作区,里面涵盖了一系列母动作。
03 ConditionTree:条件区,里面涵盖了一系列条件,大部分是复合条件。
动作区
我们先说动作区,点开Cluster。一直找最大的块点,点到出现了一堆entry,如图。
count:母动作总数。
entry:每个entry是一个独立的母动作区块,记录了母动作的一系列信息,比如派生之类的。
条件区同理,掌握这个可以快速寻找自己需要找的区块,如今有脚本了移植不是很困难,所以有些复杂的我只提一下概念,Xovea的脚本能自动改。
二、fsm结构
1、基础结构
我个人时间精力有限,在这里主要引用Xovea的说法,他的说法比较详细,之后我补充一些细节。
如图四张图片是fsm的基础结构。
接下来是每个部分的讲解。(这里太刀举例)
黄色:文件头,
蓝色部分:文件的结构序号总数量
上面每个结构和其包含的子结构,以及更小的结构,都是统一编号的,我们把这个编号约定为结构序号
在文件尾有一个条件结构的子结构编号:A30B。
意义:最后一个结构编号是0B A3,从00 00开始编号,一共0B A4个结构,所以在文件头哪里看到了A4 0B
蓝色:数据结构头,也是我们遇到的第一个结构。
01 00:结构类型
00 00:结构序号,因为是第一个,所以是00 00。
绿色:从绿色开头到文件结束的大小,可以从这里一直选中到文件结束,看一下大小,正好是 01 B4 51
03 00:结构类型,
01 00:结构序号
3D 8C是从这里到招式结构结束的大小,到哪里结束可以和前面一样选取一下看看,招式结构的结束,也是条件结构数据头的开始。
5A:所有招式的数量,每个招式结构除了有结构序号,还会有一个招式序号,比如最后一个招式序号就是59,从00计数,一共5A个
7B 02:结构序号
好了,上面都是些琐碎的东西,下面我们具体看一个招式,这里是重点了(敲黑板)
2、核心部分 动作区
讲述这个之前,我先说明一下之前一提而过的概念。
1.lmt,fsm,mbd之间的作用相似性与联系:
lmt文件:决定了动作本身,包含了动作信息和判定信息。
mbd文件:决定了动画之间的衔接,包含了动作的动画之间的联系,有跳帧和补帧来完善动画衔接。
fsm文件:决定了动作的派生。比如动作A有几个派生,分别是什么;
决定了动作的触发条件。比如动作A在什么情况下触发。
2.fsm基本结构:
就像lmt有骨骼区和判定区两部分一样,fsm也分为两个区,分别是动作区和条件区。
动作区:对应刚才模板里的Cluster,里面定义了一系列的动作区块,我们称这些区块为母动作,因为被写出来的这些动作区块,都涵盖了有自己的(派生)子动作。
条件区:对应刚才模板里的ConditionTree,里面定义了一系列的条件区块,我们称这些区块为派生条件,因为它们通过条件id与动作区的(派生)子动作相关联,从而决定子动作触发条件。
动作id:即西索教程里所说的id,是某个动作的代号,但本身可以重写,改变它可以改变子动作,但是并不能使母动作本身发生变化。
绝对id:动作真正的id。改变这个id可以导致母动作本身发生变化,可以写出fsm里本来没有被明面写出的动作,并为其添加派生。
条件id:触发条件的id,也是条件自己的id。
动作结构:即单个母动作的结构
起止:从05 00开始,到下一个05 00结束。
单独看一个动作结构。
动作结构前半部分:动作开始之前有一段定义,涵盖了一些信息。
05 00:结构类型,指该结构是一个招式结构(可以看到结构类型都是奇数)
02 00:结构序号,F8 01是指从绿色部分开始,到这单个招式结构结束(即下一个05 00)的大小。
品红色是招式名字,紫色部分未知,但是和招式fsmid是一一对应的,但是改了也不知道有什么影响。
06 00:该招式结构内部派生结构的数量
派生结构:单个动作结构里单个(派生)子动作的结构。
起止:以07 00开始,到下一个07 00结束。
07 00:结构类型
03 00:结构序号,
31 00:指从黄色部分开始,到这单个派生结构结束(下一个07 00)的大小
品红色:派生结构名称
2D 00:动作id
B6 00 :条件id(不是条件的结构序号)
动作结构后半部分:动作结构的收尾同样涵盖了一些信息。
蓝色:结构类型
绿色:结构序号
红色:绝对id
紫色:未知数据,但是改了貌似也没影响
5A 00:从黄色到红色结束的大小
招式结构有两种,结构略有不同,但是每部分含义都一样。
蓝色:结构类型
绿色:结构序号
红色:绝对id
紫色:未知数据,但是改了貌似也没影响
56 00:从黄色到FF FF FF FF结束的大小。
3、条件区
条件数据头
注意一下 条件结构数据头 的前面有一个01 00 00 00,这是和 结构数据头 对应的结构数据尾,要加招式结构,就在01 00 00 00前面加。
黄色:结构类型绿色结构序号
品红:从这开始到条件结构结束的大小
红色:条件结构的数量
最后一个条件结构的条件序号是32 01,所以一共33 01个。
单个条件结构
起止:13 00开始,到下一个13 00结束
红色:结构类型
黄色:结构序号
绿色:结构大小(从该点到结构结束,和前面的都一样)
重点:15 00,和17 00(如果是远程武器,则各自-2,分别为13 00 和 15 00)。
近战和远程之间相互移植的时候要特别关注这个问题,条件区全部序号-2,不注意会导致闪退。
15 00:后面选中的部分是条件id
17 00:操作符的结构标志
两个紫色部分都是包含在 17 00这个结构里的(可以通过结构大小AB,看出来紫色部分也被包含了)
第一个01 00 00 00:指的是只有一个操作数
后面的01 00 00 00 00 00 00 00,则是控制具体怎么操作。
条件逻辑运算:
已知的有
01 00 00 00 10 00 00 00 中的 10:条件相与
01 00 00 00 11 00 00 00 中的 11:条件相或
00的话不知道有什么作用,应该是什么都不做。
通过条件逻辑运算可以实现一些功能,举个例子。
比如见切条件是:气刃槽有气 且 回避成功 且 反击砍到怪物
且就是我们说的与,见切有这么严格的判定条件是因为它的判定条件是三个简单条件进行了相与,组成了一个大条件,这个大条件只有同时满足才会触发。
同理,如果是或条件的话,只要满足其中之一就可以触发。
明白了条件逻辑运算的话,可以创造一些新的条件。
19 00后面的则是一个子条件,也就是17 00操作的对象
1B 00:被包含在19 00里,代表着究竟是什么条件,通常用日语或者PS4按键表示
剩下的1B 00和1D 00没看出来干嘛的,可能代表子条件结束吧
注意:条件的名称是绝对的,和动作名称不一样,不可以被修改。
文件尾
想添加条件的话,在01 00 00 00前面加就好了。
4、内在关联:
条件和动作之间通过条件id相关联,只有子动作有触发条件,所以只有子动作可以和条件通过同一个条件id关联。
三、脚本运用的实际案例
大剑J回
大剑末尾最后一个条件是DA,我们要新增条件的话,从DB开始加。
动作添加:
1、首先复制三份任意单独的招式结构在招式结构末尾
2、改名字,方便日后修改(一会儿长度脚本会自动算)
3、修改招式的fsm id,还有派生结构里你想要的结构序号和条件序号。
4、现在DB 00这个条件我们还没加进去,一会加。
条件结构:
5、新建16进制文件里的条件。改一下17 00 后面的结构大小,或者不管它。
6、保险起见我这里手动算一下结构长度:选中后看右下角,发现是E8 01,然后整个插到文件尾前。
然后运行一遍脚本。
运行完脚本,再运行一遍模板,确认自己没改错就可以了。
7、说一下上面的这个条件是怎么来的。随便找个条件结构复制三次,然后和修改动作一样,把相关信息修改为你想要的。
这里解释一下万能条件:
人物的状态一般有三种:着地,拔刀中,纳刀中。
这三种状态下的派生相与复合在一起,就会变成几乎能应对所有情况下的自动派生,因为其效果几乎是万能的,所以称为万能条件。我们用这个派生来做J回的自动派生。红框11的地方是相或。
配合第四期的受击反馈添加,可以建立联系,从而实现大剑J回。
好了,教程到此结束,你需要掌握的内容有:
1、动作id,绝对id,条件id。
2、动作结构,条件结构。
3、动作结构和条件结构怎样通过同一个条件id关联。
4、复合条件的逻辑运算。
5、实践。
最后,附上Xovea最新的Debug版脚本,脚本的主要作用是排序,不排序手动改也可以,但是有几率闪退,不闪退只是因为fsm的容错率比较高,脚本能否运行也能用来检测自己改的是否正确。
感谢各位的观看。那么,如果以后有教程,我们再见。

