Research & Development Got a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!

Closed Thread
Thread Tools
Old May 26th, 2014 (12:39 PM). Edited May 27th, 2014 by Christos.
vizor vizor is offline
    Join Date: Dec 2011
    Gender: Female
    Posts: 25
    Hi there,

    i finally have managed it, to do MegaEvolutions in the 3rd Gen. I show you this, in order to get feedback, but also to help me with the desing of the new Mega-Pokemon.
    This system will not be availible for the public, but i definitly want to get feedback (and of course also some publicity for my hack pokemon violet). If somebody has done any further research on the battle system (especially for the "display text callback at 0x03004FE0), it would be great, if you could post it here or pm me.
    Also Pm me if you want to help me with the sprite desing.

    Here is a link to Pokemon Violet - also subscribe my channel if you want to. I will post my research on the battle system (which is merly enough to perform a mega evolution), but keep in mind that all ROM-Offsets (and eventually some RAM Offsets as well) are only for FireRed German.

    The Battle System is parted into many sequenzes, e.g. oponent makes a move, you open the bag etc. Which sequence is executed next is stored on a callback handler. A callbacks loops every frame, and if it has finished it pushes an other callback to this handler. There are many callbacks, and i dont know how many there are, but most of the time RAM: 0x03004FE0 is used for the callbacks.

    There are some callbacks i reserached so far, but notice that they will all return to the "normal" battle once they have finished.

    • 0x08108BCC | 1 : Return to the Battle, executes an item script form a table (usually your moves ends after that, because an item script from this table ends the move, but e.g. not for item 0x0)
    • 0x080A1FE0 | 1 : text is loaded, which text is related to an table which i have not found so far
    As you might see now these callbacks are meant to be used in combination with an item. I use this callbacks in my mega_evolution, because they can be used in a item_battle_script safely.

    Everybody who has hacked items so far knows, that battle_scripts are executed kinda weird. The ASM snippet seems to prepeare what has to be done afterwards. The pokeball for example just loads data into the RAM, then uses the "Return to Battle" callback. Because the item slot is pokeball (im RAM) the callback from the table is executed, and a pokeballs effect is now active, even thogh the code on the pokeballs data itself has been executed long ago.

    Unfortunatley that is almost everything i figured out so far

    Relevant Advertising!

    Old May 27th, 2014 (1:19 PM).
    Shiny Quagsire's Avatar
    Shiny Quagsire Shiny Quagsire is offline
    I'm Still Alive, Elsewhere
      Join Date: May 2009
      Location: Hoenn Safari Zone
      Age: 20
      Gender: Male
      Nature: Jolly
      Posts: 700
      Simply amazing. The more we learn about battle scripts the better, this is literally one of the last frontiers of Gen III hacking we have yet to discover and now we are one step closer to fully understanding the battle engine.

      Old May 27th, 2014 (1:38 PM).
      Agastya's Avatar
      Agastya Agastya is offline
      Grinding failed. Item Grind level dropped by 3.
        Join Date: Feb 2010
        Nature: Quiet
        Posts: 72
        this method seems a little wonky - from the current implementation it appears you could mega then switch or mega then use an item

        it also seems that you'll use the mega's base speed for the turn it evolves instead of the non-mega's base speed

        it's still impressive and a step in the "right" direction (as far as hacking goes), don't get me wrong, but hopefully now that the baseline has been figured out it can be improved to be as accurate as possible instead of sticking with it with the community's typical "good enough" mentality that's stuck around for a little too long
        Old May 27th, 2014 (2:31 PM).
        DoesntKnowHowToPlay's Avatar
        DoesntKnowHowToPlay DoesntKnowHowToPlay is offline
        Tiny Umbrella with Lots and Lots of Good
          Join Date: Jan 2012
          Posts: 258
          This system will not be availible for the public,
          cool advertisement

          To make this not just a blatant ad thread and actually have some content, I'm gonna dump some stuff I figured out from an old attempt at creating Relic Song that might be useful for creating mega evolutions.

          Forms, in almost all cases, are most easily created using extra slots. There's a few reasons for this- the biggest in my opinion is that it trivializes changing base stats. Normally you'd have to do a bunch of obnoxious math to calculate the Mega's stats, but by tying the mon to a different slot you can just call the game's stat-recalc function (x3e47c) to do it for you after you change the mon's species to the new form's slot. More pragmatically, this method simplifies changing their sprites, abilities, type, weight, and cry. It also means you don't have to add a mega or form identifier anywhere as you can just check the species. As far as the pokedex goes, you can map every form of a mon to the same dex number, so encountering Rotom-W would get you Rotom's dex page if you used this method for it.

          So, to implement mega evolution, you'd want to change the mon to the mega species provided that no other mega pokemon exist in the party (done by checking their species). You'd also want to update the battle structs to the new mon's stats, typing, species, and ability. You'd also need to run a routine that scans the party for mega-evolved pokemon (again, a species check) and changes their species to the appropriate normal mon at the end of every battle.

          I think it should go without saying that ASM would be involved, especially in an implementation consistent with X/Y since it would need to happen after the player selects their command and turn order is decided but before any of the Pokemon actually move.

          Here's some helpful offsets for changing a mon's species during battle:

          x02023D6B: bank of the mon that is currently attacking. 0 is player's first mon, 1 is enemy's first mon, 2 is player's second mon (in doubles), 3 is enemy's second mon. Relevant if you want to do Relic Song or Stance Change, but not as much for properly implemented Megas.
          x02023BCE: stores which party slot the active pokemon are mapped to. Somewhat non-intuitively, these are half-words, and are sorted in the same order as the above banks. (player's first mon, enemy's first mon, player's second mon, enemy's second mon). Values range from 0-5.
          x02024284: player's party data. Each entry is 100 (x64) bytes long, encrypted- structure is same as documented here:
          x0202402C: enemy's party data, stored same way as above.
          x02023be4: Battle structs. There are four of them, each 88 (x58) bytes long. These store temporary data for the active pokemon, such as type changes, volatile status (curse/leech seed), stat modifiers, etc. This is *not* directly tied to the pokemon data- if you change the mon's species in pokemon data you'll need to update this yourself. They are documented in what should be a sticky thread here:
          x02023bde: turn order- four bytes, holding the values 00, 01, 02, and 03 in the order those banks will move (just 00 and 01 in single battles).

          x0803fbe8: decrypter- function used to read the pokemon data elegantly. Takes a Pokemon struct's address in R0 and an index to read in R1.
          x0804037c: encrypter- function used to change the pokemon data elegantly. Takes a Pokemon struct's address in R0, an index to change in R1, and a pointer to the new data in R2.
          x0803e47c: stat recalc- function used the recalculate a pokemon's stats to accommodate changed EVs or base stats.

          Yet Another Fire Red Hack

          Physical/Special Split
          Old May 30th, 2014 (10:38 AM).
          Kakarot1212's Avatar
          Kakarot1212 Kakarot1212 is offline
          Resident Programmer
            Join Date: Oct 2013
            Location: Phillipines
            Gender: Male
            Nature: Adamant
            Posts: 553
            Woah, this a cool finding! Another leap towards hacking.

            But this,
            This system will not be available for the public
            Simply disappointing. No, really..
            Old May 30th, 2014 (12:12 PM).
            Varion Bluefire's Avatar
            Varion Bluefire Varion Bluefire is offline
            A.K.A The Glitch
              Join Date: Apr 2013
              Age: 23
              Gender: Male
              Nature: Naughty
              Posts: 663
              it is a real shame you'er not making this public, it'd be a good feature for all.

              Just strollin' to my next destination...
              Old June 7th, 2014 (6:29 PM).
              Ethanb900 Ethanb900 is offline
                Join Date: Mar 2014
                Gender: Male
                Posts: 55
                It does seem like a really good idea. I never even thought about putting it as an in-bag item. Unfortunately, you're not having it available to the people.
                Old August 24th, 2014 (2:37 AM).
                Lance32497's Avatar
                Lance32497 Lance32497 is offline
                LanceKoijer of Pokemon_Addicts
                  Join Date: Aug 2014
                  Location: Criscanto town-Ginoa Region xD
                  Gender: Male
                  Nature: Adamant
                  Posts: 793
                  why you dont want to share that?
                  This signature has been disabled.
                  Scrollbar appears
                  Please review and fix the issues by reading the signature rules.

                  You must edit it to meet the limits set by the rules before you may remove the [sig-reason] code from your signature. Removing this tag will re-enable it.

                  Do not remove the tag until you fix the issues in your signature. You may be infracted for removing this tag if you do not fix the specified issues. Do not use this tag for decoration purposes.
                  Old August 28th, 2014 (2:59 AM).
                  persian_17's Avatar
                  persian_17 persian_17 is offline
                    Join Date: Jun 2007
                    Location: far away island
                    Nature: Adamant
                    Posts: 30
                    i think this is fake, you probably edited the video
                    Old August 28th, 2014 (4:48 AM).
                    vizor vizor is offline
                      Join Date: Dec 2011
                      Gender: Female
                      Posts: 25
                      are you kidding me?

                      How could this be fake? xD
                      Old August 28th, 2014 (4:54 AM).
                      AkimotoBubble AkimotoBubble is offline
                        Join Date: Aug 2014
                        Gender: Male
                        Posts: 48
                        Oh, good, I am thinking how to make the pokemon image distortion, do you have any good ideas?
                        i am bubble,and sorry my english is not good ......
                        Old August 28th, 2014 (7:12 AM).
                        Gexeys's Avatar
                        Gexeys Gexeys is offline
                        Location: Ilex Forest shrine
                          Join Date: Dec 2013
                          Gender: Male
                          Nature: Adamant
                          Posts: 70
                          This system will not be availible for the public, but i definitly want to get feedback (and of course also some publicity for my hack pokemon violet). If somebody has done any further research on the battle system (especially for the "display text callback at 0x03004FE0), it would be great, if you could post it here or pm me.
                          How are you expecting the public to help you on something you're not going to give to the public?
                          Old August 28th, 2014 (12:25 PM).
                          cscof's Avatar
                          cscof cscof is offline
                          pretty coolish guy
                            Join Date: Nov 2013
                            Location: internet
                            Gender: Male
                            Nature: Impish
                            Posts: 52
                            So, you finally cracked one of the hardest eggs so far, and you're just keeping it for yourself? Disappointing.
                            Old August 28th, 2014 (2:50 PM). Edited August 28th, 2014 by Urist McHemlock.
                            Urist McHemlock's Avatar
                            Urist McHemlock Urist McHemlock is offline
                            Jack Frost of the Jack Brothers
                              Join Date: Sep 2008
                              Location: Astral Void
                              Age: 22
                              Gender: Male
                              Nature: Quirky
                              Posts: 605
                              Stop being a selfish person.
                              Old August 28th, 2014 (5:27 PM).
                              karatekid552's Avatar
                              karatekid552 karatekid552 is offline
                              What happens if I push it?....
                                Join Date: Nov 2012
                                Location: Do you really want to know? Really?
                                Gender: Male
                                Nature: Bold
                                Posts: 1,766
                                I'm going to close this thread. I personally do not agree with keeping this to yourself seeing as you posted in R&D and not a personal hack thread. R&D is for PUBLIC development and research, not personal feedback. Make a hack with this in it and then you can request feedback.

                                Btw, sharing will make you far more respected. Trust me.


                                Paired with Simba
                                Closed Thread

                                Quick Reply

                                Join the conversation!

                                Create an account to post a reply in this thread, participate in other discussions, and more!

                                Create a PokéCommunity Account

                                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 10:21 PM.