回到主页 回到帮助中心

工具(75df)WASDX的 工具(wasdx)PVZFLJ-CT(pvzFLJ)

请记住:游戏崩溃是正常情况。如果失败了,多试几次

改版的制作根本不在于科技研究的多深,而在于特性设计的有多好。

你时间都用来研究技术了还怎么专心想设计……好的设计不是坐着就能出来的,是得花时间构思出来的。

——Ghastasaucey

最近一次更新于22-07-18(23-1-25,此页面不再更新)

目录

1 游戏文件分析

2 基础教程

2.1 贴图修改

2.2 动作修改

2.3 代码基础修改

2.4 出错研究

3 细节修改

3.1 非LS文字修改

3.2 存档路径修改

3.3 OD细节优化

4 进阶教程

4.1 修改出怪

4.2 修改出怪倍数

4.3 第六大关保存

4.3.1 冒险循环判断

4.3.2 场景修改

4.3.3 第七大关的显示问题

4.4 OD保存exe

4.5 僵尸增加防具:

4.6 反伤教程

4.7 大喷菇喷一行

4.8 坟墓随机

4.9 僵尸死后立马召唤僵尸

4.10 老虎机物品修改

4.11 选卡界面

4.11.1 卡槽背景修改

4.11.2 两个隐藏按钮

4.11.3 选卡界面出现隐藏植物

游戏文件分析

PlantvsZombies.exe是游戏主题文件,双击可以打开游戏。

Sounds是音效文件夹,注意改的时候不要忘记转码ogg

gdi42.dll是汉化字体库,(左图是英文版改动的,所以没有)英文版为内置gdi32.dll,不支持中文字符;

如果还有font文件夹,那就是汉化第二版,字符不全,但是可以手动修改(右图)

其中每组是对应:

字体3——开始游戏、戴夫、智慧树、(小游戏进场)各种大字,包括致谢名单

字体4——图鉴详细说明,关卡名称(小游戏页面),随机选卡,商店、查看草坪字符

字体5——小游戏奖杯数字“确定要退出游戏吗”

字体6——主菜单文字、图鉴首行文字

等待补充

bass.dll是音乐函数

images、particles、reanim(大多数)是贴图文件夹

properties文件夹是·部分资源文件(?)·,其中LawnStrings.txt是修改游戏大多数文本的地方

crash.txt——你游戏崩了就会生成这个

data文件夹——你别动就行了

complied——动作文件夹

默认存档目录:C:\ProgramData\PopCap Games\PlantsVsZombies\userdata

你的界面不是这样?

①没有 lawnbgm(x).mp3或者Sample (x).mp3和bass_b_2.dll,这就是纯粹原版,这些文件连同bass.dll,是修改了背景音乐的改版,同时生成debugs.txt

②有main.pak,没有compiled、data、images、particles、properties、reanim、sounds文件夹,那就需要解包,下文会有打包&解包教程。

基础教程

贴图修改

请先寻找一个叫main.pak的文件。如果没有,寻找以下几个文件,并跳过“打包&解包”这一步

然后使用链接里的工具:

打开后,界面上我们会看到打包模式和解包模式。

PAK文件:找到植物大战僵尸文件夹里的有个名字为main.pak的文件

PAK目录:就是解压出来的植物大战僵尸材质包的放置的地方(我们一般选择桌面)

接着会解压出来一个名字为PAK的文件夹,这就是植物大战僵尸材质包放置地址。

这些文件夹:(下划线的是贴图)

compiled->动作文件

data

images

particles

properties

reanim(大多数)

sounds

要替换原先的贴图(不改变名称);但是这些不是完整的,你要学会拆散。

P图软件:Photoshop,美图秀秀。

最后打包。

其实自己研究一下也就出来了。

动作修改

有点麻烦,你首先得有以下软件:

An这个软件去网上找(pj版),

备注:2020版win7用不了

后头两个在Fla三件套里,

等待补充

代码基础修改

准备工具:修改器和拦截器(修改器终结者)

学会用拦截器去拦截修改器

2种办法:推荐附加进程

首先选择MsgMonitor.exe,打开

然后“文件——附加进程”

选择进程

修改器使用时,数值的修改会拦截出来,你选择保存;但不是所有都能保存,动态数值、浮点数不可以

保存方式:先方框打勾,然后“保存写入—所有勾选的项”

这样,保存出来的程序就是了

出错研究

变量是不可以更改的,比如:阳光数值

如图情况,你可能修改了6Fxxxx区段,导致无法保存,而且游戏变大——所以不能保存这些

”但是,MGCL大佬当时做的这个让PVZ泛滥下去,最后导致了劣质改版数量增多,PVZ圈子已经覆灭。”

“请记住:不要做我做过的,我的到来就是灭亡”——Sunset

细节修改

非LS文字修改

使用工具:Hex Editor Neo(16进制编辑器)

右键Find,输入查找内容

比如:找到如图的标题文字

在左边修改16进制

存档路径修改

16进制修改器

寻找userdata,4处,修改即可,

注意:第一位必须对齐

(注意使用“Find Previous”和“Find Next”)

OD细节优化

nop dword ptr[eax]是无法输入od的,要写3个nop

进阶教程

修改出怪

电脑版修改冒险模式出怪:WPF修改器有时候不管用,

(2-5,4-5,5-10不管用,限制在5-10以内,要不然改跳转)

6A35B4\\冒险模式1-1出怪是否有普通(+CC下一种僵尸,+4下一关)

——一定注意16进制

想修改列表还得先修改以下两个地方(使用od)

[40D6A3--jmp 40D6A8]

[40D6AC--nop,nop]

69DA88\\僵尸级别(+1C下一个)

69DA94\\僵尸出现的比重(+1C下一个)

出怪依照:

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

1D

1E

1F

20

21

普通

旗帜

路障

撑杆

铁桶

读报

铁门

橄榄

舞王

伴舞

鸭子

潜水

冰车

雪橇

海豚

小丑

气球

矿工

跳跳

雪人

蹦极

扶梯

投篮

巨人

小鬼

将王

豌豆

坚果

辣椒

机枪

窝瓜

高建国

红眼

倾斜字符需要你去修改js级别、比重

通用修改出怪CE模版:

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(originalcode)

label(exit)

newmem:

originalcode:

cmp esi,僵尸id

je next

jne exit

mov [esi+edi+00054D4],al

next:

pushad

mov ecx,[6A9EC0]

mov ecx,[ecx+82C]

cmp [ecx+24],关卡数

jne exit

popad

mov al,1

mov [esi+edi+00054D4],al

jmp returnhere

exit:

mov [esi+edi+00054D4],al

jmp returnhere

"PLANTSVSZOMBIES.exe"+AB97:

jmp newmem

nop 2

returnhere:

[DISABLE]

修改出怪倍数

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(originalcode)

label(exit)

newmem:

originalcode:

mov [esp+24],4//出怪倍数

exit:

jmp 00409968

"PlantsVsZombies.exe"+9893:

jmp newmem

nop

returnhere:

[DISABLE]

第六大关保存

冒险循环判断

452337:(16进制)

场景修改

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(originalcode)

label(exit)

newmem:

cmp eax,27//关卡16进制

je exit

movzx eax,byte ptr [eax+PLANTSVSZOMBIES.exe+AAC0]

jmp returnhere

originalcode:

jmp PLANTSVSZOMBIES.exe+21EA12

exit:

mov eax,07//场景

jmp returnhere

//eax=01 白天草坪

//eax=02 黑夜草坪

//eax=03 白天泳池

//eax=04 黑夜泳池

//eax=05 白天屋顶

//eax=06 水族馆

//eax=07 黑夜屋顶

//eax=08 禅景花园mov eax.ebx

"PLANTSVSZOMBIES.exe"+A576:

jmp newmem

nop 2

returnhere:

[DISABLE]

特别地:蘑菇园可以找个空地址写入代码(总共就两行,mov 【esi+0000554C】,00000006和jmp 0040A635)

第七大关的显示问题

大关显示上限数44ac8d(主菜单)

大关游戏内显示数上限

直接放图

OD保存exe

B站专栏

等待补充

僵尸增加防具:

工具:od

用od打开这几个地址,然后在上方第一个(jmp xxx)里汇编入下面的地址,保存就可以了

523BDE 机枪、豌豆

523AAC 辣椒

52396E 高建国

523839 建国

窝瓜(?)

防具:

5228A4 铁桶

522939 铁门

522804 路障

523E4E无防具

反伤教程

CE代码如下

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(originalcode)

label(exit)

newmem:

originalcode:

cmp dword ptr [eax+24],1A//植物

je pvza

jne exit

pvza:

pushad

mov esi,edi

push 20//血量

mov eax,0000000

call 005317c0

popad

exit:

jmp returnhere

52BC8F:

jmp newmem

returnhere:

[DISABLE]

大喷菇喷一行

地址:4680F1 的 154->FFF

坟墓随机

[ENABLE]

alloc(newmem,2048)

label(zx)

75000F:

(这里可以加判断)

pushad

zx:

mov eax,0x21

call 005AF400

cmp eax,0x19//避免出现僵王

je zx

mov dword ptr ds:[0x700004],eax

popad

zx1:

mov ebx,dword ptr ds:[0x700004]

push eax

push ebx

mov eax ,edi

call 0040DDC0

jmp 00412DE5

412DDC:

jmp 75000F

nop

nop

nop

nop

[DISABLE]

僵尸死后立马召唤僵尸

//注:会导致选卡结束后出现一部分、

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(originalcode)

label(exit)

newmem:

cmp [730040],4

jnz originalcode

cmp [edi+24],#16//这里是僵尸代号

/*

僵尸种类表:

00普通 01旗帜 02路障 03撑杆 04铁桶 05读报 06铁门 07橄榄 08舞王 09伴舞 10鸭子 11潜水 12冰车 13雪橇 14海豚 15小丑 16气球 17矿工 18跳跳 19雪人 20小偷 21扶梯 22篮球 23巨人 24小鬼 25僵王 26豌豆 27坚果 28辣椒 29机枪 30窝瓜 31高坚 32红眼

*/

jnz originalcode

pushad

mov esi,#5//数量

while:

add esi,-1 //循环体,快速减一

mov eax, [edi+8]

mov bl,50 //80

div bl

movzx eax,al

push eax

mov eax,[edi+1C]

mov ecx,[6A9EC0]

mov ecx,[ecx+768]

mov ecx,[ecx+160]

push #26//召唤的僵尸

call 0042A0F0

cmp esi,0

jnz while

popad

originalcode:

mov byte ptr [edi+000000EC],01

exit:

jmp returnhere

530602:

jmp newmem

nop

nop

returnhere:

[DISABLE]

dealloc(newmem1)

530602:

mov byte ptr [edi+000000EC],01 //Alt: db C6 87 EC 00 00 00 01

老虎机物品修改

("PlantsVsZombies.exe"+8708F)前后(48708F)

mov [esp+18],00000031

mov [esp+1C],esi//0(豌豆)

mov [esp+20],00000012

mov [esp+24],00000021

mov [esp+28],00000038

mov [esp+2C],00000015

选卡界面

卡槽背景修改

CE脚本如下

[ENABLE]

alloc(newmem,2048)

label(returnhere)

label(originalcode)

label(exit)

newmem:

cmp ebp,00

je SB1

cmp ebp,01

je SB2

cmp ebp,02

je SB

cmp ebp,03

je plants

cmp ebp,04

je plants1

cmp ebp,05

je plants2

cmp ebp,06

je plants3

cmp ebp,07

je plants4

cmp ebp,08

je plants5

jmp originalcode

SB1:

mov ecx,1

jmp 04877FB

SB2:

mov ecx,2

jmp 04877FB

SB:

mov ecx,3

jmp 04877FB

plants:

mov ecx,4

jmp 04877FB

plants1:

mov ecx,5

jmp 04877fb

plants2:

mov ecx,6

jmp 04877fb

plants3:

mov ecx,7

jmp 04877fb

plants4:

mov ecx,8

jmp 04877fb

plants5:

mov ecx,9

jmp 04877fb

originalcode:

cmp ebp,28

je 4877B3

exit:

jmp returnhere

48778B:

jmp newmem

returnhere:

[DISABLE] 卡槽背景修改

【补充】0是灰色

两个隐藏按钮

#如何开启Debug模式(使用后随机选择植物)

004837DA 改成je

004837B2 按钮坐标

#让按钮<查看草坪>出现

0048397B 改成jo

00483989 改成jo

48392A 让按钮<查看草坪>出现坐标

两个隐藏按钮

选卡界面出现隐藏植物

484adb (隐藏植物系列)

484b7d

4852bf

485e00

485e6e

483e00的31改35

453bff隐藏植物出现条件

就是这些

今天先写到这里

最终,我在梦境中连日落也看不清——By Sunset