- 4
- Posts
- 1
- Years
- Seen Feb 12, 2025
This is a bit more detailed explanation on how to get and set stats, specifically the EV and IV stats.
In this tutorial we will be exploring how to:
1. Insert ASM routines
2. Hijack existing scripts
3. Using the ASM to get the values of an IV
4. Also how to set an IV with a new value
The final result will be that one of the assistant (middle one) will be able to tell you a Pokemon's HP IV and then increase it by 1, using a dialogue.
Get Value
.text
.align 2
.thumb
.thumb_func
/* Uses:
0x8003: Which stat to affect. Example: 27 = HP IV
0x8004: Party slot number, best used with Special 0x9F
0x8005: Ouputs the value of affected stat
*/
main:
push {r0-r2, lr}
ldr r0, =(0x20370C0) @var 0x8004: PartySlot
ldrh r0, [r0] @Halfword
mov r1, #0x64 @Offset
mul r1, r1, r0 @Offset * PartySlot
ldr r0, =(0x2024284) @Pokemon
add r0, r0, r1 @Pokemon + Offset
ldr r1, =(0x20370CC) @var 0x800A: StatID
ldrb r1, [r1] @Byte
@var 0x800B: Output
@DeCrypt---------------------------------------------------------
/* Note:
r0 Must be Pokemon data Offset
r1 Must be which stat to affect
-After-
r0 Will be returned with the value of Pokemon's stat
*/
ldr r2, =(0x803FBE8+1)
bl linker @DeCrypt
ldr r2, =(0x20370CE) @var 0x800B: Output
strb r0, [r2] @Byte
pop {r0-r2, pc} @end
linker:
bx r2
.align 2
Set Value
.text
.align 2
.thumb
.thumb_func
/* Uses:
0x8003: Which stat to affect. Example: 27 = HP IV
0x8004: Party slot number, best used with Special 0x9F
0x8005: New value to set the affected stat.
*/
main:
push {r0-r3, lr}
ldr r0, =(0x20370C0) @var 0x8004: PartySlot
ldrh r0, [r0] @Halfword
mov r1, #0x64 @Offset
mul r1, r0 @Offset * PartySlot
ldr r0, =(0x02024284) @Pokemon
add r0, r0, r1 @Pokemon + Offset
ldr r1, =(0x20370CC) @var 0x800A: ID of stat
ldrh r1, [r1] @Halfword
ldr r2, =(0x20370CE) @var 0x800B: New value
ldrh r2, [r2] @Halfword
push {r2}
mov r2, r13
@Note:
@r0 Must be Pokemon data Offset
@r1 Must be which stat to affect
@R2 Must be the new value to set
ldr r3, =(0x0804037C+1) @EnCrypt
bl linker
pop {r2}
ldr r0, =(0x20370C0) @var 0x8004: PartySlot
ldrh r0, [r0]
mov r1, #0x64 @Length
mul r1, r0 @Offset * PartySlot
ldr r0, =(0x02024284) @Pokemon
add r0, r0, r1 @Pokemon + Offset
@Note:
@r0 Must be Pokemon data Offset
ldr r3, =(0x0803e47c+1) @CalculateMonStats
bl linker
pop {r0-r3, pc} @end
linker:
bx r3
.align 2
In this tutorial we will be exploring how to:
1. Insert ASM routines
2. Hijack existing scripts
3. Using the ASM to get the values of an IV
4. Also how to set an IV with a new value
The final result will be that one of the assistant (middle one) will be able to tell you a Pokemon's HP IV and then increase it by 1, using a dialogue.
![[PokeCommunity.com] Tutorial: How to Get and Set stats such as EV and IV [PokeCommunity.com] Tutorial: How to Get and Set stats such as EV and IV](https://i.imgur.com/ULomzbO.gif)
Get Value
Spoiler:
.text
.align 2
.thumb
.thumb_func
/* Uses:
0x8003: Which stat to affect. Example: 27 = HP IV
0x8004: Party slot number, best used with Special 0x9F
0x8005: Ouputs the value of affected stat
*/
main:
push {r0-r2, lr}
ldr r0, =(0x20370C0) @var 0x8004: PartySlot
ldrh r0, [r0] @Halfword
mov r1, #0x64 @Offset
mul r1, r1, r0 @Offset * PartySlot
ldr r0, =(0x2024284) @Pokemon
add r0, r0, r1 @Pokemon + Offset
ldr r1, =(0x20370CC) @var 0x800A: StatID
ldrb r1, [r1] @Byte
@var 0x800B: Output
@DeCrypt---------------------------------------------------------
/* Note:
r0 Must be Pokemon data Offset
r1 Must be which stat to affect
-After-
r0 Will be returned with the value of Pokemon's stat
*/
ldr r2, =(0x803FBE8+1)
bl linker @DeCrypt
ldr r2, =(0x20370CE) @var 0x800B: Output
strb r0, [r2] @Byte
pop {r0-r2, pc} @end
linker:
bx r2
.align 2
Set Value
Spoiler:
.text
.align 2
.thumb
.thumb_func
/* Uses:
0x8003: Which stat to affect. Example: 27 = HP IV
0x8004: Party slot number, best used with Special 0x9F
0x8005: New value to set the affected stat.
*/
main:
push {r0-r3, lr}
ldr r0, =(0x20370C0) @var 0x8004: PartySlot
ldrh r0, [r0] @Halfword
mov r1, #0x64 @Offset
mul r1, r0 @Offset * PartySlot
ldr r0, =(0x02024284) @Pokemon
add r0, r0, r1 @Pokemon + Offset
ldr r1, =(0x20370CC) @var 0x800A: ID of stat
ldrh r1, [r1] @Halfword
ldr r2, =(0x20370CE) @var 0x800B: New value
ldrh r2, [r2] @Halfword
push {r2}
mov r2, r13
@Note:
@r0 Must be Pokemon data Offset
@r1 Must be which stat to affect
@R2 Must be the new value to set
ldr r3, =(0x0804037C+1) @EnCrypt
bl linker
pop {r2}
ldr r0, =(0x20370C0) @var 0x8004: PartySlot
ldrh r0, [r0]
mov r1, #0x64 @Length
mul r1, r0 @Offset * PartySlot
ldr r0, =(0x02024284) @Pokemon
add r0, r0, r1 @Pokemon + Offset
@Note:
@r0 Must be Pokemon data Offset
ldr r3, =(0x0803e47c+1) @CalculateMonStats
bl linker
pop {r0-r3, pc} @end
linker:
bx r3
.align 2
Attachments
Last edited: