NDS 金手指制作:流星洛克人 2 无对战音乐代码

最近在打流星洛克人 2 的对战,然而对战音乐只有那一个,听久了也会觉得厌烦。因此,如果我们可以不让其在对战时播放音乐,我们就可以听我们想听的音乐了。
在 Discord 上,找到了一个似乎是“no music”的代码。

220B8CF6 00000000

然而,这个代码不能直接用于对战。原因有下:

  1. 这段代码仅用于美版,而日版与美版的地址不同,直接使用会出现问题;
  2. 在美版上测试发现,这段金手指只会使 boss 战无音乐,而不会使对战场景无音乐。

因此,需要我自行寻找适用于日版的代码。
查看美版内存,定位到上面的金手指所提及的地址 020B8CF6。注意到邻近有一个四字节数据 00082C84,于是在日版搜索这个值,找到了 020B38A0 这个地址。
美版金手指地址数据
因为这段金手指只会使 boss 战无声,所以我们合理推测 1C 为 boss 战的音乐 ID。尝试得出对战音乐 ID 为 25
正巧,这段地址下方正是一串频繁出现 25 的数据。可以推测,只需要将里面的 25 全部改为 00,就可以实现无音乐了。
于是,我编写了程序以输出金手指:

#include <iostream>
using namespace std;

int main(void)
{
    int addr = 0x220b3986;
    int count = 0;
    while (1)
    {
        cout << std::hex << addr << " 00000000" << "\n";
        addr += 0x14;
        count++;

        if (addr > 0x220b3fb2)
        {
            break;
        }
    }
    cout << std::hex << count;

	return 0;
}

运行结果经测试的确可用,但是又出现一个问题:金手指过长,导致直接将其复制进 melonDS 中会无法应用。为此,需要压缩金手指的长度。
不难发现,相邻的地址总是相差 0x14 字节。
查阅 资料 得知,AR Code 使用 Type C 执行循环。我们要执行 0x50 次循环,因此,我们有

C0000000 00000050

此外,我们需要定位循环开始的位置。事实上,只需有

220B3986 00000000

这里开头的 2 表明了这是 Type 2,代表往地址 20B3986 写入一个字节的数据。
由上文知地址相差 0x14 字节,因此我们可以使用 Type DC,它的作用是调整偏移量。设地址为 addr,若是 DC000000 00000004 ,则相当于 addr += 4 这段语句,即下一次写入的地址为 addr + 4。在这里则是

DC000000 00000014

金手指执行完后,我们需要终止它的运行。因此我们需要终止运行的相关代码,即

D2000000 00000000

我们还需要结束条件代码(Type D0):这个代码用于恢复之前的代码执行状态。事实上这段代码用于恢复 if 代码(Type 3, 4, 5, 6 和 Type 7, 8, 9, A)所设定的 false 的执行状态,在这里不需要使用,但习惯上我们还是加进这里。
这样,需要的金手指似乎为

C0000000 00000050
220B3986 00000000
DC000000 00000014
D2000000 00000000
D0000000 00000000

后续测试发现,上面的金手指只在非 WiFi 模式的对战可用,而在 WiFi 联网对战下无效。事实上,我们已经有了流洛 3 的对应的金手指:

220F9E66 00000000

查看该地址发现,只有当触发对战白屏过渡时,这个地址的值才会改变为对应的音乐 ID。这样,我们就有可能在流洛 2 中也找到类似的地址。
幸运的是,搜索内存后,我们一次就找到了这个地址。在这里插入图片描述
这样,我们只需把这个地址的值改为 00,就实现了对战无音乐。
综上所述,日版流星洛克人 2 的对战无音乐金手指为

22196B52 00000000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值