Last active
May 21, 2025 03:07
-
-
Save garrettjoecox/fcad0e942fd12c484328f787b9db3f93 to your computer and use it in GitHub Desktop.
Dumb Sequence Replacement PoC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This was obtained by unzipping an MMRS file and copying the hex contents from the .seq file | |
// From the few I looked at, they all seem to start with 0xd3, 0x20, 0xd5, and end with 0xFF | |
unsigned char seq[] = { | |
0xd3, 0x20, 0xd5, 0x32, 0xd7, 0x0a, 0x93, 0x90, | |
0x00, 0x4d, 0x91, 0x00, 0x5a, 0x94, 0x00, 0x67, | |
0x97, 0x00, 0x77, 0x99, 0x00, 0x87, 0x9b, 0x00, | |
0x94, 0xdb, 0x58, 0xdd, 0x6b, 0xfd, 0x83, 0x78, | |
0xdd, 0x6a, 0xfd, 0x18, 0xdd, 0x69, 0xfd, 0x18, | |
0xdd, 0x67, 0xfd, 0x18, 0xdd, 0x66, 0xfd, 0x18, | |
0xdd, 0x64, 0xfd, 0x18, 0xdd, 0x61, 0xfd, 0x18, | |
0xdd, 0x5e, 0xfd, 0x48, 0xdd, 0x52, 0xfd, 0x18, | |
0xdd, 0x4d, 0xfd, 0x18, 0xdd, 0x48, 0xfd, 0x81, | |
0x38, 0xd6, 0x0a, 0x93, 0xff, 0xc4, 0x88, 0x00, | |
0xa4, 0xfc, 0x02, 0x86, 0xc1, 0x05, 0xfd, 0x85, | |
0xb8, 0xff, 0xc4, 0x88, 0x00, 0xe7, 0xfc, 0x02, | |
0x86, 0xc1, 0x00, 0xfd, 0x85, 0xb8, 0xff, 0xc4, | |
0x88, 0x01, 0x60, 0x89, 0x01, 0x8a, 0xfc, 0x02, | |
0x86, 0xc1, 0x0a, 0xfd, 0x85, 0xb8, 0xff, 0xc4, | |
0x88, 0x01, 0xba, 0x89, 0x01, 0xec, 0xfc, 0x02, | |
0x86, 0xc1, 0x0b, 0xfd, 0x85, 0xb8, 0xff, 0xc4, | |
0x88, 0x01, 0xfc, 0xfc, 0x02, 0x86, 0xc1, 0x7f, | |
0xfd, 0x85, 0xb8, 0xff, 0xc4, 0x88, 0x02, 0x30, | |
0x89, 0x02, 0x6c, 0xfc, 0x02, 0x86, 0xc1, 0x0c, | |
0xfd, 0x85, 0xb8, 0xff, 0xc2, 0x00, 0xc0, 0x81, | |
0x80, 0xfc, 0x02, 0x8d, 0x30, 0x48, 0x60, 0x03, | |
0xfc, 0x02, 0x8d, 0x30, 0x18, 0x60, 0x0a, 0x35, | |
0x60, 0x60, 0x02, 0xb0, 0x60, 0x02, 0x2c, 0x18, | |
0x50, 0x0a, 0xab, 0x50, 0x0a, 0x2c, 0x48, 0x50, | |
0x03, 0x25, 0x18, 0x50, 0x0a, 0xab, 0x50, 0x0a, | |
0xac, 0x50, 0x0a, 0xae, 0x50, 0x0a, 0xac, 0x50, | |
0x0a, 0x2e, 0x60, 0x50, 0x02, 0x33, 0x30, 0x50, | |
0x05, 0x35, 0x81, 0x38, 0x50, 0x14, 0xff, 0xc2, | |
0x00, 0x35, 0x18, 0x60, 0x0a, 0xb8, 0x60, 0x0a, | |
0x3c, 0x48, 0x60, 0x03, 0x35, 0x18, 0x60, 0x0a, | |
0xb8, 0x60, 0x0a, 0xbc, 0x60, 0x0a, 0xc2, 0x0c, | |
0x35, 0x60, 0x60, 0x02, 0x30, 0x81, 0xb0, 0x60, | |
0xe4, 0x18, 0x18, 0x50, 0x0a, 0x9d, 0x50, 0x0a, | |
0xfc, 0x02, 0x95, 0x1d, 0x18, 0x50, 0x0a, 0x99, | |
0x50, 0x0a, 0xfc, 0x02, 0x95, 0x1d, 0x18, 0x50, | |
0x0a, 0x98, 0x50, 0x0a, 0xa2, 0x50, 0x0a, 0xfc, | |
0x02, 0x95, 0x1b, 0x18, 0x50, 0x0a, 0xa2, 0x50, | |
0x0a, 0xfc, 0x02, 0x95, 0x20, 0x18, 0x50, 0x0a, | |
0x99, 0x50, 0x0a, 0x98, 0x50, 0x0a, 0x99, 0x50, | |
0x0a, 0x9b, 0x50, 0x0a, 0x9d, 0x50, 0x0a, 0x9f, | |
0x50, 0x0a, 0xa2, 0x50, 0x0a, 0xa4, 0x50, 0x0a, | |
0xa7, 0x50, 0x0a, 0xa9, 0x50, 0x0a, 0xae, 0x50, | |
0x0a, 0xb0, 0x50, 0x0a, 0xb5, 0x50, 0x0a, 0xff, | |
0xc2, 0x00, 0x2c, 0x30, 0x50, 0x85, 0xae, 0x50, | |
0x85, 0x2c, 0x60, 0x50, 0xc2, 0x35, 0x80, 0xc0, | |
0x50, 0x81, 0xf8, 0x02, 0x30, 0x60, 0x50, 0xc2, | |
0xf7, 0x35, 0x80, 0xc0, 0x50, 0x81, 0xb1, 0x50, | |
0x01, 0xb3, 0x50, 0x01, 0x35, 0x81, 0x38, 0x50, | |
0x14, 0xff, 0xc2, 0x00, 0x30, 0x60, 0x50, 0xc2, | |
0x30, 0x80, 0xc0, 0x50, 0xe1, 0x30, 0x60, 0x50, | |
0x82, 0x2c, 0x30, 0x50, 0x85, 0xae, 0x50, 0x85, | |
0x2c, 0x80, 0xc0, 0x50, 0xe1, 0x30, 0x30, 0x50, | |
0x05, 0xae, 0x50, 0x05, 0x2c, 0x80, 0xc0, 0x50, | |
0x01, 0xae, 0x50, 0x01, 0x2c, 0x81, 0x38, 0x50, | |
0x14, 0xff, 0xc2, 0x00, 0x1d, 0x30, 0x50, 0x85, | |
0xa2, 0x50, 0x85, 0x1d, 0x60, 0x50, 0xc2, 0xa9, | |
0x50, 0x02, 0xa4, 0x50, 0x82, 0x1d, 0x30, 0x50, | |
0x85, 0x9f, 0x50, 0x85, 0x1d, 0x60, 0x50, 0xc2, | |
0xa4, 0x50, 0x02, 0xa2, 0x50, 0x02, 0x19, 0x80, | |
0xc0, 0x50, 0x01, 0x9b, 0x50, 0x01, 0x19, 0x81, | |
0x38, 0x50, 0x14, 0xff, 0xc2, 0x00, 0xc0, 0x81, | |
0x80, 0x20, 0x60, 0x50, 0xc2, 0x60, 0x17, 0x50, | |
0xc0, 0x83, 0xc1, 0xff, 0xc2, 0x00, 0xf8, 0x02, | |
0x14, 0x60, 0x50, 0x82, 0x14, 0x18, 0x50, 0x0a, | |
0x94, 0x50, 0x0a, 0x14, 0x30, 0x50, 0x05, 0x14, | |
0x48, 0x50, 0x03, 0x14, 0x08, 0x50, 0x20, 0x94, | |
0x50, 0x20, 0x94, 0x50, 0x20, 0x14, 0x60, 0x50, | |
0xe2, 0xf7, 0xf8, 0x02, 0x14, 0x80, 0xc0, 0x50, | |
0x01, 0xf7, 0x14, 0x81, 0x38, 0x50, 0x63, 0xff, | |
0xc2, 0x00, 0x2c, 0x30, 0x60, 0x05, 0xfc, 0x02, | |
0x9d, 0xfc, 0x02, 0x8d, 0xfc, 0x02, 0x9d, 0x2e, | |
0x60, 0x60, 0x02, 0x2c, 0x30, 0x60, 0x05, 0xfc, | |
0x02, 0x9d, 0xfc, 0x02, 0x8d, 0xfc, 0x02, 0x9d, | |
0x2e, 0x30, 0x60, 0x05, 0xb0, 0x60, 0x05, 0xb1, | |
0x60, 0x05, 0x30, 0x18, 0x60, 0x0a, 0x2c, 0x78, | |
0x60, 0x35, 0x2e, 0x48, 0x60, 0x58, 0x2e, 0x81, | |
0xb0, 0x60, 0xc7, 0xff, 0xc2, 0x00, 0xc0, 0x82, | |
0xd0, 0x33, 0x78, 0x60, 0x9b, 0xb1, 0x60, 0x35, | |
0x33, 0x30, 0x60, 0x05, 0x31, 0x18, 0x60, 0x0a, | |
0x33, 0x81, 0xb0, 0x60, 0xc7, 0xff, 0xdf, 0x64, | |
0xdd, 0x40, 0xd4, 0x00, 0xff, 0x29, 0x18, 0x60, | |
0x0a, 0xac, 0x60, 0x0a, 0xff, 0x20, 0x18, 0x50, | |
0x0a, 0x9f, 0x50, 0x0a, 0xff, 0x2b, 0x30, 0x60, | |
0x05, 0xac, 0x60, 0x05, 0xff, | |
}; | |
static uintptr_t sDevAddr = 0; | |
static u8* sRamAddr = NULL; | |
static size_t sSize = 0; | |
static s32 sMedium = 0; | |
RECOMP_HOOK("AudioLoad_SyncDma") | |
void* on_AudioLoad_SyncDma(uintptr_t devAddr, u8* ramAddr, size_t size, s32 medium) { | |
recomp_printf("AudioLoad_SyncDma called: devAddr=%p, ramAddr=%p, size=%d, medium=%d\n", | |
(void*)devAddr, ramAddr, size, medium); | |
sDevAddr = devAddr; | |
sRamAddr = ramAddr; | |
sSize = size; | |
sMedium = medium; | |
} | |
RECOMP_HOOK_RETURN("AudioLoad_SyncDma") | |
void on_AudioLoad_SyncDma_Return() { | |
recomp_printf("AudioLoad_SyncDma_Return called: devAddr=%p, ramAddr=%p, size=%d, medium=%d\n", | |
(void*)sDevAddr, sRamAddr, sSize, sMedium); | |
// Replace file select sequence with custom seq above | |
if (sDevAddr == 0x62d80) { // File select sequence | |
Lib_MemSet(sRamAddr, 0, sSize); | |
Lib_MemCpy(sRamAddr, seq, sizeof(seq)); | |
} | |
// Replace dog bark with rupee fall SFX | |
if (sDevAddr == 0x46af0) { // Sequence_0 (SFX) | |
// These offsets are obtained from the tables mm-decomp/include/tables/sfx: CHAN_3D0D & CHAN_3D19 | |
u32 dogBarkSfx = 0x3D0D; | |
u32 rupeeFallSfx = 0x3D19; | |
Lib_MemCpy(sRamAddr + dogBarkSfx, sRamAddr + rupeeFallSfx, rupeeFallSfx - dogBarkSfx); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment