C1 任务1 修改游戏存档
1.找到游戏存档的位置
一开始没想到,游戏的数据放到哪里,所以刚开始一直在改这个userdata文件夹里的内容,结果存档一直没有效果,后来改劈叉后,删掉重新解压一次
发现数据和存档还在,然后根据我以前写程序的时候,总是把数据放到 C:\ProgramData 文件夹下(许多程序的设置也都是保存到这个文件夹的),这个文件夹已经被隐藏了,由于我电脑默认设置的就是显示隐藏项目。
用图上的方法来设置,接着找到C:\ProgramData\PopCap Games\PlantsVsZombies\userdata文件夹
然后游戏数据就出来了
users.dat是保存的用户信息,userx.dat才是用户下的缓存
2.修改存档
然后新建两个用户,用来对比数据,用第一个数据先闯到(1,5)关
然后在看没玩的,可以看到改变的数值是 04列下的第一行
我们的要求是改到5,2关,植物大战僵尸的一个大关卡中的小关卡一共有10关,我们到5,2关也就是到52关
计算5,2关也就是52的十六进制得出 34,我们把01改到34后,发现关卡是6,2关了,然后懵逼了,具体我也不知道啊,不应该是这样吗???
接着我算出了42的十六进制 2a 然后改到了5,2关
用5.1凑个数
3.修改金币数量
当值为2a的时候,商城已经出现了,但是银币为0,我又打了一关获取到10银币后找到了修改后的数据位置,也就是08列到0b列,然后发现,10银币表示的是1,那么我们获取到10000银币的话,只需要把1000的十六进制打上去就行
我们算出的1000十六进制是3e8,接着在前面补个0 变成03e8,接下来开始改存档
保存之后进游戏一看,又懵了,593950个银币。。。
然后又算出来这个数值的十六进制得出 e803,发现和我们的03e8有点相反呐。。。
然后又把08列到09列修改为了 e803(因为我们写的是03e8但是的出来的值是e803的值,就可以想到,它是反着来的)
然后在进游戏查看,银币已经到10000个了
拓展任务
拓展任务: 用十六进制绘制一个带黑线的图
这个任务完成的话,需要了解BMP的结构
这段话来源于百度百科
位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节(位图数据,即图像数据,Data Bits 或Data Body)阵列,它具有如下所示的形式。
结构 | 大小 | 描述 | |
bfType | 2 | 说明文件的类型.该值必需是0x4D42, | |
bfSize | 4 | 说明文件的大小,用字节为单位 | |
bfReserved1 | 2 | 保留,必须设置为0 | |
bfReserved2 | 2 | 保留,必须设置为0 | |
bfOffBits | 4 | 文件头开始到实际的图象数据之间的字节的偏移量。 | |
接下来用hex editor Neo 新建一个十六进制临时文件,先把头文件怼好
然后我们来进行画图了
我们先弄一堆白色(白色的16进制为FF)
所以我们给他补一堆F
如果FF没有加够的话,那么图片应该是损坏的,当白色底图出来后就可以停止了
保存后就是这个样子
然后开始画黑线了,在学html的时候我们知道,黑色的十六进制rgb是 #000000
所以我们只需要把一部分f换成0就可以画出来黑线了,但是要注意的是,bmp的十六进制是从底往头走的,也就是上面的f是底部的白色背景,然后最下边的f是最顶部的白色背景,我们尽量靠中间走
把中间的f换成0后,我们在看效果图片
这个扩展任务就完事了