作者Append (鸦片)
看板Rockman
标题[心得] RockmanX 1.0 公路诅咒的机制与回避
时间Wed May 12 07:45:31 2021
## 前言:「公路的诅咒」
RockmanX的最初版卡带有一个奇妙的防盗机制,(这应该是防盗机制,有许多记载)
「豆炮打到没有办法造成伤害而反弹的东西,
玩家就会被拔装送回序关高速公路。」
如果对这点没有印象,首先我们可以看看影片:(注意0:06的位置)
https://youtu.be/6gWaFwSZ08Q
七年前我在这个版上发了一篇这个现象的研究。
#1Ke19UXX (Rockman) [心得] RockmanX初版回溯Bug研究+咒杀八大
那时有了一些模糊的的研究结论,其中最重要的是:
「玩一玩会发现有时候大补落地就会立刻消失,这时候就会发上述bug」
「这可以让我们秒杀boss」(!)
「只要不拿脚就不会被送回公路,只会被踢出关卡」(!!)
但其实我对那些结论其实一直很不满意:那并不是一种机制的描述,我没办
法从中预先知道我这次离开关卡会不会回到公路,因此不太容易在流程规划把这
个机制列入考量。七年过去,机缘巧合地重新面对了这个问题,在几位朋友的帮
助下终於厘清了这个防盗机制发生的过程,控制他发生与否的条件,以及为什麽
不同模拟器会有不同结果。
-------------
## 诅咒的机制
首先要先介绍ROM版本。开头这个影片中,玩家是用ZSNES模拟器玩美版的Rom
,但其实日版美版的初版Rom都有这现象,他们分别会被取以下名字:
Mega Man X (U) (V1.0) [!]
Rockman X (J) (V1.0) [!]
(U)和(J)分别表示美板与日板,V1.0表示初版,而後面的[!]表示这是验证过的正确
ROM。根据超任模拟器的大神 byuu (or 他後来改名叫 near) 的描述,这现象当初
在日版的实机卡带上有发生,而 Capcom 立刻做了临时的物理修正──追加了一条
跳线,并且很快的又重新释出了完全修正的版本 V1.1。至於当初到底发生了什麽问
题──这完全值得另外追加一篇介绍,如果我之後有看懂的话,下一篇我们就来讲
这个。
为了方便在画面上标示记忆体中的数值,本文以 Bizhawk 2.4 模拟器为例,选
择使用Snes9x核心。本段落所列出的记忆体位址以此为基准,其他模拟环境需要另
外换算。首先要先介绍两格关键的记忆体。
(1) 「爆炸计数器」:位址"0x001F9D"。是这个防盗机制的核心。
https://i.imgur.com/B2AlXUJ.png
https://i.imgur.com/5nBc1tv.png
https://i.imgur.com/XqFgaZ9.png
https://i.imgur.com/FoFtel1.png
- 是一个有号位元组(Signed Byte)
- 可以装的值的范围是-128~+127,
- 游戏开始的时候这个值是0,
每打倒一个敌人发生一次爆炸都会加一。
- 有一些比较大型的敌人可能会爆炸不只一次。
- 中头目多半是16次,RT-55J是30次,Boss大多是64次。
- 超过127之後会溢位(Overflow)回-128。
- 当他是负值的时候,会发生一些奇怪的现象,
姑且让我们将其称为「诅咒状态」。
- 诅咒状态中,补血落地後只能存在6桢。
- 很容易触发,通常透过这个现象来检查诅咒状态的发动与否。
- 但也因为这样,在诅咒状态中很难把E罐补满。
- 诅咒状态中,如果使用豆炮打到无法造成伤害而发生反弹的敌人,则
会强制离开关卡。这是大多数人对这个机制的第一印象,叮的一声之
後就回公路了。
- 如果是还没取得武器的八大关卡,会进入Weapon Get的结算
- 如果在演示动画中看到变色的X传送下来示范武器效果的画面
,系统就会承认你已经拿到这个特殊武器。
- 在选关画面中,boss的生存与否,其实就是检查你拿到几个
武器;也就是说,当你拿到特殊武器的瞬间,boss就已经死
了。
- 换句话说,我们可以故意在关卡中触发豆炮反弹,看到变色
的X,然後Boss就会被诅咒身亡。
- 如果是其他关卡,或已经有这个武器了,则直接进入密码画面。
- 因此老西城内的 Boss 不能用这个方式跳过。
- 诅咒状态中在矿车上无法起跳。
- 这不太重要,但要小心你可能会被矿车拖下去无底洞。
- 诅咒状态中冲刺豆炮会打开「序关旗标」,
之後用任何方式离开关卡後会回公路
- 序关旗标会在下一小节更详细的介绍
(2) 「序关旗标」:位址"0x001F9B"
- 是一个位元组。有没有正负号不太重要,他似乎只有几种少数的值。
- 在游戏开始的时候是0
- 序关通过的瞬间会变成4
- 读档的时候可能有不同的值,但总之只要序关通过了就不会是0
- 游戏在离开关卡之後,
会依据这个数值决定要把你送去选关画面还是序关公路。
- 以序关来说,如果玩家把三条命死光,会看到密码画面;
然後因为这时候序关旗标是0,系统会把玩家丢回公路的开头
- 但如果玩家通过序关,仍然会看到密码画面;
这时候序关旗标是4,因此系统会把玩家丢去选关画面。
- 在前一小节中有提到,在诅咒状态中使用冲刺豆炮会打开序关旗标
- 上面这句话就是「诅咒状态中冲刺豆炮会把这个数值改成0」。
- 目前没有在关卡中把这个值改成不是0的方法,
所以没有办法取消效果。
- 反过来说,只要确保禁止使用冲刺豆炮,这个数值就不会被改成0,
玩家就不会被送回公路了。
## 应用方式
基本上就是在关卡中找到适合叮的东西,然後叮下去;但因为触发诅咒状态有
爆炸次数的限制,所以一但开始叮之後就要减少杀敌数,避免诅咒状态被取消掉。
原则上会先打企鹅关拿脚,但是因为冲刺豆炮很危险,所以记得「不要冲动,我是
说不要冲豆。」有需要的时候尽量用冰特武取代豆炮。
(1) 咒杀八大快速通关
姑且拿写这篇文章之前打的那一轮当范例,但下面的流程有稍微换个顺序,让
变色龙隐形多发挥一些功用。
https://youtu.be/k-c1Q_OtkWY
0. 序关通过顺路清怪大概会有90次左右的爆炸。
1. 企鹅:可以叮的地方是後面的雪屋。
- 拿到脚部装备之後可以放心冲刺,但还是要避免冲刺发炮。
- 原则上如果沿路有清蝙蝠,到冰屋附近应该已经发动诅咒状态了。
- 如果还没,就打几只冰屋跑出来的蜻蜓
2. 锹形虫:开场马上有一只盾兵可以叮。
3. 变色龙:用剪刀打RT55J拿身体装备,
然後下方通道的落石机器人变身完成之前可以叮。
- 有需要的话也是可以用冰特武打个几只路上的怪,但尽量节制一点。
4. 金刚:开场立刻换血拿E罐,
然後上方的电球枪兵的飞弹可以叮,建议小跳射。
5. 铁鹰:开场上去拿爱心,E罐,头部装备,
然後往上爬一点有个小矮兵,踢墙跳射。
- 如果不想拿头也可以不拿,不太重要,就是帅
https://i.imgur.com/NoANoZn.png
6. 大象:前面有拿头的话这里可以拿手部,
然後用冰车垫脚上去拿E,回头底下拿爱心
https://i.imgur.com/EY7yDaB.png
7. 犰狳:用冲刺的闯过前半段,变色龙集气拿E,
然後追上压路机背後站好,这时压路机应该会往下掉一层,
原地豆炮连打可以打中压路机往上伸的前轮。
- 万一没追上也不用紧张,更前面一点点还有一阶
https://i.imgur.com/c07sdkQ.png
8. 章鱼:用变色龙集气躲掉关卡,两只鲸鱼中头目都用变色龙针刺清掉,
後面轰炸河底的船的炸弹可以叮。
9. 进城:还是要非常小心避免冲刺豆炮。
沿路只有RT55J和两只鲸鱼是爆炸次数较多的,加起来大约七十次;如果其他尽
量换血,原则上应该不会凑到128次爆炸,也就是说可以在一轮诅咒状态之内咒杀完
八大头目。对自己有自信的话,E罐可以少拿一点;原则上就是大象E最远,其他都
满好拿的。头部手部装备也可以不拿,有身体总是可以换血的,不见得需要倚赖变
色龙集气。
(2) 波动拳
基本上就是上面的流程跑一遍然後每关进去补道具,拿到就EXIT跳出。波动拳
本身容易夹带豆炮,所以对有无敌时间的boss(对我就是在说那只万恶的蜘蛛)来说
是满危险的。
## 模拟器的差异
前文中有提到,ZSNES 1.51 可以触发这个现象,但 Snes9x 1.53 不能。我自
己有满长的时间都是用SNESGT在玩这个版本,因为ZSNES他的E罐只会补一半。但藉
着这个机会,刚好来检查一些常用的模拟器,各自对这个防盗机制的相性如何。
模拟器 结果 版本
ZSNES 可以 1.51
SNESGT 可以
Snes9x 不可 1.56.2之前版本,至少到1.40都不可
可以 1.57之後版本,为什麽阿XD
Bizhawk/Snes9x Core 可以 2.0之後版本
很奇妙的2.0~2.6全部都可以,
里面的Snes9x核心到底是什麽版本?!
下面一串 byuu 开发的模拟器当然是不会触发的── byuu 有故意把这修掉。
bsnes
higan
byuu
Bizhawk/bsnes Core
除此之外
Bizhawk/Faust Core 不可
迷你超任的Retroarch 不可
迷你超任自带Canoe 可以
Wii Virtual Console引擎 可以(!!)
SD2SNES 呜呜我没有,但看起来不行 ...
有看过 Speedrunner 之前在研究 1.0(J) 限定的 bug
他们使用了SD2SNES,但是并没有触发
不过我自己实在没机会碰到,还是满想知道准确的情况
值得注意的是,那些被我标上「不可」的,他们之所以不能触发,主要是他们
的爆炸计数器那格的数字不会随着爆炸上升;相对的,他们的行为是如果有一个正
值,这会随着爆炸次数不断下降,到零就停止。也就是说,如果能够修改记忆体,
直接把爆炸计数器改成负值,立刻冲刺豆炮,或是拿豆炮反弹的话──该发生的诅
咒都会发生。如果是用Snes9x,请注意他的记忆体位址算法和Bizhawk不同,所以记
忆体位址要改成7E1F9D。
## 练习方式:Bizhawk / Snes9x
上面的截图中有显示当前爆炸计数器与序关旗标两格记忆体的数值,这其实是
一个简单的小型Lua脚本。总之先上连结
https://pastebin.com/aSQF5Krs
如果有想要拿来练习套路,直接把上面这个lua脚本拿去用 Bizhawk 的 Lua Console
载入就可以了。
https://i.imgur.com/mGZHtuR.png
当然,如果你想用snes9x 1.60来进行练习,也可以用阳春一点的方式:
Search Cheat 有个 RAM Watch 的功能,可以直接用 Load Watches 直接读取想要监
控的记忆体数值。总之还是先上连结
https://pastebin.com/Kpw4nTdU
直接把连结中的文字存档,然後用 Load Watches 读取这个文字档就可以了。
https://i.imgur.com/hczgi6d.png
## 致谢
在此感谢波纹(ProwainK)与阿痕(ds83171)的协力研究。事实上最关键的条件
「冲刺豆弹」是由波纹在2019年告诉我的:
「只要用冲刺豆弹击中敌人 / 物件,就会更容易回到公路的样子」
虽然这个叙述不够准确,但冲刺豆炮是几年来我从来没有注意到的切入点;前
几天阿痕以这句话为出发点做了几次尝试,发现这能够完全避免被送回公路,於是
他练习了几轮之後,顺利的在33分钟完成一轮游戏。有了阿痕大量测试的样本,我
们非常相信这个切入点很可能是对的,於是才有了这整次研究的产生。
後来经过更多的搜寻,有看到更多文章与影片多少都有提到这件事情,但实在
是没看到准确的触发控制。但如果还有机会,下次我们应该会来弄清楚一些其它人
提到的,这个防盗机制实际上做了什麽,大家都遇到了什麽效果。
## 下集预告: The Cutting Room Floor 与 near.sh 的相关记载
我目前找到最接近这个现象的记载是在 The Cutting Room Floor:
https://tcrf.net/Mega_Man_X#Copy_Protection
他在防盗机制的小节之内,写了一些系统判定你玩的是盗版的时候会触发的一
些有趣现象,例如会失去所有的装备、锁住你的集气炮、传送回关卡开头、吃到1up
回序关、在128次爆炸之後冲刺豆炮让你需要回到关卡开头(!!!)...等等。欸,其实
这个他已经写出来了嘛。只是光是这样写我当初真没看懂我们遇到的到底是其中的
哪些。他同时也提到了 byuu 写的段落──Capcom如何物理修正了1.0J的卡带。详
细的部分我们下回再来──如果我真的能够看懂那个电路图的话 ...
## 给按End的人
- 当年洛克人X1的初版卡带的防盗设计,会让玩家被传送回公路。
- 这个版本的ROM可以让玩家在八大关卡开头秒杀BOSS。
- 我们最近研究出了刻意控制让自己不会被传回序关的方式,拿来帮助通关。
- 对於七年前的自己,只能说,年轻人就是年轻人,太冲豆了。
--
███◣ ◢██◣ ◢██◣ █ ◢█ ◣ ◢ ◢██◣ ◣ █
█ ██ █ ██ █ ██ █◢█◤ █◣◢█ █ ██ █◣ █
█ ██ █ ██ █ ██◤ ████ █ ██ ██◣█ @ ptt.cc
███◤ █ ██ █ ██◣ █◥◤█ ████ ████
█◥█◣ █ ██ █ ██ █◥█◣ █ █ █ ██ █◥██ 鸦片(Append)
█ ◥█ ◥██◤ ◥██◤ █ ◥█ █ █ █ ██ █ ◥█twitch.tv/append
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.9.155 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Rockman/M.1620776735.A.9EC.html
※ Append:转录至看板 C_Chat 05/12 07:46
1F:推 Valter: 推 不过看下来反而不懂干嘛称防盗 正版正常玩都可能出事 05/12 07:59
2F:→ Append: 这就是为什麽需要多开一篇... 05/12 08:01
3F:→ Append: 那个防盗机制的原理还是满有趣的,值得独立一篇 05/12 08:13
4F:推 ainamk: 比较想要先看这怎麽防盗啊XD 05/12 08:51
5F:→ Append: 嗯...那我开个hackmd来写我目前看懂的好了 05/12 09:05
6F:→ Append: 总之基本原理是想要检查SRAM X1是没有SRAM的 05/12 09:07
7F:→ Append: 但很多磁碟机为了应付存档功能还是有SRAM 05/12 09:08
8F:推 RuinAngel: 记得当年玩磁碟机的时後就没事会回公路很烦,但没有印 05/12 09:08
9F:→ RuinAngel: 像碰过打一半被送回去的都是关卡结束或离开之後出现在 05/12 09:08
10F:→ RuinAngel: 公路就是了@@? 05/12 09:08
11F:→ Append: 所以如果他发现系统有SRAM就会开始妨碍玩家正常游玩 05/12 09:08
12F:→ Append: 打一半被送回去通常是豆炮反弹,所以如果你不太常使用豆炮 05/12 09:11
13F:→ Append: 例如特殊武器用的多,或是很努力地都先集气就不太会遇到 05/12 09:11
14F:推 RuinAngel: 还好我不是正版软体的受害者,是盗版软体的受害者(?) 05/12 09:14
15F:→ Append: 那现在你可以成为盗版软体的既得利益者了! 05/12 09:22
16F:推 h908492: 刚刚打开卡带发现有跳线,所以跳线焊起来也可以用诅咒吗XD 05/12 09:41
17F:→ Append: 别。很可能不是只有1.0有跳线。 05/12 09:43
18F:→ h908492: 怕...立刻锁回去 05/12 09:45
19F:→ Append: 这样说好了,我有去找了很多拍卖网站上的X1卡带,很偶尔有 05/12 09:48
20F:→ Append: 看到他们拍电路板,更偶尔看有拍到背面跳线。从这些照片中 05/12 09:48
21F:→ Append: 有看到两种跳线接法,我没把握哪个是1.0。但总之我去订了 05/12 09:48
22F:→ Append: 一张和byuu拍的照片一样的,我想那总应该要是对的。等送来 05/12 09:48
23F:→ Append: 我再找机会去借实机SFC来研究细节。 05/12 09:48
24F:→ Append: 安全的辨认1.0和1.1的方式是用冰车打boss,会碎掉的是1.1 05/12 09:50
25F:→ Append: ,会成型滑出去的是1.0。 05/12 09:50
26F:推 randyko: 推,诅咒是发现盗版才触发吗?signed byte随便都溢位吧 05/12 11:02
27F:→ Append: 他会做一些跟硬体有关的检查,如果发现答案跟他预期不同, 05/12 11:06
28F:→ Append: 就会触发诅咒。很不巧的是开发版的硬体和制品版也不同.... 05/12 11:07
29F:→ Append: 不确定Capcom什麽时候发现这点,但最後他追加了一条跳线 05/12 11:08
30F:→ Append: 强迫更改制品版的记忆体映射,原则上这样应该就不会出问题 05/12 11:09
31F:→ Append: 後来他们有推出了1.1,检查的方式跟1.0不太一样 05/12 11:10
32F:→ Append: 没有爆炸计数器这种东西了,真的去硬搜记忆体不会找到和 05/12 11:10
33F:→ Append: 爆炸相关的记忆体格子 05/12 11:10
34F:→ Append: 但...我不太确定他们有没有继续用跳线这个技巧,看起来很 05/12 11:11
35F:→ Append: 容易办到,说不定他们根本不想找其他方法就沿用了XD 05/12 11:11
36F:→ Append: 我觉得我之所以现在能在网拍上看到两种跳线可能是这样来的 05/12 11:12
37F:推 randyko: 所以有先确认是否为正版的机制在,不过蛮想知道当初拿到 05/12 11:20
38F:→ randyko: 没跳线版一直玩序关能不能换货可能工厂已经都跳线完了, 05/12 11:20
39F:→ randyko: 发现直接升级软体成1.1就没问题了,跳线就不拿掉了 05/12 11:20
40F:→ Append: ROM没办法升级软体阿。 05/12 11:30
41F:→ randyko: 在工厂应该可以更新ROM内的软体吧? 05/12 11:49
42F:→ Append: 不能,ROM就是"Read-Only Memory",硬体设计只能读不能写 05/12 12:14
43F:→ Append: "升级软体"的唯一手段就是"拆晶片直接装新的" 05/12 12:15
44F:→ Append: 那样就不是更新软体了,而是直接换一片新的 05/12 12:15
45F:→ randyko: 了解,感谢解说 05/12 12:22
46F:推 dv8508: 鸦片大太猛了!!!! 05/12 13:56
47F:推 superrockman: 这个超强 都过了快20年了还能挖出来XD 05/12 15:16
48F:推 cola540112: 先推 我尽力看了一半了我还是看不懂XD 05/12 16:53
49F:推 h1236660: 真有趣 05/12 17:21
50F:推 snk2001: 这个我有印象 小时候玩的是超任磁碟片的X 我有发现每次 05/12 17:26
51F:→ snk2001: 黄豆炮打到会反弹的东西就会通关然後被送回序关 05/12 17:27
52F:→ snk2001: 结果都一直拿不到脚部零件 无言 05/12 17:27
53F:推 loreck: 朝圣 05/12 19:32
※ 编辑: Append (220.133.9.155 台湾), 05/13/2021 10:41:04
54F:推 chjimmy: 太猛了,以前只觉得很奇怪,没想到鸦片居然解出触发机制 05/13 21:21
55F:→ chjimmy: 对了,请问溢位到-128时再爆炸数值还会有变化吗? 05/13 21:29
56F:推 ainamk: +1变成-127吧 05/13 22:33
57F:→ Append: 就继续+1,所以再爆128次之後可以解除诅咒... 05/14 00:52
58F:推 ainamk: 但是诅咒状态下要凑到128次还不能叮 好像 有点难? 05/14 08:55
59F:→ Append: 换特武阿,特武不怕叮 05/14 11:19
60F:→ Append: 本作取得特武异常容易,八大全部咒杀掉身上武器很够用 05/14 11:19
61F:推 superrockman: 问题 黄豆叮到会触发诅咒 那特武呢....? 05/14 18:04
62F:推 ainamk: 楼上你先好好看完文章吧? 05/14 19:08
63F:→ Append: 特武是绝对安全的,但诅咒状态不是由黄豆触发的。诅咒状态 05/14 23:27
64F:→ Append: 由128次敌人爆炸触发。黄豆反弹会在诅咒状态下触发离开关 05/14 23:28
65F:→ Append: 卡,除此之外冲刺豆炮发射会开启序关旗标。 05/14 23:28
66F:推 sifone7251: 小时候有印象 没想到真有人去测试机制 受我一拜 05/17 16:01
67F:推 clayerlee: 这篇超有趣,大推实验精神 05/19 15:20
68F:推 luken: 想起小时候跟同学说我用八大武器打序关,每个都说我唬烂 05/21 23:18
69F:→ mattc123456c: 楼上,有禁断码可以在1.1版体验 05/22 21:26