Plants vs. Zombies: Game of the Year

Plants vs. Zombies: Game of the Year

37 ratings
☆通过修改二进制文件修改存档数据☆
By 微光守夜人
此教程通过使用Hex编辑器,直接对二进制数据进行修改,实现修改存档中的基础数据
   
Award
Favorite
Favorited
Unfavorite
1.前言
此教程将引导玩家,通过直接修改二进制文件的内容,实现对游戏存档中的基础数据的修改(包括但不限于:金币、冒险模式关卡进度、关卡完成次数、花园)。

Warning:食用此教程请务必具备一点点计算机基础知识,以及最基本的对软件的操作和使用能力

修改前请务必自行备份数据,以免修改错误造成存档损坏后无法恢复!!!
修改前请务必自行备份数据,以免修改错误造成存档损坏后无法恢复!!!
修改前请务必自行备份数据,以免修改错误造成存档损坏后无法恢复!!!
重要的事情说三遍!!

因未备份等造成的数据丢失,本人概不负责!!!
2.一点点准备工作
工具和文件
Hex编辑器:ImHex(其他的Hex编辑器也可以)
个人存档文件

Hex编辑器传送门
项目链接:点我传送[github.com]

下载链接:点我传送[github.com]

百度网盘:https://pan.bai(反和谐)du.com/s/1Kr4sBC2hwwfMCEJ7tL04uA(自行删除中文和括号,QNMD V社)
提取码:258c(粘贴的时候记得检查,不要多出空格等字符,不然你度哥不认)
3.存档结构简述
PvZ的存档是由以下文件构成的:
  • users.dat - 该文件是用户索引文件,存放了全部用户的名称
  • userX.dat - 该文件是用户数据文件,存放了该玩家的基础数据,此教程修改的便是该文件。X 为玩家编号,从1开始
  • gameX_Y.dat - 该文件有多个,是某用户在游玩某关卡中途退出后所产生的关卡进度文件,X 等同于用户数据文件的编号,Y 表示关卡编号

如果想了解不同编号所对应的关卡,请跳转至 RM1 - 关卡编号说明

userX.dat 中包含了诸多数据。由于其中的数据是以二进制的形式存储的,其中的数据可以理解成是一段一段的,如果要进行修改,我们就需要知道第xx位至第xx位为一段,以及每一段都是干什么的,在下一章节的修改过程中将会阐述结构
4.数据结构及修改
再次声明!
修改前请务必自行备份数据,以免修改错误造成存档损坏后无法恢复!!!
因未备份等造成的数据丢失,本人概不负责!!!

后续操作所需要的计算机常识请跳转至 RM2 - 计算机常识问题

打开 Hex 编辑器,然后打开指定文件,准备开始修改

注:在后文中提到的数值,或者是您自己修改的数值,凡是在 Hex 编辑器中的,均用十六进制数值表示。其他数值默认为十进制表述。
例如:您要将游戏中的金钱数修改为 520000,则其实际值应为 52000,对应十六进制为 CB20,特殊地方(如此处)需要逆序(小端存储的缘故),故在编辑器中修改时应写为 20 CB

之前是把每部分数据都放在这一章里了,现在拆分成多个子章节了(才不会告诉你是因为放在一起太长了不好编辑,并且不方便阅读呢 [/doge],别乱想啦~)
4-1.基本信息
  1. 基本信息
    字节序号(xx - xx 个字节)
    长度(xx 个字节)
    说明(作用及其指代的内容)
    000-003
    4
    未知,推测是占位用或是标记用的数据(编辑器中,此处固定值 0C)
    004-007
    4
    冒险模式当前关卡号(编辑器中此处数值介于 01-32 之间)
    008-011
    4
    金钱,游戏中的金钱数等于实际值 x10(编辑器中此处数值为实际值,且为逆序)
    012-015
    4
    冒险模式完成的轮数(编辑器中此处数值为逆序)
4-2.生存模式
  1. 生存模式(关卡编号请参考 RM-1 关卡编号说明

    字节序号(xx - xx 个字节)
    长度(xx 个字节)
    说明(作用及其指代的内容)
    016-019
    4
    生存模式第1关最高完成轮数(编辑器中此处数值介于 00-05 之间)
    020-023
    4
    生存模式第2关最高完成轮数(编辑器中此处数值介于 00-05 之间)
    024-027
    4
    生存模式第3关最高完成轮数(编辑器中此处数值介于 00-05 之间)
    028-031
    4
    生存模式第4关最高完成轮数(编辑器中此处数值介于 00-05 之间)
    032-035
    4
    生存模式第5关最高完成轮数(编辑器中此处数值介于 00-05 之间)
    036-039
    4
    生存模式第6关最高完成轮数(编辑器中此处数值介于 00-0A 之间)
    040-043
    4
    生存模式第7关最高完成轮数(编辑器中此处数值介于 00-0A 之间)
    044-047
    4
    生存模式第8关最高完成轮数(编辑器中此处数值介于 00-0A 之间)
    048-051
    4
    生存模式第9关最高完成轮数(编辑器中此处数值介于 00-0A 之间)
    052-055
    4
    生存模式第10关最高完成轮数(编辑器中此处数值介于 00-0A 之间)
    064-067
    4
    生存模式第11关最高完成轮数(编辑器中此处数值为逆序)
4-3.小游戏模式
  1. 小游戏模式(关卡编号请参考 RM-1 关卡编号说明

    字节序号(xx - xx 个字节)
    长度(xx 个字节)
    说明(作用及其指代的内容)
    076-079
    4
    小游戏模式第16关完成次数
    080-083
    4
    小游戏模式第17关完成次数
    084-087
    4
    小游戏模式第18关完成次数
    088-091
    4
    小游戏模式第19关完成次数
    092-095
    4
    小游戏模式第20关完成次数
    096-099
    4
    小游戏模式第21关完成次数
    100-103
    4
    小游戏模式第22关完成次数
    104-107
    4
    小游戏模式第23关完成次数
    108-111
    4
    小游戏模式第24关完成次数
    112-115
    4
    小游戏模式第25关完成次数
    116-119
    4
    小游戏模式第26关完成次数
    120-123
    4
    小游戏模式第27关完成次数
    124-127
    4
    小游戏模式第28关完成次数
    128-131
    4
    小游戏模式第29关完成次数
    132-135
    4
    小游戏模式第30关完成次数
    136-139
    4
    小游戏模式第31关完成次数
    140-143
    4
    小游戏模式第32关完成次数
    144-147
    4
    小游戏模式第33关完成次数
    148-151
    4
    小游戏模式第34关完成次数
    152-155
    4
    小游戏模式第35关完成次数
4-4.智慧树
  1. 智慧树

    字节序号(xx - xx 个字节)
    长度(xx 个字节)
    说明(作用及其指代的内容)
    212-215
    4
    智慧树高度(编辑器中此处数值为逆序)
4-5.解谜模式
  1. 解谜模式(关卡编号请参考 RM-1 关卡编号说明

    字节序号(xx - xx 个字节)
    长度(xx 个字节)
    说明(作用及其指代的内容)
    216-219
    4
    解谜模式第51关完成次数
    220-223
    4
    解谜模式第52关完成次数
    224-227
    4
    解谜模式第53关完成次数
    228-231
    4
    解谜模式第54关完成次数
    232-235
    4
    解谜模式第55关完成次数
    236-239
    4
    解谜模式第56关完成次数
    240-243
    4
    解谜模式第57关完成次数
    244-247
    4
    解谜模式第58关完成次数
    248-251
    4
    解谜模式第59关完成次数
    252-255
    4
    解谜模式第60关最高完成轮数(编辑器中此处数值为逆序)
    256-259
    4
    解谜模式第61关完成次数
    260-263
    4
    解谜模式第62关完成次数
    264-267
    4
    解谜模式第63关完成次数
    268-271
    4
    解谜模式第64关完成次数
    272-275
    4
    解谜模式第65关完成次数
    276-279
    4
    解谜模式第66关完成次数
    280-283
    4
    解谜模式第67关完成次数
    284-287
    4
    解谜模式第68关完成次数
    288-291
    4
    解谜模式第69关完成次数
    292-295
    4
    解谜模式第70关最高完成轮数(编辑器中此处数值为逆序)
4-6.商店信息
  1. 商店信息
    • 说明中的“00-01”表示该物品的购买状态,编辑器中此数值介于 00-01 之间,01 表示已购买,00 表示未购买
    • 说明中的“00-04”表示该物品的购买等级,编辑器中此数值介于 00-04 之间,01-03 表示已购买的等级,00 表示未购买
    • 说明中的“03E8-03FC”或“03E8-03EB”表示该物品的剩余数量(自己拥有的,不是商店剩余数量),编辑器中此数值介于 03E8-03FC 之间或 03E8-03EB 之间(即 1000-1020 之间或 1000-1003 之间),且此值为逆序。03E8 / 03FC / 03EB 表示剩余数量为 0 / 20 / 3,若数值为 0000 则表示该物品暂未解锁

    字节序号(xx - xx 个字节)
    长度(xx 个字节)
    说明(作用及其指代的内容)
    416-419
    4
    Gatling Pea 植物卡片购买状态(00-01)
    420-423
    4
    Twin Sunflower 植物卡片购买状态(00-01)
    424-427
    4
    Gloom-shroom 植物卡片购买状态(00-01)
    428-431
    4
    Cattail 植物卡片购买状态(00-01)
    432-435
    4
    Winter Melon 植物卡片购买状态(00-01)
    436-439
    4
    Gold Magnet 植物卡片购买状态(00-01)
    440-443
    4
    Spikerock 植物卡片购买状态(00-01)
    444-447
    4
    Cob Cannon 植物卡片购买状态(00-01)
    448-451
    4
    Imitater 植物卡片购买状态(00-01)
    456-459
    4
    Marigold Sprout 1 金盏花盆栽已购买日期(编辑器中此数值为日期,日期为2000.1.1至今的天数,2000.1.1当天值为0)
    460-463
    4
    Marigold Sprout 2 金盏花盆栽已购买日期(编辑器中此数值为日期,日期为2000.1.1至今的天数,2000.1.1当天值为0)
    464-467
    4
    Marigold Sprout 3 金盏花盆栽已购买日期(编辑器中此数值为日期,日期为2000.1.1至今的天数,2000.1.1当天值为0)
    468-471
    4
    Golden Watering Can 金水壶购买状态(00-01)
    472-475
    4
    Fertilizer 肥料剩余数量(03E8-03FC)
    476-479
    4
    Bug Spray 杀虫剂剩余数量(03E8-03FC)
    480-483
    4
    Phonograph 留声机购买状态(00-01)
    484-487
    4
    Gardening Glove 园艺手套购买状态(00-01)
    488-491
    4
    Mushroom Garden 蘑菇园购买状态(00-01)
    492-495
    4
    Aquarium Garden 水族馆购买状态(00-01)
    496-499
    4
    Snail 蜗牛购买状态(00-01)
    500-503
    4
    Seed Slot 卡槽购买状态(00-04)
    504-507
    4
    Pool Cleaners 泳池推车购买状态(00-01)
    508-511
    4
    Roof Cleaners 房顶推车购买状态(00-01)
    512-515
    4
    Roof Rake 钉耙剩余数量(03E8-03EB,貌似不支持 0000 状态)
    520-523
    4
    Chocolate 巧克力剩余数量(03E8-03FC)
    524-527
    4
    The Tree of Wisdom 智慧树购买状态(00-01)
    528-431
    4
    Tree Food 智慧树肥料剩余数量(03E8-03FC)
    532-535
    4
    Wall-nut First Aid 坚果包扎术购买状态(00-01)
4-7.禅境花园
禅境花园部分大致由“花园索引”和“植物信息”两部分构成。
其中,“花园索引”的数据位于816字节起,长度为4个字节的片段(即 816-819 字节),该部分信息用于记录花园中共有多少植物。
而“植物信息”的数据,则位于“花园索引”的数据片段之后,即820字节起,长度为 88 x N 个字节的片段(即820- 820+88 x N)。看着很多,实际上,每个植物占88个字节,即每88个字节是一个植物的数据片段,无论在哪个花园。举例:820-907是第一个获得的植物的数据片段,908-995则是第二个获得的植物的数据片段,以此类推。数据片段的顺序与实际获得植物的顺序相同。售出植物会将此植物对应的数据片段删除,并将后面的数据前移,并将索引中的植物数量减去 1。

  1. 禅境花园

    字节序号(xx - xx 个字节)
    长度(xx 个字节)
    说明(作用及其指代的内容)
    816-819
    4
    禅境花园植物数量(编辑器中此值为逆序)

  2. 植物信息



    植物的数据很多,因此,这里用一个标准格式的数据片段来说明(想拥有其他植物,只要把对应的信息套入这个格式中,最终的结果就是这个植物的数据片段)

    00
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    00
    XX
    00
    00
    00
    XX
    00
    00
    00
    XX
    00
    00
    00
    XX
    00
    00
    00
    16
    00
    00
    00
    00
    00
    00
    00
    00
    FF
    FF
    FF
    FF
    00
    00
    00
    00
    32
    XX
    00
    00
    00
    XX
    00
    00
    00
    00
    00
    00
    00
    00
    00
    00
    00
    48
    00
    00
    00
    00
    00
    00
    00
    00
    FF
    FF
    FF
    FF
    00
    00
    00
    00
    64
    FF
    FF
    FF
    FF
    00
    00
    00
    00
    00
    00
    00
    00
    00
    00
    00
    00
    80
    00
    00
    00
    00
    00
    00
    00
    00

    在这个片段当中,我们只需要关注带下划线的字节,就是那些“XX”或者“FF”的字节。接下来将按照他们的字节序号来进行详细解释:
    • 第0字节:该部分表示植物的种类。关于植物对应的编号,请跳转至 RM3 - 植物编号说明,编辑器中均使用十六进制表示。

    • 第4字节:该部分表示植物所在的园子,00是花园,01是蘑菇园,02是水族馆。

    • 第8字节:该部分表示植物所在的位置的横坐标,该值是列的序号,序号从 0 开始。

    • 第12字节:该部分表示植物所在的位置的纵坐标,该值是行的序号,序号从 0 开始。

      注:第8字节和第12字节共同指示了植物所在的行、列的位置。

    • 第32字节:该部分表示了金盏花的颜色,仅金盏花有不同颜色,故其他植物此处的值为 0。关于金盏花颜色对应的编号,请跳转至 RM4 - 金盏花颜色编号说明,编辑器中均使用十六进制表示。

    • 第36字节:该部分表示植物当前的生产阶段。00是幼苗,01-01则对应初期、中期、成熟期三个阶段。

      注:植物片段中有3组长度为4个字节的,内容均为“FF”的字节。这些表示的内容未知,但和植物有关(比如左右朝向),修改不当可能会对该之后后期成长等产生影响。这3组片段可以参考其他植物的进行修改。

    如果要增加植物,一定要先修改文件字节空间大小,然后将末尾数据(0101的那些)全部移至末尾,再在空出的位置插入你的植物数据片段。之后不要忘记回到“花园索引”数据处(816-819字节)修改植物数量。你加了几个植物,就在原有数量上加多少,少加的话,“多出来”的植物数据将会被游戏清空,如果多加了,那么你这个存档的字节大小不够,在加载存档时就会导致游戏闪退出错。
RM1 - 关卡编号说明
关卡编号:
冒险模式、花园、角色等:
0 - Adventure

小游戏模式:
16 - ZomBotany
17 - Wall-nut Bowling
18 - Slot Machine
19 - It's Raining Seeds
20 - Beghouled
21 - Invisi-ghoul
22 - Seeing Stars
23 - Zombiquarium
24 - Beghouled Twist
25 - Big Trouble Little Zombie
26 - Portal Combat
27 - Column Like You See 'Em
28 - Bobsled Bonanza
29 - Zombie Nimble Zombie Quick
30 - Whack a Zombie
31 - Last Stand
32 - ZomBotany 2
33 - Wall-nut Bowling 2
34 - Pogo Party
35 - Dr. Zomboss's Revenge

解谜模式:
51 - Vasebreaker
52 - To the Left
53 - Third Vase
54 - Chain Reaction
55 - M is for Metal
56 - Scary Potter
57 - Hokey Pokey
58 - Another Chain Reaction
59 - Ace of Vase
60 - Vasebreaker Endless
61 - I, Zombie
62 - I, Zombie Too
63 - Can You Dig It?
64 - Totally Nuts
65 - Dead Zeppelin
66 - Me Smash!
67 - ZomBoogie
68 - Three Hit Wonder
69 - All your brainz r belong to us
70 - I, Zombie Endless

生存模式:
1 - Survival: Day
2 - Survival: Night
3 - Survival: Pool
4 - Survival: Fog
5 - Survival: Roof
6 - Survival: Day (Hard)
7 - Survival: Night (Hard)
8 - Survival: Pool (Hard)
9 - Survival: Fog (Hard)
10 - Survival: Roof (Hard)
13 - Survival: Endless
RM2 - 计算机常识问题
以下是在进行修改操作时需要掌握的计算机常识:
  1. 进制转换:1 Byte(字节) = 8 bit(位);每1个字节 = 2个十六进制数。
  2. 能够明白在使用 Hex 编辑器修改 PvZ 存档的过程中,如果需要修改出一个较大的数(超过1个字节的),要逆序写(原因是计算机的小端存储,逆序并不是每个十六进制数全部参与逆序,而是每2个十六进制数互相逆序,换言之,每个字节之前互相逆序)。举例:如果要将数值改成 521520,其十六进制是 7F530(前面空出的一位十六进制数补 0 后就是 07F530),在编辑器中要写成 30 F5 07,而非 07 F5 30。
  3. 十进制和十六进制间的转换和加减运算(不懂可以百度,或者用电脑、手机上的计算器)。
  4. 懂得如何使用 Hex 编辑器,会复制、修改、删除某个字节的数据,插入片段前要先增加文件的字节空间,增加的空间的大小(字节数)等同于你要插入的字节片段的大小(字节数)。添加方法:编辑 -> 修改大小。在弹出的窗口输入修改后的字节数(这个数值是字节数的十六进制表示)。举例:当前字节数是 0x0000000C(12个字节),如果要增加4个字节,那么就要把这个值修改为 0x00000010(12+4=16,这个小学都会吧。16 的十六进制表示是 10)。修改完大小之后,先将你要插入数据的位置之后的全部数据向后移,然后再插入你要插入的字节片段。
RM3 - 植物编号说明
植物编号:
00 - Peashooter
01 - Sunflower
02 - Cherry Bomb
03 - Wall-nut
04 - Potato Mine
05 - Snow Pea
06 - Chomper
07 - Repeater
08 - Puff-shroom
09 - Sun-shroom
10 - Fume-shroom
11 - Grave Buster
12 - Hypno-shroom
13 - Scaredy-shroom
14 - Ice-shroom
15 - Doom-shroom
16 - Lily Pad
17 - Squash
18 - Threepeater
19 - Tangle Kelp
20 - Jalapeno
21 - Spikeweed
22 - Torchwood
23 - Tall-nut
24 - Sea-shroom
25 - Plantern
26 - Cactus
27 - Blover
28 - Split Pea
29 - Starfruit
30 - Pumpkin
31 - Magnet-shroom
32 - Cabbage-pult
33 - Flower Pot
34 - Kernel-pult
35 - Coffee Bean
36 - Garlic
37 - Umbrella Leaf
38 - Marigold
39 - Melon-pult
40 - Gatling Pea
41 - Twin Sunflower
42 - Gloom-shroom
43 - Cattail
44 - Winter Melon
45 - Gold Magnet
46 - Spikerock
47 - Cob Cannon
48 - Imitater
49 - Explode-o-nut
50 - Gaint Wall-nut
51 - Sprout
RM4 - 金盏花颜色编号说明
金盏花颜色编号:
00 - 白
01 - #(无色)
02 - 白
03 - 品红
04 - 橙
05 - 浅红
06 - 天青
07 - 红
08 - 蓝
09 - 紫
10 - 浅紫
11 - 黄
12 - 浅绿

9 Comments
微光守夜人  [author] Jun 27, 2024 @ 7:55pm 
可能确实复杂了一点,文中对于数据修改部分已经尽量用了通俗易懂的表述方法。该方法主要是对存档数据的意义进行解析,仅作为一种修改数据的手段,有一部分功能是可以依靠其他修改器实现的(比如改金币数值再去买卡牌等等)。
银河系装逼大王 Jun 25, 2024 @ 11:35pm 
我擦,这么复杂哇,牛逼大佬
二幺 Dec 25, 2021 @ 8:19pm 
啊,找到了,是 C:\Program Files (x86)\Steam\userdata\这个位置,打扰了:FH5Kudos::tamamofaction::FH5Superstar:
二幺 Dec 25, 2021 @ 7:59pm 
请问!!C:\ProgramData\Steam\PlantsVsZombies\userdata_backup 文件位置是这个吗?我改了之后没有用哎,改完开游戏发现没有变化,再关游戏、发现这个文件又被改回原来的数了,明明云存档也关了,游戏是从哪里读的数据呀
XiaoYi Dec 25, 2021 @ 12:50pm 
666
ichaoe Dec 17, 2021 @ 11:55pm 
666
508296920 Nov 27, 2021 @ 5:45pm 
您 才是真正的英雄
Slade Wilson Nov 22, 2021 @ 7:48pm 
🐮逼
篝敦亚可 Nov 21, 2021 @ 2:33am 
牛的