PvZ2修改大典 第十一章 贴图合成及动画修改——动画制作(二)

前言:随着技术的发展和进步,贴图合成、动画修改、属性组合、关卡制作、音乐编码早已不是秘密。其实从2021年9月Ftp2Res制作出来时候就已经打破了贴图合成和动画修改垄断,然而由于核心圈大佬仍然使用一些漏洞百出的工具而且不愿变通,导致了我制作的相关工具在2021-2023年期间使用人数仍然保持在个位数,传播力度极窄,我早已声明相关工具公开,但是收效甚微。以前并没有时间去写相关教程,而且不少人入门看的就是我那个已经严重过时的RTON修改教程,在此真的劝退不少修改玩家。去年10月我将我当时所有自己写的工具都集成在EBToolBox上,以方便使用,同时为了照顾无法安装.NET 4.8的玩家和便于调试,保留了各个功能的单文件版并同步更新。所以在此专门抽时间写新版工具相关的教程,以供来者学习观摩。
在此特别感谢那些帮助我完善工具和教程的大佬们。
注:若汝目前在升学考试(小升初、中考、高考、专转本、考研等)期间,请立即停止阅读PvZ2修改相关文献,作者自然无法限制您的阅读自由,但是为了您的未来着想,请立即停止修改相关的学习,全身心投入考试当中,吾不希望踏足PvZ2修改的任何玩家因为学习这门技术而丢了本业。
第十一章 贴图合成及动画修改
3.动画制作
II.移植方法以及动画修复
目前来说,大多数前来学PvZ2动画修改的都不是为了能够自主做出自己想要的动画,而是为了水视频恰烂钱,对此我并不对前来学习的人抱有希望。因此如果你仅仅是为了移植之类的,看完这一小节即可,甚至前面载入位图和加元件的都不用看,后面的内容不适合你,就用不着往下看了。
在本章第2节中已经详细说明了文档信息DOMDocument.xml的各个参数的作用,现在我们便在此拓展延伸一下,讲一下移植相关操作。
众所周知,中文版的属性和国际版的属性有的区别非常大,尤其是中文版的原创单位。代码的运行靠的是apk中的写死的源码,中文版有的,国际版不一定有,反之亦然。所以在移植一些拥有中文版特有属性的单位时,我们要么就代码组合无限趋近,要么就有所取舍。和C&C系列的修改一样,要么代码组合,要么障眼法,能力强的去反编译,动底层代码。
所以接下来我们便根据本章第2节中讲过的来尝试移植一下移植贝斯僵尸的动画。
i.labels修改
“在代码篇讲过,单位types的AnimRigClass决定了该单位能播放什么动作标注的动画,动作标注可以多,因为它可以不读;但是不能少,因为一旦读不到,游戏直接崩溃,不崩溃也会卡死在上一个动作标注中。搞移植的核心就是这里。一般来说,单位的AnimRigClass需要哪些动作标注,由对应原版PAM内的labels决定”——动画篇第2节。
由于我们需要实现贝斯的代码都在代码篇实现了,就差动画部分,所以在此不展示相关代码。代码篇我们用了蛋糕坦克作为移植的受体,所以我们需要查看原版蛋糕坦克XFL文件夹的DOMDocument.xml的labels部分,来得到移植的XFL需要用到的基本动作标注信息。
如图所示,蛋糕坦克的这个AnimRigClass仅仅需要idle、walk、die三个比普僵用得还少的labels,那么我们的动画的label就得含有idel、walk、die这三个labels。然而在代码篇我们根据动作代码的一些特殊代码,达到了让一些动作强制使用了一些labels,所以那些labels我们也得用上。

到最后,我们需要用到的labels一共有这些:idle、walk、die、attack、summon
Index代表起始帧序号(第一帧是0,在AN中打开则+1,为1,仅序号适用该规则),duration代表持续帧数,name则代表label的名称。
所以目前为止,我们则需要对贝斯的DOMDocument.xml的label部分进行改造,通过调整index和duration达到移植的目的。一般来说,后一位的index等于前一位的index加duration(没有duration的话算作1)。以下是改造前和改造后的对比:


但是,一般来说,我们基本上已经不动代码了,可以在AN上直接操作。
在此我有必要特别强调,使用AN修改XFL动画时,必须先载入位图!!!也就是说使用AN时,LIBRARY文件夹必须有对应的切图!!!否则AN检测不到位图引用会在保存时将记载位图引用的media节点移除而导致太极合成崩溃!!!直接修改xml文件无此限制。
下面是关于AN界面的具体操作:
首先打开XFL文件,进入舞台界面。然后按住ctrl键选择labels图层、actions图层以及audio图层。右击它们,选择“拷贝图层”。而后双击舞台上的动画,进入动画编辑界面(如果舞台上看不到动画,则按照第二张图的演示进入main元件定位到原点进行修改)随后点击最上面的那个图层,右击,点击“粘贴图层”。

拷贝场景main内的信息图层至main元件

这时候,我们需要对label进行调整,现在我们对其进行更名处理(其余的删帧啥的基础操作就略过了)。点击对应的label帧,选择右上角的属性,修改对应标签名(在此演示一个,其余同理)。

ii.actions修改
再来看看DOMDocument.xml的actions,得到动作命令,基本上都是stop命令,这些stop命令一般都在每个label的最后一帧。也就是说动画动作执行,从label的第一帧开始,遇到stop命令所在帧才结束。所以基本上有几个label,就有几个stop。我们有时还会遇到use_action命令,这些命令是源码允许的label才能用到,跳出这些label范围就等于失效命令,没有任何影响,不必删掉。在源码允许use_action命令的label里,可以有多个同样的命令,但是必须每帧有且只有一个命令。同一个label里面有多个命令可以达到连发效果,这也是早期机枪射手移植的原理之一。至于其余的attack命令之类的,属于其余僵尸特有的命令。来自中文版动画的特有命令,一般如果移植受体的DOMDocument里面不存在这个命令,一律视作失效命令,可以不删掉。
太极特有bug:如果同一帧,同时存在action层的命令和audio层的命令,太极合成会干掉action层该帧的命令。SPC-Util无此bug。
下面是关于AN界面的具体操作:
复制动作命令(以创建summon系列动作为例):
先在确定动作的第一帧上面右键选择“插入关键帧”,而后重新命名label。在新的动作末尾帧右键选择“插入关键帧”,随后将动作末尾的stop动作复制到新的动作末尾(右键选择“粘贴并覆盖帧”)。

添加动作命令(以为attack添加多个命令为例):
通过插入关键帧,创建两个单帧,分别在这两个单帧右键,选择“动作”,将命令填入即可。

iii.收尾工作
按住ctrl键将复制来的那几个特殊图层选中,右键选择“剪切图层”,然后转回舞台,将原有图层删除,粘贴上改过的图层即可。

iv.巨人动画修复(使用SPC-Util制作动画的不需要修复)
由于太极的一些bug(SPC-Util无此bug),巨人在合成之后,砸植物无伤害,半血会无能狂怒扔不出小鬼,在此提供修复方法:
直接修改DOMDocument.xml(无须载入位图):
遵循后一位index等于前一位index加duration(没有duration算作1)原则,如图所示对audio层的命令进行调整:


使用AN操作:
首先我们需要该XFL工程文件已经载入过位图,然后打开XFL文件进入AN编辑界面,对其中和action同帧的audio层命令帧向后拖,然后对其插入关键帧进行“断尾”,做到action层和audio层的命令不在同一帧上即可。
