PVZ一代修改教程:貼圖的新增
特別聲明:本教程所說的PVZ僅指英文原版、漢化一以及漢化二及這三個(gè)版本的改版
? ? ? ? ? ? ? ? ? 閱讀此教程前請確保已經(jīng)會(huì)一些基礎(chǔ)的修改及匯編
關(guān)于貼圖的新增,其實(shí)在PVZ一代很多版本都已經(jīng)有利用了(例如Ghtr,GHtr,GhTr,Mixed,TAT),早就不是什么新鮮科技了。
但是總有人一直問我怎么改,所以我就做成教程吧。

格式
首先直接扔格式:
push PIC_name
lea ecx,[ebp-7C]
call 00404450
lea eax,[ebp-7C]
mov [ebp-4],150
mov edx,[edi]
mov edx,[edx+40]
push eax
lea ecx,[ebp-28]
push ecx
mov ecx,edi
call edx
mov ecx,eax
call 0059A980
lea esi,[ebp-28]
mov [PIC_address],eax
call 00404420
所有dword,0x等已省略
PIC_name:貼圖的名稱,在后面單獨(dú)有說明
PIC_address:貼圖儲(chǔ)存的地址,在后面也有說明
先講解一下這個(gè)格式的用法:
①在0x0047D963跳出到一個(gè)新的地址(下文稱這個(gè)地址為newmem)
②在newmem中先寫call 00404420
③然后接著寫下剛才的格式(有幾個(gè)貼圖就寫幾次)
④在導(dǎo)入結(jié)束后跳回0x0047D968
其實(shí)之所以這么寫,是因?yàn)?x0047D963這個(gè)地址是原版貼圖導(dǎo)入結(jié)束后的地址,所以在后面跟著繼續(xù)導(dǎo)入。
如果你對這個(gè)掌握熟練,你可以在其他地方導(dǎo)入,但是格式需要有部分更改(拓展內(nèi)容,請自行摸索)

PIC_name
在原版的properties文件夾里,有一個(gè)名為resources.xml的文件
我在Ghtr的這個(gè)文件里摘抄了一段:
<SetDefaults path="images" idprefix="IMAGE_" />
<Image id="ASH3" path="AshPoint" />
其中的images是指文件夾的名稱
而IMAGE_是PIC_name的前半部分,下文稱之為idprefix
而AshPoint是文件在文件夾里的名稱(忽略文件后綴,支持.jpg,.png和.gif)
AHS3的PIC_name的后半部分
所以PIC_name為IMAGE_AHS3就是指在image是文件夾里的AshPoint貼圖
在導(dǎo)入新貼圖時(shí),按照以下步驟:
①把文件放在指定文件夾內(nèi)
②修改resources.xml
③在代碼里導(dǎo)入貼圖時(shí),輸入正確的PIC_name
一般常用的文件夾,idprefix如下:
images文件夾:IMAGE_
reanim文件夾:IMAGE_REANIM_
如果你有足夠的能力,也可以嘗試將文件導(dǎo)入到一個(gè)新的文件夾內(nèi)

PIC_address
這是貼圖儲(chǔ)存的地址
之后調(diào)用的時(shí)候就會(huì)用到這個(gè)地址

額外的內(nèi)容
如果有興趣,可以分析一下那個(gè)代碼,然后自行更改
這里我擴(kuò)充一下:如何導(dǎo)入分份貼圖
怎么調(diào)用我就不說了~
原版的墓碑導(dǎo)入:
<Image id="TOMBSTONES" path="Tombstones" cols="5" rows="4"/>
其中,cols和rows指定了這個(gè)貼圖的行和列
cols表示這個(gè)貼圖橫向分成幾份
rows表示縱向分成幾份
使用特殊的貼圖call可以按照份數(shù)來讀取這個(gè)貼圖(自行研究)

結(jié)語
首先,這個(gè)科技其實(shí)早就泛濫了,所以我發(fā)這個(gè)教程的時(shí)候完全沒有考慮出現(xiàn)低質(zhì)量改版的可能性。
對于貼圖的調(diào)用,不是本教程所負(fù)責(zé)的內(nèi)容,所以就不介紹了。
本教程沒有寫出貼圖導(dǎo)入的格式的具體分析,因?yàn)槲覒?)