• 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.

Quick Research & Development Thread

  • 5,256
    Posts
    16
    Years

    Quick Research & Development Thread

    This thread is for small-scale research and development that can be solved in a matter of, say, five or six posts (or less). If you think of something you want to investigate but think it is too minor or shot for an entire Research & Development thread, or discover a small titbit of information that, on its own, would not warrant a whole thread for itself, just post it here!

    Posting format

    When posting your researched articles, please post them in a format that can be easily understood. Along with posting all your research on the matter in hand, please include any website links, offsets, subsidiary information and the likes when posting your article. Posts that are unclear in their message or that miss out vital information will not be added to the directory, for the sake of convenience and ease of access.

    For ease, the links are broken into sections and subsections. A "[Part #]" links to other posts that expand upon or correct the first part.

    Thread rules

    All posts must follow the posting format above. In addition, posts must follow the rules detailed below. (Of course, please ensure that you follow the PokéCommunity global rules, as well as this subforum's local rules.)

    This is not a Simple Question thread.
    This is purely for quick research, don't ask your ROM Hacking questions unless they are undocumented enough to warrant research. Simple Questions should be posted as unique threads in the ROM Hacking Help forum.

    You should have a minimum amount of knowledge on the matter in hand.
    We expect that you'll have knowledge of ROM Hacking and at least a small idea on what to do with what you've found out.

    Reviving old topics in the thread is forbidden.
    Unless you've found significant research and the case was unresolved in the first time of posting.

    Mechanics Research


    Scripting Research


    Graphics Research


    Audio Research


    Other


    Generation Interlinked

    Research here is interlinked with the games of the same Generation, meaning that it can be applied on any of the mentioned ([FR], [EM], etc) ROM's. It is further broken into Generation specific sub-sections.



    Extra

    knizz's HTML-only BL Finder tool port
    HTML-only ROM research tool.

    Porting C files to ASM
    A way to port C files to ASM.

    knizz's online database
    An online version of knizz's database.

    A Python script for debugging a map
    Quick Python script that's useful for debugging a map.

    Recreating a bug with PKSV [Part 1] [Part 2] [Part 3]
    Simple way too avoid bugs in routines.

    Using expanded Pokemon in Advance Map
    Recognizing and using expanded Pokémon in Advanced Map 1.92/1.95.
     
    Last edited by a moderator:
    Ruby, FireRed or Emerald? A quick, feature-based reference chart to help you choose

    The title says it all. If you have any suggestions, or criticism or you spotted some erros, feel free to post. Otherwhise avoid spamming, thanks!
    Note: only clean ROMs are taken into account. Also, features available in all games are not included.

    [snip]Those pictures weren't meant to be there, I suppose XD[/giradialkia]
     
    Last edited by a moderator:
    Also, here are some other fixes you should include:
    Battling 2 trainers at once: I'm sure FireRed has that, especially at the Battle Tower in 7 Island
    Colored dialogue: I think Ruby has that, although limited, and I also think Emerald has that.
    More than one Bike: I think with a little ASM, the hidden Key Items in FR/LG can be made to work with R/S/E standards, although I have no idea how to use it.
    Pokérus: I KNOW FR/LG has it, and I think diegoisawesome is right on that call. That definitely needs to be corrected.

    By Coloured Dialogue, I think HackMew meant automatic colouring for person events; the numerous bike feature IS RS/E exclusive, as that list is for an unedited ROM, and I agree with you and diegoisawesome with the Pokérus factor.

    Still, that is a very helpful post, HackMew.
     
    HackMew, doesn't FireRed have Pokérus? Maybe you mean random Pokérus (in which case I wouldn't know) but as a feature it does.

    Nope, it doesn't. It does support Pokérus as status, for compatibility. But you won't be able to infect other Pokémon and the virus will never wear off either.
    You can't even get the Pokérus unless you trade/cheat. At least, that's what I read on Bulbapedia.


    Also, here are some other fixes you should include:
    Battling 2 trainers at once: I'm sure FireRed has that, especially at the Battle Tower in 7 Island
    Colored dialogue: I think Ruby has that, although limited, and I also think Emerald has that.
    More than one Bike: I think with a little ASM, the hidden Key Items in FR/LG can be made to work with R/S/E standards, although I have no idea how to use it.
    Pokérus: I KNOW FR/LG has it, and I think diegoisawesome is right on that call. That definitely needs to be corrected.

    Are you sure on the Battle Tower? Mind checking again, just in case?
    Also, for colored dialogue I meant, like The Master said, the automatic, gender-based coloring.
    If you look at the original games, you'll see R/S/E messages are plain black.
     
    I can see why there's no support for Pokerus: No RTC. It wears off at midnight, but there isn't a RTC.

    I grabbed my LeafGreen (same as Firered...) Yup. At the battle tower, there are 4 modes:
    Single
    Double
    Knockout
    Mixed

    On double, the trainers will face you- 2-on-2 matches (Double battles) until you complete the challenge or loose. Also, right before Pattern Bush, there are twins Miu and Mia that both send out Pikachu.

    OK. I guess I was wrong for text coloring in R/S. I beat Ruby ages ago (360+ hours...) so I kinda forgot...
    And sorry for a month-long response...

    It is not the same as emerald though. That is just a normal double battle.
    In Emerald if 2 trainers happen to both see you at the same time they will both battle you at once.
     
    I think "Improved Graphics" is an opinion, not an actual fact.

    Quite frankly, I think the FR/LG graphics are horrible.

    EDIT: Okay, they aren't horrible, they look fine to be honest, but I still think that "Improved Graphics" is just an opinion.
     
    Last edited:
    I think "Improved Graphics" is an opinion, not an actual fact.

    Quite frankly, I think the FR/LG graphics are horrible.

    Well, that's meant as graphics engine. Maybe I'll reword it a little.
     
    You can find the offsets for each maps pokemon in Advance map.
    Go to the wild pokemon tab and click on expand.
    There you ll' find the offset.

    its stored...

    YY Min Lv
    XX Max LV
    FFFF Pokemon hex number
     
    Well... I am researching "glitch moves" In the hope of creating more attacks... I would like to know where the move data table is so I may try to expand it because the "glitch move" data is really existing rom data, and if this is actualy acheivable Any way... hopefully I will be able to 'create' new moves. E.G. for 4th gen pokemon, ect.

    My knowledge so far: Move data can be interpreted from other data.

    P.S I do not truly know if this thread was where to put this...
     
    Last edited:
    I'm using JPAN's hacked engine, and I was wondering how I could turn his random water battle, to use the tree data? Here is the code he made:
    Code:
    .align 2
    .thumb
    
    
    /*Special 0x98 will start a random water battle, such as those in the sea.
    Sister to the previous function, will start a water battle anywhere there is 
    a water pokemon data.*/
    
    Special_98: push {r4-r7, lr}
    	    mov r7, r8
    	    push {r7}
    	    sub SP, SP, #0x8
    	    ldr r0, water_data
    	    lsl r4, r0, #0x18
    	    lsr r4, r4, #0x18
    	    ldr r1, wild_generator2
    	    bx r1
    .hword 0x0000
    water_data: .word 0x22000410 /*the lake tile data*/
    wild_generator2: .word 0x0806cbe5
     
    I'm using JPAN's hacked engine, and I was wondering how I could turn his random water battle, to use the tree data? Here is the code he made:
    Code:
    .align 2
    .thumb
    
    
    /*Special 0x98 will start a random water battle, such as those in the sea.
    Sister to the previous function, will start a water battle anywhere there is 
    a water pokemon data.*/
    
    Special_98: push {r4-r7, lr}
            mov r7, r8
            push {r7}
            sub SP, SP, #0x8
            ldr r0, water_data
            lsl r4, r0, #0x18
            lsr r4, r4, #0x18
            ldr r1, wild_generator2
            bx r1
    .hword 0x0000
    water_data: .word 0x22000410 /*the lake tile data*/
    wild_generator2: .word 0x0806cbe5
    Actually, you don't need to do that. there's already a built-in special for that, although I don't know what it is.
    If you find it, please tell me, and I'll try to get it into my scripting tutorial.
     
    I believe it's special AB, which is unknown in XSE's guide. Here'd the code for rock smash:
    Code:
    '---------------
    #org 0x1BE00C
    special 0x187
    compare LASTRESULT 0x2
    if 0x1 goto 0x81A7AE0
    lockall
    checkflag 0x825
    if 0x0 goto 0x81BE091
    checkattack 0xF9
    compare LASTRESULT 0x6
    if 0x1 goto 0x81BE091
    setanimation 0x0 LASTRESULT
    bufferpartypokemon 0x0 LASTRESULT
    bufferattack 0x1 0xF9
    msgbox 0x81BE09D MSG_YESNO '"This rock appears to be breakable...."
    compare LASTRESULT 0x0
    if 0x1 goto 0x81BE09A
    msgbox 0x81BDFD7 MSG_KEEPOPEN '"[buffer1] used [buffer2]!"
    closeonkeypress
    doanimation 0x25
    waitstate
    goto 0x81BE06F
    
    '---------------
    #org 0x1A7AE0
    release
    end
    
    '---------------
    #org 0x1BE091
    msgbox 0x81BE0E2 MSG_SIGN '"It's a rugged rock, but a POKéMON\..."
    end
    
    '---------------
    #org 0x1BE09A
    closeonkeypress
    releaseall
    end
    
    '---------------
    #org 0x1BE06F
    applymovement LASTTALKED 0x81BE08F
    waitmovement 0x0
    hidesprite LASTTALKED
    [S-HIGHLIGHT]special 0xAB[/S-HIGHLIGHT]
    compare LASTRESULT 0x0
    if 0x1 goto 0x81BE08D
    waitstate
    releaseall
    end
    
    '---------------
    #org 0x1BE08D
    releaseall
    end
    
    
    '---------
    ' Strings
    '---------
    #org 0x1BE09D
    = This rock appears to be breakable.\nWould you like to use ROCK SMASH?
    
    #org 0x1BDFD7
    = [buffer1] used [buffer2]!
    
    #org 0x1BE0E2
    = It's a rugged rock, but a POKéMON\nmay be able to smash it.
    
    
    '-----------
    ' Movements
    '-----------
    #org 0x1BE08F
    #raw 0x68 'mov68
    #raw 0xFE 'End of Movements
     
    I believe it's special AB, which is unknown in XSE's guide. Here'd the code for rock smash:
    Code:
    '---------------
    #org 0x1BE00C
    special 0x187
    compare LASTRESULT 0x2
    if 0x1 goto 0x81A7AE0
    lockall
    checkflag 0x825
    if 0x0 goto 0x81BE091
    checkattack 0xF9
    compare LASTRESULT 0x6
    if 0x1 goto 0x81BE091
    setanimation 0x0 LASTRESULT
    bufferpartypokemon 0x0 LASTRESULT
    bufferattack 0x1 0xF9
    msgbox 0x81BE09D MSG_YESNO '"This rock appears to be breakable...."
    compare LASTRESULT 0x0
    if 0x1 goto 0x81BE09A
    msgbox 0x81BDFD7 MSG_KEEPOPEN '"[buffer1] used [buffer2]!"
    closeonkeypress
    doanimation 0x25
    waitstate
    goto 0x81BE06F
    
    '---------------
    #org 0x1A7AE0
    release
    end
    
    '---------------
    #org 0x1BE091
    msgbox 0x81BE0E2 MSG_SIGN '"It's a rugged rock, but a POKéMON\..."
    end
    
    '---------------
    #org 0x1BE09A
    closeonkeypress
    releaseall
    end
    
    '---------------
    #org 0x1BE06F
    applymovement LASTTALKED 0x81BE08F
    waitmovement 0x0
    hidesprite LASTTALKED
    [S-HIGHLIGHT]special 0xAB[/S-HIGHLIGHT]
    compare LASTRESULT 0x0
    if 0x1 goto 0x81BE08D
    waitstate
    releaseall
    end
    
    '---------------
    #org 0x1BE08D
    releaseall
    end
    
    
    '---------
    ' Strings
    '---------
    #org 0x1BE09D
    = This rock appears to be breakable.\nWould you like to use ROCK SMASH?
    
    #org 0x1BDFD7
    = [buffer1] used [buffer2]!
    
    #org 0x1BE0E2
    = It's a rugged rock, but a POKéMON\nmay be able to smash it.
    
    
    '-----------
    ' Movements
    '-----------
    #org 0x1BE08F
    #raw 0x68 'mov68
    #raw 0xFE 'End of Movements
    I think that's it! Try it out in a script and see what you get.
     
    I found out how to edit the Battle Tower opponent Pokemon in Pokemon Ruby. The data is located at 0x4038E0.

    I posted a whole thread about it, but just in case it doesn't get approved, I wanted to mention the offset anyway, because hopefully some hacker more advanced than me can find out where the pointer is.

    I don't want to explain in detail the data, but at 0x4038E0, change 19 into 18, and congratulations, most Pikachu will now turn into Arboks in the Battle Tower.
     
    I found this in the US-FR-Rom:
    Spoiler:

    What is this [ ??? ]-instruction doing there?
     
    Last edited:
    Some hwords have no opcode in Thumb.
    If you try to decompile one of this hwords the output is [???].

    Maybe it is a grafik or an ARM code.
     
    Back
    Top