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

Adding new evolution methods [FR]

kearnseyboy6

Aussie's Toughest Mudder
  • 300
    Posts
    15
    Years
    • Seen Jun 22, 2019
    Hi everyone,

    Today I am going to show you how to add more evolution methods.

    Step 1 (Extending the table and limiters)
    Spoiler:


    Step 2 (Creating evolution routines; ASM needed)
    Spoiler:


    Step 3 (Making the routine work in the game)
    Spoiler:


    Final notes, I am a bit vague on the structure of the routine musts because I am still learning it. However finally all evolutions will be open-sourced and available below in the spoiler (will add more over time).

    Spoiler:


    Lastly, acknowledgements go to Daniils and Jambo for their guidance and locations for everything.

    ~ Thank you and good luck
     
    Last edited:

    Superjub

    Pokémon Aureolin
  • 2,288
    Posts
    16
    Years
    Definitely going to keep an eye on this thread, this will be extremely helpful! :D Thanks for posting this. ^^
     

    Joexv

    ManMadeOfGouda joexv.github.io
  • 1,037
    Posts
    11
    Years
    So in theory this could be used to make a similar asm routine that could make a pokemon evolve when levling up in a certain map? Kinda like diamond and pearl where some pokemon needed to level up in mt cornet to evolve.
     

    kearnseyboy6

    Aussie's Toughest Mudder
  • 300
    Posts
    15
    Years
    • Seen Jun 22, 2019
    So in theory this could be used to make a similar asm routine that could make a pokemon evolve when levling up in a certain map? Kinda like diamond and pearl where some pokemon needed to level up in mt cornet to evolve.

    Yeh exactly. The routine for that will be similar to the raining in overworld routine.
    The map is number is stored at 0x02036E10 (0x2 behind weather byte). All you need to do is compare that byte to the map number (eg: Pallet Town = 0x58 I think). There's a list around the site.
     

    Joexv

    ManMadeOfGouda joexv.github.io
  • 1,037
    Posts
    11
    Years
    So this would make a pokemon evolve if leveled up in pallet town.(i dont know too much about asm so hopefully this works) I used you rain routine like you said and then changed the offset it calls and the number it is compared to.
    Spoiler:
     
  • 91
    Posts
    14
    Years
    • Seen Feb 22, 2023
    Instead of checking for a specific map I would take a variable and check it's value, simply because you can have multiple maps asigned to the same evolution with this. (e.g. "evolves in a desert"), also you can excatly specify the place by setting the variable via non-mapscripts.

    ~SBird
     

    Joexv

    ManMadeOfGouda joexv.github.io
  • 1,037
    Posts
    11
    Years
    Yea but wouldnt that be a whole lot more work? Since you would have to set the var everytime you enter and leave one of those maps. And you can set more than just one map with the same evolution, it would just need another line of asm right after
    Code:
    cmp r6, #0x56
    beq town
    so you could just have it say
    Code:
    cmp r6, #0x56
    beq town
    cmp r6, #0x57
    beq town
    Like in the rain evolution script it is comparing multiple numbers to apply for more than just one type of rain.
     

    kearnseyboy6

    Aussie's Toughest Mudder
  • 300
    Posts
    15
    Years
    • Seen Jun 22, 2019
    So this would make a pokemon evolve if leveled up in pallet town.(i dont know too much about asm so hopefully this works) I used you rain routine like you said and then changed the offset it calls and the number it is compared to.
    Spoiler:

    Pretty nice. It would work in theory, Pallet Town is 0x58 I think, but to make it dynamic like SBird said we need to take advantage of the 'argument' that G3HS has. Since the maps are a byte long you would keep the start. You would compare your r6 with r2 (the argument).

    Unfortunately in G3HS at the moment it only features level and item, so for this to work, you would be limited to 100 levels or maps that have values 0x64 and less. The good news is KK552 will be working on the list if the list is provided to him. I have FR but none else.

    So here is how I would do the map name check:

    Spoiler:


    It strips the ability for a level check however... but leafeon and glaceon don't have required levels do they? Just the map?

    Sorry for the double post but anyone who has used these routines with expanded evolutions read the new instructions or they will not work.

    They are now compatible with DoesntKnowHowToPlay's feature
    Adding new evolution methods [FR]
    Adding new evolution methods [FR]
    Adding new evolution methods [FR]
    Adding new evolution methods [FR]
     
    Last edited by a moderator:
  • 275
    Posts
    10
    Years
    This is great tutorial, finally I can include new evolution methods. But is it possible to make Pokemon forms with similar method? I made eighteen different-types Arceus as separate Pokemon, and now I want when Arceus is holding a Plate, it changes form (technically evolves) to another form, but when there is no Plate, it reverts back to regular form. But I don't want to see evolution screen, simplify, you give Plate to Arceus and it changes form.
     

    kearnseyboy6

    Aussie's Toughest Mudder
  • 300
    Posts
    15
    Years
    • Seen Jun 22, 2019
    This is great tutorial, finally I can include new evolution methods. But is it possible to make Pokemon forms with similar method? I made eighteen different-types Arceus as separate Pokemon, and now I want when Arceus is holding a Plate, it changes form (technically evolves) to another form, but when there is no Plate, it reverts back to regular form. But I don't want to see evolution screen, simplify, you give Plate to Arceus and it changes form.

    Yes forms are possible on the todo list. I am still thinking of a good method; I'm leaning towards making each form a different index. But we will see. Don't expect in the next month though, I'm on a break now sorry.
     
  • 51
    Posts
    10
    Years
    • Seen Dec 20, 2022
    For anyone interested in doing this for Emerald (I'm not sure if this info is already around), the evolution table that needs repointing is at 0x06D198
    Its one and only pointer is also right behind it at 0x06D194
    And it appears there are an extra two bytes in whatever code runs there in Emerald so the spacing is not identical to Fire Red (it is out by two) but I am pretty sure the limit on evolutions is at 0x06D180.

    I haven't tested this out for myself yet (I'm too busy on too many things and not in a position to test yet) but I am 99% sure this is correct.
     
  • 116
    Posts
    16
    Years
    I used your routines and change a few pointers to match with Emerald. It showed me this warning while I am assembling the routine:
    Adding new evolution methods [FR]


    The bin file after assembled:
    Adding new evolution methods [FR]


    The routine which I using:
    Spoiler:


    After finished all steps, I tested and realized that the pokemon won't evolute anymore. Is this problem caused by the warning? If not, what happened?
     
    Last edited:
  • 51
    Posts
    10
    Years
    • Seen Dec 20, 2022
    I'm afraid I'm no ASM expert so I cannot say what is wrong with the script. I just did a quick test with my repointed 255 evolution methods and a normal evolution went absolutely fine, no issues. I will try now assigning that poke the 255th evolution (they all point to the same places for now) and if that works I will try one of these routines.
    I have never has an error like that compiling ASM so I'm really not sure :(
    Edit: I just did the stupidest thing and wasted good time lol. I wanted to test evolving my Pokémon from somewhere around the 244th slot (a duplicate of level up). Then I saw that it did not evolve at all :O Then I sweated like crazy because I thought I had the wrong limiter byte. Tried a few things, nothing worked, then I realised I forgot to click 'save tab' in G3HS lol.
    SoSo after a proper test, expanding the amount of evolutions definitely works.
    Sorry I can't help you with your routine, perhaps OP can help you when they see this. (I've noticed other people aren't very quick to help around here)
     
    Last edited:
  • 116
    Posts
    16
    Years
    I'm afraid I'm no ASM expert so I cannot say what is wrong with the script. I just did a quick test with my repointed 255 evolution methods and a normal evolution went absolutely fine, no issues. I will try now assigning that poke the 255th evolution (they all point to the same places for now) and if that works I will try one of these routines.
    I have never has an error like that compiling ASM so I'm really not sure :(
    Edit: I just did the stupidest thing and wasted good time lol. I wanted to test evolving my Pokémon from somewhere around the 244th slot (a duplicate of level up). Then I saw that it did not evolve at all :O Then I sweated like crazy because I thought I had the wrong limiter byte. Tried a few things, nothing worked, then I realised I forgot to click 'save tab' in G3HS lol.
    SoSo after a proper test, expanding the amount of evolutions definitely works.
    Sorry I can't help you with your routine, perhaps OP can help you when they see this. (I've noticed other people aren't very quick to help around here)

    Thanks a lot for your attention and testing. The new evolutions won't work because I have had expanded the number of evolution by G3HS. Kearnseyboy6 had been mentioned early but I missed it out.
     

    mrtienduc1999

    Banned
  • 37
    Posts
    11
    Years
    Oh, good tut! I give you a ideal :)) check gender to evolution. I think it needs 2 asm code: 1 male and 1 female. And check level to evolution. In gen 4, it has a pokemon evolution check gender...
     
  • 275
    Posts
    10
    Years
    Oh, good tut! I give you a ideal :)) check gender to evolution. I think it needs 2 asm code: 1 male and 1 female. And check level to evolution. In gen 4, it has a pokemon evolution check gender...

    For gender it might check Pokemon ID. There is 1 third gen Pokemon that have evolution with low or high PID on level 7. It's Wurmple! So, only left to find Wurmple evolution routines and edit it, so it checks not PID's 2 last bytes, but only one (last byte means gender of Pokemon). I don't have much ASM skills, so I can't do it by myself, but if anyone can, use this method.
     
    Last edited:

    mrtienduc1999

    Banned
  • 37
    Posts
    11
    Years
    I dont understand personality value, but i think it has PID < 4 and it's a male or female. So if we use PID, we will have some problems with logic lol :D i hope you understand!
     
  • 1
    Posts
    9
    Years
    • Seen Jul 6, 2014
    Is there any way to disable evolution unless the player has an item in their inventory? All evolutions would proceed normally once the item is obtained.
     
    Back
    Top