究极绿宝石5.3 您所在的位置:网站首页 gba模拟器究极绿宝石金手指 究极绿宝石5.3

究极绿宝石5.3

2023-12-21 03:37| 来源: 网络整理| 查看: 265

说在前面:

    在第一期专栏的末尾,作者一共提出了三个问题。从第二到第四期,我们用了三期专栏,简要回答了前两个问题:

    我们想要改的数字在哪里——变量地址查询

    我们要改的数字是什么含义,或者说我们想改的东西对应了什么数字——变量与实体的映射表

    本期专栏将会回答第三个问题:

    用了金手指管不管用,要是坏档了怎么办——修改变量的副作用

金手指怎么用?

    不知道有多少看过第一期专栏的读者,发现题目虽然有“金手指”,但里面竟然一句金手指的代码都没有,是不是会感到有些失望?甚至觉得那篇专栏太水了,一点实际用途也没有?

    其实金手指代码在网上并不稀缺,随便搜索一下都可以找到一页页全是代码的“绿宝石……金手指……”的内容,不过说金手指怎么用的文章却是寥寥无几,就算有,也主要是说明这条金手指代码会起到什么作用;再多说一点,会提到这个代码的输入格式;再详细的,可能会提示你要及时关闭金手指,否则游戏会卡死等等。一个典型的例子是在百度搜索中搜索“口袋妖怪游戏中的绿宝石金手指怎么用”,出现的“百度知道”的回答。

    有了前几篇专栏的知识基础,再介绍金手指怎么用就是水到渠成的事。还是以VBA模拟器为例,让我们怀着激动的心态,打开模拟器中的“金手指——金手指列表”,这就是我们输入金手指代码的地方!

金手指列表金手指输入界面

    仔细看一下上面这个“金手指”列表界面,下方居然有8个按键!这还不包括左侧有一个“还原为前一个数值”的可勾选框。这么复杂的界面,如果是第一次接触金手指的读者,就算给你一行金手指代码,你知道该输入到什么地方去吗?下面作者将一一介绍这些按钮和左边那个可勾选框的功能。

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

原始代码,也被称为raw code。格式为:变量地址:变量取值。具体来说,原始代码的一行是由冒号分隔的两个十六进制数,这一行除了两个数字、冒号和结尾那个看不见的回车符,没有任何其他符号。看过之前几期专栏的读者对变量地址和变量取值这两个概念应该是再熟悉不过了。变量地址一定是8位的十六进制数,而变量取值可以是2位、4位或者8位十六进制数任选一种。这条代码的含义就是将变量地址处的变量设置为变量取值代表的数字。

GameShark,也被称为GS码、V3格式码。格式为:8位十六进制数 8位十六进制数。具体来说,GS码的一行是由单个空格分隔的两个8位十六进制数,这一行除了两个数字、单个空格和结尾那个看不见的回车符,没有任何其他符号。GS码是基于原始代码和其他特定规则,由加密算法生成的代码,作者在第九期专栏究极绿宝石5.3——科普向,什么是金手指(九)有详细介绍。

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

    注1:本期专栏发表近一年之后,作者为了专栏内容的完整性,在第十一期专栏代码断路器介绍——科普向,什么是金手指(十一)中介绍了CodeBreaker这一金手指代码类型。

    注2:这里提到的代码格式是针对VBA模拟器来说的,如果是其他的模拟器,例如手机上的myboy,它的原始代码中间就是用空格隔开,而不是像VBA用冒号隔开。虽然格式可能会有区别,但同一条金手指代码中出现的数字在不同的模拟器上是不会有区别的。

    现在回到第一行的4个按钮,“代码(C)...”和“修改(H)...”都是输入原始代码的,“Gameshark...”是用来输入GS码的,“CodeBreaker...”是用来输入代码断路器格式代码的。由于“修改(H)...”和“代码(C)...”这两个按钮在功能上有重复,而作者又暂时不打算介绍代码断路器,因此在这里只介绍第一行的“代码(C)...”和“Gameshark...”这两个选项。

    先点击“代码(C)...”按钮,会出现一个输入框:

原始代码输入界面

    点击按钮后,会出现一个新的界面,里面有两个输入区域,上面是“注释”,随便写什么都可以(空着不写也行),主要就是提示你这条金手指是干什么用的,如果你自己记得住,或者用过一次就不用了,就没必要写。下面是“代码”,就是输入原始代码的地方。

    我们还是举第二期专栏结尾的那个例子,变量地址0202450c映射到队伍中第一只精灵的种族,而变量取值02b0映射到三首恶龙。按照原始代码的格式,0202450c:02b0这句话的含义就是把变量地址0202450c处的变量取值修改为02b0,体现在游戏中,就是把首位精灵改成三首恶龙。

    下面我们来尝试一下,作者拿一个临时存档测试,目前队伍里首位精灵是搭档伊布:

首位精灵:搭档伊布

    打开“金手指——金手指列表”,点击“代码(C)...”按钮,在“代码”框里输入:0202450c:02b0

输入代码

    这里多提一句,这个页面内输入的任何字母都会强制变成大写的,就算不按Shift或者大写锁定键Capslock也是这样。然后点击确定,这个界面会退出,回到刚才的“金手指列表”界面:

金手指列表界面

    此时,列表界面上显示出刚才输入的代码,由于没写注释,“注释”那一列是空的;后面的“状态”这一列,“E”表示这条代码正在生效,就像右上角提示的那样。同时这条代码的左侧出现了一个打对勾的框,如果点击一下这个框,对勾会消失,同时右侧的“状态”会变成“D”,表示这条代码现在不生效,只是写在了这里,如下图:

代码不生效

    和代码左侧的那个打勾框功能相同的,还有界面下方第二行的“开/关(E)”按钮,当我们点击列表中的第一条代码时,界面下方第二行的“删除”和“开/关(E)”按钮都会变成可点击的状态:

选中一条代码

    如果点击“删除”,这条代码就会从列表中消失;如果点击“开/关(E)”,就会切换这条代码的状态(从启用E到不启用D,或者反过来)。删除一条金手指也会让它失效,从功能上来说,相当于先把它设置成不生效,然后再把它从列表中移除。而“全部删除”按钮就是把输入的所有金手指全部变为不生效并删除。我们可以点击“开/关(E)”按钮,将这条代码的状态恢复为“启用”,然后点击界面右下角的“确定”按钮,就回到游戏了。

    回到游戏后,如果停留在刚才的队伍精灵查看界面,我们会发现首位精灵还是搭档伊布,没有发生任何变化,这是因为游戏还停留在输入金手指之前的状态,我们需要对游戏操作一下,让金手指修改的数字能够反映到屏幕上来,比如我们可以选中搭档伊布,查看它的概况(也可以先退出队伍精灵查看界面,然后再次进入到队伍精灵查看页面):

精灵被改成三首恶龙

    此时首位精灵就变成了三首恶龙,随之而来的是各种各样数不清的问题。

    如果有人把这张图片发到贴吧中,马上就会被一眼看出:“这是开金了吧!”(“开金”就是“使用金手指”的意思)。一个三首恶龙,名字怎么会叫“搭档伊布”呢?好吧,如果说有人有奇特的爱好,在凯那市改名字小屋那里把这只三首恶龙硬改名改成“搭档伊布”,那最下面那句“橙华森林遇到”是什么情况?橙华森林里哪有什么三首恶龙?还是“Lv5时”遇到的?这是开金手指会出现的第一个问题:只修改一处,和其他信息不对应。

    如果你的队伍还有其他精灵,一不小心换到首位去了,就会发现无论什么精灵,换到首位之后全都变成三首恶龙了!怎么回事?原来是金手指忘关了!这是开金手指会出现的第二个问题:忘记关闭金手指,让金手指一直生效,出现了意料之外的效果。

    有的读者说,我自己爽就行了,也不会把这种让人一眼就认出来“开金”的图随便乱发,所以上面的第一个问题我不管了;第二个问题也可以解决,我回到刚才那个金手指页面把代码关了或者删了,那是不是就万事大吉了呢?我们拿着刚改好的三首恶龙,找一个NPC训练师打打看。

对战训练师

    刚才只改了精灵的种族,没有改技能,而搭档伊布之前学的技能,三首恶龙一个也学不会,在对战NPC训练师的时候,被游戏的反作弊机制删除了所有技能。其实这还算好的,有的时候,这只精灵在对战训练师的时候直接就消失了。不信的话,可以用刚才的方法,在游戏刚一开始的时候改出来烈空坐试试。这里强调一下是究极绿宝石的5.3版本,里面的反作弊机制还是很强大的!这是开金手指会出现的第三个问题:金手指触发了游戏的反作弊机制,不但没有效果,反而还遭受了损失。

    如果有细心的读者会发现,之前那张图上的搭档伊布的等级是73,HP是246,怎么进入对战之后,三首恶龙就变成了等级68,HP是267了呢?我们并没有开修改等级和HP的金手指啊。

    这里就要对变量取值再做一个进一步的说明。有的变量取值是面板值,它是根据其他的变量取值由游戏程序计算出来的,而有的变量取值是非面板值,它的取值和其它的变量没有依赖关系。用上面的例子,精灵种族就是非面板值,但是精灵的等级和HP就是面板值,因此修改了精灵种族之后,精灵的等级和HP就会被游戏本身计算出来一个新的值,替换掉原来的。

    怎么区分哪些变量取值是面板值,哪些不是呢?这个问题留到之后的第七期专栏再回答。

    这个“触发反作弊机制”的问题,才是让各位开过金的读者们最头疼的问题吧?有的人因此在贴吧内指责制作组,说这种设计太影响游戏体验了。就作者在贴吧中的观察,对于这种言论,有两种态度:

天使的态度:制作组用爱发电,把这款游戏免费给你玩,你还有什么不知足的?你老老实实玩游戏不开金、不开作弊,反作弊机制就反不到你身上来,对游戏体验又能有什么影响?你说打道馆不让带神兽,那你去玩究4的神战版啊!你说剧毒羽栖顺风这些技能机和教学都没有了,很难受,但制作组就是严格按照八代的设定来的,要喷去喷GF啊……

魔鬼的态度:你开金触发反作弊机制了?那是因为你弱,没本事,不知道怎么绕开反作弊机制,不去好好钻研计算机知识,却在这里怨天尤人。妥妥的一个“无能狂怒人”……

    无论天使也好,魔鬼也好,总之这种言论都讨不了好。我们回到专栏内容本身,探讨一下开金手指遇到的问题——修改变量的副作用。

使用金手指会碰到的问题

    上一节作者总结出三个开金手指会出现的问题:

    第1个问题:只修改一处,和其他信息不对应。

    第2个问题:忘记关闭金手指,让金手指一直生效,出现了意料之外的效果。

    第3个问题:金手指触发了游戏的反作弊机制,不但没有效果,反而还遭受了损失。

    我们一个一个来看。

    第1个问题,本质上是“变量与实体的映射表”找不全的原因。就金手指修改精灵而言,精灵的信息可不止种族这一项,性格、特性、努力值、个体值、携带道具、技能……这些都需要改,要改就改全套的。只改其中一个,弄出个四不像来,反作弊机制不针对你会针对谁呢?只不过话说回来,找全映射表是个大工程,第三期和第四期专栏只介绍了一些难度还不算很大的映射表查找方法。本期介绍了利用金手指修改变量取值的方法,其实它在映射表查找方面是能起到大作用的!到了下一期,作者会再举出一些映射表查找的方法,这里可以先给出一个结论:描述一只精灵的全部信息,100个字节就够了。

    第2个问题,涉及到金手指的功能。有的金手指需要一直开启才能起作用,有的金手指只需要开一次,就可以关上了,一直开着反而会出问题。就拿刚才那个修改精灵种族的金手指为例,这就是个开了一次就需要关上的金手指,除非你想让队伍里的精灵都变成三首恶龙、你抓来的精灵也变成三首恶龙、你从电脑里拿出来的精灵还是变成三首恶龙……那么这个“开了一次再关上”具体是怎么操作的?开多久再关上这次金手指才算是生效了呢?

    回到金手指列表的界面:

金手指列表

    前面我们强调过:原始代码的金手指就是把一个变量的取值改成了另一个。这句话的原理在这几期的专栏中也给大家讲清楚了。这个“更改取值”的操作,是在页面上右下角那个“确定”按钮按下去之后,就马上生效的(当然前提是列表中的代码处于“启用”状态)。“确定”按钮按下去之后,“金手指列表”的界面会消失,这时就可以再次打开“金手指列表”,把这条代码关闭或者删除,这就是“开了一次再关上”的具体操作,甚至都不需要在游戏中进行任何操作。

    在“金手指列表”中,还剩下最后一个功能没有介绍,就是“还原为前一个数值”这个勾选框。前面举的例子中,这个框都没有勾选,这是有原因的。这个框被勾选的含义是:当代码被删除或者关闭时,代码修改的变量取值恢复到使用这条代码之前的样子。如果是这种只开一次的金手指,把这个框勾选上可就麻烦了。一方面,只开一次的金手指,点击“确定”按钮之后就可以关闭或者删除了,不能一直开着;另一方面,一旦关闭或者删除了金手指,变量就会恢复到开金手指之前的样子,忙了这么半天等于什么都没做。所以在用这种只开一次的金手指的时候,这个“还原为前一个数值”的框是不能勾选的!

    可是,如果是有时需要一直开启,有时又需要关闭的金手指,这个框就需要勾选上了!比如说草丛不遇到野生精灵的金手指,它不能开了之后就马上关掉,毕竟主角需要在草丛中走好长一段时间,但需要遇到野生精灵的时候,又需要把变量恢复到之前的样子,否则就一直碰不到野生精灵了。此时就需要在按下“确定”按钮之前,把“还原为前一个数值”这个框勾选上。

    这个框还有一个功能,就是从网上找了一个来历不明的金手指之后,不知道能不能用,想试试看,此时最好把“还原为前一个数值”这个框勾选上,如果用了之后出现了什么意外情况,可以把它删掉,同时还能恢复到使用金手指之前的状态。

    第3个问题,需要好好强调一下。反作弊机制是制作组实现在游戏程序中的代码,它代表的是游戏的逻辑,这和变量还是有很大区别的。事实上,网上的有些金手指改的是游戏代码,而不是变量,这类金手指是最容易触发坏档(存档损坏)的。

    反作弊机制需要绕过吗?如果金手指只是修改变量的话,是可以做到让任何反作弊机制都检测不到的!这是一个从原理上就能说清楚的问题:游戏程序本身也可以修改变量,金手指也可以修改变量,可是变量本身不会知道是谁修改的它。如果我们用的金手指能够做到和游戏程序修改变量相同的效果,那么任何反作弊机制都无法识别这两者的区别!但是,如果金手指修改了游戏程序,也就是说,修改了游戏的逻辑,那就另当别论了,因为正常的游戏流程是不会修改游戏程序本身的。

    换一种方式来说,如果只是用金手指修改变量的话,还可以勉强说我们玩的游戏是究极绿宝石5;如果用金手指修改了游戏程序,那我们玩的其实是另一个游戏,一个基于究极绿宝石5改版之后游戏。

    拿烈空坐举个例子。在游戏流程走到二周目天空之柱顶层捕捉烈空坐之前,用金手指修改变量修改出来的烈空坐,只要和训练师对战就会消失,这是游戏逻辑和反作弊机制决定的。而在捕捉烈空坐的剧情之后,就算用金手指改出来一队伍的烈空坐,对战时也不会消失,因为此时烈空坐已经成为了合法精灵,并且从神奥黄半仙那里拿到的神兽蛋也有可能孵出来烈空坐,所以队伍中的烈空坐从游戏逻辑上来说可以不止一个。这种情况下,如果金手指修改出来的烈空坐,和游戏程序“让你抓到”的烈空坐对应的变量一样的话,那么反作弊机制是无法区分这两种烈空坐的。

    如何判断哪些金手指是修改变量的,哪些金手指是修改游戏程序的呢?这和原始代码中,左半边的变量地址有关。

再谈变量地址

    在第二期的专栏中,作者介绍了变量和变量地址,并以“一条大街”作为比方,形容这些变量的变量地址就像是门牌号,从小到大依次排列开,在VBA模拟器的“变量地址查看器”中可以看到。当时并没有给出比喻中的“大街”对应的学术名称是什么,这里可以介绍一下,这条“大街”其实就是VBA模拟器的内存。

    VBA模拟器程序打开后,会模拟一个游戏机操作系统的环境,有点类似于在我们的电脑、手机上再打开一个小电脑、小手机。电脑和手机的内存,对应到实实在在的硬件,如果有读者拆过电脑或者手机的话,可以找到内存条这种硬件,就是一块小电路板的样子。VBA模拟器的内存,是在它的运行环境中模拟出来的一个硬件,本质上就是在电脑或者手机的内存中找到一段空间拿出来给自己用。

    VBA的模拟器内存中,既包含了游戏程序,也包含了变量。当我们打开VBA模拟器,加载好“究极绿宝石5”这个游戏之后,究极绿宝石5的GBA文件(游戏本体文件)就被加载进了模拟器的内存中;如果我们载入之前的游戏存档,存档也会被加载进模拟器的内存中,并且只会修改其中的变量部分。VBA模拟器内存可以通过VBA模拟器的“工具——反汇编...”(也就是作者常说的“变量地址查看器”)来查看:

变量地址查看器

    其实严格来说,这里面的地址对应的不只是变量,还有可能是游戏程序的代码。GBA文件格式规定了变量应该放在哪些地址,程序代码应该放在哪些地址,这种分配方式又被称作内存视图,一个简易版的GBA文件内存视图如下(图中数字均为十六进制):

GBA文件内存视图

    上图的绿色区域,地址范围是02020000~0203FFFF,这个区域内的数字代表的都是变量,如果读者们翻一翻前几期的专栏,就会发现里面所有的变量地址都在这个范围内;红色区域,地址范围是08000000~09FFFFFF,这个区域内的数字代表的都是程序代码。如果要一个简单的记法,就是:

    金手指的原始代码,左半边的数字以0202或者0203开头的,都是修改变量的金手指;以08或者09开头的,都是修改程序代码的金手指。

    我们计算一下,就会发现02020000~0203FFFF一共有128K(这里的K=1024)个字节,如果大家还记得究极绿宝石5的存档类型是“Flash 128K”的话,发现这两个数字是对得上的。没错,这128K个字节其实就是游戏存档,所以用64K存档的玩家一定会坏档:它丢掉了一半的变量!

    注:这里作者的说法其实是有问题的,这段空间大小为128K,与存档大小相同仅仅是一个巧合,但是用了64K存档的玩家的确会坏档。(于2023年1月23日修正)

    同理,08000000~09FFFFFF一共有32M(这里的M=1024*1024)个字节,如果我们在电脑或者手机上去查看GBA文件的大小,会发现这个文件大小恰好是32MB!没错,这32M个字节就是VBA模拟器加载进来的游戏本体。现在大家对一条原始代码的金手指修改的究竟是变量还是游戏代码本身应该会有一个非常直观的概念了。

    那图中的灰色区域是什么?这里作者为了说明方便,给出的是一个简易的GBA文件内存视图,其实灰色的区域也有各自的用途,只不过和金手指相关的内容不多,这里就不多做介绍了,第十期专栏会涉及到,我们到时候再说。

    另外,上面指出了是原始代码格式的金手指才有这个规律,如果是GS码(也被称为GameShark、V3格式码)呢?这是第九、十期专栏会介绍的内容。

总结一下

    只要是按照游戏正常流程能达到的游戏状态,使用金手指也能达到,并且不会被反作弊机制检测到。

    这里举个最典型的例子:孵蛋孵出个体值为6V的精灵。

    玩家们费尽千辛万苦,抓母本、抓6V百变怪、带上红线不变石遗传性格和个体的V、来到紫堇市左侧的饲养屋生蛋、在大街上骑自行车刷步数、等待生蛋、看生出来的是不是6V、是的话在队首放上火焰之躯特性的精灵减少孵蛋步数、孵出来精灵练到100级、刷好努力值和技能……这么一通忙活之后,总算是练好了一个极品精灵。有不少玩家们就是从这种固定的流程中,体会到了游戏的乐趣,一分耕耘一分收获啊!

    可是有了金手指之后,我们发现:既然一只极品的精灵是通过游戏正常流程可以达到的游戏状态,那么用金手指同样也能达到。上面提到过,描述一只精灵,用100个字节就足够了。使用金手指修改这100个字节,同样也能得到一个极品精灵,并且任何设计出来的反作弊机制都无法检测。

    这里讲一个不太恰当的故事:

老师在黑板上出了一道题:“1+2+3+……+10000=?”,这就是今天的家庭作业。

同学A回到家之后,拿出计算器,开始摁1+2+3……摁出来一万个数字和九千九百九十九个加号之后,最后一步按等号,出结果了!作业做出来了,好有成就感!

同学B回到家之后,在计算器上输入“10000*10001/2=”,也得到了一个结果。

第二天,同学A和同学B把结果交给老师,老师说他们算的结果都对。同学A跟同学B说:“昨天我做作业做得好辛苦啊,计算器都快摁坏了。”同学B说:“不就是算一下的事吗,有什么辛苦的?”同学A赶紧问同学B是怎么做的,得知真相后,同学A忍不住大吼一声:“你作弊!”

    这个故事还没结束:

同学C看到黑板上的题目后,陷入了沉思:一万个数相加,这个家庭作业也太没有体验了吧!这得算到什么时候去?于是同学C在大家下课之后,把黑板上的最后一个数10000,擦掉了后面两个“零”,题目变成了“1+2+3+……100”,然后高高兴兴回家做作业去了。

第二天,同学C把结果交给老师,老师说算的不对,同学C指着黑板说:“这不是写的让我们算1+2+3+……+100等于几吗?”老师说:“我昨天明明写的是加到10000,是哪个同学把题目给改了?是不是觉得老师的记性不好啊?”

    之所以说这个例子举的不太恰当,是因为有些事确实不能类比。使用金手指的利弊得失,还是请众位读者自行斟酌吧。

    到本期专栏为止,作者总算把第一期专栏提出的三个问题都回答了,也就算是回答了这个系列专栏题目中的问题:什么是金手指。五期专栏,内容相对完整,而且作者尽量以科普的写法来介绍这里面涉及的概念、原理等,尽量让没有任何编程基础的读者也能看懂。有什么问题的话,欢迎大家在讨论区提出!

    不过,专栏并没有到此结束,围绕着金手指还有很多有趣的事情可以发掘,读者们也看到了这期专栏留了不少坑(比如说金手指的GS码是怎么回事、哪些变量是面板值等等)。联想到究极绿宝石5中,游戏一开始需要选择难度模式,这里类比一下,如果说前五期专栏涉及的内容难度都是“助手模式”和“标准模式”的话,那么接下来的专栏内容难度,将是“挑战模式”,甚至是“大赦未检阅”——“Lunatic Mode”(疯狂模式)。感兴趣的读者可以继续等待更新,不过要是想要理解的话,还是建议大家要时不时翻一翻前五篇专栏的基础知识。

    再次感谢大家的支持!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有