解构神奇宝贝故障?

2024-03-12

(如果这是问这个问题的错误地方,我深表歉意。我认为这肯定与编程相关,但如果这属于其他网站,请告诉我)

我从小就玩神奇宝贝红和蓝,这些游戏非常有趣,但因存在许多可利用的故障而臭名昭著(例如,请参阅这个游戏的荒谬的速通 http://www.youtube.com/watch?v=cYHYL8JJsFo使用内存损坏将项目屏幕变成十六进制编辑器)。

最近,我发现了游戏中一个有趣的速通游戏,它使用了一个名为“ZZAZZ 故障”的故障来破坏重要的内存位置,并让玩家几乎立即赢得游戏。根据作者对速通的描述 http://tasvideos.org/2945S.html,ZZAZZ 故障的工作原理如下:

要开始训练师战斗,游戏需要加载大量数据,例如[...]如果失败他将承认的金钱。当它加载金钱时,事情就会变得非常糟糕。由于我无法理解的原因,金钱以完全不同的方式存储,游戏使用三个字节的数据结构,而不是将值转换为二进制,而是以“人类”表示形式存储。例如,$123456 将存储为 0x123456,而不是正确的转换 0x01E240。

[Trainer 表中的一些无效条目] 指向具有无效金钱数据的位置。当游戏尝试使用上述结构中的这些数据执行算术时,它会发疯并开始覆盖大部分 RAM。更具体地说,对于每个三个字节的块,其中两个将包含 0x9999(训练师可以给出的最大金额)。这种模式通过 RAM 重复多次。为了更好地看到这一点,我建议在面对 ZZAZZ 训练器后暂停模拟器上的视频,并将 VBA 的内存查看器设置为 0xD070。

这种分析是有道理的,但作为一名程序员,我忍不住想知道程序员到底是如何编写使这成为可能的代码的。如果输入不是有效的十六进制编码的十进制数,我能想到的编写将十六进制编码的十进制数转换为十进制数的函数的方法都不会开始用 0x9999 填充随机内存块。

我的问题是 - 没有专门设计算法以这种方式失败,是否存在从十六进制编码的十进制到十进制的转换的直接实现,当输入无效值时可能会导致这种内存损坏?

再次强调,如果这是题外话,我深表歉意。我的想法是,这个网站上的其他程序员可能也是玩这个游戏长大的,这听起来像是逆向工程中的一个有趣的练习,试图找出这样的故障是如何发生的。


老实说,我的猜测是,这只是某人在编写他们的第一个目标游戏时犯的一个愚蠢而令人讨厌的故障。 《口袋妖怪红/蓝》是该系列中的第一个,并且有很多其他故障,任天堂通常会排除批次测试,我想知道它是如何通过的。滚动屏幕移动问题是让我困扰的问题。无论如何,谁知道他们在想什么。也许这个区域是通过脚本写入的,因此存储的内容不同。也许位模式0x0101用于显示内存已释放,并且该代码意外地在奇怪的地方变得疯狂。我可以翻阅 Z80 代码并在该平台上重温我自己的游戏开发时间,但是呃。试图解密他们的想法需要太多的工作。

不过确实赚了不少钱……

Edit 1:

好吧,你已经赏金了。我花了更多的时间仔细回忆,为你找到了一个花絮。 GBC/DMG 有一个称为DAA。小数调整累加器 (A)。它的作用是将累加器中的值转换为BCD格式。您所看到的内存区域已经在BCD格式:http://en.wikipedia.org/wiki/Binary-coded_decimal http://en.wikipedia.org/wiki/Binary-coded_decimal

现在我可以告诉你,在我手工编写游戏 Z80 汇编程序的 4 年左右的时间里,我从来没有需要过这个操作码,只在我们制作的棒球游戏中见过它用于显示一些分数。虽然它是 1 周期算术指令,但我在正常编码中从未真正找到它的良好用途。唔。实际上我还保留着任天堂的 DMG 技术文档。想想看;)无论如何,除了它以时髦的方式与许多标志混淆之外,它也没有什么令人兴奋的地方。

我的猜测是该表被假定位于BCD格式。将其更改为该格式之外的内容会导致内部数学变得极其混乱 - 在不应该设置的情况下设置进位和零标志。这会导致从一列溢出到下一列,从而导致计算非常大的数字。如果不直接查看读取该区域的相关操作码,我不能肯定地说,但我猜测这里有一个包罗万象的检查,表明在完成后是否仍设置进位BCD数学,设置最大值而不是存储负值或越界值。那个或者那个DAA指令,当接收垃圾数据正在返回时0x99因为它有返回值,尽管我对此不太确定。

希望这可以帮助...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解构神奇宝贝故障? 的相关文章

随机推荐

  • Core Audio (iOS 5.1) Reverb2 属性不存在,错误代码 -10877

    我正在玩苹果的示例项目 LoadPresetDemo 我添加了混响音频单元AudioUnit kAudioUnitSubType Reverb2如图所示 这是唯一可用的 iOS 混响 在 CoreAudio 头文件 AudioUnitPar
  • Javascript DOM .querySelector() null 问题

    我正在用纯 JavaScript 编写代码 有很多场景我会使用querySelector 方法 我多次遇到问题 比如 对于以下代码 未捕获类型错误 无法读取 null 的属性 classList document querySelector
  • 使用 Docker compose 传递 Dockerfile 的参数

    我正在尝试在构建阶段使用参数化我的 dockerfiles 并在 Docker compose 中使用参数 例如 在 Docker compose 中 我定义了一项名为 bpp 的服务 如下所示 bpp build context dock
  • 如何在 Flutter 中检测另一个应用程序是否打开?

    已编辑 我想创建一个阻止使用社交媒体应用程序的应用程序 就像他们打开 Instagram 或其他东西一样 Flutter 应用程序就会知道 当我的 Flutter 应用程序打开时 如何检测另一个应用程序 例如 Instagram 或 Twi
  • 数据集可扩展吗?像 myspace 这样的网站会使用它们进行数据检索吗?

    数据集的可扩展性如何 团队成员希望使用数据集进行数据检索和操作 使用内置的数据完整性等来使用对象执行数据更新等 我们的系统预计将扩展到数百万用户 我读到的所有内容都是针对企业环境中的数据集的 我在这里错了还是什么 免责声明 这些是我根据个人
  • 使用 Objective-C 以编程方式释放系统内存

    所以 这就是我想做的 释放系统内存 非活动内存 以同样的方式purge命令确实如此 尽管是以编程方式 我已经尝试过这里的代码 其作者声称它有效 但它所做的只是导致 Mac OS X 冻结 void free up memory int c
  • Prolog - 回文函子

    我正在尝试写一个谓词palindrome 1在 Prolog 中 当且仅当其列表输入由回文列表组成时 这才是正确的 例如 palindrome 1 2 3 4 5 4 3 2 1 is true 有什么想法或解决方案吗 回文列表是一个向后读
  • AutoLayout,无法同时满足约束

    刚刚开始学习 iOS AutoLayout 界面构建器非常简单 但是当我尝试在代码上存档相同的内容时 self view addConstraints NSLayoutConstraint constraintsWithVisualForm
  • 防止 ASP.NET 对输出中的字符串进行编码

    当页面呈现时 如何阻止 ASP Net 对列表项中的锚标记进行编码 我有一个对象的集合 每个对象都有一个链接属性 我执行了 foreach 并尝试在 BulletedList 中输出链接 但 ASP 对所有链接进行了编码 任何想法 谢谢 这
  • RxJava-在 Observable 链中执行 peek() 或 void 操作?

    Java 8 lambda 流有一个peek 运算符允许您对每个项目执行 void 操作 这通常用于调试 但它也是一种欺骗和启动 void 操作而不映射到某些内容的好方法 RxJava 中有类似的东西吗 也许我没有遵循良好的实践或反应性思考
  • 如何在 Aptana Studio 3 中设置默认文件权限?

    每次我将文件上传到远程主机并尝试打开它时 我都会收到 内部服务器错误 消息 并且文件权限设置为 666 需要设置为 644 才能打开 如何将默认文件权限设置为 644 打开首选项对话框 Window gt Preferences 然后前往
  • Python Flask Heroku 无法导入模块

    我收到以下错误 ModuleNotFoundError No module named class1 结构 hello world src init main class1 Procfile The main1文件看起来像这样 from c
  • Objective_C 中 UIView 的背景颜色是如何处理的?

    我一直在玩一些苹果的示例代码 http developer apple com library ios samplecode TableViewSuite Introduction Intro html apple ref doc uid
  • jQuery Mobile - 无法将 pagebeforechange 绑定到页面 id?

    我只能将 pagebeforechange 绑定到整个 jquery mobile 文档 而不是单个页面 谁能解释为什么this http jsfiddle net kenw232 HYzYJ 不起作用 div data role page
  • 什么算作解析请求?

    由于条款的更改 Parse 现在限制了每秒的请求数量 这是一件好事 但是 Parse Push 和 Parse Analytics 算作请求吗 每当您通过 iOS Android JavaScript Windows Xamarin Uni
  • 在非 Metro 应用程序中使用自定义 Windows 运行时组件

    想象一个场景 您有一个复杂的 WinRT 代码框架 您希望从 C Metro 应用程序和 C 桌面应用程序访问该框架 有没有办法将 WinMD 包含在非 Metro 应用程序中 UPDATE 这仅适用于 Windows 8 Microsof
  • 在 C# 中将数据表转换为 JSON

    我想将记录从数据库获取到DataTable 然后转换DataTable转换为 JSON 对象 将 JSON 对象返回到我的 JavaScript 函数 I use this https stackoverflow com questions
  • phpMyAdmin + CentOS 6.0 - 禁止

    当我想访问我的 phpMyAdmin 时 我总是收到此消息 w3m localhost phpmyadmin Forbidden You don t have permission to access phpmyadmin on this
  • 从 angularjs 指令触发点击事件

    如何触发 li 元素的点击事件 并从 angularjs 指令指定其索引 我尝试使用 first 来触发第一个元素的点击 但它不起作用 谢谢你的帮助 这也许是您实现这一目标的另一种方法 将索引和项目传递给指令 并让指令在模板中设置 html
  • 解构神奇宝贝故障?

    如果这是问这个问题的错误地方 我深表歉意 我认为这肯定与编程相关 但如果这属于其他网站 请告诉我 我从小就玩神奇宝贝红和蓝 这些游戏非常有趣 但因存在许多可利用的故障而臭名昭著 例如 请参阅这个游戏的荒谬的速通 http www youtu