diff options
-rw-r--r-- | bugfixes.yaml | 13 | ||||
-rw-r--r-- | kamek_pal.x | 2 | ||||
-rw-r--r-- | src/music.S | 53 |
3 files changed, 67 insertions, 1 deletions
diff --git a/bugfixes.yaml b/bugfixes.yaml index 5923671..3f91729 100644 --- a/bugfixes.yaml +++ b/bugfixes.yaml @@ -1,6 +1,17 @@ ---
-source_files: [../src/randomcrap.S]
+source_files: [../src/randomcrap.S, ../src/music.S]
hooks:
+ - name: MusicHax1 + type: patch + addr_pal: 0x8019BA78 + data: '60000000 60000000' # disables limit + + - name: MusicHax2 + type: branch_insn + src_addr_pal: 0x8008E5E4 + branch_type: b + target_func: 'HaxMusic' + - name: FixCoinJump
type: patch
addr_ntsc: 0x809E75F0
diff --git a/kamek_pal.x b/kamek_pal.x index b21866a..2f05e6e 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -45,6 +45,8 @@ SECTIONS { CheckIfPlayingSound = 0x80196740; RelatedToPlayingSoundsAlongsideAnims = 0x80105350; + SoundRelatedClass = 0x8042A768; + ExitStage__Fiiii = 0x80102370; diff --git a/src/music.S b/src/music.S new file mode 100644 index 0000000..59c86a0 --- /dev/null +++ b/src/music.S @@ -0,0 +1,53 @@ +.text + +# An Epic Music Hack + +.extern SoundRelatedClass +.extern sprintf +.global HaxMusic + +HaxMusic: + cmpwi r3, 100 + bltlr + + stwu r1, -0x10(r1) + mflr r0 + stw r0, 0x14(r1) + stw r31, 0xC(r1) + stw r30, 0x8(r1) + + mr r31, r3 + + lis r3, SoundRelatedClass@h + ori r3, r3, SoundRelatedClass@l + lwz r3, 0(r3) + lwz r30, 0x5CC(r3) + addis r30, r30, 3 + + subi r3, r30, 0x6A84 + lis r4, RegularMusic@h + ori r4, r4, RegularMusic@l + mr r5, r31 + bl sprintf + + subi r3, r30, 0x6A0C + lis r4, FastMusic@h + ori r4, r4, FastMusic@l + mr r5, r31 + bl sprintf + + li r3, 1 + + lwz r0, 0x14(r1) + lwz r31, 0xC(r1) + lwz r30, 0x8(r1) + mtlr r0 + addi r1, r1, 0x10 + blr + + +.data +RegularMusic: .string "stream/theme%03d.brstm" +FastMusic: .string "stream/theme%03d_fast.brstm" + + |