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

	.syntax unified

	.text

	thumb_func_start GetSafariZoneFlag
GetSafariZoneFlag: @ 80FC0A0
	push {lr}
	ldr r0, =0x0000088c
	bl FlagGet
	lsls r0, 24
	lsrs r0, 24
	pop {r1}
	bx r1
	.pool
	thumb_func_end GetSafariZoneFlag

	thumb_func_start SetSafariZoneFlag
SetSafariZoneFlag: @ 80FC0B4
	push {lr}
	ldr r0, =0x0000088c
	bl FlagSet
	pop {r0}
	bx r0
	.pool
	thumb_func_end SetSafariZoneFlag

	thumb_func_start ResetSafariZoneFlag
ResetSafariZoneFlag: @ 80FC0C4
	push {lr}
	ldr r0, =0x0000088c
	bl FlagReset
	pop {r0}
	bx r0
	.pool
	thumb_func_end ResetSafariZoneFlag

	thumb_func_start sub_80FC0D4
sub_80FC0D4: @ 80FC0D4
	push {lr}
	movs r0, 0x11
	bl IncrementGameStat
	bl SetSafariZoneFlag
	bl sub_80FC244
	ldr r1, =gUnknown_0203A04C
	movs r0, 0x1E
	strb r0, [r1]
	ldr r1, =gUnknown_0203A04E
	movs r2, 0xFA
	lsls r2, 1
	adds r0, r2, 0
	strh r0, [r1]
	ldr r0, =gUnknown_0203A050
	movs r1, 0
	strb r1, [r0]
	ldr r0, =gUnknown_0203A051
	strb r1, [r0]
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC0D4

	thumb_func_start sub_80FC114
sub_80FC114: @ 80FC114
	push {lr}
	ldr r0, =gUnknown_0203A050
	ldrb r0, [r0]
	ldr r1, =gUnknown_0203A051
	ldrb r1, [r1]
	bl sub_80EE44C
	bl ResetSafariZoneFlag
	bl sub_80FC244
	ldr r1, =gUnknown_0203A04C
	movs r0, 0
	strb r0, [r1]
	ldr r1, =gUnknown_0203A04E
	movs r0, 0
	strh r0, [r1]
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC114

	thumb_func_start safari_step
safari_step: @ 80FC14C
	push {lr}
	bl GetSafariZoneFlag
	cmp r0, 0
	beq _080FC168
	bl sub_80FC480
	ldr r1, =gUnknown_0203A04E
	ldrh r0, [r1]
	subs r0, 0x1
	strh r0, [r1]
	lsls r0, 16
	cmp r0, 0
	beq _080FC170
_080FC168:
	movs r0, 0
	b _080FC178
	.pool
_080FC170:
	ldr r0, =gUnknown_082A4B8A
	bl script_env_1_execute_new_script
	movs r0, 0x1
_080FC178:
	pop {r1}
	bx r1
	.pool
	thumb_func_end safari_step

	thumb_func_start sub_80FC180
sub_80FC180: @ 80FC180
	push {lr}
	ldr r0, =gUnknown_082A4B6F
	bl script_env_1_execute_new_script
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC180

	thumb_func_start sub_80FC190
sub_80FC190: @ 80FC190
	push {lr}
	ldr r1, =gUnknown_0203A051
	ldr r0, =gUnknown_03005D10
	ldrb r0, [r0, 0x1F]
	ldrb r2, [r1]
	adds r0, r2
	strb r0, [r1]
	ldr r2, =gBattleOutcome
	ldrb r0, [r2]
	cmp r0, 0x7
	bne _080FC1AE
	ldr r1, =gUnknown_0203A050
	ldrb r0, [r1]
	adds r0, 0x1
	strb r0, [r1]
_080FC1AE:
	ldr r0, =gUnknown_0203A04C
	ldrb r0, [r0]
	cmp r0, 0
	beq _080FC1D8
	ldr r0, =c2_exit_to_overworld_2_switch
	bl SetMainCallback2
	b _080FC21C
	.pool
_080FC1D8:
	ldrb r0, [r2]
	cmp r0, 0x8
	bne _080FC208
	ldr r0, =gUnknown_082A4B4C
	bl ScriptContext2_RunNewScript
	bl warp_in
	ldr r1, =gUnknown_03005DAC
	ldr r0, =sub_80AF6F0
	str r0, [r1]
	ldr r0, =c2_load_new_map
	bl SetMainCallback2
	b _080FC21C
	.pool
_080FC208:
	cmp r0, 0x7
	bne _080FC21C
	ldr r0, =gUnknown_082A4B9B
	bl script_env_1_execute_new_script
	bl script_env_2_set_ctx_paused
	ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
	bl SetMainCallback2
_080FC21C:
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC190

	thumb_func_start sub_80FC228
sub_80FC228: @ 80FC228
	push {lr}
	lsls r0, 24
	lsrs r0, 20
	ldr r1, =gUnknown_0203A054
	adds r0, r1
	movs r1, 0
	movs r2, 0x10
	bl memset
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC228

	thumb_func_start sub_80FC244
sub_80FC244: @ 80FC244
	push {lr}
	ldr r0, =gUnknown_0203A054
	movs r1, 0
	movs r2, 0xA0
	bl memset
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC244

	thumb_func_start sub_80FC258
sub_80FC258: @ 80FC258
	push {r4,r5,lr}
	sub sp, 0x4
	mov r4, sp
	adds r4, 0x2
	mov r0, sp
	adds r1, r4, 0
	bl GetXYCoordsOneStepInFrontOfPlayer
	movs r5, 0
_080FC26A:
	ldr r0, =gSaveBlock1Ptr
	ldr r2, [r0]
	ldr r1, =gUnknown_0203A054
	lsls r0, r5, 4
	adds r3, r0, r1
	movs r1, 0x5
	ldrsb r1, [r2, r1]
	movs r0, 0x4
	ldrsb r0, [r3, r0]
	cmp r1, r0
	bne _080FC2C4
	mov r0, sp
	movs r2, 0
	ldrsh r1, [r3, r2]
	movs r2, 0
	ldrsh r0, [r0, r2]
	cmp r1, r0
	bne _080FC2C4
	movs r0, 0x2
	ldrsh r1, [r3, r0]
	movs r2, 0
	ldrsh r0, [r4, r2]
	cmp r1, r0
	bne _080FC2C4
	ldr r0, =gScriptResult
	strh r5, [r0]
	ldr r1, =gUnknown_085B262C
	ldrb r0, [r3, 0x8]
	lsls r0, 2
	adds r0, r1
	ldr r1, [r0]
	ldr r0, =gStringVar1
	bl StringCopy
	b _080FC2D6
	.pool
_080FC2C4:
	adds r0, r5, 0x1
	lsls r0, 16
	lsrs r5, r0, 16
	cmp r5, 0x9
	bls _080FC26A
	ldr r1, =gScriptResult
	ldr r2, =0x0000ffff
	adds r0, r2, 0
	strh r0, [r1]
_080FC2D6:
	add sp, 0x4
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC258

	thumb_func_start sub_80FC2E8
sub_80FC2E8: @ 80FC2E8
	push {r4-r7,lr}
	sub sp, 0x4
	mov r4, sp
	adds r4, 0x2
	mov r0, sp
	adds r1, r4, 0
	bl PlayerGetDestCoords
	movs r5, 0
	adds r6, r4, 0
	ldr r0, =gSaveBlock1Ptr
	ldr r7, [r0]
	mov r4, sp
	ldr r0, =gUnknown_0203A054
	mov r12, r0
_080FC306:
	lsls r0, r5, 4
	mov r1, r12
	adds r3, r0, r1
	movs r1, 0x5
	ldrsb r1, [r7, r1]
	movs r0, 0x4
	ldrsb r0, [r3, r0]
	cmp r1, r0
	bne _080FC364
	ldrh r0, [r4]
	ldrh r1, [r3]
	subs r0, r1
	strh r0, [r4]
	adds r2, r6, 0
	ldrh r0, [r2]
	ldrh r1, [r3, 0x2]
	subs r0, r1
	strh r0, [r2]
	movs r1, 0
	ldrsh r0, [r4, r1]
	cmp r0, 0
	bge _080FC336
	negs r0, r0
	strh r0, [r4]
_080FC336:
	movs r1, 0
	ldrsh r0, [r2, r1]
	cmp r0, 0
	bge _080FC342
	negs r0, r0
	strh r0, [r2]
_080FC342:
	movs r2, 0
	ldrsh r0, [r4, r2]
	movs r2, 0
	ldrsh r1, [r6, r2]
	adds r0, r1
	cmp r0, 0x5
	bgt _080FC364
	ldr r0, =gScriptResult
	strh r5, [r0]
	b _080FC376
	.pool
_080FC364:
	adds r0, r5, 0x1
	lsls r0, 16
	lsrs r5, r0, 16
	cmp r5, 0x9
	bls _080FC306
	ldr r1, =gScriptResult
	ldr r2, =0x0000ffff
	adds r0, r2, 0
	strh r0, [r1]
_080FC376:
	add sp, 0x4
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC2E8

	thumb_func_start sub_80FC388
sub_80FC388: @ 80FC388
	push {lr}
	bl sub_80FC258
	ldr r2, =gScriptResult
	ldrh r1, [r2]
	ldr r0, =0x0000ffff
	cmp r1, r0
	beq _080FC3B0
	adds r0, r1, 0
	lsls r0, 4
	ldr r1, =gUnknown_0203A05C
	adds r0, r1
	b _080FC3B2
	.pool
_080FC3B0:
	movs r0, 0
_080FC3B2:
	pop {r1}
	bx r1
	thumb_func_end sub_80FC388

	thumb_func_start sub_80FC3B8
sub_80FC3B8: @ 80FC3B8
	push {lr}
	bl sub_80FC2E8
	ldr r2, =gScriptResult
	ldrh r1, [r2]
	ldr r0, =0x0000ffff
	cmp r1, r0
	beq _080FC3E0
	adds r0, r1, 0
	lsls r0, 4
	ldr r1, =gUnknown_0203A05C
	adds r0, r1
	b _080FC3E2
	.pool
_080FC3E0:
	movs r0, 0
_080FC3E2:
	pop {r1}
	bx r1
	thumb_func_end sub_80FC3B8

	thumb_func_start sub_80FC3E8
sub_80FC3E8: @ 80FC3E8
	push {r4-r7,lr}
	mov r7, r9
	mov r6, r8
	push {r6,r7}
	sub sp, 0x4
	lsls r0, 24
	lsrs r0, 24
	mov r8, r0
	movs r1, 0
	ldr r2, =gUnknown_0203A054
	mov r6, sp
	adds r6, 0x2
	movs r0, 0x8
	adds r0, r2
	mov r9, r0
	ldr r7, =gSaveBlock1Ptr
_080FC408:
	lsls r5, r1, 4
	adds r4, r5, r2
	movs r0, 0x4
	ldrsb r0, [r4, r0]
	cmp r0, 0
	bne _080FC468
	movs r3, 0
	ldrsh r0, [r4, r3]
	cmp r0, 0
	bne _080FC468
	movs r3, 0x2
	ldrsh r0, [r4, r3]
	cmp r0, 0
	bne _080FC468
	mov r0, sp
	adds r1, r6, 0
	bl GetXYCoordsOneStepInFrontOfPlayer
	ldr r0, [r7]
	ldrb r0, [r0, 0x5]
	strb r0, [r4, 0x4]
	mov r0, r9
	adds r2, r5, r0
	ldr r0, [r7]
	mov r3, r8
	lsls r1, r3, 3
	ldr r3, =0x00000848
	adds r0, r3
	adds r0, r1
	ldr r1, [r0, 0x4]
	ldr r0, [r0]
	str r0, [r2]
	str r1, [r2, 0x4]
	movs r0, 0x64
	strb r0, [r4, 0x5]
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r4]
	ldrh r0, [r6]
	strh r0, [r4, 0x2]
	b _080FC472
	.pool
_080FC468:
	adds r0, r1, 0x1
	lsls r0, 24
	lsrs r1, r0, 24
	cmp r1, 0x9
	bls _080FC408
_080FC472:
	add sp, 0x4
	pop {r3,r4}
	mov r8, r3
	mov r9, r4
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_80FC3E8

	thumb_func_start sub_80FC480
sub_80FC480: @ 80FC480
	push {r4,r5,lr}
	movs r4, 0
	ldr r5, =gUnknown_0203A054
_080FC486:
	lsls r0, r4, 4
	adds r1, r0, r5
	ldrb r0, [r1, 0x5]
	cmp r0, 0
	beq _080FC4A0
	subs r0, 0x1
	strb r0, [r1, 0x5]
	lsls r0, 24
	cmp r0, 0
	bne _080FC4A0
	adds r0, r4, 0
	bl sub_80FC228
_080FC4A0:
	adds r0, r4, 0x1
	lsls r0, 24
	lsrs r4, r0, 24
	cmp r4, 0x9
	bls _080FC486
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80FC480

	thumb_func_start sub_80FC4B4
sub_80FC4B4: @ 80FC4B4
	push {lr}
	bl sub_80FC258
	ldr r3, =gScriptResult
	ldrh r1, [r3]
	ldr r0, =0x0000ffff
	cmp r1, r0
	beq _080FC4EC
	ldr r0, =gStringVar2
	ldr r2, =gUnknown_0203A054
	lsls r1, 4
	adds r1, r2
	ldrb r1, [r1, 0x5]
	movs r2, 0x2
	movs r3, 0x3
	bl ConvertIntToDecimalStringN
	movs r0, 0x1
	b _080FC4EE
	.pool
_080FC4EC:
	movs r0, 0
_080FC4EE:
	pop {r1}
	bx r1
	thumb_func_end sub_80FC4B4

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