疾风之狼 发表于 2009-3-9 20:45:49

禁断研究(作者:Arix.Wang)

作者:Arix.Wang   文章来源:http://orbit13.spaces.live.com/

*** 金手指禁止! ***
为了测试汉化成果的需要,不得不求助于老金了。
VBA主要使用的金手指码类型有三种:原始码raw,Codebreaker(CB),Gameshark(GS)
raw设置和功能都太简单了,如02001234:12345678就表示修改处数据为12345678(高低位不说了,真实值为78 56 34 12)
GS码强大到可以修改游戏代码,但是没有可读性,不会也不谈
那就说说又强大又可读的Codebreaker Codes。以0-F开头的代码各具功能,以下逐一说明:

0,1,9打头的代码为Enable Codes
0000xxxx000yEnable Code 1 - Game ID
1aaaaaaa 000zEnable Code 2 - Hook Address
9xyyxxxx   xxxxEnable Code 0 - Encrypt all following codes (optional)
这些是用来匹配游戏和压缩用的,基本用不上

3,8分别为 8bit 和 16bit 修改
3aaaaaaa 00yy=yy
8aaaaaaa yyyy=yyyy
直接修改数据,相当于raw码

7,A,B,C(F,D)为条件判断码
7aaaaaaa yyyyIF =yyyy THEN (next code)
Aaaaaaaa yyyyIF <>yyyy THEN (next code)
Baaaaaaa yyyyIF >yyyy THEN (next code) (signed comparison)
Caaaaaaa yyyyIF <yyyy THEN (next code) (signed comparison)
Faaaaaaa yyyyIF AND yyyy THEN (next code)
*D0000020 yyyyIF = yyyy THEN (next code)
主要说下D码,当按键满足条件时启动
A0001 B   0002 Select 0004 Start 0008
右 0010 左 0020   上   0040    下0080
R0100L0200    如判断同时按下即为
引申一下,在gba中规定4000130h - KEYINPUT - Key Status (R)
16位中低10位分别标示(0=Pressed, 1=Released)
同时按下即为0110111110=1BEh,也就是和等效
*实际条件为IF AND yyyy = 0 THEN,注意 0241 && 01BE = 0的

2,6,E为逻辑码和自操作码
2aaaaaaa yyyy= OR yyyy
6aaaaaaa yyyy= AND yyyy
Eaaaaaaa yyyy= + yyyy
这组很明白就不说了,注意的是E码中,当yyyy>7FFFh时为负数,实现自减

4为批修改,好像也叫压缩码,用来修改全道具、全图鉴之类的东东
4aaaaaaa yyyy=yyyy+0..(cccc-1)*iiii
iiiicccc ssssparameters for above code
这是一个很便捷的代码,再说明一次
aaaaaaa起始地址,ssss每写一次后的偏移量,cccc写入次数
yyyy写入初始值,iiii每次写入后yyyy的递增值
如0858中每个道具占4B(03图鉴状态,63道具数量,72角色道具说明和入手途径,00)
要修改263个道具数量为99且图鉴全开即为(03001540起始地址)
43001540 6303
00000107 0004

5为直接memwrite,没有试过
5aaaaaaa cccc=11,22,33,44,etc.
11223344 5566parameter bytes 1..6 for above code (example)
77880000 0000parameter bytes 7..8 for above code (padded with zero)

差点忘了萌战,四强已出炉
镜,渚,司,会长。最后一周,最后的战斗~期待双子的对决

[ 本帖最后由 疾风之狼 于 2009-3-31 20:40 编辑 ]

fabio1983 发表于 2009-3-9 20:52:11

湘西小人物 发表于 2009-3-10 00:23:00

又是这个……
日后再看看有用没
页: [1]
查看完整版本: 禁断研究(作者:Arix.Wang)