• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Research: Restoring R/S/E item fanfares in FireRed

1,323
Posts
16
Years
    • Seen Dec 9, 2023
    In the 1st Generation Pokémon games (Red, Green, Blue, and Yellow), whenever you found an item, it plays a fanfare that is currently known as the level-up sound (in the Gen I games, it actually wasn't the level-up sound, but it became the official level-up sound in G/S/C and all later games).

    Then in G/S/C and all later games (except FR/LG), there were new fanfares. The level-up sound from R/G/B/Y became the official "found-item" sound, while the found-item sound from R/G/B/Y became the level-up sound. And TM's had a completely new sound. Then in R/S/E, a new fanfare was introduced for berries, which was used again in D/P/Pt (and I think HG/SS with the berry pots, but I don't really remember. The Unova games don't have this sound)

    In FireRed/LeafGreen, they made it so that it plays the level-up sound for all items to try and make it more like the Generation I games. However, all the fanfares from Ruby/Sapphire still exist in the FireRed ROM!

    Here is a new item script, that is identical to the giveitem command in XSE. If you want to use R/S/E fanfares, use this script instead of the giveitem command:
    Code:
    #include stditems.rbh
    #dynamic 0x800000 //Change this offset to whatever free space you feel like
    
    #org @main
    lock
    checkitemroom ITEM_POTION 0x1
    bufferitem 0x1 ITEM_POTION
    compare LASTRESULT 0x0
    if 0x1 goto @Fail
    pause 0xB
    fanfare 0x102 //Change this value to change the fanfare that you want it to play
    hidesprite 0xFFFF //Change this value to the OW number of the item in AdvanceMap
    preparemsg @Msg3
    waitmsg
    waitfanfare
    additem ITEM_POTION 0x1
    msgbox @Msg4 MSG_KEEPOPEN
    release
    end
    
    
    #org @Fail
    msgbox @Msg3 MSG_KEEPOPEN
    msgbox @Msg2 MSG_KEEPOPEN
    release
    end
    
    
    #org @Msg3
    = [player] found one [buffer2]!
    
    #org @Msg4
    = [player] put the [buffer2] away in\nthe BAG's ITEMS POCKET.
    
    #org @Msg2
    = Too bad!\nThe BAG is full[.]
    Make sure you change the FFFF in "hidesprite 0xFFFF"

    Also, notice the part that says, "fanfare 0x102". Change this value to change the song:
    0x100 = R/S/E Pokémon Center Healing
    0x101 = Level-up
    0x102 = R/S/E item sound
    0x103 = R/S/E "You caught a Pokémon"
    0x104 = R/S/E badge sound
    0x105 = R/S/E TM sound
    0x106 = R/S/E Berry sound

    As I said earlier, all of the Ruby/Sapphire fanfares are already in the FireRed ROM, they're just never heard in-game. The values I posted above will play them, in all of their R/S/E glory.

    Now I know that this takes up a lot more space than simply just the giveitem command, but I don't know how to modify the scripts that the command itself accesses, but I'm sure it's possible. Since the R/S/E fanfares are already in the FireRed ROM, it should be possible to change the scripts that the giveitem command accesses so that it plays the R/S/E fanfares instead of the level-up sound, but until those scripts are found, the script I posted above is identical to the giveitem command, except you get to choose which fanfare plays.
     

    Jambo51

    Glory To Arstotzka
    736
    Posts
    14
    Years
    • Seen Jan 28, 2018
    Well, if FRLG are anything like Emerald in terms of how they select the fanfare to play, there will be code which checks what type of item it is (by checking what pocket in the bag it goes into) and selecting a sensible one based on that. (Reason I know this is that I actually added a new fanfare to Emerald).

    However, it probably doesn't work like that given that it uses only one fanfare. I may try to add a system in the same style as Emerald that handles all of this in the background.

    ETA: Emerald checks what fanfare to play and then calls a script that actually takes care of playing the fanfare, by the looks, FR acts the same way.
     
    Back
    Top