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

	.syntax unified

	.text

	thumb_func_start task_per_step_callback_manager
task_per_step_callback_manager: @ 809D88C
	push {lr}
	lsls r0, 24
	lsrs r0, 24
	ldr r2, =gTasks
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	adds r1, r2
	movs r2, 0x8
	ldrsh r1, [r1, r2]
	ldr r2, =gUnknown_08510348
	lsls r1, 2
	adds r1, r2
	ldr r1, [r1]
	bl _call_via_r1
	pop {r0}
	bx r0
	.pool
	thumb_func_end task_per_step_callback_manager

	thumb_func_start sub_809D8B8
sub_809D8B8: @ 809D8B8
	push {r4,lr}
	adds r4, r0, 0
	movs r1, 0
	ldrsh r0, [r4, r1]
	cmp r0, 0
	beq _0809D8CA
	cmp r0, 0x1
	beq _0809D8E8
	b _0809D8FC
_0809D8CA:
	ldr r0, =gMain
	ldr r0, [r0, 0x20]
	movs r1, 0x80
	lsls r1, 5
	ands r0, r1
	cmp r0, 0
	beq _0809D8FC
	bl DoTimeBasedEvents
	ldrh r0, [r4]
	adds r0, 0x1
	b _0809D8FA
	.pool
_0809D8E8:
	ldr r0, =gMain
	ldr r0, [r0, 0x20]
	movs r1, 0x80
	lsls r1, 5
	ands r0, r1
	cmp r0, 0
	bne _0809D8FC
	ldrh r0, [r4]
	subs r0, 0x1
_0809D8FA:
	strh r0, [r4]
_0809D8FC:
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809D8B8

	thumb_func_start sub_809D908
sub_809D908: @ 809D908
	push {r4,lr}
	lsls r0, 24
	lsrs r0, 24
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	ldr r0, =gTasks + 0x8
	adds r4, r1, r0
	bl ScriptContext2_IsEnabled
	lsls r0, 24
	cmp r0, 0
	bne _0809D930
	adds r0, r4, 0
	bl sub_809D8B8
	adds r0, r4, 0x2
	adds r1, r4, 0x4
	bl UpdateAmbientCry
_0809D930:
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809D908

	thumb_func_start SetUpFieldTasks
SetUpFieldTasks: @ 809D93C
	push {r4,r5,lr}
	ldr r5, =task_per_step_callback_manager
	adds r0, r5, 0
	bl FuncIsActiveTask
	lsls r0, 24
	lsrs r4, r0, 24
	cmp r4, 0
	bne _0809D966
	adds r0, r5, 0
	movs r1, 0x50
	bl CreateTask
	lsls r0, 24
	lsrs r0, 24
	ldr r2, =gTasks
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	adds r1, r2
	strh r4, [r1, 0x8]
_0809D966:
	ldr r4, =sub_809E638
	adds r0, r4, 0
	bl FuncIsActiveTask
	lsls r0, 24
	cmp r0, 0
	bne _0809D97C
	adds r0, r4, 0
	movs r1, 0x50
	bl CreateTask
_0809D97C:
	ldr r4, =sub_809D908
	adds r0, r4, 0
	bl FuncIsActiveTask
	lsls r0, 24
	cmp r0, 0
	bne _0809D992
	adds r0, r4, 0
	movs r1, 0x50
	bl CreateTask
_0809D992:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end SetUpFieldTasks

	thumb_func_start ActivatePerStepCallback
ActivatePerStepCallback: @ 809D9A8
	push {r4,lr}
	lsls r0, 24
	lsrs r4, r0, 24
	ldr r0, =task_per_step_callback_manager
	bl FindTaskIdByFunc
	lsls r0, 24
	lsrs r1, r0, 24
	cmp r1, 0xFF
	beq _0809D9EA
	lsls r0, r1, 2
	adds r0, r1
	lsls r0, 3
	ldr r1, =gTasks + 0x8
	adds r1, r0, r1
	movs r2, 0
	adds r0, r1, 0
	adds r0, 0x1E
_0809D9CC:
	strh r2, [r0]
	subs r0, 0x2
	cmp r0, r1
	bge _0809D9CC
	cmp r4, 0x7
	bls _0809D9E8
	movs r0, 0
	strh r0, [r1]
	b _0809D9EA
	.pool
_0809D9E8:
	strh r4, [r1]
_0809D9EA:
	pop {r4}
	pop {r0}
	bx r0
	thumb_func_end ActivatePerStepCallback

	thumb_func_start ResetFieldTasksArgs
ResetFieldTasksArgs: @ 809D9F0
	push {lr}
	ldr r0, =task_per_step_callback_manager
	bl FindTaskIdByFunc
	lsls r0, 24
	lsrs r1, r0, 24
	ldr r0, =sub_809D908
	bl FindTaskIdByFunc
	lsls r0, 24
	lsrs r1, r0, 24
	cmp r1, 0xFF
	beq _0809DA1A
	lsls r0, r1, 2
	adds r0, r1
	lsls r0, 3
	ldr r1, =gTasks + 0x8
	adds r0, r1
	movs r1, 0
	strh r1, [r0, 0x2]
	strh r1, [r0, 0x4]
_0809DA1A:
	pop {r0}
	bx r0
	.pool
	thumb_func_end ResetFieldTasksArgs

	thumb_func_start nullsub_34
nullsub_34: @ 809DA2C
	bx lr
	thumb_func_end nullsub_34

	thumb_func_start sub_809DA30
sub_809DA30: @ 809DA30
	push {r4,r5,lr}
	adds r5, r0, 0
	lsls r1, 24
	lsrs r4, r1, 24
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogVerticalLog1
	lsls r0, 24
	cmp r0, 0
	beq _0809DA48
	adds r0, r5, 0
	b _0809DA80
_0809DA48:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogVerticalLog2
	lsls r0, 24
	cmp r0, 0
	beq _0809DA5A
	adds r0, r5, 0
	adds r0, 0x8
	b _0809DA80
_0809DA5A:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogHorizontalLog1
	lsls r0, 24
	cmp r0, 0
	beq _0809DA6C
	adds r0, r5, 0
	adds r0, 0x10
	b _0809DA80
_0809DA6C:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogHorizontalLog2
	lsls r0, 24
	cmp r0, 0
	bne _0809DA7C
	movs r0, 0
	b _0809DA80
_0809DA7C:
	adds r0, r5, 0
	adds r0, 0x18
_0809DA80:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end sub_809DA30

	thumb_func_start sub_809DA88
sub_809DA88: @ 809DA88
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	adds r5, r0, 0
	mov r8, r3
	lsls r1, 16
	asrs r6, r1, 16
	lsls r2, 16
	asrs r7, r2, 16
	adds r0, r6, 0
	adds r1, r7, 0
	bl MapGridGetMetatileBehaviorAt
	adds r1, r0, 0
	lsls r1, 16
	lsrs r1, 16
	adds r0, r5, 0
	bl sub_809DA30
	adds r4, r0, 0
	adds r5, r4, 0
	cmp r4, 0
	beq _0809DB06
	movs r0, 0
	ldrsb r0, [r4, r0]
	adds r0, r6, r0
	movs r1, 0x1
	ldrsb r1, [r4, r1]
	adds r1, r7, r1
	ldrh r2, [r4, 0x2]
	bl MapGridSetMetatileIdAt
	mov r0, r8
	cmp r0, 0
	beq _0809DADE
	movs r0, 0
	ldrsb r0, [r4, r0]
	adds r0, r6, r0
	movs r1, 0x1
	ldrsb r1, [r4, r1]
	adds r1, r7, r1
	bl CurrentMapDrawMetatileAt
_0809DADE:
	movs r0, 0x4
	ldrsb r0, [r5, r0]
	adds r0, r6, r0
	movs r1, 0x5
	ldrsb r1, [r5, r1]
	adds r1, r7, r1
	ldrh r2, [r5, 0x6]
	bl MapGridSetMetatileIdAt
	mov r0, r8
	cmp r0, 0
	beq _0809DB06
	movs r0, 0x4
	ldrsb r0, [r5, r0]
	adds r0, r6, r0
	movs r1, 0x5
	ldrsb r1, [r5, r1]
	adds r1, r7, r1
	bl CurrentMapDrawMetatileAt
_0809DB06:
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_809DA88

	thumb_func_start sub_809DB10
sub_809DB10: @ 809DB10
	push {r4,r5,lr}
	adds r4, r0, 0
	adds r5, r1, 0
	adds r3, r2, 0
	ldr r0, =gUnknown_08510368
	lsls r4, 16
	asrs r4, 16
	lsls r5, 16
	asrs r5, 16
	adds r1, r4, 0
	adds r2, r5, 0
	bl sub_809DA88
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809DB10

	thumb_func_start sub_809DB34
sub_809DB34: @ 809DB34
	push {r4,r5,lr}
	adds r4, r0, 0
	adds r5, r1, 0
	adds r3, r2, 0
	ldr r0, =gUnknown_08510388
	lsls r4, 16
	asrs r4, 16
	lsls r5, 16
	asrs r5, 16
	adds r1, r4, 0
	adds r2, r5, 0
	bl sub_809DA88
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809DB34

	thumb_func_start sub_809DB58
sub_809DB58: @ 809DB58
	push {r4,r5,lr}
	adds r4, r0, 0
	adds r5, r1, 0
	adds r3, r2, 0
	ldr r0, =gUnknown_085103A8
	lsls r4, 16
	asrs r4, 16
	lsls r5, 16
	asrs r5, 16
	adds r1, r4, 0
	adds r2, r5, 0
	bl sub_809DA88
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809DB58

	thumb_func_start sub_809DB7C
sub_809DB7C: @ 809DB7C
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	lsls r0, 16
	lsrs r0, 16
	mov r8, r0
	mov r10, r8
	lsls r1, 16
	lsrs r7, r1, 16
	mov r9, r7
	lsls r2, 16
	asrs r6, r2, 16
	lsls r3, 16
	asrs r5, r3, 16
	adds r0, r6, 0
	adds r1, r5, 0
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogVerticalLog1
	lsls r0, 24
	cmp r0, 0
	beq _0809DBC0
	lsls r0, r7, 16
	asrs r0, 16
	cmp r0, r5
	ble _0809DC06
_0809DBBC:
	movs r0, 0
	b _0809DC08
_0809DBC0:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogVerticalLog2
	lsls r0, 24
	cmp r0, 0
	beq _0809DBD8
	mov r1, r9
	lsls r0, r1, 16
	asrs r0, 16
	cmp r0, r5
	bge _0809DC06
	b _0809DBBC
_0809DBD8:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogHorizontalLog1
	lsls r0, 24
	cmp r0, 0
	beq _0809DBF0
	mov r1, r8
	lsls r0, r1, 16
	asrs r0, 16
	cmp r0, r6
	ble _0809DC06
	b _0809DBBC
_0809DBF0:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogHorizontalLog2
	lsls r0, 24
	cmp r0, 0
	beq _0809DC06
	mov r1, r10
	lsls r0, r1, 16
	asrs r0, 16
	cmp r0, r6
	blt _0809DBBC
_0809DC06:
	movs r0, 0x1
_0809DC08:
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_809DB7C

	thumb_func_start sub_809DC18
sub_809DC18: @ 809DC18
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	lsls r2, 16
	lsrs r2, 16
	mov r8, r2
	mov r10, r8
	lsls r3, 16
	lsrs r7, r3, 16
	mov r9, r7
	lsls r0, 16
	asrs r6, r0, 16
	lsls r1, 16
	asrs r5, r1, 16
	adds r0, r6, 0
	adds r1, r5, 0
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r4, r0, 24
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogVerticalLog1
	lsls r0, 24
	cmp r0, 0
	beq _0809DC5C
	lsls r0, r7, 16
	asrs r0, 16
	cmp r5, r0
	bge _0809DCA2
_0809DC58:
	movs r0, 0
	b _0809DCA4
_0809DC5C:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogVerticalLog2
	lsls r0, 24
	cmp r0, 0
	beq _0809DC74
	mov r1, r9
	lsls r0, r1, 16
	asrs r0, 16
	cmp r5, r0
	ble _0809DCA2
	b _0809DC58
_0809DC74:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogHorizontalLog1
	lsls r0, 24
	cmp r0, 0
	beq _0809DC8C
	mov r1, r8
	lsls r0, r1, 16
	asrs r0, 16
	cmp r6, r0
	bge _0809DCA2
	b _0809DC58
_0809DC8C:
	adds r0, r4, 0
	bl MetatileBehavior_IsPacifilogHorizontalLog2
	lsls r0, 24
	cmp r0, 0
	beq _0809DCA2
	mov r1, r10
	lsls r0, r1, 16
	asrs r0, 16
	cmp r6, r0
	bgt _0809DC58
_0809DCA2:
	movs r0, 0x1
_0809DCA4:
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_809DC18

	thumb_func_start sub_809DCB4
sub_809DCB4: @ 809DCB4
	push {r4-r7,lr}
	sub sp, 0x4
	lsls r0, 24
	lsrs r0, 24
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	ldr r0, =gTasks + 0x8
	adds r4, r1, r0
	mov r5, sp
	adds r5, 0x2
	mov r0, sp
	adds r1, r5, 0
	bl PlayerGetDestCoords
	movs r1, 0x2
	ldrsh r0, [r4, r1]
	adds r6, r5, 0
	cmp r0, 0x1
	beq _0809DD0E
	cmp r0, 0x1
	bgt _0809DCEC
	cmp r0, 0
	beq _0809DCF2
	b _0809DE1E
	.pool
_0809DCEC:
	cmp r0, 0x2
	beq _0809DDDC
	b _0809DE1E
_0809DCF2:
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r4, 0x4]
	ldrh r0, [r5]
	strh r0, [r4, 0x6]
	mov r0, sp
	movs r2, 0
	ldrsh r0, [r0, r2]
	movs r3, 0
	ldrsh r1, [r5, r3]
	movs r2, 0x1
	bl sub_809DB34
	b _0809DE1A
_0809DD0E:
	mov r0, sp
	movs r7, 0
	ldrsh r1, [r0, r7]
	movs r2, 0x4
	ldrsh r0, [r4, r2]
	cmp r1, r0
	bne _0809DD28
	movs r3, 0
	ldrsh r1, [r5, r3]
	movs r7, 0x6
	ldrsh r0, [r4, r7]
	cmp r1, r0
	beq _0809DE1E
_0809DD28:
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r5, r2]
	movs r3, 0x4
	ldrsh r2, [r4, r3]
	movs r5, 0x6
	ldrsh r3, [r4, r5]
	bl sub_809DB7C
	cmp r0, 0
	beq _0809DD70
	movs r7, 0x4
	ldrsh r0, [r4, r7]
	movs r2, 0x6
	ldrsh r1, [r4, r2]
	movs r2, 0x1
	bl sub_809DB10
	movs r3, 0x4
	ldrsh r0, [r4, r3]
	movs r5, 0x6
	ldrsh r1, [r4, r5]
	movs r2, 0
	bl sub_809DB58
	ldrh r0, [r4, 0x4]
	strh r0, [r4, 0x8]
	ldrh r0, [r4, 0x6]
	strh r0, [r4, 0xA]
	movs r0, 0x2
	strh r0, [r4, 0x2]
	movs r0, 0x8
	strh r0, [r4, 0xC]
	b _0809DD7A
_0809DD70:
	movs r7, 0x1
	negs r7, r7
	adds r0, r7, 0
	strh r0, [r4, 0x8]
	strh r0, [r4, 0xA]
_0809DD7A:
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	adds r5, r6, 0
	movs r2, 0
	ldrsh r1, [r5, r2]
	movs r3, 0x4
	ldrsh r2, [r4, r3]
	movs r7, 0x6
	ldrsh r3, [r4, r7]
	bl sub_809DC18
	cmp r0, 0
	beq _0809DDAE
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r5, r2]
	movs r2, 0x1
	bl sub_809DB10
	movs r0, 0x2
	strh r0, [r4, 0x2]
	movs r0, 0x8
	strh r0, [r4, 0xC]
_0809DDAE:
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r4, 0x4]
	ldrh r0, [r6]
	strh r0, [r4, 0x6]
	mov r0, sp
	movs r3, 0
	ldrsh r0, [r0, r3]
	movs r5, 0
	ldrsh r1, [r6, r5]
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r0, 24
	bl MetatileBehavior_IsPacifidlogLog
	lsls r0, 24
	cmp r0, 0
	beq _0809DE1E
	movs r0, 0x46
	bl PlaySE
	b _0809DE1E
_0809DDDC:
	ldrh r0, [r4, 0xC]
	subs r0, 0x1
	strh r0, [r4, 0xC]
	lsls r0, 16
	cmp r0, 0
	bne _0809DE1E
	mov r0, sp
	movs r7, 0
	ldrsh r0, [r0, r7]
	movs r2, 0
	ldrsh r1, [r5, r2]
	movs r2, 0x1
	bl sub_809DB34
	movs r3, 0x8
	ldrsh r0, [r4, r3]
	movs r1, 0x1
	negs r1, r1
	cmp r0, r1
	beq _0809DE1A
	movs r5, 0xA
	ldrsh r0, [r4, r5]
	cmp r0, r1
	beq _0809DE1A
	movs r7, 0x8
	ldrsh r0, [r4, r7]
	movs r2, 0xA
	ldrsh r1, [r4, r2]
	movs r2, 0x1
	bl sub_809DB58
_0809DE1A:
	movs r0, 0x1
	strh r0, [r4, 0x2]
_0809DE1E:
	add sp, 0x4
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_809DCB4

	thumb_func_start sub_809DE28
sub_809DE28: @ 809DE28
	push {r4,r5,lr}
	lsls r0, 16
	lsrs r4, r0, 16
	lsls r1, 16
	lsrs r5, r1, 16
	bl PlayerGetZCoord
	lsls r0, 24
	lsrs r0, 24
	movs r1, 0x1
	ands r0, r1
	cmp r0, 0
	bne _0809DE82
	lsls r0, r4, 16
	asrs r4, r0, 16
	lsls r0, r5, 16
	asrs r5, r0, 16
	adds r0, r4, 0
	adds r1, r5, 0
	bl MapGridGetMetatileIdAt
	adds r1, r0, 0
	ldr r0, =0x0000024e
	cmp r1, r0
	beq _0809DE68
	adds r0, 0x8
	cmp r1, r0
	beq _0809DE78
	b _0809DE82
	.pool
_0809DE68:
	ldr r2, =0x0000024f
	adds r0, r4, 0
	adds r1, r5, 0
	bl MapGridSetMetatileIdAt
	b _0809DE82
	.pool
_0809DE78:
	ldr r2, =0x00000257
	adds r0, r4, 0
	adds r1, r5, 0
	bl MapGridSetMetatileIdAt
_0809DE82:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809DE28

	thumb_func_start sub_809DE8C
sub_809DE8C: @ 809DE8C
	push {r4,r5,lr}
	lsls r0, 16
	lsrs r4, r0, 16
	lsls r1, 16
	lsrs r5, r1, 16
	bl PlayerGetZCoord
	lsls r0, 24
	lsrs r0, 24
	movs r1, 0x1
	ands r0, r1
	cmp r0, 0
	bne _0809DEE6
	lsls r0, r4, 16
	asrs r4, r0, 16
	lsls r0, r5, 16
	asrs r5, r0, 16
	adds r0, r4, 0
	adds r1, r5, 0
	bl MapGridGetMetatileIdAt
	adds r1, r0, 0
	ldr r0, =0x0000024f
	cmp r1, r0
	beq _0809DECC
	adds r0, 0x8
	cmp r1, r0
	beq _0809DEDC
	b _0809DEE6
	.pool
_0809DECC:
	ldr r2, =0x0000024e
	adds r0, r4, 0
	adds r1, r5, 0
	bl MapGridSetMetatileIdAt
	b _0809DEE6
	.pool
_0809DEDC:
	ldr r2, =0x00000256
	adds r0, r4, 0
	adds r1, r5, 0
	bl MapGridSetMetatileIdAt
_0809DEE6:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809DE8C

	thumb_func_start sub_809DEF0
sub_809DEF0: @ 809DEF0
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x8
	lsls r0, 24
	lsrs r0, 24
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	ldr r0, =gTasks + 0x8
	adds r6, r1, r0
	mov r4, sp
	adds r4, 0x2
	mov r0, sp
	adds r1, r4, 0
	bl PlayerGetDestCoords
	movs r0, 0x2
	ldrsh r5, [r6, r0]
	mov r9, r4
	cmp r5, 0x1
	beq _0809DF84
	cmp r5, 0x1
	bgt _0809DF30
	cmp r5, 0
	beq _0809DF38
	b _0809E0F6
	.pool
_0809DF30:
	cmp r5, 0x2
	bne _0809DF36
	b _0809E064
_0809DF36:
	b _0809E0F6
_0809DF38:
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r6, 0x4]
	mov r1, r9
	ldrh r0, [r1]
	strh r0, [r6, 0x6]
	mov r0, sp
	movs r2, 0
	ldrsh r0, [r0, r2]
	movs r3, 0
	ldrsh r1, [r1, r3]
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r0, 24
	bl MetatileBehavior_IsFortreeBridge
	lsls r0, 24
	cmp r0, 0
	bne _0809DF62
	b _0809E0F2
_0809DF62:
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	mov r2, r9
	movs r3, 0
	ldrsh r1, [r2, r3]
	bl sub_809DE28
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	mov r2, r9
	movs r3, 0
	ldrsh r1, [r2, r3]
	bl CurrentMapDrawMetatileAt
	b _0809E0F2
_0809DF84:
	ldrh r0, [r6, 0x6]
	mov r8, r0
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	ldrh r2, [r6, 0x4]
	mov r10, r2
	movs r3, 0x4
	ldrsh r7, [r6, r3]
	cmp r0, r7
	bne _0809DFAC
	mov r0, r9
	movs r2, 0
	ldrsh r1, [r0, r2]
	mov r3, r8
	lsls r0, r3, 16
	asrs r0, 16
	cmp r1, r0
	bne _0809DFAC
	b _0809E0F6
_0809DFAC:
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	mov r2, r9
	movs r3, 0
	ldrsh r1, [r2, r3]
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r0, 24
	bl MetatileBehavior_IsFortreeBridge
	lsls r0, 24
	lsrs r0, 24
	str r0, [sp, 0x4]
	mov r0, r8
	lsls r4, r0, 16
	asrs r1, r4, 16
	adds r0, r7, 0
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r0, 24
	bl MetatileBehavior_IsFortreeBridge
	lsls r0, 24
	lsrs r7, r0, 24
	bl PlayerGetZCoord
	movs r1, 0
	ands r5, r0
	lsls r0, r5, 24
	adds r5, r4, 0
	cmp r0, 0
	bne _0809DFF4
	movs r1, 0x1
_0809DFF4:
	cmp r1, 0
	beq _0809E008
	ldr r1, [sp, 0x4]
	cmp r1, 0x1
	beq _0809E002
	cmp r7, 0x1
	bne _0809E008
_0809E002:
	movs r0, 0x47
	bl PlaySE
_0809E008:
	cmp r7, 0
	beq _0809E044
	mov r2, r10
	lsls r4, r2, 16
	asrs r4, 16
	asrs r5, 16
	adds r0, r4, 0
	adds r1, r5, 0
	bl sub_809DE8C
	adds r0, r4, 0
	adds r1, r5, 0
	bl CurrentMapDrawMetatileAt
	mov r0, sp
	movs r3, 0
	ldrsh r0, [r0, r3]
	mov r2, r9
	movs r3, 0
	ldrsh r1, [r2, r3]
	bl sub_809DE28
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	mov r2, r9
	movs r3, 0
	ldrsh r1, [r2, r3]
	bl CurrentMapDrawMetatileAt
_0809E044:
	mov r0, r10
	strh r0, [r6, 0x8]
	mov r1, r8
	strh r1, [r6, 0xA]
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r6, 0x4]
	mov r2, r9
	ldrh r0, [r2]
	strh r0, [r6, 0x6]
	cmp r7, 0
	beq _0809E0F6
	movs r0, 0x10
	strh r0, [r6, 0xC]
	movs r0, 0x2
	strh r0, [r6, 0x2]
_0809E064:
	ldrh r0, [r6, 0xC]
	subs r0, 0x1
	strh r0, [r6, 0xC]
	ldrh r3, [r6, 0x8]
	mov r10, r3
	ldrh r0, [r6, 0xA]
	mov r8, r0
	movs r1, 0xC
	ldrsh r0, [r6, r1]
	movs r1, 0x7
	bl __modsi3
	lsls r0, 16
	asrs r0, 16
	cmp r0, 0x7
	bhi _0809E0EA
	lsls r0, 2
	ldr r1, =_0809E094
	adds r0, r1
	ldr r0, [r0]
	mov pc, r0
	.pool
	.align 2, 0
_0809E094:
	.4byte _0809E0B4
	.4byte _0809E0EA
	.4byte _0809E0EA
	.4byte _0809E0EA
	.4byte _0809E0C6
	.4byte _0809E0EA
	.4byte _0809E0EA
	.4byte _0809E0EA
_0809E0B4:
	mov r2, r10
	lsls r0, r2, 16
	asrs r0, 16
	mov r3, r8
	lsls r1, r3, 16
	asrs r1, 16
	bl CurrentMapDrawMetatileAt
	b _0809E0EA
_0809E0C6:
	mov r0, r10
	lsls r5, r0, 16
	asrs r5, 16
	mov r1, r8
	lsls r4, r1, 16
	asrs r4, 16
	adds r0, r5, 0
	adds r1, r4, 0
	bl sub_809DE28
	adds r0, r5, 0
	adds r1, r4, 0
	bl CurrentMapDrawMetatileAt
	adds r0, r5, 0
	adds r1, r4, 0
	bl sub_809DE8C
_0809E0EA:
	movs r2, 0xC
	ldrsh r0, [r6, r2]
	cmp r0, 0
	bne _0809E0F6
_0809E0F2:
	movs r0, 0x1
	strh r0, [r6, 0x2]
_0809E0F6:
	add sp, 0x8
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_809DEF0

	thumb_func_start sub_809E108
sub_809E108: @ 809E108
	push {lr}
	lsls r1, 16
	lsrs r1, 16
	lsls r0, 16
	ldr r2, =0xfffd0000
	adds r0, r2
	lsrs r0, 16
	cmp r0, 0xA
	bhi _0809E144
	lsls r0, r1, 16
	asrs r1, r0, 16
	ldr r2, =0xfffa0000
	adds r0, r2
	lsrs r0, 16
	cmp r0, 0xD
	bhi _0809E144
	ldr r0, =gUnknown_085103C8
	lsls r1, 1
	adds r1, r0
	ldrh r0, [r1]
	cmp r0, 0
	beq _0809E144
	movs r0, 0x1
	b _0809E146
	.pool
_0809E144:
	movs r0, 0
_0809E146:
	pop {r1}
	bx r1
	thumb_func_end sub_809E108

	thumb_func_start sub_809E14C
sub_809E14C: @ 809E14C
	push {r4,r5,lr}
	lsls r0, 16
	asrs r5, r0, 16
	lsls r1, 16
	asrs r4, r1, 16
	adds r0, r5, 0
	adds r1, r4, 0
	bl sub_809E108
	cmp r0, 0
	beq _0809E17A
	ldr r1, =gUnknown_085103C8
	lsls r0, r4, 1
	adds r0, r1
	ldrh r0, [r0]
	bl GetVarPointer
	subs r2, r5, 0x3
	movs r1, 0x1
	lsls r1, r2
	ldrh r2, [r0]
	orrs r1, r2
	strh r1, [r0]
_0809E17A:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809E14C

	thumb_func_start sub_809E184
sub_809E184: @ 809E184
	push {r4,r5,lr}
	lsls r0, 16
	asrs r5, r0, 16
	lsls r1, 16
	asrs r4, r1, 16
	adds r0, r5, 0
	adds r1, r4, 0
	bl sub_809E108
	cmp r0, 0
	beq _0809E1B6
	ldr r1, =gUnknown_085103C8
	lsls r0, r4, 1
	adds r0, r1
	ldrh r0, [r0]
	bl VarGet
	lsls r0, 16
	subs r2, r5, 0x3
	movs r1, 0x80
	lsls r1, 9
	lsls r1, r2
	ands r1, r0
	cmp r1, 0
	bne _0809E1C0
_0809E1B6:
	movs r0, 0
	b _0809E1C2
	.pool
_0809E1C0:
	movs r0, 0x1
_0809E1C2:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end sub_809E184

	thumb_func_start sub_809E1C8
sub_809E1C8: @ 809E1C8
	push {r4-r7,lr}
	mov r7, r9
	mov r6, r8
	push {r6,r7}
	ldr r0, =gMapHeader
	ldr r0, [r0]
	ldr r1, [r0]
	mov r9, r1
	ldr r7, [r0, 0x4]
	movs r5, 0
	cmp r5, r9
	bge _0809E210
_0809E1E0:
	movs r4, 0
	adds r0, r5, 0x1
	mov r8, r0
	cmp r4, r7
	bge _0809E20A
	lsls r6, r5, 16
_0809E1EC:
	lsls r1, r4, 16
	asrs r1, 16
	asrs r0, r6, 16
	bl sub_809E184
	cmp r0, 0x1
	bne _0809E204
	adds r1, r4, 0x7
	adds r0, r5, 0x7
	ldr r2, =0x0000020e
	bl MapGridSetMetatileIdAt
_0809E204:
	adds r4, 0x1
	cmp r4, r7
	blt _0809E1EC
_0809E20A:
	mov r5, r8
	cmp r5, r9
	blt _0809E1E0
_0809E210:
	pop {r3,r4}
	mov r8, r3
	mov r9, r4
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809E1C8

	thumb_func_start sub_809E224
sub_809E224: @ 809E224
	push {r4-r7,lr}
	sub sp, 0x4
	lsls r0, 24
	lsrs r0, 24
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	ldr r0, =gTasks + 0x8
	adds r5, r1, r0
	movs r1, 0x2
	ldrsh r0, [r5, r1]
	cmp r0, 0x1
	beq _0809E270
	cmp r0, 0x1
	bgt _0809E24C
	cmp r0, 0
	beq _0809E258
	b _0809E3A6
	.pool
_0809E24C:
	cmp r0, 0x2
	beq _0809E306
	cmp r0, 0x3
	bne _0809E256
	b _0809E360
_0809E256:
	b _0809E3A6
_0809E258:
	mov r4, sp
	adds r4, 0x2
	mov r0, sp
	adds r1, r4, 0
	bl PlayerGetDestCoords
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r5, 0x4]
	ldrh r0, [r4]
	strh r0, [r5, 0x6]
	b _0809E3A2
_0809E270:
	mov r7, sp
	adds r7, 0x2
	mov r0, sp
	adds r1, r7, 0
	bl PlayerGetDestCoords
	mov r0, sp
	ldrh r2, [r0]
	movs r3, 0
	ldrsh r1, [r0, r3]
	movs r3, 0x4
	ldrsh r0, [r5, r3]
	cmp r1, r0
	bne _0809E29A
	movs r0, 0
	ldrsh r1, [r7, r0]
	movs r3, 0x6
	ldrsh r0, [r5, r3]
	cmp r1, r0
	bne _0809E29A
	b _0809E3A6
_0809E29A:
	strh r2, [r5, 0x4]
	ldrh r0, [r7]
	strh r0, [r5, 0x6]
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r7, r2]
	bl MapGridGetMetatileBehaviorAt
	adds r4, r0, 0
	lsls r4, 16
	lsrs r4, 16
	ldr r0, =0x00004022
	bl GetVarPointer
	adds r6, r0, 0
	lsls r4, 24
	lsrs r4, 24
	adds r0, r4, 0
	bl MetatileBehavior_IsThinIce
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x1
	bne _0809E2E0
	ldrh r0, [r6]
	adds r0, 0x1
	strh r0, [r6]
	movs r0, 0x4
	strh r0, [r5, 0xC]
	movs r0, 0x2
	b _0809E2F8
	.pool
_0809E2E0:
	adds r0, r4, 0
	bl MetatileBehavior_IsCrackedIce
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x1
	bne _0809E3A6
	movs r0, 0
	strh r0, [r6]
	movs r0, 0x4
	strh r0, [r5, 0xC]
	movs r0, 0x3
_0809E2F8:
	strh r0, [r5, 0x2]
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r5, 0x8]
	ldrh r0, [r7]
	strh r0, [r5, 0xA]
	b _0809E3A6
_0809E306:
	ldrh r1, [r5, 0xC]
	movs r3, 0xC
	ldrsh r0, [r5, r3]
	cmp r0, 0
	bne _0809E36A
	mov r1, sp
	ldrh r0, [r5, 0x8]
	strh r0, [r1]
	mov r4, sp
	adds r4, 0x2
	ldrh r0, [r5, 0xA]
	strh r0, [r4]
	movs r0, 0x2A
	bl PlaySE
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r4, r2]
	ldr r2, =0x0000020e
	bl MapGridSetMetatileIdAt
	mov r0, sp
	movs r3, 0
	ldrsh r0, [r0, r3]
	movs r2, 0
	ldrsh r1, [r4, r2]
	bl CurrentMapDrawMetatileAt
	mov r0, sp
	ldrh r0, [r0]
	subs r0, 0x7
	lsls r0, 16
	asrs r0, 16
	ldrh r1, [r4]
	subs r1, 0x7
	lsls r1, 16
	asrs r1, 16
	bl sub_809E14C
	b _0809E3A2
	.pool
_0809E360:
	ldrh r1, [r5, 0xC]
	movs r3, 0xC
	ldrsh r0, [r5, r3]
	cmp r0, 0
	beq _0809E370
_0809E36A:
	subs r0, r1, 0x1
	strh r0, [r5, 0xC]
	b _0809E3A6
_0809E370:
	mov r1, sp
	ldrh r0, [r5, 0x8]
	strh r0, [r1]
	mov r4, sp
	adds r4, 0x2
	ldrh r0, [r5, 0xA]
	strh r0, [r4]
	movs r0, 0x29
	bl PlaySE
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r4, r2]
	ldr r2, =0x00000206
	bl MapGridSetMetatileIdAt
	mov r0, sp
	movs r3, 0
	ldrsh r0, [r0, r3]
	movs r2, 0
	ldrsh r1, [r4, r2]
	bl CurrentMapDrawMetatileAt
_0809E3A2:
	movs r0, 0x1
	strh r0, [r5, 0x2]
_0809E3A6:
	add sp, 0x4
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809E224

	thumb_func_start sub_809E3B4
sub_809E3B4: @ 809E3B4
	push {r4,r5,lr}
	sub sp, 0x4
	lsls r0, 24
	lsrs r0, 24
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	ldr r0, =gTasks + 0x8
	adds r5, r1, r0
	mov r4, sp
	adds r4, 0x2
	mov r0, sp
	adds r1, r4, 0
	bl PlayerGetDestCoords
	mov r0, sp
	ldrh r2, [r0]
	movs r3, 0
	ldrsh r1, [r0, r3]
	movs r3, 0x2
	ldrsh r0, [r5, r3]
	cmp r1, r0
	bne _0809E3EE
	movs r0, 0
	ldrsh r1, [r4, r0]
	movs r3, 0x4
	ldrsh r0, [r5, r3]
	cmp r1, r0
	beq _0809E47A
_0809E3EE:
	strh r2, [r5, 0x2]
	ldrh r0, [r4]
	strh r0, [r5, 0x4]
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r4, r2]
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r0, 24
	bl MetatileBehavior_IsAsh
	lsls r0, 24
	cmp r0, 0
	beq _0809E47A
	mov r0, sp
	movs r3, 0
	ldrsh r0, [r0, r3]
	movs r2, 0
	ldrsh r1, [r4, r2]
	bl MapGridGetMetatileIdAt
	ldr r1, =0x0000020a
	cmp r0, r1
	bne _0809E444
	mov r0, sp
	movs r3, 0
	ldrsh r0, [r0, r3]
	movs r2, 0
	ldrsh r1, [r4, r2]
	ldr r2, =0x00000212
	movs r3, 0x4
	bl ash
	b _0809E456
	.pool
_0809E444:
	mov r0, sp
	movs r3, 0
	ldrsh r0, [r0, r3]
	movs r2, 0
	ldrsh r1, [r4, r2]
	ldr r2, =0x00000206
	movs r3, 0x4
	bl ash
_0809E456:
	movs r0, 0x87
	lsls r0, 1
	movs r1, 0x1
	bl CheckBagHasItem
	lsls r0, 24
	cmp r0, 0
	beq _0809E47A
	ldr r0, =0x00004048
	bl GetVarPointer
	adds r2, r0, 0
	ldrh r1, [r2]
	ldr r0, =0x0000270e
	cmp r1, r0
	bhi _0809E47A
	adds r0, r1, 0x1
	strh r0, [r2]
_0809E47A:
	add sp, 0x4
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809E3B4

	thumb_func_start sub_809E490
sub_809E490: @ 809E490
	push {r4,r5,lr}
	lsls r0, 16
	asrs r5, r0, 16
	lsls r1, 16
	asrs r4, r1, 16
	adds r0, r5, 0
	adds r1, r4, 0
	bl MapGridGetMetatileIdAt
	ldr r1, =0x0000022f
	ldr r2, =0x00000237
	cmp r0, r1
	bne _0809E4AC
	subs r2, 0x31
_0809E4AC:
	adds r0, r5, 0
	adds r1, r4, 0
	bl MapGridSetMetatileIdAt
	adds r0, r5, 0
	adds r1, r4, 0
	bl CurrentMapDrawMetatileAt
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809E490

	thumb_func_start sub_809E4CC
sub_809E4CC: @ 809E4CC
	push {r4-r7,lr}
	sub sp, 0x4
	lsls r0, 24
	lsrs r0, 24
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	ldr r0, =gTasks + 0x8
	adds r5, r1, r0
	mov r4, sp
	adds r4, 0x2
	mov r0, sp
	adds r1, r4, 0
	bl PlayerGetDestCoords
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r4, r2]
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 16
	lsrs r6, r0, 16
	ldrh r1, [r5, 0x8]
	movs r3, 0x8
	ldrsh r0, [r5, r3]
	adds r7, r4, 0
	cmp r0, 0
	beq _0809E51E
	subs r0, r1, 0x1
	strh r0, [r5, 0x8]
	lsls r0, 16
	cmp r0, 0
	bne _0809E51E
	movs r1, 0xA
	ldrsh r0, [r5, r1]
	movs r2, 0xC
	ldrsh r1, [r5, r2]
	bl sub_809E490
_0809E51E:
	ldrh r1, [r5, 0xE]
	movs r3, 0xE
	ldrsh r0, [r5, r3]
	cmp r0, 0
	beq _0809E53E
	subs r0, r1, 0x1
	strh r0, [r5, 0xE]
	lsls r0, 16
	cmp r0, 0
	bne _0809E53E
	movs r1, 0x10
	ldrsh r0, [r5, r1]
	movs r2, 0x12
	ldrsh r1, [r5, r2]
	bl sub_809E490
_0809E53E:
	lsls r0, r6, 24
	lsrs r6, r0, 24
	adds r0, r6, 0
	bl MetatileBehavior_IsCrackedFloorHole
	lsls r0, 24
	cmp r0, 0
	beq _0809E556
	ldr r0, =0x00004022
	movs r1, 0
	bl VarSet
_0809E556:
	mov r0, sp
	ldrh r2, [r0]
	movs r3, 0
	ldrsh r1, [r0, r3]
	movs r3, 0x4
	ldrsh r0, [r5, r3]
	cmp r1, r0
	bne _0809E572
	movs r0, 0
	ldrsh r1, [r7, r0]
	movs r3, 0x6
	ldrsh r0, [r5, r3]
	cmp r1, r0
	beq _0809E5D2
_0809E572:
	strh r2, [r5, 0x4]
	adds r4, r7, 0
	ldrh r0, [r4]
	strh r0, [r5, 0x6]
	adds r0, r6, 0
	bl MetatileBehavior_IsCrackedFloor
	lsls r0, 24
	cmp r0, 0
	beq _0809E5D2
	bl GetPlayerSpeed
	lsls r0, 16
	asrs r0, 16
	cmp r0, 0x4
	beq _0809E59A
	ldr r0, =0x00004022
	movs r1, 0
	bl VarSet
_0809E59A:
	movs r1, 0x8
	ldrsh r0, [r5, r1]
	cmp r0, 0
	bne _0809E5BC
	movs r0, 0x3
	strh r0, [r5, 0x8]
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r5, 0xA]
	ldrh r0, [r4]
	strh r0, [r5, 0xC]
	b _0809E5D2
	.pool
_0809E5BC:
	movs r2, 0xE
	ldrsh r0, [r5, r2]
	cmp r0, 0
	bne _0809E5D2
	movs r0, 0x3
	strh r0, [r5, 0xE]
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r5, 0x10]
	ldrh r0, [r7]
	strh r0, [r5, 0x12]
_0809E5D2:
	add sp, 0x4
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_809E4CC

	thumb_func_start sub_809E5DC
sub_809E5DC: @ 809E5DC
	push {r4,r5,lr}
	adds r3, r0, 0
	lsls r1, 16
	lsrs r5, r1, 16
	lsls r2, 16
	lsrs r4, r2, 16
	ldrh r0, [r3]
	subs r0, 0x1
	strh r0, [r3]
	lsls r0, 16
	cmp r0, 0
	bne _0809E5F8
	movs r2, 0xE8
	b _0809E60C
_0809E5F8:
	ldr r1, =gUnknown_085103FC
	movs r2, 0
	ldrsh r0, [r3, r2]
	cmp r0, 0
	bge _0809E604
	adds r0, 0x7
_0809E604:
	asrs r0, 3
	lsls r0, 1
	adds r0, r1
	ldrh r2, [r0]
_0809E60C:
	lsls r5, 16
	asrs r5, 16
	lsls r4, 16
	asrs r4, 16
	adds r0, r5, 0
	adds r1, r4, 0
	bl MapGridSetMetatileIdAt
	adds r0, r5, 0
	adds r1, r4, 0
	bl CurrentMapDrawMetatileAt
	adds r0, r5, 0
	adds r1, r4, 0
	movs r2, 0xE8
	bl MapGridSetMetatileIdAt
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_809E5DC

	thumb_func_start sub_809E638
sub_809E638: @ 809E638
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	sub sp, 0x4
	lsls r0, 24
	lsrs r0, 24
	lsls r1, r0, 2
	adds r1, r0
	lsls r1, 3
	ldr r0, =gTasks + 0x8
	adds r4, r1, r0
	mov r5, sp
	adds r5, 0x2
	mov r0, sp
	adds r1, r5, 0
	bl PlayerGetDestCoords
	ldr r0, =gSaveBlock1Ptr
	ldr r0, [r0]
	movs r1, 0x4
	ldrsb r1, [r0, r1]
	lsls r1, 8
	ldrb r0, [r0, 0x5]
	lsls r0, 24
	asrs r0, 24
	orrs r0, r1
	lsls r0, 16
	lsrs r7, r0, 16
	movs r0, 0x2
	ldrsh r1, [r4, r0]
	mov r8, r5
	cmp r1, 0
	beq _0809E688
	cmp r1, 0x1
	beq _0809E6B4
	b _0809E708
	.pool
_0809E688:
	strh r7, [r4]
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r4, 0x4]
	ldrh r0, [r5]
	strh r0, [r4, 0x6]
	movs r0, 0x1
	strh r0, [r4, 0x2]
	strh r1, [r4, 0x8]
	strh r1, [r4, 0xE]
	strh r1, [r4, 0x14]
	strh r1, [r4, 0x1A]
	b _0809E708
_0809E6A2:
	movs r0, 0x20
	strh r0, [r1]
	mov r0, sp
	ldrh r0, [r0]
	strh r0, [r1, 0x2]
	mov r2, r8
	ldrh r0, [r2]
	strh r0, [r1, 0x4]
	b _0809E708
_0809E6B4:
	mov r0, sp
	movs r3, 0x4
	ldrsh r1, [r4, r3]
	ldrh r2, [r0]
	movs r3, 0
	ldrsh r0, [r0, r3]
	cmp r1, r0
	bne _0809E6D0
	movs r0, 0x6
	ldrsh r1, [r4, r0]
	movs r3, 0
	ldrsh r0, [r5, r3]
	cmp r1, r0
	beq _0809E708
_0809E6D0:
	strh r2, [r4, 0x4]
	ldrh r0, [r5]
	strh r0, [r4, 0x6]
	mov r0, sp
	movs r1, 0
	ldrsh r0, [r0, r1]
	movs r2, 0
	ldrsh r1, [r5, r2]
	bl MapGridGetMetatileBehaviorAt
	lsls r0, 24
	lsrs r0, 24
	bl MetatileBehavior_IsMuddySlope
	lsls r0, 24
	cmp r0, 0
	beq _0809E708
	movs r6, 0x4
	adds r1, r4, 0
	adds r1, 0x8
_0809E6F8:
	movs r3, 0
	ldrsh r0, [r1, r3]
	cmp r0, 0
	beq _0809E6A2
	adds r1, 0x6
	adds r6, 0x3
	cmp r6, 0xD
	ble _0809E6F8
_0809E708:
	ldr r2, =gCamera
	ldrb r1, [r2]
	movs r0, 0x1
	ands r0, r1
	cmp r0, 0
	beq _0809E728
	movs r1, 0
	ldrsh r0, [r4, r1]
	cmp r7, r0
	beq _0809E728
	strh r7, [r4]
	ldrh r0, [r2, 0x4]
	ldrh r1, [r2, 0x8]
	b _0809E72C
	.pool
_0809E728:
	movs r0, 0
	movs r1, 0
_0809E72C:
	lsls r0, 16
	asrs r0, 16
	mov r8, r0
	lsls r0, r1, 16
	asrs r7, r0, 16
	adds r5, r4, 0
	adds r5, 0x8
	adds r4, r5, 0
	movs r6, 0x9
_0809E73E:
	movs r2, 0
	ldrsh r0, [r4, r2]
	cmp r0, 0
	beq _0809E762
	ldrh r0, [r4, 0x2]
	mov r3, r8
	subs r0, r3
	strh r0, [r4, 0x2]
	ldrh r0, [r4, 0x4]
	subs r0, r7
	strh r0, [r4, 0x4]
	movs r0, 0x2
	ldrsh r1, [r4, r0]
	movs r3, 0x4
	ldrsh r2, [r4, r3]
	adds r0, r5, 0
	bl sub_809E5DC
_0809E762:
	adds r4, 0x6
	adds r5, 0x6
	subs r6, 0x3
	cmp r6, 0
	bge _0809E73E
	add sp, 0x4
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end sub_809E638

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