天天动画片 > 八卦谈 > CB码/code breaker/代码断路器介绍——科普向,什么是金手指(十一)

CB码/code breaker/代码断路器介绍——科普向,什么是金手指(十一)

八卦谈 佚名 2023-12-31 04:31:37

说在前面:

    本期专栏起到一个补充作用,介绍代码断路器Code Breaker,或简称CB码)这一金手指类型。

代码断路器

    本系列专栏的第五期究极绿宝石5.3——科普向,什么是金手指(五)里面提及了代码断路器类型的金手指,但是当时没有详细介绍:

第一行的四个按钮,“代码(C)...”“修改(H)...”“Gameshark...”“CodeBreaker...”,指的是金手指的格式。金手指的格式可以大致分为3类:

……

3. CodeBreaker,也被称为代码断路器。这种类型的金手指没有必要详细介绍,因为它能做到的功能,原始代码和GS码也能做到,因此专栏的内容只会涉及到前两种代码。

    现在给出一个详细的介绍:

    CodeBreaker,也被称为代码断路器、CB码。格式为:8位十六进制数 4位十六进制数。具体来说,CB码的一行是由单个空格分隔的一个8位十六进制数和一个4位十六进制数,这一行除了两个数字、单个空格和结尾那个看不见的回车符,没有任何其他符号

    当时作者说“它能做到的功能,原始代码和GS码也能做到”,其实这句话并不正确。作者后来了解到,CB码支持对某个地址处的变量进行逻辑运算(逻辑与和逻辑或),这是原始代码和V3格式码做不到的,但是很少有金手指会用到这种运算,至少在这个系列的专栏中介绍的金手指都没有用到。如果当时这种说法给读者带来了误导或者困惑,作者在这里要说声抱歉!

    在VBA模拟器的“金手指——金手指列表”功能窗口内,下方8个按钮的右上角“CodeBreaker...”就是输入CB码的按钮:

VBA模拟器中CB码的输入按钮

CB码的代码类型

    CB码的理解难度介于原始代码和V3格式码之间。CB码和V3格式码有相似的地方,例如它们都具有代码类型,不同的代码类型实现的是不同的功能,而原始代码就没有代码类型,因此原始代码就只有一种功能:向指定地址写入数据。CB码和V3格式码的不同之处在于CB码不需要加密,因此看到一个CB码格式的金手指时,不需要借助AR Crypt这类的工具进行解密就可以理解这条金手指的原理。

    在本系列专栏第九期究极绿宝石5.3——科普向,什么是金手指(九)中,作者详细介绍了V3格式码,它的代码类型、转换规则等在“The Secrets of Professional GameShark(tm) Hacking”文档中被详细地列出。事实上,这个文档中同样也有CB码的介绍,但是内容并不完整:

    

《专业金手指破解的秘密》文档中对CB码的介绍

    这里对CB码的介绍和对V3格式码的介绍在形式上十分相近,都是在左侧列出代码类型和举例,右侧列出每类代码的详细说明。但是,这个表格并不完整,有些代码类型并没有在其中列出,还需要找其他的文档来补充缺失的内容。

    缺失的内容可以在AR Crypt 3.12 beta版本中找到,在本系列第九期介绍过这个工具,当时用的是这个工具的另一个版本(2.4B)。新的3.12 beta版本里面添加了对CB码的介绍,打开这个工具,选中左上菜单栏的“Create...->CBA”:

打开CB码的介绍

    在这个选项上打对钩后,就可以查看每个CB码格式对应的介绍:在下拉菜单中选择一个代码类型,它的介绍会出现在标题栏上。

查看CB码每个代码类型的含义

    上图显示的是Type 4类型,介绍为Slide code。这个介绍十分简略,还需要结合上面文档里的具体说明才能明确这个类型的金手指该如何使用,其他的代码类型介绍同样简略,这是它的不足之处,但好处是所有的代码类型都有介绍,类型是完整的。因此,想要对CB码有一个既全面又深入的了解,最好将上面文档中的内容和AR Crypt工具提供的简略介绍对比着看,互为补充。

    通过对比可以看到:CB码的代码格式就是这一行代码的第一个数字。例如,代码

    它的类型就是Type 8,含义是“16 Bits RAM Write”,也就是向RAM中写入16位的数据,其含义和原始代码的0202450c:02b0是相同的。

    除了第一个数字(也就是“最高位”)之外,CB码中左半部分的内容表示的就是变量地址,这和原始代码有很大的相似性,并且这条CB码是直接可以输入到VBA模拟器中使用的,不需要像V3格式码那样还要经过一步加密操作。也就是说,CB码没有“中间代码”这一步操作。

举例说明:将一些金手指转换到CB码

    下面将对金手指中可能用的到的代码类型进行介绍,把之前专栏内容涉及到的金手指转换为CB码作为举例说明。

Type 3和Type 8,变量写入

    Type 3类型的CB码写入一个字节的数据,Type 8类型的CB码写入两个字节的数据,它们都可以直接对应到原始代码,例如下面两行代码是等价的:

   它们的含义都是将队伍首位精灵的级别修改为100,但是因为这个变量是面板值,如果不修改它的非面板值(经验值),这种金手指是不会生效的,所以在这里只是举个例子。

    同样等价的还有下面两行代码:

    它们的含义都是将队伍首位精灵的种族修改为三首恶龙。

Type 2和Type 6,逻辑或和逻辑与

    这两个类型的CB码作用是对某个地址处的16位数据(两个字节)进行“逻辑或”或者“逻辑与”操作。本系列专栏并没有涉及该类型的金手指,因此在这里根据本系列专栏第七期究极绿宝石5.3——科普向,什么是金手指(七)的精灵映射表临时创作两个金手指。

    将队伍中首位精灵的特性改为第二个普通特性(当首位精灵不是隐藏特性的情况下):

    这里用到了“逻辑或”运算,通过精灵映射表可以知道,02024535这个字节的最高位表示了队伍首位精灵是第一特性还是第二特性,因此将该位“置为1”就是把特性修改为第二特性。在逻辑运算中,“把某位置为1”使用“逻辑或”运算最合适,因为它不会影响其他位的数据。要是用成了原始代码02024534:8000,不仅把特性修改了,连个体值也会被修改,因此这种只需要修改变量的某几位的金手指用逻辑运算更为合适。

    将队伍中首位精灵的特性改为第一个普通特性(当首位精灵不是隐藏特性的情况下):

    这里用到了“逻辑与”运算,把02024535这个字节的最高位“置为0”。在逻辑运算中,“把某位置为0”使用“逻辑与”运算最合适,同样是因为它不会影响其他位的数据。上面两条金手指的设计原理对于熟悉逻辑运算的读者来说理解起来应该很容易。

Type 4,批量写入

    这条代码英文介绍为“Slide Code”,作者暂且将它翻译为“批量写入”。仔细看它在文档中的说明,可以看到这个类型的CB码有两行,格式如下:

    不过,经过评论区读者的提醒,这个文档对Type 4类型的介绍有误,非常感谢这位读者,否则作者不知道还要被蒙骗多久……因此也给其他读者提个醒:尽信书不如无书。

    Type 4类型的代码真正的格式是这样的:

    含义是从地址aaaaaaa开始,每相隔iiii的长度写入一次yyyy数据,每次写入之后内容再加上zzzz,共写入xxxx次。如果按照C语言的语法,这是一个循环写入的代码片段:

    举个例子是专栏第九期提到的“全图鉴发现”金手指,当时用的是V3格式码,它对应的中间代码是:

    根据这3行中间代码可以很方便地转换成CB码:

    这里看一下CB码的中间两行,含义是从02025F62开始,每隔2个字节(0002)写入一次FFFF,共写入55(0037)次,由于每次写入的都是FFFF,不需要变化,因此Type 4类型的第二行左侧高四位是0000。

    由于每次写入的字节数固定为2个(这是CB码格式规定的,空格的右边是4位十六进制数,也就是2个字节),所以使用Type 4的CB码进行连续地批量写入时,一般来说第二行的右半边都是0002,也就是每隔2个字节写入2个字节,让写入的内容连续起来。

Type 7,条件判断

    Type 7类型最常用的地方是按键触发类的金手指,以本系列专栏第十期究极绿宝石5.3——科普向,什么是金手指(十)中给出的“随身回复”金手指为例,它的V3格式码对应的中间代码是:

    对这两条金手指还有印象的读者,还能记得第一行执行的是一个条件判断:当B+Select按键被按下时,也就是04000130处的变量取值为03F9时,执行下一条代码;第二行是将“对话程序”对应的变量修改为和精灵中心护士对话的程序。这两行代码对应的CB码是:

    由于CB码一次最多只能写入2个字节,而对话程序的地址都是4个字节,所以需要用两次条件判断,分两次写入2个字节,这也是CB码相对于V3格式码麻烦一点的地方。

关于主代码Master Code的说明

    在CB码和V3格式码的文档中,有一类代码类型被称作“主代码”(Master Code),这类代码在模拟器中没有任何用处。作者对它们存在的原因进行一个简要的介绍:

    在真正的GBA游戏机上使用金手指时,需要借助额外的硬件设备和GBA游戏机进行连接,这类作弊设备包括Action Replay (V3格式码的来源)和Code Breaker(CB码的来源),在使用这些作弊设备时,需要根据游戏版本开启对应的主代码。但是模拟器替玩家完成了这一功能,它能够模拟作弊设备和GBA游戏机连接后的游戏状态,并已经默认开启了主代码,所以在模拟器中主代码是毫无用处的。

说在后面:

    本期专栏是一个文档性质的专栏,对本系列专栏的内容进行补充。如果以后作者想起什么其他可以补充的内容,会以类似本期专栏的形式放在本系列专栏的后面。

本文标题:CB码/code breaker/代码断路器介绍——科普向,什么是金手指(十一) - 八卦谈
本文地址:www.ttdhp.com/article/44499.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们