口袋妖怪绿宝石

您所在的位置:网站首页 怎么破解vba代码编辑器 口袋妖怪绿宝石

口袋妖怪绿宝石

#口袋妖怪绿宝石| 来源: 网络整理| 查看: 265

系列专栏前言:

    本系列专栏是上个系列专栏——究极绿宝石5-金手指原理介绍(下面简称为《金手指原理介绍》)——的后续,旨在利用若干常用的分析工具,对口袋妖怪绿宝石这款游戏进行数据提取与代码分析。虽然作者是从寻找金手指的角度来切入这一话题,但在探索的过程中却发现了许多远远超出金手指范畴的知识。为此特开一系列专栏,记录探索过程中的经验与心得。

    国内有许多基于口袋妖怪绿宝石的改版作品,其中不乏优秀之作,至今还可以在百度贴吧等平台看到它们活跃的身影。出于对各个制作组的尊重,本系列专栏只分析口袋妖怪绿宝石的原版游戏,而不是哪一个具体的改版游戏。分析原版游戏还有一个好处,就是网络上对于原版游戏的分析已经达到了一个相当成熟的地步,分析起来有很多现成的资源。

    本专栏希望通过对绿宝石游戏的分析,对其中涉及的各种计算机知识(如汇编语言、正则表达式、静态分析)做一个简要介绍,知识的难度和深度会远远超过《金手指原理介绍》的内容。掌握这些知识后,作者在绿宝石游戏中找到了许多“高级”的金手指,而这些“高级”的金手指也仅仅是学习过程中的一些副产品而已。

    感兴趣的读者不妨先从《金手指原理介绍》这一系列的专栏入手,对绿宝石这款游戏和一些基本的计算机知识有一个大致的了解。欢迎读者们对专栏的内容提出意见和建议,这对改善专栏的内容质量很有帮助!

说在前面:

    许多编程语言在给一系列对象编号时,习惯从0开始,本期专栏为第0期专栏,正是遵循了这一惯例。这一期主要介绍分析绿宝石过程中可能用到的各种资源和工具,“工欲善其事,必先利其器”。

口袋妖怪绿宝石 游戏本体与模拟器

    先来引用一段百度百科上对《口袋妖怪》的介绍:

《宝可梦》(曾译名《精灵宝可梦》)另有常见非官方译名:《口袋妖怪》(中国大陆曾译名)、《宠物小精灵》(中国香港曾译名)、《神奇宝贝》(中国台湾曾译名)。是由Game Freak和Creatures株式会社开发,任天堂发行的系列游戏,是宝可梦媒体作品的主要部分。

——《百度百科》

    最初的《口袋妖怪》系列游戏是在任天堂公司开发的游戏机(也被称作掌机)上运行的。到了绿宝石问世的时候,《口袋妖怪》已经来到了第三世代,与此相对应的游戏机也发展到了第二代,被称作GBA(Game Boy Advance)。游戏以卡带的形式插入到游戏机的卡槽中进行游玩。

    GBA游戏机诞生于21世纪初,二十多年过去了,这款游戏机已成为游戏机历史上的古董。对于使用电脑或者手机的玩家来说,现在能玩到早期的口袋妖怪系列游戏需要归功于模拟器。同一种游戏机往往会有多个模拟器,比如GBA游戏机对应的模拟器就有VBA、myBoy、mGBA等等。

    模拟器在电脑或手机上模拟了游戏机的运行环境,此时游戏本体也就不再是原来的卡带,而是电脑或者手机上存储的游戏文件。这类游戏文件的常用名称是ROM(Read-Only Memory,只读存储器),这个名称会贯穿整个系列专栏的始终。所谓的口袋妖怪绿宝石系列改版,就是对ROM这个游戏文件进行修改。

    由于许多分析工具需要在电脑上才能使用,因此专栏推荐使用的模拟器是VBA(Visual Boy Advance),而不是myBoy这种运行在手机平台上的模拟器。VBA模拟器是GBA游戏机对应的一种模拟器,最新的版本是1.8.0 Beta3。

    游戏本体文件是一个大小为16MB的ROM文件,全名是Pokemon - Emerald Version (U)。后面那个(U)表示这是它是发行在北美洲的美版绿宝石,游戏语言是英文。

    资源的链接会在专栏最后给出。

十六进制编辑器

    游戏ROM文件是一个二进制文件,本质上就是一串0和1,通常被称作0/1序列。查看或者编辑这种类型的文件,使用十六进制编辑器(Hex Editor)是很方便的。十六进制编辑器有许多版本,这里专栏推荐一个叫做HxD的编辑器,功能简洁实用。

HxD

    下载地址位于:https://mh-nexus.de/downloads/HxDSetup.zip

游戏源代码

    对于原版绿宝石的分析,前人的工作已经非常成熟了。一个以C语言编写的口袋妖怪绿宝石项目可以在这个网址找到:

    https://github.com/pret/pokeemerald

    这个项目可以看做是游戏ROM文件的源代码。如果用更专业一点的说法,这个项目是由游戏ROM反编译得到的结果。网址内有一个绿色的Code按钮,点击后下拉列表里会有一个Download ZIP选项,点击后就可以下载所有的源代码文件,如下图所示:

源代码

    在这个项目中,还有一个重要的资源被称为符号表。网址位于:

    https://raw.githubusercontent.com/pret/pokeemerald/symbols/pokeemerald.sym

    列表中给出的是源代码中的变量名、函数名对应到ROM文件中的地址。从某种程度上来说,似乎只要有了这个符号表,就可以找到所有的金手指,但实际上符号表只是提供了一个便捷的查找功能,在不了解游戏逻辑的情况下许多金手指是不能起到作用的。

    如果有的读者无法访问到这两个网址,可以通过专栏最后给出的资源链接下载。

代码编辑器

   为了方便地浏览、查找源代码中的各种变量或者函数,一个功能强大的代码编辑器是必不可少的。这里专栏推荐VS Code,一个相对轻量级的代码编辑器,安装各类插件十分方便。在配置好对应的编译器、链接器等工具后甚至可以直接运行源代码来生成游戏ROM文件(这应该是一些改版制作组的改版方法),当然在本系列专栏中用不到这么复杂的功能。

    图为使用VS Code打开源代码文件中的main.c文件,里面的 函数就是整个绿宝石游戏的主函数,会在后面的专栏中介绍到。

VS Code界面

    官方网站:https://code.visualstudio.com/

Excel

    在对提取出来的游戏数据进行进一步分析时,Excel表格是个很好用的工具。其实它就是一个数据库管理系统,方便保存和处理在ROM文件中提取出的各种数据。

    作者之前曾经处理出来一个精灵分布表,可以作为这个工具的一个使用示例:

某绿宝石改版游戏,精灵分布详情的局部表格汇编指令和机器码的在线转换

    一个好用的汇编指令和机器码相互转换的网址:

    https://armconverter.com

    ROM文件中的代码部分都是机器码,也就是0/1序列,只有转换成汇编指令才方便查看。VBA模拟器中也有类似的功能,但是VBA模拟器只能查看ROM中已有的代码,而这个在线网址转换起来更加灵活方便。

    这个网址可以简称为ARM to HEX,当然反过来的HEX to ARM也是可以的,之后的专栏也会用这个简称来指代这种功能。

No$GBA Debugger

    在上个系列专栏的第十期(究极绿宝石5.3——科普向,什么是金手指(十))介绍过这个工具,它的断点功能可以根据游戏内容迅速定位到对应的代码处。与此同时,No&GBA也提供了反汇编的功能,可以将0/1序列转换为汇编指令并导出成文件,它也是GBA好用的模拟器之一。

No$GBA界面反汇编工具

    这一部分不是必须的,主要是因为最好用的反汇编工具——IDA Pro——价格昂贵,一般来说只有公司、学校这种机构会购买,作为个人而言,如果只是像专栏这样爱好式的探索实在是没有必要。VBA模拟器中也有类似的功能(这句话似曾相识?推荐VBA模拟器不是没有原因的),只不过不太好用。在分析复杂函数的时候,IDA Pro可以提供一个更“好看”的视图方便理解。

资源链接

    这里给一个百度网盘链接,包含原版绿宝石ROM、VBA模拟器、游戏源代码和符号表。

    https://pan.baidu.com/s/1Opf22407MonxyaRwDQE0BQ

    至于提取码,因为专栏是和金手指相关的,这里给读者们一个简单的小题目。有的金手指是“背包获得999个大师球”类型的,这类“999”金手指需要在金手指代码中填入对应的数字。因此提取码就是:十进制数字999的十六进制形式,补零补足4位,字母大写。

万事俱备游戏开场介绍

    下期专栏,关于绿宝石ROM的分析就正式开始了。上面提到的工具或早或晚都会在专栏中出现。其实,有了源代码之后,分析ROM的难度就大大降低了,相当于分析的过程总有一个“标准答案”作为参考。但是当遇到没有“标准答案”的ROM时,本专栏给出的一些分析方法应该是能够起到提示作用的。

    谢谢众位读者的支持,欢迎大家对专栏的内容提出意见和建议!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3