summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2019-01-07 15:02:57 -0500
committerscnorton <scnorton@biociphers.org>2019-01-07 15:02:57 -0500
commitb4f57a6c265af82f7ae222a5ae2d66450aea512c (patch)
treea0e79ec252c4620f3706b72efe79383792e225d4
parent9aab26afa5315c32f83ae7f40e19c9053d602089 (diff)
through sub_8059024
-rw-r--r--asm/field_camera.s2
-rw-r--r--asm/fieldmap.s202
-rw-r--r--asm/shop.s2
-rw-r--r--data/fieldmap.s9
-rw-r--r--src/fieldmap.c157
5 files changed, 123 insertions, 249 deletions
diff --git a/asm/field_camera.s b/asm/field_camera.s
index 3d0ed4ba7..5541c6472 100644
--- a/asm/field_camera.s
+++ b/asm/field_camera.s
@@ -557,7 +557,7 @@ _0805A98C:
asrs r0, 16
lsls r1, r7, 16
asrs r1, 16
- bl sub_8058F8C
+ bl MapGridGetMetatileLayerTypeAt
lsls r0, 24
lsrs r0, 24
lsls r1, r4, 4
diff --git a/asm/fieldmap.s b/asm/fieldmap.s
index 035a601dd..eb22650e5 100644
--- a/asm/fieldmap.s
+++ b/asm/fieldmap.s
@@ -5,208 +5,6 @@
.text
- thumb_func_start sub_8058F1C
-sub_8058F1C: @ 8058F1C
- push {lr}
- adds r2, r0, 0
- lsls r1, 24
- lsrs r3, r1, 24
- cmp r3, 0x7
- bhi _08058F3A
- ldr r1, _08058F40 @ =gUnknown_8352EF0
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- ldr r0, _08058F44 @ =gUnknown_8352F10
- adds r0, r3, r0
- ldrb r0, [r0]
- lsrs r2, r0
-_08058F3A:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08058F40: .4byte gUnknown_8352EF0
-_08058F44: .4byte gUnknown_8352F10
- thumb_func_end sub_8058F1C
-
- thumb_func_start sub_8058F48
-sub_8058F48: @ 8058F48
- push {r4,lr}
- adds r4, r2, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileIdAt
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, _08058F74 @ =gMapHeader
- ldr r0, [r0]
- adds r2, r4, 0
- bl sub_8059080
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08058F74: .4byte gMapHeader
- thumb_func_end sub_8058F48
-
- thumb_func_start MapGridGetMetatileBehaviorAt
-MapGridGetMetatileBehaviorAt: @ 8058F78
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- movs r2, 0
- bl sub_8058F48
- pop {r1}
- bx r1
- thumb_func_end MapGridGetMetatileBehaviorAt
-
- thumb_func_start sub_8058F8C
-sub_8058F8C: @ 8058F8C
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x6
- bl sub_8058F48
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8058F8C
-
- thumb_func_start MapGridSetMetatileIdAt
-MapGridSetMetatileIdAt: @ 8058FA4
- push {r4,r5,lr}
- adds r3, r0, 0
- lsls r2, 16
- lsrs r5, r2, 16
- cmp r3, 0
- blt _08058FDC
- ldr r2, _08058FE4 @ =VMap
- ldr r4, [r2]
- cmp r3, r4
- bge _08058FDC
- cmp r1, 0
- blt _08058FDC
- ldr r0, [r2, 0x4]
- cmp r1, r0
- bge _08058FDC
- 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, _08058FE8 @ =0x00000fff
- ands r0, r5
- orrs r2, r0
- strh r2, [r1]
-_08058FDC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08058FE4: .4byte VMap
-_08058FE8: .4byte 0x00000fff
- thumb_func_end MapGridSetMetatileIdAt
-
- thumb_func_start MapGridSetMetatileEntryAt
-MapGridSetMetatileEntryAt: @ 8058FEC
- push {r4,r5,lr}
- adds r3, r0, 0
- lsls r2, 16
- lsrs r5, r2, 16
- cmp r3, 0
- blt _08059018
- ldr r2, _08059020 @ =VMap
- ldr r4, [r2]
- cmp r3, r4
- bge _08059018
- cmp r1, 0
- blt _08059018
- ldr r0, [r2, 0x4]
- cmp r1, r0
- bge _08059018
- adds r0, r4, 0
- muls r0, r1
- adds r0, r3, r0
- ldr r1, [r2, 0x8]
- lsls r0, 1
- adds r0, r1
- strh r5, [r0]
-_08059018:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08059020: .4byte VMap
- thumb_func_end MapGridSetMetatileEntryAt
-
- thumb_func_start sub_8059024
-sub_8059024: @ 8059024
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r3, r1, 0
- adds r5, r2, 0
- cmp r4, 0
- blt _08059076
- ldr r2, _08059060 @ =VMap
- ldr r1, [r2]
- cmp r4, r1
- bge _08059076
- cmp r3, 0
- blt _08059076
- ldr r0, [r2, 0x4]
- cmp r3, r0
- bge _08059076
- cmp r5, 0
- beq _08059064
- 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 _08059076
- .align 2, 0
-_08059060: .4byte VMap
-_08059064:
- muls r1, r3
- adds r1, r4, r1
- ldr r0, [r2, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r2, [r1]
- ldr r0, _0805907C @ =0x0000f3ff
- ands r0, r2
- strh r0, [r1]
-_08059076:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805907C: .4byte 0x0000f3ff
- thumb_func_end sub_8059024
-
thumb_func_start sub_8059080
sub_8059080: @ 8059080
push {r4-r6,lr}
diff --git a/asm/shop.s b/asm/shop.s
index 91bbf195c..aed90ff85 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -1645,7 +1645,7 @@ _0809B7B2:
adds r1, r7, r1
lsls r1, 16
asrs r1, 16
- bl sub_8058F8C
+ bl MapGridGetMetatileLayerTypeAt
lsls r0, 24
lsrs r3, r0, 24
ldr r0, _0809B808 @ =0x0000027f
diff --git a/data/fieldmap.s b/data/fieldmap.s
index 8b58a6043..3b24a4f86 100644
--- a/data/fieldmap.s
+++ b/data/fieldmap.s
@@ -4,12 +4,3 @@
gUnknown_8352754:: @ 8352754
.incbin "baserom.gba", 0x352754, 0x798
-
-sDummyConnectionFlags:: @ 8352EEC
- .4byte 0
-
-gUnknown_8352EF0:: @ 8352EF0
- .incbin "baserom.gba", 0x352EF0, 0x20
-
-gUnknown_8352F10:: @ 8352F10
- .incbin "baserom.gba", 0x352F10, 0x8
diff --git a/src/fieldmap.c b/src/fieldmap.c
index de29efe56..c0926ffad 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -18,6 +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);
struct BackupMapData VMap;
@@ -25,7 +26,29 @@ EWRAM_DATA u16 gBackupMapData[VIRTUAL_MAP_SIZE] = {};
EWRAM_DATA struct MapHeader gMapHeader = {};
EWRAM_DATA struct ConnectionFlags gMapConnectionFlags = {};
-extern const struct ConnectionFlags sDummyConnectionFlags;
+const struct ConnectionFlags sDummyConnectionFlags = {};
+
+const u32 gUnknown_8352EF0[] = {
+ 0x1ff,
+ 0x3e00,
+ 0x3c000,
+ 0xfc0000,
+ 0x7000000,
+ 0x18000000,
+ 0x60000000,
+ 0x80000000
+};
+
+const u8 gUnknown_8352F10[] = {
+ 0,
+ 9,
+ 14,
+ 18,
+ 24,
+ 27,
+ 29,
+ 31
+};
const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * connection)
{
@@ -334,43 +357,43 @@ union Block
u16 value;
};
-#define MapGridGetBorderTileAt(x, y) ({ \
- u16 block; \
- s32 xprime; \
- s32 yprime; \
- \
- struct MapData *mapData = gMapHeader.mapData; \
- \
- xprime = x - 7; \
- xprime += 8 * mapData->unk18; \
- xprime %= mapData->unk18; \
- \
- yprime = y - 7; \
- yprime += 8 * mapData->unk19; \
- yprime %= mapData->unk19; \
- \
- block = mapData->border[xprime + yprime * mapData->unk18]; \
- block |= 0xC00; \
- block; \
+#define MapGridGetBorderTileAt(x, y) ({ \
+ u16 block; \
+ s32 xprime; \
+ s32 yprime; \
+ \
+ struct MapData *mapData = gMapHeader.mapData; \
+ \
+ xprime = x - 7; \
+ xprime += 8 * mapData->unk18; \
+ xprime %= mapData->unk18; \
+ \
+ yprime = y - 7; \
+ yprime += 8 * mapData->unk19; \
+ yprime %= mapData->unk19; \
+ \
+ block = mapData->border[xprime + yprime * mapData->unk18]; \
+ block |= 0xC00; \
+ block; \
})
-#define MapGridGetBorderTileAt2(x, y) ({ \
- u16 block; \
- s32 xprime; \
- s32 yprime; \
- \
- struct MapData *mapData = gMapHeader.mapData; \
- \
- xprime = x - 7; \
- xprime += 8 * mapData->unk18; \
- xprime %= mapData->unk18; \
- \
- yprime = y - 7; \
- yprime += 8 * mapData->unk19; \
- yprime %= mapData->unk19; \
- \
- block = mapData->border[xprime + yprime * mapData->unk18] | 0xC00; \
- block; \
+#define MapGridGetBorderTileAt2(x, y) ({ \
+ u16 block; \
+ s32 xprime; \
+ s32 yprime; \
+ \
+ struct MapData *mapData = gMapHeader.mapData; \
+ \
+ xprime = x - 7; \
+ xprime += 8 * mapData->unk18; \
+ xprime %= mapData->unk18; \
+ \
+ yprime = y - 7; \
+ yprime += 8 * mapData->unk19; \
+ yprime %= mapData->unk19; \
+ \
+ block = mapData->border[xprime + yprime * mapData->unk18] | 0xC00; \
+ block; \
})
#define MapGridGetTileAt(x, y) ({ \
@@ -418,3 +441,65 @@ u32 MapGridGetMetatileIdAt(s32 x, s32 y)
}
return block & 0x3FF;
}
+
+u32 sub_8058F1C(u32 original, u8 bit)
+{
+ if (bit >= 8)
+ return original;
+
+ return (original & gUnknown_8352EF0[bit]) >> gUnknown_8352F10[bit];
+}
+
+u32 sub_8058F48(s16 x, s16 y, u8 z)
+{
+ u16 metatileId = MapGridGetMetatileIdAt(x, y);
+ return sub_8059080(gMapHeader.mapData, metatileId, z);
+}
+
+u32 MapGridGetMetatileBehaviorAt(s32 x, s32 y)
+{
+ return sub_8058F48(x, y, 0);
+}
+
+u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y)
+{
+ return sub_8058F48(x, y, 6);
+}
+
+void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile)
+{
+ int i;
+ if (x >= 0 && x < VMap.Xsize
+ && y >= 0 && y < VMap.Ysize)
+ {
+ i = x + y * VMap.Xsize;
+ VMap.map[i] = (VMap.map[i] & 0xf000) | (metatile & 0xfff);
+ }
+}
+
+void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatile)
+{
+ int i;
+ if (x >= 0 && x < VMap.Xsize
+ && y >= 0 && y < VMap.Ysize)
+ {
+ i = x + VMap.Xsize * y;
+ VMap.map[i] = metatile;
+ }
+}
+
+void sub_8059024(s32 x, s32 y, bool32 arg2)
+{
+ if (x >= 0 && x < VMap.Xsize
+ && y >= 0 && y < VMap.Ysize)
+ {
+ if (arg2)
+ {
+ VMap.map[x + VMap.Xsize * y] |= 0x0C00;
+ }
+ else
+ {
+ VMap.map[x + VMap.Xsize * y] &= ~0x0C00;
+ }
+ }
+}