summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/fieldmap.s374
-rw-r--r--asm/start_menu.s2
-rw-r--r--asm/tileset_anims.s120
-rw-r--r--include/fieldmap.h8
-rw-r--r--include/global.fieldmap.h2
-rw-r--r--include/global.h3
-rw-r--r--src/fieldmap.c150
-rw-r--r--src/save.c4
-rw-r--r--sym_bss.txt12
9 files changed, 224 insertions, 451 deletions
diff --git a/asm/fieldmap.s b/asm/fieldmap.s
index eb22650e5..5d8562d4a 100644
--- a/asm/fieldmap.s
+++ b/asm/fieldmap.s
@@ -5,378 +5,6 @@
.text
- thumb_func_start sub_8059080
-sub_8059080: @ 8059080
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r3, r1, 16
- adds r5, r3, 0
- lsls r2, 24
- lsrs r2, 24
- adds r6, r2, 0
- ldr r0, _080590A4 @ =0x0000027f
- cmp r3, r0
- bhi _080590A8
- ldr r0, [r4, 0x10]
- ldr r1, [r0, 0x14]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- adds r1, r2, 0
- b _080590C8
- .align 2, 0
-_080590A4: .4byte 0x0000027f
-_080590A8:
- ldr r0, _080590B4 @ =0x000003ff
- cmp r3, r0
- bls _080590B8
- movs r0, 0xFF
- b _080590CC
- .align 2, 0
-_080590B4: .4byte 0x000003ff
-_080590B8:
- ldr r0, [r4, 0x14]
- ldr r1, [r0, 0x14]
- lsls r0, r5, 2
- adds r0, r1
- ldr r1, _080590D4 @ =0xfffff600
- adds r0, r1
- ldr r0, [r0]
- adds r1, r6, 0
-_080590C8:
- bl sub_8058F1C
-_080590CC:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080590D4: .4byte 0xfffff600
- thumb_func_end sub_8059080
-
- thumb_func_start sub_80590D8
-sub_80590D8: @ 80590D8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _08059144 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r1, _08059148 @ =0x00000898
- adds r4, r0, r1
- ldr r0, _0805914C @ =VMap
- ldr r0, [r0]
- mov r8, r0
- ldr r0, _08059150 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r2, 0
- ldrsh r6, [r0, r2]
- movs r1, 0x2
- ldrsh r0, [r0, r1]
- adds r1, r0, 0
- adds r1, 0xE
- cmp r0, r1
- bge _08059138
- mov r12, r1
- ldr r2, _08059154 @ =gBackupMapData
- mov r9, r2
- lsls r7, r6, 1
-_0805910A:
- adds r1, r6, 0
- adds r3, r1, 0
- adds r3, 0xF
- adds r5, r0, 0x1
- cmp r1, r3
- bge _08059132
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- lsls r0, 1
- add r0, r9
- adds r2, r7, r0
- subs r1, r3, r1
-_08059124:
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bne _08059124
-_08059132:
- adds r0, r5, 0
- cmp r0, r12
- blt _0805910A
-_08059138:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08059144: .4byte gSaveBlock2Ptr
-_08059148: .4byte 0x00000898
-_0805914C: .4byte VMap
-_08059150: .4byte gSaveBlock1Ptr
-_08059154: .4byte gBackupMapData
- thumb_func_end sub_80590D8
-
- thumb_func_start sub_8059158
-sub_8059158: @ 8059158
- push {r4,lr}
- movs r2, 0
- movs r1, 0
- ldr r0, _08059184 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r4, _08059188 @ =0x00000898
- adds r3, r0, r4
- ldr r4, _0805918C @ =0x000001ff
-_08059168:
- 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 _08059168
- cmp r2, 0
- beq _08059190
- movs r0, 0
- b _08059192
- .align 2, 0
-_08059184: .4byte gSaveBlock2Ptr
-_08059188: .4byte 0x00000898
-_0805918C: .4byte 0x000001ff
-_08059190:
- movs r0, 0x1
-_08059192:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8059158
-
- thumb_func_start sub_8059198
-sub_8059198: @ 8059198
- push {lr}
- sub sp, 0x4
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r0, _080591B8 @ =gSaveBlock2Ptr
- ldr r1, [r0]
- ldr r0, _080591BC @ =0x00000898
- adds r1, r0
- ldr r2, _080591C0 @ =0x01000100
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080591B8: .4byte gSaveBlock2Ptr
-_080591BC: .4byte 0x00000898
-_080591C0: .4byte 0x01000100
- thumb_func_end sub_8059198
-
- thumb_func_start sub_80591C4
-sub_80591C4: @ 80591C4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _0805923C @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r1, _08059240 @ =0x00000898
- adds r4, r0, r1
- bl sub_8059158
- cmp r0, 0
- bne _08059230
- ldr r0, _08059244 @ =VMap
- ldr r0, [r0]
- mov r8, r0
- ldr r0, _08059248 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r2, 0
- ldrsh r6, [r0, r2]
- movs r1, 0x2
- ldrsh r0, [r0, r1]
- adds r1, r0, 0
- adds r1, 0xE
- cmp r0, r1
- bge _0805922C
- mov r12, r1
- ldr r2, _0805924C @ =gBackupMapData
- mov r9, r2
- lsls r7, r6, 1
-_080591FE:
- adds r1, r6, 0
- adds r3, r1, 0
- adds r3, 0xF
- adds r5, r0, 0x1
- cmp r1, r3
- bge _08059226
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- lsls r0, 1
- add r0, r9
- adds r2, r7, r0
- subs r1, r3, r1
-_08059218:
- ldrh r0, [r4]
- strh r0, [r2]
- adds r4, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bne _08059218
-_08059226:
- adds r0, r5, 0
- cmp r0, r12
- blt _080591FE
-_0805922C:
- bl sub_8059198
-_08059230:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805923C: .4byte gSaveBlock2Ptr
-_08059240: .4byte 0x00000898
-_08059244: .4byte VMap
-_08059248: .4byte gSaveBlock1Ptr
-_0805924C: .4byte gBackupMapData
- thumb_func_end sub_80591C4
-
- thumb_func_start sub_8059250
-sub_8059250: @ 8059250
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- ldr r0, _0805929C @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r3, _080592A0 @ =0x00000898
- adds r3, r0, r3
- str r3, [sp, 0x4]
- ldr r0, _080592A4 @ =VMap
- ldr r0, [r0]
- str r0, [sp]
- movs r4, 0
- mov r9, r4
- mov r8, r4
- ldr r0, _080592A8 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r3, 0
- ldrsh r6, [r0, r3]
- str r6, [sp, 0x8]
- movs r4, 0x2
- ldrsh r5, [r0, r4]
- movs r7, 0xF
- movs r6, 0xE
- mov r12, r6
- cmp r1, 0x2
- beq _080592B6
- cmp r1, 0x2
- bgt _080592AC
- cmp r1, 0x1
- beq _080592BE
- b _080592D6
- .align 2, 0
-_0805929C: .4byte gSaveBlock2Ptr
-_080592A0: .4byte 0x00000898
-_080592A4: .4byte VMap
-_080592A8: .4byte gSaveBlock1Ptr
-_080592AC:
- cmp r2, 0x3
- beq _080592C8
- cmp r2, 0x4
- beq _080592D0
- b _080592D6
-_080592B6:
- adds r5, 0x1
- movs r0, 0xD
- mov r12, r0
- b _080592D6
-_080592BE:
- movs r1, 0x1
- mov r8, r1
- movs r3, 0xD
- mov r12, r3
- b _080592D6
-_080592C8:
- ldr r4, [sp, 0x8]
- adds r4, 0x1
- str r4, [sp, 0x8]
- b _080592D4
-_080592D0:
- movs r6, 0x1
- mov r9, r6
-_080592D4:
- movs r7, 0xE
-_080592D6:
- movs r1, 0
- cmp r1, r12
- bge _0805931A
- ldr r0, _08059330 @ =gBackupMapData
- mov r10, r0
-_080592E0:
- adds r4, r1, 0x1
- cmp r7, 0
- beq _08059314
- 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
-_08059306:
- ldrh r0, [r1]
- strh r0, [r2]
- adds r1, 0x2
- adds r2, 0x2
- subs r3, 0x1
- cmp r3, 0
- bne _08059306
-_08059314:
- adds r1, r4, 0
- cmp r1, r12
- blt _080592E0
-_0805931A:
- bl sub_8059198
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08059330: .4byte gBackupMapData
- thumb_func_end sub_8059250
-
thumb_func_start sub_8059334
sub_8059334: @ 8059334
push {r4-r7,lr}
@@ -686,7 +314,7 @@ CameraMove: @ 8059530
_08059570: .4byte gUnknown_2036E18
_08059574: .4byte gSaveBlock1Ptr
_08059578:
- bl sub_80590D8
+ bl save_serialize_map
ldr r1, _080595F8 @ =gSaveBlock1Ptr
ldr r0, [r1]
movs r2, 0
diff --git a/asm/start_menu.s b/asm/start_menu.s
index 4a58b11ad..cfd970001 100644
--- a/asm/start_menu.s
+++ b/asm/start_menu.s
@@ -1109,7 +1109,7 @@ _0806F61E:
thumb_func_start sub_806F624
sub_806F624: @ 806F624
push {lr}
- bl sub_80590D8
+ bl save_serialize_map
ldr r1, _0806F63C @ =gUnknown_3000FA4
ldr r0, _0806F640 @ =sub_806F7A8
str r0, [r1]
diff --git a/asm/tileset_anims.s b/asm/tileset_anims.s
index 37280ab70..693962d39 100644
--- a/asm/tileset_anims.s
+++ b/asm/tileset_anims.s
@@ -132,11 +132,11 @@ sub_806FFB0: @ 806FFB0
sub_806FFBC: @ 806FFBC
push {r4,lr}
bl ResetTilesetAnimBuffer
- ldr r2, _08070014 @ =gUnknown_3000FAE
+ ldr r2, _08070014 @ =sPrimaryTilesetCBCounter
ldrh r0, [r2]
adds r0, 0x1
strh r0, [r2]
- ldr r1, _08070018 @ =gUnknown_3000FB0
+ ldr r1, _08070018 @ =sPrimaryTilesetCBBufferSize
lsls r0, 16
lsrs r0, 16
ldrh r1, [r1]
@@ -145,11 +145,11 @@ sub_806FFBC: @ 806FFBC
movs r0, 0
strh r0, [r2]
_0806FFDA:
- ldr r4, _0807001C @ =gUnknown_3000FB2
+ ldr r4, _0807001C @ =sSecondaryTilesetCBCounter
ldrh r0, [r4]
adds r0, 0x1
strh r0, [r4]
- ldr r1, _08070020 @ =gUnknown_3000FB4
+ ldr r1, _08070020 @ =sSecondaryTilesetCBBufferSize
lsls r0, 16
lsrs r0, 16
ldrh r1, [r1]
@@ -158,14 +158,14 @@ _0806FFDA:
movs r0, 0
strh r0, [r4]
_0806FFF2:
- ldr r0, _08070024 @ =gUnknown_3000FB8
+ ldr r0, _08070024 @ =sPrimaryTilesetCB
ldr r1, [r0]
cmp r1, 0
beq _08070000
ldrh r0, [r2]
bl _call_via_r1
_08070000:
- ldr r0, _08070028 @ =gUnknown_3000FBC
+ ldr r0, _08070028 @ =sSecondaryTilesetCB
ldr r1, [r0]
cmp r1, 0
beq _0807000E
@@ -176,23 +176,23 @@ _0807000E:
pop {r0}
bx r0
.align 2, 0
-_08070014: .4byte gUnknown_3000FAE
-_08070018: .4byte gUnknown_3000FB0
-_0807001C: .4byte gUnknown_3000FB2
-_08070020: .4byte gUnknown_3000FB4
-_08070024: .4byte gUnknown_3000FB8
-_08070028: .4byte gUnknown_3000FBC
+_08070014: .4byte sPrimaryTilesetCBCounter
+_08070018: .4byte sPrimaryTilesetCBBufferSize
+_0807001C: .4byte sSecondaryTilesetCBCounter
+_08070020: .4byte sSecondaryTilesetCBBufferSize
+_08070024: .4byte sPrimaryTilesetCB
+_08070028: .4byte sSecondaryTilesetCB
thumb_func_end sub_806FFBC
thumb_func_start cur_mapheader_run_tileset1_func
cur_mapheader_run_tileset1_func: @ 807002C
push {lr}
- ldr r0, _08070058 @ =gUnknown_3000FAE
+ ldr r0, _08070058 @ =sPrimaryTilesetCBCounter
movs r1, 0
strh r1, [r0]
- ldr r0, _0807005C @ =gUnknown_3000FB0
+ ldr r0, _0807005C @ =sPrimaryTilesetCBBufferSize
strh r1, [r0]
- ldr r1, _08070060 @ =gUnknown_3000FB8
+ ldr r1, _08070060 @ =sPrimaryTilesetCB
movs r0, 0
str r0, [r1]
ldr r0, _08070064 @ =gMapHeader
@@ -208,21 +208,21 @@ _08070052:
pop {r0}
bx r0
.align 2, 0
-_08070058: .4byte gUnknown_3000FAE
-_0807005C: .4byte gUnknown_3000FB0
-_08070060: .4byte gUnknown_3000FB8
+_08070058: .4byte sPrimaryTilesetCBCounter
+_0807005C: .4byte sPrimaryTilesetCBBufferSize
+_08070060: .4byte sPrimaryTilesetCB
_08070064: .4byte gMapHeader
thumb_func_end cur_mapheader_run_tileset1_func
thumb_func_start cur_mapheader_run_tileset2_func
cur_mapheader_run_tileset2_func: @ 8070068
push {lr}
- ldr r0, _08070094 @ =gUnknown_3000FB2
+ ldr r0, _08070094 @ =sSecondaryTilesetCBCounter
movs r1, 0
strh r1, [r0]
- ldr r0, _08070098 @ =gUnknown_3000FB4
+ ldr r0, _08070098 @ =sSecondaryTilesetCBBufferSize
strh r1, [r0]
- ldr r1, _0807009C @ =gUnknown_3000FBC
+ ldr r1, _0807009C @ =sSecondaryTilesetCB
movs r0, 0
str r0, [r1]
ldr r0, _080700A0 @ =gMapHeader
@@ -238,9 +238,9 @@ _0807008E:
pop {r0}
bx r0
.align 2, 0
-_08070094: .4byte gUnknown_3000FB2
-_08070098: .4byte gUnknown_3000FB4
-_0807009C: .4byte gUnknown_3000FBC
+_08070094: .4byte sSecondaryTilesetCBCounter
+_08070098: .4byte sSecondaryTilesetCBBufferSize
+_0807009C: .4byte sSecondaryTilesetCB
_080700A0: .4byte gMapHeader
thumb_func_end cur_mapheader_run_tileset2_func
@@ -342,22 +342,22 @@ _0807014C:
thumb_func_start sub_8070154
sub_8070154: @ 8070154
- ldr r1, _0807016C @ =gUnknown_3000FAE
+ ldr r1, _0807016C @ =sPrimaryTilesetCBCounter
movs r0, 0
strh r0, [r1]
- ldr r1, _08070170 @ =gUnknown_3000FB0
+ ldr r1, _08070170 @ =sPrimaryTilesetCBBufferSize
movs r2, 0xA0
lsls r2, 2
adds r0, r2, 0
strh r0, [r1]
- ldr r1, _08070174 @ =gUnknown_3000FB8
+ ldr r1, _08070174 @ =sPrimaryTilesetCB
ldr r0, _08070178 @ =sub_8070120
str r0, [r1]
bx lr
.align 2, 0
-_0807016C: .4byte gUnknown_3000FAE
-_08070170: .4byte gUnknown_3000FB0
-_08070174: .4byte gUnknown_3000FB8
+_0807016C: .4byte sPrimaryTilesetCBCounter
+_08070170: .4byte sPrimaryTilesetCBBufferSize
+_08070174: .4byte sPrimaryTilesetCB
_08070178: .4byte sub_8070120
thumb_func_end sub_8070154
@@ -410,20 +410,20 @@ _080701D0:
thumb_func_start sub_80701D8
sub_80701D8: @ 80701D8
- ldr r1, _080701EC @ =gUnknown_3000FB2
+ ldr r1, _080701EC @ =sSecondaryTilesetCBCounter
movs r0, 0
strh r0, [r1]
- ldr r1, _080701F0 @ =gUnknown_3000FB4
+ ldr r1, _080701F0 @ =sSecondaryTilesetCBBufferSize
movs r0, 0x78
strh r0, [r1]
- ldr r1, _080701F4 @ =gUnknown_3000FBC
+ ldr r1, _080701F4 @ =sSecondaryTilesetCB
ldr r0, _080701F8 @ =sub_80701AC
str r0, [r1]
bx lr
.align 2, 0
-_080701EC: .4byte gUnknown_3000FB2
-_080701F0: .4byte gUnknown_3000FB4
-_080701F4: .4byte gUnknown_3000FBC
+_080701EC: .4byte sSecondaryTilesetCBCounter
+_080701F0: .4byte sSecondaryTilesetCBBufferSize
+_080701F4: .4byte sSecondaryTilesetCB
_080701F8: .4byte sub_80701AC
thumb_func_end sub_80701D8
@@ -474,20 +474,20 @@ _08070248:
thumb_func_start sub_8070250
sub_8070250: @ 8070250
- ldr r1, _08070264 @ =gUnknown_3000FB2
+ ldr r1, _08070264 @ =sSecondaryTilesetCBCounter
movs r0, 0
strh r0, [r1]
- ldr r1, _08070268 @ =gUnknown_3000FB4
+ ldr r1, _08070268 @ =sSecondaryTilesetCBBufferSize
movs r0, 0xA0
strh r0, [r1]
- ldr r1, _0807026C @ =gUnknown_3000FBC
+ ldr r1, _0807026C @ =sSecondaryTilesetCB
ldr r0, _08070270 @ =sub_8070224
str r0, [r1]
bx lr
.align 2, 0
-_08070264: .4byte gUnknown_3000FB2
-_08070268: .4byte gUnknown_3000FB4
-_0807026C: .4byte gUnknown_3000FBC
+_08070264: .4byte sSecondaryTilesetCBCounter
+_08070268: .4byte sSecondaryTilesetCBBufferSize
+_0807026C: .4byte sSecondaryTilesetCB
_08070270: .4byte sub_8070224
thumb_func_end sub_8070250
@@ -531,22 +531,22 @@ _080702B0:
thumb_func_start sub_80702B4
sub_80702B4: @ 80702B4
- ldr r1, _080702CC @ =gUnknown_3000FB2
+ ldr r1, _080702CC @ =sSecondaryTilesetCBCounter
movs r0, 0
strh r0, [r1]
- ldr r1, _080702D0 @ =gUnknown_3000FB4
+ ldr r1, _080702D0 @ =sSecondaryTilesetCBBufferSize
movs r2, 0x80
lsls r2, 1
adds r0, r2, 0
strh r0, [r1]
- ldr r1, _080702D4 @ =gUnknown_3000FBC
+ ldr r1, _080702D4 @ =sSecondaryTilesetCB
ldr r0, _080702D8 @ =sub_807029C
str r0, [r1]
bx lr
.align 2, 0
-_080702CC: .4byte gUnknown_3000FB2
-_080702D0: .4byte gUnknown_3000FB4
-_080702D4: .4byte gUnknown_3000FBC
+_080702CC: .4byte sSecondaryTilesetCBCounter
+_080702D0: .4byte sSecondaryTilesetCBBufferSize
+_080702D4: .4byte sSecondaryTilesetCB
_080702D8: .4byte sub_807029C
thumb_func_end sub_80702B4
@@ -589,20 +589,20 @@ _08070318:
thumb_func_start sub_807031C
sub_807031C: @ 807031C
- ldr r1, _08070330 @ =gUnknown_3000FB2
+ ldr r1, _08070330 @ =sSecondaryTilesetCBCounter
movs r0, 0
strh r0, [r1]
- ldr r1, _08070334 @ =gUnknown_3000FB4
+ ldr r1, _08070334 @ =sSecondaryTilesetCBBufferSize
movs r0, 0xF0
strh r0, [r1]
- ldr r1, _08070338 @ =gUnknown_3000FBC
+ ldr r1, _08070338 @ =sSecondaryTilesetCB
ldr r0, _0807033C @ =sub_8070304
str r0, [r1]
bx lr
.align 2, 0
-_08070330: .4byte gUnknown_3000FB2
-_08070334: .4byte gUnknown_3000FB4
-_08070338: .4byte gUnknown_3000FBC
+_08070330: .4byte sSecondaryTilesetCBCounter
+_08070334: .4byte sSecondaryTilesetCBBufferSize
+_08070338: .4byte sSecondaryTilesetCB
_0807033C: .4byte sub_8070304
thumb_func_end sub_807031C
@@ -645,22 +645,22 @@ _0807037C:
thumb_func_start sub_8070380
sub_8070380: @ 8070380
- ldr r1, _08070398 @ =gUnknown_3000FB2
+ ldr r1, _08070398 @ =sSecondaryTilesetCBCounter
movs r0, 0
strh r0, [r1]
- ldr r1, _0807039C @ =gUnknown_3000FB4
+ ldr r1, _0807039C @ =sSecondaryTilesetCBBufferSize
movs r2, 0x80
lsls r2, 1
adds r0, r2, 0
strh r0, [r1]
- ldr r1, _080703A0 @ =gUnknown_3000FBC
+ ldr r1, _080703A0 @ =sSecondaryTilesetCB
ldr r0, _080703A4 @ =sub_8070368
str r0, [r1]
bx lr
.align 2, 0
-_08070398: .4byte gUnknown_3000FB2
-_0807039C: .4byte gUnknown_3000FB4
-_080703A0: .4byte gUnknown_3000FBC
+_08070398: .4byte sSecondaryTilesetCBCounter
+_0807039C: .4byte sSecondaryTilesetCBBufferSize
+_080703A0: .4byte sSecondaryTilesetCB
_080703A4: .4byte sub_8070368
thumb_func_end sub_8070380
diff --git a/include/fieldmap.h b/include/fieldmap.h
index e6a1e944a..38f1d30d0 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -3,6 +3,12 @@
#include "global.h"
+#define NUM_TILES_IN_PRIMARY 512
+#define NUM_TILES_TOTAL 1024
+#define NUM_METATILES_IN_PRIMARY 512
+#define NUM_METATILES_TOTAL 1024
+#define NUM_PALS_IN_PRIMARY 6
+#define NUM_PALS_TOTAL 13
#define VIRTUAL_MAP_SIZE 0x2800
extern struct MapCoords {
@@ -18,6 +24,6 @@ void GetCameraCoords(u16*, u16*);
bool8 MapGridIsImpassableAt(s32, s32);
s32 GetMapBorderIdAt(s16, s16);
bool32 CanCameraMoveInDirection(u8);
-u16 GetBehaviorByMetatileId(u16 metatileId);
+u32 GetBehaviorByMetatileIdAndMapData(struct MapData *mapData, u16 metatile, u8 attr);
#endif //GUARD_FIELDMAP_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index c7a55fd02..b602741a6 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -51,8 +51,8 @@ struct Tileset
/*0x04*/ void *tiles;
/*0x08*/ void *palettes;
/*0x0c*/ void *metatiles;
- /*0x10*/ void *metatileAttributes;
/*0x14*/ TilesetCB callback;
+ /*0x10*/ void *metatileAttributes;
};
struct MapData
diff --git a/include/global.h b/include/global.h
index f418ff757..26ce4a8cc 100644
--- a/include/global.h
+++ b/include/global.h
@@ -328,7 +328,8 @@ struct SaveBlock2
/*0x0AC*/ u8 filler_AC[0x3F4];
/*0x4A0*/ u32 unk_4A0[0x2F];
/*0x55c*/ struct UnkSaveBlock2Substruct_55C unk_55C;
- /*0x574*/ u8 filler_574[0x524];
+ /*0x574*/ u8 filler_574[0x324];
+ /*0x898*/ u16 mapView[0x100];
/*0xA98*/ struct LinkBattleRecords linkBattleRecords;
/*0xAF0*/ struct BerryCrush berryCrush;
/*0xB00*/ u8 filler_B00[0x420];
diff --git a/src/fieldmap.c b/src/fieldmap.c
index c0926ffad..4193ece97 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -18,8 +18,7 @@ void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader con
void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
-u32 sub_8059080(struct MapData *mapData, u16 metatileId, u8 z);
-void sub_80591C4(void);
+void LoadSavedMapView(void);
struct BackupMapData VMap;
EWRAM_DATA u16 gBackupMapData[VIRTUAL_MAP_SIZE] = {};
@@ -64,7 +63,7 @@ void not_trainer_hill_battle_pyramid(void)
void sub_80589E8(void)
{
sub_8058A00(&gMapHeader);
- sub_80591C4();
+ LoadSavedMapView();
mapheader_run_script_with_tag_x1();
}
@@ -453,7 +452,7 @@ u32 sub_8058F1C(u32 original, u8 bit)
u32 sub_8058F48(s16 x, s16 y, u8 z)
{
u16 metatileId = MapGridGetMetatileIdAt(x, y);
- return sub_8059080(gMapHeader.mapData, metatileId, z);
+ return GetBehaviorByMetatileIdAndMapData(gMapHeader.mapData, metatileId, z);
}
u32 MapGridGetMetatileBehaviorAt(s32 x, s32 y)
@@ -468,7 +467,7 @@ u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y)
void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile)
{
- int i;
+ s32 i;
if (x >= 0 && x < VMap.Xsize
&& y >= 0 && y < VMap.Ysize)
{
@@ -479,7 +478,7 @@ void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile)
void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatile)
{
- int i;
+ s32 i;
if (x >= 0 && x < VMap.Xsize
&& y >= 0 && y < VMap.Ysize)
{
@@ -503,3 +502,142 @@ void sub_8059024(s32 x, s32 y, bool32 arg2)
}
}
}
+
+u32 GetBehaviorByMetatileIdAndMapData(struct MapData *mapData, u16 metatile, u8 attr)
+{
+ u32 * attributes;
+
+ if (metatile < 0x280)
+ {
+ attributes = mapData->primaryTileset->metatileAttributes;
+ return sub_8058F1C(attributes[metatile], attr);
+ }
+ else if (metatile < 0x400)
+ {
+ attributes = mapData->secondaryTileset->metatileAttributes;
+ return sub_8058F1C(attributes[metatile - 0x280], attr);
+ }
+ else
+ {
+ return 0xFF;
+ }
+}
+
+void save_serialize_map(void)
+{
+ s32 i, j;
+ s32 x, y;
+ u16 *mapView;
+ s32 width;
+ mapView = gSaveBlock2Ptr->mapView;
+ width = VMap.Xsize;
+ x = gSaveBlock1Ptr->pos.x;
+ y = gSaveBlock1Ptr->pos.y;
+ for (i = y; i < y + 14; i++)
+ {
+ for (j = x; j < x + 15; j++)
+ {
+ *mapView++ = gBackupMapData[width * i + j];
+ }
+ }
+}
+
+bool32 SavedMapViewIsEmpty(void)
+{
+ u16 i;
+ u32 marker = 0;
+
+ // BUG: This loop extends past the bounds of the mapView array. Its size is only 0x100.
+ for (i = 0; i < 0x200; i++)
+ marker |= gSaveBlock2Ptr->mapView[i];
+
+ if (marker == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void ClearSavedMapView(void)
+{
+ CpuFill16(0, gSaveBlock2Ptr->mapView, sizeof(gSaveBlock2Ptr->mapView));
+}
+
+void LoadSavedMapView(void)
+{
+ s32 i, j;
+ s32 x, y;
+ u16 *mapView;
+ s32 width;
+ mapView = gSaveBlock2Ptr->mapView;
+ if (!SavedMapViewIsEmpty())
+ {
+ width = VMap.Xsize;
+ x = gSaveBlock1Ptr->pos.x;
+ y = gSaveBlock1Ptr->pos.y;
+ for (i = y; i < y + 14; i++)
+ {
+ for (j = x; j < x + 15; j++)
+ {
+ gBackupMapData[j + width * i] = *mapView;
+ mapView++;
+ }
+ }
+ ClearSavedMapView();
+ }
+}
+
+void sub_8059250(u8 a1)
+{
+ s32 width;
+ u16 *mapView;
+ s32 x0, y0;
+ s32 x2, y2;
+ u16 *src, *dest;
+ s32 srci, desti;
+ s32 r9, r8;
+ s32 x, y;
+ s32 i, j;
+ mapView = gSaveBlock2Ptr->mapView;
+ width = VMap.Xsize;
+ r9 = 0;
+ r8 = 0;
+ x0 = gSaveBlock1Ptr->pos.x;
+ y0 = gSaveBlock1Ptr->pos.y;
+ x2 = 15;
+ y2 = 14;
+ switch (a1)
+ {
+ case CONNECTION_NORTH:
+ y0 += 1;
+ y2 = 13;
+ break;
+ case CONNECTION_SOUTH:
+ r8 = 1;
+ y2 = 13;
+ break;
+ case CONNECTION_WEST:
+ x0 += 1;
+ x2 = 14;
+ break;
+ case CONNECTION_EAST:
+ r9 = 1;
+ x2 = 14;
+ break;
+ }
+ for (y = 0; y < y2; y++)
+ {
+ i = 0;
+ j = 0;
+ for (x = 0; x < x2; x++)
+ {
+ desti = width * (y + y0);
+ srci = (y + r8) * 15 + r9;
+ src = &mapView[srci + i];
+ dest = &gBackupMapData[x0 + desti + j];
+ *dest = *src;
+ i++;
+ j++;
+ }
+ }
+ ClearSavedMapView();
+}
diff --git a/src/save.c b/src/save.c
index ef38d8b17..761e3c92d 100644
--- a/src/save.c
+++ b/src/save.c
@@ -69,7 +69,7 @@ const struct SaveSectionOffsets gSaveSectionOffsets[] =
extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen
extern void sub_800AB9C(void); // link
extern bool8 sub_800A4BC(void); // link
-extern void sub_80590D8(void); // fieldmap
+extern void save_serialize_map(void); // fieldmap
extern void sub_804C1C0(void); // load_save
extern void sav2_gender2_inplace_and_xFE(void); // load_save
@@ -867,7 +867,7 @@ void sub_80DA634(u8 taskId)
case 2:
if (sub_800A4BC())
{
- sub_80590D8();
+ save_serialize_map();
gTasks[taskId].data[0] = 3;
}
break;
diff --git a/sym_bss.txt b/sym_bss.txt
index 20d8d561d..529460f3e 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -111,22 +111,22 @@ gUnknown_3000FA9: @ 3000FA9
gUnknown_3000FAC: @ 3000FAC
.space 0x2
-gUnknown_3000FAE: @ 3000FAE
+sPrimaryTilesetCBCounter: @ 3000FAE
.space 0x2
-gUnknown_3000FB0: @ 3000FB0
+sPrimaryTilesetCBBufferSize: @ 3000FB0
.space 0x2
-gUnknown_3000FB2: @ 3000FB2
+sSecondaryTilesetCBCounter: @ 3000FB2
.space 0x2
-gUnknown_3000FB4: @ 3000FB4
+sSecondaryTilesetCBBufferSize: @ 3000FB4
.space 0x4
-gUnknown_3000FB8: @ 3000FB8
+sPrimaryTilesetCB: @ 3000FB8
.space 0x4
-gUnknown_3000FBC: @ 3000FBC
+sSecondaryTilesetCB: @ 3000FBC
.space 0x4
.include "src/sound.o"