summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/bike.s4
-rw-r--r--asm/event_object_movement.s8
-rw-r--r--asm/field_camera.s1299
-rw-r--r--asm/overworld.s40
-rw-r--r--common_syms/field_camera.txt3
-rw-r--r--include/event_object_movement.h2
-rw-r--r--include/field_camera.h6
-rw-r--r--include/fieldmap.h1
-rw-r--r--include/overworld.h3
-rw-r--r--ld_script.txt2
-rw-r--r--src/field_camera.c572
-rw-r--r--sym_bss.txt18
-rw-r--r--sym_common.txt15
-rw-r--r--sym_ewram.txt5
14 files changed, 619 insertions, 1359 deletions
diff --git a/asm/bike.s b/asm/bike.s
index 5bba18d71..e805ccc38 100644
--- a/asm/bike.s
+++ b/asm/bike.s
@@ -718,7 +718,7 @@ StartTransitionToFlipBikeState: @ 80BD5C8
push {r4,lr}
lsls r0, 24
lsrs r2, r0, 24
- ldr r1, _080BD5F0 @ =gUnknown_2036E2C
+ ldr r1, _080BD5F0 @ =gUnusedBikeCameraAheadPanback
movs r0, 0
strb r0, [r1]
ldr r0, _080BD5F4 @ =gPlayerAvatar
@@ -733,7 +733,7 @@ StartTransitionToFlipBikeState: @ 80BD5C8
bl Overworld_PlaySpecialMapMusic
b _080BD618
.align 2, 0
-_080BD5F0: .4byte gUnknown_2036E2C
+_080BD5F0: .4byte gUnusedBikeCameraAheadPanback
_080BD5F4: .4byte gPlayerAvatar
_080BD5F8:
adds r0, r2, 0
diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s
index d09ee8e97..ec39d9f08 100644
--- a/asm/event_object_movement.s
+++ b/asm/event_object_movement.s
@@ -12924,7 +12924,7 @@ SetSpritePosToMapCoords: @ 8063B1C
ldr r0, _08063BB0 @ =gTotalCameraPixelOffsetX
ldrh r0, [r0]
negs r0, r0
- ldr r1, _08063BB4 @ =gUnknown_3005050
+ ldr r1, _08063BB4 @ =gFieldCamera
ldr r2, [r1, 0x10]
subs r0, r2
lsls r0, 16
@@ -12993,7 +12993,7 @@ _08063B7C:
bx r0
.align 2, 0
_08063BB0: .4byte gTotalCameraPixelOffsetX
-_08063BB4: .4byte gUnknown_3005050
+_08063BB4: .4byte gFieldCamera
_08063BB8: .4byte gTotalCameraPixelOffsetY
_08063BBC: .4byte 0xfff00000
_08063BC0: .4byte gSaveBlock1Ptr
@@ -13046,7 +13046,7 @@ GetObjectEventMovingCameraOffset: @ 8063C10
movs r0, 0
strh r0, [r2]
strh r0, [r1]
- ldr r3, _08063C4C @ =gUnknown_3005050
+ ldr r3, _08063C4C @ =gFieldCamera
ldr r0, [r3, 0x10]
cmp r0, 0
ble _08063C26
@@ -13076,7 +13076,7 @@ _08063C48:
pop {r0}
bx r0
.align 2, 0
-_08063C4C: .4byte gUnknown_3005050
+_08063C4C: .4byte gFieldCamera
thumb_func_end GetObjectEventMovingCameraOffset
thumb_func_start ObjectEventMoveDestCoords
diff --git a/asm/field_camera.s b/asm/field_camera.s
deleted file mode 100644
index aa906d6fc..000000000
--- a/asm/field_camera.s
+++ /dev/null
@@ -1,1299 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start move_tilemap_camera_to_upper_left_corner_
-move_tilemap_camera_to_upper_left_corner_: @ 805A5A8
- movs r1, 0
- strb r1, [r0, 0x2]
- strb r1, [r0, 0x3]
- strb r1, [r0]
- strb r1, [r0, 0x1]
- movs r1, 0x1
- strb r1, [r0, 0x4]
- bx lr
- thumb_func_end move_tilemap_camera_to_upper_left_corner_
-
- thumb_func_start tilemap_move_something
-tilemap_move_something: @ 805A5B8
- ldrb r3, [r0, 0x2]
- adds r3, r1
- strb r3, [r0, 0x2]
- ldrb r1, [r0, 0x2]
- movs r3, 0x1F
- ands r1, r3
- strb r1, [r0, 0x2]
- ldrb r1, [r0, 0x3]
- adds r1, r2
- strb r1, [r0, 0x3]
- ldrb r1, [r0, 0x3]
- ands r1, r3
- strb r1, [r0, 0x3]
- bx lr
- thumb_func_end tilemap_move_something
-
- thumb_func_start coords8_add
-coords8_add: @ 805A5D4
- ldrb r3, [r0]
- adds r3, r1
- strb r3, [r0]
- ldrb r1, [r0, 0x1]
- adds r1, r2
- strb r1, [r0, 0x1]
- bx lr
- thumb_func_end coords8_add
-
- thumb_func_start move_tilemap_camera_to_upper_left_corner
-move_tilemap_camera_to_upper_left_corner: @ 805A5E4
- push {lr}
- ldr r0, _0805A5F0 @ =gUnknown_3000E90
- bl move_tilemap_camera_to_upper_left_corner_
- pop {r0}
- bx r0
- .align 2, 0
-_0805A5F0: .4byte gUnknown_3000E90
- thumb_func_end move_tilemap_camera_to_upper_left_corner
-
- thumb_func_start FieldUpdateBgTilemapScroll
-FieldUpdateBgTilemapScroll: @ 805A5F4
- push {r4,r5,lr}
- ldr r1, _0805A64C @ =gUnknown_3000E90
- ldr r0, _0805A650 @ =gUnknown_3000E98
- movs r2, 0
- ldrsh r5, [r0, r2]
- ldrb r0, [r1]
- adds r5, r0
- ldr r0, _0805A654 @ =gUnknown_3000E9A
- movs r2, 0
- ldrsh r4, [r0, r2]
- ldrb r1, [r1, 0x1]
- adds r4, r1
- adds r4, 0x8
- lsls r5, 16
- lsrs r5, 16
- movs r0, 0x14
- adds r1, r5, 0
- bl SetGpuReg
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x16
- adds r1, r4, 0
- bl SetGpuReg
- movs r0, 0x18
- adds r1, r5, 0
- bl SetGpuReg
- movs r0, 0x1A
- adds r1, r4, 0
- bl SetGpuReg
- movs r0, 0x1C
- adds r1, r5, 0
- bl SetGpuReg
- movs r0, 0x1E
- adds r1, r4, 0
- bl SetGpuReg
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A64C: .4byte gUnknown_3000E90
-_0805A650: .4byte gUnknown_3000E98
-_0805A654: .4byte gUnknown_3000E9A
- thumb_func_end FieldUpdateBgTilemapScroll
-
- thumb_func_start sub_805A658
-sub_805A658: @ 805A658
- push {r4,lr}
- ldr r3, _0805A678 @ =gUnknown_3000E90
- ldr r2, _0805A67C @ =gUnknown_3000E98
- ldrh r2, [r2]
- ldrb r4, [r3]
- adds r2, r4
- strh r2, [r0]
- ldr r0, _0805A680 @ =gUnknown_3000E9A
- ldrh r0, [r0]
- ldrb r3, [r3, 0x1]
- adds r0, r3
- adds r0, 0x8
- strh r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A678: .4byte gUnknown_3000E90
-_0805A67C: .4byte gUnknown_3000E98
-_0805A680: .4byte gUnknown_3000E9A
- thumb_func_end sub_805A658
-
- thumb_func_start DrawWholeMapView
-DrawWholeMapView: @ 805A684
- push {lr}
- ldr r0, _0805A6A0 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r2, 0
- ldrsh r0, [r1, r2]
- movs r2, 0x2
- ldrsh r1, [r1, r2]
- ldr r2, _0805A6A4 @ =gMapHeader
- ldr r2, [r2]
- bl DrawWholeMapViewInternal
- pop {r0}
- bx r0
- .align 2, 0
-_0805A6A0: .4byte gSaveBlock1Ptr
-_0805A6A4: .4byte gMapHeader
- thumb_func_end DrawWholeMapView
-
- thumb_func_start DrawWholeMapViewInternal
-DrawWholeMapViewInternal: @ 805A6A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- mov r9, r1
- mov r8, r2
- movs r1, 0
-_0805A6BC:
- ldr r2, _0805A728 @ =gUnknown_3000E90
- ldrb r0, [r2, 0x3]
- adds r0, r1, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _0805A6D0
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_0805A6D0:
- lsls r6, r0, 5
- movs r4, 0
- adds r7, r1, 0x2
- str r7, [sp]
- lsrs r5, r1, 1
-_0805A6DA:
- ldr r1, _0805A728 @ =gUnknown_3000E90
- ldrb r0, [r1, 0x2]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _0805A6EE
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_0805A6EE:
- adds r1, r6, r0
- lsls r1, 16
- lsrs r1, 16
- lsrs r2, r4, 1
- add r2, r10
- mov r0, r8
- mov r7, r9
- adds r3, r7, r5
- bl sub_805A948
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _0805A6DA
- ldr r1, [sp]
- lsls r0, r1, 24
- lsrs r1, r0, 24
- cmp r1, 0x1F
- bls _0805A6BC
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A728: .4byte gUnknown_3000E90
- thumb_func_end DrawWholeMapViewInternal
-
- thumb_func_start RedrawMapSlicesForCameraUpdate
-RedrawMapSlicesForCameraUpdate: @ 805A72C
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- adds r7, r2, 0
- ldr r0, _0805A774 @ =gMapHeader
- ldr r4, [r0]
- cmp r6, 0
- ble _0805A744
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceWest
-_0805A744:
- cmp r6, 0
- bge _0805A750
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceEast
-_0805A750:
- cmp r7, 0
- ble _0805A75C
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceNorth
-_0805A75C:
- cmp r7, 0
- bge _0805A768
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceSouth
-_0805A768:
- movs r0, 0x1
- strb r0, [r5, 0x4]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A774: .4byte gMapHeader
- thumb_func_end RedrawMapSlicesForCameraUpdate
-
- thumb_func_start RedrawMapSliceNorth
-RedrawMapSliceNorth: @ 805A778
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r7, r1, 0
- ldrb r0, [r5, 0x3]
- adds r0, 0x1C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _0805A790
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_0805A790:
- lsls r6, r0, 5
- movs r4, 0
-_0805A794:
- ldrb r0, [r5, 0x2]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _0805A7A6
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_0805A7A6:
- adds r1, r6, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, _0805A7D4 @ =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r0, 0
- ldrsh r2, [r3, r0]
- lsrs r0, r4, 1
- adds r2, r0
- movs r0, 0x2
- ldrsh r3, [r3, r0]
- adds r3, 0xE
- adds r0, r7, 0
- bl sub_805A948
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _0805A794
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A7D4: .4byte gSaveBlock1Ptr
- thumb_func_end RedrawMapSliceNorth
-
- thumb_func_start RedrawMapSliceSouth
-RedrawMapSliceSouth: @ 805A7D8
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r7, r1, 0
- ldrb r0, [r5, 0x3]
- lsls r6, r0, 5
- movs r4, 0
-_0805A7E4:
- ldrb r0, [r5, 0x2]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _0805A7F6
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_0805A7F6:
- adds r1, r6, r0
- ldr r0, _0805A820 @ =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r0, 0
- ldrsh r2, [r3, r0]
- lsrs r0, r4, 1
- adds r2, r0
- movs r0, 0x2
- ldrsh r3, [r3, r0]
- adds r0, r7, 0
- bl sub_805A948
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _0805A7E4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A820: .4byte gSaveBlock1Ptr
- thumb_func_end RedrawMapSliceSouth
-
- thumb_func_start RedrawMapSliceEast
-RedrawMapSliceEast: @ 805A824
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- mov r8, r1
- ldrb r6, [r5, 0x2]
- movs r4, 0
-_0805A832:
- ldrb r0, [r5, 0x3]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _0805A844
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_0805A844:
- lsls r1, r0, 5
- adds r1, r6
- lsls r1, 16
- lsrs r1, 16
- ldr r0, _0805A878 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r3, 0
- ldrsh r2, [r0, r3]
- movs r7, 0x2
- ldrsh r3, [r0, r7]
- lsrs r0, r4, 1
- adds r3, r0
- mov r0, r8
- bl sub_805A948
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _0805A832
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A878: .4byte gSaveBlock1Ptr
- thumb_func_end RedrawMapSliceEast
-
- thumb_func_start RedrawMapSliceWest
-RedrawMapSliceWest: @ 805A87C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- mov r8, r1
- ldrb r0, [r6, 0x2]
- adds r0, 0x1C
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1F
- bls _0805A89A
- adds r0, r5, 0
- subs r0, 0x20
- lsls r0, 24
- lsrs r5, r0, 24
-_0805A89A:
- movs r4, 0
-_0805A89C:
- ldrb r0, [r6, 0x3]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _0805A8AE
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_0805A8AE:
- lsls r1, r0, 5
- adds r1, r5
- lsls r1, 16
- lsrs r1, 16
- ldr r0, _0805A8E4 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r3, 0
- ldrsh r2, [r0, r3]
- adds r2, 0xE
- movs r7, 0x2
- ldrsh r3, [r0, r7]
- lsrs r0, r4, 1
- adds r3, r0
- mov r0, r8
- bl sub_805A948
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _0805A89C
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A8E4: .4byte gSaveBlock1Ptr
- thumb_func_end RedrawMapSliceWest
-
- thumb_func_start CurrentMapDrawMetatileAt
-CurrentMapDrawMetatileAt: @ 805A8E8
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, _0805A914 @ =gUnknown_3000E90
- adds r1, r4, 0
- adds r2, r5, 0
- bl MapPosToBgTilemapOffset
- adds r1, r0, 0
- cmp r1, 0
- blt _0805A90E
- ldr r0, _0805A918 @ =gMapHeader
- ldr r0, [r0]
- lsls r1, 16
- lsrs r1, 16
- adds r2, r4, 0
- adds r3, r5, 0
- bl sub_805A948
-_0805A90E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A914: .4byte gUnknown_3000E90
-_0805A918: .4byte gMapHeader
- thumb_func_end CurrentMapDrawMetatileAt
-
- thumb_func_start DrawDoorMetatileAt
-DrawDoorMetatileAt: @ 805A91C
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- ldr r0, _0805A944 @ =gUnknown_3000E90
- adds r1, r3, 0
- adds r2, r4, 0
- bl MapPosToBgTilemapOffset
- cmp r0, 0
- blt _0805A93E
- lsls r2, r0, 16
- lsrs r2, 16
- movs r0, 0x1
- adds r1, r5, 0
- bl DrawMetatile
-_0805A93E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A944: .4byte gUnknown_3000E90
- thumb_func_end DrawDoorMetatileAt
-
- thumb_func_start sub_805A948
-sub_805A948: @ 805A948
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- adds r6, r2, 0
- adds r7, r3, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- adds r0, r6, 0
- adds r1, r7, 0
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x80
- lsls r0, 3
- cmp r4, r0
- bls _0805A970
- movs r4, 0
-_0805A970:
- ldr r0, _0805A97C @ =0x0000027f
- cmp r4, r0
- bhi _0805A980
- ldr r0, [r5, 0x10]
- ldr r5, [r0, 0xC]
- b _0805A98C
- .align 2, 0
-_0805A97C: .4byte 0x0000027f
-_0805A980:
- ldr r0, [r5, 0x14]
- ldr r5, [r0, 0xC]
- ldr r1, _0805A9B0 @ =0xfffffd80
- adds r0, r4, r1
- lsls r0, 16
- lsrs r4, r0, 16
-_0805A98C:
- lsls r0, r6, 16
- asrs r0, 16
- lsls r1, r7, 16
- asrs r1, 16
- bl MapGridGetMetatileLayerTypeAt
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 4
- adds r1, r5, r1
- mov r2, r8
- bl DrawMetatile
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805A9B0: .4byte 0xfffffd80
- thumb_func_end sub_805A948
-
- thumb_func_start DrawMetatile
-DrawMetatile: @ 805A9B4
- push {r4,lr}
- adds r4, r1, 0
- lsls r2, 16
- lsrs r2, 16
- cmp r0, 0x1
- beq _0805AA0C
- cmp r0, 0x1
- bgt _0805A9CA
- cmp r0, 0
- beq _0805AA6C
- b _0805AABE
-_0805A9CA:
- cmp r0, 0x2
- bne _0805AABE
- ldr r0, _0805AA04 @ =gUnknown_300501C
- ldr r0, [r0]
- lsls r3, r2, 1
- adds r0, r3, r0
- ldrh r1, [r4]
- strh r1, [r0]
- ldrh r1, [r4, 0x2]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0x4]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0x6]
- strh r1, [r0]
- ldr r0, _0805AA08 @ =gUnknown_3005014
- ldr r0, [r0]
- adds r0, r3, r0
- movs r2, 0
- strh r2, [r0]
- strh r2, [r0, 0x2]
- adds r1, r0, 0
- adds r1, 0x40
- strh r2, [r1]
- adds r0, 0x42
- strh r2, [r0]
- b _0805AAA2
- .align 2, 0
-_0805AA04: .4byte gUnknown_300501C
-_0805AA08: .4byte gUnknown_3005014
-_0805AA0C:
- ldr r0, _0805AA60 @ =gUnknown_300501C
- ldr r0, [r0]
- lsls r3, r2, 1
- adds r0, r3, r0
- ldrh r1, [r4]
- strh r1, [r0]
- ldrh r1, [r4, 0x2]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0x4]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0x6]
- strh r1, [r0]
- ldr r0, _0805AA64 @ =gUnknown_3005014
- ldr r0, [r0]
- adds r0, r3, r0
- ldrh r1, [r4, 0x8]
- strh r1, [r0]
- ldrh r1, [r4, 0xA]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0xC]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0xE]
- strh r1, [r0]
- ldr r0, _0805AA68 @ =gUnknown_3005018
- ldr r0, [r0]
- adds r3, r0
- movs r1, 0
- strh r1, [r3]
- strh r1, [r3, 0x2]
- adds r0, r3, 0
- adds r0, 0x40
- strh r1, [r0]
- adds r3, 0x42
- strh r1, [r3]
- b _0805AABE
- .align 2, 0
-_0805AA60: .4byte gUnknown_300501C
-_0805AA64: .4byte gUnknown_3005014
-_0805AA68: .4byte gUnknown_3005018
-_0805AA6C:
- ldr r0, _0805AAD8 @ =gUnknown_300501C
- ldr r0, [r0]
- lsls r3, r2, 1
- adds r0, r3, r0
- ldr r1, _0805AADC @ =0x00003014
- adds r2, r1, 0
- strh r2, [r0]
- strh r2, [r0, 0x2]
- adds r1, r0, 0
- adds r1, 0x40
- strh r2, [r1]
- adds r0, 0x42
- strh r2, [r0]
- ldr r0, _0805AAE0 @ =gUnknown_3005014
- ldr r0, [r0]
- adds r0, r3, r0
- ldrh r1, [r4]
- strh r1, [r0]
- ldrh r1, [r4, 0x2]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0x4]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0x6]
- strh r1, [r0]
-_0805AAA2:
- ldr r0, _0805AAE4 @ =gUnknown_3005018
- ldr r0, [r0]
- adds r3, r0
- ldrh r0, [r4, 0x8]
- strh r0, [r3]
- ldrh r0, [r4, 0xA]
- strh r0, [r3, 0x2]
- adds r1, r3, 0
- adds r1, 0x40
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- adds r3, 0x42
- ldrh r0, [r4, 0xE]
- strh r0, [r3]
-_0805AABE:
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x3
- bl ScheduleBgCopyTilemapToVram
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805AAD8: .4byte gUnknown_300501C
-_0805AADC: .4byte 0x00003014
-_0805AAE0: .4byte gUnknown_3005014
-_0805AAE4: .4byte gUnknown_3005018
- thumb_func_end DrawMetatile
-
- thumb_func_start MapPosToBgTilemapOffset
-MapPosToBgTilemapOffset: @ 805AAE8
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _0805AB18 @ =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r5, 0
- ldrsh r0, [r3, r5]
- subs r1, r0
- lsls r1, 1
- cmp r1, 0x1F
- bhi _0805AB12
- ldrb r0, [r4, 0x2]
- adds r1, r0
- cmp r1, 0x1F
- ble _0805AB06
- subs r1, 0x20
-_0805AB06:
- movs r5, 0x2
- ldrsh r0, [r3, r5]
- subs r0, r2, r0
- lsls r2, r0, 1
- cmp r2, 0x1F
- bls _0805AB1C
-_0805AB12:
- movs r0, 0x1
- negs r0, r0
- b _0805AB2A
- .align 2, 0
-_0805AB18: .4byte gSaveBlock1Ptr
-_0805AB1C:
- ldrb r0, [r4, 0x3]
- adds r2, r0
- cmp r2, 0x1F
- ble _0805AB26
- subs r2, 0x20
-_0805AB26:
- lsls r0, r2, 5
- adds r0, r1
-_0805AB2A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end MapPosToBgTilemapOffset
-
- thumb_func_start CameraUpdateCallback
-CameraUpdateCallback: @ 805AB30
- push {lr}
- adds r3, r0, 0
- ldr r2, [r3, 0x4]
- cmp r2, 0
- beq _0805AB50
- ldr r1, _0805AB54 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r2, 0x32
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x8]
- movs r1, 0x34
- ldrsh r0, [r0, r1]
- str r0, [r3, 0xC]
-_0805AB50:
- pop {r0}
- bx r0
- .align 2, 0
-_0805AB54: .4byte gSprites
- thumb_func_end CameraUpdateCallback
-
- thumb_func_start ResetCameraUpdateInfo
-ResetCameraUpdateInfo: @ 805AB58
- ldr r1, _0805AB6C @ =gUnknown_3005050
- movs r0, 0
- str r0, [r1, 0x8]
- str r0, [r1, 0xC]
- str r0, [r1, 0x10]
- str r0, [r1, 0x14]
- str r0, [r1, 0x4]
- str r0, [r1]
- bx lr
- .align 2, 0
-_0805AB6C: .4byte gUnknown_3005050
- thumb_func_end ResetCameraUpdateInfo
-
- thumb_func_start InitCameraUpdateCallback
-InitCameraUpdateCallback: @ 805AB70
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _0805ABA4 @ =gUnknown_3005050
- ldr r1, [r4, 0x4]
- cmp r1, 0
- beq _0805AB8C
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805ABA8 @ =gSprites
- adds r0, r1
- bl DestroySprite
-_0805AB8C:
- adds r0, r5, 0
- bl AddCameraObject
- lsls r0, 24
- lsrs r0, 24
- str r0, [r4, 0x4]
- ldr r0, _0805ABAC @ =CameraUpdateCallback
- str r0, [r4]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805ABA4: .4byte gUnknown_3005050
-_0805ABA8: .4byte gSprites
-_0805ABAC: .4byte CameraUpdateCallback
- thumb_func_end InitCameraUpdateCallback
-
- thumb_func_start CameraUpdate
-CameraUpdate: @ 805ABB0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r6, _0805ACA4 @ =gUnknown_3005050
- ldr r1, [r6]
- cmp r1, 0
- beq _0805ABC4
- adds r0, r6, 0
- bl _call_via_r1
-_0805ABC4:
- ldr r7, [r6, 0x8]
- ldr r0, [r6, 0xC]
- mov r8, r0
- movs r4, 0
- movs r5, 0
- ldr r1, [r6, 0x10]
- ldr r0, [r6, 0x14]
- cmp r1, 0
- bne _0805ABE2
- cmp r7, 0
- beq _0805ABE2
- subs r4, 0x1
- cmp r7, 0
- ble _0805ABE2
- movs r4, 0x1
-_0805ABE2:
- cmp r0, 0
- bne _0805ABF6
- mov r2, r8
- cmp r2, 0
- beq _0805ABF6
- movs r5, 0x1
- negs r5, r5
- cmp r2, 0
- ble _0805ABF6
- movs r5, 0x1
-_0805ABF6:
- cmp r1, 0
- beq _0805AC08
- cmn r1, r7
- bne _0805AC08
- movs r4, 0x1
- negs r4, r4
- cmp r7, 0
- ble _0805AC08
- movs r4, 0x1
-_0805AC08:
- cmp r0, 0
- beq _0805AC1C
- mov r3, r8
- cmn r0, r3
- bne _0805AC1C
- movs r4, 0x1
- negs r4, r4
- cmp r3, 0
- ble _0805AC1C
- movs r4, 0x1
-_0805AC1C:
- ldr r2, _0805ACA4 @ =gUnknown_3005050
- ldr r0, [r2, 0x10]
- adds r1, r0, r7
- str r1, [r2, 0x10]
- adds r0, r1, 0
- cmp r1, 0
- bge _0805AC2C
- adds r0, 0xF
-_0805AC2C:
- asrs r0, 4
- lsls r0, 4
- subs r0, r1, r0
- str r0, [r2, 0x10]
- ldr r0, [r2, 0x14]
- mov r3, r8
- adds r1, r0, r3
- str r1, [r2, 0x14]
- adds r0, r1, 0
- cmp r1, 0
- bge _0805AC44
- adds r0, 0xF
-_0805AC44:
- asrs r0, 4
- lsls r0, 4
- subs r0, r1, r0
- str r0, [r2, 0x14]
- cmp r4, 0
- bne _0805AC54
- cmp r5, 0
- beq _0805AC7E
-_0805AC54:
- adds r0, r4, 0
- adds r1, r5, 0
- bl CameraMove
- adds r0, r4, 0
- adds r1, r5, 0
- bl UpdateObjectEventsForCameraUpdate
- ldr r6, _0805ACA8 @ =gUnknown_3000E90
- lsls r4, 1
- lsls r5, 1
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl tilemap_move_something
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl RedrawMapSlicesForCameraUpdate
-_0805AC7E:
- ldr r0, _0805ACA8 @ =gUnknown_3000E90
- adds r1, r7, 0
- mov r2, r8
- bl coords8_add
- ldr r1, _0805ACAC @ =gTotalCameraPixelOffsetX
- ldrh r0, [r1]
- subs r0, r7
- strh r0, [r1]
- ldr r1, _0805ACB0 @ =gTotalCameraPixelOffsetY
- ldrh r0, [r1]
- mov r2, r8
- subs r0, r2
- strh r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805ACA4: .4byte gUnknown_3005050
-_0805ACA8: .4byte gUnknown_3000E90
-_0805ACAC: .4byte gTotalCameraPixelOffsetX
-_0805ACB0: .4byte gTotalCameraPixelOffsetY
- thumb_func_end CameraUpdate
-
- thumb_func_start sub_805ACB4
-sub_805ACB4: @ 805ACB4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl CameraMove
- lsls r0, r4, 16
- asrs r0, 16
- lsls r1, r5, 16
- asrs r1, 16
- bl UpdateObjectEventsForCameraUpdate
- bl DrawWholeMapView
- ldr r1, _0805ACE8 @ =gTotalCameraPixelOffsetX
- lsls r4, 4
- ldrh r0, [r1]
- subs r0, r4
- strh r0, [r1]
- ldr r1, _0805ACEC @ =gTotalCameraPixelOffsetY
- lsls r5, 4
- ldrh r0, [r1]
- subs r0, r5
- strh r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805ACE8: .4byte gTotalCameraPixelOffsetX
-_0805ACEC: .4byte gTotalCameraPixelOffsetY
- thumb_func_end sub_805ACB4
-
- thumb_func_start sub_805ACF0
-sub_805ACF0: @ 805ACF0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, _0805ADCC @ =gUnknown_3005050
- ldr r1, [r4]
- cmp r1, 0
- beq _0805AD04
- adds r0, r4, 0
- bl _call_via_r1
-_0805AD04:
- ldr r7, [r4, 0x8]
- ldr r0, [r4, 0xC]
- mov r8, r0
- movs r5, 0
- movs r6, 0
- ldr r1, [r4, 0x10]
- ldr r0, [r4, 0x14]
- cmp r1, 0
- bne _0805AD22
- cmp r7, 0
- beq _0805AD22
- subs r5, 0x1
- cmp r7, 0
- ble _0805AD22
- movs r5, 0x1
-_0805AD22:
- cmp r0, 0
- bne _0805AD36
- mov r2, r8
- cmp r2, 0
- beq _0805AD36
- movs r6, 0x1
- negs r6, r6
- cmp r2, 0
- ble _0805AD36
- movs r6, 0x1
-_0805AD36:
- cmp r1, 0
- beq _0805AD48
- cmn r1, r7
- bne _0805AD48
- movs r5, 0x1
- negs r5, r5
- cmp r7, 0
- ble _0805AD48
- movs r5, 0x1
-_0805AD48:
- cmp r0, 0
- beq _0805AD5C
- mov r3, r8
- cmn r0, r3
- bne _0805AD5C
- movs r5, 0x1
- negs r5, r5
- cmp r3, 0
- ble _0805AD5C
- movs r5, 0x1
-_0805AD5C:
- ldr r2, _0805ADCC @ =gUnknown_3005050
- ldr r0, [r2, 0x10]
- adds r1, r0, r7
- str r1, [r2, 0x10]
- adds r0, r1, 0
- cmp r1, 0
- bge _0805AD6C
- adds r0, 0xF
-_0805AD6C:
- asrs r0, 4
- lsls r0, 4
- subs r0, r1, r0
- str r0, [r2, 0x10]
- ldr r0, [r2, 0x14]
- mov r3, r8
- adds r1, r0, r3
- str r1, [r2, 0x14]
- adds r0, r1, 0
- cmp r1, 0
- bge _0805AD84
- adds r0, 0xF
-_0805AD84:
- asrs r0, 4
- lsls r0, 4
- subs r0, r1, r0
- str r0, [r2, 0x14]
- cmp r5, 0
- bne _0805AD94
- cmp r6, 0
- beq _0805ADB6
-_0805AD94:
- adds r0, r5, 0
- adds r1, r6, 0
- bl CameraMove
- ldr r4, _0805ADD0 @ =gUnknown_3000E90
- lsls r5, 1
- lsls r6, 1
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl tilemap_move_something
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl RedrawMapSlicesForCameraUpdate
-_0805ADB6:
- ldr r0, _0805ADD0 @ =gUnknown_3000E90
- adds r1, r7, 0
- mov r2, r8
- bl coords8_add
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805ADCC: .4byte gUnknown_3005050
-_0805ADD0: .4byte gUnknown_3000E90
- thumb_func_end sub_805ACF0
-
- thumb_func_start SetCameraPanningCallback
-SetCameraPanningCallback: @ 805ADD4
- ldr r1, _0805ADDC @ =gUnknown_3000EA0
- str r0, [r1]
- bx lr
- .align 2, 0
-_0805ADDC: .4byte gUnknown_3000EA0
- thumb_func_end SetCameraPanningCallback
-
- thumb_func_start SetCameraPanning
-SetCameraPanning: @ 805ADE0
- ldr r2, _0805ADF0 @ =gUnknown_3000E98
- strh r0, [r2]
- ldr r0, _0805ADF4 @ =gUnknown_3000E9A
- lsls r1, 16
- asrs r1, 16
- adds r1, 0x20
- strh r1, [r0]
- bx lr
- .align 2, 0
-_0805ADF0: .4byte gUnknown_3000E98
-_0805ADF4: .4byte gUnknown_3000E9A
- thumb_func_end SetCameraPanning
-
- thumb_func_start InstallCameraPanAheadCallback
-InstallCameraPanAheadCallback: @ 805ADF8
- ldr r1, _0805AE14 @ =gUnknown_3000EA0
- ldr r0, _0805AE18 @ =CameraPanningCB_PanAhead
- str r0, [r1]
- ldr r1, _0805AE1C @ =gUnknown_3000E9C
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0805AE20 @ =gUnknown_3000E98
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0805AE24 @ =gUnknown_3000E9A
- movs r0, 0x20
- strh r0, [r1]
- bx lr
- .align 2, 0
-_0805AE14: .4byte gUnknown_3000EA0
-_0805AE18: .4byte CameraPanningCB_PanAhead
-_0805AE1C: .4byte gUnknown_3000E9C
-_0805AE20: .4byte gUnknown_3000E98
-_0805AE24: .4byte gUnknown_3000E9A
- thumb_func_end InstallCameraPanAheadCallback
-
- thumb_func_start UpdateCameraPanning
-UpdateCameraPanning: @ 805AE28
- push {lr}
- ldr r0, _0805AE58 @ =gUnknown_3000EA0
- ldr r0, [r0]
- cmp r0, 0
- beq _0805AE36
- bl _call_via_r0
-_0805AE36:
- ldr r2, _0805AE5C @ =gSpriteCoordOffsetX
- ldr r0, _0805AE60 @ =gTotalCameraPixelOffsetX
- ldr r1, _0805AE64 @ =gUnknown_3000E98
- ldrh r0, [r0]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r2]
- ldr r2, _0805AE68 @ =gSpriteCoordOffsetY
- ldr r0, _0805AE6C @ =gTotalCameraPixelOffsetY
- ldr r1, _0805AE70 @ =gUnknown_3000E9A
- ldrh r0, [r0]
- ldrh r1, [r1]
- subs r0, r1
- subs r0, 0x8
- strh r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_0805AE58: .4byte gUnknown_3000EA0
-_0805AE5C: .4byte gSpriteCoordOffsetX
-_0805AE60: .4byte gTotalCameraPixelOffsetX
-_0805AE64: .4byte gUnknown_3000E98
-_0805AE68: .4byte gSpriteCoordOffsetY
-_0805AE6C: .4byte gTotalCameraPixelOffsetY
-_0805AE70: .4byte gUnknown_3000E9A
- thumb_func_end UpdateCameraPanning
-
- thumb_func_start CameraPanningCB_PanAhead
-CameraPanningCB_PanAhead: @ 805AE74
- push {lr}
- ldr r0, _0805AE84 @ =gUnknown_2036E2C
- ldrb r0, [r0]
- cmp r0, 0
- bne _0805AE88
- bl InstallCameraPanAheadCallback
- b _0805AF10
- .align 2, 0
-_0805AE84: .4byte gUnknown_2036E2C
-_0805AE88:
- ldr r0, _0805AEA0 @ =gPlayerAvatar
- ldrb r0, [r0, 0x3]
- cmp r0, 0x1
- bne _0805AEA8
- ldr r0, _0805AEA4 @ =gUnknown_3000E9C
- ldrb r1, [r0]
- movs r2, 0x1
- eors r1, r2
- strb r1, [r0]
- cmp r1, 0
- beq _0805AF10
- b _0805AEAE
- .align 2, 0
-_0805AEA0: .4byte gPlayerAvatar
-_0805AEA4: .4byte gUnknown_3000E9C
-_0805AEA8:
- ldr r1, _0805AED0 @ =gUnknown_3000E9C
- movs r0, 0
- strb r0, [r1]
-_0805AEAE:
- bl player_get_direction_upper_nybble
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0805AED8
- ldr r2, _0805AED4 @ =gUnknown_3000E9A
- ldrh r3, [r2]
- movs r0, 0
- ldrsh r1, [r2, r0]
- movs r0, 0x8
- negs r0, r0
- cmp r1, r0
- ble _0805AF10
- subs r0, r3, 0x2
- b _0805AF0E
- .align 2, 0
-_0805AED0: .4byte gUnknown_3000E9C
-_0805AED4: .4byte gUnknown_3000E9A
-_0805AED8:
- cmp r0, 0x1
- bne _0805AEF4
- ldr r1, _0805AEF0 @ =gUnknown_3000E9A
- ldrh r2, [r1]
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0x47
- bgt _0805AF10
- adds r0, r2, 0x2
- strh r0, [r1]
- b _0805AF10
- .align 2, 0
-_0805AEF0: .4byte gUnknown_3000E9A
-_0805AEF4:
- ldr r2, _0805AF04 @ =gUnknown_3000E9A
- ldrh r0, [r2]
- movs r3, 0
- ldrsh r1, [r2, r3]
- cmp r1, 0x1F
- bgt _0805AF08
- adds r0, 0x2
- b _0805AF0E
- .align 2, 0
-_0805AF04: .4byte gUnknown_3000E9A
-_0805AF08:
- cmp r1, 0x20
- ble _0805AF10
- subs r0, 0x2
-_0805AF0E:
- strh r0, [r2]
-_0805AF10:
- pop {r0}
- bx r0
- thumb_func_end CameraPanningCB_PanAhead
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index 14afde17a..2412a4d87 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -3091,7 +3091,7 @@ InitOverworldBgs: @ 80562B0
movs r1, 0x5
movs r2, 0x1
bl SetBgAttribute
- ldr r0, _08056348 @ =gUnknown_3005018
+ ldr r0, _08056348 @ =gBGTilemapBuffers2
mov r8, r0
movs r4, 0x80
lsls r4, 4
@@ -3099,11 +3099,11 @@ InitOverworldBgs: @ 80562B0
bl AllocZeroed
mov r1, r8
str r0, [r1]
- ldr r6, _0805634C @ =gUnknown_3005014
+ ldr r6, _0805634C @ =gBGTilemapBuffers1
adds r0, r4, 0
bl AllocZeroed
str r0, [r6]
- ldr r5, _08056350 @ =gUnknown_300501C
+ ldr r5, _08056350 @ =gBGTilemapBuffers3
adds r0, r4, 0
bl AllocZeroed
str r0, [r5]
@@ -3127,9 +3127,9 @@ InitOverworldBgs: @ 80562B0
bx r0
.align 2, 0
_08056344: .4byte gUnknown_826D320
-_08056348: .4byte gUnknown_3005018
-_0805634C: .4byte gUnknown_3005014
-_08056350: .4byte gUnknown_300501C
+_08056348: .4byte gBGTilemapBuffers2
+_0805634C: .4byte gBGTilemapBuffers1
+_08056350: .4byte gBGTilemapBuffers3
thumb_func_end InitOverworldBgs
thumb_func_start sub_8056354
@@ -3155,7 +3155,7 @@ sub_8056354: @ 8056354
movs r1, 0x5
movs r2, 0x1
bl SetBgAttribute
- ldr r0, _080563E4 @ =gUnknown_3005018
+ ldr r0, _080563E4 @ =gBGTilemapBuffers2
mov r8, r0
movs r4, 0x80
lsls r4, 4
@@ -3163,11 +3163,11 @@ sub_8056354: @ 8056354
bl AllocZeroed
mov r1, r8
str r0, [r1]
- ldr r6, _080563E8 @ =gUnknown_3005014
+ ldr r6, _080563E8 @ =gBGTilemapBuffers1
adds r0, r4, 0
bl AllocZeroed
str r0, [r6]
- ldr r5, _080563EC @ =gUnknown_300501C
+ ldr r5, _080563EC @ =gBGTilemapBuffers3
adds r0, r4, 0
bl AllocZeroed
str r0, [r5]
@@ -3191,30 +3191,30 @@ sub_8056354: @ 8056354
bx r0
.align 2, 0
_080563E0: .4byte gUnknown_826D320
-_080563E4: .4byte gUnknown_3005018
-_080563E8: .4byte gUnknown_3005014
-_080563EC: .4byte gUnknown_300501C
+_080563E4: .4byte gBGTilemapBuffers2
+_080563E8: .4byte gBGTilemapBuffers1
+_080563EC: .4byte gBGTilemapBuffers3
thumb_func_end sub_8056354
thumb_func_start CleanupOverworldWindowsAndTilemaps
CleanupOverworldWindowsAndTilemaps: @ 80563F0
push {lr}
bl FreeAllOverworldWindowBuffers
- ldr r0, _08056414 @ =gUnknown_300501C
+ ldr r0, _08056414 @ =gBGTilemapBuffers3
ldr r0, [r0]
bl Free
- ldr r0, _08056418 @ =gUnknown_3005014
+ ldr r0, _08056418 @ =gBGTilemapBuffers1
ldr r0, [r0]
bl Free
- ldr r0, _0805641C @ =gUnknown_3005018
+ ldr r0, _0805641C @ =gBGTilemapBuffers2
ldr r0, [r0]
bl Free
pop {r0}
bx r0
.align 2, 0
-_08056414: .4byte gUnknown_300501C
-_08056418: .4byte gUnknown_3005014
-_0805641C: .4byte gUnknown_3005018
+_08056414: .4byte gBGTilemapBuffers3
+_08056418: .4byte gBGTilemapBuffers1
+_0805641C: .4byte gBGTilemapBuffers2
thumb_func_end CleanupOverworldWindowsAndTilemaps
thumb_func_start sub_8056420
@@ -5344,7 +5344,7 @@ _08057620:
beq _08057648
b _0805754E
_0805762C:
- ldr r0, _08057640 @ =gUnknown_3005050
+ ldr r0, _08057640 @ =gFieldCamera
ldr r1, _08057644 @ =sub_8057748
str r1, [r0]
bl SetFieldVBlankCallback
@@ -5353,7 +5353,7 @@ _0805762C:
movs r0, 0x1
b _0805764A
.align 2, 0
-_08057640: .4byte gUnknown_3005050
+_08057640: .4byte gFieldCamera
_08057644: .4byte sub_8057748
_08057648:
movs r0, 0
diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt
new file mode 100644
index 000000000..65de29fc3
--- /dev/null
+++ b/common_syms/field_camera.txt
@@ -0,0 +1,3 @@
+gFieldCamera
+gTotalCameraPixelOffsetY
+gTotalCameraPixelOffsetX \ No newline at end of file
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 50d9935fc..5c65db228 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -129,6 +129,8 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
u8 ZCoordToPriority(u8 z);
void SetObjectSubpriorityByZCoord(u8 z, struct Sprite * sprite, u8 offset);
void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables);
+u8 AddCameraObject(u8 trackedSpriteId);
+void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
// Exported data declarations
diff --git a/include/field_camera.h b/include/field_camera.h
index fdab03255..65003bc6f 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -8,9 +8,9 @@
struct CameraObject
{
void (*callback)(struct CameraObject *);
- u32 unk4;
- s32 unk8;
- s32 unkC;
+ u32 spriteId;
+ s32 movementSpeedX;
+ s32 movementSpeedY;
s32 x;
s32 y;
};
diff --git a/include/fieldmap.h b/include/fieldmap.h
index a8e31685f..7cccbcc24 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -33,5 +33,6 @@ void save_serialize_map(void);
u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit);
u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr);
void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2);
+bool8 CameraMove(s32 x, s32 y);
#endif //GUARD_FIELDMAP_H
diff --git a/include/overworld.h b/include/overworld.h
index 02492f74b..fecacf6de 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -194,6 +194,9 @@ void CB1_Overworld(void);
void sub_80568C4(void);
u8 GetLastUsedWarpMapSectionId(void);
+extern u16 *gBGTilemapBuffers1;
+extern u16 *gBGTilemapBuffers2;
+extern u16 *gBGTilemapBuffers3;
extern u16 gHeldKeyCodeToSend;
#endif //GUARD_OVERWORLD_H
diff --git a/ld_script.txt b/ld_script.txt
index ef3c4a997..094bf1c88 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -90,7 +90,7 @@ SECTIONS {
asm/overworld.o(.text);
src/fieldmap.o(.text);
src/metatile_behavior.o(.text);
- asm/field_camera.o(.text);
+ src/field_camera.o(.text);
src/field_door.o(.text);
asm/field_player_avatar.o(.text);
asm/event_object_movement.o(.text);
diff --git a/src/field_camera.c b/src/field_camera.c
new file mode 100644
index 000000000..365c1e8b4
--- /dev/null
+++ b/src/field_camera.c
@@ -0,0 +1,572 @@
+#include "global.h"
+#include "gflib.h"
+#include "field_camera.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "event_object_movement.h"
+#include "new_menu_helpers.h"
+#include "overworld.h"
+
+EWRAM_DATA bool8 gUnusedBikeCameraAheadPanback = FALSE;
+
+// Static type declarations
+struct FieldCameraOffset
+{
+ u8 xPixelOffset;
+ u8 yPixelOffset;
+ u8 xTileOffset;
+ u8 yTileOffset;
+ bool8 copyBGToVRAM;
+};
+
+// static functions
+static void RedrawMapSliceNorth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout);
+static void RedrawMapSliceSouth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout);
+static void RedrawMapSliceEast(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout);
+static void RedrawMapSliceWest(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout);
+static s32 MapPosToBgTilemapOffset(struct FieldCameraOffset *a, s32 x, s32 y);
+static void DrawWholeMapViewInternal(int x, int y, const struct MapLayout *mapLayout);
+static void DrawMetatileAt(const struct MapLayout *mapLayout, u16, int, int);
+static void DrawMetatile(s32 a, const u16 *b, u16 c);
+static void CameraPanningCB_PanAhead(void);
+
+// IWRAM bss vars
+static struct FieldCameraOffset sFieldCameraOffset;
+static s16 sHorizontalCameraPan;
+static s16 sVerticalCameraPan;
+static u8 gUnknown_3000E9C;
+static void (*sFieldCameraPanningCallback)(void);
+
+struct CameraObject gFieldCamera;
+u16 gTotalCameraPixelOffsetY;
+u16 gTotalCameraPixelOffsetX;
+
+// text
+static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraOffset *cameraOffset)
+{
+ cameraOffset->xTileOffset = 0;
+ cameraOffset->yTileOffset = 0;
+ cameraOffset->xPixelOffset = 0;
+ cameraOffset->yPixelOffset = 0;
+ cameraOffset->copyBGToVRAM = TRUE;
+}
+
+static void tilemap_move_something(struct FieldCameraOffset *cameraOffset, u32 b, u32 c)
+{
+ cameraOffset->xTileOffset += b;
+ cameraOffset->xTileOffset %= 32;
+ cameraOffset->yTileOffset += c;
+ cameraOffset->yTileOffset %= 32;
+}
+
+static void coords8_add(struct FieldCameraOffset *cameraOffset, u32 b, u32 c)
+{
+ cameraOffset->xPixelOffset += b;
+ cameraOffset->yPixelOffset += c;
+}
+
+void move_tilemap_camera_to_upper_left_corner(void)
+{
+ move_tilemap_camera_to_upper_left_corner_(&sFieldCameraOffset);
+}
+
+void FieldUpdateBgTilemapScroll(void)
+{
+ u32 r4, r5;
+ r5 = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan;
+ r4 = sVerticalCameraPan + sFieldCameraOffset.yPixelOffset + 8;
+
+ SetGpuReg(REG_OFFSET_BG1HOFS, r5);
+ SetGpuReg(REG_OFFSET_BG1VOFS, r4);
+ SetGpuReg(REG_OFFSET_BG2HOFS, r5);
+ SetGpuReg(REG_OFFSET_BG2VOFS, r4);
+ SetGpuReg(REG_OFFSET_BG3HOFS, r5);
+ SetGpuReg(REG_OFFSET_BG3VOFS, r4);
+}
+
+void sub_805A658(s16 *a, s16 *b)
+{
+ *a = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan;
+ *b = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8;
+}
+
+void DrawWholeMapView(void)
+{
+ DrawWholeMapViewInternal(gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y, gMapHeader.mapLayout);
+ // sFieldCameraOffset.copyBGToVRAM = TRUE;
+}
+
+static void DrawWholeMapViewInternal(int x, int y, const struct MapLayout *mapLayout)
+{
+ u8 i;
+ u8 j;
+ u32 r6;
+ u8 temp;
+
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = sFieldCameraOffset.yTileOffset + i;
+ if (temp >= 32)
+ temp -= 32;
+ r6 = temp * 32;
+ for (j = 0; j < 32; j += 2)
+ {
+ temp = sFieldCameraOffset.xTileOffset + j;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapLayout, r6 + temp, x + j / 2, y + i / 2);
+ }
+ }
+}
+
+static void RedrawMapSlicesForCameraUpdate(struct FieldCameraOffset *cameraOffset, int x, int y)
+{
+ const struct MapLayout *mapLayout = gMapHeader.mapLayout;
+
+ if (x > 0)
+ RedrawMapSliceWest(cameraOffset, mapLayout);
+ if (x < 0)
+ RedrawMapSliceEast(cameraOffset, mapLayout);
+ if (y > 0)
+ RedrawMapSliceNorth(cameraOffset, mapLayout);
+ if (y < 0)
+ RedrawMapSliceSouth(cameraOffset, mapLayout);
+ cameraOffset->copyBGToVRAM = TRUE;
+}
+
+static void RedrawMapSliceNorth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout)
+{
+ u8 i;
+ u8 temp;
+ u32 r7;
+
+ temp = cameraOffset->yTileOffset + 28;
+ if (temp >= 32)
+ temp -= 32;
+ r7 = temp * 32;
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = cameraOffset->xTileOffset + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapLayout, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y + 14);
+ }
+}
+
+static void RedrawMapSliceSouth(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout)
+{
+ u8 i;
+ u8 temp;
+ u32 r7 = cameraOffset->yTileOffset * 32;
+
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = cameraOffset->xTileOffset + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapLayout, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y);
+ }
+}
+
+static void RedrawMapSliceEast(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout)
+{
+ u8 i;
+ u8 temp;
+ u32 r6 = cameraOffset->xTileOffset;
+
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = cameraOffset->yTileOffset + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapLayout, temp * 32 + r6, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y + i / 2);
+ }
+}
+
+static void RedrawMapSliceWest(struct FieldCameraOffset *cameraOffset, const struct MapLayout *mapLayout)
+{
+ u8 i;
+ u8 temp;
+ u8 r5 = cameraOffset->xTileOffset + 28;
+
+ if (r5 >= 32)
+ r5 -= 32;
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = cameraOffset->yTileOffset + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapLayout, temp * 32 + r5, gSaveBlock1Ptr->pos.x + 14, gSaveBlock1Ptr->pos.y + i / 2);
+ }
+}
+
+void CurrentMapDrawMetatileAt(int x, int y)
+{
+ int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y);
+
+ if (offset >= 0)
+ {
+ DrawMetatileAt(gMapHeader.mapLayout, offset, x, y);
+ // sFieldCameraOffset.copyBGToVRAM = TRUE;
+ }
+}
+
+void DrawDoorMetatileAt(int x, int y, const u16 *arr)
+{
+ int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y);
+
+ if (offset >= 0)
+ {
+ DrawMetatile(1, arr, offset);
+ // sFieldCameraOffset.copyBGToVRAM = TRUE;
+ }
+}
+
+static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x, int y)
+{
+ u16 metatileId = MapGridGetMetatileIdAt(x, y);
+ u16 *metatiles;
+
+ if (metatileId > NUM_METATILES_TOTAL)
+ metatileId = 0;
+ if (metatileId < NUM_METATILES_IN_PRIMARY)
+ metatiles = mapLayout->primaryTileset->metatiles;
+ else
+ {
+ metatiles = mapLayout->secondaryTileset->metatiles;
+ metatileId -= NUM_METATILES_IN_PRIMARY;
+ }
+ DrawMetatile(MapGridGetMetatileLayerTypeAt(x, y), metatiles + metatileId * 8, offset);
+}
+
+static void DrawMetatile(s32 metatileLayerType, const u16 *metatiles, u16 offset)
+{
+ switch (metatileLayerType)
+ {
+ case 2: // LAYER_TYPE_
+ // Draw metatile's bottom layer to the bottom background layer.
+ gBGTilemapBuffers3[offset] = metatiles[0];
+ gBGTilemapBuffers3[offset + 1] = metatiles[1];
+ gBGTilemapBuffers3[offset + 0x20] = metatiles[2];
+ gBGTilemapBuffers3[offset + 0x21] = metatiles[3];
+
+ // Draw transparent tiles to the middle background layer.
+ gBGTilemapBuffers1[offset] = 0;
+ gBGTilemapBuffers1[offset + 1] = 0;
+ gBGTilemapBuffers1[offset + 0x20] = 0;
+ gBGTilemapBuffers1[offset + 0x21] = 0;
+
+ // Draw metatile's top layer to the top background layer.
+ gBGTilemapBuffers2[offset] = metatiles[4];
+ gBGTilemapBuffers2[offset + 1] = metatiles[5];
+ gBGTilemapBuffers2[offset + 0x20] = metatiles[6];
+ gBGTilemapBuffers2[offset + 0x21] = metatiles[7];
+ break;
+ case 1: // LAYER_TYPE_COVERED_BY_OBJECTS
+ // Draw metatile's bottom layer to the bottom background layer.
+ gBGTilemapBuffers3[offset] = metatiles[0];
+ gBGTilemapBuffers3[offset + 1] = metatiles[1];
+ gBGTilemapBuffers3[offset + 0x20] = metatiles[2];
+ gBGTilemapBuffers3[offset + 0x21] = metatiles[3];
+
+ // Draw metatile's top layer to the middle background layer.
+ gBGTilemapBuffers1[offset] = metatiles[4];
+ gBGTilemapBuffers1[offset + 1] = metatiles[5];
+ gBGTilemapBuffers1[offset + 0x20] = metatiles[6];
+ gBGTilemapBuffers1[offset + 0x21] = metatiles[7];
+
+ // Draw transparent tiles to the top background layer.
+ gBGTilemapBuffers2[offset] = 0;
+ gBGTilemapBuffers2[offset + 1] = 0;
+ gBGTilemapBuffers2[offset + 0x20] = 0;
+ gBGTilemapBuffers2[offset + 0x21] = 0;
+ break;
+ case 0: // LAYER_TYPE_NORMAL
+ // Draw garbage to the bottom background layer.
+ gBGTilemapBuffers3[offset] = 0x3014;
+ gBGTilemapBuffers3[offset + 1] = 0x3014;
+ gBGTilemapBuffers3[offset + 0x20] = 0x3014;
+ gBGTilemapBuffers3[offset + 0x21] = 0x3014;
+
+ // Draw metatile's bottom layer to the middle background layer.
+ gBGTilemapBuffers1[offset] = metatiles[0];
+ gBGTilemapBuffers1[offset + 1] = metatiles[1];
+ gBGTilemapBuffers1[offset + 0x20] = metatiles[2];
+ gBGTilemapBuffers1[offset + 0x21] = metatiles[3];
+
+ // Draw metatile's top layer to the top background layer, which covers object event sprites.
+ gBGTilemapBuffers2[offset] = metatiles[4];
+ gBGTilemapBuffers2[offset + 1] = metatiles[5];
+ gBGTilemapBuffers2[offset + 0x20] = metatiles[6];
+ gBGTilemapBuffers2[offset + 0x21] = metatiles[7];
+ break;
+ }
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
+}
+
+static s32 MapPosToBgTilemapOffset(struct FieldCameraOffset *cameraOffset, s32 x, s32 y)
+{
+ x -= gSaveBlock1Ptr->pos.x;
+ x *= 2;
+ if (x >= 32 || x < 0)
+ return -1;
+ x = x + cameraOffset->xTileOffset;
+ if (x >= 32)
+ x -= 32;
+
+ y = (y - gSaveBlock1Ptr->pos.y) * 2;
+ if (y >= 32 || y < 0)
+ return -1;
+ y = y + cameraOffset->yTileOffset;
+ if (y >= 32)
+ y -= 32;
+
+ return y * 32 + x;
+}
+
+static void CameraUpdateCallback(struct CameraObject *fieldCamera)
+{
+ if (fieldCamera->spriteId != 0)
+ {
+ fieldCamera->movementSpeedX = gSprites[fieldCamera->spriteId].data[2];
+ fieldCamera->movementSpeedY = gSprites[fieldCamera->spriteId].data[3];
+ }
+}
+
+void ResetCameraUpdateInfo(void)
+{
+ gFieldCamera.movementSpeedX = 0;
+ gFieldCamera.movementSpeedY = 0;
+ gFieldCamera.x = 0;
+ gFieldCamera.y = 0;
+ gFieldCamera.spriteId = 0;
+ gFieldCamera.callback = NULL;
+}
+
+u32 InitCameraUpdateCallback(u8 trackedSpriteId)
+{
+ if (gFieldCamera.spriteId != 0)
+ DestroySprite(&gSprites[gFieldCamera.spriteId]);
+ gFieldCamera.spriteId = AddCameraObject(trackedSpriteId);
+ gFieldCamera.callback = CameraUpdateCallback;
+ return 0;
+}
+
+void CameraUpdate(void)
+{
+ int deltaX;
+ int deltaY;
+ int curMovementOffsetY;
+ int curMovementOffsetX;
+ int movementSpeedX;
+ int movementSpeedY;
+
+ if (gFieldCamera.callback != NULL)
+ gFieldCamera.callback(&gFieldCamera);
+ movementSpeedX = gFieldCamera.movementSpeedX;
+ movementSpeedY = gFieldCamera.movementSpeedY;
+ deltaX = 0;
+ deltaY = 0;
+ curMovementOffsetX = gFieldCamera.x;
+ curMovementOffsetY = gFieldCamera.y;
+
+
+ if (curMovementOffsetX == 0 && movementSpeedX != 0)
+ {
+ if (movementSpeedX > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+ if (curMovementOffsetY == 0 && movementSpeedY != 0)
+ {
+ if (movementSpeedY > 0)
+ deltaY = 1;
+ else
+ deltaY = -1;
+ }
+ if (curMovementOffsetX != 0 && curMovementOffsetX == -movementSpeedX)
+ {
+ if (movementSpeedX > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+ if (curMovementOffsetY != 0 && curMovementOffsetY == -movementSpeedY)
+ {
+ if (movementSpeedY > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+
+ gFieldCamera.x += movementSpeedX;
+ gFieldCamera.x = gFieldCamera.x - 16 * (gFieldCamera.x / 16);
+ gFieldCamera.y += movementSpeedY;
+ gFieldCamera.y = gFieldCamera.y - 16 * (gFieldCamera.y / 16);
+
+ if (deltaX != 0 || deltaY != 0)
+ {
+ CameraMove(deltaX, deltaY);
+ UpdateObjectEventsForCameraUpdate(deltaX, deltaY);
+ // RotatingGatePuzzleCameraUpdate(deltaX, deltaY);
+ // ResetBerryTreeSparkleFlags();
+ tilemap_move_something(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
+ RedrawMapSlicesForCameraUpdate(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
+ }
+
+ coords8_add(&sFieldCameraOffset, movementSpeedX, movementSpeedY);
+ gTotalCameraPixelOffsetX -= movementSpeedX;
+ gTotalCameraPixelOffsetY -= movementSpeedY;
+}
+
+void MoveCameraAndRedrawMap(int deltaX, int deltaY) // unused
+{
+ CameraMove(deltaX, deltaY);
+ UpdateObjectEventsForCameraUpdate(deltaX, deltaY);
+ DrawWholeMapView();
+ gTotalCameraPixelOffsetX -= deltaX * 16;
+ gTotalCameraPixelOffsetY -= deltaY * 16;
+}
+
+void sub_805ACF0(void)
+{
+ int deltaX;
+ int deltaY;
+ int curMovementOffsetY;
+ int curMovementOffsetX;
+ int movementSpeedX;
+ int movementSpeedY;
+
+ if (gFieldCamera.callback != NULL)
+ gFieldCamera.callback(&gFieldCamera);
+ movementSpeedX = gFieldCamera.movementSpeedX;
+ movementSpeedY = gFieldCamera.movementSpeedY;
+ deltaX = 0;
+ deltaY = 0;
+ curMovementOffsetX = gFieldCamera.x;
+ curMovementOffsetY = gFieldCamera.y;
+
+
+ if (curMovementOffsetX == 0 && movementSpeedX != 0)
+ {
+ if (movementSpeedX > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+ if (curMovementOffsetY == 0 && movementSpeedY != 0)
+ {
+ if (movementSpeedY > 0)
+ deltaY = 1;
+ else
+ deltaY = -1;
+ }
+ if (curMovementOffsetX != 0 && curMovementOffsetX == -movementSpeedX)
+ {
+ if (movementSpeedX > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+ if (curMovementOffsetY != 0 && curMovementOffsetY == -movementSpeedY)
+ {
+ if (movementSpeedY > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+
+ gFieldCamera.x += movementSpeedX;
+ gFieldCamera.x = gFieldCamera.x - 16 * (gFieldCamera.x / 16);
+ gFieldCamera.y += movementSpeedY;
+ gFieldCamera.y = gFieldCamera.y - 16 * (gFieldCamera.y / 16);
+
+ if (deltaX != 0 || deltaY != 0)
+ {
+ CameraMove(deltaX, deltaY);
+ // UpdateObjectEventsForCameraUpdate(deltaX, deltaY);
+ // RotatingGatePuzzleCameraUpdate(deltaX, deltaY);
+ // ResetBerryTreeSparkleFlags();
+ tilemap_move_something(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
+ RedrawMapSlicesForCameraUpdate(&sFieldCameraOffset, deltaX * 2, deltaY * 2);
+ }
+
+ coords8_add(&sFieldCameraOffset, movementSpeedX, movementSpeedY);
+ // gTotalCameraPixelOffsetX -= movementSpeedX;
+ // gTotalCameraPixelOffsetY -= movementSpeedY;
+}
+
+void SetCameraPanningCallback(void (*a)(void))
+{
+ sFieldCameraPanningCallback = a;
+}
+
+void SetCameraPanning(s16 a, s16 b)
+{
+ sHorizontalCameraPan = a;
+ sVerticalCameraPan = b + 32;
+}
+
+void InstallCameraPanAheadCallback(void)
+{
+ sFieldCameraPanningCallback = CameraPanningCB_PanAhead;
+ gUnknown_3000E9C = 0;
+ sHorizontalCameraPan = 0;
+ sVerticalCameraPan = 32;
+}
+
+void UpdateCameraPanning(void)
+{
+ if (sFieldCameraPanningCallback != NULL)
+ sFieldCameraPanningCallback();
+ // Update sprite offset of overworld objects
+ gSpriteCoordOffsetX = gTotalCameraPixelOffsetX - sHorizontalCameraPan;
+ gSpriteCoordOffsetY = gTotalCameraPixelOffsetY - sVerticalCameraPan - 8;
+}
+
+static void CameraPanningCB_PanAhead(void)
+{
+ u8 var;
+
+ if (gUnusedBikeCameraAheadPanback == FALSE)
+ {
+ InstallCameraPanAheadCallback();
+ }
+ else
+ {
+ // this code is never reached.
+ if (gPlayerAvatar.tileTransitionState == 1)
+ {
+ gUnknown_3000E9C ^= 1;
+ if (gUnknown_3000E9C == 0)
+ return;
+ }
+ else
+ {
+ gUnknown_3000E9C = 0;
+ }
+
+ var = player_get_direction_upper_nybble();
+ if (var == 2)
+ {
+ if (sVerticalCameraPan > -8)
+ sVerticalCameraPan -= 2;
+ }
+ else if (var == 1)
+ {
+ if (sVerticalCameraPan < 72)
+ sVerticalCameraPan += 2;
+ }
+ else if (sVerticalCameraPan < 32)
+ {
+ sVerticalCameraPan += 2;
+ }
+ else if (sVerticalCameraPan > 32)
+ {
+ sVerticalCameraPan -= 2;
+ }
+ }
+}
diff --git a/sym_bss.txt b/sym_bss.txt
index 3b3148efc..0ada68f3e 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -37,22 +37,10 @@ gUnknown_3000E88: @ 3000E88
gUnknown_3000E89: @ 3000E89
.space 0x7
-gUnknown_3000E90: @ 3000E90
- .space 0x8
-
-gUnknown_3000E98: @ 3000E98
- .space 0x2
-
-gUnknown_3000E9A: @ 3000E9A
- .space 0x2
-
-gUnknown_3000E9C: @ 3000E9C
- .space 0x4
-
-gUnknown_3000EA0: @ 3000EA0
- .space 0x8
+ .align 3
+ .include "src/field_camera.o"
- .align 2
+ .align 3
.include "src/script.o"
.align 2
.include "src/start_menu.o"
diff --git a/sym_common.txt b/sym_common.txt
index 37fa1cf7c..2ec8e6188 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -20,13 +20,13 @@
.include "load_save.o"
.align 2
-gUnknown_3005014: @ 3005014
+gBGTilemapBuffers1: @ 3005014
.space 0x4
-gUnknown_3005018: @ 3005018
+gBGTilemapBuffers2: @ 3005018
.space 0x4
-gUnknown_300501C: @ 300501C
+gBGTilemapBuffers3: @ 300501C
.space 0x4
gFieldCallback: @ 3005020
@@ -48,14 +48,7 @@ gFieldLinkPlayerCount: @ 3005030
.include "fieldmap.o"
.align 4
-gUnknown_3005050: @ 3005050
- .space 0x18
-
-gTotalCameraPixelOffsetY: @ 3005068
- .space 0x4
-
-gTotalCameraPixelOffsetX: @ 300506C
- .space 0x4
+ .include "field_camera.o"
.align 2
.include "scrcmd.o"
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 9de1255c2..893c9786e 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -76,11 +76,8 @@ gUnknown_2031DEC: @ 2031DEC
.align 2
.include "src/fieldmap.o"
-
.align 2
- @ .include "src/field_camera.o"
-gUnknown_2036E2C: @ 2036E2C
- .space 0x4
+ .include "src/field_camera.o"
.align 2
@ .include "src/field_player_avatar.o"