The PokéCommunity Forums  

Go Back   The PokéCommunity Forums > Fan Games > Binary ROM Hacking > Binary Hack Research & Development
Reload this Page Code Ability Resource Thread

Notices
For all updates, view the main page.

Binary Hack Research & Development Got a well-founded knack with your binary Pokémon hacks? Love reverse-engineering them? For the traditional Pokémon ROM hacker, 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!

Ad Content
Reply
 
Thread Tools
  #276   Link to this post, but load the entire thread.  
Old August 13th, 2016 (11:22 AM).
bynine's Avatar
bynine bynine is offline
 
Join Date: Jan 2016
Posts: 55
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?
Reply With Quote
  #277   Link to this post, but load the entire thread.  
Old August 13th, 2016 (4:05 PM).
electicario electicario is offline
Random Aura Sphere and Thunderpunch user
 
Join Date: Jun 2014
Location: Brazil
Gender: Male
Nature: Modest
Posts: 11
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?
Actually, you should insert what's in the comments at offset 042F94. The '08' only means that this offset is in the ROM, as far as I know at least {XD}
__________________
Pokémon: Phi Red coming soon...
Reply With Quote
  #278   Link to this post, but load the entire thread.  
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: 326
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
  #279   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Docile
Posts: 408
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
  #280   Link to this post, but load the entire thread.  
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: 28
Gender: Male
Posts: 859
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
  #281   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Brave
Posts: 535
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
  #282   Link to this post, but load the entire thread.  
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
  #283   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Brave
Posts: 535
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
  #284   Link to this post, but load the entire thread.  
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: 326
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
  #285   Link to this post, but load the entire thread.  
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
  #286   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Brave
Posts: 535
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
  #287   Link to this post, but load the entire thread.  
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: 28
Gender: Male
Posts: 859
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
  #288   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Brave
Posts: 535
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
  #289   Link to this post, but load the entire thread.  
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: 326
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
  #290   Link to this post, but load the entire thread.  
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: 792
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
  #291   Link to this post, but load the entire thread.  
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: 28
Gender: Male
Posts: 859
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
  #292   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Brave
Posts: 535
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
  #293   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Brave
Posts: 535
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
__________________
My works:
TOOL: TL's Quick Enhancer
TUTORIAL: Fire red habitat editing
TUTORIAL: Fire red Transparent text-box


| |
Reply With Quote
  #294   Link to this post, but load the entire thread.  
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: 326
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
  #295   Link to this post, but load the entire thread.  
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: 25
Gender: Male
Nature: Brave
Posts: 535
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??
__________________
My works:
TOOL: TL's Quick Enhancer
TUTORIAL: Fire red habitat editing
TUTORIAL: Fire red Transparent text-box


| |
Reply With Quote
  #296   Link to this post, but load the entire thread.  
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: 326
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
  #297   Link to this post, but load the entire thread.  
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
  #298   Link to this post, but load the entire thread.  
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: 326
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
  #299   Link to this post, but load the entire thread.  
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
Gender: Male
Nature: Adamant
Posts: 456
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.
__________________
Reply With Quote
  #300   Link to this post, but load the entire thread.  
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
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
Ad Content
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 8:52 AM.