教程比较长,也比较困难,改起来特别花时间和精力,请诸位量力而行!
限于本人能力问题,比较深的东西不会讲。一些细节可能会出现错漏,如果有,请大佬回复纠正。
首先了解一下前置知识:
地址:在这里表示一个四字节数据开头所在的位置,如下图F0 0E的地址为0020,10 10的地址为0038
指针:指针指向内存区域,它所存放的是数据的地址。在这里将存放有其他数据块块首地址的数据块称之为指针,指针内存放的数据称为偏移值(也就是地址,注意是反着存的,高位在后面,F00E实际上是0EF0)。
好,然后来了解一下.lmt文件,.lmt文件主要存放武器动作本身以及动作的判定(无敌,霸体,防御判定等)和特殊效果(太刀气刃等级,大剑大锤蓄力,盾斧消耗瓶子等)。
然后再看一下lmt文件的结构。
看起来很复杂,但是还有更复杂的。
文件头区:
整个文件的索引,主要由指针构成,每个指针指向动画块头区里每个动画块头的首地址,
注意这个排列方式,后一个字节才是更高位!90 0E实际上是0E 90。
动画块头区:
动画块的索引,主要由动画块头数据块构成,里面有一些数据是未知的,不过无关紧要
聪明的人已经注意到了我框出来的一些数据,让我们从左到右从上到下梳理一下吧。
1.指针:指向某个骨骼区的首地址
2.骨骼数:一般情况下是不变的
3.动画帧数:这个动作从开始到完成所用的帧数,以每秒30帧为标准,如果这个动作总时长不足这个帧数,就会保持最后一帧的动作停顿直到完成,如果动作总时长大于这个帧数,那么会在这个帧数时间时结束,后面的动作不进行。(注意是十六进制的!想得知对应的时间需要转换成十进制再计算)
4.循环控制:ffffffff为-1,代表只进行一次就结束,如果为0就会一直循环直到进行其他操作或被外力打断。
5.指针:指向某个参数区的首地址
骨骼区:
包含动作的骨骼以及骨骼参数和大量指针。
如图从我光标焦点处开始是骨骼区,骨骼区由82个骨骼结构组成,每个骨骼结构对应一个骨骼。
如图是单个骨骼结构,骨骼结构里包含一些参数和两个指针,从左往右第一个指针指向关键帧区,第二个指针指向的区域不清楚有什么功能,推测是骨骼相关的参数。
关键帧区:
大量的动画数据,很难改动。
判定区:
指向包含所有的判定和特殊效果,由大量的指针和判定组成。
红框框出来的就是指针,当然,下面全都是。这些指针指向另一个判定或者参数。从一个指针开始到下一个指针开始是一个完整的判定结构
参数区:
包含判定区所有判定的参数
基本结构介绍完了,那么下面介绍动作的修改。
首先整理一下一个动作的组成:
一个动作在文件头区有一个指针,这个指针指向一个动画头。
这个动画头里有两个指针和代表动作帧数,骨骼数和循环等的参数。这两个指针一个指向一个骨骼区,一个指向一个判定区。
骨骼区有82个骨骼结构,每个骨骼结构有两个指针。这两个指针分别指向一个关键帧区和一个?区。
判定区有大量的指针指向其他判定和参数。
参数区有判定的参数
那么该如何修改动作呢?
答案已经很明显了,最简单的,如果你想交换两个动作,那么交换文件头区这两个动作的指针内的偏移值,这两个动作就交换了(比如用见切按键和名字的气刃兜割,以及用气刃兜割按键和名字的见切),当然这只是简单的换皮。
如果想用见切判定的气刃兜割和气刃兜割判定的见切呢?就到动画头区交换它们两个代表判定的指针内的偏移值。
注意!指针不能同时指向一个地址,这样会报错退出游戏!
接下来稍微深入一点。
判定的引用:
如果你对某个动作的判定不满意,比如气刃兜割没有霸体,在天上被打下了怎么办?
那就要修改气刃兜割的判定了。如果你不知道霸体的判定和参数是什么,你可以打开游戏,然后到有霸体的动作的参数区下,用0覆盖几行参数,如果使用这个动作的时候霸体消失了,那么霸体就在这几行参数里,然后撤回覆盖,再逐渐缩小覆盖范围一次次尝试,最后找到霸体参数的位置,记下位置,到霸体动作的判定区找到指向这个参数的指针和其后面的数据复制,最后到气刃兜割的判定区,找到一个位置靠后的判定(这样多半是不很重要的判定),用复制的数据覆盖这个判定就行了。
注意!被其他判定指向的或者指向其他判定的指针不能引用!这样会报错退出游戏!
使用其他武器的动作覆盖动作:
找到你要导入的动作(目标动作),复制其从骨骼区开始到参数区结束的所有数据,插入到需要导入动作的武器(源武器)的.lmt文件最后,然后修改源武器该目标动作骨骼区的所有指针到正确的偏移值。最后将源武器要修改的动作的动画头的指向骨骼区的指针修改为源武器目标动作骨骼区首地址并将帧数修改为目标动作的帧数。
如果想使用目标动作的判定,那么修改源武器该目标动作判定区的所有指针到正确的偏移值。最后将源武器要修改的动作的动画头的指向判定区的指针修改为源武器目标地址判定区首地址。
如果偏移是0000,那么不用修改!不用修改!
修改指针到正确的偏移值:
地址偏移值=源武器目标动作的指针的地址(注意是地址!)-目标武器目标动作指针的地址
正确的偏移值=源武器目标动作的指针的偏移值(注意是偏移值!)+地址偏移值
注意指针内所有的偏移值都是反着存的,计算前先要将顺序正过来!偏移值12 34 56对应的地址是56 34 12!
至于文件头里哪些指针对应哪些动作,以及哪个判定对应哪个效果,就需要你们自己去摸索了。
最后感谢@南风焓 大佬对一些问题的指点,
以及附上一份TheCrazyT大佬制作的lmt文件的010editor的模板,虽然是冰原前的版本,会有一些错误和遗漏,但是还是有些作用的。
