不少游戏中都有什么诸如人物的特殊能力,比如DIABLO。那么它的魔法是如何存放的呢,每个魔法用一个字节,00代表无,01代表有?那也太浪费了吧,一般来说程序员都爱用二进制来存放各项能力,大家知道,一个字节有8位(如FFh化为二进制是11111111),游戏中的能力就是占了一位(bit),0代表无,1代表有。如果某一游戏的能力排放为00000011,那么在内存(硬盘)中存放就是03h,显然用二进制能有效地减少存储空间。
由上面看来,直接搜索能力的地址是不明智的,一般我们修改都找出这个人物(或其他什么东东)的数据所在地,然后找到能力的具体地址,将其改为FFh,一般就可拥有全部的能力。
下面我以早期的战略游戏经典“信长之野望——天翔记”为例来分析(当年还没有FPE4和5,用其他的内存修改工具会死机,只得用PCTOOLS)。记得当年我修改的时候,差点想破脑袋。天翔记中个各人物都有“智力/智才、政治/政才、战斗/战才”三项能力,你直接找智力或找智才,都是找不到的。而我拐了个弯,寻找他的勋功,然后上下分析,才得出结果。原来他的智力是按智才的百分比存放,而智才是将游戏中的数据除以2存放,怪不得找不到哩(光荣这个混蛋)!水到渠成,修改其它诸如兵力,训练……就是简单的事了。
找到了人物的特技和带兵能力后,按习惯都改为FF,特技到是PASS了,但带兵能力却不对,怎么都变一个个的O O O O了(应是S、A、B、C、D),思考良久,由于能力有6级,故一位是放不下的。两位?两位只有00、01、10、11四级啊,放不下6个级别,那么只有3位了,可从来没有一个游戏用了3位存放的,要么4位,要么2位,再说共有“陆、骑、枪、水”四个,4x3共12位,不足2个字节16位,而且3位能放8级的能力,难道见鬼了?又思考晾久并试出确是只有两个字节,干脆,赌一把。000代表E级,001代表D级,010代表C级,011代表B级,100代表A级,101代表S级,一个字节存2个能力,OK,把2个字节改为2Dh,2Dh(00101101),进入游戏,不对,怎么“X”都出来了。反回来再改,改为6D FB(01101101 11111011),哦(欢呼),对啦,全是S级喽,还有铁骑呢!
怎么样,够艰难吧,别看现在说说简单,在不知道的情况下要想出来是很难的。而这,也是修改游戏乐趣的所在之一。希望看了上面的分析,能给你有所收获(尽管以后可能用不到)。
|