The PokéCommunity Forums Fan Games ROM Hacking Tools, Tutorials & Resources
Tutorial Firered - How to check if a specific song is being played

Tools, Tutorials & Resources Various tools to help you develop your hacks can be found here.

Reply
 
Thread Tools
  #1    
Old January 7th, 2010 (9:56 PM). Edited April 15th, 2010 by Logan.
Megiddo-san's Avatar
Megiddo-san Megiddo-san is offline
Barium - Summer '12 Return?
     
    Join Date: Dec 2007
    Location: Where you least expect it
    Age: 25
    Gender: Male
    Nature: Relaxed
    Posts: 1,329
    Send a message via Windows Live Messenger to Megiddo-san
    Update: Emerald Offset: 03007420 RS Offset: 03007380
    I'm not sure what this can be used for exactly, but I think someone will find a use for it.

    For this tutorial you are going to need Advance Map, XSE, and Sappy. To begin, open up your rom in Sappy and look at a song. Note the header offset as we're going to be using it.

    We are going to use the pointer to the header offset and an address in the ram to check for a song being played and if that song is playing, a new song will play instead.

    I found that 03007300 in the ram is the location of the pointer to the song being played. The command comparefarbytetobyte compares a byte at a specified address to a specified byte value.

    If you take the header offset, for example, 6D1DDC, and swap the bytes, you get the pointer (DC1D6D08).

    I'm not sure if any songs share the same byte value for their first pointer byte, so we'll be using the three bytes that compose the offset. (DC1D6D)

    So, we shall be using comparefarbytetobyte three times to check for three different bytes, as well as use 03007300, 03007301, and 03007302.

    Create your script in XSE and enter it with Advance Map. Make a person script, signpost, or etc. If for some reason you want to incorporate into a level script, note that I have not gotten it to work as a level script.

    This is the script that I created. I checked for the route 1 song being played. If it is playing, the script will display a message and the battle 3 theme will be played.

    #dynamic 0x800000

    #org @begin
    comparefarbytetobyte 0x03007300 0xDC
    if 0x1 goto @continuecheck
    release
    end

    #org @continuecheck
    comparefarbytetobyte 0x03007301 0x1D
    if 0x1 goto @more
    release
    end

    #org @more
    comparefarbytetobyte 0x03007302 0x6D
    if 0x1 goto @finish
    release
    end

    #org @finish
    playsong 0x128 0x0
    message @1 0x2
    release
    end

    #org @1
    = You win.

    I hope you enjoyed this tutorial or something like that. :P
    I'll be posting the Ruby/Sapphire and the Emerald ram offsets soon.

    Thanks to ZodiacDaGreat for some help.

    __________________

    Hashire! Asu e tsudzuku shinka no micha wa
    Reply With Quote

    Relevant Advertising!

      #2    
    Old January 15th, 2010 (3:15 PM).
    Gamer2020's Avatar
    Gamer2020 Gamer2020 is offline
    Accept no Imitations!
       
      Join Date: Jun 2008
      Location: Distant Land
      Gender: Male
      Nature: Bold
      Posts: 899
      Wow that is pretty interesting.
      This can be used with radio playing I think.
      Like a radio could be in the corner and a character can be like "Hey I like listening to this song."
      But if its a different song the character can say "OMG! I hate this song!"
      __________________

      Reply With Quote
      Reply
      Quick Reply

      Sponsored Links
      Thread Tools

      Posting Rules
      You may not post new threads
      You may not post replies
      You may not post attachments
      You may not edit your posts

      BB code is On
      Smilies are On
      [IMG] code is On
      HTML code is Off

      Forum Jump


      All times are GMT -8. The time now is 9:59 PM.