pokeemerald-jp/asm/battle_factory.s
2019-09-27 01:42:56 -04:00

2323 lines
38 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.text
.syntax unified
thumb_func_start CallBattleFactoryFunction
CallBattleFactoryFunction: @ 0x081A5C0C
push {lr}
ldr r1, _081A5C24
ldr r0, _081A5C28
ldrh r0, [r0]
lsls r0, r0, #2
adds r0, r0, r1
ldr r0, [r0]
bl _call_via_r0
pop {r0}
thumb_func_end CallBattleFactoryFunction
thumb_func_start nullsub_75
nullsub_75: @ 0x081A5C20
bx r0
.align 2, 0
_081A5C24: .4byte 0x085DD958
_081A5C28: .4byte 0x02037280
thumb_func_end nullsub_75
thumb_func_start InitFactoryChallenge
InitFactoryChallenge: @ 0x081A5C2C
push {r4, r5, r6, r7, lr}
ldr r5, _081A5D0C
ldr r0, [r5]
ldr r4, _081A5D10
adds r0, r0, r4
ldrb r0, [r0]
lsls r0, r0, #0x1e
lsrs r7, r0, #0x1e
ldr r0, _081A5D14
bl VarGet
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
ldr r0, [r5]
ldr r1, _081A5D18
adds r0, r0, r1
movs r2, #0
strb r2, [r0]
ldr r1, [r5]
ldr r3, _081A5D1C
adds r0, r1, r3
strh r2, [r0]
adds r1, r1, r4
ldrb r2, [r1]
movs r0, #5
rsbs r0, r0, #0
ands r0, r2
strb r0, [r1]
ldr r1, [r5]
adds r1, r1, r4
ldrb r2, [r1]
movs r0, #9
rsbs r0, r0, #0
ands r0, r2
strb r0, [r1]
ldr r4, [r5]
ldr r0, _081A5D20
adds r3, r4, r0
ldr r2, _081A5D24
lsls r0, r7, #2
lsls r1, r6, #3
adds r0, r0, r1
adds r0, r0, r2
ldr r3, [r3]
ldr r0, [r0]
ands r3, r0
cmp r3, #0
bne _081A5CA2
lsls r1, r7, #1
lsls r0, r6, #2
adds r1, r1, r0
ldr r2, _081A5D28
adds r0, r4, r2
adds r0, r0, r1
strh r3, [r0]
adds r2, #0x10
adds r0, r4, r2
adds r0, r0, r1
strh r3, [r0]
_081A5CA2:
ldr r1, _081A5D2C
movs r0, #0
strb r0, [r1]
movs r2, #0
ldr r6, _081A5D30
movs r4, #0xe7
lsls r4, r4, #4
ldr r0, _081A5D34
adds r3, r0, #0
_081A5CB4:
ldr r1, [r5]
lsls r0, r2, #1
adds r0, r0, r2
lsls r0, r0, #2
adds r1, r1, r0
adds r1, r1, r4
ldrh r0, [r1]
orrs r0, r3
strh r0, [r1]
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #5
bls _081A5CB4
movs r2, #0
ldr r4, _081A5D38
ldr r1, _081A5D34
adds r3, r1, #0
_081A5CD8:
lsls r0, r2, #1
adds r0, r0, r4
ldrh r1, [r0]
orrs r1, r3
strh r1, [r0]
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #2
bls _081A5CD8
ldr r0, [r6]
movs r1, #4
ldrsb r1, [r0, r1]
movs r2, #5
ldrsb r2, [r0, r2]
movs r3, #1
rsbs r3, r3, #0
movs r0, #0
bl SetDynamicWarp
ldr r1, _081A5D3C
movs r0, #0
strh r0, [r1]
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A5D0C: .4byte 0x03005AF0
_081A5D10: .4byte 0x00000CA9
_081A5D14: .4byte 0x000040CE
_081A5D18: .4byte 0x00000CA8
_081A5D1C: .4byte 0x00000CB2
_081A5D20: .4byte 0x00000CDC
_081A5D24: .4byte 0x085DD99C
_081A5D28: .4byte 0x00000DE2
_081A5D2C: .4byte 0x03001284
_081A5D30: .4byte 0x03005AEC
_081A5D34: .4byte 0x0000FFFF
_081A5D38: .4byte 0x03005FD8
_081A5D3C: .4byte 0x0203886A
thumb_func_end InitFactoryChallenge
thumb_func_start GetBattleFactoryData
GetBattleFactoryData: @ 0x081A5D40
push {r4, r5, r6, r7, lr}
ldr r7, _081A5D6C
ldr r0, [r7]
ldr r1, _081A5D70
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x1e
lsrs r6, r0, #0x1e
ldr r0, _081A5D74
bl VarGet
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
ldr r0, _081A5D78
ldrh r0, [r0]
cmp r0, #2
beq _081A5D98
cmp r0, #2
bgt _081A5D7C
cmp r0, #1
beq _081A5D82
b _081A5DDC
.align 2, 0
_081A5D6C: .4byte 0x03005AF0
_081A5D70: .4byte 0x00000CA9
_081A5D74: .4byte 0x000040CE
_081A5D78: .4byte 0x02037282
_081A5D7C:
cmp r0, #3
beq _081A5DC8
b _081A5DDC
_081A5D82:
ldr r3, _081A5D90
ldr r0, [r7]
lsls r1, r6, #1
lsls r2, r5, #2
adds r1, r1, r2
ldr r2, _081A5D94
b _081A5DD4
.align 2, 0
_081A5D90: .4byte 0x02037290
_081A5D94: .4byte 0x00000DE2
_081A5D98:
ldr r4, _081A5DBC
ldr r2, [r7]
ldr r0, _081A5DC0
adds r2, r2, r0
ldr r3, _081A5DC4
lsls r0, r6, #2
lsls r1, r5, #3
adds r0, r0, r1
adds r0, r0, r3
ldr r1, [r2]
ldr r0, [r0]
ands r1, r0
rsbs r0, r1, #0
orrs r0, r1
lsrs r0, r0, #0x1f
strh r0, [r4]
b _081A5DDC
.align 2, 0
_081A5DBC: .4byte 0x02037290
_081A5DC0: .4byte 0x00000CDC
_081A5DC4: .4byte 0x085DD99C
_081A5DC8:
ldr r3, _081A5DE4
ldr r0, [r7]
lsls r1, r6, #1
lsls r2, r5, #2
adds r1, r1, r2
ldr r2, _081A5DE8
_081A5DD4:
adds r0, r0, r2
adds r0, r0, r1
ldrh r0, [r0]
strh r0, [r3]
_081A5DDC:
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A5DE4: .4byte 0x02037290
_081A5DE8: .4byte 0x00000DF2
thumb_func_end GetBattleFactoryData
thumb_func_start SetBattleFactoryData
SetBattleFactoryData: @ 0x081A5DEC
push {r4, r5, r6, lr}
ldr r6, _081A5E18
ldr r0, [r6]
ldr r1, _081A5E1C
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x1e
lsrs r5, r0, #0x1e
ldr r0, _081A5E20
bl VarGet
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
ldr r0, _081A5E24
ldrh r0, [r0]
cmp r0, #2
beq _081A5E4C
cmp r0, #2
bgt _081A5E28
cmp r0, #1
beq _081A5E2E
b _081A5EC0
.align 2, 0
_081A5E18: .4byte 0x03005AF0
_081A5E1C: .4byte 0x00000CA9
_081A5E20: .4byte 0x000040CE
_081A5E24: .4byte 0x02037282
_081A5E28:
cmp r0, #3
beq _081A5EA0
b _081A5EC0
_081A5E2E:
ldr r2, [r6]
lsls r0, r5, #1
lsls r1, r4, #2
adds r0, r0, r1
ldr r1, _081A5E44
adds r2, r2, r1
adds r2, r2, r0
ldr r0, _081A5E48
ldrh r0, [r0]
strh r0, [r2]
b _081A5EC0
.align 2, 0
_081A5E44: .4byte 0x00000DE2
_081A5E48: .4byte 0x02037284
_081A5E4C:
ldr r0, _081A5E70
ldrh r0, [r0]
cmp r0, #0
beq _081A5E7C
ldr r2, [r6]
ldr r0, _081A5E74
adds r2, r2, r0
ldr r3, _081A5E78
lsls r1, r5, #2
lsls r0, r4, #3
adds r1, r1, r0
adds r1, r1, r3
ldr r0, [r2]
ldr r1, [r1]
orrs r0, r1
str r0, [r2]
b _081A5EC0
.align 2, 0
_081A5E70: .4byte 0x02037284
_081A5E74: .4byte 0x00000CDC
_081A5E78: .4byte 0x085DD99C
_081A5E7C:
ldr r2, [r6]
ldr r1, _081A5E98
adds r2, r2, r1
ldr r3, _081A5E9C
lsls r1, r5, #2
lsls r0, r4, #3
adds r1, r1, r0
adds r1, r1, r3
ldr r0, [r2]
ldr r1, [r1]
ands r0, r1
str r0, [r2]
b _081A5EC0
.align 2, 0
_081A5E98: .4byte 0x00000CDC
_081A5E9C: .4byte 0x085DD9AC
_081A5EA0:
ldr r3, _081A5EC8
ldrb r0, [r3]
cmp r0, #1
bne _081A5EC0
ldr r2, [r6]
lsls r0, r5, #1
lsls r1, r4, #2
adds r0, r0, r1
ldr r1, _081A5ECC
adds r2, r2, r1
adds r2, r2, r0
ldr r0, _081A5ED0
ldrh r0, [r0]
movs r1, #0
strh r0, [r2]
strb r1, [r3]
_081A5EC0:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_081A5EC8: .4byte 0x03001284
_081A5ECC: .4byte 0x00000DF2
_081A5ED0: .4byte 0x02037284
thumb_func_end SetBattleFactoryData
thumb_func_start sub_081A5ED4
sub_081A5ED4: @ 0x081A5ED4
push {r4, lr}
ldr r4, _081A5F08
ldr r0, [r4]
ldr r1, _081A5F0C
ldrh r1, [r1]
ldr r2, _081A5F10
adds r0, r0, r2
strb r1, [r0]
movs r0, #0x80
lsls r0, r0, #7
movs r1, #0
bl VarSet
ldr r1, [r4]
ldr r0, _081A5F14
adds r1, r1, r0
ldrb r0, [r1]
movs r2, #4
orrs r0, r2
strb r0, [r1]
bl sub_081A482C
pop {r4}
pop {r0}
bx r0
.align 2, 0
_081A5F08: .4byte 0x03005AF0
_081A5F0C: .4byte 0x02037282
_081A5F10: .4byte 0x00000CA8
_081A5F14: .4byte 0x00000CA9
thumb_func_end sub_081A5ED4
thumb_func_start SwapRentalMons
SwapRentalMons: @ 0x081A5F18
bx lr
.align 2, 0
thumb_func_end SwapRentalMons
thumb_func_start nullsub_123
nullsub_123: @ 0x081A5F1C
bx lr
.align 2, 0
thumb_func_end nullsub_123
thumb_func_start SelectInitialRentalMons
SelectInitialRentalMons: @ 0x081A5F20
push {lr}
bl ZeroPlayerPartyMons
bl DoBattleFactorySelectScreen
pop {r0}
bx r0
.align 2, 0
thumb_func_end SelectInitialRentalMons
thumb_func_start sub_081A5F30
sub_081A5F30: @ 0x081A5F30
push {lr}
bl DoBattleFactorySwapScreen
pop {r0}
bx r0
.align 2, 0
thumb_func_end sub_081A5F30
thumb_func_start SetPerformedRentalSwap
SetPerformedRentalSwap: @ 0x081A5F3C
ldr r1, _081A5F44
movs r0, #1
strb r0, [r1]
bx lr
.align 2, 0
_081A5F44: .4byte 0x03001284
thumb_func_end SetPerformedRentalSwap
thumb_func_start GenerateOpponentMons
GenerateOpponentMons: @ 0x081A5F48
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x28
ldr r4, _081A611C
ldr r0, [r4]
ldr r1, _081A6120
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x1e
lsrs r0, r0, #0x1e
str r0, [sp, #0x10]
ldr r0, _081A6124
bl VarGet
lsls r0, r0, #0x10
ldr r1, [r4]
ldr r3, [sp, #0x10]
lsls r2, r3, #1
lsrs r0, r0, #0xe
adds r2, r2, r0
ldr r6, _081A6128
adds r1, r1, r6
adds r1, r1, r2
ldrh r0, [r1]
movs r1, #7
bl __udivsi3
ldr r2, _081A612C
ldr r1, _081A6130
str r1, [r2]
ldr r5, _081A6134
lsls r0, r0, #0x18
str r0, [sp, #0x20]
mov r8, r0
_081A5F92:
ldr r0, [r4]
adds r0, r0, r5
ldrb r1, [r0]
mov r2, r8
lsrs r0, r2, #0x18
bl sub_0816245C
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
movs r7, #0
ldr r1, [r4]
adds r0, r1, r5
ldr r6, [sp, #0x10]
lsls r6, r6, #0x18
str r6, [sp, #0x1c]
ldrh r0, [r0]
cmp r7, r0
bge _081A5FDC
ldr r2, _081A6138
adds r0, r1, r2
ldrh r0, [r0]
ldr r6, _081A611C
cmp r0, r3
beq _081A5FDC
ldr r1, [r6]
ldr r6, _081A6134
adds r0, r1, r6
ldrh r2, [r0]
ldr r0, _081A6138
adds r1, r1, r0
_081A5FCE:
adds r1, #2
adds r7, #1
cmp r7, r2
bge _081A5FDC
ldrh r0, [r1]
cmp r0, r3
bne _081A5FCE
_081A5FDC:
ldr r0, [r4]
ldr r1, _081A6134
adds r0, r0, r1
ldr r6, _081A611C
ldrh r0, [r0]
cmp r7, r0
bne _081A5F92
ldr r0, _081A613C
strh r3, [r0]
ldr r2, [r6]
adds r1, r2, r1
ldrh r0, [r1]
cmp r0, #5
bhi _081A6004
adds r1, r0, #0
lsls r1, r1, #1
ldr r4, _081A6138
adds r0, r2, r4
adds r0, r0, r1
strh r3, [r0]
_081A6004:
movs r7, #0
mov sl, sp
movs r6, #0
lsls r6, r6, #1
str r6, [sp, #0x14]
add r6, sp
str r6, [sp, #0x18]
_081A6012:
ldr r1, [sp, #0x1c]
lsrs r0, r1, #0x18
ldr r2, [sp, #0x20]
lsrs r1, r2, #0x18
movs r2, #0
bl GetMonSetId
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r0
ldr r4, _081A6140
ldr r2, [r4]
lsls r1, r0, #4
adds r0, r1, r2
ldrh r0, [r0]
cmp r0, #0xc9
beq _081A6106
movs r3, #0
ldr r6, _081A611C
mov r8, r1
adds r5, r0, #0
ldr r1, [r6]
_081A603E:
movs r4, #0xe7
lsls r4, r4, #4
adds r0, r1, r4
ldrh r0, [r0]
lsls r0, r0, #4
adds r0, r0, r2
ldrh r0, [r0]
cmp r5, r0
beq _081A6058
adds r1, #0xc
adds r3, #1
cmp r3, #5
ble _081A603E
_081A6058:
cmp r3, #6
bne _081A6106
ldr r6, [sp, #0x10]
cmp r6, #0
bne _081A6068
ldr r0, _081A6144
cmp sb, r0
bhi _081A6106
_081A6068:
movs r2, #0
adds r4, r2, r7
cmp r2, r4
bge _081A609A
ldr r1, [sp, #0x18]
ldrh r0, [r1]
cmp r0, r5
beq _081A609A
adds r6, r4, #0
ldr r3, _081A6140
mov ip, r3
mov r5, r8
ldr r3, [sp, #0x14]
add r3, sp
_081A6084:
adds r3, #2
adds r2, #1
cmp r2, r6
bge _081A609A
mov r1, ip
ldr r0, [r1]
adds r0, r5, r0
ldrh r1, [r3]
ldrh r0, [r0]
cmp r1, r0
bne _081A6084
_081A609A:
cmp r2, r4
bne _081A6106
movs r2, #0
cmp r2, r4
bge _081A60D6
ldr r3, _081A6148
mov ip, r3
add r0, sp, #8
ldr r6, [sp, #0x14]
adds r3, r0, r6
mov r0, r8
str r0, [sp, #0x24]
adds r5, r4, #0
_081A60B4:
ldrh r1, [r3]
cmp r1, #0
beq _081A60CE
ldr r6, _081A6140
ldr r0, [r6]
ldr r6, [sp, #0x24]
adds r0, r6, r0
ldrb r0, [r0, #0xa]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r1, r0
beq _081A60D6
_081A60CE:
adds r3, #2
adds r2, #1
cmp r2, r5
blt _081A60B4
_081A60D6:
cmp r2, r4
bne _081A6106
lsls r4, r7, #1
ldr r0, _081A6140
ldr r1, [r0]
add r1, r8
ldrh r0, [r1]
mov r2, sl
strh r0, [r2]
add r2, sp, #8
adds r2, r2, r4
ldr r3, _081A6148
ldrb r0, [r1, #0xa]
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r2]
ldr r0, _081A614C
adds r4, r4, r0
mov r3, sb
strh r3, [r4]
movs r4, #2
add sl, r4
adds r7, #1
_081A6106:
cmp r7, #3
bne _081A6012
add sp, #0x28
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A611C: .4byte 0x03005AF0
_081A6120: .4byte 0x00000CA9
_081A6124: .4byte 0x000040CE
_081A6128: .4byte 0x00000DE2
_081A612C: .4byte 0x0203B954
_081A6130: .4byte 0x085B4A10
_081A6134: .4byte 0x00000CB2
_081A6138: .4byte 0x00000CB4
_081A613C: .4byte 0x0203886A
_081A6140: .4byte 0x0203B958
_081A6144: .4byte 0x00000351
_081A6148: .4byte 0x085ADBF4
_081A614C: .4byte 0x03005FD8
thumb_func_end GenerateOpponentMons
thumb_func_start SetOpponentGfxVar
SetOpponentGfxVar: @ 0x081A6150
push {lr}
ldr r0, _081A6160
ldrh r0, [r0]
movs r1, #0
bl SetBattleFacilityTrainerGfxId
pop {r0}
bx r0
.align 2, 0
_081A6160: .4byte 0x0203886A
thumb_func_end SetOpponentGfxVar
thumb_func_start SetRentalsToOpponentParty
SetRentalsToOpponentParty: @ 0x081A6164
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
ldr r0, _081A6184
ldr r0, [r0]
ldr r1, _081A6188
adds r0, r0, r1
ldrb r1, [r0]
movs r0, #3
ands r0, r1
cmp r0, #2
beq _081A6194
ldr r1, _081A618C
ldr r0, _081A6190
b _081A6198
.align 2, 0
_081A6184: .4byte 0x03005AF0
_081A6188: .4byte 0x00000CA9
_081A618C: .4byte 0x0203B958
_081A6190: .4byte 0x085B8700
_081A6194:
ldr r1, _081A6238
ldr r0, _081A623C
_081A6198:
str r0, [r1]
movs r7, #0
ldr r2, _081A6240
mov r8, r2
_081A61A0:
mov r0, r8
ldr r1, [r0]
adds r0, r7, #3
lsls r4, r0, #1
adds r4, r4, r0
lsls r4, r4, #2
adds r1, r1, r4
ldr r0, _081A6244
lsls r6, r7, #1
adds r6, r6, r0
ldrh r0, [r6]
movs r2, #0xe7
lsls r2, r2, #4
adds r1, r1, r2
strh r0, [r1]
movs r0, #0x64
adds r5, r7, #0
muls r5, r0, r5
ldr r0, _081A6248
adds r5, r5, r0
adds r0, r5, #0
movs r1, #0x28
movs r2, #0
bl GetBoxMonData
mov r2, r8
ldr r1, [r2]
adds r1, r1, r4
ldr r2, _081A624C
adds r1, r1, r2
strb r0, [r1]
adds r0, r5, #0
movs r1, #0
movs r2, #0
bl GetMonData
mov r2, r8
ldr r1, [r2]
ldr r2, _081A6250
adds r1, r1, r2
adds r1, r1, r4
str r0, [r1]
adds r0, r5, #0
movs r1, #0x2e
movs r2, #0
bl GetBoxMonData
mov r2, r8
ldr r1, [r2]
adds r1, r1, r4
ldr r2, _081A6254
adds r1, r1, r2
strb r0, [r1]
ldrh r1, [r6]
ldr r0, _081A6238
ldr r0, [r0]
lsls r1, r1, #4
adds r1, r1, r0
ldrb r2, [r1, #0xa]
lsls r2, r2, #1
ldr r0, _081A6258
adds r2, r2, r0
adds r0, r5, #0
movs r1, #0xc
bl SetMonData
adds r0, r7, #1
lsls r0, r0, #0x18
lsrs r7, r0, #0x18
cmp r7, #2
bls _081A61A0
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A6238: .4byte 0x0203B958
_081A623C: .4byte 0x085BCF70
_081A6240: .4byte 0x03005AF0
_081A6244: .4byte 0x03005FD8
_081A6248: .4byte 0x020243E8
_081A624C: .4byte 0x00000E78
_081A6250: .4byte 0x00000E74
_081A6254: .4byte 0x00000E79
_081A6258: .4byte 0x085ADBF4
thumb_func_end SetRentalsToOpponentParty
thumb_func_start SetPlayerAndOpponentParties
SetPlayerAndOpponentParties: @ 0x081A625C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x24
ldr r0, _081A6288
ldr r0, [r0]
ldr r1, _081A628C
adds r2, r0, r1
ldrb r1, [r2]
movs r3, #3
adds r0, r3, #0
ands r0, r1
cmp r0, #2
bne _081A6298
ldr r1, _081A6290
ldr r0, _081A6294
str r0, [r1]
movs r2, #0x1e
str r2, [sp, #0x14]
b _081A62B0
.align 2, 0
_081A6288: .4byte 0x03005AF0
_081A628C: .4byte 0x00000CA9
_081A6290: .4byte 0x0203B958
_081A6294: .4byte 0x085BCF70
_081A6298:
ldr r1, _081A6558
ldr r0, _081A655C
str r0, [r1]
ldrb r1, [r2]
adds r0, r3, #0
ands r0, r1
movs r4, #0x32
str r4, [sp, #0x14]
cmp r0, #0
beq _081A62B0
movs r5, #0x64
str r5, [sp, #0x14]
_081A62B0:
ldr r0, _081A6560
ldrh r0, [r0]
cmp r0, #1
bls _081A62BA
b _081A6404
_081A62BA:
bl ZeroPlayerPartyMons
movs r0, #0
mov r8, r0
mov r1, sp
adds r1, #0x12
str r1, [sp, #0x1c]
ldr r2, _081A6558
mov sb, r2
_081A62CC:
ldr r4, _081A6564
ldr r2, [r4]
mov r5, r8
lsls r5, r5, #1
mov sl, r5
mov r3, sl
add r3, r8
lsls r3, r3, #2
adds r1, r2, r3
movs r4, #0xe7
lsls r4, r4, #4
adds r0, r1, r4
ldrh r7, [r0]
ldr r5, _081A6568
adds r1, r1, r5
ldrb r6, [r1]
movs r1, #0x64
mov r0, r8
muls r0, r1, r0
ldr r1, _081A656C
adds r0, r0, r1
mov r4, sb
ldr r1, [r4]
lsls r4, r7, #4
adds r1, r4, r1
ldrh r1, [r1]
movs r5, #1
str r5, [sp]
ldr r5, _081A6570
adds r2, r2, r5
adds r2, r2, r3
ldr r2, [r2]
str r2, [sp, #4]
movs r2, #0
str r2, [sp, #8]
str r2, [sp, #0xc]
ldr r2, [sp, #0x14]
adds r3, r6, #0
bl CreateMon
movs r1, #0
mov r2, sb
ldr r0, [r2]
adds r4, r4, r0
ldrb r4, [r4, #0xb]
mov r5, r8
adds r5, #1
str r5, [sp, #0x18]
movs r5, #5
_081A632E:
adds r0, r4, #0
movs r2, #1
ands r0, r2
cmp r0, #0
beq _081A633A
adds r1, #1
_081A633A:
lsrs r4, r4, #1
subs r5, #1
cmp r5, #0
bge _081A632E
movs r0, #0xff
lsls r0, r0, #1
bl __divsi3
add r1, sp, #0x10
strh r0, [r1]
movs r4, #1
movs r5, #0
lsls r7, r7, #4
movs r0, #0x64
mov r6, r8
muls r6, r0, r6
ldr r3, _081A656C
_081A635C:
mov r1, sb
ldr r0, [r1]
adds r0, r7, r0
ldrb r0, [r0, #0xb]
ands r0, r4
cmp r0, #0
beq _081A637A
adds r1, r5, #0
adds r1, #0x1a
adds r0, r6, r3
add r2, sp, #0x10
str r3, [sp, #0x20]
bl SetMonData
ldr r3, [sp, #0x20]
_081A637A:
lsls r0, r4, #0x19
lsrs r4, r0, #0x18
adds r5, #1
cmp r5, #5
ble _081A635C
movs r2, #0x64
mov r4, r8
muls r4, r2, r4
ldr r5, _081A656C
adds r0, r4, r5
bl CalculateMonStats
movs r0, #0
ldr r1, [sp, #0x1c]
strb r0, [r1]
movs r6, #0
_081A639A:
mov r2, sb
ldr r0, [r2]
adds r0, r7, r0
lsls r1, r6, #1
adds r0, #2
adds r0, r0, r1
ldrh r1, [r0]
lsls r2, r6, #0x18
lsrs r2, r2, #0x18
adds r0, r4, r5
bl SetMonMoveAvoidReturn
adds r6, #1
cmp r6, #3
ble _081A639A
movs r5, #0x64
mov r4, r8
muls r4, r5, r4
ldr r0, _081A656C
adds r4, r4, r0
adds r0, r4, #0
movs r1, #0x20
ldr r2, [sp, #0x1c]
bl SetMonData
mov r1, sb
ldr r0, [r1]
adds r0, r7, r0
ldrb r2, [r0, #0xa]
lsls r2, r2, #1
ldr r0, _081A6574
adds r2, r2, r0
adds r0, r4, #0
movs r1, #0xc
bl SetMonData
mov r2, sl
add r2, r8
lsls r2, r2, #2
ldr r5, _081A6564
ldr r0, [r5]
adds r2, r2, r0
ldr r0, _081A6578
adds r2, r2, r0
adds r0, r4, #0
movs r1, #0x2e
bl SetMonData
ldr r1, [sp, #0x18]
mov r8, r1
cmp r1, #2
bgt _081A6404
b _081A62CC
_081A6404:
ldr r0, _081A6560
ldrh r0, [r0]
cmp r0, #0
beq _081A6412
cmp r0, #2
beq _081A6412
b _081A6546
_081A6412:
movs r2, #0
mov r8, r2
ldr r4, _081A6558
mov sb, r4
_081A641A:
ldr r5, _081A6564
ldr r3, [r5]
mov r0, r8
adds r0, #3
lsls r2, r0, #1
adds r2, r2, r0
lsls r2, r2, #2
adds r1, r3, r2
movs r4, #0xe7
lsls r4, r4, #4
adds r0, r1, r4
ldrh r7, [r0]
ldr r5, _081A6568
adds r1, r1, r5
ldrb r6, [r1]
movs r1, #0x64
mov r0, r8
muls r0, r1, r0
ldr r1, _081A657C
adds r0, r0, r1
mov r4, sb
ldr r1, [r4]
lsls r4, r7, #4
adds r1, r4, r1
ldrh r1, [r1]
movs r5, #1
str r5, [sp]
ldr r5, _081A6570
adds r3, r3, r5
adds r3, r3, r2
ldr r2, [r3]
str r2, [sp, #4]
movs r2, #0
str r2, [sp, #8]
str r2, [sp, #0xc]
ldr r2, [sp, #0x14]
adds r3, r6, #0
bl CreateMon
movs r1, #0
mov r2, sb
ldr r0, [r2]
adds r4, r4, r0
ldrb r4, [r4, #0xb]
mov r5, r8
lsls r5, r5, #1
mov sl, r5
mov r0, r8
adds r0, #1
str r0, [sp, #0x18]
movs r5, #5
_081A6480:
adds r0, r4, #0
movs r2, #1
ands r0, r2
cmp r0, #0
beq _081A648C
adds r1, #1
_081A648C:
lsrs r4, r4, #1
subs r5, #1
cmp r5, #0
bge _081A6480
add r4, sp, #0x10
movs r0, #0xff
lsls r0, r0, #1
bl __divsi3
strh r0, [r4]
movs r4, #1
movs r5, #0
lsls r7, r7, #4
movs r0, #0x64
mov r6, r8
muls r6, r0, r6
ldr r3, _081A657C
_081A64AE:
mov r1, sb
ldr r0, [r1]
adds r0, r7, r0
ldrb r0, [r0, #0xb]
ands r0, r4
cmp r0, #0
beq _081A64CC
adds r1, r5, #0
adds r1, #0x1a
adds r0, r6, r3
add r2, sp, #0x10
str r3, [sp, #0x20]
bl SetMonData
ldr r3, [sp, #0x20]
_081A64CC:
lsls r0, r4, #0x19
lsrs r4, r0, #0x18
adds r5, #1
cmp r5, #5
ble _081A64AE
movs r2, #0x64
mov r4, r8
muls r4, r2, r4
ldr r5, _081A657C
adds r0, r4, r5
bl CalculateMonStats
movs r6, #0
_081A64E6:
mov r1, sb
ldr r0, [r1]
adds r0, r7, r0
lsls r1, r6, #1
adds r0, #2
adds r0, r0, r1
ldrh r1, [r0]
lsls r2, r6, #0x18
lsrs r2, r2, #0x18
adds r0, r4, r5
bl SetMonMoveAvoidReturn
adds r6, #1
cmp r6, #3
ble _081A64E6
movs r2, #0x64
mov r4, r8
muls r4, r2, r4
ldr r0, _081A657C
adds r4, r4, r0
mov r5, sb
ldr r0, [r5]
adds r0, r7, r0
ldrb r2, [r0, #0xa]
lsls r2, r2, #1
ldr r0, _081A6574
adds r2, r2, r0
adds r0, r4, #0
movs r1, #0xc
bl SetMonData
mov r2, sl
add r2, r8
lsls r2, r2, #2
ldr r1, _081A6564
ldr r0, [r1]
adds r2, r2, r0
ldr r5, _081A6580
adds r2, r2, r5
adds r0, r4, #0
movs r1, #0x2e
bl SetMonData
ldr r0, [sp, #0x18]
mov r8, r0
cmp r0, #2
bgt _081A6546
b _081A641A
_081A6546:
add sp, #0x24
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A6558: .4byte 0x0203B958
_081A655C: .4byte 0x085B8700
_081A6560: .4byte 0x02037282
_081A6564: .4byte 0x03005AF0
_081A6568: .4byte 0x00000E78
_081A656C: .4byte 0x02024190
_081A6570: .4byte 0x00000E74
_081A6574: .4byte 0x085ADBF4
_081A6578: .4byte 0x00000E79
_081A657C: .4byte 0x020243E8
_081A6580: .4byte 0x00000E9D
thumb_func_end SetPlayerAndOpponentParties
thumb_func_start GenerateInitialRentalMons
GenerateInitialRentalMons: @ 0x081A6584
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x4c
ldr r1, _081A662C
ldr r0, _081A6630
str r0, [r1]
mov r0, sp
adds r0, #0xc
str r0, [sp, #0x38]
mov r1, sp
adds r1, #0x18
str r1, [sp, #0x3c]
ldr r2, _081A6634
mov sb, r2
movs r2, #0
adds r3, r1, #0
adds r1, r0, #0
mov r0, sp
movs r4, #5
mov r8, r4
_081A65B2:
strh r2, [r0]
strh r2, [r1]
strh r2, [r3]
adds r3, #2
adds r1, #2
adds r0, #2
movs r5, #1
rsbs r5, r5, #0
add r8, r5
mov r4, r8
cmp r4, #0
bge _081A65B2
mov r5, sb
ldr r0, [r5]
ldr r7, _081A6638
adds r0, r0, r7
ldrb r4, [r0]
lsls r4, r4, #0x1e
lsrs r4, r4, #0x1e
ldr r6, _081A663C
adds r0, r6, #0
bl VarGet
lsls r0, r0, #0x18
ldr r1, [r5]
lsls r4, r4, #1
lsrs r0, r0, #0x16
adds r4, r4, r0
ldr r5, _081A6640
adds r1, r1, r5
adds r1, r1, r4
ldrh r0, [r1]
movs r1, #7
bl __udivsi3
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #0x24]
adds r0, r6, #0
bl VarGet
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r2, #0
cmp r0, #1
bne _081A6610
movs r2, #1
_081A6610:
ldr r1, _081A6644
ldr r0, _081A6648
str r0, [r1]
mov r1, sb
ldr r0, [r1]
adds r0, r0, r7
ldrb r1, [r0]
movs r0, #3
ands r0, r1
cmp r0, #0
beq _081A664C
movs r4, #1
str r4, [sp, #0x28]
b _081A6650
.align 2, 0
_081A662C: .4byte 0x0203B954
_081A6630: .4byte 0x085B4A10
_081A6634: .4byte 0x03005AF0
_081A6638: .4byte 0x00000CA9
_081A663C: .4byte 0x000040CE
_081A6640: .4byte 0x00000DE2
_081A6644: .4byte 0x0203B958
_081A6648: .4byte 0x085B8700
_081A664C:
movs r5, #0
str r5, [sp, #0x28]
_081A6650:
adds r0, r2, #0
ldr r1, [sp, #0x28]
bl GetNumPastRentalsRank
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #0x2c]
movs r0, #0
mov sl, r0
mov r8, r0
ldr r1, [sp, #0x3c]
str r1, [sp, #0x40]
mov r2, sp
str r2, [sp, #0x44]
lsls r4, r0, #1
str r4, [sp, #0x30]
ldr r5, [sp, #0x38]
adds r5, r5, r4
str r5, [sp, #0x34]
_081A6676:
ldr r0, [sp, #0x2c]
cmp r8, r0
bge _081A6684
ldr r0, [sp, #0x28]
ldr r1, [sp, #0x24]
movs r2, #1
b _081A668A
_081A6684:
ldr r0, [sp, #0x28]
ldr r1, [sp, #0x24]
movs r2, #0
_081A668A:
bl GetMonSetId
lsls r0, r0, #0x10
lsrs r7, r0, #0x10
ldr r0, _081A6724
ldr r1, [r0]
lsls r2, r7, #4
adds r4, r2, r1
ldrh r1, [r4]
mov sb, r2
cmp r1, #0xc9
beq _081A677A
movs r3, #0
mov r2, r8
adds r6, r3, r2
cmp r3, r6
bge _081A66E8
ldr r5, [sp, #0x34]
ldrh r0, [r5]
cmp r0, r7
beq _081A66E8
mov ip, r4
adds r2, r1, #0
lsls r4, r3, #1
ldr r1, [sp, #0x30]
add r1, sp
str r6, [sp, #0x48]
_081A66C0:
ldrh r0, [r1]
cmp r0, r2
bne _081A66D2
mov r0, sl
cmp r0, #0
bne _081A66E8
mov r5, ip
ldrh r5, [r5]
mov sl, r5
_081A66D2:
adds r4, #2
adds r1, #2
adds r3, #1
ldr r0, [sp, #0x48]
cmp r3, r0
bge _081A66E8
ldr r5, [sp, #0x38]
adds r0, r5, r4
ldrh r0, [r0]
cmp r0, r7
bne _081A66C0
_081A66E8:
cmp r3, r6
bne _081A677A
movs r3, #0
cmp r3, r6
bge _081A6734
ldr r0, _081A6728
mov ip, r0
ldr r1, [sp, #0x30]
ldr r2, [sp, #0x3c]
adds r5, r1, r2
_081A66FC:
ldrh r4, [r5]
cmp r4, #0
beq _081A672C
ldr r1, _081A6724
ldr r0, [r1]
mov r2, sb
adds r1, r2, r0
ldrb r0, [r1, #0xa]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r4, r0
bne _081A672C
ldrh r0, [r1]
cmp r0, sl
bne _081A6734
movs r4, #0
mov sl, r4
b _081A6734
.align 2, 0
_081A6724: .4byte 0x0203B958
_081A6728: .4byte 0x085ADBF4
_081A672C:
adds r5, #2
adds r3, #1
cmp r3, r6
blt _081A66FC
_081A6734:
cmp r3, r6
bne _081A677A
ldr r0, _081A6794
ldr r1, [r0]
mov r5, r8
lsls r3, r5, #1
adds r0, r3, r5
lsls r0, r0, #2
adds r1, r1, r0
movs r0, #0xe7
lsls r0, r0, #4
adds r1, r1, r0
strh r7, [r1]
ldr r2, _081A6798
ldr r1, [r2]
add r1, sb
ldrh r0, [r1]
ldr r4, [sp, #0x44]
strh r0, [r4]
ldr r2, _081A679C
ldrb r0, [r1, #0xa]
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
ldr r5, [sp, #0x40]
strh r0, [r5]
ldr r0, [sp, #0x38]
adds r3, r0, r3
strh r7, [r3]
adds r5, #2
str r5, [sp, #0x40]
adds r4, #2
str r4, [sp, #0x44]
movs r1, #1
add r8, r1
_081A677A:
mov r2, r8
cmp r2, #6
beq _081A6782
b _081A6676
_081A6782:
add sp, #0x4c
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A6794: .4byte 0x03005AF0
_081A6798: .4byte 0x0203B958
_081A679C: .4byte 0x085ADBF4
thumb_func_end GenerateInitialRentalMons
thumb_func_start GetOpponentMostCommonMonType
GetOpponentMostCommonMonType: @ 0x081A67A0
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #0x18
ldr r1, _081A6830
ldr r0, _081A6834
str r0, [r1]
movs r4, #0
add r5, sp, #0x14
ldr r7, _081A6838
movs r1, #0
_081A67B6:
mov r2, sp
adds r0, r2, r4
strb r1, [r0]
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #0x11
bls _081A67B6
movs r4, #0
ldr r0, _081A683C
mov r8, r0
ldr r0, _081A6830
ldr r6, [r0]
ldr r1, _081A6840
mov ip, r1
_081A67D4:
lsls r0, r4, #1
add r0, r8
ldrh r0, [r0]
lsls r0, r0, #4
adds r0, r0, r6
ldrh r1, [r0]
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #2
mov r2, ip
adds r3, r0, r2
ldrb r2, [r3, #6]
mov r0, sp
adds r1, r0, r2
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
ldrb r1, [r3, #7]
cmp r2, r1
beq _081A6808
ldrb r0, [r3, #7]
mov r2, sp
adds r1, r2, r0
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
_081A6808:
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #2
bls _081A67D4
movs r0, #0
strb r0, [r5]
strb r0, [r5, #1]
movs r4, #1
adds r3, r5, #0
_081A681C:
ldrb r0, [r3]
add r0, sp
mov r2, sp
adds r1, r2, r4
ldrb r2, [r0]
ldrb r0, [r1]
cmp r2, r0
bhs _081A6844
strb r4, [r5]
b _081A684A
.align 2, 0
_081A6830: .4byte 0x0203B958
_081A6834: .4byte 0x085B8700
_081A6838: .4byte 0x02037290
_081A683C: .4byte 0x03005FD8
_081A6840: .4byte 0x082F0D54
_081A6844:
cmp r2, r0
bne _081A684A
strb r4, [r3, #1]
_081A684A:
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #0x11
bls _081A681C
ldrb r1, [r5]
mov r4, sp
adds r0, r4, r1
ldrb r2, [r0]
cmp r2, #0
beq _081A6872
ldrb r3, [r5, #1]
adds r0, r4, r3
ldrb r0, [r0]
cmp r2, r0
bhi _081A686E
cmp r1, r3
bne _081A6872
_081A686E:
strh r1, [r7]
b _081A6876
_081A6872:
movs r0, #0x12
strh r0, [r7]
_081A6876:
add sp, #0x18
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
thumb_func_end GetOpponentMostCommonMonType
thumb_func_start GetOpponentBattleStyle
GetOpponentBattleStyle: @ 0x081A6884
push {r4, r5, r6, r7, lr}
sub sp, #8
movs r7, #0
ldr r1, _081A6928
ldr r0, _081A692C
str r0, [r1]
movs r4, #0
movs r1, #0
_081A6894:
mov r2, sp
adds r0, r2, r4
strb r1, [r0]
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #7
bls _081A6894
movs r4, #0
_081A68A6:
ldr r1, _081A6930
lsls r0, r4, #1
adds r0, r0, r1
ldrh r6, [r0]
movs r5, #0
_081A68B0:
ldr r0, _081A6928
ldr r1, [r0]
lsls r0, r6, #4
adds r0, r0, r1
lsls r1, r5, #1
adds r0, #2
adds r0, r0, r1
ldrh r0, [r0]
bl GetMoveBattleStyle
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
mov r2, sp
adds r1, r2, r0
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #3
bls _081A68B0
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #2
bls _081A68A6
ldr r1, _081A6934
movs r0, #0
strh r0, [r1]
movs r4, #1
adds r5, r1, #0
ldr r3, _081A6938
adds r2, r5, #0
_081A68F4:
mov r1, sp
adds r0, r1, r4
subs r1, r4, #1
adds r1, r1, r3
ldrb r0, [r0]
ldrb r1, [r1]
cmp r0, r1
blo _081A690C
strh r4, [r2]
adds r0, r7, #1
lsls r0, r0, #0x18
lsrs r7, r0, #0x18
_081A690C:
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #7
bls _081A68F4
cmp r7, #2
bls _081A691E
movs r0, #8
strh r0, [r5]
_081A691E:
add sp, #8
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A6928: .4byte 0x0203B958
_081A692C: .4byte 0x085B8700
_081A6930: .4byte 0x03005FD8
_081A6934: .4byte 0x02037290
_081A6938: .4byte 0x085DD7F8
thumb_func_end GetOpponentBattleStyle
thumb_func_start GetMoveBattleStyle
GetMoveBattleStyle: @ 0x081A693C
push {r4, r5, r6, lr}
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
movs r2, #0
ldr r6, _081A6968
_081A6946:
movs r3, #0
lsls r0, r2, #2
adds r0, r0, r6
ldr r1, [r0]
ldrh r0, [r1]
adds r4, r2, #1
cmp r0, #0
beq _081A697C
lsls r0, r4, #0x18
lsrs r2, r0, #0x18
_081A695A:
lsls r0, r3, #1
adds r0, r0, r1
ldrh r0, [r0]
cmp r0, r5
bne _081A696C
adds r0, r2, #0
b _081A6986
.align 2, 0
_081A6968: .4byte 0x085DD93C
_081A696C:
adds r0, r3, #1
lsls r0, r0, #0x18
lsrs r3, r0, #0x18
lsls r0, r3, #1
adds r0, r0, r1
ldrh r0, [r0]
cmp r0, #0
bne _081A695A
_081A697C:
lsls r0, r4, #0x18
lsrs r2, r0, #0x18
cmp r2, #6
bls _081A6946
movs r0, #0
_081A6986:
pop {r4, r5, r6}
pop {r1}
bx r1
thumb_func_end GetMoveBattleStyle
thumb_func_start InBattleFactory
InBattleFactory: @ 0x081A698C
push {lr}
movs r2, #0
ldr r1, _081A69AC
ldr r3, _081A69B0
adds r0, r3, #0
ldrh r1, [r1, #0x12]
adds r0, r0, r1
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #1
bhi _081A69A4
movs r2, #1
_081A69A4:
adds r0, r2, #0
pop {r1}
bx r1
.align 2, 0
_081A69AC: .4byte 0x02036FB8
_081A69B0: .4byte 0xFFFFFEA5
thumb_func_end InBattleFactory
thumb_func_start RestorePlayerPartyHeldItems
RestorePlayerPartyHeldItems: @ 0x081A69B4
push {r4, lr}
ldr r0, _081A69D0
ldr r0, [r0]
ldr r1, _081A69D4
adds r0, r0, r1
ldrb r1, [r0]
movs r0, #3
ands r0, r1
cmp r0, #2
beq _081A69E0
ldr r1, _081A69D8
ldr r0, _081A69DC
b _081A69E4
.align 2, 0
_081A69D0: .4byte 0x03005AF0
_081A69D4: .4byte 0x00000CA9
_081A69D8: .4byte 0x0203B958
_081A69DC: .4byte 0x085B8700
_081A69E0:
ldr r1, _081A6A2C
ldr r0, _081A6A30
_081A69E4:
str r0, [r1]
movs r4, #0
_081A69E8:
movs r0, #0x64
muls r0, r4, r0
ldr r1, _081A6A34
adds r0, r0, r1
ldr r1, _081A6A38
ldr r2, [r1]
lsls r1, r4, #1
adds r1, r1, r4
lsls r1, r1, #2
adds r2, r2, r1
movs r1, #0xe7
lsls r1, r1, #4
adds r2, r2, r1
ldrh r2, [r2]
ldr r1, _081A6A2C
ldr r1, [r1]
lsls r2, r2, #4
adds r2, r2, r1
ldrb r2, [r2, #0xa]
lsls r2, r2, #1
ldr r1, _081A6A3C
adds r2, r2, r1
movs r1, #0xc
bl SetMonData
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #2
bls _081A69E8
pop {r4}
pop {r0}
bx r0
.align 2, 0
_081A6A2C: .4byte 0x0203B958
_081A6A30: .4byte 0x085BCF70
_081A6A34: .4byte 0x02024190
_081A6A38: .4byte 0x03005AF0
_081A6A3C: .4byte 0x085ADBF4
thumb_func_end RestorePlayerPartyHeldItems
thumb_func_start GetFactoryMonFixedIV
GetFactoryMonFixedIV: @ 0x081A6A40
push {lr}
lsls r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
rsbs r2, r1, #0
orrs r2, r1
lsrs r2, r2, #0x1f
lsrs r1, r0, #0x18
cmp r1, #8
bls _081A6A56
movs r1, #7
_081A6A56:
ldr r0, _081A6A64
lsls r1, r1, #1
adds r1, r2, r1
adds r1, r1, r0
ldrb r0, [r1]
pop {r1}
bx r1
.align 2, 0
_081A6A64: .4byte 0x085DD9BC
thumb_func_end GetFactoryMonFixedIV
thumb_func_start FillFactoryBrainParty
FillFactoryBrainParty: @ 0x081A6A68
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x34
ldr r4, _081A6C68
ldr r0, [r4]
ldr r1, _081A6C6C
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x1e
lsrs r0, r0, #0x1e
str r0, [sp, #0x2c]
ldr r0, _081A6C70
bl VarGet
lsls r0, r0, #0x18
ldr r1, [r4]
ldr r3, [sp, #0x2c]
lsls r2, r3, #1
lsrs r0, r0, #0x16
adds r2, r2, r0
ldr r7, _081A6C74
adds r1, r1, r7
adds r1, r1, r2
ldrh r0, [r1]
movs r1, #7
bl __udivsi3
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
str r1, [sp, #0x30]
movs r2, #0x80
lsls r2, r2, #0x12
adds r0, r0, r2
lsrs r0, r0, #0x18
movs r1, #0
bl GetFactoryMonFixedIV
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #0x24]
bl SetFacilityPtrsGetLevel
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #0x20]
movs r3, #0
mov sb, r3
ldr r1, [r4]
ldrb r4, [r1, #0xa]
ldrb r0, [r1, #0xb]
lsls r0, r0, #8
orrs r4, r0
ldrb r0, [r1, #0xc]
lsls r0, r0, #0x10
orrs r4, r0
ldrb r0, [r1, #0xd]
lsls r0, r0, #0x18
orrs r4, r0
str r4, [sp, #0x28]
_081A6AE4:
ldr r0, [sp, #0x2c]
ldr r1, [sp, #0x30]
movs r2, #0
bl GetMonSetId
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
ldr r7, _081A6C78
ldr r1, [r7]
lsls r0, r5, #4
adds r0, r0, r1
ldrh r0, [r0]
cmp r0, #0xc9
bne _081A6B02
b _081A6C50
_081A6B02:
ldr r0, [sp, #0x20]
cmp r0, #0x32
bne _081A6B10
ldr r0, _081A6C7C
cmp r5, r0
bls _081A6B10
b _081A6C50
_081A6B10:
movs r2, #0
ldr r1, _081A6C68
ldr r0, [r1]
movs r3, #0xe7
lsls r3, r3, #4
adds r0, r0, r3
ldrh r0, [r0]
cmp r5, r0
beq _081A6B3A
adds r4, r1, #0
movs r1, #0
_081A6B26:
adds r1, #0xc
adds r2, #1
cmp r2, #5
bgt _081A6B3A
ldr r0, [r4]
adds r0, r0, r1
adds r0, r0, r3
ldrh r0, [r0]
cmp r5, r0
bne _081A6B26
_081A6B3A:
cmp r2, #6
beq _081A6B40
b _081A6C50
_081A6B40:
movs r4, #0
cmp r4, sb
bge _081A6B74
add r2, sp, #0xc
ldr r7, _081A6C78
ldr r0, [r7]
lsls r1, r5, #4
adds r0, r1, r0
ldrh r2, [r2]
adds r7, r1, #0
ldrh r0, [r0]
cmp r2, r0
beq _081A6B74
ldr r6, _081A6C78
adds r3, r7, #0
add r2, sp, #0xc
_081A6B60:
adds r2, #2
adds r4, #1
cmp r4, sb
bge _081A6B74
ldr r0, [r6]
adds r0, r3, r0
ldrh r1, [r2]
ldrh r0, [r0]
cmp r1, r0
bne _081A6B60
_081A6B74:
cmp r4, sb
bne _081A6C50
movs r4, #0
cmp r4, sb
bge _081A6BA4
ldr r7, _081A6C80
ldr r6, _081A6C78
add r2, sp, #0x14
lsls r3, r5, #4
_081A6B86:
ldrh r1, [r2]
cmp r1, #0
beq _081A6B9C
ldr r0, [r6]
adds r0, r3, r0
ldrb r0, [r0, #0xa]
lsls r0, r0, #1
adds r0, r0, r7
ldrh r0, [r0]
cmp r1, r0
beq _081A6BA4
_081A6B9C:
adds r2, #2
adds r4, #1
cmp r4, sb
blt _081A6B86
_081A6BA4:
cmp r4, sb
bne _081A6C50
mov r0, sb
lsls r2, r0, #1
mov r1, sp
adds r1, r1, r2
adds r1, #0xc
ldr r3, _081A6C78
ldr r4, [r3]
lsls r5, r5, #4
mov r8, r5
add r4, r8
ldrh r0, [r4]
strh r0, [r1]
add r1, sp, #0x14
adds r1, r1, r2
ldr r2, _081A6C80
ldrb r0, [r4, #0xa]
lsls r0, r0, #1
adds r0, r0, r2
ldrh r0, [r0]
strh r0, [r1]
movs r0, #0x64
mov r5, sb
muls r5, r0, r5
ldr r6, _081A6C84
adds r0, r5, r6
ldrh r1, [r4]
ldr r7, [sp, #0x20]
lsls r2, r7, #0x18
ldrb r3, [r4, #0xc]
ldr r7, [sp, #0x24]
str r7, [sp]
ldrb r4, [r4, #0xb]
str r4, [sp, #4]
ldr r4, [sp, #0x28]
str r4, [sp, #8]
lsrs r2, r2, #0x18
bl CreateMonWithEVSpreadNatureOTID
add r0, sp, #0x1c
movs r7, #0
strb r7, [r0]
movs r4, #0
mov r7, r8
mov sl, r0
movs r0, #1
add r0, sb
mov r8, r0
_081A6C06:
ldr r1, _081A6C78
ldr r0, [r1]
adds r0, r7, r0
lsls r1, r4, #1
adds r0, #2
adds r0, r0, r1
ldrh r1, [r0]
lsls r2, r4, #0x18
lsrs r2, r2, #0x18
adds r0, r5, r6
bl SetMonMoveAvoidReturn
adds r4, #1
cmp r4, #3
ble _081A6C06
movs r0, #0x64
mov r4, sb
muls r4, r0, r4
ldr r0, _081A6C84
adds r4, r4, r0
adds r0, r4, #0
movs r1, #0x20
mov r2, sl
bl SetMonData
ldr r2, _081A6C78
ldr r0, [r2]
adds r0, r7, r0
ldrb r2, [r0, #0xa]
lsls r2, r2, #1
ldr r0, _081A6C80
adds r2, r2, r0
adds r0, r4, #0
movs r1, #0xc
bl SetMonData
mov sb, r8
_081A6C50:
mov r3, sb
cmp r3, #3
beq _081A6C58
b _081A6AE4
_081A6C58:
add sp, #0x34
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_081A6C68: .4byte 0x03005AF0
_081A6C6C: .4byte 0x00000CA9
_081A6C70: .4byte 0x000040CE
_081A6C74: .4byte 0x00000DE2
_081A6C78: .4byte 0x0203B958
_081A6C7C: .4byte 0x00000351
_081A6C80: .4byte 0x085ADBF4
_081A6C84: .4byte 0x020243E8
thumb_func_end FillFactoryBrainParty
thumb_func_start GetMonSetId
GetMonSetId: @ 0x081A6C88
push {r4, r5, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r3, r1, #0x18
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
movs r4, #8
rsbs r1, r0, #0
orrs r1, r0
asrs r1, r1, #0x1f
ands r1, r4
adds r4, r1, #0
cmp r3, #6
bhi _081A6CC4
cmp r2, #0
beq _081A6CB8
ldr r2, _081A6CB4
adds r1, r1, r3
adds r1, #1
b _081A6CD0
.align 2, 0
_081A6CB4: .4byte 0x085DD9CC
_081A6CB8:
ldr r2, _081A6CC0
adds r1, r1, r3
b _081A6CD0
.align 2, 0
_081A6CC0: .4byte 0x085DD9CC
_081A6CC4:
adds r1, r3, #0
cmp r1, #7
beq _081A6CCC
movs r1, #7
_081A6CCC:
ldr r2, _081A6D04
adds r1, r4, r1
_081A6CD0:
lsls r1, r1, #2
adds r0, r2, #2
adds r0, r1, r0
adds r1, r1, r2
ldrh r0, [r0]
ldrh r4, [r1]
subs r0, r0, r4
adds r0, #1
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
bl Random
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
adds r1, r5, #0
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
adds r4, r0, r4
lsls r4, r4, #0x10
lsrs r0, r4, #0x10
pop {r4, r5}
pop {r1}
bx r1
.align 2, 0
_081A6D04: .4byte 0x085DD9CC
thumb_func_end GetMonSetId
thumb_func_start GetNumPastRentalsRank
GetNumPastRentalsRank: @ 0x081A6D08
push {lr}
lsls r0, r0, #0x18
lsls r1, r1, #0x18
ldr r2, _081A6D44
ldr r2, [r2]
lsrs r1, r1, #0x17
lsrs r0, r0, #0x16
adds r1, r1, r0
ldr r0, _081A6D48
adds r2, r2, r0
adds r2, r2, r1
ldrb r1, [r2]
movs r0, #0
cmp r1, #0xe
bls _081A6D40
movs r0, #1
cmp r1, #0x15
bls _081A6D40
movs r0, #2
cmp r1, #0x1c
bls _081A6D40
movs r0, #3
cmp r1, #0x23
bls _081A6D40
movs r0, #5
cmp r1, #0x2a
bhi _081A6D40
movs r0, #4
_081A6D40:
pop {r1}
bx r1
.align 2, 0
_081A6D44: .4byte 0x03005AF0
_081A6D48: .4byte 0x00000DF2
thumb_func_end GetNumPastRentalsRank
thumb_func_start GetAiScriptsInBattleFactory
GetAiScriptsInBattleFactory: @ 0x081A6D4C
push {r4, r5, lr}
ldr r5, _081A6D94
ldr r0, [r5]
ldr r1, _081A6D98
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x1e
lsrs r4, r0, #0x1e
cmp r4, #2
beq _081A6D90
ldr r0, _081A6D9C
bl VarGet
lsls r0, r0, #0x10
ldr r1, [r5]
lsls r2, r4, #1
lsrs r0, r0, #0xe
adds r2, r2, r0
ldr r0, _081A6DA0
adds r1, r1, r0
adds r1, r1, r2
ldrh r0, [r1]
movs r1, #7
bl __udivsi3
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
ldr r0, _081A6DA4
ldrh r1, [r0]
ldr r0, _081A6DA8
cmp r1, r0
beq _081A6DB0
cmp r2, #1
bgt _081A6DAC
_081A6D90:
movs r0, #0
b _081A6DB6
.align 2, 0
_081A6D94: .4byte 0x03005AF0
_081A6D98: .4byte 0x00000CA9
_081A6D9C: .4byte 0x000040CE
_081A6DA0: .4byte 0x00000DE2
_081A6DA4: .4byte 0x0203886A
_081A6DA8: .4byte 0x000003FE
_081A6DAC:
cmp r2, #3
ble _081A6DB4
_081A6DB0:
movs r0, #7
b _081A6DB6
_081A6DB4:
movs r0, #1
_081A6DB6:
pop {r4, r5}
pop {r1}
bx r1
thumb_func_end GetAiScriptsInBattleFactory
thumb_func_start SetMonMoveAvoidReturn
SetMonMoveAvoidReturn: @ 0x081A6DBC
push {lr}
lsls r1, r1, #0x10
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
lsrs r1, r1, #0x10
cmp r1, #0xd8
bne _081A6DCC
movs r1, #0xda
_081A6DCC:
bl SetMonMoveSlot
pop {r0}
bx r0
thumb_func_end SetMonMoveAvoidReturn