The PokéCommunity Forums Fan Games ROM Hacking Help Research & Development
Development Ability Resource Thread

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!

Reply
 
Thread Tools
  #276    
Old August 14th, 2016 (4:26 PM).
NewDenverCity's Avatar
NewDenverCity NewDenverCity is offline
     
    Join Date: Apr 2014
    Location: Antarctica
    Gender: Male
    Nature: Calm
    Posts: 329
    Quote:
    Originally Posted by bynine View Post
    in some routines it's stated "#Insert 00 48 00 47 XX+1 XX XX 08 at 08042F94", or similar. i get what that means in general, but "08042F94" is a hex address way outside of the rom's scope (it only goes up to 00FFFFFF)! any suggestions here?
    electricario is correct. The ROM is actually split into various sections of memory, and the ROM is the ninth. The first is the BIOS, or the actual GameBoy, and everything in between is different kinds of memory. Check out this link to check how the memory is arranged.
    Reply With Quote
      #277    
    Old August 15th, 2016 (7:02 AM).
    AkameTheBulbasaur's Avatar
    AkameTheBulbasaur AkameTheBulbasaur is offline
    Akame Marukawa of Iyotono
       
      Join Date: May 2013
      Location: A place :D
      Age: 21
      Gender: Male
      Nature: Gentle
      Posts: 354
      Quote:
      Originally Posted by MrDollSteak View Post
      All fixed!

      I've actually made Simple now! I'll also update this post to include Contrary in the future!

      Simple

      Spoiler:
      Fire Red
      Spoiler:
      Routine I: Negative Stat Boost
      Spoiler:
      Code:
      .text
      .align 2
      .thumb
      .thumb_funcs
      .global simplenegativestatboost
      
      BufferAbility:
      	mov r2, #0x1
      	lsr r6, r0, #0x18
      	ldr r0, .Bank
      	ldrb r0, [r0]
      	mov r1, #0x58
      	mul r0, r1
      	ldr r1, .BattleData
      	add r0, r0, r1
      	ldrb r0, [r0]
      SimpleCheck:
      	cmp r0, #0x57
      	bne DetermineNegativeStage
      Simple:
      	lsl r0, r6, #0x19
      	lsr r6, r0, #0x18
      DetermineNegativeStage:
      	cmp r6, #0xFE
      	beq Harshly
      	cmp r6, #0xFF
      	beq Fell
      Severely:
      	strb r4, [r3, #0x1]
      	mov r0, #0x85
      	strb r0, [r3, #0x2]
      	mov r0, #0x1
      	strb r0, [r3, #0x3]
      	mov r2, #0x4
      	b Fell
      Harshly:
      	strb r4, [r3, #0x1]
      	mov r0, #0xD3
      	strb r0, [r3, #0x2]
      	strb r4, [r3, #0x3]
      	mov r2, #0x4
      Fell:
      	ldr r0, .Return
      	bx r0
      
      .align 2
      .Bank: .word 0x02023BC4
      .BattleData: .word 0x02023C04
      .Return: .word 0x08027F12
      
      #Insert 00 4A 10 47 xx xx xx 08 at 27EFC

      Routine II: Positive Stat Boost
      Spoiler:
      Code:
      .text
      .align 2
      .thumb
      .thumb_func
      .global simplepositivestatboost
      
      BufferAbility:
      	mov r2, #0x1
      	ldr r0, .Bank
      	ldrb r0, [r0]
      	mov r1, #0x58
      	mul r0, r1
      	ldr r1, .BattleData
      	add r0, r0, r1
      	ldrb r0, [r0]
      SimpleCheck:
      	cmp r0, #0x57
      	bne DeterminePositiveStage
      Simple:
      	lsl r0, r6, #0x19
      	lsr r6, r0, #0x18
      DeterminePositiveStage:
      	cmp r6, #0x2
      	beq Sharply
      	cmp r6, #0x1
      	beq Rose
      Drastically:
      	strb r4, [r3, #0x1]
      	mov r0, #0x86
      	strb r0, [r3, #0x2]
      	mov r0, #0x1
      	strb r0, [r3, #0x3]
      	mov r2, #0x4
      	b Rose
      Sharply:
      	strb r4, [r3, #0x1]
      	mov r0, #0xD1
      	strb r0, [r3, #0x2]
      	strb r4, [r3, #0x3]
      	mov r2, #0x4
      Rose:
      	ldr r0, .Return
      	bx r0
      
      .align 2
      .Bank: .word 0x02023BC4
      .BattleData: .word 0x02023C04
      .Return: .word 0x08027F87
      
      #Insert 01 4A 10 47 00 00 xx xx xx 08 at 27F76

      Routine III: Display Stat Stage Message
      Spoiler:
      Code:
      .text
      .text
      .align 2
      .thumb
      .thumb_func
      .global displaystatstagemessage
      
      BufferMessage:
      	ldr r0, .Index
      	cmp r0, r1
      	beq BufferSeverely
      	add r0, #0x1
      	cmp r0, r1
      	bne Normal
      BufferDrastically:
      	ldr r1, .DrasticallyString
      	b Return
      BufferSeverely:
      	ldr r1, .SeverelyString
      	b Return
      Normal:
      	ldr r0, .MessageTable
      	sub r1, #0xC
      	lsl r1, r1, #0x2
      	add r1, r1, r0
      	ldr r1, [r1]
      Return:
      	ldr r0, .Return
      	bx r0
      
      .align 2
      
      .Index: .word 0x00000185
      .DrasticallyString: .word 0x08DDDDDD
      .SeverelyString: .word 0x08EEEEEE
      .MessageTable: .word 0x083FDF3C
      .Return: .word 0x080D8491
      
      #Insert 01 48 00 47 00 00 xx xx xx 08 at 080D8486
      DDDDDD refers to the following string
      Code:
      D8 E6 D5 E7 E8 DD D7 D5 E0 E0 ED 00 FF
      EEEEEE refers to the following string.
      Code:
      E7 D9 EA D9 E6 D9 E0 ED 00 FF

      Emerald
      Spoiler:
      Routine I: Negative Stat Boost
      Spoiler:
      Code:
      .text
      .align 2
      .thumb
      .thumb_func
      .global simplenegativestatboost
      
      BufferAbility:
      	mov r2, #0x1
      	lsr r6, r0, #0x18
      	ldr r0, .Bank
      	ldrb r0, [r0]
      	mov r1, #0x58
      	mul r0, r1
      	ldr r1, .BattleData
      	add r0, r0, r1
      	ldrb r0, [r0]
      SimpleCheck:
      	cmp r0, #0x57
      	bne DetermineNegativeStage
      Simple:
      	lsl r0, r6, #0x19
      	lsr r6, r0, #0x18
      DetermineNegativeStage:
      	cmp r6, #0xFE
      	beq Harshly
      	cmp r6, #0xFF
      	beq Fell
      Severely:
      	strb r4, [r3, #0x1]
      	mov r0, #0x85
      	strb r0, [r3, #0x2]
      	mov r0, #0x1
      	strb r0, [r3, #0x3]
      	mov r2, #0x4
      	b Fell
      Harshly:
      	strb r4, [r3, #0x1]
      	mov r0, #0xD3
      	strb r0, [r3, #0x2]
      	strb r4, [r3, #0x3]
      	mov r2, #0x4
      Fell:
      	ldr r0, .Return
      	bx r0
      
      .align 2
      .Bank: .word 0x02024064
      .BattleData: .word 0x020240A4
      .Return: .word 0x08050D33
      
      #Insert 00 4A 10 47 xx xx xx 08 at 50D1C

      Routine II: Positive Stat Boost
      Spoiler:
      Code:
      .text
      .align 2
      .thumb
      .thumb_func
      .global simplepositivestatboost
      
      BufferAbility:
      	mov r2, #0x1
      	ldr r0, .Bank
      	ldrb r0, [r0]
      	mov r1, #0x58
      	mul r0, r1
      	ldr r1, .BattleData
      	add r0, r0, r1
      	ldrb r0, [r0]
      SimpleCheck:
      	cmp r0, #0x57
      	bne DeterminePositiveStage
      Simple:
      	lsl r0, r6, #0x19
      	lsr r6, r0, #0x18
      DeterminePositiveStage:
      	cmp r6, #0x2
      	beq Sharply
      	cmp r6, #0x1
      	beq Rose
      Drastically:
      	strb r4, [r3, #0x1]
      	mov r0, #0x86
      	strb r0, [r3, #0x2]
      	mov r0, #0x1
      	strb r0, [r3, #0x3]
      	mov r2, #0x4
      	b Rose
      Sharply:
      	strb r4, [r3, #0x1]
      	mov r0, #0xD1
      	strb r0, [r3, #0x2]
      	strb r4, [r3, #0x3]
      	mov r2, #0x4
      Rose:
      	ldr r0, .Return
      	bx r0
      
      .align 2
      .Bank: .word 0x02024064
      .BattleData: .word 0x020240A4
      .Return: .word 0x08050DA7
      
      #Insert 01 4A 10 47 00 00 xx xx xx 08 at 50D96

      Routine III: Display Stat Stage Message
      Spoiler:
      Code:
      .text
      .text
      .align 2
      .thumb
      .thumb_func
      .global displaystatstagemessage
      
      BufferMessage:
      	ldr r0, .Index
      	cmp r0, r1
      	beq BufferSeverely
      	add r0, #0x1
      	cmp r0, r1
      	bne Normal
      BufferDrastically:
      	ldr r1, .DrasticallyString
      	b Return
      BufferSeverely:
      	ldr r1, .SeverelyString
      	b Return
      Normal:
      	ldr r0, .MessageTable
      	sub r1, #0xC
      	lsl r1, r1, #0x2
      	add r1, r1, r0
      	ldr r1, [r1]
      Return:
      	ldr r0, .Return
      	bx r0
      
      .align 2
      
      .Index: .word 0x00000185
      .DrasticallyString: .word 0x08DDDDDD
      .SeverelyString: .word 0x08EEEEEE
      .MessageTable: .word 0x085CC270
      .Return: .word 0x0814F6C1
      
      #Insert 01 48 00 47 00 00 xx xx xx 08 at 0814F6B6
      DDDDDD refers to the following string
      Code:
      D8 E6 D5 E7 E8 DD D7 D5 E0 E0 ED 00 FF
      EEEEEE refers to the following string.
      Code:
      E7 D9 EA D9 E6 D9 E0 ED 00 FF

      I'm not sure if it's just me, but I couldn't get this to work right. The game soft locks when a Pokemon's stats change by one stage. It displays the message and then stays on that screen. Music still plays but no buttons work. The rest of it works fine, it's only when it lowers or raises by one stage that gives me problems.
      __________________
      "The human sacrificed himself, to save the Pokemon. I pitted them against each other, but not until they set aside their differences did I see the true power they all share deep inside. I see now that the circumstances of one's birth are irrelevant; it is what you do with the gift of life that determines who you are." -Mewtwo
      Reply With Quote
        #278    
      Old August 15th, 2016 (4:41 PM).
      MrDollSteak's Avatar
      MrDollSteak MrDollSteak is offline
      Formerly known as 11bayerf1
         
        Join Date: Dec 2008
        Location: Hong Kong
        Age: 23
        Gender: Male
        Posts: 843
        Quote:
        Originally Posted by AkameTheBulbasaur View Post
        I'm not sure if it's just me, but I couldn't get this to work right. The game soft locks when a Pokemon's stats change by one stage. It displays the message and then stays on that screen. Music still plays but no buttons work. The rest of it works fine, it's only when it lowers or raises by one stage that gives me problems.
        I believe it is because you don't have the Pokemon Battle Message extension enabled. KDS and HidoranBlaze and myself have all got different versions posted on the website somewhere.
        __________________
        Reply With Quote
          #279    
        Old August 18th, 2016 (1:06 AM).
        Froosty's Avatar
        Froosty Froosty is offline
        The_Learner
           
          Join Date: Sep 2014
          Location: Somewhere in this world.
          Age: 20
          Gender: Male
          Nature: Brave
          Posts: 541
          Quote:
          Originally Posted by Touched View Post
          After a quick glance I can't see anything obviously wrong with the logic. Did you follow the instruction telling you to put 01 48 00 47 00 00 xx xx xx 08 1A 4A at 01F1E2. Remember the offset has to be little-endian and plus 1 (since it's THUMB code). If you did this, I can only assume it's broken.
          I am not talking of this specific ability but in general.
          I expanded the ability name and description table, coded the asm for any of the mentioned ability and then inserted it to the rom, i also followed the instruction to some hex value at some fixed pointer,
          but the thing i didnt get is how the rom identifies that the code is for the added ability.
          I mean if I added 10 new abilities how can the rom determine that the hex value is to be for 1st or 2nd or 3rd added ability.
          is there some else pointer I need to repoint??
          pls reply. working on a new hack!
          Reply With Quote
            #280    
          Old August 18th, 2016 (3:00 AM).
          bynine's Avatar
          bynine bynine is offline
             
            Join Date: Jan 2016
            Posts: 55
            Quote:
            Originally Posted by Bsantosh909 View Post
            I am not talking of this specific ability but in general.
            I expanded the ability name and description table, coded the asm for any of the mentioned ability and then inserted it to the rom, i also followed the instruction to some hex value at some fixed pointer,
            but the thing i didnt get is how the rom identifies that the code is for the added ability.
            I mean if I added 10 new abilities how can the rom determine that the hex value is to be for 1st or 2nd or 3rd added ability.
            is there some else pointer I need to repoint??
            pls reply. working on a new hack!
            in each ability there's a check to determine which ability it's looking for, denoted by a hex. for example, the ability Air Lock is 4D, so it would do something along the lines of

            AirLockCheckUser:
            cmp r0, #0x4D
            beq AirLockRoutine


            you'll look for something similar in your routines and change them accordingly
            Reply With Quote
              #281    
            Old August 18th, 2016 (9:31 PM).
            Froosty's Avatar
            Froosty Froosty is offline
            The_Learner
               
              Join Date: Sep 2014
              Location: Somewhere in this world.
              Age: 20
              Gender: Male
              Nature: Brave
              Posts: 541
              Quote:
              Originally Posted by bynine View Post
              in each ability there's a check to determine which ability it's looking for, denoted by a hex. for example, the ability Air Lock is 4D, so it would do something along the lines of

              AirLockCheckUser:
              cmp r0, #0x4D
              beq AirLockRoutine


              you'll look for something similar in your routines and change them accordingly
              Does it means if I replace the first ability with airlock then i should replace
              cmp r0, #0x4D with
              cmp r0, #0x1
              Reply With Quote
                #282    
              Old August 19th, 2016 (7:19 AM).
              NewDenverCity's Avatar
              NewDenverCity NewDenverCity is offline
                 
                Join Date: Apr 2014
                Location: Antarctica
                Gender: Male
                Nature: Calm
                Posts: 329
                Quote:
                Originally Posted by Bsantosh909 View Post
                Does it means if I replace the first ability with airlock then i should replace
                cmp r0, #0x4D with
                cmp r0, #0x1
                Yes but I do not recommend replacing abilities. It's easier to add new ones, otherwise the new one you added will have both the effect of the ability you added and the one you replaced.
                Reply With Quote
                  #283    
                Old August 19th, 2016 (11:41 AM).
                bynine's Avatar
                bynine bynine is offline
                   
                  Join Date: Jan 2016
                  Posts: 55
                  Quote:
                  Originally Posted by Bsantosh909 View Post
                  Does it means if I replace the first ability with airlock then i should replace
                  cmp r0, #0x4D with
                  cmp r0, #0x1
                  you would find the routine you're looking for and replace the hex it's checking for with the hex you want it to check for. if your new ability is at 4E (which in the rom would be the ability after air lock - i'm assuming you know how to insert abilities) then find the hex it's checking for and replace the existing hex with that.
                  Reply With Quote
                    #284    
                  Old August 19th, 2016 (6:31 PM). Edited August 22nd, 2016 by Spherical Ice.
                  Froosty's Avatar
                  Froosty Froosty is offline
                  The_Learner
                     
                    Join Date: Sep 2014
                    Location: Somewhere in this world.
                    Age: 20
                    Gender: Male
                    Nature: Brave
                    Posts: 541
                    Quote:
                    Originally Posted by NewDenverCity View Post
                    Yes but I do not recommend replacing abilities. It's easier to add new ones, otherwise the new one you added will have both the effect of the ability you added and the one you replaced.
                    I was just trying to know about but not actually replace.
                    I added a new ability that is normalize(r) that made every move normal type but when the pokemon with this ability goes to battle then the game restarts!! any idea about it???

                    Quote:
                    Originally Posted by bynine View Post
                    you would find the routine you're looking for and replace the hex it's checking for with the hex you want it to check for. if your new ability is at 4E (which in the rom would be the ability after air lock - i'm assuming you know how to insert abilities) then find the hex it's checking for and replace the existing hex with that.
                    I have expanded the ability table but still i am facing problem with adding the new abilities


                    I added a new ability that is normalize(r) that made every move normal type but when the pokemon with this ability goes to battle then the game restarts!! any idea about it???
                    Reply With Quote
                      #285    
                    Old August 20th, 2016 (12:23 AM).
                    MrDollSteak's Avatar
                    MrDollSteak MrDollSteak is offline
                    Formerly known as 11bayerf1
                       
                      Join Date: Dec 2008
                      Location: Hong Kong
                      Age: 23
                      Gender: Male
                      Posts: 843
                      Quote:
                      Originally Posted by Bsantosh909 View Post
                      I have expanded the ability table but still i am facing problem with adding the new abilities


                      I added a new ability that is normalize(r) that made every move normal type but when the pokemon with this ability goes to battle then the game restarts!! any idea about it???
                      Don't double post please. It's because you've clearly made a mistake with the routine.
                      __________________
                      Reply With Quote
                        #286    
                      Old August 20th, 2016 (12:52 AM). Edited September 6th, 2016 by Froosty.
                      Froosty's Avatar
                      Froosty Froosty is offline
                      The_Learner
                         
                        Join Date: Sep 2014
                        Location: Somewhere in this world.
                        Age: 20
                        Gender: Male
                        Nature: Brave
                        Posts: 541
                        Quote:
                        Originally Posted by MrDollSteak View Post
                        Sorry for the long delay, but here are the Type Change Abilities! Credits to Kleenexfeu for the original routines, I've just optimised them and added Normalize.

                        Normalize, Refrigerate, Pixilate and Aerilate

                        Spoiler:
                        Fire Red
                        Spoiler:
                        Code:
                        .text
                        .align 2
                        .thumb
                        .thumb_func
                        .global typechangeabilities
                        
                        BufferAbility:
                        	mov r0, r6
                        	add r0, #0x20
                        	ldrb r1, [r0]
                        NormalCheck:
                        	mov r0, r9
                        	cmp r0, #0x0
                        	bne NormalizeCheck
                        RefrigerateCheck:
                        	cmp r1, #0xAF
                        	bne PixilateCheck
                        Refrigerate:
                        	mov r0, #0xF
                        	b StoreType
                        PixilateCheck:
                        	cmp r1, #0xB7
                        	bne AerilateCheck
                        Pixilate:
                        	mov r0, #0x17
                        	b StoreType
                        AerilateCheck:
                        	cmp r1, #0xB9
                        	bne Return
                        Aerilate:
                        	mov r0, #0x2
                        StoreType:
                        	mov r9, r0
                        	ldr r0, .ChangeTypeLoc
                        	ldr r1, [r0]
                        	add r1, #0x13
                        	ldrb r1, [r1]
                        	mov r2, #0x3F
                        	and r2, r1
                        	cmp r2, #0x0
                        	bne Return
                        	mov r2, r9
                        	strb r2, [r1]
                        Boost:
                        	mov r0, r8
                        	mov r1, #0xA7
                        	mul r0, r1
                        	lsr r0, #0x7
                        	mov r8, r0
                        	mul r7, r1
                        	lsr r7, #0x7
                        	b Return
                        NormalizeCheck:
                        	cmp r1, #0x61
                        	bne Return
                        Normalize:
                        	mov r0, #0x0
                        	mov r9, r0
                        Return:
                        	ldr r0, [sp, #0x4]
                        	ldrh r0, [r0, #0xA]
                        	str r0, [sp, #0x18]
                        	ldrh r0, [r6, #0x2E]
                        	cmp r0, #0xAF
                        	bne NoEnigmaBerry
                        	ldr r1, .Return
                        	bx r1
                        NoEnigmaBerry:
                        	ldr r0, .Return2
                        	bx r0
                        
                        .align 2
                        .ChangeTypeLoc: .word 0x02023FE8
                        .Return: .word 0x0803ED87
                        .Return2: .word 0x0803EDA1
                        
                        Insert 01 48 00 47 00 00 xx+1 xx xx 08 at 0803ED7A

                        Emerald
                        Spoiler:
                        Code:
                        .text
                        .align 2
                        .thumb
                        .thumb_func
                        .global typechangeabilities
                        
                        BufferAbility:
                        	mov r0, r6
                        	add r0, #0x20
                        	ldrb r1, [r0]
                        NormalCheck:
                        	mov r0, r10
                        	cmp r0, #0x0
                        	bne NormalizeCheck
                        RefrigerateCheck:
                        	cmp r1, #0xAF
                        	bne PixilateCheck
                        Refrigerate:
                        	mov r0, #0xF
                        	b StoreType
                        PixilateCheck:
                        	cmp r1, #0xB7
                        	bne AerilateCheck
                        Pixilate:
                        	mov r0, #0x17
                        	b StoreType
                        AerilateCheck:
                        	cmp r1, #0xB9
                        	bne Return
                        Aerilate:
                        	mov r0, #0x2
                        StoreType:
                        	mov r10, r0
                        	ldr r0, .ChangeTypeLoc
                        	ldr r1, [r0]
                        	add r1, #0x13
                        	ldrb r1, [r1]
                        	mov r2, #0x3F
                        	and r2, r1
                        	cmp r2, #0x0
                        	bne Return
                        	mov r2, r10
                        	strb r2, [r1]
                        Boost:
                        	mov r0, r8
                        	mov r1, #0xA7
                        	mul r0, r1
                        	lsr r0, #0x7
                        	mov r8, r0
                        	mul r7, r1
                        	lsr r7, #0x7
                        	b Return
                        NormalizeCheck:
                        	cmp r1, #0x61
                        	bne Return
                        Normalize:
                        	mov r0, #0x0
                        	mov r10, r0
                        Return:
                        	ldr r0, [sp, #0x4]
                        	ldrh r0, [r0, #0xA]
                        	str r0, [sp, #0x1C]
                        	ldrh r0, [r6, #0x2E]
                        	cmp r0, #0xAF
                        	bne NoEnigmaBerry
                        	ldr r1, .Return
                        	bx r1
                        NoEnigmaBerry:
                        	ldr r0, .Return2
                        	bx r0
                        
                        .align 2
                        .ChangeTypeLoc: .word 0x0202449C
                        .Return: .word 0x0806961B
                        .Return2: .word 0x08069635
                        
                        Insert 01 48 00 47 00 0 xx+1 xx xx 08 at 0806960E
                        I just wanted to ask if this single asm will work for all the abilitied named in this post???
                        If i just place the pointer and add names of the abilities will all work ???




                        Quote:
                        Originally Posted by MrDollSteak View Post
                        Ice Body is written up at the moment but it's part of a huge set of routines so it might be a while. Magician I haven't looked into but I imagine it can go into the table that KDS did for the Life Orb thing.

                        So the Speed and Priority abilities are something I've had written up for awhile but since edited because of KDS and Kleenex's rewrite of the Turn Order Loader. This routine has new items included in it as well, and a few moves such as Trick Room and Tailwind.

                        Prankster, Gale Wings, Stall, Sand Rush, Slow Start and Quick Feet

                        Spoiler:
                        Fire Red
                        Spoiler:
                        Code:
                        .text
                        .align 2
                        .thumb
                        .thumb_func
                        .global TurnOrderLoader
                        .org 0x14CD8
                        
                        Main:
                        	push {r4-r7, lr}
                        	mov r7, r10
                        	mov r6, r9
                        	mov r5, r8
                        	push {r5-r7}
                        	add sp, #0x04
                        	lsl r0, r0, #0x18
                        	lsr r0, r0, #0x18
                        	mov r9, r0
                        	lsl r1, r1, #0x18
                        	lsr r1, r1, #0x18
                        	mov r10, r1
                        	mov r0, #0x0
                        	str r0, [sp, #0x0]
                        
                        #r9=UserBank
                        #r10=TargetBank
                        
                        CheckTurn:
                        	cmp r2, #0x0
                        	bne BracketCalc
                        PriorityCalc:
                        	mov r0, r9
                        	bl PriorityBL
                        	lsl r0, r0, #0x18
                        	asr r3, r0, #0x18
                        	mov r8, r3
                        	mov r0, r10
                        	bl PriorityBL
                        	lsl r0, r0, #0x18
                        	asr r4, r0, #0x18
                        	mov r3, r8
                        	cmp r3, r4
                        	beq BracketCalc
                        	cmp r3, r4
                        	bge Exit @FirstBankGoesFirst
                        	mov r2, #0x1
                        	str r2, [sp, #0x0]
                        	b Exit @SecondBankGoesFirst
                        BracketCalc:
                        	mov r0, r9
                        	bl BracketBL
                        	mov r8, r0
                        	mov r0, r10
                        	bl BracketBL
                        	mov r4, r0
                        	mov r3, r8
                        	cmp r3, r4
                        	beq SpeedCalc
                        	cmp r3, r4
                        	bge Exit @FirstBankGoesFirst
                        	mov r2, #0x1
                        	str r2, [sp, #0x0]
                        	b Exit @SecondBankGoesFirst
                        SpeedCalc:
                        	mov r0, r9
                        	bl SpeedBL
                        	mov r8, r0
                        	mov r0, r10
                        	bl SpeedBL
                        	mov r4, r0
                        	mov r3, r8
                        	cmp r3, r4
                        	bne TrickRoomCheck
                        	bl 0x044EC8
                        	mov r1, #0x1
                        	and r0, r1
                        	cmp r0,	#0x0
                        	bne Exit
                        	mov r2, #0x2 @SpeedTie
                        	str r2, [sp, #0x0]
                        	b Exit
                        TrickRoomCheck:
                        	ldr r0, .TrickRoomLoc
                        	ldrb r0, [r0]
                        	cmp r0, #0x0
                        	beq SpeedCheck
                        TrickRoom:
                        	mov r8, r3
                        	mov r3, r4
                        	mov r4, r8
                        SpeedCheck:
                        	cmp r3, r4
                        	bcs Exit @FirstBankGoesFirst
                        	mov r2, #0x1
                        	str r2, [sp, #0x0]
                        Exit:
                        	ldr r0, [sp, #0x0]
                        	add sp, #0x4
                        	pop {r3-r5}
                        	mov r8, r3
                        	mov r9, r4
                        	mov r10, r5
                        	pop {r4-r7}
                        	pop {r1}
                        	bx r1
                        
                        .align 2
                        .TrickRoomLoc: .word 0x02TRTRTR
                        
                        .align 2
                        
                        PriorityBL:
                        	mov r3, r0
                        LoadMenuChoice:
                        	ldr r0, .MenuChoiceLoc
                        	add r1, r3, r0
                        	mov r0, #0x0
                        	ldrb r1, [r1]
                        	cmp r1, #0x0
                        	bne Return
                        FightOptionChosen:
                        	ldr r0, .ProtectStructure
                        	lsl r1, r3, #0x4
                        	add r1, r1, r0
                        	ldrb r0, [r1]
                        	lsl r0, r0, #0x1D
                        	cmp r0, #0x0
                        	bge LoadMoveIndex
                        Struggle:
                        	mov r4, #0xA5
                        	b BufferMoveData
                        LoadMoveIndex:
                        	ldr r0, .Pointer
                        	ldr r0, [r0, #0x0]
                        	add r0, r3
                        	add r0, #0x80
                        	ldrb r0, [r0] @MoveSlotChosen
                        	lsl r0, r0, #0x1
                        	mov r1, #0x58
                        	mul r1, r3
                        	add r0, r0, r1
                        	ldr r1, .BattleData
                        	add r0, r0, r1
                        	ldrh r4, [r0, #0xC]
                        BufferMoveData:
                        	ldr r2, .MoveData
                        	lsl r0, r4, #0x1
                        	add r0, r0, r4
                        	lsl r0, r0, #0x2
                        	add r4, r0, r2
                        BufferBattleData:
                        	ldr r0, .BattleData
                        	add r0, #0x20
                        	mov r1, #0x58
                        	mul r1, r3
                        	add r0, r0, r1
                        	ldrb r1, [r0]
                        	mov r0, #0x0
                        PranksterCheck:
                        	cmp r1, #0x9F
                        	bne GaleWingsCheck
                        Prankster:
                        	ldrb r1, [r4, #0xA]
                        	cmp r1, #0x2
                        	bne LoadMovePriority
                        	mov r0, #0x1
                        	b LoadMovePriority
                        GaleWingsCheck:
                        	cmp r1, #0xB2
                        	bne LoadMovePriority
                        Galewings:
                        	ldrb r1, [r4, #0x2]
                        	cmp r1, #0x2
                        	bne LoadMovePriority
                        	mov r0, #0x1
                        LoadMovePriority:
                        	ldrb r1, [r4, #0x7]
                        	add r0, r0, r1
                        Return:
                        	bx lr
                        
                        .align 2
                        .MenuChoiceLoc: .word 0x02023D7C
                        .ProtectStructure: .word 0x02023E8C
                        .Pointer: .word 0x02023FE8
                        .BattleData: .word 0x02023BE4
                        .MoveData: .word 0x08250C04
                        
                        .align 2
                        
                        BracketBL:
                        	push {lr}
                        	mov r3, r0
                        	mov r1, #0x58
                        	ldr r0, .BattleDataItem
                        	mul r1, r3
                        	add r4, r0, r1
                        CheckItem:
                        	ldrh r0, [r4, #0xE]
                        	cmp r0, #0xAF
                        	bne LoadItemEffect
                        EngimaBerry:
                        	ldr r1, .EnigmaRamLoc
                        	lsl r0, r3, #0x3
                        	sub r0, r0, r3
                        	lsl r0, r0, #0x2
                        	add r0, r0, r1
                        	ldrb r6, [r0, #0x7]
                        	ldrb r5, [r0, #0x1A]
                        	b QuickClawCheck
                        LoadItemEffect:
                        	bl 0x9A924
                        	lsl r0, r0, #0x18
                        	lsl r6, r0, #0x18
                        	ldrh r0, [r4, #0xE]
                        	bl 0x9A948
                        	lsl r0, r0, #0x18
                        	lsl r5, r0, #0x18
                        QuickClawCheck:
                        	cmp r6, #0x1A
                        	bne CustapBerryCheck
                        QuickClawActivationCalc:
                        	ldr r0, .RandomLoc
                        	ldrh r7, [r0]
                        	lsl r0, r5, #0x10
                        	sub r0, r0, r5
                        	mov r1, #0x64
                        	bl 0x1E4018
                        	cmp r7, r0
                        	bge StallCheck
                        	mov r7, #0x1
                        	b StoreBracket
                        CustapBerryCheck:
                        	cmp r6, #0x4D
                        	bne LaggingTailCheck
                        CustapBerry:
                        CheckHP:
                        	ldrh r0, [r4, #0x8]
                        	ldrh r1, [r4, #0xC]
                        	lsl r1, r1, #0x2
                        	cmp r0, r1
                        	bgt StallCheck
                        SetRamLoc:
                        	mov r7, #0x1
                        	ldr r0, .CustapBerryLoc
                        	strb r7, [r0]
                        	b StoreBracket
                        LaggingTailCheck:
                        	cmp r6, #0x4A
                        	bne StallCheck
                        LaggingTail:
                        	mov r0, #0x2
                        	neg r7, r0
                        	b StoreBracket
                        StallCheck:
                        	mov r7, #0x0
                        	ldrb r0, [r4]
                        	cmp r0, #0x65
                        	bne StoreBracket
                        Stall:
                        	mov r0, #0x1
                        	neg r7, r0
                        StoreBracket:
                        	mov r0, r7
                        PopRegister:
                        	pop {r1}
                        	bx r1
                        	
                        .align 2
                        .BattleDataItem: .word 0x2023C04
                        .EnigmaRamLoc: .word 0x2023F54
                        .RandomLoc: .word 0x2023E80
                        .CustapBerryLoc: .word 0x02CCCCCC
                        
                        .align 2
                        
                        SpeedBL:
                        	push {lr}
                        	add sp, #-0x4
                        	mov r7, r0
                        	mov r5, #0x58
                        	ldr r6, .BattleData2
                        	mul r5, r7
                        	add r6, r5, r6
                        	mov r5, #0x1
                        	str r0, [sp, #0x0]
                        ApplyStatBoost:
                        	ldrh r5, [r6, #0x6]
                        	ldr r2, .StatModTable
                        	ldrb r1, [r6, #0x1B]
                        	lsl r1, r1, #0x1
                        	add r2, r1, r2
                        	ldrb r0, [r2]
                        	mul r0, r5
                        	ldrb r1, [r2, #0x1]
                        	bl 0x1E4018
                        	mov r5, r0
                        CloudNineCheck:
                        	mov r0, #0x13
                        	mov r1, #0x0
                        	mov r2, #0xD
                        	mov r3, #0x0
                        	bl 0x19F18
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	bne NoWeather
                        AirLockCheck:
                        	mov r0, #0x0
                        	str r0, [sp, #0x0] 
                        	mov r0, #0x13
                        	mov r1, #0x0
                        	mov r2, #0x4D
                        	mov r3, #0x0
                        	bl 0x19F18
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	bne NoWeather
                        LoadWeather:
                        	ldr r4, .WeatherLoc
                        	ldrh r4, [r4]
                        	add r2, r2, r6
                        	add r2, #0x20
                        	ldrb r2, [r2]
                        RainCheck:
                        	mov r0, #0x7
                        	and r0, r4
                        	cmp r0, #0x0
                        	beq SunCheck
                        SwiftSwimCheck:
                        	cmp r2, #0x21
                        	beq WeatherBoost
                        SunCheck:
                        	mov r0, #0x60
                        	and r0, r4
                        	cmp r0, #0x0
                        	beq SandstormCheck
                        ChlorophyllCheck:
                        	cmp r2, #0x22
                        	beq WeatherBoost
                        SandstormCheck:
                        	mov r0, #0x18
                        	and r0, r4
                        	cmp r0, #0x0
                        	beq NoWeather
                        SandRushCheck:
                        	cmp r2, #0x93
                        	bne NoWeather
                        WeatherBoost:
                        	lsl r5, r5, #0x1
                        NoWeather:
                        	mov r2, r6
                        	add r2, #0x20
                        	ldrb r2, [r2]
                        SlowStartCheck:
                        	cmp r2, #0x71
                        	bne TailwindCheck
                        	ldr r0, .SlowStartLoc
                        	add r0, r0, r7
                        CheckTurnCounter:
                        	ldrb r0, [r0, #0x0]
                        	cmp r0, #0x0
                        	beq TailwindCheck
                        	lsr r5, r5, #0x1
                        TailwindCheck:
                        	ldr r0, .TailwindAddr
                        	cmp r7, #0x1
                        	beq EnemyTailwind
                        	cmp r7, #0x3
                        	beq EnemyTailwind
                        PlayerTailwind:
                        	b CheckFlag 
                        EnemyTailwind:
                        	add r0, #0x1
                        CheckFlag:
                        	ldrb r0, [r0, #0x0]
                        	cmp r0, #0x0
                        	beq CheckItem2
                        	lsl r5, r5, #0x1
                        CheckItem2:
                        	ldrh r0, [r6, #0x2e]
                        	cmp r0, #0xAF
                        	bne LoadItemEffect2
                        EnigmaBerry2:
                        	ldr r1, .EnigmaRamLoc2
                        	lsl r0, r7, #0x3
                        	sub r0, r0, r3
                        	lsl r0, r0, #0x2
                        	add r0, r0, r1
                        	ldrb r0, [r0, #0x7]
                        	b MachoBraceCheck
                        LoadItemEffect2:
                        	bl 0x9A924
                        	lsl r0, r0, #0x18
                        	lsr r0, r0, #0x18
                        MachoBraceCheck: 
                        	cmp r0, #0x18 
                        	bne IronBallCheck
                        	lsr r5, r5, #0x1
                        IronBallCheck:
                        	cmp r0, #0x47
                        	bne QuickPowderCheck
                        	lsr r5, r5, #0x1
                        QuickPowderCheck:
                        	cmp r0, #0x48
                        	bne ChoiceScarfCheck
                        	ldrh r0, [r6]
                        	cmp r0, #0x84
                        	bne ChoiceScarfCheck
                        	lsr r1, r5, #0x1
                        	add r5, r1, r5
                        ChoiceScarfCheck:
                        	cmp r0, #0x1D
                        	bne BadgeCheck
                        	bl 0x9A948
                        	lsl r0, r0, #0x18
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x2
                        	bne BadgeCheck
                        	lsr r0, r5, #0x1
                        	add r5, r0, r5
                        BadgeCheck:
                        	ldr r0, .BadgeLoc
                        	ldr r0, [r0]
                        	mov r1, #0x2
                        	and r0, r1
                        	cmp r0, #0x0
                        	bne StatusCheck
                        	ldr r0, .Flag
                        	bl 0x6E6D0
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	beq StatusCheck
                        	mov r0, r7
                        	bl 0x751C4
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	bne StatusCheck
                        	mov r0, #0x6E
                        	mul r0, r5
                        	mov r1, #0x64
                        	bl 0x1E460C
                        	mov r5, r0
                        StatusCheck:
                        	ldr r0, [r6, #0x4c]
                        	add r6, #0x20
                        	ldrb r1, [r6, #0x0]
                        	cmp r1, #0x9B
                        	bne ParalysisCheck
                        QuickFeetCheck:
                        	cmp r0, #0x0
                        	beq ReturnSpeed
                        	lsl r5, r5, #0x1
                        	b ReturnSpeed
                        ParalysisCheck:
                        	mov r1, #0x40
                        	and r0, r1
                        	cmp r0, #0x0
                        	beq ReturnSpeed
                        	lsr r5, r5, #0x2
                        ReturnSpeed:
                        	mov r0, r5
                        	add sp, #0x4
                        	pop {r1}
                        	bx r1
                        
                        .align 2
                        .BattleData2: .word 0x02023BE4
                        .StatModTable: .word 0x0825DEAD
                        .WeatherLoc: .word 0x02023F1C
                        .SlowStartLoc: .word 0x02SSSSSS
                        .TailwindAddr: .word 0x02TTTTTT
                        .EnigmaRamLoc2: .word 0x02023F54
                        .BadgeLoc: .word 0x02022B4C
                        .Flag: .word 0x00000822
                        This routine replaces the entire Turn Order calculation to make it more efficient and to work with Gyro Ball and Electro Ball. The locations for Trick Room, Custap Berry, Slow Start and Tailwind refer to free ram locations that you allocate yourself. The one for Slow Start must be the same as the other routines for the ability.

                        Emerald
                        Spoiler:
                        Code:
                        .text
                        .align 2
                        .thumb
                        .thumb_func
                        .global TurnOrderLoader
                        .org 0x3CF10
                        
                        Main:
                        	push {r4-r7, lr}
                        	mov r7, r10
                        	mov r6, r9
                        	mov r5, r8
                        	push {r5-r7}
                        	add sp, #-0x4
                        	lsl r0, r0, #0x18
                        	lsr r0, r0, #0x18
                        	mov r9, r0
                        	lsl r1, r1, #0x18
                        	lsr r1, r1, #0x18
                        	mov r10, r1
                        	mov r0, #0x0
                        	str r0, [sp, #0x0]
                        
                        #r9=UserBank
                        #r10=TargetBank
                        
                        CheckTurn:
                        	cmp r2, #0x0
                        	bne BracketCalc
                        PriorityCalc:
                        	mov r0, r9
                        	bl PriorityBL
                        	lsl r0, r0, #0x18
                        	asr r3, r0, #0x18
                        	mov r8, r3
                        	mov r0, r10
                        	bl PriorityBL
                        	lsl r0, r0, #0x18
                        	asr r4, r0, #0x18
                        	mov r3, r8
                        	cmp r3, r4
                        	beq BracketCalc
                        	cmp r3, r4
                        	bge Exit @FirstBankGoesFirst
                        	mov r2, #0x1
                        	str r2, [sp, #0x0]
                        	b Exit @SecondBankGoesFirst
                        BracketCalc:
                        	mov r0, r9
                        	bl BracketBL
                        	mov r8, r0
                        	mov r0, r10
                        	bl BracketBL
                        	mov r4, r0
                        	mov r3, r8
                        	cmp r3, r4
                        	beq SpeedCalc
                        	cmp r3, r4
                        	bge Exit @FirstBankGoesFirst
                        	mov r2, #0x1
                        	str r2, [sp, #0x0]
                        	b Exit @SecondBankGoesFirst
                        SpeedCalc:
                        	mov r0, r9
                        	bl SpeedBL
                        	mov r8, r0
                        	mov r0, r10
                        	bl SpeedBL
                        	mov r4, r0
                        	mov r3, r8
                        	cmp r3, r4
                        	bne TrickRoomCheck
                        	bl 0x6F5CC
                        	mov r1, #0x1
                        	and r0, r1
                        	cmp r0,	#0x0
                        	bne Exit
                        	mov r2, #0x2 @SpeedTie
                        	str r2, [sp, #0x0]
                        	b Exit
                        TrickRoomCheck:
                        	ldr r0, .TrickRoomLoc
                        	ldrb r0, [r0]
                        	cmp r0, #0x0
                        	beq SpeedCheck
                        TrickRoom:
                        	mov r8, r3
                        	mov r3, r4
                        	mov r4, r8
                        SpeedCheck:
                        	cmp r3, r4
                        	bcs Exit @FirstBankGoesFirst
                        	mov r2, #0x1
                        	str r2, [sp, #0x0]
                        Exit:
                        	ldr r0, [sp, #0x0]
                        	add sp, #0x4
                        	pop {r3-r5}
                        	mov r8, r3
                        	mov r9, r4
                        	mov r10, r5
                        	pop {r4-r7}
                        	pop {r1}
                        	bx r1
                        
                        .align 2
                        .TrickRoomLoc: .word 0x02TRTRTR
                        
                        .align 2
                        
                        PriorityBL:
                        	mov r3, r0
                        LoadMenuChoice:
                        	ldr r0, .MenuChoiceLoc
                        	add r1, r3, r0
                        	mov r0, #0x0
                        	ldrb r1, [r1]
                        	cmp r1, #0x0
                        	bne Return
                        FightOptionChosen:
                        	ldr r0, .ProtectStructure
                        	lsl r1, r3, #0x4
                        	add r1, r1, r0
                        	ldrb r0, [r1]
                        	lsl r0, r0, #0x1D
                        	cmp r0, #0x0
                        	bge LoadMoveIndex
                        Struggle:
                        	mov r4, #0xA5
                        	b BufferMoveData
                        LoadMoveIndex:
                        	ldr r0, .Pointer
                        	ldr r0, [r0, #0x0]
                        	add r0, r3
                        	add r0, #0x80
                        	ldrb r0, [r0] @MoveSlotChosen
                        	lsl r0, r0, #0x1
                        	mov r1, #0x58
                        	mul r1, r3
                        	add r0, r0, r1
                        	ldr r1, .BattleData
                        	add r0, r0, r1
                        	ldrh r4, [r0, #0xC]
                        BufferMoveData:
                        	ldr r2, .MoveData
                        	lsl r0, r4, #0x1
                        	add r0, r0, r4
                        	lsl r0, r0, #0x2
                        	add r4, r0, r2
                        BufferBattleData:
                        	ldr r0, .BattleData
                        	add r0, #0x20
                        	mov r1, #0x58
                        	mul r1, r3
                        	add r0, r0, r1
                        	ldrb r1, [r0]
                        	mov r0, #0x0
                        PranksterCheck:
                        	cmp r1, #0x9F
                        	bne GaleWingsCheck
                        Prankster:
                        	ldrb r1, [r4, #0xA]
                        	cmp r1, #0x2
                        	bne LoadMovePriority
                        	mov r0, #0x1
                        	b LoadMovePriority
                        GaleWingsCheck:
                        	cmp r1, #0xB2
                        	bne LoadMovePriority
                        Galewings:
                        	ldrb r1, [r4, #0x2]
                        	cmp r1, #0x2
                        	bne LoadMovePriority
                        	mov r0, #0x1
                        LoadMovePriority:
                        	ldrb r1, [r4, #0x7]
                        	add r0, r0, r1
                        Return:
                        	bx lr
                        
                        .align 2
                        .MenuChoiceLoc: .word 0x0202421C
                        .ProtectStructure: .word 0x0202433C
                        .Pointer: .word 0x0202449C
                        .BattleData: .word 0x02024084
                        .MoveData: .word 0x0831C198
                        
                        .align 2
                        
                        BracketBL:
                        	push {lr}
                        	mov r3, r0
                        	mov r1, #0x58
                        	ldr r0, .BattleDataItem
                        	mul r1, r3
                        	add r4, r0, r1
                        CheckItem:
                        	ldrh r0, [r4, #0xE]
                        	cmp r0, #0xAF
                        	bne LoadItemEffect
                        EngimaBerry:
                        	ldr r1, .EnigmaRamLoc
                        	lsl r0, r3, #0x3
                        	sub r0, r0, r3
                        	lsl r0, r0, #0x2
                        	add r0, r0, r1
                        	ldrb r6, [r0, #0x7]
                        	ldrb r5, [r0, #0x1A]
                        	b QuickClawCheck
                        LoadItemEffect:
                        	bl 0xD74DC
                        	lsl r0, r0, #0x18
                        	lsl r6, r0, #0x18
                        	ldrh r0, [r4, #0xE]
                        	bl 0xD7500
                        	lsl r0, r0, #0x18
                        	lsl r5, r0, #0x18
                        QuickClawCheck:
                        	cmp r6, #0x1A
                        	bne CustapBerryCheck
                        QuickClawActivationCalc:
                        	ldr r0, .RandomLoc
                        	ldrh r7, [r0]
                        	lsl r0, r5, #0x10
                        	sub r0, r0, r5
                        	mov r1, #0x64
                        	bl 0x2E7540
                        	cmp r7, r0
                        	bge StallCheck
                        	mov r7, #0x1
                        	b StoreBracket
                        CustapBerryCheck:
                        	cmp r6, #0x4D
                        	bne LaggingTailCheck
                        CustapBerry:
                        CheckHP:
                        	ldrh r0, [r4, #0x8]
                        	ldrh r1, [r4, #0xC]
                        	lsl r1, r1, #0x2
                        	cmp r0, r1
                        	bgt StallCheck
                        SetRamLoc:
                        	mov r7, #0x1
                        	ldr r0, .CustapBerryLoc
                        	strb r7, [r0]
                        	b StoreBracket
                        LaggingTailCheck:
                        	cmp r6, #0x4A
                        	bne StallCheck
                        LaggingTail:
                        	mov r0, #0x2
                        	neg r7, r0
                        	b StoreBracket
                        StallCheck:
                        	mov r7, #0x0
                        	ldrb r0, [r4]
                        	cmp r0, #0x65
                        	bne StoreBracket
                        Stall:
                        	mov r0, #0x1
                        	neg r7, r0
                        StoreBracket:
                        	mov r0, r7
                        PopRegister:
                        	pop {r1}
                        	bx r1
                        	
                        .align 2
                        .BattleDataItem: .word 0x020240A4
                        .EnigmaRamLoc: .word 0x02024404
                        .RandomLoc: .word 0x02024330
                        .CustapBerryLoc: .word 0x02CCCCCC
                        
                        .align 2
                        
                        SpeedBL:
                        	push {lr}
                        	add sp, #-0x4
                        	mov r7, r0
                        	mov r5, #0x58
                        	ldr r6, .BattleData2
                        	mul r5, r7
                        	add r6, r5, r6
                        	mov r5, #0x1
                        	str r0, [sp, #0x0]
                        ApplyStatBoost:
                        	ldrh r5, [r6, #0x6]
                        	ldr r2, .StatModTable
                        	ldrb r1, [r6, #0x1B]
                        	lsl r1, r1, #0x1
                        	add r2, r1, r2
                        	ldrb r0, [r2]
                        	mul r0, r5
                        	ldrb r1, [r2, #0x1]
                        	bl 0x2E7540
                        	mov r5, r0
                        CloudNineCheck:
                        	mov r0, #0x13
                        	mov r1, #0x0
                        	mov r2, #0xD
                        	mov r3, #0x0
                        	bl 0x42828
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	bne NoWeather
                        AirLockCheck:
                        	mov r0, #0x0
                        	str r0, [sp, #0x0] 
                        	mov r0, #0x13
                        	mov r1, #0x0
                        	mov r2, #0x4D
                        	mov r3, #0x0
                        	bl 0x42828
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	bne NoWeather
                        LoadWeather:
                        	ldr r4, .WeatherLoc
                        	ldrh r4, [r4]
                        	add r2, r2, r6
                        	add r2, #0x20
                        	ldrb r2, [r2]
                        RainCheck:
                        	mov r0, #0x7
                        	and r0, r4
                        	cmp r0, #0x0
                        	beq SunCheck
                        SwiftSwimCheck:
                        	cmp r2, #0x21
                        	beq WeatherBoost
                        SunCheck:
                        	mov r0, #0x60
                        	and r0, r4
                        	cmp r0, #0x0
                        	beq SandstormCheck
                        ChlorophyllCheck:
                        	cmp r2, #0x22
                        	beq WeatherBoost
                        SandstormCheck:
                        	mov r0, #0x18
                        	and r0, r4
                        	cmp r0, #0x0
                        	beq NoWeather
                        SandRushCheck:
                        	cmp r2, #0x93
                        	bne NoWeather
                        WeatherBoost:
                        	lsl r5, r5, #0x1
                        NoWeather:
                        	mov r2, r6
                        	add r2, #0x20
                        	ldrb r2, [r2]
                        SlowStartCheck:
                        	cmp r2, #0x71
                        	bne TailwindCheck
                        	ldr r0, .SlowStartLoc
                        	add r0, r0, r7
                        CheckTurnCounter:
                        	ldrb r0, [r0, #0x0]
                        	cmp r0, #0x0
                        	beq TailwindCheck
                        	lsr r5, r5, #0x1
                        TailwindCheck:
                        	ldr r0, .TailwindAddr
                        	cmp r7, #0x1
                        	beq EnemyTailwind
                        	cmp r7, #0x3
                        	beq EnemyTailwind
                        PlayerTailwind:
                        	b CheckFlag 
                        EnemyTailwind:
                        	add r0, #0x1
                        CheckFlag:
                        	ldrb r0, [r0, #0x0]
                        	cmp r0, #0x0
                        	beq CheckItem2
                        	lsl r5, r5, #0x1
                        CheckItem2:
                        	ldrh r0, [r6, #0x2e]
                        	cmp r0, #0xAF
                        	bne LoadItemEffect2
                        EnigmaBerry2:
                        	ldr r1, .EnigmaRamLoc2
                        	lsl r0, r7, #0x3
                        	sub r0, r0, r3
                        	lsl r0, r0, #0x2
                        	add r0, r0, r1
                        	ldrb r0, [r0, #0x7]
                        	b MachoBraceCheck
                        LoadItemEffect2:
                        	bl 0xD74DC
                        	lsl r0, r0, #0x18
                        	lsr r0, r0, #0x18
                        MachoBraceCheck: 
                        	cmp r0, #0x18 
                        	bne IronBallCheck
                        	lsr r5, r5, #0x1
                        IronBallCheck:
                        	cmp r0, #0x47
                        	bne QuickPowderCheck
                        	lsr r5, r5, #0x1
                        QuickPowderCheck:
                        	cmp r0, #0x48
                        	bne ChoiceScarfCheck
                        	ldrh r0, [r6]
                        	cmp r0, #0x84
                        	bne ChoiceScarfCheck
                        	lsr r1, r5, #0x1
                        	add r5, r1, r5
                        ChoiceScarfCheck:
                        	cmp r0, #0x1D
                        	bne BadgeCheck
                        	bl 0xD7500
                        	lsl r0, r0, #0x18
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x2
                        	bne BadgeCheck
                        	lsr r0, r5, #0x1
                        	add r5, r0, r5
                        BadgeCheck:
                        	ldr r0, .BadgeLoc
                        	ldr r0, [r0]
                        	ldr r1, .BadgeCheck
                        	and r0, r1
                        	cmp r0, #0x0
                        	bne StatusCheck
                        	ldr r0, .Flag
                        	bl 0x9D790
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	beq StatusCheck
                        	mov r0, r7
                        	bl 0xA6A30
                        	lsl r0, r0, #0x18
                        	cmp r0, #0x0
                        	bne StatusCheck
                        	mov r0, #0x6E
                        	mul r0, r5
                        	mov r1, #0x64
                        	bl 0x2E7B68
                        	mov r5, r0
                        StatusCheck:
                        	ldr r0, [r6, #0x4c]
                        	add r6, #0x20
                        	ldrb r1, [r6, #0x0]
                        	cmp r1, #0x9B
                        	bne ParalysisCheck
                        QuickFeetCheck:
                        	cmp r0, #0x0
                        	beq ReturnSpeed
                        	lsl r5, r5, #0x1
                        	b ReturnSpeed
                        ParalysisCheck:
                        	mov r1, #0x40
                        	and r0, r1
                        	cmp r0, #0x0
                        	beq ReturnSpeed
                        	lsr r5, r5, #0x2
                        ReturnSpeed:
                        	mov r0, r5
                        	add sp, #0x4
                        	pop {r1}
                        	bx r1
                        
                        .align 2
                        .BattleData2: .word 0x02024084
                        .StatModTable: .word 0x08329D2E
                        .WeatherLoc: .word 0x020243CC
                        .SlowStartLoc: .word 0x02SSSSSS
                        .TailwindAddr: .word 0x02TTTTTT
                        .EnigmaRamLoc2: .word 0x02024404
                        .BadgeLoc: .word 0x02022FEC
                        .BadgeCheck: .word 0x023F0102
                        .Flag: .word 0x00000868
                        This routine replaces the entire Turn Order calculation to make it more efficient and to work with Gyro Ball and Electro Ball. The locations for Trick Room, Custap Berry, Slow Start and Tailwind refer to free ram locations that you allocate yourself. The one for Slow Start must be the same as the other routines for the ability.

                        If the command mov r10, r1 at the beginning of both routines is having trouble compiling, just set it to mov r0, r1, and once its inserted in your rom, change the hex manually of that section to 8A 46. It should be at 14CEE in Fire Red or 3CF26 in Emerald.
                        I am getting confused with these abilites pls!!
                        After I compile the asm codes and get the hex values of those what should i do???
                        Where should i insert them!
                        like in other abilities threat there is no
                        #insert hex hex hex XX XX XX 08 at pointer
                        where shall i insert it pls help
                        thanks in advance :)


                        Quote:
                        Originally Posted by MrDollSteak View Post
                        Sorry for the long delay, but here are the Type Change Abilities! Credits to Kleenexfeu for the original routines, I've just optimised them and added Normalize.

                        Normalize, Refrigerate, Pixilate and Aerilate

                        Spoiler:
                        Fire Red
                        Spoiler:
                        Code:
                        .text
                        .align 2
                        .thumb
                        .thumb_func
                        .global typechangeabilities
                        
                        BufferAbility:
                        	mov r0, r6
                        	add r0, #0x20
                        	ldrb r1, [r0]
                        NormalCheck:
                        	mov r0, r9
                        	cmp r0, #0x0
                        	bne NormalizeCheck
                        RefrigerateCheck:
                        	cmp r1, #0xAF
                        	bne PixilateCheck
                        Refrigerate:
                        	mov r0, #0xF
                        	b StoreType
                        PixilateCheck:
                        	cmp r1, #0xB7
                        	bne AerilateCheck
                        Pixilate:
                        	mov r0, #0x17
                        	b StoreType
                        AerilateCheck:
                        	cmp r1, #0xB9
                        	bne Return
                        Aerilate:
                        	mov r0, #0x2
                        StoreType:
                        	mov r9, r0
                        	ldr r0, .ChangeTypeLoc
                        	ldr r1, [r0]
                        	add r1, #0x13
                        	ldrb r1, [r1]
                        	mov r2, #0x3F
                        	and r2, r1
                        	cmp r2, #0x0
                        	bne Return
                        	mov r2, r9
                        	strb r2, [r1]
                        Boost:
                        	mov r0, r8
                        	mov r1, #0xA7
                        	mul r0, r1
                        	lsr r0, #0x7
                        	mov r8, r0
                        	mul r7, r1
                        	lsr r7, #0x7
                        	b Return
                        NormalizeCheck:
                        	cmp r1, #0x61
                        	bne Return
                        Normalize:
                        	mov r0, #0x0
                        	mov r9, r0
                        Return:
                        	ldr r0, [sp, #0x4]
                        	ldrh r0, [r0, #0xA]
                        	str r0, [sp, #0x18]
                        	ldrh r0, [r6, #0x2E]
                        	cmp r0, #0xAF
                        	bne NoEnigmaBerry
                        	ldr r1, .Return
                        	bx r1
                        NoEnigmaBerry:
                        	ldr r0, .Return2
                        	bx r0
                        
                        .align 2
                        .ChangeTypeLoc: .word 0x02023FE8
                        .Return: .word 0x0803ED87
                        .Return2: .word 0x0803EDA1
                        
                        Insert 01 48 00 47 00 00 xx+1 xx xx 08 at 0803ED7A

                        Emerald
                        Spoiler:
                        Code:
                        .text
                        .align 2
                        .thumb
                        .thumb_func
                        .global typechangeabilities
                        
                        BufferAbility:
                        	mov r0, r6
                        	add r0, #0x20
                        	ldrb r1, [r0]
                        NormalCheck:
                        	mov r0, r10
                        	cmp r0, #0x0
                        	bne NormalizeCheck
                        RefrigerateCheck:
                        	cmp r1, #0xAF
                        	bne PixilateCheck
                        Refrigerate:
                        	mov r0, #0xF
                        	b StoreType
                        PixilateCheck:
                        	cmp r1, #0xB7
                        	bne AerilateCheck
                        Pixilate:
                        	mov r0, #0x17
                        	b StoreType
                        AerilateCheck:
                        	cmp r1, #0xB9
                        	bne Return
                        Aerilate:
                        	mov r0, #0x2
                        StoreType:
                        	mov r10, r0
                        	ldr r0, .ChangeTypeLoc
                        	ldr r1, [r0]
                        	add r1, #0x13
                        	ldrb r1, [r1]
                        	mov r2, #0x3F
                        	and r2, r1
                        	cmp r2, #0x0
                        	bne Return
                        	mov r2, r10
                        	strb r2, [r1]
                        Boost:
                        	mov r0, r8
                        	mov r1, #0xA7
                        	mul r0, r1
                        	lsr r0, #0x7
                        	mov r8, r0
                        	mul r7, r1
                        	lsr r7, #0x7
                        	b Return
                        NormalizeCheck:
                        	cmp r1, #0x61
                        	bne Return
                        Normalize:
                        	mov r0, #0x0
                        	mov r10, r0
                        Return:
                        	ldr r0, [sp, #0x4]
                        	ldrh r0, [r0, #0xA]
                        	str r0, [sp, #0x1C]
                        	ldrh r0, [r6, #0x2E]
                        	cmp r0, #0xAF
                        	bne NoEnigmaBerry
                        	ldr r1, .Return
                        	bx r1
                        NoEnigmaBerry:
                        	ldr r0, .Return2
                        	bx r0
                        
                        .align 2
                        .ChangeTypeLoc: .word 0x0202449C
                        .Return: .word 0x0806961B
                        .Return2: .word 0x08069635
                        
                        Insert 01 48 00 47 00 0 xx+1 xx xx 08 at 0806960E
                        I tried it but none of the abilities work for me...
                        I have done every thing right!
                        is there anything special about these abilities???
                        Reply With Quote
                          #287    
                        Old September 6th, 2016 (5:30 AM).
                        NewDenverCity's Avatar
                        NewDenverCity NewDenverCity is offline
                           
                          Join Date: Apr 2014
                          Location: Antarctica
                          Gender: Male
                          Nature: Calm
                          Posts: 329
                          Quote:
                          Originally Posted by Bsantosh909 View Post
                          I tried it but none of the abilities work for me...
                          I have done every thing right!
                          is there anything special about these abilities???
                          Please stop spamming. You haven't done things right because those routines work, try again and reread his posts very carefully.
                          Reply With Quote
                            #288    
                          Old September 6th, 2016 (9:43 PM).
                          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
                            Quote:
                            Originally Posted by Bsantosh909 View Post
                            Is it bad to ask question ????

                            I am just trying to know what wrong I am doing and what else can be done??
                            Asking question isnt spamming at all!!
                            >_>:|
                            Hey friend, question is not a form of spam. But if each of your question is separated by a post then it may look like a spam. If you have added new question, you may edit the first post since no one has commented on it yet and insert EDIT so it can be understood that you have added/edited question.
                            __________________
                            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.
                            Reply With Quote
                              #289    
                            Old September 7th, 2016 (3:20 PM).
                            MrDollSteak's Avatar
                            MrDollSteak MrDollSteak is offline
                            Formerly known as 11bayerf1
                               
                              Join Date: Dec 2008
                              Location: Hong Kong
                              Age: 23
                              Gender: Male
                              Posts: 843
                              Quote:
                              Originally Posted by Bsantosh909 View Post
                              I just wanted to ask if this single asm will work for all the abilitied named in this post???
                              If i just place the pointer and add names of the abilities will all work ???

                              I am getting confused with these abilites pls!!
                              After I compile the asm codes and get the hex values of those what should i do???
                              Where should i insert them!
                              like in other abilities threat there is no
                              #insert hex hex hex XX XX XX 08 at pointer
                              where shall i insert it pls help
                              thanks in advance :)

                              I tried it but none of the abilities work for me...
                              I have done every thing right!
                              is there anything special about these abilities???
                              You need to compile the routines with an ASM editor. Insert the bin it generates into free space. Then point to it at the insert location+1. If it doesn't say insert xx xx xx +1 at the pointer its because it's being pasted directly over the original routine.
                              __________________
                              Reply With Quote
                                #290    
                              Old September 7th, 2016 (5:32 PM).
                              Froosty's Avatar
                              Froosty Froosty is offline
                              The_Learner
                                 
                                Join Date: Sep 2014
                                Location: Somewhere in this world.
                                Age: 20
                                Gender: Male
                                Nature: Brave
                                Posts: 541
                                Quote:
                                Originally Posted by MrDollSteak View Post
                                You need to compile the routines with an ASM editor. Insert the bin it generates into free space. Then point to it at the insert location+1. If it doesn't say insert xx xx xx +1 at the pointer its because it's being pasted directly over the original routine.
                                Thanks for the reply, I will take these words and check it out!
                                I have actually found such routines in many places so again thanks.
                                Reply With Quote
                                  #291    
                                Old September 12th, 2016 (2:13 AM).
                                Froosty's Avatar
                                Froosty Froosty is offline
                                The_Learner
                                   
                                  Join Date: Sep 2014
                                  Location: Somewhere in this world.
                                  Age: 20
                                  Gender: Male
                                  Nature: Brave
                                  Posts: 541
                                  Quote:
                                  Originally Posted by MrDollSteak View Post
                                  Good work Kleenexfeu! I've edited your routine to touch up the mistakes, as well as to optimise it, and finally port it to Fire Red.

                                  Protean

                                  Spoiler:
                                  Fire Red (credits to Kleenexfeu for the original Emerald routine)
                                  Spoiler:
                                  Code:
                                  .text
                                  .align 2
                                  .thumb
                                  .thumb_func
                                  .global protean
                                       
                                  AbilityBufferUser:
                                  	push {r0-r5}
                                  	ldr r0, .Bank
                                  	ldrb r0, [r0]
                                  	mov r1, #0x58
                                  	ldr r2, .BattleData
                                  	mul r0, r1
                                  	add r2, r0, r2
                                  	ldrb r0, [r2]
                                  ProteanCheck:
                                  	cmp r0, #0xA9
                                     	bne Return
                                  BufferType:
                                  	ldrb r0, [r2, #0x1]
                                  	ldrb r1, [r2, #0x2]
                                  CheckVariableTypeMoves:
                                  	ldr r4, .CheckTypeLoc
                                  	ldr r4, [r4]
                                  	ldrb r4, [r4, #0x13]
                                  	mov r5, #0x3F
                                  	and r4, r5
                                  	cmp r4, #0x0
                                  	beq CheckMove
                                  	b CheckSameType
                                  CheckMove:
                                  	ldr r3, .MoveIndex
                                  	ldrh r3, [r3]
                                  	cmp r3, #0xA5
                                  	beq Return
                                  GetMoveType:
                                  	ldr r4, .MoveData
                                  	mov r5, #0xC
                                  	mul r5, r3
                                  	add r4, r4, r5
                                  	ldrb r4, [r4, #0x2]
                                  CheckSameType:
                                  	cmp r0, r4
                                  	bne ChangeType
                                  	cmp r1, r4
                                  	beq Return
                                  ChangeType:
                                  	strb r4, [r2, #0x1]
                                  	strb r4, [r2, #0x2]
                                  	ldr r3, =0xFF0003FD
                                  	lsl r4, #0x10
                                  	add r3, r4
                                  	ldr r0, .BufferTypeLoc
                                  	str r3, [r0]
                                  BufferMessage:
                                  	mov r0, #0x49
                                  	ldr r1, .Bank
                                  	ldrb r1, [r1]
                                  	bl DisplayMessage
                                  Return:
                                  	pop {r0-r5}
                                  	ldrb r1, [r0]
                                  	str r2, [sp]
                                  	mov r0, #0x2
                                  	mov r2, #0x0
                                  	ldr r3, .Return
                                  	bx r3
                                  
                                  DisplayMessage:	
                                  	ldr r2, .DisplayMessageBL
                                  	bx r2
                                  
                                  .align 2
                                  
                                  .Bank:		.word 0x02023D6B
                                  .BattleData:	.word 0x02023C04
                                  .MoveIndex:	.word 0x02023D4A
                                  .CheckTypeLoc: .word 0x02023FE8
                                  .MoveData:	.word 0x8250C04
                                  .BufferTypeLoc:	.word 0x02022AB8
                                  .Return:	.word 0x0801D7E1
                                  .DisplayMessageBL: .word 0x080173AD
                                  
                                  *Insert 00 49 08 47 xx xx xx 08 at 1D7D8

                                  Emerald (credits to Kleenexfeu)
                                  Spoiler:
                                  Code:
                                  .text
                                  .align 2
                                  .thumb
                                  .thumb_func
                                  .global protean
                                       
                                  AbilityBufferUser:
                                  	push {r0-r5}
                                  	ldr r0, .Bank
                                  	ldrb r0, [r0]
                                  	mov r1, #0x58
                                  	ldr r2, .BattleData
                                  	mul r0, r1
                                  	add r2, r0, r2
                                  	ldrb r0, [r2]
                                  ProteanCheck:
                                  	cmp r0, #0xA9
                                     	bne Return
                                  BufferType:
                                  	ldrb r0, [r2, #0x1]
                                  	ldrb r1, [r2, #0x2]
                                  CheckVariableTypeMoves:
                                  	ldr r4, .CheckTypeLoc
                                  	ldr r4, [r4]
                                  	ldrb r4, [r4, #0x13]
                                  	mov r5, #0x3F
                                  	and r4, r5
                                  	cmp r4, #0x0
                                  	beq CheckMove
                                  	b CheckSameType
                                  CheckMove:
                                  	ldr r3, .MoveIndex
                                  	ldrh r3, [r3]
                                  	cmp r3, #0xA5
                                  	beq Return
                                  GetMoveType:
                                  	ldr r4, .MoveData
                                  	mov r5, #0xC
                                  	mul r5, r3
                                  	add r4, r4, r5
                                  	ldrb r4, [r4, #0x2]
                                  CheckSameType:
                                  	cmp r0, r4
                                  	bne ChangeType
                                  	cmp r1, r4
                                  	beq Return
                                  ChangeType:
                                  	strb r4, [r2, #0x1]
                                  	strb r4, [r2, #0x2]
                                  	ldr r3, =0xFF0003FD
                                  	lsl r4, #0x10
                                  	add r3, r4
                                  	ldr r0, .BufferTypeLoc
                                  	str r3, [r0]
                                  BufferMessage:
                                  	mov r0, #0x49
                                  	ldr r1, .Bank
                                  	ldrb r1, [r1]
                                  	bl DisplayMessage
                                  Return:
                                  	pop {r0-r5}
                                  	ldrb r1, [r0]
                                  	str r2, [sp]
                                  	mov r0, #0x2
                                  	mov r2, #0x0
                                  	ldr r3, .Return
                                  	bx r3
                                  
                                  DisplayMessage:	
                                  	ldr r2, .DisplayMessageBL
                                  	bx r2
                                  
                                  .align 2
                                  
                                  .Bank:		.word 0x0202420B
                                  .BattleData:	.word 0x020240A4
                                  .MoveIndex:	.word 0x020241EA
                                  .CheckTypeLoc: .word 0x0202449C
                                  .MoveData:	.word 0x831C898
                                  .BufferTypeLoc:	.word 0x02022F58
                                  .Return:	.word 0x0804607D
                                  .DisplayMessageBL: .word 0x0803F965
                                  
                                  *Insert 00 49 08 47 xx xx xx 08 at 46074
                                  sorry but this is not working for me!
                                  I had added new moves so i changed the move data accordingly,
                                  it even shows "pokemon transformed to some type"
                                  then the game freezes.
                                  should i need to change something else also If I have expanded and repointed the move table???
                                  pls reply
                                  __________________
                                  Want to talk with me regarding Rom-hacking ??? Want to get access to my works exclusive than anywhere else ???
                                  Click here to get in the discord server here where rom-hacking is a everyday talk and task.

                                  Want to showcase your hack on discord server ??? Click here to get the dask done.

                                  My works:
                                  TOOL: TL's Quick Enhancer
                                  TUTORIAL: Fire red habitat editing
                                  TUTORIAL: Fire red Transparent text-box


                                  | |
                                  Reply With Quote
                                    #292    
                                  Old September 13th, 2016 (10:52 AM).
                                  NewDenverCity's Avatar
                                  NewDenverCity NewDenverCity is offline
                                     
                                    Join Date: Apr 2014
                                    Location: Antarctica
                                    Gender: Male
                                    Nature: Calm
                                    Posts: 329
                                    Quote:
                                    Originally Posted by The_learner View Post
                                    sorry but this is not working for me!
                                    I had added new moves so i changed the move data accordingly,
                                    it even shows "pokemon transformed to some type"
                                    then the game freezes.
                                    should i need to change something else also If I have expanded and repointed the move table???
                                    pls reply
                                    Yes. Go down to the bottom of the routine and change the offset after .MoveData to the offset of your move table. This is common practice and I suggest looking over every routine for things like that before inserting.
                                    Reply With Quote
                                      #293    
                                    Old September 13th, 2016 (5:53 PM).
                                    Froosty's Avatar
                                    Froosty Froosty is offline
                                    The_Learner
                                       
                                      Join Date: Sep 2014
                                      Location: Somewhere in this world.
                                      Age: 20
                                      Gender: Male
                                      Nature: Brave
                                      Posts: 541
                                      Quote:
                                      Originally Posted by NewDenverCity View Post
                                      Yes. Go down to the bottom of the routine and change the offset after .MoveData to the offset of your move table. This is common practice and I suggest looking over every routine for things like that before inserting.
                                      I have changed the move data but it still freezes!
                                      I have changed almost everything in my rom(abilities tables, moves table, pokemon table and even type table)
                                      So apart from .Movedata Do I need to chamge anything else??
                                      __________________
                                      Want to talk with me regarding Rom-hacking ??? Want to get access to my works exclusive than anywhere else ???
                                      Click here to get in the discord server here where rom-hacking is a everyday talk and task.

                                      Want to showcase your hack on discord server ??? Click here to get the dask done.

                                      My works:
                                      TOOL: TL's Quick Enhancer
                                      TUTORIAL: Fire red habitat editing
                                      TUTORIAL: Fire red Transparent text-box


                                      | |
                                      Reply With Quote
                                        #294    
                                      Old September 14th, 2016 (5:34 AM).
                                      NewDenverCity's Avatar
                                      NewDenverCity NewDenverCity is offline
                                         
                                        Join Date: Apr 2014
                                        Location: Antarctica
                                        Gender: Male
                                        Nature: Calm
                                        Posts: 329
                                        Quote:
                                        Originally Posted by The_learner View Post
                                        I have changed the move data but it still freezes!
                                        I have changed almost everything in my rom(abilities tables, moves table, pokemon table and even type table)
                                        So apart from .Movedata Do I need to chamge anything else??
                                        No, but you should check yourself next time. Check the labels all the time because stuff that gets repointed like that gets overlooked a lot.
                                        Add the + 1 to the pointer to the routine, see if that works.
                                        Reply With Quote
                                          #295    
                                        Old September 21st, 2016 (7:08 AM).
                                        EdgeZard X's Avatar
                                        EdgeZard X EdgeZard X is offline
                                           
                                          Join Date: Sep 2015
                                          Nature: Lonely
                                          Posts: 35
                                          So, how does Sheer Force work, does it just check if a move has a secondary effect?

                                          If I were to give Dragon Pulse an effect (e.g. SpDef drop), would Sheer Force now boost it?
                                          __________________
                                          CHALA CHALLA KA HAPPY MEAL TIME!
                                          Reply With Quote
                                            #296    
                                          Old September 21st, 2016 (10:22 AM).
                                          NewDenverCity's Avatar
                                          NewDenverCity NewDenverCity is offline
                                             
                                            Join Date: Apr 2014
                                            Location: Antarctica
                                            Gender: Male
                                            Nature: Calm
                                            Posts: 329
                                            Quote:
                                            Originally Posted by EdgeZard X View Post
                                            So, how does Sheer Force work, does it just check if a move has a secondary effect?

                                            If I were to give Dragon Pulse an effect (e.g. SpDef drop), would Sheer Force now boost it?
                                            Sheer Force will boost the BP of the attack by 30% if it does damage. However, it will remove the secondary effect if it has one. For instance, Ember will be boosted by 30%, but the chance to burn will be removed. All secondary effects on the user that are negative, however, are not removed.
                                            Reply With Quote
                                              #297    
                                            Old October 8th, 2016 (12:10 AM). Edited November 2nd, 2016 by Xencleamas.
                                            Xencleamas's Avatar
                                            Xencleamas Xencleamas is offline
                                            Suddenly lurking in the shadows...
                                               
                                              Join Date: Feb 2014
                                              Location: Asgard
                                              Gender: Male
                                              Nature: Adamant
                                              Posts: 458
                                              Quote:
                                              Originally Posted by MrDollSteak View Post
                                              Lightningrod, Motor Drive, Dry Skin, Storm Drain and Sap Sipper
                                              The strings doesn't use the AI's name and ability (It uses your name and ability. Example: the opponent is Electivire with Lightningrod, then when I used any Electric-type move, it displays my Pokemon's name and ability instead of the AI's). I think instances of FD 13 B4 E7 00 FD 1B should be replaced by FD 10 B4 E7 00 FD 19 on all battle strings.

                                              In Storm Drain in double battles, after I use any Water attack on any target (exactly after the string message), the game crashes. And, this really messed up double battles.

                                              Quote:
                                              Originally Posted by MrDollSteak View Post
                                              Magic Guard
                                              Routine IV: Prevent Poison Damage (also contains Poison Heal)
                                              Routine V: Prevent Toxic Damage (also contains Poison Heal)
                                              After applying these routines, both poison and toxic damage deal knockout.
                                              __________________

                                              Xencleamas Untitled Pokémon Fan Game (Coming Soon!) Untitled Region (Coming Soon!)
                                              Reply With Quote
                                                #298    
                                              Old October 30th, 2016 (7:13 PM).
                                              PufferJumps's Avatar
                                              PufferJumps PufferJumps is offline
                                                 
                                                Join Date: Jul 2016
                                                Location: Philippines
                                                Gender: Male
                                                Nature: Jolly
                                                Posts: 39
                                                hello. i just wanna ask how to properly implement a new ability.

                                                i'm kind of new to asm hacking and so far i think i'm doing well (just a thought, though)
                                                i successfully added some into my rom like the BW2 Repel system, gain-exp-on-catch, fix sturdy, color codes on nature and IV indicator. since i've done it pretty well i just thought maybe i'd try adding a new ability.

                                                the ability i was trying to add is this protean:
                                                Quote:
                                                Originally Posted by MrDollSteak View Post
                                                Good work Kleenexfeu! I've edited your routine to touch up the mistakes, as well as to optimise it, and finally port it to Fire Red.

                                                Protean

                                                Spoiler:
                                                Fire Red (credits to Kleenexfeu for the original Emerald routine)
                                                Spoiler:
                                                Code:
                                                .text
                                                .align 2
                                                .thumb
                                                .thumb_func
                                                .global protean
                                                     
                                                AbilityBufferUser:
                                                	push {r0-r5}
                                                	ldr r0, .Bank
                                                	ldrb r0, [r0]
                                                	mov r1, #0x58
                                                	ldr r2, .BattleData
                                                	mul r0, r1
                                                	add r2, r0, r2
                                                	ldrb r0, [r2]
                                                ProteanCheck:
                                                	cmp r0, #0xA9
                                                   	bne Return
                                                BufferType:
                                                	ldrb r0, [r2, #0x1]
                                                	ldrb r1, [r2, #0x2]
                                                CheckVariableTypeMoves:
                                                	ldr r4, .CheckTypeLoc
                                                	ldr r4, [r4]
                                                	ldrb r4, [r4, #0x13]
                                                	mov r5, #0x3F
                                                	and r4, r5
                                                	cmp r4, #0x0
                                                	beq CheckMove
                                                	b CheckSameType
                                                CheckMove:
                                                	ldr r3, .MoveIndex
                                                	ldrh r3, [r3]
                                                	cmp r3, #0xA5
                                                	beq Return
                                                GetMoveType:
                                                	ldr r4, .MoveData
                                                	mov r5, #0xC
                                                	mul r5, r3
                                                	add r4, r4, r5
                                                	ldrb r4, [r4, #0x2]
                                                CheckSameType:
                                                	cmp r0, r4
                                                	bne ChangeType
                                                	cmp r1, r4
                                                	beq Return
                                                ChangeType:
                                                	strb r4, [r2, #0x1]
                                                	strb r4, [r2, #0x2]
                                                	ldr r3, =0xFF0003FD
                                                	lsl r4, #0x10
                                                	add r3, r4
                                                	ldr r0, .BufferTypeLoc
                                                	str r3, [r0]
                                                BufferMessage:
                                                	mov r0, #0x49
                                                	ldr r1, .Bank
                                                	ldrb r1, [r1]
                                                	bl DisplayMessage
                                                Return:
                                                	pop {r0-r5}
                                                	ldrb r1, [r0]
                                                	str r2, [sp]
                                                	mov r0, #0x2
                                                	mov r2, #0x0
                                                	ldr r3, .Return
                                                	bx r3
                                                
                                                DisplayMessage:	
                                                	ldr r2, .DisplayMessageBL
                                                	bx r2
                                                
                                                .align 2
                                                
                                                .Bank:		.word 0x02023D6B
                                                .BattleData:	.word 0x02023C04
                                                .MoveIndex:	.word 0x02023D4A
                                                .CheckTypeLoc: .word 0x02023FE8
                                                .MoveData:	.word 0x8250C04
                                                .BufferTypeLoc:	.word 0x02022AB8
                                                .Return:	.word 0x0801D7E1
                                                .DisplayMessageBL: .word 0x080173AD
                                                
                                                *Insert 00 49 08 47 xx xx xx 08 at 1D7D8

                                                Emerald (credits to Kleenexfeu)
                                                Spoiler:
                                                Code:
                                                .text
                                                .align 2
                                                .thumb
                                                .thumb_func
                                                .global protean
                                                     
                                                AbilityBufferUser:
                                                	push {r0-r5}
                                                	ldr r0, .Bank
                                                	ldrb r0, [r0]
                                                	mov r1, #0x58
                                                	ldr r2, .BattleData
                                                	mul r0, r1
                                                	add r2, r0, r2
                                                	ldrb r0, [r2]
                                                ProteanCheck:
                                                	cmp r0, #0xA9
                                                   	bne Return
                                                BufferType:
                                                	ldrb r0, [r2, #0x1]
                                                	ldrb r1, [r2, #0x2]
                                                CheckVariableTypeMoves:
                                                	ldr r4, .CheckTypeLoc
                                                	ldr r4, [r4]
                                                	ldrb r4, [r4, #0x13]
                                                	mov r5, #0x3F
                                                	and r4, r5
                                                	cmp r4, #0x0
                                                	beq CheckMove
                                                	b CheckSameType
                                                CheckMove:
                                                	ldr r3, .MoveIndex
                                                	ldrh r3, [r3]
                                                	cmp r3, #0xA5
                                                	beq Return
                                                GetMoveType:
                                                	ldr r4, .MoveData
                                                	mov r5, #0xC
                                                	mul r5, r3
                                                	add r4, r4, r5
                                                	ldrb r4, [r4, #0x2]
                                                CheckSameType:
                                                	cmp r0, r4
                                                	bne ChangeType
                                                	cmp r1, r4
                                                	beq Return
                                                ChangeType:
                                                	strb r4, [r2, #0x1]
                                                	strb r4, [r2, #0x2]
                                                	ldr r3, =0xFF0003FD
                                                	lsl r4, #0x10
                                                	add r3, r4
                                                	ldr r0, .BufferTypeLoc
                                                	str r3, [r0]
                                                BufferMessage:
                                                	mov r0, #0x49
                                                	ldr r1, .Bank
                                                	ldrb r1, [r1]
                                                	bl DisplayMessage
                                                Return:
                                                	pop {r0-r5}
                                                	ldrb r1, [r0]
                                                	str r2, [sp]
                                                	mov r0, #0x2
                                                	mov r2, #0x0
                                                	ldr r3, .Return
                                                	bx r3
                                                
                                                DisplayMessage:	
                                                	ldr r2, .DisplayMessageBL
                                                	bx r2
                                                
                                                .align 2
                                                
                                                .Bank:		.word 0x0202420B
                                                .BattleData:	.word 0x020240A4
                                                .MoveIndex:	.word 0x020241EA
                                                .CheckTypeLoc: .word 0x0202449C
                                                .MoveData:	.word 0x831C898
                                                .BufferTypeLoc:	.word 0x02022F58
                                                .Return:	.word 0x0804607D
                                                .DisplayMessageBL: .word 0x0803F965
                                                
                                                *Insert 00 49 08 47 xx xx xx 08 at 46074
                                                because greninja is a thing, but whenever i tried to use it on battle, it doesn't work.

                                                now the problem is, when i paste this ( 00 49 08 47 01 7B 77 08 ) to 1D7D8 (as instructed) nothing happens. i tried to not to add 1 on the "00" (last) part of the hex where i insert the asm but the screen just stuck after an attack. then i even tried not to reverse the hex and it called a rain, then crash >___<

                                                the part (offset?) where i inserted the asm was on 777B00. i can't really figure out where did i got it wrong, but i really want to learn how to add it because it's a good feature. i hope someone could tell me my mistake. and lastly, sorry for a long reply, plus the bad english since it's not my mother language.

                                                ps: i'm using mrds patch
                                                __________________

                                                Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay!



                                                Reply With Quote
                                                  #299    
                                                Old November 1st, 2016 (3:58 AM).
                                                ShyRayq's Avatar
                                                ShyRayq ShyRayq is online now
                                                Unprofessional Unprofessional
                                                   
                                                  Join Date: Aug 2007
                                                  Gender: Male
                                                  Nature: Adamant
                                                  Posts: 1,615
                                                  Quote:
                                                  Originally Posted by PufferJumps View Post
                                                  hello. i just wanna ask how to properly implement a new ability.

                                                  i'm kind of new to asm hacking and so far i think i'm doing well (just a thought, though)
                                                  i successfully added some into my rom like the BW2 Repel system, gain-exp-on-catch, fix sturdy, color codes on nature and IV indicator. since i've done it pretty well i just thought maybe i'd try adding a new ability.

                                                  the ability i was trying to add is this protean:

                                                  because greninja is a thing, but whenever i tried to use it on battle, it doesn't work.

                                                  now the problem is, when i paste this ( 00 49 08 47 01 7B 77 08 ) to 1D7D8 (as instructed) nothing happens. i tried to not to add 1 on the "00" (last) part of the hex where i insert the asm but the screen just stuck after an attack. then i even tried not to reverse the hex and it called a rain, then crash >___<

                                                  the part (offset?) where i inserted the asm was on 777B00. i can't really figure out where did i got it wrong, but i really want to learn how to add it because it's a good feature. i hope someone could tell me my mistake. and lastly, sorry for a long reply, plus the bad english since it's not my mother language.

                                                  ps: i'm using mrds patch
                                                  Okay, I'm not really good at ASM, but I picked up a few things.
                                                  1st, in the ASM code, there is a section near the start called 'Proteancheck'.
                                                  In this section there's a bit of code that says:
                                                  cmp r0, #0xA9.
                                                  The A9 represents the index for the ability Protean in the table of abilities. This will not be exactly the same as in your rom. Assuming this is the only ability you have added, it should be 0x4E.
                                                  If you have added more, then it should be 0x4D + NN + 0x01 where NN is the number of abilities you have added before protean in hex.

                                                  2nd, I believe there is a string that prints that the user has changed type that you have to insert as well, but I'm not entirely sure.
                                                  __________________
                                                  3DS Friend Code: 5069-3944-3902
                                                  IGN: Peter; (X, Y, OR, AS, S, M)
                                                  Friend Safari: (Fighting) Throh, Meditite, Breloom
                                                  Living Pokedex Complete: Y, C, LG, E, Pl, HG, B, B2, X, Y, OR, AS, M, UM
                                                  Big thanks especially to DestinedJagold, Xerneas_X, Elements1 and ~RNC~

                                                  PM me if you want to trade, or add my FC.
                                                  Reply With Quote
                                                    #300    
                                                  Old November 2nd, 2016 (8:18 PM). Edited November 2nd, 2016 by PufferJumps.
                                                  PufferJumps's Avatar
                                                  PufferJumps PufferJumps is offline
                                                     
                                                    Join Date: Jul 2016
                                                    Location: Philippines
                                                    Gender: Male
                                                    Nature: Jolly
                                                    Posts: 39
                                                    Quote:
                                                    Originally Posted by ShyRayq View Post
                                                    Okay, I'm not really good at ASM, but I picked up a few things.
                                                    1st, in the ASM code, there is a section near the start called 'Proteancheck'.
                                                    In this section there's a bit of code that says:
                                                    cmp r0, #0xA9.
                                                    The A9 represents the index for the ability Protean in the table of abilities. This will not be exactly the same as in your rom. Assuming this is the only ability you have added, it should be 0x4E.
                                                    If you have added more, then it should be 0x4D + NN + 0x01 where NN is the number of abilities you have added before protean in hex.

                                                    2nd, I believe there is a string that prints that the user has changed type that you have to insert as well, but I'm not entirely sure.


                                                    i see. so it's a lot more complicated than i thought. thanks for telling me. ill try it again and see if ill be able to do it. thanks for the tips!
                                                    __________________

                                                    Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay!



                                                    Reply With Quote
                                                    Reply

                                                    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
                                                    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 1:37 AM.