PvZ2修改大典 第十一章 貼圖合成及動(dòng)畫修改——?jiǎng)赢嬛谱鳎ǘ?/h1>

前言:隨著技術(shù)的發(fā)展和進(jìn)步,貼圖合成、動(dòng)畫修改、屬性組合、關(guān)卡制作、音樂編碼早已不是秘密。其實(shí)從2021年9月Ftp2Res制作出來(lái)時(shí)候就已經(jīng)打破了貼圖合成和動(dòng)畫修改壟斷,然而由于核心圈大佬仍然使用一些漏洞百出的工具而且不愿變通,導(dǎo)致了我制作的相關(guān)工具在2021-2023年期間使用人數(shù)仍然保持在個(gè)位數(shù),傳播力度極窄,我早已聲明相關(guān)工具公開,但是收效甚微。以前并沒有時(shí)間去寫相關(guān)教程,而且不少人入門看的就是我那個(gè)已經(jīng)嚴(yán)重過(guò)時(shí)的RTON修改教程,在此真的勸退不少修改玩家。去年10月我將我當(dāng)時(shí)所有自己寫的工具都集成在EBToolBox上,以方便使用,同時(shí)為了照顧無(wú)法安裝.NET 4.8的玩家和便于調(diào)試,保留了各個(gè)功能的單文件版并同步更新。所以在此專門抽時(shí)間寫新版工具相關(guān)的教程,以供來(lái)者學(xué)習(xí)觀摩。
在此特別感謝那些幫助我完善工具和教程的大佬們。
注:若汝目前在升學(xué)考試(小升初、中考、高考、專轉(zhuǎn)本、考研等)期間,請(qǐng)立即停止閱讀PvZ2修改相關(guān)文獻(xiàn),作者自然無(wú)法限制您的閱讀自由,但是為了您的未來(lái)著想,請(qǐng)立即停止修改相關(guān)的學(xué)習(xí),全身心投入考試當(dāng)中,吾不希望踏足PvZ2修改的任何玩家因?yàn)閷W(xué)習(xí)這門技術(shù)而丟了本業(yè)。
第十一章 貼圖合成及動(dòng)畫修改
3.動(dòng)畫制作
II.移植方法以及動(dòng)畫修復(fù)
目前來(lái)說(shuō),大多數(shù)前來(lái)學(xué)PvZ2動(dòng)畫修改的都不是為了能夠自主做出自己想要的動(dòng)畫,而是為了水視頻恰爛錢,對(duì)此我并不對(duì)前來(lái)學(xué)習(xí)的人抱有希望。因此如果你僅僅是為了移植之類的,看完這一小節(jié)即可,甚至前面載入位圖和加元件的都不用看,后面的內(nèi)容不適合你,就用不著往下看了。
在本章第2節(jié)中已經(jīng)詳細(xì)說(shuō)明了文檔信息DOMDocument.xml的各個(gè)參數(shù)的作用,現(xiàn)在我們便在此拓展延伸一下,講一下移植相關(guān)操作。
眾所周知,中文版的屬性和國(guó)際版的屬性有的區(qū)別非常大,尤其是中文版的原創(chuàng)單位。代碼的運(yùn)行靠的是apk中的寫死的源碼,中文版有的,國(guó)際版不一定有,反之亦然。所以在移植一些擁有中文版特有屬性的單位時(shí),我們要么就代碼組合無(wú)限趨近,要么就有所取舍。和C&C系列的修改一樣,要么代碼組合,要么障眼法,能力強(qiáng)的去反編譯,動(dòng)底層代碼。
所以接下來(lái)我們便根據(jù)本章第2節(jié)中講過(guò)的來(lái)嘗試移植一下移植貝斯僵尸的動(dòng)畫。
i.labels修改
“在代碼篇講過(guò),單位types的AnimRigClass決定了該單位能播放什么動(dòng)作標(biāo)注的動(dòng)畫,動(dòng)作標(biāo)注可以多,因?yàn)樗梢圆蛔x;但是不能少,因?yàn)橐坏┳x不到,游戲直接崩潰,不崩潰也會(huì)卡死在上一個(gè)動(dòng)作標(biāo)注中。搞移植的核心就是這里。一般來(lái)說(shuō),單位的AnimRigClass需要哪些動(dòng)作標(biāo)注,由對(duì)應(yīng)原版PAM內(nèi)的labels決定”——?jiǎng)赢嬈?節(jié)。
由于我們需要實(shí)現(xiàn)貝斯的代碼都在代碼篇實(shí)現(xiàn)了,就差動(dòng)畫部分,所以在此不展示相關(guān)代碼。代碼篇我們用了蛋糕坦克作為移植的受體,所以我們需要查看原版蛋糕坦克XFL文件夾的DOMDocument.xml的labels部分,來(lái)得到移植的XFL需要用到的基本動(dòng)作標(biāo)注信息。
如圖所示,蛋糕坦克的這個(gè)AnimRigClass僅僅需要idle、walk、die三個(gè)比普僵用得還少的labels,那么我們的動(dòng)畫的label就得含有idel、walk、die這三個(gè)labels。然而在代碼篇我們根據(jù)動(dòng)作代碼的一些特殊代碼,達(dá)到了讓一些動(dòng)作強(qiáng)制使用了一些labels,所以那些labels我們也得用上。

到最后,我們需要用到的labels一共有這些:idle、walk、die、attack、summon
Index代表起始幀序號(hào)(第一幀是0,在AN中打開則+1,為1,僅序號(hào)適用該規(guī)則),duration代表持續(xù)幀數(shù),name則代表label的名稱。
所以目前為止,我們則需要對(duì)貝斯的DOMDocument.xml的label部分進(jìn)行改造,通過(guò)調(diào)整index和duration達(dá)到移植的目的。一般來(lái)說(shuō),后一位的index等于前一位的index加duration(沒有duration的話算作1)。以下是改造前和改造后的對(duì)比:


但是,一般來(lái)說(shuō),我們基本上已經(jīng)不動(dòng)代碼了,可以在AN上直接操作。
在此我有必要特別強(qiáng)調(diào),使用AN修改XFL動(dòng)畫時(shí),必須先載入位圖?。?!也就是說(shuō)使用AN時(shí),LIBRARY文件夾必須有對(duì)應(yīng)的切圖!??!否則AN檢測(cè)不到位圖引用會(huì)在保存時(shí)將記載位圖引用的media節(jié)點(diǎn)移除而導(dǎo)致太極合成崩潰?。?!直接修改xml文件無(wú)此限制。
下面是關(guān)于AN界面的具體操作:
首先打開XFL文件,進(jìn)入舞臺(tái)界面。然后按住ctrl鍵選擇labels圖層、actions圖層以及audio圖層。右擊它們,選擇“拷貝圖層”。而后雙擊舞臺(tái)上的動(dòng)畫,進(jìn)入動(dòng)畫編輯界面(如果舞臺(tái)上看不到動(dòng)畫,則按照第二張圖的演示進(jìn)入main元件定位到原點(diǎn)進(jìn)行修改)隨后點(diǎn)擊最上面的那個(gè)圖層,右擊,點(diǎn)擊“粘貼圖層”。

拷貝場(chǎng)景main內(nèi)的信息圖層至main元件

這時(shí)候,我們需要對(duì)label進(jìn)行調(diào)整,現(xiàn)在我們對(duì)其進(jìn)行更名處理(其余的刪幀啥的基礎(chǔ)操作就略過(guò)了)。點(diǎn)擊對(duì)應(yīng)的label幀,選擇右上角的屬性,修改對(duì)應(yīng)標(biāo)簽名(在此演示一個(gè),其余同理)。

ii.actions修改
再來(lái)看看DOMDocument.xml的actions,得到動(dòng)作命令,基本上都是stop命令,這些stop命令一般都在每個(gè)label的最后一幀。也就是說(shuō)動(dòng)畫動(dòng)作執(zhí)行,從label的第一幀開始,遇到stop命令所在幀才結(jié)束。所以基本上有幾個(gè)label,就有幾個(gè)stop。我們有時(shí)還會(huì)遇到use_action命令,這些命令是源碼允許的label才能用到,跳出這些label范圍就等于失效命令,沒有任何影響,不必刪掉。在源碼允許use_action命令的label里,可以有多個(gè)同樣的命令,但是必須每幀有且只有一個(gè)命令。同一個(gè)label里面有多個(gè)命令可以達(dá)到連發(fā)效果,這也是早期機(jī)槍射手移植的原理之一。至于其余的attack命令之類的,屬于其余僵尸特有的命令。來(lái)自中文版動(dòng)畫的特有命令,一般如果移植受體的DOMDocument里面不存在這個(gè)命令,一律視作失效命令,可以不刪掉。
太極特有bug:如果同一幀,同時(shí)存在action層的命令和audio層的命令,太極合成會(huì)干掉action層該幀的命令。SPC-Util無(wú)此bug。
下面是關(guān)于AN界面的具體操作:
復(fù)制動(dòng)作命令(以創(chuàng)建summon系列動(dòng)作為例):
先在確定動(dòng)作的第一幀上面右鍵選擇“插入關(guān)鍵幀”,而后重新命名label。在新的動(dòng)作末尾幀右鍵選擇“插入關(guān)鍵幀”,隨后將動(dòng)作末尾的stop動(dòng)作復(fù)制到新的動(dòng)作末尾(右鍵選擇“粘貼并覆蓋幀”)。

添加動(dòng)作命令(以為attack添加多個(gè)命令為例):
通過(guò)插入關(guān)鍵幀,創(chuàng)建兩個(gè)單幀,分別在這兩個(gè)單幀右鍵,選擇“動(dòng)作”,將命令填入即可。

iii.收尾工作
按住ctrl鍵將復(fù)制來(lái)的那幾個(gè)特殊圖層選中,右鍵選擇“剪切圖層”,然后轉(zhuǎn)回舞臺(tái),將原有圖層刪除,粘貼上改過(guò)的圖層即可。

iv.巨人動(dòng)畫修復(fù)(使用SPC-Util制作動(dòng)畫的不需要修復(fù))
由于太極的一些bug(SPC-Util無(wú)此bug),巨人在合成之后,砸植物無(wú)傷害,半血會(huì)無(wú)能狂怒扔不出小鬼,在此提供修復(fù)方法:
直接修改DOMDocument.xml(無(wú)須載入位圖):
遵循后一位index等于前一位index加duration(沒有duration算作1)原則,如圖所示對(duì)audio層的命令進(jìn)行調(diào)整:


使用AN操作:
首先我們需要該XFL工程文件已經(jīng)載入過(guò)位圖,然后打開XFL文件進(jìn)入AN編輯界面,對(duì)其中和action同幀的audio層命令幀向后拖,然后對(duì)其插入關(guān)鍵幀進(jìn)行“斷尾”,做到action層和audio層的命令不在同一幀上即可。
