kearnseyboy6
Aussie's Toughest Mudder
- 300
- Posts
- 16
- Years
- Seen Jun 22, 2019
Hi everyone,
Today I am going to show you how to add more evolution methods.
Step 1 (Extending the table and limiters)
Step 2 (Creating evolution routines; ASM needed)
Step 3 (Making the routine work in the game)
Final notes, I am a bit vague on the structure of the routine musts because I am still learning it. However finally all evolutions will be open-sourced and available below in the spoiler (will add more over time).
Lastly, acknowledgements go to Daniils and Jambo for their guidance and locations for everything.
~ Thank you and good luck
Today I am going to show you how to add more evolution methods.
Step 1 (Extending the table and limiters)
Spoiler:
First, fire up your ROM in a hex editor and navigate to 0x42FC4. Select 0x3C bytes and copy them to some free space.
Next, we must change the pointers to our new location (0x900000 in my case). Search C42F0408.
There is only one pointer at 0x42FC0.
Next the game has a limit on the number of evolutions. This is at 0x42FAA. Change this to the new number of evolutions (in hex)
Spoiler:
![[PokeCommunity.com] Adding new evolution methods [FR] [PokeCommunity.com] Adding new evolution methods [FR]](https://i1168.photobucket.com/albums/r494/s_kearnzy/Tablelocation_zps66830a4c.png)
Next, we must change the pointers to our new location (0x900000 in my case). Search C42F0408.
There is only one pointer at 0x42FC0.
Next the game has a limit on the number of evolutions. This is at 0x42FAA. Change this to the new number of evolutions (in hex)
Step 2 (Creating evolution routines; ASM needed)
Spoiler:
That table we pointed to contains the pointers to each evolution method, so if we write our own we can have a new evolution.
However writing a method can be quite difficult to explain. I'll try my best. Here is a working* script I wrote for Goodra's evolution (raining in the overworld)
Now the bolded section must always be included in the start, it is consistent mostly with all evolution routines. So put that in your code. Notice the red word (ldrb). This loads the argument in the evolution (item or level). An item uses a half word and a level uses a byte. This matters and affects the size of r2
You also might see R3 -> R10 then R10 -> R1. This is necessary because you pop R0-R7.
Finally you will need this routine: Located HERE!!
TO use it in your script you need a bl instruction
Once you are done assemble the .asm file and place it in your ROM somewhere. Now go to your table and add another entry pointing to the assembled code (you do NOT need +1). Now
However writing a method can be quite difficult to explain. I'll try my best. Here is a working* script I wrote for Goodra's evolution (raining in the overworld)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global weatherevo
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
ldr r6, currentweather
ldrb r6, [r6, #0x0]
cmp r6, #0x3
beq rain
cmp r6, #0x5
beq rain
cmp r6, #0xD
beq rain
pop {r0-r7}
ldr r0, noevo
bx r0
rain:
mov r10, r3
pop {r0-r7}
mov r1, r10
add r1, #0x2
ldr r0, levelcheckloc
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currentweather: .word 0x02036E12
.align 2
.thumb
.thumb_func
.global weatherevo
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
ldr r6, currentweather
ldrb r6, [r6, #0x0]
cmp r6, #0x3
beq rain
cmp r6, #0x5
beq rain
cmp r6, #0xD
beq rain
pop {r0-r7}
ldr r0, noevo
bx r0
rain:
mov r10, r3
pop {r0-r7}
mov r1, r10
add r1, #0x2
ldr r0, levelcheckloc
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currentweather: .word 0x02036E12
Now the bolded section must always be included in the start, it is consistent mostly with all evolution routines. So put that in your code. Notice the red word (ldrb). This loads the argument in the evolution (item or level). An item uses a half word and a level uses a byte. This matters and affects the size of r2
This leads to R2... This register contains the Argument, so if you need to check for a specific item... compare the item with R2. You cannot compare items and levels at the same time.Check for appropriate level: levelcheckloc: .word 0x08043017
Go straight to the evolution (no levelcheck): evolutionloc: .word 0x0804310D
You also might see R3 -> R10 then R10 -> R1. This is necessary because you pop R0-R7.
Finally you will need this routine: Located HERE!!
TO use it in your script you need a bl instruction
This should be enough to get you started. I recommend using Knizz' dis-assembly for further routines. I also will update this post when I become more knowledgeable as well.bl decrypt
decrypt: push {r0-r7}
mov r1, #0x##
ldr r2, decryptpoke
bx r2
decryptpoke: .word 0x0803FBE9
Once you are done assemble the .asm file and place it in your ROM somewhere. Now go to your table and add another entry pointing to the assembled code (you do NOT need +1). Now
Step 3 (Making the routine work in the game)
Spoiler:
To make this compatible with G3HS open up the .ini file and navigate to these lines:
Note: Follow KK552's syntax for the ini file.
Finally open your ROM and in G3HS and work add the evolution and test it!!!
Add in a name for your method, and for properties add either Level, Item, None.evolutionmethods =
evomethodsproperties =
Note: Follow KK552's syntax for the ini file.
Finally open your ROM and in G3HS and work add the evolution and test it!!!
Spoiler:
![[PokeCommunity.com] Adding new evolution methods [FR] [PokeCommunity.com] Adding new evolution methods [FR]](https://i1168.photobucket.com/albums/r494/s_kearnzy/Final_zps44d82bf1.png)
Final notes, I am a bit vague on the structure of the routine musts because I am still learning it. However finally all evolutions will be open-sourced and available below in the spoiler (will add more over time).
Spoiler:
Evolutions
NOTE: If you have used the "Changed Number of Evolutions per MON'" button on G3HS, these routines ain't going to work.
Assemble them anyway and change the .bin file accordingly.
Evolve with a Fairy type move (KDS Credits)
Pancham Evolution (KDS Credits)
Specific Map Evolution (Not available in G3HS yet, hex edit only)
Male Evolutions (please don't forget to update your pokemon base stats table...)
Female Evolutions (please don't forget to update your pokemon base stats table...)
Raining in the Overworld (Goodra)
Night Time Level Up (KDS credits)
Day Time Level Induced Tyruant (KDS credits)
Night time Item Hold Induced Evolution
(if you edited the Pokemon data structure table in the RAM the item clearing will not work)
Day time Item Hold Induced Evolution (if you edited the Pokemon data structure table in the RAM the item clearing will not work)
Night Friendship (You can edit the routine in the table already because they don't work in FR)
Day Friendship (You can edit the routine in the table already because they don't work in FR)
Evolution by Move induced
Evolve with other Pokemon in Party
Secific Map Name evolution (Joexv Credits)
More to come... Send in your evolutions
NOTE: If you have used the "Changed Number of Evolutions per MON'" button on G3HS, these routines ain't going to work.
Assemble them anyway and change the .bin file accordingly.
8 evolutions per mon: Change F0 19 to 70 00
16 evolutions per mon: Change F0 19 to B0 00
32 evolutions per mon: Change F0 19 to F0 00
Evolve with a Fairy type move (KDS Credits)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global sylveon
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
ldr r4, movedata
mov r6, #0xC
mul r6, r1
add r4, r4, r6
ldrb r4, [r4, #0x2]
cmp r4, #0xXX @replace XX with 16 if you are using MrDollSteak's rombase, otherwise keep the index that you have set while adding fairy type
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
true:
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
movedata: .word 0x08250C04 @if you have repointed the moves table this needs to be changed as well, for MrDollSteak's rombase set to 0x08900000
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
.align 2
.thumb
.thumb_func
.global sylveon
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
ldr r4, movedata
mov r6, #0xC
mul r6, r1
add r4, r4, r6
ldrb r4, [r4, #0x2]
cmp r4, #0xXX @replace XX with 16 if you are using MrDollSteak's rombase, otherwise keep the index that you have set while adding fairy type
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
true:
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
movedata: .word 0x08250C04 @if you have repointed the moves table this needs to be changed as well, for MrDollSteak's rombase set to 0x08900000
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
Pancham Evolution (KDS Credits)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global Pancham
main:
push {r0-r7}
mov r5, #0x0
loop:
ldr r0, firstpoke
mov r1, #0xB
mov r6, #0x64
add r4, r5, #0x0
mul r4, r6
add r0, r0, r4
bl decrypt
mov r9, r0
pop {r0-r7}
mov r1, r9
ldr r3, basestattable
mov r4, #0x1C
mul r4, r1
add r3, r3, r4
ldrb r6, [r3, #0x6]
ldrb r7, [r3, #0x7]
cmp r6, #0x11
beq levelcheck
cmp r7, #0x11
beq levelcheck
cmp r5, #0x5
beq exit
add r5, #0x1
b loop
levelcheck:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
.align
basestattable: .word 0x08254784
firstpoke: .word 0x02024284
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
.align 2
.thumb
.thumb_func
.global Pancham
main:
push {r0-r7}
mov r5, #0x0
loop:
ldr r0, firstpoke
mov r1, #0xB
mov r6, #0x64
add r4, r5, #0x0
mul r4, r6
add r0, r0, r4
bl decrypt
mov r9, r0
pop {r0-r7}
mov r1, r9
ldr r3, basestattable
mov r4, #0x1C
mul r4, r1
add r3, r3, r4
ldrb r6, [r3, #0x6]
ldrb r7, [r3, #0x7]
cmp r6, #0x11
beq levelcheck
cmp r7, #0x11
beq levelcheck
cmp r5, #0x5
beq exit
add r5, #0x1
b loop
levelcheck:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
.align
basestattable: .word 0x08254784
firstpoke: .word 0x02024284
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
Specific Map Evolution (Not available in G3HS yet, hex edit only)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapbankANDnapnumber
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
ldr r6, mapbank
ldrh r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
mapbank: .word 0x02031DBC
.align 2
.thumb
.thumb_func
.global mapbankANDnapnumber
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
ldr r6, mapbank
ldrh r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
mapbank: .word 0x02031DBC
Male Evolutions (please don't forget to update your pokemon base stats table...)
Spoiler:
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
pokemondata: .word 0x08254784
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
pokemondata: .word 0x08254784
Female Evolutions (please don't forget to update your pokemon base stats table...)
Spoiler:
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
bge exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
pokemondata: .word 0x08254784
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
bge exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
pokemondata: .word 0x08254784
Raining in the Overworld (Goodra)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global weatherevo
main:
push {r0-r7}
ldr r6, currentweather
ldrb r6, [r6, #0x0]
cmp r6, #0x3
beq rain
cmp r6, #0x5
beq rain
cmp r6, #0xD
beq rain
pop {r0-r7}
ldr r0, noevo
bx r0
rain:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currentweather: .word 0x02036E12
.align 2
.thumb
.thumb_func
.global weatherevo
main:
push {r0-r7}
ldr r6, currentweather
ldrb r6, [r6, #0x0]
cmp r6, #0x3
beq rain
cmp r6, #0x5
beq rain
cmp r6, #0xD
beq rain
pop {r0-r7}
ldr r0, noevo
bx r0
rain:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
currentweather: .word 0x02036E12
Night Time Level Up (KDS credits)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global nightlevelup
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge level
cmp r5, #0x6
blt level
b exit
level:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
time: .word 0x03005542
.align 2
.thumb
.thumb_func
.global nightlevelup
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge level
cmp r5, #0x6
blt level
b exit
level:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
time: .word 0x03005542
Day Time Level Induced Tyruant (KDS credits)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayLevel
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
bge level
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
level:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
time: .word 0x03005542
.align 2
.thumb
.thumb_func
.global dayLevel
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
bge level
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
level:
pop {r0-r7}
ldr r0, levelcheckloc
bx r0
.align
levelcheckloc: .word 0x08043017
noevo: .word 0x08043111
time: .word 0x03005542
Night time Item Hold Induced Evolution
(if you edited the Pokemon data structure table in the RAM the item clearing will not work)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global nightevoitemhold
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge test
cmp r5, #0x6
blt test
b exit
test:
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r1, #0xC
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
bne exit
mov r1, #0xC
mov r0, r8
bl encrypt
pop {r0-r7}
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
encrypt:
push {r0-r7}
ldr r2, blank
ldr r5, encryptpoke
bx r5
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542
blank: .word 0x020242A2
decryptpoke: .word 0x0803FBE9
encryptpoke: .word 0x0804037D
.align 2
.thumb
.thumb_func
.global nightevoitemhold
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge test
cmp r5, #0x6
blt test
b exit
test:
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r1, #0xC
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
bne exit
mov r1, #0xC
mov r0, r8
bl encrypt
pop {r0-r7}
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
encrypt:
push {r0-r7}
ldr r2, blank
ldr r5, encryptpoke
bx r5
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542
blank: .word 0x020242A2
decryptpoke: .word 0x0803FBE9
encryptpoke: .word 0x0804037D
Day time Item Hold Induced Evolution (if you edited the Pokemon data structure table in the RAM the item clearing will not work)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayevoitemhold
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
blt exit
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r1, #0xC
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
bne exit
mov r1, #0xC
mov r0, r8
bl encrypt
pop {r0-r7}
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
encrypt:
push {r0-r7}
ldr r2, blank
ldr r5, encryptpoke
bx r5
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542
blank: .word 0x020242A2
decryptpoke: .word 0x0803FBE9
encryptpoke: .word 0x0804037D
.align 2
.thumb
.thumb_func
.global dayevoitemhold
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
blt exit
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r1, #0xC
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
bne exit
mov r1, #0xC
mov r0, r8
bl encrypt
pop {r0-r7}
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
encrypt:
push {r0-r7}
ldr r2, blank
ldr r5, encryptpoke
bx r5
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
time: .word 0x03005542
blank: .word 0x020242A2
decryptpoke: .word 0x0803FBE9
encryptpoke: .word 0x0804037D
Night Friendship (You can edit the routine in the table already because they don't work in FR)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayFriendship
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge friendshipevo
cmp r5, #0x6
blt friendshipevo
pop {r0-r7}
ldr r0, noevo
bx r0
.align
friendshipevo: .word 0x08043001
noevo: .word 0x08043111
time: .word 0x03005542
.align 2
.thumb
.thumb_func
.global dayFriendship
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge friendshipevo
cmp r5, #0x6
blt friendshipevo
pop {r0-r7}
ldr r0, noevo
bx r0
.align
friendshipevo: .word 0x08043001
noevo: .word 0x08043111
time: .word 0x03005542
Day Friendship (You can edit the routine in the table already because they don't work in FR)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global dayFriendship
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
bge friendshipevo
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
friendshipevo: .word 0x08043001
noevo: .word 0x08043111
time: .word 0x03005542
.align 2
.thumb
.thumb_func
.global dayFriendship
main:
push {r0-r7}
ldr r5, time
ldrb r5, [r5, #0x0]
cmp r5, #0x15
bge exit
cmp r5, #0x6
bge friendshipevo
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
friendshipevo: .word 0x08043001
noevo: .word 0x08043111
time: .word 0x03005542
Evolution by Move induced
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global Evomove
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
true:
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
.align 2
.thumb
.thumb_func
.global Evomove
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
true:
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
Evolve with other Pokemon in Party
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mantykeevo
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r5, #0x0
loop: ldr r0, firstpoke
mov r1, #0xB
mov r6, #0x64
add r4, r5, #0x0
mul r4, r6
add r0, r0, r4
bl decrypt
mov r9, r0
pop {r0-r7}
mov r1, r9
cmp r1, r2
beq levelcheck
cmp r5, #0x5
beq exit
add r5, #0x1
b loop
levelcheck: mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
ldr r2, decryptpoke
bx r2
.align
firstpoke: .word 0x02024284
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
.align 2
.thumb
.thumb_func
.global mantykeevo
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r5, #0x0
loop: ldr r0, firstpoke
mov r1, #0xB
mov r6, #0x64
add r4, r5, #0x0
mul r4, r6
add r0, r0, r4
bl decrypt
mov r9, r0
pop {r0-r7}
mov r1, r9
cmp r1, r2
beq levelcheck
cmp r5, #0x5
beq exit
add r5, #0x1
b loop
levelcheck: mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
ldr r2, decryptpoke
bx r2
.align
firstpoke: .word 0x02024284
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
decryptpoke: .word 0x0803FBE9
Secific Map Name evolution (Joexv Credits)
Spoiler:
.text
.align 2
.thumb
.thumb_func
.global mapevo
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
ldr r6, map
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
map: .word 0x02036E10
.align 2
.thumb
.thumb_func
.global mapevo
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
ldr r6, map
ldrb r6, [r6, #0x0]
cmp r6, r2
bne exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0804310D
noevo: .word 0x08043111
map: .word 0x02036E10
Lastly, acknowledgements go to Daniils and Jambo for their guidance and locations for everything.
~ Thank you and good luck
Last edited: