欢迎光临散文网 会员登陆 & 注册

PVZ一代修改教程:贴图的新增

2021-06-29 21:47 作者:Ghastasaucey  | 我要投稿

特别声明:本教程所说的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"/>

其中,colsrows指定了这个贴图的行和列

cols表示这个贴图横向分成几份

rows表示纵向分成几份

使用特殊的贴图call可以按照份数来读取这个贴图(自行研究)


结语

首先,这个科技其实早就泛滥了,所以我发这个教程的时候完全没有考虑出现低质量改版的可能性。

对于贴图的调用,不是本教程所负责的内容,所以就不介绍了。

本教程没有写出贴图导入的格式的具体分析,因为我懒()

PVZ一代修改教程:贴图的新增的评论 (共 条)

分享到微博请遵守国家法律