PvZ2修改大典 第四章 代碼基礎(chǔ)

前言:隨著技術(shù)的發(fā)展和進步,貼圖合成、動畫修改、屬性組合、關(guān)卡制作、音樂編碼早已不是秘密。其實從2021年9月Ftp2Res制作出來時候就已經(jīng)打破了貼圖合成和動畫修改壟斷,然而由于核心圈大佬仍然使用一些漏洞百出的工具而且不愿變通,導(dǎo)致了我制作的相關(guān)工具在2021-2023年期間使用人數(shù)仍然保持在個位數(shù),傳播力度極窄,我早已聲明相關(guān)工具公開,但是收效甚微。以前并沒有時間去寫相關(guān)教程,而且不少人入門看的就是我那個已經(jīng)嚴重過時的RTON修改教程,在此真的勸退不少修改玩家。去年10月我將我當(dāng)時所有自己寫的工具都集成在EBToolBox上,以方便使用,同時為了照顧無法安裝.NET 4.8的玩家和便于調(diào)試,保留了各個功能的單文件版并同步更新。所以在此專門抽時間寫新版工具相關(guān)的教程,以供來者學(xué)習(xí)觀摩。
在此特別感謝那些幫助我完善工具和教程的大佬們。
注:若汝目前在升學(xué)考試(小升初、中考、高考、專轉(zhuǎn)本、考研等)期間,請立即停止閱讀PvZ2修改相關(guān)文獻,作者自然無法限制您的閱讀自由,但是為了您的未來著想,請立即停止修改相關(guān)的學(xué)習(xí),全身心投入考試當(dāng)中,吾不希望踏足PvZ2修改的任何玩家因為學(xué)習(xí)這門技術(shù)而丟了本業(yè)。
第四章 代碼基礎(chǔ)
該篇章在下可能講得不太好,畢竟自身代碼組合能力有限,目前來說就先講講最基礎(chǔ)的地方。
首先我們需要清楚,代碼是PvZ2修改中最為重要的部分,有些地方是被西寶直接寫死的,但是其余的地方則是有著很大的自由度,通過JSON中的自由組合達到自己想要的效果。
目前來說,對于入門修改的玩家,往往是摸不著頭腦,像7年前的2016年(什么?2016年不是4年前嗎?),RTON還是在大多數(shù)用WinHex十六進制修改,少部分人轉(zhuǎn)換成JSON修改的時代,更是一塌糊涂,關(guān)卡制作難,屬性修改也難,能替換一下子彈就算是掌握高端技術(shù)了。由于舊版教程此篇章沒有更新,只能說萬幸,沒害到人,新篇章就用不著拿著十六進制編輯器修改RTON的字節(jié)了。
廢話說了那么多,現(xiàn)在正式開始代碼基礎(chǔ)教程。
準備材料:解包文件夾,太極,PvZ2Tool
1.Packages提取以及JR轉(zhuǎn)換
通過第三章的群組解包,我們獲得了一大堆的RSGP,也提到過這些RSGP功能各異,目前本章僅會用到其中最核心的RSGP:Packages.rsgp

將Packages.rsgp拖入太極,選擇5后解包

得到解包文件夾Packages.rsgp.dir(看不到的話刷新一下packet文件夾即可),接下來,關(guān)于PvZ2的修改,你得一直靠著它。
打開解包文件夾,可以看到PACKAGES里面一大堆RTON

現(xiàn)在,你需要打開PvZ2Tool,點擊按鈕,找到你的PACKAGE路徑,然后選擇批處理模式,Start,等待轉(zhuǎn)換完成。

這時候你會獲得一個全轉(zhuǎn)換為JSON的Convert文件夾


然而,這真的是我們想要的嗎,并不是,這些大寫字母看上去就讓人心煩。所以我們并不推薦將RSGP里面的PACKAGES轉(zhuǎn)換為JSON,而是,轉(zhuǎn)向我們之前全資源解包的文件夾的res文件夾中的packages文件夾。里面的RTON都是經(jīng)過大小寫重命名的,辨識度高,用PvZ2Tool批量轉(zhuǎn)換。


當(dāng)JSON修改完畢后,便可以將JSON拖入太極,選擇6將JSON轉(zhuǎn)換為RTON,然后剪切到RSGP解包文件夾里面的PACKAGES文件夾中覆蓋掉以前的RTON。

將RSGP解包文件夾拖入太極,選擇0 0打包完成。

等到所有RSGP都處理完成打包完成后,將數(shù)據(jù)包解包文件夾拖入太極,選擇0 1 0即可打包完成。

關(guān)于10.4及以后版本的改版數(shù)據(jù)包處理詳見第三章最后拓展部分。
以后搞的修改也大多數(shù)是在全資源解包里面改完之后用太極encode轉(zhuǎn)RTON之類的,把文件放在群組解包文件夾的RSGP解包文件夾里覆蓋對應(yīng)文件然后打包RSGP,最后打包數(shù)據(jù)包完成修改,所以打包解包JR轉(zhuǎn)換這些基礎(chǔ)操作便不會再講第二次。
2.單位基礎(chǔ)結(jié)構(gòu)
接下來便開始講解最基礎(chǔ)的地方了。
每一個JSON掌管不同的資源引用以及對于西寶寫在源碼里面的代碼的引用,所以修改數(shù)據(jù)包這件事本身算不得修改游戲源碼。就算是Paradox那個改版,修改SO也不算修改源碼,那個叫反編譯。真正修改源碼,就應(yīng)該是獲得西寶開源項目進行修改并且編譯得到的游戲MOD,當(dāng)然PvZ2開源怕是得等個幾百年了。
一般地,對于一個單位的修改,分為類型types和屬性props(properties)。
類型相當(dāng)于單位的注冊表,屬性相當(dāng)于單位的詞條。
例如障礙物的GridItemTypes和GridItemProps,植物的PlantTypes和PlantProperties,僵尸的ZombieTypes和ZombieProperties。
當(dāng)然他們還有特殊的動作,比如某些特殊植物的動作Powers,某些特殊僵尸的動作ZombieActions。
關(guān)于拋射體(子彈),它是類型和屬性的集合,名稱叫作ProjectileTypes。
至于彈頭……串了串了,和RA2串了,沒有這類()。
目前需要掌握的就這些JSON,其余的JSON,應(yīng)該算是更高級一點的,等到以后再講(有沒有可能是EB不會?)。
每個JSON中,每個節(jié)點的名稱aliases都是獨一無二的,能自定義。屬性以及其它中的objclass是源碼寫死的,只能用JSON之中提供的,不能自定義。類型的Framework和AnimRigClass都是源碼寫死的,只能用JSON之中提供的,不能自定義。至于其它的節(jié)點,暫時不表。
對于類型和屬性之類的之間的關(guān)系,只能這樣說,是類型引用屬性和位圖動畫信息,特殊單位的屬性引用特殊單位的動作。畢竟注冊表嘛,引用啥都不足為奇了。
要修改屬性,可以新建屬性,然后把類型里面引用的屬性名稱改成想用的屬性名稱。
也可以直接修改類型引用的屬性,但是不推薦這樣做。
要增加單位,需要在類型中新建類型,把類型里面引用的屬性名稱改成想用的屬性名稱。
也可以直接修改你想開刀的類型,但是不推薦這樣做。
增加其它JSON節(jié)點原理相通。
接下來,關(guān)于代碼的修改,應(yīng)該會分成數(shù)章來講,這里僅僅提供基礎(chǔ)入門。
理解了單位組成的基本架構(gòu),之后的修改便會清晰明了了。