[Tutorial] How to make Speed Shoes play music in Sonic 1

Mildanner

Newcomer
In the original game, the developers have made something in mind to make Sonic speed higher. And decided to make the flag to accelerate the music, when the speed shoes is over. It also slow down the music, with no Speed Shoes jingle.

In this guide, you will go simply on the _incobj/01 Sonic.asm (In older disassemblies, it was part of Sonic Display.asm) and find these lines
Code:
        move.w    #bgm_Slowdown,d0            ; resume music...
        jmp    (QueueSound1).l                ; ...at normal speed
Replace it with this (Code taken from invincibility)
Code:
        moveq    #0,d0                    ; clear d0
        move.b    (v_zone).w,d0                ; get current zone ID
        cmpi.w    #id_LZ_act4,(v_zone_act).w        ; check if level is SBZ3 (LZ4)
        bne.s    .music_speedshoes                    ; if not, branch
        moveq    #5,d0                    ; play SBZ music instead of LZ

; Obj01_PlayMusic:
.music_speedshoes:
        lea    (MusicList2).l,a1            ; load music list for post-speed shoes
        move.b    (a1,d0.w),d0                ; get entry for current zone
        jsr    (QueueSound1).l                ; resume normal level music
Also, go to the 26, 2E Monitors and Power-Ups.asm file (For older disassemblies, this was still called 2E Monitor Content Power-Up.asm but in current versions. This was merged with Monitors.)

Go to the label Pow_ChkShoes and find this line
Code:
        move.w    #bgm_Speedup,d0            ; set music speed-up command
        jmp    (QueueSound1).l            ; play it
Simply replace the bgm_Speedup music with any music you put in Constants.asm (Example: bgm_SpeedShoes).

Notice: If you want to do the same thing when you have implemented the different song per acts guide by Selbi (og. by Nineko), just simply replace the lines mentioned with these:
Code:
        moveq    #0,d0
        move.b    (v_zone).w,d0
        cmpi.w    #id_LZ_act4,(v_zone_act).w        ; check if level is SBZ3 (LZ4)
        bne.s    .music_speedshoes
        moveq    #5,d0        ; play SBZ music

; Obj01_PlayMusic:
    .music_speedshoes:
        jsr    (PlayCurrentActMusic).l    ; resume level music after speed shoes has worn off
I hope you enjoy this tutorial, happy hacking and enjoy the vastly customized music for speed shoes (Like how Sonic CD did.)
 
Last edited:
Back
Top