top of page
Nature Changer
5.27
This routine rerolls the Personality value of a Pokémon in party to match a Nature of your choice, while keeping the same gender, Ability slot and shininess. CFRU is not required.
Credits:
Defa
How To
Set var4 to the party slot
Set temp0 to the Nature ID
Then callasm <offset+1>
NOTE: If the Pokémon is shiny, it can take several seconds to find a correct Personality value and the game may look like it froze or crashed. You can add a preparemsg before callasm that says something like "Please wait..." to notify the player.
Add this routine to free space and note the offset:
main:
push {r4-r7, lr}
sub sp, #4
ldr r0, var4 @party mon index
ldrh r0, [r0]
mov r1, #100 @Pokemon data struct
mul r1, r0
ldr r0, gPlayerParty
add r0, r0, r1
mov r4, r0 @save slot
mov r0, r4
mov r1, #0 @MON_DATA_PERSONALITY
ldr r3, GetMonData
bl linker
mov r6, r0 @save PID
mov r1, #1
and r0, r1 @get Ability slot
mov r7, r0 @save which slot to change to
mov r0, r4 @get slot
mov r1, #11 @MON_DATA_SPECIES
ldr r3, GetMonData
bl linker
mov r5, r0 @save species
mov r1, r6 @get PID
ldr r3, GetGenderFSAP
bl linker
mov r8, r0 @save gender
mov r0, r4
ldr r3, IsMonShiny
bl linker
mov r9, r0 @save shininess
mov r0, r4
mov r1, #1 @MON_DATA_OT_ID
ldr r3, GetMonData
bl linker
mov r11, r0 @save OTID
ldr r0, temp0
ldr r3, VarGet
bl linker
mov r10, r0 @save Nature
generatepid:
ldr r3, Random
bl linker
lsl r0, r0, #16
lsr r0, r0, #16
mov r6, r0
ldr r3, Random
bl linker
lsl r0, r0, #16
orr r6, r0
str r6, [sp, #0]
cmp r7, #2
beq skipabilitycheck
mov r0, #1
mov r1, r6
and r1, r0 @get Ability slot
cmp r1, r7
bne generatepid
skipabilitycheck:
mov r0, r5
mov r1, r6
ldr r3, GetGenderFSAP
bl linker
mov r1, r8
cmp r0, r1
bne generatepid
mov r0, r11
mov r1, r6
ldr r3, IsShinyOtIdPersonality
bl linker
mov r1, r9
cmp r0, r1
bne generatepid
mov r0, r6
ldr r3, GetNatureFromPersonality
bl linker
mov r1, r10
cmp r0, r1
bne generatepid
mov r0, r4
mov r1, #0 @MON_DATA_PERSONALITY
add r2, sp, #0
ldr r3, SetMonData
bl linker
mov r0, r4
ldr r3, CalculateMonStats
bl linker
add sp, #4
pop {r4-r7, pc}
linker:
bx r3
monstats:
.word <data.pokemon.stats>
temp0:
.word 0x00004000
var4:
.word 0x020370C0
gPlayerParty:
.word 0x02024284
GetMonData:
.word 0x0803FBE9
SetMonData:
.word 0x0804037D
GetGenderFSAP: @FromSpeciesAndPersonality
.word 0x0803F78D
IsMonShiny:
.word 0x08044471
GetNatureFromPersonality:
.word 0x08042EB5
VarGet:
.word 0x0806E569
Random:
.word 0x08044EC9
IsShinyOtIdPersonality:
.word 0x0804449D
CalculateMonStats:
.word 0x0803E47DHappy Hacking!
bottom of page


