.include "asm/macros.inc"
	.include "constants/constants.inc"

	.syntax unified

	.text

	thumb_func_start sub_8160624
sub_8160624: @ 8160624
	push {lr}
	bl LoadOam
	bl ProcessSpriteCopyRequests
	bl TransferPlttBuffer
	pop {r0}
	bx r0
	thumb_func_end sub_8160624

	thumb_func_start sub_8160638
sub_8160638: @ 8160638
	push {lr}
	sub sp, 0x4
	bl ScriptContext2_Enable
	ldr r0, =sub_8160664
	movs r1, 0xA
	bl CreateTask
	movs r0, 0x1
	negs r0, r0
	movs r1, 0
	str r1, [sp]
	movs r2, 0
	movs r3, 0x10
	bl BeginNormalPaletteFade
	add sp, 0x4
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8160638

	thumb_func_start sub_8160664
sub_8160664: @ 8160664
	push {r4,lr}
	lsls r0, 24
	lsrs r4, r0, 24
	ldr r0, =gPaletteFade
	ldrb r1, [r0, 0x7]
	movs r0, 0x80
	ands r0, r1
	cmp r0, 0
	bne _08160688
	ldr r0, =sub_81606A0
	bl SetMainCallback2
	ldr r1, =gFieldCallback
	ldr r0, =sub_80AF168
	str r0, [r1]
	adds r0, r4, 0
	bl DestroyTask
_08160688:
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8160664

	thumb_func_start sub_81606A0
sub_81606A0: @ 81606A0
	push {r4-r6,lr}
	bl ResetSpriteData
	bl FreeAllSpritePalettes
	bl ResetTasks
	bl clear_scheduled_bg_copies_to_vram
	ldr r6, =gUnknown_0203BC34
	movs r0, 0x8C
	lsls r0, 1
	bl AllocZeroed
	str r0, [r6]
	ldr r1, =gSpecialVar_0x8004
	ldrh r1, [r1]
	adds r0, 0x44
	movs r5, 0
	strb r1, [r0]
	ldr r0, =sub_8160624
	bl SetVBlankCallback
	bl sub_81607EC
	movs r0, 0
	bl sub_81D2824
	ldr r4, =gUnknown_0203BC38
	movs r0, 0
	strh r5, [r4]
	strh r5, [r4, 0x2]
	strb r0, [r4, 0x4]
	bl sub_8161280
	ldr r0, =gUnknown_085CEBB0
	bl LoadSpriteSheet
	ldr r0, =gUnknown_085CEBB8
	bl LoadSpritePalette
	bl sub_81610B8
	ldr r0, =gUnknown_03006310
	ldrh r1, [r4]
	ldrh r2, [r4, 0x2]
	bl ListMenuInit
	ldr r1, [r6]
	movs r2, 0x89
	lsls r2, 1
	adds r1, r2
	strb r0, [r1]
	movs r0, 0
	movs r1, 0
	movs r2, 0x2
	bl FillPalette
	ldr r0, =sub_816082C
	bl SetMainCallback2
	pop {r4-r6}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_81606A0

	thumb_func_start sub_8160740
sub_8160740: @ 8160740
	push {r4,r5,lr}
	bl ResetSpriteData
	bl FreeAllSpritePalettes
	bl ResetTasks
	bl clear_scheduled_bg_copies_to_vram
	ldr r5, =gUnknown_0203BC34
	movs r0, 0x8C
	lsls r0, 1
	bl AllocZeroed
	str r0, [r5]
	movs r1, 0x1C
	strb r1, [r0]
	ldr r0, [r5]
	ldr r1, =gSpecialVar_0x8004
	ldrh r1, [r1]
	adds r0, 0x44
	strb r1, [r0]
	ldr r0, [r5]
	ldr r1, =gSpecialVar_0x8005
	ldrh r1, [r1]
	adds r0, 0x45
	strb r1, [r0]
	ldr r0, =sub_8160624
	bl SetVBlankCallback
	bl sub_81607EC
	ldr r4, =gUnknown_0203BC38
	ldrb r0, [r4, 0x4]
	bl sub_81D2824
	bl sub_8161280
	ldr r0, =gUnknown_085CEBB0
	bl LoadSpriteSheet
	ldr r0, =gUnknown_085CEBB8
	bl LoadSpritePalette
	bl sub_81610B8
	ldr r0, =gUnknown_03006310
	ldrh r1, [r4]
	ldrh r2, [r4, 0x2]
	bl ListMenuInit
	ldr r1, [r5]
	movs r2, 0x89
	lsls r2, 1
	adds r1, r2
	strb r0, [r1]
	movs r0, 0
	movs r1, 0
	movs r2, 0x2
	bl FillPalette
	ldr r0, =sub_816082C
	bl SetMainCallback2
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8160740

	thumb_func_start sub_81607EC
sub_81607EC: @ 81607EC
	push {lr}
	bl sub_8121DA0
	movs r0, 0
	bl ResetBgsAndClearDma3BusyFlags
	ldr r1, =gUnknown_085CEC28
	movs r0, 0
	movs r2, 0x2
	bl InitBgsFromTemplates
	bl sub_8121E10
	movs r1, 0x82
	lsls r1, 5
	movs r0, 0
	bl SetGpuReg
	movs r0, 0
	bl ShowBg
	movs r0, 0x1
	bl ShowBg
	movs r0, 0x50
	movs r1, 0
	bl SetGpuReg
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_81607EC

	thumb_func_start sub_816082C
sub_816082C: @ 816082C
	push {lr}
	bl sub_8160868
	bl RunTasks
	bl AnimateSprites
	bl BuildOamBuffer
	bl do_scheduled_bg_tilemap_copies_to_vram
	bl UpdatePaletteFade
	pop {r0}
	bx r0
	thumb_func_end sub_816082C

	thumb_func_start sub_816084C
sub_816084C: @ 816084C
	push {r4,lr}
	adds r1, r0, 0
	ldr r4, =gStringVar4
	adds r0, r4, 0
	bl StringExpandPlaceholders
	adds r0, r4, 0
	bl sub_81D2BF4
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_816084C

	thumb_func_start sub_8160868
sub_8160868: @ 8160868
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	sub sp, 0x4
	ldr r1, =gUnknown_0203BC34
	ldr r0, [r1]
	ldrb r0, [r0]
	adds r7, r1, 0
	cmp r0, 0x21
	bls _0816087E
	b _08160E8A
_0816087E:
	lsls r0, 2
	ldr r1, =_08160890
	adds r0, r1
	ldr r0, [r0]
	mov pc, r0
	.pool
	.align 2, 0
_08160890:
	.4byte _08160918
	.4byte _08160932
	.4byte _0816094C
	.4byte _08160954
	.4byte _0816095C
	.4byte _08160964
	.4byte _08160980
	.4byte _08160E8A
	.4byte _08160988
	.4byte _081609A8
	.4byte _08160E8A
	.4byte _08160E8A
	.4byte _08160A44
	.4byte _08160A64
	.4byte _08160CB8
	.4byte _08160CD8
	.4byte _08160AB8
	.4byte _08160AD0
	.4byte _08160AEC
	.4byte _08160C1C
	.4byte _08160C48
	.4byte _08160C98
	.4byte _08160CA6
	.4byte _08160E8A
	.4byte _08160B2C
	.4byte _08160B60
	.4byte _08160B80
	.4byte _08160BDC
	.4byte _08160CFC
	.4byte _08160D48
	.4byte _08160E0C
	.4byte _08160E38
	.4byte _08160E58
	.4byte _08160E70
_08160918:
	ldr r1, [r7]
	ldrb r0, [r1]
	adds r0, 0x1
	movs r4, 0
	strb r0, [r1]
	movs r0, 0
	bl render_previous_quest_text
	movs r0, 0x1
	negs r0, r0
	str r4, [sp]
	movs r1, 0
	b _08160CAE
_08160932:
	ldr r0, =gPaletteFade
	ldrb r1, [r0, 0x7]
	movs r0, 0x80
	ands r0, r1
	cmp r0, 0
	beq _08160940
	b _08160E8A
_08160940:
	ldr r1, [r7]
	movs r0, 0x4
	b _08160E88
	.pool
_0816094C:
	ldr r1, [r7]
	ldrb r0, [r1]
	adds r0, 0x1
	b _08160E88
_08160954:
	movs r0, 0
	bl render_previous_quest_text
	b _0816096A
_0816095C:
	movs r0, 0
	bl sub_8160F50
	b _08160E8A
_08160964:
	movs r0, 0
	bl sub_8161074
_0816096A:
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	strb r0, [r1]
	bl sub_81611AC
	b _08160E8A
	.pool
_08160980:
	movs r0, 0x1
	bl sub_8160F50
	b _08160E8A
_08160988:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	beq _08160994
	b _08160E8A
_08160994:
	bl sub_81D2C50
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	b _08160E88
	.pool
_081609A8:
	bl sub_8198C58
	lsls r0, 24
	asrs r1, r0, 24
	cmp r1, 0
	bne _08160A0A
	ldr r5, =gUnknown_0203BC34
	ldr r0, [r5]
	adds r0, 0x44
	ldrb r1, [r0]
	movs r0, 0x64
	adds r4, r1, 0
	muls r4, r0
	ldr r0, =gPlayerParty
	adds r4, r0
	bl sub_8161054
	adds r1, r0, 0
	lsls r1, 16
	lsrs r1, 16
	adds r0, r4, 0
	bl GiveMoveToMon
	lsls r0, 16
	ldr r1, =0xffff0000
	cmp r0, r1
	beq _08160A04
	ldr r0, =gText_PkmnLearnedMove4
	bl sub_816084C
	ldr r1, =gSpecialVar_0x8004
	movs r0, 0x1
	strh r0, [r1]
	ldr r1, [r5]
	movs r0, 0x1F
	b _08160E88
	.pool
_08160A04:
	ldr r1, [r5]
	movs r0, 0x10
	b _08160E88
_08160A0A:
	movs r0, 0x1
	negs r0, r0
	cmp r1, r0
	beq _08160A18
	cmp r1, 0x1
	beq _08160A18
	b _08160E8A
_08160A18:
	ldr r0, =gUnknown_0203BC38
	ldrb r0, [r0, 0x4]
	cmp r0, 0
	bne _08160A30
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x3
	b _08160E88
	.pool
_08160A30:
	cmp r0, 0x1
	beq _08160A36
	b _08160E8A
_08160A36:
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x5
	b _08160E88
	.pool
_08160A44:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	beq _08160A50
	b _08160E8A
_08160A50:
	bl sub_81D2C50
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	b _08160E88
	.pool
_08160A64:
	bl sub_8198C58
	lsls r0, 24
	asrs r1, r0, 24
	cmp r1, 0
	bne _08160A7C
	ldr r0, =gSpecialVar_0x8004
	strh r1, [r0]
	b _08160E82
	.pool
_08160A7C:
	movs r0, 0x1
	negs r0, r0
	cmp r1, r0
	beq _08160A8A
	cmp r1, 0x1
	beq _08160A8A
	b _08160E8A
_08160A8A:
	ldr r0, =gUnknown_0203BC38
	ldrb r0, [r0, 0x4]
	cmp r0, 0
	bne _08160AA4
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x3
	b _08160E88
	.pool
_08160AA4:
	cmp r0, 0x1
	beq _08160AAA
	b _08160E8A
_08160AAA:
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x5
	b _08160E88
	.pool
_08160AB8:
	ldr r0, =gText_PkmnTryingToLearnMove
	bl sub_816084C
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	b _08160E88
	.pool
_08160AD0:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	beq _08160ADC
	b _08160E8A
_08160ADC:
	bl sub_81D2C50
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x12
	b _08160E88
	.pool
_08160AEC:
	bl sub_8198C58
	lsls r0, 24
	asrs r1, r0, 24
	cmp r1, 0
	bne _08160B10
	ldr r0, =gText_WhichMoveToForget2
	bl sub_816084C
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x13
	b _08160E88
	.pool
_08160B10:
	movs r0, 0x1
	negs r0, r0
	cmp r1, r0
	beq _08160B1E
	cmp r1, 0x1
	beq _08160B1E
	b _08160E8A
_08160B1E:
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x18
	b _08160E88
	.pool
_08160B2C:
	ldr r4, =gStringVar2
	bl sub_8161054
	movs r1, 0xD
	muls r1, r0
	ldr r0, =gMoveNames
	adds r1, r0
	adds r0, r4, 0
	bl StringCopy
	ldr r0, =gText_StopTryingToTeachMove
	bl sub_816084C
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	b _08160E88
	.pool
_08160B60:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	beq _08160B6C
	b _08160E8A
_08160B6C:
	bl sub_81D2C50
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	b _08160E88
	.pool
_08160B80:
	bl sub_8198C58
	lsls r0, 24
	asrs r1, r0, 24
	cmp r1, 0
	bne _08160B98
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x1B
	b _08160E88
	.pool
_08160B98:
	movs r0, 0x1
	negs r0, r0
	cmp r1, r0
	beq _08160BA6
	cmp r1, 0x1
	beq _08160BA6
	b _08160E8A
_08160BA6:
	ldr r0, =gUnknown_0203BC38
	ldrb r0, [r0, 0x4]
	cmp r0, 0
	bne _08160BC4
	ldr r2, =gUnknown_0203BC34
	ldr r1, [r2]
	movs r0, 0x3
	strb r0, [r1]
	adds r7, r2, 0
	b _08160BD0
	.pool
_08160BC4:
	ldr r7, =gUnknown_0203BC34
	cmp r0, 0x1
	bne _08160BD0
	ldr r1, [r7]
	movs r0, 0x5
	strb r0, [r1]
_08160BD0:
	ldr r1, [r7]
	movs r0, 0x10
	b _08160E88
	.pool
_08160BDC:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	beq _08160BE8
	b _08160E8A
_08160BE8:
	movs r0, 0x3
	movs r1, 0x11
	bl FillWindowPixelBuffer
	ldr r0, =gUnknown_0203BC38
	ldrb r0, [r0, 0x4]
	cmp r0, 0
	bne _08160C08
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x3
	b _08160E88
	.pool
_08160C08:
	cmp r0, 0x1
	beq _08160C0E
	b _08160E8A
_08160C0E:
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x5
	b _08160E88
	.pool
_08160C1C:
	bl sub_81D2C3C
	lsls r0, 16
	lsrs r2, r0, 16
	cmp r2, 0
	beq _08160C2A
	b _08160E8A
_08160C2A:
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x14
	strb r0, [r1]
	subs r0, 0x15
	str r2, [sp]
	movs r1, 0
	movs r2, 0
	movs r3, 0x10
	bl BeginNormalPaletteFade
	b _08160E8A
	.pool
_08160C48:
	ldr r0, =gPaletteFade
	ldrb r1, [r0, 0x7]
	movs r0, 0x80
	ands r0, r1
	cmp r0, 0
	beq _08160C56
	b _08160E8A
_08160C56:
	bl sub_8161054
	lsls r0, 16
	lsrs r0, 16
	ldr r4, =gPlayerParty
	ldr r1, =gUnknown_0203BC34
	ldr r1, [r1]
	adds r1, 0x44
	ldrb r1, [r1]
	ldr r2, =gPlayerPartyCount
	ldrb r2, [r2]
	subs r2, 0x1
	lsls r2, 24
	lsrs r2, 24
	ldr r3, =sub_8160740
	str r0, [sp]
	adds r0, r4, 0
	bl sub_81BFA38
	bl sub_8160EA0
	b _08160E8A
	.pool
_08160C98:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	beq _08160CA4
	b _08160E8A
_08160CA4:
	b _08160E82
_08160CA6:
	movs r0, 0x1
	negs r0, r0
	movs r1, 0
	str r1, [sp]
_08160CAE:
	movs r2, 0x10
	movs r3, 0
	bl BeginNormalPaletteFade
	b _08160E8A
_08160CB8:
	movs r0, 0x1
	negs r0, r0
	movs r1, 0
	str r1, [sp]
	movs r2, 0
	movs r3, 0x10
	bl BeginNormalPaletteFade
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	b _08160E88
	.pool
_08160CD8:
	ldr r0, =gPaletteFade
	ldrb r1, [r0, 0x7]
	movs r0, 0x80
	ands r0, r1
	cmp r0, 0
	beq _08160CE6
	b _08160E8A
_08160CE6:
	bl sub_8160EA0
	ldr r0, =c2_exit_to_overworld_2_switch
	bl SetMainCallback2
	b _08160E8A
	.pool
_08160CFC:
	movs r0, 0x1
	negs r0, r0
	movs r1, 0
	str r1, [sp]
	movs r2, 0x10
	movs r3, 0
	bl BeginNormalPaletteFade
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	ldrb r0, [r1]
	adds r0, 0x1
	strb r0, [r1]
	ldr r0, =gUnknown_0203BC38
	ldrb r0, [r0, 0x4]
	cmp r0, 0
	bne _08160D30
	movs r0, 0x1
	bl render_previous_quest_text
	b _08160D3A
	.pool
_08160D30:
	cmp r0, 0x1
	bne _08160D3A
	movs r0, 0x1
	bl sub_8161074
_08160D3A:
	bl sub_8161234
	movs r0, 0x3
	movs r1, 0x2
	bl CopyWindowToVram
	b _08160E8A
_08160D48:
	ldr r0, =gPaletteFade
	ldrb r1, [r0, 0x7]
	movs r0, 0x80
	ands r0, r1
	cmp r0, 0
	beq _08160D56
	b _08160E8A
_08160D56:
	ldr r1, [r7]
	adds r2, r1, 0
	adds r2, 0x45
	ldrb r0, [r2]
	cmp r0, 0x4
	bne _08160D6C
	movs r0, 0x18
	b _08160E88
	.pool
_08160D6C:
	adds r0, r1, 0
	adds r0, 0x44
	ldrb r0, [r0]
	movs r4, 0x64
	muls r0, r4
	ldr r5, =gPlayerParty
	adds r0, r5
	ldrb r1, [r2]
	adds r1, 0xD
	bl GetMonData
	lsls r0, 16
	lsrs r0, 16
	ldr r2, =gStringVar3
	movs r1, 0xD
	mov r8, r1
	mov r1, r8
	muls r1, r0
	ldr r6, =gMoveNames
	adds r1, r6
	adds r0, r2, 0
	bl StringCopy
	ldr r1, [r7]
	adds r0, r1, 0
	adds r0, 0x44
	ldrb r0, [r0]
	muls r0, r4
	adds r0, r5
	adds r1, 0x45
	ldrb r1, [r1]
	bl RemoveMonPPBonus
	ldr r0, [r7]
	adds r0, 0x44
	ldrb r0, [r0]
	muls r4, r0
	adds r4, r5
	bl sub_8161054
	adds r1, r0, 0
	lsls r1, 16
	lsrs r1, 16
	ldr r0, [r7]
	adds r0, 0x45
	ldrb r2, [r0]
	adds r0, r4, 0
	bl SetMonMoveSlot
	ldr r4, =gStringVar2
	bl sub_8161054
	mov r1, r8
	muls r1, r0
	adds r1, r6
	adds r0, r4, 0
	bl StringCopy
	ldr r0, =gText_12AndPoof
	bl sub_816084C
	ldr r1, [r7]
	movs r0, 0x1E
	strb r0, [r1]
	ldr r1, =gSpecialVar_0x8004
	movs r0, 0x1
	strh r0, [r1]
	b _08160E8A
	.pool
_08160E0C:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	bne _08160E8A
	ldr r0, =gText_PkmnForgotMoveAndLearnedNew
	bl sub_816084C
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x1F
	strb r0, [r1]
	ldr r0, =0x0000016f
	bl PlayFanfare
	b _08160E8A
	.pool
_08160E38:
	bl sub_81D2C3C
	lsls r0, 16
	cmp r0, 0
	bne _08160E8A
	ldr r0, =0x0000016f
	bl PlayFanfare
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x20
	b _08160E88
	.pool
_08160E58:
	bl IsFanfareTaskInactive
	lsls r0, 24
	cmp r0, 0
	beq _08160E8A
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0x21
	b _08160E88
	.pool
_08160E70:
	ldr r0, =gMain
	ldrh r1, [r0, 0x2E]
	movs r0, 0x1
	ands r0, r1
	cmp r0, 0
	beq _08160E8A
	movs r0, 0x5
	bl PlaySE
_08160E82:
	ldr r0, =gUnknown_0203BC34
	ldr r1, [r0]
	movs r0, 0xE
_08160E88:
	strb r0, [r1]
_08160E8A:
	add sp, 0x4
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8160868

	thumb_func_start sub_8160EA0
sub_8160EA0: @ 8160EA0
	push {r4,lr}
	bl sub_8161234
	ldr r4, =gUnknown_0203BC34
	ldr r0, [r4]
	movs r1, 0x89
	lsls r1, 1
	adds r0, r1
	ldrb r0, [r0]
	ldr r1, =gUnknown_0203BC38
	adds r2, r1, 0x2
	bl sub_81AE6C8
	bl FreeAllWindowBuffers
	ldr r0, [r4]
	bl Free
	movs r0, 0
	str r0, [r4]
	bl ResetSpriteData
	bl FreeAllSpritePalettes
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8160EA0

	thumb_func_start render_previous_quest_text
render_previous_quest_text: @ 8160EE0
	push {r4-r6,lr}
	sub sp, 0xC
	lsls r0, 24
	lsrs r5, r0, 24
	movs r2, 0
	ldr r6, =gSprites
	ldr r4, =gUnknown_0203BC34
	movs r3, 0x4
_08160EF0:
	ldr r0, [r4]
	adds r0, 0x1
	adds r0, r2
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r6
	adds r0, 0x3E
	ldrb r1, [r0]
	orrs r1, r3
	strb r1, [r0]
	adds r2, 0x1
	cmp r2, 0xF
	ble _08160EF0
	cmp r5, 0
	bne _08160F38
	ldr r4, =gStringVar4
	ldr r1, =gText_TeachWhichMoveToPkmn
	adds r0, r4, 0
	bl StringExpandPlaceholders
	movs r0, 0x3
	movs r1, 0x11
	bl FillWindowPixelBuffer
	movs r0, 0x1
	str r0, [sp]
	str r5, [sp, 0x4]
	str r5, [sp, 0x8]
	movs r0, 0x3
	movs r1, 0x1
	adds r2, r4, 0
	movs r3, 0
	bl PrintTextOnWindow
_08160F38:
	add sp, 0xC
	pop {r4-r6}
	pop {r0}
	bx r0
	.pool
	thumb_func_end render_previous_quest_text

	thumb_func_start sub_8160F50
sub_8160F50: @ 8160F50
	push {r4-r7,lr}
	lsls r0, 24
	lsrs r7, r0, 24
	ldr r6, =gUnknown_0203BC34
	ldr r0, [r6]
	movs r4, 0x89
	lsls r4, 1
	adds r0, r4
	ldrb r0, [r0]
	bl ListMenuHandleInput
	adds r5, r0, 0
	ldr r0, [r6]
	adds r0, r4
	ldrb r0, [r0]
	ldr r4, =gUnknown_0203BC38
	adds r2, r4, 0x2
	adds r1, r4, 0
	bl get_coro_args_x18_x1A
	movs r0, 0x2
	negs r0, r0
	cmp r5, r0
	beq _08160FE4
	adds r0, 0x1
	cmp r5, r0
	bne _08161010
	ldr r0, =gMain
	ldrh r1, [r0, 0x2E]
	movs r0, 0x30
	ands r0, r1
	cmp r0, 0
	bne _08160F9C
	bl GetLRKeysState
	lsls r0, 24
	cmp r0, 0
	beq _0816103E
_08160F9C:
	movs r0, 0x5
	bl PlaySE
	cmp r7, 0
	bne _08160FC4
	movs r0, 0x1
	bl PutWindowTilemap
	ldr r0, [r6]
	movs r1, 0x5
	strb r1, [r0]
	movs r0, 0x1
	strb r0, [r4, 0x4]
	b _08160FD4
	.pool
_08160FC4:
	movs r0, 0
	bl PutWindowTilemap
	ldr r0, [r6]
	movs r2, 0
	movs r1, 0x3
	strb r1, [r0]
	strb r2, [r4, 0x4]
_08160FD4:
	movs r0, 0x1
	bl schedule_bg_copy_tilemap_to_vram
	bl sub_8161054
	bl sub_816137C
	b _0816103E
_08160FE4:
	movs r0, 0x5
	bl PlaySE
	bl sub_8161234
	ldr r1, [r6]
	movs r0, 0xC
	strb r0, [r1]
	ldr r4, =gStringVar4
	ldr r1, =gText_GiveUpTeachingNewMove
	adds r0, r4, 0
	bl StringExpandPlaceholders
	adds r0, r4, 0
	bl sub_81D2BF4
	b _0816103E
	.pool
_08161010:
	movs r0, 0x5
	bl PlaySE
	bl sub_8161234
	ldr r1, [r6]
	movs r0, 0x8
	strb r0, [r1]
	ldr r0, =gStringVar2
	movs r1, 0xD
	muls r1, r5
	ldr r2, =gMoveNames
	adds r1, r2
	bl StringCopy
	ldr r4, =gStringVar4
	ldr r1, =gText_TeachX
	adds r0, r4, 0
	bl StringExpandPlaceholders
	adds r0, r4, 0
	bl sub_81D2BF4
_0816103E:
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8160F50

	thumb_func_start sub_8161054
sub_8161054: @ 8161054
	ldr r0, =gUnknown_0203BC34
	ldr r2, [r0]
	ldr r1, =gUnknown_0203BC38
	ldrh r0, [r1, 0x2]
	ldrh r1, [r1]
	adds r0, r1
	lsls r0, 3
	adds r2, 0x4C
	adds r2, r0
	ldr r0, [r2]
	bx lr
	.pool
	thumb_func_end sub_8161054

	thumb_func_start sub_8161074
sub_8161074: @ 8161074
	push {r4,r5,lr}
	sub sp, 0xC
	lsls r0, 24
	lsrs r5, r0, 24
	cmp r5, 0
	bne _081610A6
	ldr r4, =gStringVar4
	ldr r1, =gText_TeachWhichMoveToPkmn
	adds r0, r4, 0
	bl StringExpandPlaceholders
	movs r0, 0x3
	movs r1, 0x11
	bl FillWindowPixelBuffer
	movs r0, 0x1
	str r0, [sp]
	str r5, [sp, 0x4]
	str r5, [sp, 0x8]
	movs r0, 0x3
	movs r1, 0x1
	adds r2, r4, 0
	movs r3, 0
	bl PrintTextOnWindow
_081610A6:
	add sp, 0xC
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8161074

	thumb_func_start sub_81610B8
sub_81610B8: @ 81610B8
	push {r4-r7,lr}
	ldr r2, =gUnknown_0203BC34
	ldr r0, [r2]
	movs r1, 0x8A
	lsls r1, 1
	adds r0, r1
	movs r1, 0xFF
	strb r1, [r0]
	ldr r0, [r2]
	ldr r2, =0x00000113
	adds r1, r0, r2
	movs r0, 0x1
	negs r0, r0
	strb r0, [r1]
	bl sub_81611AC
	movs r4, 0
	ldr r5, =gUnknown_085CEC10
_081610DC:
	adds r2, r4, 0
	cmp r4, 0
	bge _081610E4
	adds r2, r4, 0x3
_081610E4:
	asrs r2, 2
	lsls r1, r2, 2
	subs r1, r4, r1
	lsls r1, 19
	movs r0, 0xD0
	lsls r0, 15
	adds r1, r0
	asrs r1, 16
	lsls r2, 19
	movs r0, 0x90
	lsls r0, 14
	adds r2, r0
	asrs r2, 16
	adds r0, r5, 0
	movs r3, 0
	bl CreateSprite
	ldr r2, =gUnknown_0203BC34
	ldr r1, [r2]
	adds r1, 0x1
	adds r1, r4
	strb r0, [r1]
	adds r4, 0x1
	cmp r4, 0x7
	ble _081610DC
	movs r4, 0
	ldr r7, =gUnknown_085CEC10
	adds r6, r2, 0
_0816111C:
	adds r2, r4, 0
	cmp r4, 0
	bge _08161124
	adds r2, r4, 0x3
_08161124:
	asrs r2, 2
	lsls r1, r2, 2
	subs r1, r4, r1
	lsls r1, 19
	movs r0, 0xD0
	lsls r0, 15
	adds r1, r0
	asrs r1, 16
	lsls r2, 19
	movs r0, 0xD0
	lsls r0, 14
	adds r2, r0
	asrs r2, 16
	adds r0, r7, 0
	movs r3, 0
	bl CreateSprite
	ldr r1, [r6]
	adds r2, r4, 0
	adds r2, 0x8
	adds r1, 0x1
	adds r1, r2
	strb r0, [r1]
	ldr r0, [r6]
	adds r0, 0x1
	adds r0, r2
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	ldr r5, =gSprites
	adds r0, r5
	movs r1, 0x2
	bl StartSpriteAnim
	adds r4, 0x1
	cmp r4, 0x7
	ble _0816111C
	movs r4, 0
	ldr r3, =gUnknown_0203BC34
	movs r2, 0x4
_08161176:
	ldr r0, [r3]
	adds r0, 0x1
	adds r0, r4
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r5
	adds r0, 0x3E
	ldrb r1, [r0]
	orrs r1, r2
	strb r1, [r0]
	adds r4, 0x1
	cmp r4, 0xF
	ble _08161176
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_81610B8

	thumb_func_start sub_81611AC
sub_81611AC: @ 81611AC
	push {r4-r6,lr}
	ldr r4, =gUnknown_0203BC34
	ldr r1, [r4]
	movs r2, 0x8A
	lsls r2, 1
	adds r0, r1, r2
	ldrb r0, [r0]
	cmp r0, 0xFF
	bne _081611D4
	ldr r0, =gUnknown_085CEBC0
	movs r3, 0x8B
	lsls r3, 1
	adds r1, r3
	bl AddScrollIndicatorArrowPair
	ldr r1, [r4]
	movs r5, 0x8A
	lsls r5, 1
	adds r1, r5
	strb r0, [r1]
_081611D4:
	ldr r0, [r4]
	ldr r6, =0x00000113
	adds r0, r6
	ldrb r0, [r0]
	cmp r0, 0xFF
	bne _08161210
	ldr r0, =gUnknown_0203CE8C
	adds r2, r0, 0
	ldr r1, =gUnknown_085CEBD0
	ldm r1!, {r3,r5,r6}
	stm r2!, {r3,r5,r6}
	ldr r1, [r1]
	str r1, [r2]
	ldr r2, [r4]
	movs r3, 0x88
	lsls r3, 1
	adds r1, r2, r3
	ldrb r1, [r1]
	ldr r5, =0x00000111
	adds r2, r5
	ldrb r2, [r2]
	subs r1, r2
	strh r1, [r0, 0x8]
	ldr r1, =gUnknown_0203BC38
	bl AddScrollIndicatorArrowPair
	ldr r1, [r4]
	ldr r6, =0x00000113
	adds r1, r6
	strb r0, [r1]
_08161210:
	pop {r4-r6}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_81611AC

	thumb_func_start sub_8161234
sub_8161234: @ 8161234
	push {r4,lr}
	ldr r4, =gUnknown_0203BC34
	ldr r0, [r4]
	movs r2, 0x8A
	lsls r2, 1
	adds r1, r0, r2
	ldrb r0, [r1]
	cmp r0, 0xFF
	beq _08161256
	bl RemoveScrollIndicatorArrowPair
	ldr r0, [r4]
	movs r1, 0x8A
	lsls r1, 1
	adds r0, r1
	movs r1, 0xFF
	strb r1, [r0]
_08161256:
	ldr r0, [r4]
	ldr r2, =0x00000113
	adds r1, r0, r2
	ldrb r0, [r1]
	cmp r0, 0xFF
	beq _08161270
	bl RemoveScrollIndicatorArrowPair
	ldr r0, [r4]
	ldr r2, =0x00000113
	adds r1, r0, r2
	movs r0, 0xFF
	strb r0, [r1]
_08161270:
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8161234

	thumb_func_start sub_8161280
sub_8161280: @ 8161280
	push {r4-r7,lr}
	mov r7, r9
	mov r6, r8
	push {r6,r7}
	sub sp, 0xC
	ldr r4, =gUnknown_0203BC34
	ldr r1, [r4]
	adds r0, r1, 0
	adds r0, 0x44
	ldrb r2, [r0]
	movs r0, 0x64
	muls r0, r2
	ldr r2, =gPlayerParty
	adds r0, r2
	adds r1, 0x12
	bl GetMoveRelearnerMoves
	ldr r1, [r4]
	movs r6, 0x88
	lsls r6, 1
	adds r1, r6
	strb r0, [r1]
	movs r5, 0
	ldr r0, [r4]
	adds r0, r6
	ldrb r0, [r0]
	cmp r5, r0
	bge _081612F6
	mov r8, r4
	movs r0, 0xD
	mov r12, r0
	ldr r2, =gMoveNames
	mov r9, r2
_081612C2:
	mov r7, r8
	ldr r4, [r7]
	lsls r3, r5, 3
	adds r2, r4, 0
	adds r2, 0x48
	adds r2, r3
	lsls r0, r5, 1
	adds r1, r4, 0
	adds r1, 0x12
	adds r1, r0
	ldrh r0, [r1]
	mov r7, r12
	muls r7, r0
	adds r0, r7, 0
	add r0, r9
	str r0, [r2]
	adds r0, r4, 0
	adds r0, 0x4C
	adds r0, r3
	ldrh r1, [r1]
	str r1, [r0]
	adds r5, 0x1
	adds r0, r4, r6
	ldrb r0, [r0]
	cmp r5, r0
	blt _081612C2
_081612F6:
	ldr r4, =gUnknown_0203BC34
	ldr r0, [r4]
	adds r0, 0x44
	ldrb r1, [r0]
	movs r0, 0x64
	muls r0, r1
	ldr r1, =gPlayerParty
	adds r0, r1
	movs r1, 0x2
	mov r2, sp
	bl GetMonData
	ldr r0, =gStringVar1
	mov r1, sp
	bl StringCopy10
	ldr r2, [r4]
	movs r5, 0x88
	lsls r5, 1
	adds r3, r2, r5
	ldrb r0, [r3]
	lsls r0, 3
	adds r1, r2, 0
	adds r1, 0x48
	adds r1, r0
	ldr r0, =gText_Cancel
	str r0, [r1]
	ldrb r0, [r3]
	lsls r0, 3
	adds r2, 0x4C
	adds r2, r0
	movs r0, 0x2
	negs r0, r0
	str r0, [r2]
	ldrb r0, [r3]
	adds r0, 0x1
	strb r0, [r3]
	ldr r1, [r4]
	adds r0, r1, 0
	adds r0, 0x48
	adds r1, r5
	ldrb r1, [r1]
	bl sub_81D28C8
	ldr r1, [r4]
	ldr r2, =0x00000111
	adds r1, r2
	strb r0, [r1]
	add sp, 0xC
	pop {r3,r4}
	mov r8, r3
	mov r9, r4
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8161280

	thumb_func_start sub_816137C
sub_816137C: @ 816137C
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	adds r4, r0, 0
	ldr r0, =gUnknown_0203BC38
	ldrb r0, [r0, 0x4]
	cmp r0, 0
	beq _08161394
	movs r0, 0x2
	negs r0, r0
	cmp r4, r0
	bne _081613CC
_08161394:
	movs r5, 0
	ldr r4, =gSprites
	ldr r3, =gUnknown_0203BC34
	movs r2, 0x4
_0816139C:
	ldr r0, [r3]
	adds r0, 0x1
	adds r0, r5
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r4
	adds r0, 0x3E
	ldrb r1, [r0]
	orrs r1, r2
	strb r1, [r0]
	adds r0, r5, 0x1
	lsls r0, 16
	lsrs r5, r0, 16
	cmp r5, 0xF
	bls _0816139C
	b _081614FE
	.pool
_081613CC:
	ldr r1, =gContestEffects
	ldr r0, =gContestMoves
	lsls r4, 3
	adds r0, r4, r0
	ldrb r0, [r0]
	lsls r0, 2
	adds r0, r1
	ldrb r0, [r0, 0x1]
	movs r1, 0xA
	bl __udivsi3
	lsls r0, 24
	lsrs r6, r0, 24
	mov r8, r4
	cmp r6, 0xFF
	bne _081613EE
	movs r6, 0
_081613EE:
	movs r5, 0
	ldr r7, =gUnknown_0203BC34
	ldr r4, =gSprites
_081613F4:
	cmp r5, r6
	bcs _08161420
	ldr r0, [r7]
	adds r0, 0x1
	adds r0, r5
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r4
	movs r1, 0x1
	bl StartSpriteAnim
	b _08161436
	.pool
_08161420:
	ldr r0, [r7]
	adds r0, 0x1
	adds r0, r5
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r4
	movs r1, 0
	bl StartSpriteAnim
_08161436:
	ldr r0, [r7]
	adds r0, 0x1
	adds r0, r5
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r4
	adds r0, 0x3E
	ldrb r1, [r0]
	movs r3, 0x5
	negs r3, r3
	adds r2, r3, 0
	ands r1, r2
	strb r1, [r0]
	adds r0, r5, 0x1
	lsls r0, 16
	lsrs r5, r0, 16
	cmp r5, 0x7
	bls _081613F4
	ldr r1, =gContestEffects
	ldr r0, =gContestMoves
	add r0, r8
	ldrb r0, [r0]
	lsls r0, 2
	adds r0, r1
	ldrb r0, [r0, 0x2]
	movs r1, 0xA
	bl __udivsi3
	lsls r0, 24
	lsrs r6, r0, 24
	cmp r6, 0xFF
	bne _0816147C
	movs r6, 0
_0816147C:
	movs r5, 0
	ldr r0, =gUnknown_0203BC34
	mov r8, r0
	ldr r7, =gSprites
_08161484:
	cmp r5, r6
	bcs _081614B8
	mov r1, r8
	ldr r0, [r1]
	adds r4, r5, 0
	adds r4, 0x8
	adds r0, 0x1
	adds r0, r4
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r7
	movs r1, 0x3
	bl StartSpriteAnim
	b _081614D4
	.pool
_081614B8:
	mov r3, r8
	ldr r0, [r3]
	adds r4, r5, 0
	adds r4, 0x8
	adds r0, 0x1
	adds r0, r4
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r7
	movs r1, 0x2
	bl StartSpriteAnim
_081614D4:
	mov r1, r8
	ldr r0, [r1]
	adds r0, 0x1
	adds r0, r4
	ldrb r1, [r0]
	lsls r0, r1, 4
	adds r0, r1
	lsls r0, 2
	adds r0, r7
	adds r0, 0x3E
	ldrb r1, [r0]
	movs r3, 0x5
	negs r3, r3
	adds r2, r3, 0
	ands r1, r2
	strb r1, [r0]
	adds r0, r5, 0x1
	lsls r0, 16
	lsrs r5, r0, 16
	cmp r5, 0x7
	bls _08161484
_081614FE:
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_816137C

	.align 2, 0 @ Don't pad with nop.