pokefirered/asm/pokemon_1.s
2018-10-03 21:30:13 -04:00

2432 lines
37 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ZeroBoxMonData
ZeroBoxMonData: @ 803D97C
push {lr}
adds r2, r0, 0
movs r1, 0
movs r3, 0
_0803D984:
adds r0, r2, r1
strb r3, [r0]
adds r1, 0x1
cmp r1, 0x4F
bls _0803D984
pop {r0}
bx r0
thumb_func_end ZeroBoxMonData
thumb_func_start ZeroMonData
ZeroMonData: @ 803D994
push {r4,lr}
sub sp, 0x4
adds r4, r0, 0
bl ZeroBoxMonData
movs r0, 0
str r0, [sp]
adds r0, r4, 0
movs r1, 0x37
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x38
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x39
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x3A
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x3B
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x3C
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x3D
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x3E
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x3F
mov r2, sp
bl sub_804037C
movs r0, 0xFF
str r0, [sp]
adds r0, r4, 0
movs r1, 0x40
mov r2, sp
bl sub_804037C
add sp, 0x4
pop {r4}
pop {r0}
bx r0
thumb_func_end ZeroMonData
thumb_func_start ZeroPlayerPartyMons
ZeroPlayerPartyMons: @ 803DA14
push {r4,r5,lr}
ldr r4, _0803DA30 @ =gPlayerParty
movs r0, 0xFA
lsls r0, 1
adds r5, r4, r0
_0803DA1E:
adds r0, r4, 0
bl ZeroMonData
adds r4, 0x64
cmp r4, r5
ble _0803DA1E
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0803DA30: .4byte gPlayerParty
thumb_func_end ZeroPlayerPartyMons
thumb_func_start ZeroEnemyPartyMons
ZeroEnemyPartyMons: @ 803DA34
push {r4,r5,lr}
ldr r4, _0803DA50 @ =gEnemyParty
movs r0, 0xFA
lsls r0, 1
adds r5, r4, r0
_0803DA3E:
adds r0, r4, 0
bl ZeroMonData
adds r4, 0x64
cmp r4, r5
ble _0803DA3E
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0803DA50: .4byte gEnemyParty
thumb_func_end ZeroEnemyPartyMons
thumb_func_start CreateMon
CreateMon: @ 803DA54
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x1C
mov r8, r0
adds r6, r1, 0
ldr r4, [sp, 0x34]
ldr r7, [sp, 0x38]
ldr r5, [sp, 0x3C]
lsls r6, 16
lsrs r6, 16
add r0, sp, 0x10
strb r2, [r0]
lsls r3, 24
lsrs r3, 24
lsls r4, 24
lsrs r4, 24
lsls r5, 24
lsrs r5, 24
mov r0, r8
str r3, [sp, 0x18]
bl ZeroMonData
str r4, [sp]
str r7, [sp, 0x4]
str r5, [sp, 0x8]
ldr r0, [sp, 0x40]
str r0, [sp, 0xC]
mov r0, r8
adds r1, r6, 0
add r2, sp, 0x10
ldrb r2, [r2]
ldr r3, [sp, 0x18]
bl CreateBoxMon
mov r0, r8
movs r1, 0x38
add r2, sp, 0x10
bl sub_804037C
movs r0, 0xFF
str r0, [sp, 0x14]
add r2, sp, 0x14
mov r0, r8
movs r1, 0x40
bl sub_804037C
mov r0, r8
bl CalculateMonStats
add sp, 0x1C
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end CreateMon
thumb_func_start CreateBoxMon
CreateBoxMon: @ 803DAC4
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x20
adds r7, r0, 0
ldr r4, [sp, 0x40]
ldr r0, [sp, 0x48]
movs r5, 0xE
add r5, sp
strh r1, [r5]
add r6, sp, 0x10
strb r2, [r6]
mov r5, sp
adds r5, 0x11
strb r3, [r5]
lsls r4, 24
lsrs r4, 24
lsls r0, 24
lsrs r0, 24
mov r10, r0
adds r0, r7, 0
bl ZeroBoxMonData
cmp r4, 0
beq _0803DB00
ldr r0, [sp, 0x44]
str r0, [sp, 0x14]
b _0803DB14
_0803DB00:
bl Random
adds r4, r0, 0
bl Random
lsls r4, 16
lsrs r4, 16
lsls r0, 16
orrs r4, r0
str r4, [sp, 0x14]
_0803DB14:
add r2, sp, 0x14
adds r0, r7, 0
movs r1, 0
bl sub_80404D0
add r0, sp, 0x18
mov r9, r0
add r5, sp, 0xC
mov r1, r10
cmp r1, 0x2
bne _0803DB6C
ldr r2, _0803DB64 @ =0xffff0000
mov r8, r2
ldr r6, _0803DB68 @ =0x0000ffff
_0803DB30:
bl Random
adds r4, r0, 0
bl Random
lsls r4, 16
lsrs r4, 16
lsls r0, 16
orrs r4, r0
str r4, [sp, 0x18]
adds r1, r4, 0
mov r3, r8
ands r1, r3
lsrs r1, 16
ands r4, r6
eors r1, r4
ldr r2, [sp, 0x14]
adds r0, r2, 0
ands r0, r3
lsrs r0, 16
eors r1, r0
ands r2, r6
eors r1, r2
cmp r1, 0x7
bls _0803DB30
b _0803DB92
.align 2, 0
_0803DB64: .4byte 0xffff0000
_0803DB68: .4byte 0x0000ffff
_0803DB6C:
mov r0, r10
cmp r0, 0x1
bne _0803DB78
ldr r0, [sp, 0x4C]
str r0, [sp, 0x18]
b _0803DB92
_0803DB78:
ldr r0, _0803DCBC @ =gSaveBlock2Ptr
ldr r2, [r0]
ldrb r1, [r2, 0xA]
ldrb r0, [r2, 0xB]
lsls r0, 8
orrs r1, r0
ldrb r0, [r2, 0xC]
lsls r0, 16
orrs r1, r0
ldrb r0, [r2, 0xD]
lsls r0, 24
orrs r1, r0
str r1, [sp, 0x18]
_0803DB92:
adds r0, r7, 0
movs r1, 0x1
mov r2, r9
bl sub_80404D0
adds r0, r7, 0
bl CalculateBoxMonChecksum
strh r0, [r5]
adds r0, r7, 0
movs r1, 0x9
adds r2, r5, 0
bl sub_80404D0
adds r0, r7, 0
bl EncryptBoxMon
mov r0, sp
ldrh r1, [r0, 0xE]
bl GetSpeciesName
adds r0, r7, 0
movs r1, 0x2
mov r2, sp
bl sub_80404D0
ldr r2, _0803DCC0 @ =gGameLanguage
adds r0, r7, 0
movs r1, 0x3
bl sub_80404D0
ldr r5, _0803DCBC @ =gSaveBlock2Ptr
ldr r2, [r5]
adds r0, r7, 0
movs r1, 0x7
bl sub_80404D0
adds r0, r7, 0
movs r1, 0xB
mov r2, sp
adds r2, 0xE
bl sub_80404D0
ldr r4, _0803DCC4 @ =gBaseStats
mov r2, sp
ldrh r1, [r2, 0xE]
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
adds r0, r4
ldrb r1, [r0, 0x13]
movs r0, 0xCA
lsls r0, 1
adds r2, r1, 0
muls r2, r0
mov r3, sp
ldrb r0, [r3, 0x10]
lsls r0, 2
ldr r1, _0803DCC8 @ =gUnknown_8253AE4
adds r0, r1
adds r2, r0
adds r0, r7, 0
movs r1, 0x19
bl sub_80404D0
mov r1, sp
ldrh r0, [r1, 0xE]
lsls r2, r0, 3
subs r2, r0
lsls r2, 2
adds r4, 0x12
adds r2, r4
adds r0, r7, 0
movs r1, 0x20
bl sub_80404D0
bl sav1_map_get_name
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x18]
adds r0, r7, 0
movs r1, 0x23
mov r2, r9
bl sub_80404D0
adds r0, r7, 0
movs r1, 0x24
add r2, sp, 0x10
bl sub_80404D0
ldr r2, _0803DCCC @ =gGameVersion
adds r0, r7, 0
movs r1, 0x25
bl sub_80404D0
movs r0, 0x4
str r0, [sp, 0x18]
adds r0, r7, 0
movs r1, 0x26
mov r2, r9
bl sub_80404D0
ldr r2, [r5]
adds r2, 0x8
adds r0, r7, 0
movs r1, 0x31
bl sub_80404D0
mov r2, sp
ldrb r0, [r2, 0x11]
cmp r0, 0x1F
bhi _0803DCD0
adds r0, r7, 0
movs r1, 0x27
adds r2, 0x11
bl sub_80404D0
adds r0, r7, 0
movs r1, 0x28
mov r2, sp
adds r2, 0x11
bl sub_80404D0
adds r0, r7, 0
movs r1, 0x29
mov r2, sp
adds r2, 0x11
bl sub_80404D0
adds r0, r7, 0
movs r1, 0x2A
mov r2, sp
adds r2, 0x11
bl sub_80404D0
adds r0, r7, 0
movs r1, 0x2B
mov r2, sp
adds r2, 0x11
bl sub_80404D0
adds r0, r7, 0
movs r1, 0x2C
mov r2, sp
adds r2, 0x11
bl sub_80404D0
b _0803DD58
.align 2, 0
_0803DCBC: .4byte gSaveBlock2Ptr
_0803DCC0: .4byte gGameLanguage
_0803DCC4: .4byte gBaseStats
_0803DCC8: .4byte gUnknown_8253AE4
_0803DCCC: .4byte gGameVersion
_0803DCD0:
bl Random
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x18]
movs r3, 0x1F
mov r8, r3
ands r0, r3
str r0, [sp, 0x1C]
add r4, sp, 0x1C
adds r0, r7, 0
movs r1, 0x27
adds r2, r4, 0
bl sub_80404D0
ldr r0, [sp, 0x18]
movs r6, 0xF8
lsls r6, 2
ands r0, r6
lsrs r0, 5
str r0, [sp, 0x1C]
adds r0, r7, 0
movs r1, 0x28
adds r2, r4, 0
bl sub_80404D0
ldr r0, [sp, 0x18]
movs r5, 0xF8
lsls r5, 7
ands r0, r5
lsrs r0, 10
str r0, [sp, 0x1C]
adds r0, r7, 0
movs r1, 0x29
adds r2, r4, 0
bl sub_80404D0
bl Random
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x18]
mov r1, r8
ands r0, r1
str r0, [sp, 0x1C]
adds r0, r7, 0
movs r1, 0x2A
adds r2, r4, 0
bl sub_80404D0
ldr r0, [sp, 0x18]
ands r0, r6
lsrs r0, 5
str r0, [sp, 0x1C]
adds r0, r7, 0
movs r1, 0x2B
adds r2, r4, 0
bl sub_80404D0
ldr r0, [sp, 0x18]
ands r0, r5
lsrs r0, 10
str r0, [sp, 0x1C]
adds r0, r7, 0
movs r1, 0x2C
adds r2, r4, 0
bl sub_80404D0
_0803DD58:
ldr r2, _0803DD94 @ =gBaseStats
mov r3, sp
ldrh r1, [r3, 0xE]
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
adds r0, r2
ldrb r0, [r0, 0x17]
cmp r0, 0
beq _0803DD7E
ldr r0, [sp, 0x14]
movs r1, 0x1
ands r0, r1
str r0, [sp, 0x18]
adds r0, r7, 0
movs r1, 0x2E
mov r2, r9
bl sub_80404D0
_0803DD7E:
adds r0, r7, 0
bl GiveBoxMonInitialMoveset
add sp, 0x20
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803DD94: .4byte gBaseStats
thumb_func_end CreateBoxMon
thumb_func_start CreateMonWithNature
CreateMonWithNature: @ 803DD98
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x10
mov r9, r0
ldr r0, [sp, 0x2C]
lsls r1, 16
lsrs r1, 16
mov r8, r1
lsls r2, 24
lsrs r7, r2, 24
lsls r3, 24
lsrs r6, r3, 24
lsls r0, 24
lsrs r5, r0, 24
_0803DDB8:
bl Random
adds r4, r0, 0
bl Random
lsls r4, 16
lsrs r4, 16
lsls r0, 16
orrs r4, r0
adds r0, r4, 0
bl GetNatureFromPersonality
lsls r0, 24
lsrs r0, 24
cmp r5, r0
bne _0803DDB8
movs r0, 0x1
str r0, [sp]
str r4, [sp, 0x4]
movs r0, 0
str r0, [sp, 0x8]
str r0, [sp, 0xC]
mov r0, r9
mov r1, r8
adds r2, r7, 0
adds r3, r6, 0
bl CreateMon
add sp, 0x10
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end CreateMonWithNature
thumb_func_start CreateMonWithGenderNatureLetter
CreateMonWithGenderNatureLetter: @ 803DE00
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x18
str r0, [sp, 0x10]
ldr r4, [sp, 0x38]
ldr r5, [sp, 0x3C]
ldr r0, [sp, 0x40]
lsls r1, 16
lsrs r7, r1, 16
lsls r2, 24
lsrs r2, 24
str r2, [sp, 0x14]
lsls r3, 24
lsrs r3, 24
mov r10, r3
lsls r4, 24
lsrs r4, 24
mov r8, r4
lsls r5, 24
lsrs r6, r5, 24
lsls r0, 24
lsrs r1, r0, 24
mov r9, r1
movs r1, 0xFF
lsls r1, 24
adds r0, r1
lsrs r0, 24
cmp r0, 0x1B
bhi _0803DEA6
_0803DE40:
bl Random
adds r4, r0, 0
bl Random
lsls r4, 16
lsrs r4, 16
lsls r0, 16
orrs r4, r0
movs r0, 0xC0
lsls r0, 18
ands r0, r4
lsrs r0, 18
movs r1, 0xC0
lsls r1, 10
ands r1, r4
lsrs r1, 12
orrs r0, r1
movs r1, 0xC0
lsls r1, 2
ands r1, r4
lsrs r1, 6
orrs r0, r1
movs r1, 0x3
ands r1, r4
orrs r0, r1
movs r1, 0x1C
bl __umodsi3
lsls r0, 16
lsrs r5, r0, 16
adds r0, r4, 0
bl GetNatureFromPersonality
lsls r0, 24
lsrs r0, 24
cmp r6, r0
bne _0803DE40
adds r0, r7, 0
adds r1, r4, 0
bl GetGenderFromSpeciesAndPersonality
lsls r0, 24
lsrs r0, 24
cmp r8, r0
bne _0803DE40
mov r0, r9
subs r0, 0x1
cmp r5, r0
bne _0803DE40
b _0803DED6
_0803DEA6:
bl Random
adds r4, r0, 0
bl Random
lsls r4, 16
lsrs r4, 16
lsls r0, 16
orrs r4, r0
adds r0, r4, 0
bl GetNatureFromPersonality
lsls r0, 24
lsrs r0, 24
cmp r6, r0
bne _0803DEA6
adds r0, r7, 0
adds r1, r4, 0
bl GetGenderFromSpeciesAndPersonality
lsls r0, 24
lsrs r0, 24
cmp r8, r0
bne _0803DEA6
_0803DED6:
movs r0, 0x1
str r0, [sp]
str r4, [sp, 0x4]
movs r0, 0
str r0, [sp, 0x8]
str r0, [sp, 0xC]
ldr r0, [sp, 0x10]
adds r1, r7, 0
ldr r2, [sp, 0x14]
mov r3, r10
bl CreateMon
add sp, 0x18
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end CreateMonWithGenderNatureLetter
thumb_func_start CreateMaleMon
CreateMaleMon: @ 803DF00
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x10
mov r8, r0
lsls r1, 16
lsrs r6, r1, 16
lsls r2, 24
lsrs r7, r2, 24
_0803DF12:
bl Random
adds r4, r0, 0
bl Random
lsls r4, 16
lsrs r5, r4, 16
lsls r0, 16
orrs r5, r0
bl Random
adds r4, r0, 0
bl Random
lsls r4, 16
lsrs r4, 16
lsls r0, 16
orrs r4, r0
adds r0, r6, 0
adds r1, r4, 0
bl GetGenderFromSpeciesAndPersonality
lsls r0, 24
cmp r0, 0
bne _0803DF12
movs r0, 0x1
str r0, [sp]
str r4, [sp, 0x4]
str r0, [sp, 0x8]
str r5, [sp, 0xC]
mov r0, r8
adds r1, r6, 0
adds r2, r7, 0
movs r3, 0x20
bl CreateMon
add sp, 0x10
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end CreateMaleMon
thumb_func_start CreateMonWithIVsPersonality
CreateMonWithIVsPersonality: @ 803DF68
push {r4,lr}
sub sp, 0x14
adds r4, r0, 0
str r3, [sp, 0x10]
ldr r3, [sp, 0x1C]
lsls r1, 16
lsrs r1, 16
lsls r2, 24
lsrs r2, 24
movs r0, 0x1
str r0, [sp]
str r3, [sp, 0x4]
movs r0, 0
str r0, [sp, 0x8]
str r0, [sp, 0xC]
adds r0, r4, 0
movs r3, 0
bl CreateMon
adds r0, r4, 0
movs r1, 0x42
add r2, sp, 0x10
bl sub_804037C
adds r0, r4, 0
bl CalculateMonStats
add sp, 0x14
pop {r4}
pop {r0}
bx r0
thumb_func_end CreateMonWithIVsPersonality
thumb_func_start CreateMonWithIVsOTID
CreateMonWithIVsOTID: @ 803DFA8
push {r4,r5,lr}
sub sp, 0x10
adds r5, r0, 0
adds r4, r3, 0
ldr r3, [sp, 0x1C]
lsls r1, 16
lsrs r1, 16
lsls r2, 24
lsrs r2, 24
movs r0, 0
str r0, [sp]
str r0, [sp, 0x4]
movs r0, 0x1
str r0, [sp, 0x8]
str r3, [sp, 0xC]
adds r0, r5, 0
movs r3, 0
bl CreateMon
adds r0, r5, 0
movs r1, 0x27
adds r2, r4, 0
bl sub_804037C
adds r2, r4, 0x1
adds r0, r5, 0
movs r1, 0x28
bl sub_804037C
adds r2, r4, 0x2
adds r0, r5, 0
movs r1, 0x29
bl sub_804037C
adds r2, r4, 0x3
adds r0, r5, 0
movs r1, 0x2A
bl sub_804037C
adds r2, r4, 0x4
adds r0, r5, 0
movs r1, 0x2B
bl sub_804037C
adds r4, 0x5
adds r0, r5, 0
movs r1, 0x2C
adds r2, r4, 0
bl sub_804037C
adds r0, r5, 0
bl CalculateMonStats
add sp, 0x10
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end CreateMonWithIVsOTID
thumb_func_start CreateMonWithEVSpread
CreateMonWithEVSpread: @ 803E01C
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r7, r0, 0
ldr r0, [sp, 0x2C]
lsls r1, 16
lsrs r1, 16
lsls r2, 24
lsrs r2, 24
lsls r3, 24
lsrs r3, 24
lsls r0, 24
lsrs r0, 24
mov r8, r0
movs r6, 0
str r6, [sp]
str r6, [sp, 0x4]
str r6, [sp, 0x8]
str r6, [sp, 0xC]
adds r0, r7, 0
bl CreateMon
mov r4, r8
movs r1, 0x1
movs r5, 0x5
_0803E050:
adds r0, r4, 0
ands r0, r1
cmp r0, 0
beq _0803E05A
adds r6, 0x1
_0803E05A:
lsrs r4, 1
subs r5, 0x1
cmp r5, 0
bge _0803E050
movs r0, 0xFF
lsls r0, 1
adds r1, r6, 0
bl __divsi3
add r1, sp, 0x10
strh r0, [r1]
movs r4, 0x1
movs r5, 0
_0803E074:
mov r0, r8
ands r0, r4
cmp r0, 0
beq _0803E088
adds r1, r5, 0
adds r1, 0x1A
adds r0, r7, 0
add r2, sp, 0x10
bl sub_804037C
_0803E088:
lsls r0, r4, 25
lsrs r4, r0, 24
adds r5, 0x1
cmp r5, 0x5
ble _0803E074
adds r0, r7, 0
bl CalculateMonStats
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end CreateMonWithEVSpread
thumb_func_start sub_803E0A4
sub_803E0A4: @ 803E0A4
push {r4-r7,lr}
sub sp, 0x14
adds r7, r0, 0
adds r6, r1, 0
ldrh r1, [r6]
ldrb r2, [r6, 0xC]
movs r3, 0x1
str r3, [sp]
ldr r0, [r6, 0x1C]
str r0, [sp, 0x4]
str r3, [sp, 0x8]
ldr r0, [r6, 0x14]
str r0, [sp, 0xC]
adds r0, r7, 0
movs r3, 0
bl CreateMon
movs r5, 0
adds r4, r6, 0x4
_0803E0CA:
ldrh r1, [r4]
lsls r2, r5, 24
lsrs r2, 24
adds r0, r7, 0
bl SetMonMoveSlot
adds r4, 0x2
adds r5, 0x1
cmp r5, 0x3
ble _0803E0CA
adds r2, r6, 0
adds r2, 0xD
adds r0, r7, 0
movs r1, 0x15
bl sub_804037C
adds r2, r6, 0x2
adds r0, r7, 0
movs r1, 0xC
bl sub_804037C
adds r2, r6, 0
adds r2, 0x20
adds r0, r7, 0
movs r1, 0x2
bl sub_804037C
adds r2, r6, 0
adds r2, 0x2B
adds r0, r7, 0
movs r1, 0x20
bl sub_804037C
adds r2, r6, 0
adds r2, 0xE
adds r0, r7, 0
movs r1, 0x1A
bl sub_804037C
adds r2, r6, 0
adds r2, 0xF
adds r0, r7, 0
movs r1, 0x1B
bl sub_804037C
adds r2, r6, 0
adds r2, 0x10
adds r0, r7, 0
movs r1, 0x1C
bl sub_804037C
adds r2, r6, 0
adds r2, 0x11
adds r0, r7, 0
movs r1, 0x1D
bl sub_804037C
adds r2, r6, 0
adds r2, 0x12
adds r0, r7, 0
movs r1, 0x1E
bl sub_804037C
adds r2, r6, 0
adds r2, 0x13
adds r0, r7, 0
movs r1, 0x1F
bl sub_804037C
ldrb r0, [r6, 0x1B]
lsrs r0, 7
add r1, sp, 0x10
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x2E
add r2, sp, 0x10
bl sub_804037C
add r1, sp, 0x10
ldrb r0, [r6, 0x18]
lsls r0, 27
lsrs r0, 27
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x27
add r2, sp, 0x10
bl sub_804037C
add r1, sp, 0x10
ldrh r0, [r6, 0x18]
lsls r0, 22
lsrs r0, 27
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x28
add r2, sp, 0x10
bl sub_804037C
add r1, sp, 0x10
ldrb r0, [r6, 0x19]
lsls r0, 25
lsrs r0, 27
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x29
add r2, sp, 0x10
bl sub_804037C
add r1, sp, 0x10
ldr r0, [r6, 0x18]
lsls r0, 12
lsrs r0, 27
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x2A
add r2, sp, 0x10
bl sub_804037C
add r1, sp, 0x10
ldrh r0, [r6, 0x1A]
lsls r0, 23
lsrs r0, 27
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x2B
add r2, sp, 0x10
bl sub_804037C
add r1, sp, 0x10
ldrb r0, [r6, 0x1B]
lsls r0, 26
lsrs r0, 27
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x2C
add r2, sp, 0x10
bl sub_804037C
adds r0, r7, 0
bl CalculateMonStats
add sp, 0x14
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_803E0A4
thumb_func_start sub_803E1EC
sub_803E1EC: @ 803E1EC
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
mov r8, r0
ldr r4, [sp, 0x2C]
ldr r6, [sp, 0x30]
ldr r5, [sp, 0x34]
ldr r7, [sp, 0x38]
lsls r1, 16
lsrs r1, 16
lsls r2, 24
lsrs r2, 24
lsls r3, 24
lsrs r3, 24
lsls r4, 24
lsrs r4, 24
lsls r5, 24
lsrs r5, 24
movs r0, 0x1
str r0, [sp, 0x10]
str r4, [sp]
str r6, [sp, 0x4]
str r5, [sp, 0x8]
str r7, [sp, 0xC]
mov r0, r8
bl CreateMon
mov r0, r8
movs r1, 0x50
add r2, sp, 0x10
bl sub_804037C
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_803E1EC
thumb_func_start sub_803E23C
sub_803E23C: @ 803E23C
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
adds r7, r0, 0
adds r6, r1, 0
movs r1, 0xB
movs r2, 0
bl GetMonData
strh r0, [r6]
adds r0, r7, 0
movs r1, 0xC
movs r2, 0
bl GetMonData
lsls r0, 16
lsrs r0, 16
cmp r0, 0xAF
bne _0803E266
movs r0, 0
_0803E266:
strh r0, [r6, 0x2]
movs r5, 0
movs r0, 0x2B
adds r0, r6
mov r8, r0
movs r1, 0x20
adds r1, r6
mov r9, r1
adds r4, r6, 0x4
_0803E278:
adds r1, r5, 0
adds r1, 0xD
adds r0, r7, 0
movs r2, 0
bl GetMonData
strh r0, [r4]
adds r4, 0x2
adds r5, 0x1
cmp r5, 0x3
ble _0803E278
adds r0, r7, 0
movs r1, 0x38
movs r2, 0
bl GetMonData
strb r0, [r6, 0xC]
adds r0, r7, 0
movs r1, 0x15
movs r2, 0
bl GetMonData
strb r0, [r6, 0xD]
adds r0, r7, 0
movs r1, 0x1
movs r2, 0
bl GetMonData
str r0, [r6, 0x14]
adds r0, r7, 0
movs r1, 0x1A
movs r2, 0
bl GetMonData
strb r0, [r6, 0xE]
adds r0, r7, 0
movs r1, 0x1B
movs r2, 0
bl GetMonData
strb r0, [r6, 0xF]
adds r0, r7, 0
movs r1, 0x1C
movs r2, 0
bl GetMonData
strb r0, [r6, 0x10]
adds r0, r7, 0
movs r1, 0x1D
movs r2, 0
bl GetMonData
strb r0, [r6, 0x11]
adds r0, r7, 0
movs r1, 0x1E
movs r2, 0
bl GetMonData
strb r0, [r6, 0x12]
adds r0, r7, 0
movs r1, 0x1F
movs r2, 0
bl GetMonData
strb r0, [r6, 0x13]
adds r0, r7, 0
movs r1, 0x20
movs r2, 0
bl GetMonData
mov r1, r8
strb r0, [r1]
adds r0, r7, 0
movs r1, 0x27
movs r2, 0
bl GetMonData
movs r4, 0x1F
ands r0, r4
ldrb r2, [r6, 0x18]
movs r1, 0x20
negs r1, r1
ands r1, r2
orrs r1, r0
strb r1, [r6, 0x18]
adds r0, r7, 0
movs r1, 0x28
movs r2, 0
bl GetMonData
movs r5, 0x1F
ands r0, r5
lsls r0, 5
ldrh r2, [r6, 0x18]
ldr r1, _0803E3DC @ =0xfffffc1f
ands r1, r2
orrs r1, r0
strh r1, [r6, 0x18]
adds r0, r7, 0
movs r1, 0x29
movs r2, 0
bl GetMonData
ands r0, r4
lsls r0, 2
ldrb r2, [r6, 0x19]
movs r1, 0x7D
negs r1, r1
ands r1, r2
orrs r1, r0
strb r1, [r6, 0x19]
adds r0, r7, 0
movs r1, 0x2A
movs r2, 0
bl GetMonData
movs r1, 0x1F
ands r1, r0
lsls r1, 15
ldr r0, [r6, 0x18]
ldr r2, _0803E3E0 @ =0xfff07fff
ands r0, r2
orrs r0, r1
str r0, [r6, 0x18]
adds r0, r7, 0
movs r1, 0x2B
movs r2, 0
bl GetMonData
ands r0, r5
lsls r0, 4
ldrh r2, [r6, 0x1A]
ldr r1, _0803E3E4 @ =0xfffffe0f
ands r1, r2
orrs r1, r0
strh r1, [r6, 0x1A]
adds r0, r7, 0
movs r1, 0x2C
movs r2, 0
bl GetMonData
ands r0, r4
lsls r0, 1
ldrb r2, [r6, 0x1B]
movs r1, 0x3F
negs r1, r1
ands r1, r2
orrs r1, r0
strb r1, [r6, 0x1B]
adds r0, r7, 0
movs r1, 0x2E
movs r2, 0
bl GetMonData
lsls r0, 7
ldrb r2, [r6, 0x1B]
movs r1, 0x7F
ands r1, r2
orrs r1, r0
strb r1, [r6, 0x1B]
adds r0, r7, 0
movs r1, 0
movs r2, 0
bl GetMonData
str r0, [r6, 0x1C]
adds r0, r7, 0
movs r1, 0x2
mov r2, r9
bl GetMonData
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803E3DC: .4byte 0xfffffc1f
_0803E3E0: .4byte 0xfff07fff
_0803E3E4: .4byte 0xfffffe0f
thumb_func_end sub_803E23C
thumb_func_start CalculateBoxMonChecksum
CalculateBoxMonChecksum: @ 803E3E8
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r4, r0, 0
movs r6, 0
ldr r1, [r4]
movs r2, 0
bl GetSubstruct
adds r5, r0, 0
ldr r1, [r4]
adds r0, r4, 0
movs r2, 0x1
bl GetSubstruct
adds r7, r0, 0
ldr r1, [r4]
adds r0, r4, 0
movs r2, 0x2
bl GetSubstruct
mov r8, r0
ldr r1, [r4]
adds r0, r4, 0
movs r2, 0x3
bl GetSubstruct
adds r3, r0, 0
movs r1, 0x5
_0803E422:
ldrh r0, [r5]
adds r0, r6, r0
lsls r0, 16
lsrs r6, r0, 16
adds r5, 0x2
subs r1, 0x1
cmp r1, 0
bge _0803E422
adds r2, r7, 0
movs r1, 0x5
_0803E436:
ldrh r0, [r2]
adds r0, r6, r0
lsls r0, 16
lsrs r6, r0, 16
adds r2, 0x2
subs r1, 0x1
cmp r1, 0
bge _0803E436
mov r2, r8
movs r1, 0x5
_0803E44A:
ldrh r0, [r2]
adds r0, r6, r0
lsls r0, 16
lsrs r6, r0, 16
adds r2, 0x2
subs r1, 0x1
cmp r1, 0
bge _0803E44A
adds r2, r3, 0
movs r1, 0x5
_0803E45E:
ldrh r0, [r2]
adds r0, r6, r0
lsls r0, 16
lsrs r6, r0, 16
adds r2, 0x2
subs r1, 0x1
cmp r1, 0
bge _0803E45E
adds r0, r6, 0
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end CalculateBoxMonChecksum
thumb_func_start CalculateMonStats
CalculateMonStats: @ 803E47C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x40
adds r5, r0, 0
movs r1, 0x3A
movs r2, 0
bl GetMonData
mov r8, r0
adds r0, r5, 0
movs r1, 0x39
movs r2, 0
bl GetMonData
str r0, [sp, 0x1C]
adds r0, r5, 0
movs r1, 0x27
movs r2, 0
bl GetMonData
adds r6, r0, 0
adds r0, r5, 0
movs r1, 0x1A
movs r2, 0
bl GetMonData
adds r4, r0, 0
adds r0, r5, 0
movs r1, 0x28
movs r2, 0
bl GetMonData
mov r10, r0
adds r0, r5, 0
movs r1, 0x1B
movs r2, 0
bl GetMonData
mov r9, r0
adds r0, r5, 0
movs r1, 0x29
movs r2, 0
bl GetMonData
str r0, [sp, 0x20]
adds r0, r5, 0
movs r1, 0x1C
movs r2, 0
bl GetMonData
str r0, [sp, 0x24]
adds r0, r5, 0
movs r1, 0x2A
movs r2, 0
bl GetMonData
str r0, [sp, 0x28]
adds r0, r5, 0
movs r1, 0x1D
movs r2, 0
bl GetMonData
str r0, [sp, 0x2C]
adds r0, r5, 0
movs r1, 0x2B
movs r2, 0
bl GetMonData
str r0, [sp, 0x30]
adds r0, r5, 0
movs r1, 0x1E
movs r2, 0
bl GetMonData
str r0, [sp, 0x34]
adds r0, r5, 0
movs r1, 0x2C
movs r2, 0
bl GetMonData
str r0, [sp, 0x38]
adds r0, r5, 0
movs r1, 0x1F
movs r2, 0
bl GetMonData
str r0, [sp, 0x3C]
adds r0, r5, 0
movs r1, 0xB
movs r2, 0
bl GetMonData
lsls r0, 16
lsrs r7, r0, 16
adds r0, r5, 0
bl GetLevelFromMonExp
lsls r0, 24
lsrs r0, 24
str r0, [sp]
adds r0, r5, 0
movs r1, 0x38
mov r2, sp
bl sub_804037C
ldr r0, _0803E564 @ =0x0000012f
cmp r7, r0
bne _0803E568
movs r0, 0x1
str r0, [sp, 0x4]
lsls r6, r7, 3
b _0803E596
.align 2, 0
_0803E564: .4byte 0x0000012f
_0803E568:
ldr r1, _0803E734 @ =gBaseStats
lsls r2, r7, 3
subs r0, r2, r7
lsls r0, 2
adds r0, r1
ldrb r0, [r0]
lsls r0, 1
adds r1, r0, r6
adds r0, r4, 0
adds r6, r2, 0
cmp r0, 0
bge _0803E582
adds r0, 0x3
_0803E582:
asrs r0, 2
adds r0, r1, r0
ldr r4, [sp]
muls r0, r4
movs r1, 0x64
bl __divsi3
adds r0, r4
adds r0, 0xA
str r0, [sp, 0x4]
_0803E596:
ldr r1, _0803E738 @ =gBattleScripting
add r2, sp, 0x4
ldrb r0, [r2]
mov r3, r8
subs r0, r3
adds r1, 0x23
strb r0, [r1]
lsls r0, 24
cmp r0, 0
bne _0803E5AE
movs r0, 0x1
strb r0, [r1]
_0803E5AE:
adds r0, r5, 0
movs r1, 0x3A
bl sub_804037C
ldr r0, _0803E734 @ =gBaseStats
subs r1, r6, r7
lsls r1, 2
adds r6, r1, r0
ldrb r0, [r6, 0x1]
lsls r0, 1
mov r2, r10
adds r1, r0, r2
mov r0, r9
cmp r0, 0
bge _0803E5CE
adds r0, 0x3
_0803E5CE:
asrs r0, 2
adds r0, r1, r0
ldr r1, [sp]
muls r0, r1
movs r1, 0x64
bl __divsi3
adds r0, 0x5
str r0, [sp, 0x8]
adds r0, r5, 0
bl GetNature
lsls r0, 24
lsrs r0, 24
add r4, sp, 0x8
ldrh r1, [r4]
movs r2, 0x1
bl nature_stat_mod
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x8]
adds r0, r5, 0
movs r1, 0x3B
adds r2, r4, 0
bl sub_804037C
ldrb r0, [r6, 0x2]
lsls r0, 1
ldr r3, [sp, 0x20]
adds r1, r0, r3
ldr r0, [sp, 0x24]
cmp r0, 0
bge _0803E614
adds r0, 0x3
_0803E614:
asrs r0, 2
adds r0, r1, r0
ldr r1, [sp]
muls r0, r1
movs r1, 0x64
bl __divsi3
adds r0, 0x5
str r0, [sp, 0xC]
adds r0, r5, 0
bl GetNature
lsls r0, 24
lsrs r0, 24
add r4, sp, 0xC
ldrh r1, [r4]
movs r2, 0x2
bl nature_stat_mod
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0xC]
adds r0, r5, 0
movs r1, 0x3C
adds r2, r4, 0
bl sub_804037C
ldrb r0, [r6, 0x3]
lsls r0, 1
ldr r2, [sp, 0x28]
adds r1, r0, r2
ldr r0, [sp, 0x2C]
cmp r0, 0
bge _0803E65A
adds r0, 0x3
_0803E65A:
asrs r0, 2
adds r0, r1, r0
ldr r1, [sp]
muls r0, r1
movs r1, 0x64
bl __divsi3
adds r0, 0x5
str r0, [sp, 0x10]
adds r0, r5, 0
bl GetNature
lsls r0, 24
lsrs r0, 24
add r4, sp, 0x10
ldrh r1, [r4]
movs r2, 0x3
bl nature_stat_mod
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x10]
adds r0, r5, 0
movs r1, 0x3D
adds r2, r4, 0
bl sub_804037C
ldrb r0, [r6, 0x4]
lsls r0, 1
ldr r3, [sp, 0x30]
adds r1, r0, r3
ldr r0, [sp, 0x34]
cmp r0, 0
bge _0803E6A0
adds r0, 0x3
_0803E6A0:
asrs r0, 2
adds r0, r1, r0
ldr r1, [sp]
muls r0, r1
movs r1, 0x64
bl __divsi3
adds r0, 0x5
str r0, [sp, 0x14]
adds r0, r5, 0
bl GetNature
lsls r0, 24
lsrs r0, 24
add r4, sp, 0x14
ldrh r1, [r4]
movs r2, 0x4
bl nature_stat_mod
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x14]
adds r0, r5, 0
movs r1, 0x3E
adds r2, r4, 0
bl sub_804037C
ldrb r0, [r6, 0x5]
lsls r0, 1
ldr r2, [sp, 0x38]
adds r1, r0, r2
ldr r0, [sp, 0x3C]
cmp r0, 0
bge _0803E6E6
adds r0, 0x3
_0803E6E6:
asrs r0, 2
adds r0, r1, r0
ldr r1, [sp]
muls r0, r1
movs r1, 0x64
bl __divsi3
adds r0, 0x5
str r0, [sp, 0x18]
adds r0, r5, 0
bl GetNature
lsls r0, 24
lsrs r0, 24
add r4, sp, 0x18
ldrh r1, [r4]
movs r2, 0x5
bl nature_stat_mod
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x18]
adds r0, r5, 0
movs r1, 0x3F
adds r2, r4, 0
bl sub_804037C
ldr r0, _0803E73C @ =0x0000012f
cmp r7, r0
bne _0803E740
ldr r0, [sp, 0x1C]
cmp r0, 0
bne _0803E72E
mov r3, r8
cmp r3, 0
bne _0803E764
_0803E72E:
movs r0, 0x1
b _0803E758
.align 2, 0
_0803E734: .4byte gBaseStats
_0803E738: .4byte gBattleScripting
_0803E73C: .4byte 0x0000012f
_0803E740:
ldr r1, [sp, 0x1C]
cmp r1, 0
bne _0803E750
mov r0, r8
cmp r0, 0
bne _0803E764
ldr r0, [sp, 0x4]
b _0803E758
_0803E750:
ldr r0, [sp, 0x4]
mov r2, r8
subs r0, r2
adds r0, r1, r0
_0803E758:
str r0, [sp, 0x1C]
add r2, sp, 0x1C
adds r0, r5, 0
movs r1, 0x39
bl sub_804037C
_0803E764:
add sp, 0x40
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end CalculateMonStats
thumb_func_start BoxMonToMon
BoxMonToMon: @ 803E774
push {r4,lr}
sub sp, 0x4
adds r2, r0, 0
adds r4, r1, 0
movs r0, 0
str r0, [sp]
adds r0, r4, 0
adds r1, r2, 0
movs r2, 0x50
bl memcpy
adds r0, r4, 0
movs r1, 0x37
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x39
mov r2, sp
bl sub_804037C
adds r0, r4, 0
movs r1, 0x3A
mov r2, sp
bl sub_804037C
movs r0, 0xFF
str r0, [sp]
adds r0, r4, 0
movs r1, 0x40
mov r2, sp
bl sub_804037C
adds r0, r4, 0
bl CalculateMonStats
add sp, 0x4
pop {r4}
pop {r0}
bx r0
thumb_func_end BoxMonToMon
thumb_func_start GetLevelFromMonExp
GetLevelFromMonExp: @ 803E7C4
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0xB
movs r2, 0
bl GetMonData
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
adds r0, r5, 0
movs r1, 0x19
movs r2, 0
bl GetMonData
adds r3, r0, 0
movs r2, 0x1
ldr r6, _0803E828 @ =gUnknown_8253AE4
ldr r1, _0803E82C @ =gBaseStats
lsls r0, r4, 3
subs r0, r4
lsls r0, 2
adds r1, r0, r1
ldrb r0, [r1, 0x13]
movs r5, 0xCA
lsls r5, 1
muls r0, r5
adds r0, 0x4
adds r0, r6
ldr r0, [r0]
cmp r0, r3
bhi _0803E81A
adds r4, r1, 0
_0803E804:
adds r2, 0x1
cmp r2, 0x64
bgt _0803E81A
lsls r1, r2, 2
ldrb r0, [r4, 0x13]
muls r0, r5
adds r1, r0
adds r1, r6
ldr r0, [r1]
cmp r0, r3
bls _0803E804
_0803E81A:
subs r0, r2, 0x1
lsls r0, 24
lsrs r0, 24
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0803E828: .4byte gUnknown_8253AE4
_0803E82C: .4byte gBaseStats
thumb_func_end GetLevelFromMonExp
thumb_func_start GetLevelFromBoxMonExp
GetLevelFromBoxMonExp: @ 803E830
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0xB
movs r2, 0
bl GetBoxMonData
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
adds r0, r5, 0
movs r1, 0x19
movs r2, 0
bl GetBoxMonData
adds r3, r0, 0
movs r2, 0x1
ldr r6, _0803E894 @ =gUnknown_8253AE4
ldr r1, _0803E898 @ =gBaseStats
lsls r0, r4, 3
subs r0, r4
lsls r0, 2
adds r1, r0, r1
ldrb r0, [r1, 0x13]
movs r5, 0xCA
lsls r5, 1
muls r0, r5
adds r0, 0x4
adds r0, r6
ldr r0, [r0]
cmp r0, r3
bhi _0803E886
adds r4, r1, 0
_0803E870:
adds r2, 0x1
cmp r2, 0x64
bgt _0803E886
lsls r1, r2, 2
ldrb r0, [r4, 0x13]
muls r0, r5
adds r1, r0
adds r1, r6
ldr r0, [r1]
cmp r0, r3
bls _0803E870
_0803E886:
subs r0, r2, 0x1
lsls r0, 24
lsrs r0, 24
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0803E894: .4byte gUnknown_8253AE4
_0803E898: .4byte gBaseStats
thumb_func_end GetLevelFromBoxMonExp
thumb_func_start GiveMoveToMon
GiveMoveToMon: @ 803E89C
push {lr}
lsls r1, 16
lsrs r1, 16
bl GiveMoveToBoxMon
lsls r0, 16
lsrs r0, 16
pop {r1}
bx r1
thumb_func_end GiveMoveToMon
thumb_func_start GiveMoveToBoxMon
GiveMoveToBoxMon: @ 803E8B0
push {r4-r7,lr}
sub sp, 0x4
adds r7, r0, 0
mov r0, sp
strh r1, [r0]
movs r5, 0
mov r6, sp
_0803E8BE:
adds r4, r5, 0
adds r4, 0xD
adds r0, r7, 0
adds r1, r4, 0
movs r2, 0
bl GetBoxMonData
lsls r0, 16
lsrs r0, 16
cmp r0, 0
bne _0803E8FC
adds r0, r7, 0
adds r1, r4, 0
mov r2, sp
bl sub_80404D0
adds r1, r5, 0
adds r1, 0x11
ldrh r0, [r6]
lsls r2, r0, 1
adds r2, r0
lsls r2, 2
ldr r0, _0803E8F8 @ =gUnknown_8250C08
adds r2, r0
adds r0, r7, 0
bl sub_80404D0
ldrh r0, [r6]
b _0803E914
.align 2, 0
_0803E8F8: .4byte gUnknown_8250C08
_0803E8FC:
ldrh r1, [r6]
cmp r0, r1
bne _0803E90C
ldr r0, _0803E908 @ =0x0000fffe
b _0803E914
.align 2, 0
_0803E908: .4byte 0x0000fffe
_0803E90C:
adds r5, 0x1
cmp r5, 0x3
ble _0803E8BE
ldr r0, _0803E91C @ =0x0000ffff
_0803E914:
add sp, 0x4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0803E91C: .4byte 0x0000ffff
thumb_func_end GiveMoveToBoxMon
thumb_func_start GiveMoveToBattleMon
GiveMoveToBattleMon: @ 803E920
push {r4,r5,lr}
lsls r1, 16
lsrs r4, r1, 16
movs r3, 0
adds r5, r0, 0
adds r5, 0x24
ldr r2, _0803E94C @ =gBattleMoves
lsls r1, r4, 1
adds r1, r4
lsls r1, 2
adds r2, r1, r2
adds r1, r0, 0
adds r1, 0xC
_0803E93A:
ldrh r0, [r1]
cmp r0, 0
bne _0803E950
strh r4, [r1]
adds r1, r5, r3
ldrb r0, [r2, 0x4]
strb r0, [r1]
adds r0, r4, 0
b _0803E95A
.align 2, 0
_0803E94C: .4byte gBattleMoves
_0803E950:
adds r1, 0x2
adds r3, 0x1
cmp r3, 0x3
ble _0803E93A
ldr r0, _0803E960 @ =0x0000ffff
_0803E95A:
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0803E960: .4byte 0x0000ffff
thumb_func_end GiveMoveToBattleMon
thumb_func_start SetMonMoveSlot
SetMonMoveSlot: @ 803E964
push {r4,r5,lr}
sub sp, 0x4
adds r5, r0, 0
adds r4, r2, 0
mov r0, sp
strh r1, [r0]
lsls r4, 24
lsrs r4, 24
adds r1, r4, 0
adds r1, 0xD
adds r0, r5, 0
mov r2, sp
bl sub_804037C
adds r4, 0x11
mov r0, sp
ldrh r0, [r0]
lsls r2, r0, 1
adds r2, r0
lsls r2, 2
ldr r0, _0803E9A0 @ =gUnknown_8250C08
adds r2, r0
adds r0, r5, 0
adds r1, r4, 0
bl sub_804037C
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0803E9A0: .4byte gUnknown_8250C08
thumb_func_end SetMonMoveSlot
thumb_func_start SetBattleMonMoveSlot
SetBattleMonMoveSlot: @ 803E9A4
push {r4,lr}
lsls r1, 16
lsrs r1, 16
lsls r2, 24
lsrs r2, 24
lsls r4, r2, 1
adds r3, r0, 0
adds r3, 0xC
adds r3, r4
strh r1, [r3]
adds r0, 0x24
adds r0, r2
ldr r3, _0803E9D0 @ =gBattleMoves
lsls r2, r1, 1
adds r2, r1
lsls r2, 2
adds r2, r3
ldrb r1, [r2, 0x4]
strb r1, [r0]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0803E9D0: .4byte gBattleMoves
thumb_func_end SetBattleMonMoveSlot
thumb_func_start GiveMonInitialMoveset
GiveMonInitialMoveset: @ 803E9D4
push {lr}
bl GiveBoxMonInitialMoveset
pop {r0}
bx r0
thumb_func_end GiveMonInitialMoveset
thumb_func_start GiveBoxMonInitialMoveset
GiveBoxMonInitialMoveset: @ 803E9E0
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
mov r8, r0
movs r1, 0xB
movs r2, 0
bl GetBoxMonData
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
mov r0, r8
bl GetLevelFromBoxMonExp
lsls r0, 24
lsrs r0, 24
mov r10, r0
ldr r0, _0803EA7C @ =gUnknown_825D7B4
lsls r6, r4, 2
adds r0, r6, r0
ldr r0, [r0]
ldrh r1, [r0]
ldr r2, _0803EA80 @ =0xffff0000
lsrs r0, r2, 16
cmp r1, r0
beq _0803EA6C
mov r9, r2
movs r3, 0
_0803EA1E:
ldr r0, _0803EA7C @ =gUnknown_825D7B4
adds r7, r6, r0
ldr r0, [r7]
adds r0, r3, r0
ldrh r2, [r0]
movs r1, 0xFE
lsls r1, 8
adds r0, r1, 0
ands r0, r2
mov r4, r10
lsls r1, r4, 9
cmp r0, r1
bgt _0803EA6C
ldr r1, _0803EA84 @ =0x000001ff
adds r0, r1, 0
adds r4, r0, 0
ands r4, r2
mov r0, r8
adds r1, r4, 0
str r3, [sp]
bl GiveMoveToBoxMon
lsls r0, 16
mov r1, r9
lsrs r5, r1, 16
ldr r3, [sp]
cmp r0, r9
bne _0803EA60
mov r0, r8
adds r1, r4, 0
bl DeleteFirstMoveAndGiveMoveToBoxMon
ldr r3, [sp]
_0803EA60:
adds r3, 0x2
ldr r0, [r7]
adds r0, r3, r0
ldrh r0, [r0]
cmp r0, r5
bne _0803EA1E
_0803EA6C:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803EA7C: .4byte gUnknown_825D7B4
_0803EA80: .4byte 0xffff0000
_0803EA84: .4byte 0x000001ff
thumb_func_end GiveBoxMonInitialMoveset
thumb_func_start MonTryLearningNewMove
MonTryLearningNewMove: @ 803EA88
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
mov r8, r0
lsls r4, r1, 24
lsrs r4, 24
movs r0, 0
str r0, [sp]
mov r0, r8
movs r1, 0xB
movs r2, 0
bl GetMonData
lsls r0, 16
lsrs r0, 16
mov r9, r0
mov r0, r8
movs r1, 0x38
movs r2, 0
bl GetMonData
lsls r0, 24
lsrs r0, 24
mov r10, r0
cmp r4, 0
beq _0803EB20
ldr r4, _0803EB0C @ =gUnknown_2024028
mov r1, sp
ldrb r1, [r1]
strb r1, [r4]
ldr r2, _0803EB10 @ =gUnknown_825D7B4
mov r5, r9
lsls r3, r5, 2
adds r5, r3, r2
ldr r0, [r5]
ldrh r1, [r0]
movs r7, 0xFE
lsls r7, 8
adds r0, r7, 0
ands r0, r1
adds r6, r4, 0
mov r12, r2
mov r1, r10
lsls r4, r1, 9
cmp r0, r4
beq _0803EB48
adds r2, r6, 0
ldr r0, _0803EB14 @ =0x0000ffff
mov r12, r0
adds r6, r7, 0
adds r3, r5, 0
_0803EAF4:
ldrb r0, [r2]
adds r0, 0x1
strb r0, [r2]
ldrb r0, [r2]
ldr r1, [r3]
lsls r0, 1
adds r0, r1
ldrh r1, [r0]
cmp r1, r12
bne _0803EB18
movs r0, 0
b _0803EB74
.align 2, 0
_0803EB0C: .4byte gUnknown_2024028
_0803EB10: .4byte gUnknown_825D7B4
_0803EB14: .4byte 0x0000ffff
_0803EB18:
adds r0, r6, 0
ands r0, r1
cmp r0, r4
bne _0803EAF4
_0803EB20:
ldr r3, _0803EB84 @ =gUnknown_825D7B4
mov r1, r9
lsls r4, r1, 2
adds r1, r4, r3
ldr r2, _0803EB88 @ =gUnknown_2024028
ldrb r0, [r2]
ldr r1, [r1]
lsls r0, 1
adds r0, r1
ldrh r1, [r0]
movs r0, 0xFE
lsls r0, 8
ands r0, r1
mov r5, r10
lsls r1, r5, 9
adds r6, r2, 0
mov r12, r3
adds r3, r4, 0
cmp r0, r1
bne _0803EB72
_0803EB48:
ldr r2, _0803EB8C @ =gUnknown_2024022
mov r0, r12
adds r1, r3, r0
ldrb r0, [r6]
ldr r1, [r1]
lsls r0, 1
adds r0, r1
ldrh r1, [r0]
ldr r0, _0803EB90 @ =0x000001ff
ands r0, r1
strh r0, [r2]
ldrb r0, [r6]
adds r0, 0x1
strb r0, [r6]
ldrh r1, [r2]
mov r0, r8
bl GiveMoveToMon
lsls r0, 16
lsrs r0, 16
str r0, [sp]
_0803EB72:
ldr r0, [sp]
_0803EB74:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0803EB84: .4byte gUnknown_825D7B4
_0803EB88: .4byte gUnknown_2024028
_0803EB8C: .4byte gUnknown_2024022
_0803EB90: .4byte 0x000001ff
thumb_func_end MonTryLearningNewMove
thumb_func_start DeleteFirstMoveAndGiveMoveToMon
DeleteFirstMoveAndGiveMoveToMon: @ 803EB94
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x10
adds r6, r0, 0
lsls r1, 16
lsrs r1, 16
mov r8, r1
movs r4, 0
add r7, sp, 0x8
add r0, sp, 0xC
mov r9, r0
mov r5, sp
_0803EBB0:
adds r1, r4, 0
adds r1, 0xE
adds r0, r6, 0
movs r2, 0
bl GetMonData
strh r0, [r5]
adds r1, r4, 0
adds r1, 0x12
adds r0, r6, 0
movs r2, 0
bl GetMonData
adds r1, r7, r4
strb r0, [r1]
adds r5, 0x2
adds r4, 0x1
cmp r4, 0x2
ble _0803EBB0
adds r0, r6, 0
movs r1, 0x15
movs r2, 0
bl GetMonData
mov r1, r9
strb r0, [r1]
ldrb r0, [r1]
lsrs r0, 2
strb r0, [r1]
mov r0, sp
mov r2, r8
strh r2, [r0, 0x6]
ldr r1, _0803EC3C @ =gBattleMoves
mov r2, r8
lsls r0, r2, 1
add r0, r8
lsls r0, 2
adds r0, r1
ldrb r0, [r0, 0x4]
strb r0, [r7, 0x3]
movs r4, 0
mov r5, sp
_0803EC04:
adds r1, r4, 0
adds r1, 0xD
adds r0, r6, 0
adds r2, r5, 0
bl sub_804037C
adds r1, r4, 0
adds r1, 0x11
adds r2, r7, r4
adds r0, r6, 0
bl sub_804037C
adds r5, 0x2
adds r4, 0x1
cmp r4, 0x3
ble _0803EC04
adds r0, r6, 0
movs r1, 0x15
mov r2, r9
bl sub_804037C
add sp, 0x10
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803EC3C: .4byte gBattleMoves
thumb_func_end DeleteFirstMoveAndGiveMoveToMon
thumb_func_start DeleteFirstMoveAndGiveMoveToBoxMon
DeleteFirstMoveAndGiveMoveToBoxMon: @ 803EC40
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x10
adds r6, r0, 0
lsls r1, 16
lsrs r1, 16
mov r8, r1
movs r4, 0
add r7, sp, 0x8
add r0, sp, 0xC
mov r9, r0
mov r5, sp
_0803EC5C:
adds r1, r4, 0
adds r1, 0xE
adds r0, r6, 0
movs r2, 0
bl GetBoxMonData
strh r0, [r5]
adds r1, r4, 0
adds r1, 0x12
adds r0, r6, 0
movs r2, 0
bl GetBoxMonData
adds r1, r7, r4
strb r0, [r1]
adds r5, 0x2
adds r4, 0x1
cmp r4, 0x2
ble _0803EC5C
adds r0, r6, 0
movs r1, 0x15
movs r2, 0
bl GetBoxMonData
mov r1, r9
strb r0, [r1]
ldrb r0, [r1]
lsrs r0, 2
strb r0, [r1]
mov r0, sp
mov r2, r8
strh r2, [r0, 0x6]
ldr r1, _0803ECE8 @ =gBattleMoves
mov r2, r8
lsls r0, r2, 1
add r0, r8
lsls r0, 2
adds r0, r1
ldrb r0, [r0, 0x4]
strb r0, [r7, 0x3]
movs r4, 0
mov r5, sp
_0803ECB0:
adds r1, r4, 0
adds r1, 0xD
adds r0, r6, 0
adds r2, r5, 0
bl sub_80404D0
adds r1, r4, 0
adds r1, 0x11
adds r2, r7, r4
adds r0, r6, 0
bl sub_80404D0
adds r5, 0x2
adds r4, 0x1
cmp r4, 0x3
ble _0803ECB0
adds r0, r6, 0
movs r1, 0x15
mov r2, r9
bl sub_80404D0
add sp, 0x10
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803ECE8: .4byte gBattleMoves
thumb_func_end DeleteFirstMoveAndGiveMoveToBoxMon
.align 2, 0 @ Don't pad with nop.