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

	.syntax unified

	.text

	thumb_func_start mapconnection_get_mapheader
mapconnection_get_mapheader: @ 8087D44
	push {lr}
	ldrb r2, [r0, 0x8]
	ldrb r1, [r0, 0x9]
	adds r0, r2, 0
	bl get_mapheader_by_bank_and_number
	pop {r1}
	bx r1
	thumb_func_end mapconnection_get_mapheader

	thumb_func_start not_trainer_hill_battle_pyramid
not_trainer_hill_battle_pyramid: @ 8087D54
	push {r4,lr}
	ldr r4, =gUnknown_02037318
	adds r0, r4, 0
	bl mapheader_copy_mapdata_with_padding
	ldr r0, [r4, 0x4]
	bl sub_80E8EE0
	bl mapheader_run_script_with_tag_x1
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end not_trainer_hill_battle_pyramid

	thumb_func_start sub_8087D74
sub_8087D74: @ 8087D74
	push {r4,lr}
	ldr r4, =gUnknown_02037318
	adds r0, r4, 0
	bl mapheader_copy_mapdata_with_padding
	movs r0, 0
	bl sub_80E9238
	ldr r0, [r4, 0x4]
	bl sub_80E8EE0
	bl mapdata_from_sav2
	bl mapheader_run_script_with_tag_x1
	ldr r1, =gUnknown_03005DC0
	ldr r0, [r1]
	ldr r1, [r1, 0x4]
	bl UpdateTVScreensOnMap
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8087D74

	thumb_func_start battle_pyramid_map_load_related
battle_pyramid_map_load_related: @ 8087DAC
	push {r4,r5,lr}
	sub sp, 0x4
	adds r4, r0, 0
	lsls r4, 24
	lsrs r4, 24
	ldr r0, =0x03ff03ff
	str r0, [sp]
	ldr r5, =gUnknown_02032318
	ldr r2, =0x01001400
	mov r0, sp
	adds r1, r5, 0
	bl CpuFastSet
	adds r0, r5, 0
	adds r1, r4, 0
	bl sub_81AA078
	add sp, 0x4
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end battle_pyramid_map_load_related

	thumb_func_start trainer_hill_map_load_related
trainer_hill_map_load_related: @ 8087DE4
	push {r4,lr}
	sub sp, 0x4
	ldr r0, =0x03ff03ff
	str r0, [sp]
	ldr r4, =gUnknown_02032318
	ldr r2, =0x01001400
	mov r0, sp
	adds r1, r4, 0
	bl CpuFastSet
	adds r0, r4, 0
	bl sub_81D5FB4
	add sp, 0x4
	pop {r4}
	pop {r0}
	bx r0
	.pool
	thumb_func_end trainer_hill_map_load_related

	thumb_func_start mapheader_copy_mapdata_with_padding
@ void mapheader_copy_mapdata_with_padding(struct mapheader *mapHeader)
mapheader_copy_mapdata_with_padding: @ 8087E14
	push {r4-r6,lr}
	sub sp, 0x4
	adds r6, r0, 0
	ldr r5, [r6]
	ldr r0, =0x03ff03ff
	str r0, [sp]
	ldr r4, =gUnknown_02032318
	ldr r2, =0x01001400
	mov r0, sp
	adds r1, r4, 0
	bl CpuFastSet
	ldr r2, =gUnknown_03005DC0
	str r4, [r2, 0x8]
	ldr r1, [r5]
	adds r1, 0xF
	str r1, [r2]
	ldr r0, [r5, 0x4]
	adds r0, 0xE
	str r0, [r2, 0x4]
	muls r1, r0
	movs r0, 0xA0
	lsls r0, 6
	cmp r1, r0
	bgt _08087E56
	ldr r0, [r5, 0xC]
	ldrh r1, [r5]
	ldrh r2, [r5, 0x4]
	bl map_copy_with_padding
	adds r0, r6, 0
	bl mapheader_copy_mapdata_of_adjacent_maps
_08087E56:
	add sp, 0x4
	pop {r4-r6}
	pop {r0}
	bx r0
	.pool
	thumb_func_end mapheader_copy_mapdata_with_padding

	thumb_func_start map_copy_with_padding
@ int map_copy_with_padding(void *src)
map_copy_with_padding: @ 8087E70
	push {r4-r7,lr}
	mov r7, r9
	mov r6, r8
	push {r6,r7}
	adds r7, r0, 0
	lsls r1, 16
	lsrs r1, 16
	mov r8, r1
	lsls r2, 16
	lsrs r2, 16
	ldr r0, =gUnknown_03005DC0
	ldr r4, [r0, 0x8]
	ldr r1, [r0]
	lsls r0, r1, 3
	subs r0, r1
	lsls r0, 1
	adds r0, 0xE
	adds r4, r0
	cmp r2, 0
	beq _08087EB8
	mov r0, r8
	lsls r6, r0, 1
	adds r5, r2, 0
	movs r0, 0x1E
	adds r0, r6
	mov r9, r0
_08087EA4:
	adds r0, r7, 0
	adds r1, r4, 0
	mov r2, r8
	bl CpuSet
	add r4, r9
	adds r7, r6
	subs r5, 0x1
	cmp r5, 0
	bne _08087EA4
_08087EB8:
	pop {r3,r4}
	mov r8, r3
	mov r9, r4
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end map_copy_with_padding

	thumb_func_start mapheader_copy_mapdata_of_adjacent_maps
@ void mapheader_copy_mapdata_of_adjacent_maps(struct mapheader *mapHeader)
mapheader_copy_mapdata_of_adjacent_maps: @ 8087EC8
	push {r4-r7,lr}
	adds r6, r0, 0
	ldr r0, [r6, 0xC]
	cmp r0, 0
	beq _08087F4C
	ldr r1, [r0]
	ldr r5, [r0, 0x4]
	ldr r2, =gUnknown_02037340
	ldr r0, =gUnknown_08486EF8
	ldr r0, [r0]
	str r0, [r2]
	cmp r1, 0
	ble _08087F4C
	adds r4, r2, 0
	adds r7, r1, 0
_08087EE6:
	adds r0, r5, 0
	bl mapconnection_get_mapheader
	adds r1, r0, 0
	ldr r2, [r5, 0x4]
	ldrb r0, [r5]
	cmp r0, 0x2
	beq _08087F1E
	cmp r0, 0x2
	bgt _08087F08
	cmp r0, 0x1
	beq _08087F12
	b _08087F44
	.pool
_08087F08:
	cmp r0, 0x3
	beq _08087F2A
	cmp r0, 0x4
	beq _08087F36
	b _08087F44
_08087F12:
	adds r0, r6, 0
	bl sub_8087FB8
	ldrb r0, [r4]
	movs r1, 0x1
	b _08087F40
_08087F1E:
	adds r0, r6, 0
	bl sub_8088020
	ldrb r0, [r4]
	movs r1, 0x2
	b _08087F40
_08087F2A:
	adds r0, r6, 0
	bl sub_8088080
	ldrb r0, [r4]
	movs r1, 0x4
	b _08087F40
_08087F36:
	adds r0, r6, 0
	bl sub_80880E0
	ldrb r0, [r4]
	movs r1, 0x8
_08087F40:
	orrs r0, r1
	strb r0, [r4]
_08087F44:
	subs r7, 0x1
	adds r5, 0xC
	cmp r7, 0
	bne _08087EE6
_08087F4C:
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end mapheader_copy_mapdata_of_adjacent_maps

	thumb_func_start sub_8087F54
sub_8087F54: @ 8087F54
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	ldr r5, [sp, 0x18]
	ldr r4, [r2]
	ldr r7, [r4]
	adds r2, r7, 0
	muls r2, r5
	adds r2, r3
	lsls r2, 1
	ldr r3, [r4, 0xC]
	adds r6, r3, r2
	ldr r3, =gUnknown_03005DC0
	ldr r2, [r3]
	muls r1, r2
	adds r1, r0
	lsls r1, 1
	ldr r0, [r3, 0x8]
	adds r5, r0, r1
	ldr r0, [sp, 0x20]
	cmp r0, 0
	ble _08087FA6
	adds r4, r0, 0
	ldr r3, =0x001fffff
	mov r8, r3
_08087F86:
	adds r0, r6, 0
	adds r1, r5, 0
	ldr r2, [sp, 0x1C]
	mov r3, r8
	ands r2, r3
	bl CpuSet
	ldr r0, =gUnknown_03005DC0
	ldr r0, [r0]
	lsls r0, 1
	adds r5, r0
	lsls r0, r7, 1
	adds r6, r0
	subs r4, 0x1
	cmp r4, 0
	bne _08087F86
_08087FA6:
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8087F54

	thumb_func_start sub_8087FB8
sub_8087FB8: @ 8087FB8
	push {r4-r7,lr}
	sub sp, 0xC
	adds r3, r0, 0
	adds r5, r1, 0
	cmp r5, 0
	beq _08088012
	ldr r0, [r5]
	ldr r4, [r0]
	adds r2, 0x7
	ldr r0, [r3]
	ldr r0, [r0, 0x4]
	adds r7, r0, 0x7
	cmp r2, 0
	bge _08087FEC
	negs r6, r2
	adds r2, r4
	ldr r0, =gUnknown_03005DC0
	ldr r3, [r0]
	cmp r2, r3
	bge _08087FE2
	adds r3, r2, 0
_08087FE2:
	movs r2, 0
	b _08087FFC
	.pool
_08087FEC:
	movs r6, 0
	adds r0, r2, r4
	ldr r1, =gUnknown_03005DC0
	ldr r1, [r1]
	subs r3, r1, r2
	cmp r0, r1
	bge _08087FFC
	adds r3, r4, 0
_08087FFC:
	movs r0, 0
	str r0, [sp]
	str r3, [sp, 0x4]
	movs r0, 0x7
	str r0, [sp, 0x8]
	adds r0, r2, 0
	adds r1, r7, 0
	adds r2, r5, 0
	adds r3, r6, 0
	bl sub_8087F54
_08088012:
	add sp, 0xC
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8087FB8

	thumb_func_start sub_8088020
sub_8088020: @ 8088020
	push {r4-r7,lr}
	sub sp, 0xC
	adds r5, r1, 0
	cmp r5, 0
	beq _08088074
	ldr r0, [r5]
	ldr r4, [r0]
	ldr r0, [r0, 0x4]
	adds r2, 0x7
	subs r7, r0, 0x7
	cmp r2, 0
	bge _08088050
	negs r6, r2
	adds r2, r4
	ldr r0, =gUnknown_03005DC0
	ldr r3, [r0]
	cmp r2, r3
	bge _08088046
	adds r3, r2, 0
_08088046:
	movs r2, 0
	b _08088060
	.pool
_08088050:
	movs r6, 0
	adds r0, r2, r4
	ldr r1, =gUnknown_03005DC0
	ldr r1, [r1]
	subs r3, r1, r2
	cmp r0, r1
	bge _08088060
	adds r3, r4, 0
_08088060:
	str r7, [sp]
	str r3, [sp, 0x4]
	movs r0, 0x7
	str r0, [sp, 0x8]
	adds r0, r2, 0
	movs r1, 0
	adds r2, r5, 0
	adds r3, r6, 0
	bl sub_8087F54
_08088074:
	add sp, 0xC
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8088020

	thumb_func_start sub_8088080
sub_8088080: @ 8088080
	push {r4-r7,lr}
	sub sp, 0xC
	adds r5, r1, 0
	cmp r5, 0
	beq _080880D4
	ldr r0, [r5]
	ldr r1, [r0]
	ldr r4, [r0, 0x4]
	adds r2, 0x7
	subs r7, r1, 0x7
	cmp r2, 0
	bge _080880B0
	negs r6, r2
	adds r1, r2, r4
	ldr r0, =gUnknown_03005DC0
	ldr r3, [r0, 0x4]
	cmp r1, r3
	bge _080880A6
	adds r3, r1, 0
_080880A6:
	movs r2, 0
	b _080880C0
	.pool
_080880B0:
	movs r6, 0
	adds r0, r2, r4
	ldr r1, =gUnknown_03005DC0
	ldr r1, [r1, 0x4]
	subs r3, r1, r2
	cmp r0, r1
	bge _080880C0
	adds r3, r4, 0
_080880C0:
	str r6, [sp]
	movs r0, 0x7
	str r0, [sp, 0x4]
	str r3, [sp, 0x8]
	movs r0, 0
	adds r1, r2, 0
	adds r2, r5, 0
	adds r3, r7, 0
	bl sub_8087F54
_080880D4:
	add sp, 0xC
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8088080

	thumb_func_start sub_80880E0
sub_80880E0: @ 80880E0
	push {r4-r7,lr}
	sub sp, 0xC
	adds r3, r0, 0
	adds r5, r1, 0
	cmp r5, 0
	beq _08088138
	ldr r0, [r5]
	ldr r4, [r0, 0x4]
	ldr r0, [r3]
	ldr r0, [r0]
	adds r7, r0, 0x7
	adds r2, 0x7
	cmp r2, 0
	bge _08088114
	negs r6, r2
	adds r1, r2, r4
	ldr r0, =gUnknown_03005DC0
	ldr r3, [r0, 0x4]
	cmp r1, r3
	bge _0808810A
	adds r3, r1, 0
_0808810A:
	movs r2, 0
	b _08088124
	.pool
_08088114:
	movs r6, 0
	adds r0, r2, r4
	ldr r1, =gUnknown_03005DC0
	ldr r1, [r1, 0x4]
	subs r3, r1, r2
	cmp r0, r1
	bge _08088124
	adds r3, r4, 0
_08088124:
	str r6, [sp]
	movs r0, 0x8
	str r0, [sp, 0x4]
	str r3, [sp, 0x8]
	adds r0, r7, 0
	adds r1, r2, 0
	adds r2, r5, 0
	movs r3, 0
	bl sub_8087F54
_08088138:
	add sp, 0xC
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80880E0

	thumb_func_start MapGridGetZCoordAt
@ u8 MapGridGetZCoordAt(s32 x, s32 y)
MapGridGetZCoordAt: @ 8088144
	push {r4,lr}
	adds r2, r0, 0
	adds r4, r1, 0
	cmp r2, 0
	blt _08088174
	ldr r1, =gUnknown_03005DC0
	ldr r3, [r1]
	cmp r2, r3
	bge _08088174
	cmp r4, 0
	blt _08088174
	ldr r0, [r1, 0x4]
	cmp r4, r0
	bge _08088174
	adds r0, r3, 0
	muls r0, r4
	adds r0, r2, r0
	ldr r1, [r1, 0x8]
	lsls r0, 1
	adds r0, r1
	ldrh r1, [r0]
	b _08088196
	.pool
_08088174:
	ldr r0, =gUnknown_02037318
	ldr r3, [r0]
	adds r1, r2, 0x1
	movs r2, 0x1
	ands r1, r2
	adds r0, r4, 0x1
	ands r0, r2
	lsls r0, 1
	adds r1, r0
	ldr r0, [r3, 0x8]
	lsls r1, 1
	adds r1, r0
	ldrh r1, [r1]
	movs r2, 0xC0
	lsls r2, 4
	adds r0, r2, 0
	orrs r1, r0
_08088196:
	ldr r0, =0x000003ff
	cmp r1, r0
	beq _080881A8
	lsrs r0, r1, 12
	b _080881AA
	.pool
_080881A8:
	movs r0, 0
_080881AA:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end MapGridGetZCoordAt

	thumb_func_start MapGridIsImpassableAt
@ u8 MapGridIsImpassableAt(s32 x, s32 y)
MapGridIsImpassableAt: @ 80881B0
	push {r4,lr}
	adds r2, r0, 0
	adds r4, r1, 0
	cmp r2, 0
	blt _080881E0
	ldr r1, =gUnknown_03005DC0
	ldr r3, [r1]
	cmp r2, r3
	bge _080881E0
	cmp r4, 0
	blt _080881E0
	ldr r0, [r1, 0x4]
	cmp r4, r0
	bge _080881E0
	adds r0, r3, 0
	muls r0, r4
	adds r0, r2, r0
	ldr r1, [r1, 0x8]
	lsls r0, 1
	adds r0, r1
	ldrh r1, [r0]
	b _08088202
	.pool
_080881E0:
	ldr r0, =gUnknown_02037318
	ldr r3, [r0]
	adds r1, r2, 0x1
	movs r2, 0x1
	ands r1, r2
	adds r0, r4, 0x1
	ands r0, r2
	lsls r0, 1
	adds r1, r0
	ldr r0, [r3, 0x8]
	lsls r1, 1
	adds r1, r0
	ldrh r1, [r1]
	movs r2, 0xC0
	lsls r2, 4
	adds r0, r2, 0
	orrs r1, r0
_08088202:
	ldr r0, =0x000003ff
	cmp r1, r0
	beq _0808821C
	movs r0, 0xC0
	lsls r0, 4
	ands r1, r0
	lsrs r0, r1, 10
	b _0808821E
	.pool
_0808821C:
	movs r0, 0x1
_0808821E:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end MapGridIsImpassableAt

	thumb_func_start MapGridGetMetatileIdAt
@ u16 MapGridGetMetatileIdAt(s32 x, s32 y)
MapGridGetMetatileIdAt: @ 8088224
	push {r4-r6,lr}
	adds r5, r0, 0
	adds r6, r1, 0
	cmp r5, 0
	blt _08088254
	ldr r1, =gUnknown_03005DC0
	ldr r2, [r1]
	cmp r5, r2
	bge _08088254
	cmp r6, 0
	blt _08088254
	ldr r0, [r1, 0x4]
	cmp r6, r0
	bge _08088254
	adds r0, r2, 0
	muls r0, r6
	adds r0, r5, r0
	ldr r1, [r1, 0x8]
	lsls r0, 1
	adds r0, r1
	ldrh r4, [r0]
	b _08088278
	.pool
_08088254:
	ldr r0, =gUnknown_02037318
	ldr r3, [r0]
	adds r1, r5, 0x1
	movs r2, 0x1
	ands r1, r2
	adds r0, r6, 0x1
	ands r0, r2
	lsls r0, 1
	adds r1, r0
	ldr r0, [r3, 0x8]
	lsls r1, 1
	adds r1, r0
	ldrh r1, [r1]
	movs r2, 0xC0
	lsls r2, 4
	adds r0, r2, 0
	adds r4, r0, 0
	orrs r4, r1
_08088278:
	ldr r0, =0x000003ff
	cmp r4, r0
	beq _0808828C
	ands r4, r0
	adds r0, r4, 0
	b _080882B0
	.pool
_0808828C:
	ldr r0, =gUnknown_02037318
	ldr r3, [r0]
	adds r1, r5, 0x1
	movs r2, 0x1
	ands r1, r2
	adds r0, r6, 0x1
	ands r0, r2
	lsls r0, 1
	adds r1, r0
	ldr r0, [r3, 0x8]
	lsls r1, 1
	adds r1, r0
	ldrh r0, [r1]
	movs r2, 0xC0
	lsls r2, 4
	adds r1, r2, 0
	orrs r0, r1
	ands r0, r4
_080882B0:
	pop {r4-r6}
	pop {r1}
	bx r1
	.pool
	thumb_func_end MapGridGetMetatileIdAt

	thumb_func_start MapGridGetMetatileBehaviorAt
@ u8 MapGridGetMetatileBehaviorAt(s32 x, s32 y)
MapGridGetMetatileBehaviorAt: @ 80882BC
	push {lr}
	bl MapGridGetMetatileIdAt
	lsls r0, 16
	lsrs r0, 16
	bl GetBehaviorByMetatileId
	adds r1, r0, 0
	movs r0, 0xFF
	ands r0, r1
	pop {r1}
	bx r1
	thumb_func_end MapGridGetMetatileBehaviorAt

	thumb_func_start MapGridGetMetatileLayerTypeAt
@ u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y)
MapGridGetMetatileLayerTypeAt: @ 80882D4
	push {lr}
	bl MapGridGetMetatileIdAt
	lsls r0, 16
	lsrs r0, 16
	bl GetBehaviorByMetatileId
	adds r1, r0, 0
	movs r0, 0xF0
	lsls r0, 8
	ands r0, r1
	lsrs r0, 12
	pop {r1}
	bx r1
	thumb_func_end MapGridGetMetatileLayerTypeAt

	thumb_func_start MapGridSetMetatileIdAt
@ void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatileId)
MapGridSetMetatileIdAt: @ 80882F0
	push {r4,r5,lr}
	adds r3, r0, 0
	lsls r2, 16
	lsrs r5, r2, 16
	cmp r3, 0
	blt _08088328
	ldr r2, =gUnknown_03005DC0
	ldr r4, [r2]
	cmp r3, r4
	bge _08088328
	cmp r1, 0
	blt _08088328
	ldr r0, [r2, 0x4]
	cmp r1, r0
	bge _08088328
	muls r1, r4
	adds r1, r3, r1
	ldr r0, [r2, 0x8]
	lsls r1, 1
	adds r1, r0
	ldrh r0, [r1]
	movs r2, 0xF0
	lsls r2, 8
	ands r2, r0
	ldr r0, =0x00000fff
	ands r0, r5
	orrs r2, r0
	strh r2, [r1]
_08088328:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end MapGridSetMetatileIdAt

	thumb_func_start MapGridSetMetatileEntryAt
@ void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatileEntry)
MapGridSetMetatileEntryAt: @ 8088338
	push {r4,r5,lr}
	adds r3, r0, 0
	lsls r2, 16
	lsrs r5, r2, 16
	cmp r3, 0
	blt _08088364
	ldr r2, =gUnknown_03005DC0
	ldr r4, [r2]
	cmp r3, r4
	bge _08088364
	cmp r1, 0
	blt _08088364
	ldr r0, [r2, 0x4]
	cmp r1, r0
	bge _08088364
	adds r0, r4, 0
	muls r0, r1
	adds r0, r3, r0
	ldr r1, [r2, 0x8]
	lsls r0, 1
	adds r0, r1
	strh r5, [r0]
_08088364:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end MapGridSetMetatileEntryAt

	thumb_func_start GetBehaviorByMetatileId
@ u16 GetBehaviorByMetatileId(u16 metatileId)
GetBehaviorByMetatileId: @ 8088370
	push {lr}
	lsls r0, 16
	lsrs r2, r0, 16
	adds r3, r2, 0
	ldr r0, =0x000001ff
	cmp r2, r0
	bhi _08088394
	ldr r0, =gUnknown_02037318
	ldr r0, [r0]
	ldr r0, [r0, 0x10]
	ldr r1, [r0, 0x10]
	lsls r0, r2, 1
	b _080883B2
	.pool
_08088394:
	ldr r0, =0x000003ff
	cmp r2, r0
	bls _080883A4
	movs r0, 0xFF
	b _080883B6
	.pool
_080883A4:
	ldr r0, =gUnknown_02037318
	ldr r0, [r0]
	ldr r0, [r0, 0x14]
	ldr r1, [r0, 0x10]
	lsls r0, r3, 1
	adds r0, r1
	ldr r1, =0xfffffc00
_080883B2:
	adds r0, r1
	ldrh r0, [r0]
_080883B6:
	pop {r1}
	bx r1
	.pool
	thumb_func_end GetBehaviorByMetatileId

	thumb_func_start save_serialize_map
save_serialize_map: @ 80883C4
	push {r4-r7,lr}
	mov r7, r9
	mov r6, r8
	push {r6,r7}
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	adds r4, r1, 0
	adds r4, 0x34
	ldr r0, =gUnknown_03005DC0
	ldr r0, [r0]
	mov r8, r0
	movs r0, 0
	ldrsh r6, [r1, r0]
	movs r2, 0x2
	ldrsh r0, [r1, r2]
	adds r1, r0, 0
	adds r1, 0xE
	cmp r0, r1
	bge _08088420
	mov r12, r1
	ldr r1, =gUnknown_02032318
	mov r9, r1
	lsls r7, r6, 1
_080883F2:
	adds r1, r6, 0
	adds r3, r1, 0
	adds r3, 0xF
	adds r5, r0, 0x1
	cmp r1, r3
	bge _0808841A
	mov r2, r8
	muls r2, r0
	adds r0, r2, 0
	lsls r0, 1
	add r0, r9
	adds r2, r7, r0
	subs r1, r3, r1
_0808840C:
	ldrh r0, [r2]
	strh r0, [r4]
	adds r4, 0x2
	adds r2, 0x2
	subs r1, 0x1
	cmp r1, 0
	bne _0808840C
_0808841A:
	adds r0, r5, 0
	cmp r0, r12
	blt _080883F2
_08088420:
	pop {r3,r4}
	mov r8, r3
	mov r9, r4
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end save_serialize_map

	thumb_func_start sub_8088438
sub_8088438: @ 8088438
	push {r4,lr}
	movs r2, 0
	movs r1, 0
	ldr r0, =gSaveBlock1Ptr
	ldr r0, [r0]
	adds r3, r0, 0
	adds r3, 0x34
	ldr r4, =0x000001ff
_08088448:
	lsls r0, r1, 1
	adds r0, r3, r0
	ldrh r0, [r0]
	orrs r2, r0
	adds r0, r1, 0x1
	lsls r0, 16
	lsrs r1, r0, 16
	cmp r1, r4
	bls _08088448
	cmp r2, 0
	beq _0808846C
	movs r0, 0
	b _0808846E
	.pool
_0808846C:
	movs r0, 0x1
_0808846E:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end sub_8088438

	thumb_func_start sav2_mapdata_clear
sav2_mapdata_clear: @ 8088474
	push {lr}
	sub sp, 0x4
	mov r1, sp
	movs r0, 0
	strh r0, [r1]
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	adds r1, 0x34
	ldr r2, =0x01000100
	mov r0, sp
	bl CpuSet
	add sp, 0x4
	pop {r0}
	bx r0
	.pool
	thumb_func_end sav2_mapdata_clear

	thumb_func_start mapdata_from_sav2
mapdata_from_sav2: @ 808849C
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0x10
	ldr r4, =gSaveBlock1Ptr
	ldr r0, [r4]
	adds r7, r0, 0
	adds r7, 0x34
	bl sub_8088438
	cmp r0, 0
	bne _080885AC
	ldr r0, =gUnknown_03005DC0
	ldr r0, [r0]
	str r0, [sp]
	ldr r0, [r4]
	movs r2, 0
	ldrsh r1, [r0, r2]
	mov r10, r1
	movs r2, 0x2
	ldrsh r1, [r0, r2]
	mov r8, r1
	mov r6, r8
	adds r0, r6, 0
	adds r0, 0xE
	cmp r6, r0
	bge _0808855A
_080884D6:
	cmp r6, r8
	bne _080884EC
	cmp r6, 0
	beq _080884EC
	movs r0, 0
	mov r9, r0
	b _08088508
	.pool
_080884EC:
	mov r0, r8
	adds r0, 0xD
	movs r1, 0xFF
	mov r9, r1
	cmp r6, r0
	bne _08088508
	ldr r0, =gUnknown_02037318
	ldr r0, [r0]
	ldr r0, [r0, 0x4]
	subs r0, 0x1
	cmp r6, r0
	beq _08088508
	movs r2, 0x1
	mov r9, r2
_08088508:
	mov r5, r10
	adds r0, r5, 0
	adds r0, 0xF
	mov r1, r8
	adds r1, 0xE
	str r1, [sp, 0x8]
	adds r2, r6, 0x1
	str r2, [sp, 0x4]
	cmp r5, r0
	bge _08088552
	ldr r0, [sp]
	lsls r3, r0, 16
_08088520:
	ldr r1, [sp]
	adds r0, r1, 0
	muls r0, r6
	adds r0, r5, r0
	lsls r0, 1
	ldr r1, =gUnknown_02032318
	adds r4, r0, r1
	adds r0, r4, 0
	lsrs r1, r3, 16
	mov r2, r9
	str r3, [sp, 0xC]
	bl sub_8088BF0
	lsls r0, 24
	ldr r3, [sp, 0xC]
	cmp r0, 0
	bne _08088546
	ldrh r0, [r7]
	strh r0, [r4]
_08088546:
	adds r7, 0x2
	adds r5, 0x1
	mov r0, r10
	adds r0, 0xF
	cmp r5, r0
	blt _08088520
_08088552:
	ldr r6, [sp, 0x4]
	ldr r2, [sp, 0x8]
	cmp r6, r2
	blt _080884D6
_0808855A:
	mov r5, r10
	adds r0, r5, 0
	adds r0, 0xF
	cmp r5, r0
	bge _080885A8
	mov r0, r8
	subs r0, 0x1
	lsls r0, 16
	mov r9, r0
	lsls r4, r5, 16
	mov r0, r8
	adds r0, 0xD
	lsls r7, r0, 16
_08088574:
	mov r0, r8
	cmp r0, 0
	beq _08088584
	asrs r0, r4, 16
	mov r2, r9
	asrs r1, r2, 16
	bl sub_80D423C
_08088584:
	ldr r0, =gUnknown_02037318
	ldr r0, [r0]
	ldr r0, [r0, 0x4]
	subs r0, 0x1
	cmp r6, r0
	bge _08088598
	asrs r0, r4, 16
	asrs r1, r7, 16
	bl sub_80D42B8
_08088598:
	movs r0, 0x80
	lsls r0, 9
	adds r4, r0
	adds r5, 0x1
	mov r0, r10
	adds r0, 0xF
	cmp r5, r0
	blt _08088574
_080885A8:
	bl sav2_mapdata_clear
_080885AC:
	add sp, 0x10
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end mapdata_from_sav2

	thumb_func_start sub_80885C4
sub_80885C4: @ 80885C4
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	sub sp, 0xC
	lsls r0, 24
	lsrs r3, r0, 24
	adds r2, r3, 0
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	adds r0, r1, 0
	adds r0, 0x34
	str r0, [sp, 0x4]
	ldr r0, =gUnknown_03005DC0
	ldr r0, [r0]
	str r0, [sp]
	movs r4, 0
	mov r9, r4
	mov r8, r4
	movs r0, 0
	ldrsh r6, [r1, r0]
	str r6, [sp, 0x8]
	movs r4, 0x2
	ldrsh r5, [r1, r4]
	movs r7, 0xF
	movs r6, 0xE
	mov r12, r6
	cmp r3, 0x2
	beq _0808861E
	cmp r3, 0x2
	bgt _08088614
	cmp r3, 0x1
	beq _08088626
	b _0808863E
	.pool
_08088614:
	cmp r2, 0x3
	beq _08088630
	cmp r2, 0x4
	beq _08088638
	b _0808863E
_0808861E:
	adds r5, 0x1
	movs r0, 0xD
	mov r12, r0
	b _0808863E
_08088626:
	movs r1, 0x1
	mov r8, r1
	movs r3, 0xD
	mov r12, r3
	b _0808863E
_08088630:
	ldr r4, [sp, 0x8]
	adds r4, 0x1
	str r4, [sp, 0x8]
	b _0808863C
_08088638:
	movs r6, 0x1
	mov r9, r6
_0808863C:
	movs r7, 0xE
_0808863E:
	movs r1, 0
	cmp r1, r12
	bge _08088682
	ldr r0, =gUnknown_02032318
	mov r10, r0
_08088648:
	adds r4, r1, 0x1
	cmp r7, 0
	beq _0808867C
	adds r0, r1, r5
	ldr r3, [sp]
	adds r2, r3, 0
	muls r2, r0
	add r1, r8
	lsls r0, r1, 4
	subs r0, r1
	add r0, r9
	ldr r6, [sp, 0x8]
	adds r2, r6, r2
	adds r3, r7, 0
	lsls r2, 1
	add r2, r10
	lsls r0, 1
	ldr r6, [sp, 0x4]
	adds r1, r0, r6
_0808866E:
	ldrh r0, [r1]
	strh r0, [r2]
	adds r1, 0x2
	adds r2, 0x2
	subs r3, 0x1
	cmp r3, 0
	bne _0808866E
_0808867C:
	adds r1, r4, 0
	cmp r1, r12
	blt _08088648
_08088682:
	bl sav2_mapdata_clear
	add sp, 0xC
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80885C4

	thumb_func_start GetMapBorderIdAt
@ u32 GetMapBorderIdAt(s32 x, s32 y)
GetMapBorderIdAt: @ 808869C
	push {r4,r5,lr}
	adds r4, r0, 0
	adds r5, r1, 0
	cmp r4, 0
	blt _080886D8
	ldr r1, =gUnknown_03005DC0
	ldr r2, [r1]
	cmp r4, r2
	bge _080886D8
	cmp r5, 0
	blt _080886D8
	ldr r0, [r1, 0x4]
	cmp r5, r0
	bge _080886D8
	adds r0, r2, 0
	muls r0, r5
	adds r0, r4, r0
	ldr r1, [r1, 0x8]
	lsls r0, 1
	adds r0, r1
	ldrh r1, [r0]
	ldr r0, =0x000003ff
	cmp r1, r0
	beq _08088770
	b _08088700
	.pool
_080886D8:
	ldr r0, =gUnknown_02037318
	ldr r3, [r0]
	adds r1, r4, 0x1
	movs r2, 0x1
	ands r1, r2
	adds r0, r5, 0x1
	ands r0, r2
	lsls r0, 1
	adds r1, r0
	ldr r0, [r3, 0x8]
	lsls r1, 1
	adds r1, r0
	ldrh r1, [r1]
	movs r2, 0xC0
	lsls r2, 4
	adds r0, r2, 0
	orrs r0, r1
	ldr r1, =0x000003ff
	cmp r0, r1
	beq _08088770
_08088700:
	ldr r1, =gUnknown_03005DC0
	ldr r0, [r1]
	subs r0, 0x8
	cmp r4, r0
	blt _0808872C
	ldr r0, =gUnknown_02037340
	ldrb r1, [r0]
	movs r0, 0x8
	ands r0, r1
	cmp r0, 0
	beq _08088770
	movs r0, 0x4
	b _08088782
	.pool
_0808872C:
	cmp r4, 0x6
	bgt _08088744
	ldr r0, =gUnknown_02037340
	ldrb r1, [r0]
	movs r0, 0x4
	ands r0, r1
	cmp r0, 0
	beq _08088770
	movs r0, 0x3
	b _08088782
	.pool
_08088744:
	ldr r0, [r1, 0x4]
	subs r0, 0x7
	cmp r5, r0
	blt _08088760
	ldr r0, =gUnknown_02037340
	ldrb r1, [r0]
	movs r0, 0x1
	ands r0, r1
	cmp r0, 0
	beq _08088770
	movs r0, 0x1
	b _08088782
	.pool
_08088760:
	cmp r5, 0x6
	bgt _08088780
	ldr r0, =gUnknown_02037340
	ldrb r1, [r0]
	movs r0, 0x2
	ands r0, r1
	cmp r0, 0
	bne _0808877C
_08088770:
	movs r0, 0x1
	negs r0, r0
	b _08088782
	.pool
_0808877C:
	movs r0, 0x2
	b _08088782
_08088780:
	movs r0, 0
_08088782:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end GetMapBorderIdAt

	thumb_func_start GetPostCameraMoveMapBorderId
@ u32 GetPostCameraMoveMapBorderId(s32 deltaX, s32 deltaY)
GetPostCameraMoveMapBorderId: @ 8088788
	push {r4,lr}
	adds r3, r1, 0
	ldr r1, =gSaveBlock1Ptr
	ldr r1, [r1]
	movs r4, 0
	ldrsh r2, [r1, r4]
	adds r0, 0x7
	adds r2, r0
	movs r0, 0x2
	ldrsh r1, [r1, r0]
	adds r3, 0x7
	adds r1, r3
	adds r0, r2, 0
	bl GetMapBorderIdAt
	pop {r4}
	pop {r1}
	bx r1
	.pool
	thumb_func_end GetPostCameraMoveMapBorderId

	thumb_func_start CanCameraMoveInDirection
@ bool32 CanCameraMoveInDirection(u8 direction)
CanCameraMoveInDirection: @ 80887B0
	push {r4,r5,lr}
	ldr r1, =gSaveBlock1Ptr
	ldr r4, [r1]
	movs r1, 0
	ldrsh r3, [r4, r1]
	ldr r2, =gUnknown_08339D64
	lsls r0, 3
	adds r1, r0, r2
	ldr r1, [r1]
	adds r1, 0x7
	adds r3, r1
	movs r5, 0x2
	ldrsh r1, [r4, r5]
	adds r2, 0x4
	adds r0, r2
	ldr r0, [r0]
	adds r0, 0x7
	adds r1, r0
	adds r0, r3, 0
	bl GetMapBorderIdAt
	movs r1, 0x1
	negs r1, r1
	cmp r0, r1
	beq _080887F0
	movs r0, 0x1
	b _080887F2
	.pool
_080887F0:
	movs r0, 0
_080887F2:
	pop {r4,r5}
	pop {r1}
	bx r1
	thumb_func_end CanCameraMoveInDirection

	thumb_func_start sub_80887F8
sub_80887F8: @ 80887F8
	push {r4-r7,lr}
	adds r5, r0, 0
	adds r4, r1, 0
	adds r6, r2, 0
	adds r7, r3, 0
	bl mapconnection_get_mapheader
	adds r3, r0, 0
	cmp r4, 0x2
	beq _08088860
	cmp r4, 0x2
	bgt _08088816
	cmp r4, 0x1
	beq _0808884C
	b _08088872
_08088816:
	cmp r4, 0x3
	beq _08088834
	cmp r4, 0x4
	bne _08088872
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	negs r0, r6
	strh r0, [r1]
	ldr r2, [r5, 0x4]
	ldrh r0, [r1, 0x2]
	subs r0, r2
	b _08088870
	.pool
_08088834:
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	ldr r0, [r3]
	ldr r0, [r0]
	strh r0, [r1]
	ldr r2, [r5, 0x4]
	ldrh r0, [r1, 0x2]
	subs r0, r2
	b _08088870
	.pool
_0808884C:
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	ldr r2, [r5, 0x4]
	ldrh r0, [r1]
	subs r0, r2
	strh r0, [r1]
	negs r0, r7
	b _08088870
	.pool
_08088860:
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	ldr r2, [r5, 0x4]
	ldrh r0, [r1]
	subs r0, r2
	strh r0, [r1]
	ldr r0, [r3]
	ldr r0, [r0, 0x4]
_08088870:
	strh r0, [r1, 0x2]
_08088872:
	pop {r4-r7}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_80887F8

	thumb_func_start CameraMove
@ u8 CameraMove(s32 deltaX, s32 deltaY)
CameraMove: @ 808887C
	push {r4-r7,lr}
	mov r7, r10
	mov r6, r9
	mov r5, r8
	push {r5-r7}
	mov r10, r0
	mov r9, r1
	ldr r1, =gUnknown_02037334
	ldrb r0, [r1]
	movs r1, 0x2
	negs r1, r1
	ands r1, r0
	ldr r2, =gUnknown_02037334
	strb r1, [r2]
	mov r0, r10
	mov r1, r9
	bl GetPostCameraMoveMapBorderId
	adds r7, r0, 0
	adds r0, r7, 0x1
	cmp r0, 0x1
	bhi _080888C4
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	ldrh r0, [r1]
	add r0, r10
	strh r0, [r1]
	ldrh r0, [r1, 0x2]
	add r0, r9
	strh r0, [r1, 0x2]
	b _08088932
	.pool
_080888C4:
	bl save_serialize_map
	bl sub_81BE72C
	ldr r1, =gSaveBlock1Ptr
	ldr r0, [r1]
	movs r2, 0
	ldrsh r5, [r0, r2]
	movs r1, 0x2
	ldrsh r6, [r0, r1]
	lsls r2, r7, 24
	lsrs r2, 24
	mov r8, r2
	mov r0, r8
	adds r1, r5, 0
	adds r2, r6, 0
	bl sub_8088950
	adds r4, r0, 0
	adds r1, r7, 0
	mov r2, r10
	mov r3, r9
	bl sub_80887F8
	ldrb r0, [r4, 0x8]
	ldrb r1, [r4, 0x9]
	bl mliX_load_map
	ldr r1, =gUnknown_02037334
	ldrb r0, [r1]
	movs r1, 0x1
	orrs r0, r1
	ldr r2, =gUnknown_02037334
	strb r0, [r2]
	ldr r0, =gSaveBlock1Ptr
	ldr r1, [r0]
	movs r2, 0
	ldrsh r0, [r1, r2]
	subs r5, r0
	ldr r0, =gUnknown_02037334
	str r5, [r0, 0x4]
	movs r2, 0x2
	ldrsh r0, [r1, r2]
	subs r6, r0
	ldr r0, =gUnknown_02037334
	str r6, [r0, 0x8]
	ldrh r0, [r1]
	add r0, r10
	strh r0, [r1]
	ldrh r0, [r1, 0x2]
	add r0, r9
	strh r0, [r1, 0x2]
	mov r0, r8
	bl sub_80885C4
_08088932:
	ldr r0, =gUnknown_02037334
	ldrb r0, [r0]
	lsls r0, 31
	lsrs r0, 31
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r1}
	bx r1
	.pool
	thumb_func_end CameraMove

	thumb_func_start sub_8088950
sub_8088950: @ 8088950
	push {r4-r7,lr}
	mov r7, r9
	mov r6, r8
	push {r6,r7}
	mov r9, r1
	mov r8, r2
	lsls r0, 24
	lsrs r6, r0, 24
	ldr r0, =gUnknown_02037318
	ldr r0, [r0, 0xC]
	ldr r7, [r0]
	ldr r4, [r0, 0x4]
	movs r5, 0
	cmp r5, r7
	bge _08088998
_0808896E:
	ldrb r0, [r4]
	cmp r0, r6
	bne _08088990
	adds r0, r6, 0
	mov r1, r9
	mov r2, r8
	adds r3, r4, 0
	bl sub_80889A8
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x1
	bne _08088990
	adds r0, r4, 0
	b _0808899A
	.pool
_08088990:
	adds r5, 0x1
	adds r4, 0xC
	cmp r5, r7
	blt _0808896E
_08088998:
	movs r0, 0
_0808899A:
	pop {r3,r4}
	mov r8, r3
	mov r9, r4
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_8088950

	thumb_func_start sub_80889A8
sub_80889A8: @ 80889A8
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	adds r7, r1, 0
	mov r8, r2
	adds r5, r3, 0
	lsls r0, 24
	lsrs r4, r0, 24
	adds r6, r4, 0
	adds r0, r5, 0
	bl mapconnection_get_mapheader
	adds r2, r0, 0
	cmp r4, 0x1
	blt _08088A00
	cmp r4, 0x2
	bgt _080889E0
	ldr r0, =gUnknown_02037318
	ldr r0, [r0]
	ldr r1, [r0]
	ldr r0, [r2]
	ldr r2, [r0]
	ldr r3, [r5, 0x4]
	adds r0, r7, 0
	b _080889F2
	.pool
_080889E0:
	cmp r6, 0x4
	bgt _08088A00
	ldr r0, =gUnknown_02037318
	ldr r0, [r0]
	ldr r1, [r0, 0x4]
	ldr r0, [r2]
	ldr r2, [r0, 0x4]
	ldr r3, [r5, 0x4]
	mov r0, r8
_080889F2:
	bl sub_8088A0C
	lsls r0, 24
	lsrs r0, 24
	b _08088A02
	.pool
_08088A00:
	movs r0, 0
_08088A02:
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_80889A8

	thumb_func_start sub_8088A0C
sub_8088A0C: @ 8088A0C
	push {r4,lr}
	adds r4, r0, 0
	adds r0, r2, 0
	adds r2, r3, 0
	cmp r3, 0
	bge _08088A1A
	movs r3, 0
_08088A1A:
	adds r2, r0, r2
	cmp r2, r1
	bge _08088A22
	adds r1, r2, 0
_08088A22:
	cmp r3, r4
	bgt _08088A2E
	cmp r4, r1
	bgt _08088A2E
	movs r0, 0x1
	b _08088A30
_08088A2E:
	movs r0, 0
_08088A30:
	pop {r4}
	pop {r1}
	bx r1
	thumb_func_end sub_8088A0C

	thumb_func_start sub_8088A38
sub_8088A38: @ 8088A38
	push {lr}
	cmp r0, 0
	blt _08088A46
	cmp r0, r1
	bge _08088A46
	movs r0, 0x1
	b _08088A48
_08088A46:
	movs r0, 0
_08088A48:
	pop {r1}
	bx r1
	thumb_func_end sub_8088A38

	thumb_func_start sub_8088A4C
sub_8088A4C: @ 8088A4C
	push {r4-r6,lr}
	adds r4, r0, 0
	adds r5, r1, 0
	adds r6, r2, 0
	bl mapconnection_get_mapheader
	adds r1, r0, 0
	ldrb r0, [r4]
	cmp r0, 0x1
	blt _08088A84
	cmp r0, 0x2
	bgt _08088A72
	ldr r0, [r4, 0x4]
	subs r0, r5, r0
	ldr r1, [r1]
	ldr r1, [r1]
	bl sub_8088A38
	b _08088A86
_08088A72:
	cmp r0, 0x4
	bgt _08088A84
	ldr r0, [r4, 0x4]
	subs r0, r6, r0
	ldr r1, [r1]
	ldr r1, [r1, 0x4]
	bl sub_8088A38
	b _08088A86
_08088A84:
	movs r0, 0
_08088A86:
	pop {r4-r6}
	pop {r1}
	bx r1
	thumb_func_end sub_8088A4C

	thumb_func_start sub_8088A8C
sub_8088A8C: @ 8088A8C
	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
	lsls r1, 16
	lsrs r1, 16
	ldr r2, =gUnknown_02037318
	ldr r0, [r2, 0xC]
	cmp r0, 0
	bne _08088AB4
	b _08088B2A
	.pool
_08088AB0:
	adds r0, r4, 0
	b _08088B2C
_08088AB4:
	ldr r7, [r0]
	ldr r4, [r0, 0x4]
	movs r6, 0
	cmp r6, r7
	bge _08088B2A
	lsls r0, r1, 16
	asrs r5, r0, 16
	mov r9, r2
	mov r1, r8
	lsls r0, r1, 16
	asrs r0, 16
	mov r10, r0
_08088ACC:
	ldrb r1, [r4]
	adds r3, r1, 0
	subs r0, r1, 0x5
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x1
	bls _08088B22
	cmp r1, 0x2
	bne _08088AE2
	cmp r5, 0x6
	bgt _08088B22
_08088AE2:
	cmp r1, 0x1
	bne _08088AF2
	mov r2, r9
	ldr r0, [r2]
	ldr r0, [r0, 0x4]
	adds r0, 0x7
	cmp r5, r0
	blt _08088B22
_08088AF2:
	mov r0, r8
	lsls r2, r0, 16
	cmp r1, 0x3
	bne _08088B00
	mov r1, r10
	cmp r1, 0x6
	bgt _08088B22
_08088B00:
	cmp r3, 0x4
	bne _08088B12
	asrs r1, r2, 16
	mov r3, r9
	ldr r0, [r3]
	ldr r0, [r0]
	adds r0, 0x7
	cmp r1, r0
	blt _08088B22
_08088B12:
	asrs r1, r2, 16
	subs r1, 0x7
	adds r0, r4, 0
	subs r2, r5, 0x7
	bl sub_8088A4C
	cmp r0, 0x1
	beq _08088AB0
_08088B22:
	adds r6, 0x1
	adds r4, 0xC
	cmp r6, r7
	blt _08088ACC
_08088B2A:
	movs r0, 0
_08088B2C:
	pop {r3-r5}
	mov r8, r3
	mov r9, r4
	mov r10, r5
	pop {r4-r7}
	pop {r1}
	bx r1
	thumb_func_end sub_8088A8C

	thumb_func_start sub_8088B3C
sub_8088B3C: @ 8088B3C
	lsls r0, 16
	lsrs r0, 16
	lsls r1, 16
	lsrs r1, 16
	ldr r2, =gSaveBlock1Ptr
	ldr r2, [r2]
	subs r0, 0x7
	strh r0, [r2]
	subs r1, 0x7
	strh r1, [r2, 0x2]
	bx lr
	.pool
	thumb_func_end sub_8088B3C

	thumb_func_start sav1_camera_get_focus_coords
sav1_camera_get_focus_coords: @ 8088B58
	ldr r2, =gSaveBlock1Ptr
	ldr r3, [r2]
	ldrh r2, [r3]
	adds r2, 0x7
	strh r2, [r0]
	ldrh r0, [r3, 0x2]
	adds r0, 0x7
	strh r0, [r1]
	bx lr
	.pool
	thumb_func_end sav1_camera_get_focus_coords

	thumb_func_start SetCameraCoords
@ void SetCameraCoords(u16 x, u16 y)
SetCameraCoords: @ 8088B70
	ldr r2, =gSaveBlock1Ptr
	ldr r2, [r2]
	strh r0, [r2]
	strh r1, [r2, 0x2]
	bx lr
	.pool
	thumb_func_end SetCameraCoords

	thumb_func_start GetCameraCoords
@ void GetCameraCoords(u16 *x, u16 *y)
GetCameraCoords: @ 8088B80
	ldr r2, =gSaveBlock1Ptr
	ldr r3, [r2]
	ldrh r2, [r3]
	strh r2, [r0]
	ldrh r0, [r3, 0x2]
	strh r0, [r1]
	bx lr
	.pool
	thumb_func_end GetCameraCoords

	thumb_func_start sub_8088B94
sub_8088B94: @ 8088B94
	push {r4,r5,lr}
	adds r4, r0, 0
	adds r3, r1, 0
	adds r5, r2, 0
	cmp r4, 0
	blt _08088BE6
	ldr r2, =gUnknown_03005DC0
	ldr r1, [r2]
	cmp r4, r1
	bge _08088BE6
	cmp r3, 0
	blt _08088BE6
	ldr r0, [r2, 0x4]
	cmp r3, r0
	bge _08088BE6
	cmp r5, 0
	beq _08088BD4
	adds r0, r1, 0
	muls r0, r3
	adds r0, r4, r0
	ldr r1, [r2, 0x8]
	lsls r0, 1
	adds r0, r1
	ldrh r1, [r0]
	movs r3, 0xC0
	lsls r3, 4
	adds r2, r3, 0
	orrs r1, r2
	strh r1, [r0]
	b _08088BE6
	.pool
_08088BD4:
	muls r1, r3
	adds r1, r4, r1
	ldr r0, [r2, 0x8]
	lsls r1, 1
	adds r1, r0
	ldrh r2, [r1]
	ldr r0, =0x0000f3ff
	ands r0, r2
	strh r0, [r1]
_08088BE6:
	pop {r4,r5}
	pop {r0}
	bx r0
	.pool
	thumb_func_end sub_8088B94

	thumb_func_start sub_8088BF0
sub_8088BF0: @ 8088BF0
	push {lr}
	adds r3, r0, 0
	lsls r1, 16
	lsrs r0, r1, 16
	adds r1, r0, 0
	lsls r2, 24
	lsrs r2, 24
	cmp r2, 0xFF
	beq _08088C24
	cmp r2, 0
	bne _08088C0C
	lsls r0, 1
	subs r3, r0
	b _08088C10
_08088C0C:
	lsls r0, r1, 1
	adds r3, r0
_08088C10:
	ldrh r1, [r3]
	ldr r0, =0x000003ff
	ands r0, r1
	adds r1, r2, 0
	bl sub_80FADE4
	lsls r0, 24
	lsrs r0, 24
	cmp r0, 0x1
	beq _08088C2C
_08088C24:
	movs r0, 0
	b _08088C2E
	.pool
_08088C2C:
	movs r0, 0x1
_08088C2E:
	pop {r1}
	bx r1
	thumb_func_end sub_8088BF0

	thumb_func_start copy_tileset_patterns_to_vram
@ void copy_tileset_patterns_to_vram(tileset *tileset, int num_tiles, int offset)
copy_tileset_patterns_to_vram: @ 8088C34
	push {r4-r7,lr}
	sub sp, 0x4
	adds r3, r0, 0
	lsls r1, 16
	lsrs r4, r1, 16
	adds r6, r4, 0
	lsls r2, 16
	lsrs r5, r2, 16
	adds r7, r5, 0
	cmp r3, 0
	beq _08088C70
	ldrb r0, [r3]
	cmp r0, 0
	bne _08088C60
	ldr r1, [r3, 0x4]
	lsls r2, r4, 21
	lsrs r2, 16
	movs r0, 0x2
	adds r3, r5, 0
	bl LoadBgTiles
	b _08088C70
_08088C60:
	ldr r1, [r3, 0x4]
	lsls r2, r6, 5
	movs r0, 0
	str r0, [sp]
	movs r0, 0x2
	adds r3, r7, 0
	bl decompress_and_copy_tile_data_to_vram
_08088C70:
	add sp, 0x4
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end copy_tileset_patterns_to_vram

	thumb_func_start copy_tileset_patterns_to_vram2
@ void copy_tileset_patterns_to_vram2(tileset *tileset, int num_tiles, int offset)
copy_tileset_patterns_to_vram2: @ 8088C78
	push {r4-r7,lr}
	sub sp, 0x4
	adds r3, r0, 0
	lsls r1, 16
	lsrs r4, r1, 16
	adds r6, r4, 0
	lsls r2, 16
	lsrs r5, r2, 16
	adds r7, r5, 0
	cmp r3, 0
	beq _08088CB4
	ldrb r0, [r3]
	cmp r0, 0
	bne _08088CA4
	ldr r1, [r3, 0x4]
	lsls r2, r4, 21
	lsrs r2, 16
	movs r0, 0x2
	adds r3, r5, 0
	bl LoadBgTiles
	b _08088CB4
_08088CA4:
	ldr r1, [r3, 0x4]
	lsls r2, r6, 5
	movs r0, 0
	str r0, [sp]
	movs r0, 0x2
	adds r3, r7, 0
	bl copy_decompressed_tile_data_to_vram_autofree
_08088CB4:
	add sp, 0x4
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end copy_tileset_patterns_to_vram2

	thumb_func_start nullsub_3
nullsub_3: @ 8088CBC
	bx lr
	thumb_func_end nullsub_3

	thumb_func_start nullsub_90
nullsub_90: @ 8088CC0
	bx lr
	thumb_func_end nullsub_90

	thumb_func_start apply_map_tileset_palette
@ void apply_map_tileset_palette(tileset *tileset, int dest_offset, int size)
apply_map_tileset_palette: @ 8088CC4
	push {r4-r7,lr}
	mov r7, r8
	push {r7}
	sub sp, 0x4
	adds r4, r0, 0
	lsls r1, 16
	lsrs r5, r1, 16
	mov r8, r5
	lsls r6, r2, 16
	lsrs r7, r6, 16
	adds r2, r7, 0
	movs r1, 0
	mov r0, sp
	strh r1, [r0]
	cmp r4, 0
	beq _08088D42
	ldrb r0, [r4, 0x1]
	cmp r0, 0
	bne _08088D18
	mov r0, sp
	adds r1, r5, 0
	movs r2, 0x2
	bl LoadPalette
	ldr r0, [r4, 0x8]
	adds r0, 0x2
	adds r5, 0x1
	lsls r5, 16
	lsrs r5, 16
	subs r4, r7, 0x2
	lsls r2, r4, 16
	lsrs r2, 16
	adds r1, r5, 0
	bl LoadPalette
	lsls r4, 15
	lsrs r4, 16
	adds r0, r5, 0
	adds r1, r4, 0
	bl nullsub_3
	b _08088D42
_08088D18:
	cmp r0, 0x1
	bne _08088D32
	ldr r0, [r4, 0x8]
	adds r0, 0xC0
	adds r1, r5, 0
	adds r2, r7, 0
	bl LoadPalette
	lsrs r1, r6, 17
	adds r0, r5, 0
	bl nullsub_3
	b _08088D42
_08088D32:
	ldr r0, [r4, 0x8]
	mov r1, r8
	bl LoadCompressedPalette
	lsrs r1, r6, 17
	mov r0, r8
	bl nullsub_3
_08088D42:
	add sp, 0x4
	pop {r3}
	mov r8, r3
	pop {r4-r7}
	pop {r0}
	bx r0
	thumb_func_end apply_map_tileset_palette

	thumb_func_start copy_map_tileset1_to_vram
@ void copy_map_tileset1_to_vram(mapdata_header *a1)
copy_map_tileset1_to_vram: @ 8088D50
	push {lr}
	ldr r0, [r0, 0x10]
	movs r1, 0x80
	lsls r1, 2
	movs r2, 0
	bl copy_tileset_patterns_to_vram
	pop {r0}
	bx r0
	thumb_func_end copy_map_tileset1_to_vram

	thumb_func_start copy_map_tileset2_to_vram
@ void copy_map_tileset2_to_vram(mapdata_header *a1)
copy_map_tileset2_to_vram: @ 8088D64
	push {lr}
	ldr r0, [r0, 0x14]
	movs r2, 0x80
	lsls r2, 2
	adds r1, r2, 0
	bl copy_tileset_patterns_to_vram
	pop {r0}
	bx r0
	thumb_func_end copy_map_tileset2_to_vram

	thumb_func_start copy_map_tileset2_to_vram_2
@ void copy_map_tileset2_to_vram_2(mapdata_header *a1)
copy_map_tileset2_to_vram_2: @ 8088D78
	push {lr}
	ldr r0, [r0, 0x14]
	movs r2, 0x80
	lsls r2, 2
	adds r1, r2, 0
	bl copy_tileset_patterns_to_vram2
	pop {r0}
	bx r0
	thumb_func_end copy_map_tileset2_to_vram_2

	thumb_func_start apply_map_tileset1_palette
@ void apply_map_tileset1_palette(mapdata_header *a1)
apply_map_tileset1_palette: @ 8088D8C
	push {lr}
	ldr r0, [r0, 0x10]
	movs r1, 0
	movs r2, 0xC0
	bl apply_map_tileset_palette
	pop {r0}
	bx r0
	thumb_func_end apply_map_tileset1_palette

	thumb_func_start apply_map_tileset2_palette
@ void apply_map_tileset2_palette(mapdata_header *a1)
apply_map_tileset2_palette: @ 8088D9C
	push {lr}
	ldr r0, [r0, 0x14]
	movs r1, 0x60
	movs r2, 0xE0
	bl apply_map_tileset_palette
	pop {r0}
	bx r0
	thumb_func_end apply_map_tileset2_palette

	thumb_func_start copy_map_tileset1_tileset2_to_vram
@ void copy_map_tileset1_tileset2_to_vram(mapdata_header *a1)
copy_map_tileset1_tileset2_to_vram: @ 8088DAC
	push {r4,r5,lr}
	adds r5, r0, 0
	cmp r5, 0
	beq _08088DCC
	ldr r0, [r5, 0x10]
	movs r4, 0x80
	lsls r4, 2
	adds r1, r4, 0
	movs r2, 0
	bl copy_tileset_patterns_to_vram2
	ldr r0, [r5, 0x14]
	adds r1, r4, 0
	adds r2, r4, 0
	bl copy_tileset_patterns_to_vram2
_08088DCC:
	pop {r4,r5}
	pop {r0}
	bx r0
	thumb_func_end copy_map_tileset1_tileset2_to_vram

	thumb_func_start apply_map_tileset1_tileset2_palette
@ void apply_map_tileset1_tileset2_palette(mapdata_header *a1)
apply_map_tileset1_tileset2_palette: @ 8088DD4
	push {r4,lr}
	adds r4, r0, 0
	cmp r4, 0
	beq _08088DE6
	bl apply_map_tileset1_palette
	adds r0, r4, 0
	bl apply_map_tileset2_palette
_08088DE6:
	pop {r4}
	pop {r0}
	bx r0
	thumb_func_end apply_map_tileset1_tileset2_palette

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