c1阶段-任务01:修改游戏存档(植物大战僵尸)

本文介绍了如何使用二进制编辑器修改单机版《植物大战僵尸》的游戏存档,实现跳关和修改金币数量。通过分析04和08-0b地址的十六进制数据,揭示了关卡和金币数量的存储规律,为玩家提供了自定义游戏进度的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习笔记

c1阶段-任务01:修改游戏存档(植物大战僵尸)

 

一、任务内容

任务:使用二进制编辑器修改单机版植物大战僵尸的游戏存档,实现跳关卡(如5-1),修改金币数量(如100000金币)

二进制编辑器:win推荐hex editor neo,Linux或Mac使用vim的二进制编辑模式

 

二、实践过程

STEP01:软件准备

STEP02:找到游戏存档目录

  • 用户文件一般为C:\ProgramData\PopCap Games\PlantsVsZombies\userdata\user1.dat

STEP03:打开植物大战僵尸并新建一个用户;用Hex Editor 打开对应用户user1.dat的文件

STEP04:尝试修改数据,首先寻找关卡、金币的存储地址

测试发现,04地址为关卡数目存储地址;08-0b均是金币存储地址;

STEP05:修改数据,探索关卡与金币的变化规律

 (1) 关卡规律

 

04地址关卡数目 规律
011-10*16+1 = 1
021-20*16+2 = 2
031-30*16+3 = 3
.........
0b2-10*16+b = 11
0c2-20*16+c = 12
.........
0f2-50*16+15 =15
102-61*16+0 =16
.........

由此得到关卡的修改规律

假设04地址为xy(十六进制数字);   关卡记为m-n; 

关卡顺序号w 为 (m-1)*10+n ; (w 为 十进制数字);

将十进制w 转为十六进制数字xy;

(进制转换知识可在论坛中搜索,我这看了这条链接https://daixiang.blog.youkuaiyun.com/article/details/82503568

以此关系式可类推:

关卡4-1,1f;    关卡5-1,29 ;    关卡6-1,32 ;....

但是!关卡7-1,  计算得到  3d;   但实际游戏中会显示 “6-”;  后续更大的数字也均显示 “6-”;

故可发现该游戏最高关卡为6-10;

 

 (2) 金币规律

商店金币系统在关卡3-5(04地址大于19)后解锁;

金币存储位置为08-0b地址;

首先,探索08地址,其他地址(09-0b地址)均为0;

08地址金币数目 规律探索
01100*  ?+ 1*10 = 10 
02200* ? + 2*10 = 20 
.........
10160(1*16+0)*10
20320(2*16+0)*10
21330(2*16+1)*10
.........
ff2550(f*16+f)*10=(15*16+15)*10
.........

发现规律:

金币数  = (x*16+y)* 10

最大金币数 ff  →  2550;

 

②探索09地址,金币存储位其他地址均为0;

01  →  2560    2550 +10?  发现与08地址有关联,比08地址最高数字高10;初始位置为2560;

02  →  5120    2560*2       发现依然符合倍数关系;

03  →  7680    2560*3       再次验证倍数关系;

......

10  →  40960  2560*16

11  →  43520  1*40960+1*2560

.....

 ff   →   15*40960+15* 2560  = 652800

发现规律:   (x*40960 + y* 2560)  =   (x*4096 + y* 256) *10   =   (x* (16)^3 + y* (16)^2) * 10 

以此类推可继续推导后续单个地址变化,不再赘述

结合08,09地址来看:

00 01    →     2560   =  (0*16+0)* 10   + (0* (16)^3 + 1* (16)^2)* 10

0002金币是5680;0003金币数是7680;0004金币是10240;。。。。

01 01    →    2570     =  (0*16+1)* 10   + (0* (16)^3 + 1* (16)^2)* 10

10 10    →    41120  =  (1*16+0)* 10   +   (1* (16)^3 + 0* (16)^2)* 10

10 11    →   43680   =  (1*16+0)* 10   +   (1* (16)^3 + 1* (16)^2)* 10

 

综合规律: 金币总数目 为  地址08,09,0a,0b   之和;

假设目标是10000,   0004金币是10240;只需要前08,09位置修改即可;

10000-7680=2320,

2320<2560;  由08位提供;得到e8;

最终得到 e8 03;

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值