PVZ一代修改教程:贴图的新增
特别声明:本教程所说的PVZ仅指英文原版、汉化一以及汉化二及这三个版本的改版
阅读此教程前请确保已经会一些基础的修改及汇编
关于贴图的新增,其实在PVZ一代很多版本都已经有利用了(例如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:贴图的名称,在后面单独有说明
PIC_address:贴图储存的地址,在后面也有说明
先讲解一下这个格式的用法:
①在0x0047D963跳出到一个新的地址(下文称这个地址为newmem)
②在newmem中先写call 00404420
③然后接着写下刚才的格式(有几个贴图就写几次)
④在导入结束后跳回0x0047D968
其实之所以这么写,是因为0x0047D963这个地址是原版贴图导入结束后的地址,所以在后面跟着继续导入。
如果你对这个掌握熟练,你可以在其他地方导入,但是格式需要有部分更改(拓展内容,请自行摸索)

PIC_name
在原版的properties文件夹里,有一个名为resources.xml的文件
我在Ghtr的这个文件里摘抄了一段:
<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贴图
在导入新贴图时,按照以下步骤:
①把文件放在指定文件夹内
②修改resources.xml
③在代码里导入贴图时,输入正确的PIC_name
一般常用的文件夹,idprefix如下:
images文件夹:IMAGE_
reanim文件夹:IMAGE_REANIM_
如果你有足够的能力,也可以尝试将文件导入到一个新的文件夹内

PIC_address
这是贴图储存的地址
之后调用的时候就会用到这个地址

额外的内容
如果有兴趣,可以分析一下那个代码,然后自行更改
这里我扩充一下:如何导入分份贴图
怎么调用我就不说了~
原版的墓碑导入:
<Image id="TOMBSTONES" path="Tombstones" cols="5" rows="4"/>
其中,cols和rows指定了这个贴图的行和列
cols表示这个贴图横向分成几份
rows表示纵向分成几份
使用特殊的贴图call可以按照份数来读取这个贴图(自行研究)

结语
首先,这个科技其实早就泛滥了,所以我发这个教程的时候完全没有考虑出现低质量改版的可能性。
对于贴图的调用,不是本教程所负责的内容,所以就不介绍了。
本教程没有写出贴图导入的格式的具体分析,因为我懒()

