	#include "constants/maps.h"
	#include "constants/roamer.h"
	.include "asm/macros.inc"
	.include "global.inc"

	.section .rodata

	.global UNK_020F7460
UNK_020F7460: ; 0x020F7460
	.word MAP_R201
	.word MAP_R202
	.word MAP_R203
	.word MAP_R204A
	.word MAP_R204B
	.word MAP_R205A
	.word MAP_R205B
	.word MAP_R206
	.word MAP_R207
	.word MAP_R208
	.word MAP_R209
	.word MAP_R210A
	.word MAP_R210B
	.word MAP_R211A
	.word MAP_R211B
	.word MAP_R212A
	.word MAP_R212B
	.word MAP_R213
	.word MAP_R214
	.word MAP_R215
	.word MAP_R216
	.word MAP_R217
	.word MAP_R218
	.word MAP_R219
	.word MAP_W220
	.word MAP_R221
	.word MAP_R222
	.word MAP_D02
	.word MAP_D04

	.global UNK_020F74D4
UNK_020F74D4: ; 0x020F74D4
	.short 2, ROAMER_LOC_R202, ROAMER_LOC_R219, 0xFFFF, 0xFFFF, 0xFFFF
	.short 5, ROAMER_LOC_R201, ROAMER_LOC_R203, ROAMER_LOC_R204A, ROAMER_LOC_R218, ROAMER_LOC_R219
	.short 4, ROAMER_LOC_R202, ROAMER_LOC_R204A, ROAMER_LOC_R207, ROAMER_LOC_R218, 0xFFFF
	.short 4, ROAMER_LOC_R202, ROAMER_LOC_R203, ROAMER_LOC_R204B, ROAMER_LOC_R218, 0xFFFF
	.short 2, ROAMER_LOC_R204A, ROAMER_LOC_R205A, 0xFFFF, 0xFFFF, 0xFFFF
	.short 4, ROAMER_LOC_R204B, ROAMER_LOC_R205B, ROAMER_LOC_D02, ROAMER_LOC_D04, 0xFFFF
	.short 3, ROAMER_LOC_R205A, ROAMER_LOC_R206, ROAMER_LOC_R208, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R205B, ROAMER_LOC_R207, ROAMER_LOC_R211A, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R203, ROAMER_LOC_R206, ROAMER_LOC_R208, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R207, ROAMER_LOC_R209, ROAMER_LOC_R212A, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R208, ROAMER_LOC_R210A, ROAMER_LOC_R212A, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R209, ROAMER_LOC_R210B, ROAMER_LOC_R215, 0xFFFF, 0xFFFF
	.short 2, ROAMER_LOC_R210A, ROAMER_LOC_R211B, 0xFFFF, 0xFFFF, 0xFFFF
	.short 4, ROAMER_LOC_R205B, ROAMER_LOC_R206, ROAMER_LOC_R211B, ROAMER_LOC_R216, 0xFFFF
	.short 3, ROAMER_LOC_R210B, ROAMER_LOC_R211A, ROAMER_LOC_R216, 0xFFFF, ROAMER_LOC_R201
	.short 3, ROAMER_LOC_R208, ROAMER_LOC_R209, ROAMER_LOC_R212B, 0xFFFF, 0xFFFF
	.short 2, ROAMER_LOC_R212A, ROAMER_LOC_R213, 0xFFFF, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R212B, ROAMER_LOC_R214, ROAMER_LOC_R222, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R213, ROAMER_LOC_R215, ROAMER_LOC_R222, 0xFFFF, 0xFFFF
	.short 2, ROAMER_LOC_R210A, ROAMER_LOC_R214, 0xFFFF, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R211A, ROAMER_LOC_R211B, ROAMER_LOC_R217, 0xFFFF, 0xFFFF
	.short 1, ROAMER_LOC_R216, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R202, ROAMER_LOC_R203, ROAMER_LOC_R204A, 0xFFFF, 0xFFFF
	.short 3, ROAMER_LOC_R201, ROAMER_LOC_R202, ROAMER_LOC_W220, 0xFFFF, 0xFFFF
	.short 2, ROAMER_LOC_R219, ROAMER_LOC_R221, 0xFFFF, 0xFFFF, 0xFFFF
	.short 1, ROAMER_LOC_W220, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
	.short 2, ROAMER_LOC_R213, ROAMER_LOC_R214, 0xFFFF, 0xFFFF, 0xFFFF
	.short 1, ROAMER_LOC_R205A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF
	.short 1, ROAMER_LOC_R205A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF

	.text

	thumb_func_start sub_020603B0
sub_020603B0: ; 0x020603B0
	push {r3-r5, lr}
	add r5, r0, #0x0
	add r4, r1, #0x0
	bl sub_0202AA38
	add r2, r0, #0x0
	add r0, r5, #0x0
	add r1, r4, #0x0
	bl sub_02060588
	pop {r3-r5, pc}
	.balign 4

	thumb_func_start sub_020603C8
sub_020603C8: ; 0x020603C8
	push {r3-r5, lr}
	add r4, r0, #0x0
	mov r5, #0x0
_020603CE:
	add r0, r4, #0x0
	add r1, r5, #0x0
	bl sub_0202AA74
	cmp r0, #0x0
	beq _020603E2
	add r0, r4, #0x0
	add r1, r5, #0x0
	bl sub_020603B0
_020603E2:
	add r0, r5, #0x1
	lsl r0, r0, #0x18
	lsr r5, r0, #0x18
	cmp r5, #0x3
	blo _020603CE
	pop {r3-r5, pc}
	.balign 4

	thumb_func_start sub_020603F0
sub_020603F0: ; 0x020603F0
	push {r4-r6, lr}
	add r5, r0, #0x0
	mov r4, #0x0
_020603F6:
	add r0, r5, #0x0
	add r1, r4, #0x0
	bl sub_0202AA74
	cmp r0, #0x0
	beq _02060430
	bl LCRandom
	lsl r0, r0, #0x4
	lsr r6, r0, #0x10
	cmp r6, #0x10
	blo _02060412
	bl GF_AssertFail
_02060412:
	cmp r6, #0x0
	bne _02060420
	add r0, r5, #0x0
	add r1, r4, #0x0
	bl sub_020603B0
	b _02060430
_02060420:
	add r0, r5, #0x0
	bl sub_0202AA38
	add r2, r0, #0x0
	add r0, r5, #0x0
	add r1, r4, #0x0
	bl sub_020605D8
_02060430:
	add r0, r4, #0x1
	lsl r0, r0, #0x18
	lsr r4, r0, #0x18
	cmp r4, #0x3
	blo _020603F6
	pop {r4-r6, pc}

	thumb_func_start sub_0206043C
sub_0206043C: ; 0x0206043C
	push {r4, lr}
	add r4, r0, #0x0
	cmp r4, #0x1d
	blo _02060448
	bl GF_AssertFail
_02060448:
	ldr r0, _02060450 ; =UNK_020F7460
	lsl r1, r4, #0x2
	ldr r0, [r0, r1]
	pop {r4, pc}
	.balign 4
_02060450: .word UNK_020F7460

	thumb_func_start sub_02060454
sub_02060454: ; 0x02060454
	push {r3-r5, lr}
	add r4, r0, #0x0
	mov r5, #0x0
_0206045A:
	add r0, r4, #0x0
	add r1, r5, #0x0
	bl sub_0202AA74
	cmp r0, #0x0
	beq _0206046A
	mov r0, #0x1
	pop {r3-r5, pc}
_0206046A:
	add r0, r5, #0x1
	lsl r0, r0, #0x18
	lsr r5, r0, #0x18
	cmp r5, #0x3
	blo _0206045A
	mov r0, #0x0
	pop {r3-r5, pc}

	thumb_func_start sub_02060478
sub_02060478: ; 0x02060478
	push {r3-r5, lr}
	add r5, r0, #0x0
	add r4, r1, #0x0
	bl sub_02060454
	cmp r0, #0x0
	beq _0206048E
	add r0, r5, #0x0
	add r1, r4, #0x0
	bl sub_0202AA20
_0206048E:
	pop {r3-r5, pc}

	thumb_func_start Save_CreateRoamerByID
Save_CreateRoamerByID: ; 0x02060490
	push {r3-r7, lr}
	sub sp, #0x20
	add r5, r1, #0x0
	str r0, [sp, #0x10]
	bl Save_Roamers_Get
	add r1, r5, #0x0
	str r0, [sp, #0x14]
	bl sub_0202AAA0
	add r4, r0, #0x0
	cmp r5, #0x0
	beq _020604B4
	cmp r5, #0x1
	beq _020604BA
	cmp r5, #0x2
	beq _020604C2
	b _020604C8
_020604B4:
	ldr r7, _02060580 ; =0x000001E1
	mov r6, #0x32
	b _020604D0
_020604BA:
	mov r7, #0x7a
	lsl r7, r7, #0x2
	mov r6, #0x32
	b _020604D0
_020604C2:
	ldr r7, _02060584 ; =0x000001EB
	mov r6, #0x28
	b _020604D0
_020604C8:
	bl GF_AssertFail
	add sp, #0x20
	pop {r3-r7, pc}
_020604D0:
	add r0, r4, #0x0
	mov r1, #0x4
	add r2, r7, #0x0
	bl sub_0202AAFC
	add r0, r4, #0x0
	mov r1, #0x6
	add r2, r6, #0x0
	bl sub_0202AAFC
	ldr r0, [sp, #0x10]
	bl Save_PlayerData_GetProfileAddr
	str r0, [sp, #0x18]
	mov r0, #0x4
	bl AllocMonZeroed
	str r0, [sp, #0x1c]
	bl ZeroMonData
	ldr r0, [sp, #0x18]
	bl PlayerProfile_GetTrainerID_VisibleHalf
	mov r1, #0x0
	str r1, [sp, #0x0]
	str r1, [sp, #0x4]
	mov r1, #0x1
	str r1, [sp, #0x8]
	str r0, [sp, #0xc]
	ldr r0, [sp, #0x1c]
	add r1, r7, #0x0
	add r2, r6, #0x0
	mov r3, #0x20
	bl CreateMon
	add r0, r4, #0x0
	mov r1, #0x7
	mov r2, #0x0
	bl sub_0202AAFC
	add r0, r4, #0x0
	mov r1, #0x8
	mov r2, #0x1
	bl sub_0202AAFC
	ldr r0, [sp, #0x1c]
	mov r1, #0xae
	mov r2, #0x0
	bl GetMonData
	add r2, r0, #0x0
	add r0, r4, #0x0
	mov r1, #0x2
	bl sub_0202AAFC
	mov r1, #0x0
	ldr r0, [sp, #0x1c]
	add r2, r1, #0x0
	bl GetMonData
	add r2, r0, #0x0
	add r0, r4, #0x0
	mov r1, #0x3
	bl sub_0202AAFC
	ldr r0, [sp, #0x1c]
	mov r1, #0xa3
	mov r2, #0x0
	bl GetMonData
	add r2, r0, #0x0
	add r0, r4, #0x0
	mov r1, #0x5
	bl sub_0202AAFC
	ldr r0, [sp, #0x1c]
	bl FreeToHeap
	ldr r0, [sp, #0x14]
	bl sub_0202AA38
	add r2, r0, #0x0
	ldr r0, [sp, #0x14]
	add r1, r5, #0x0
	bl sub_02060588
	add sp, #0x20
	pop {r3-r7, pc}
	.balign 4
_02060580: .word 0x000001E1
_02060584: .word 0x000001EB

	thumb_func_start sub_02060588
sub_02060588: ; 0x02060588
	push {r3-r7, lr}
	sub sp, #0x8
	str r0, [sp, #0x0]
	str r1, [sp, #0x4]
	add r6, r2, #0x0
	bl sub_0202AA40
	ldr r7, _020605D0 ; =UNK_020F7460
	lsl r0, r0, #0x2
	ldr r4, [r7, r0]
_0206059C:
	bl LCRandom
	ldr r1, _020605D4 ; =0x000008D4
	bl _s32_div_f
	lsl r0, r0, #0x10
	lsr r5, r0, #0x10
	cmp r5, #0x1d
	blo _020605B2
	bl GF_AssertFail
_020605B2:
	lsl r0, r5, #0x18
	lsr r2, r0, #0x18
	lsl r0, r2, #0x2
	ldr r3, [r7, r0]
	cmp r3, r6
	beq _0206059C
	cmp r3, r4
	beq _0206059C
	ldr r0, [sp, #0x0]
	ldr r1, [sp, #0x4]
	bl sub_02060688
	add sp, #0x8
	pop {r3-r7, pc}
	nop
_020605D0: .word UNK_020F7460
_020605D4: .word 0x000008D4

	thumb_func_start sub_020605D8
sub_020605D8: ; 0x020605D8
	push {r3-r7, lr}
	sub sp, #0x8
	str r0, [sp, #0x0]
	str r1, [sp, #0x4]
	add r7, r2, #0x0
	bl sub_0202AA40
	mov r1, #0xc
	ldr r2, _0206067C ; =UNK_020F74D4
	mul r1, r0
	ldrh r0, [r2, r1]
	add r4, r2, r1
	cmp r0, #0x1
	bne _0206061E
	ldrh r0, [r4, #0x2]
	lsl r0, r0, #0x18
	lsr r2, r0, #0x18
	ldr r0, _02060680 ; =UNK_020F7460
	lsl r1, r2, #0x2
	ldr r3, [r0, r1]
	cmp r3, r7
	bne _02060612
	ldr r0, [sp, #0x0]
	ldr r1, [sp, #0x4]
	add r2, r7, #0x0
	bl sub_02060588
	add sp, #0x8
	pop {r3-r7, pc}
_02060612:
	ldr r0, [sp, #0x0]
	ldr r1, [sp, #0x4]
	bl sub_02060688
	add sp, #0x8
	pop {r3-r7, pc}
_0206061E:
	ldrh r5, [r4, #0x0]
	cmp r5, #0x0
	bne _02060628
	bl GF_AssertFail
_02060628:
	cmp r5, #0x1
	bhi _02060630
	mov r6, #0x0
	b _02060658
_02060630:
	bl LCRandom
	add r6, r0, #0x0
	ldr r0, _02060684 ; =0x0000FFFF
	add r1, r5, #0x0
	bl _s32_div_f
	add r1, r0, #0x0
	add r1, r1, #0x1
	lsl r1, r1, #0x10
	add r0, r6, #0x0
	lsr r1, r1, #0x10
	bl _s32_div_f
	lsl r0, r0, #0x10
	lsr r6, r0, #0x10
	cmp r6, r5
	blo _02060658
	bl GF_AssertFail
_02060658:
	lsl r0, r6, #0x18
	lsr r0, r0, #0x17
	add r0, r4, r0
	ldrh r0, [r0, #0x2]
	lsl r0, r0, #0x18
	lsr r2, r0, #0x18
	ldr r0, _02060680 ; =UNK_020F7460
	lsl r1, r2, #0x2
	ldr r3, [r0, r1]
	cmp r3, r7
	beq _0206061E
	ldr r0, [sp, #0x0]
	ldr r1, [sp, #0x4]
	bl sub_02060688
	add sp, #0x8
	pop {r3-r7, pc}
	nop
_0206067C: .word UNK_020F74D4
_02060680: .word UNK_020F7460
_02060684: .word 0x0000FFFF

	thumb_func_start sub_02060688
sub_02060688: ; 0x02060688
	push {r3-r7, lr}
	add r5, r0, #0x0
	add r4, r1, #0x0
	add r6, r2, #0x0
	add r7, r3, #0x0
	bl sub_0202AAA0
	str r0, [sp, #0x0]
	add r0, r5, #0x0
	add r1, r4, #0x0
	add r2, r6, #0x0
	bl sub_0202AA58
	ldr r0, [sp, #0x0]
	mov r1, #0x1
	add r2, r7, #0x0
	bl sub_0202AAFC
	pop {r3-r7, pc}
	.balign 4
