summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/pokenav.s2
-rw-r--r--asm/region_map.s80
-rw-r--r--include/region_map.h3
-rw-r--r--src/region_map.c56
4 files changed, 49 insertions, 92 deletions
diff --git a/asm/pokenav.s b/asm/pokenav.s
index 765b1c0c7..b242118aa 100755
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -10886,7 +10886,7 @@ sub_81CC6A4: @ 81CC6A4
bl TransferPlttBuffer
bl LoadOam
bl ProcessSpriteCopyRequests
- bl sub_81237B4
+ bl UpdateRegionMapVideoRegs
pop {r0}
bx r0
thumb_func_end sub_81CC6A4
diff --git a/asm/region_map.s b/asm/region_map.s
index 892cf338c..e6eca9691 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -5,80 +5,6 @@
.text
- thumb_func_start sub_8123824
-sub_8123824: @ 8123824
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 16
- asrs r4, r0, 16
- lsls r1, 16
- asrs r5, r1, 16
- movs r0, 0x80
- lsls r0, 1
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x38
- movs r3, 0x48
- bl CalcZoomScrollParams
- bl sub_81237B4
- ldr r0, =gRegionMap
- ldr r2, [r0]
- ldr r1, [r2, 0x20]
- cmp r1, 0
- beq _08123860
- negs r0, r4
- strh r0, [r1, 0x24]
- ldr r1, [r2, 0x20]
- negs r0, r5
- strh r0, [r1, 0x26]
-_08123860:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8123824
-
- thumb_func_start sub_812386C
-sub_812386C: @ 812386C
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- ldr r0, =0xfffe0000
- adds r1, r0
- lsrs r2, r1, 16
- cmp r2, 0xE
- bhi _08123886
- cmp r3, 0
- beq _08123886
- cmp r3, 0x1C
- bls _08123890
-_08123886:
- movs r0, 0xD5
- b _081238A4
- .pool
-_08123890:
- subs r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r1, =gUnknown_085A096C
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r3, r0
- adds r0, r1
- ldrb r0, [r0]
-_081238A4:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_812386C
-
thumb_func_start sub_81238AC
sub_81238AC: @ 81238AC
push {r4-r7,lr}
@@ -826,7 +752,7 @@ sub_8123E9C: @ 8123E9C
lsrs r0, 16
lsls r1, 16
lsrs r1, 16
- bl sub_812386C
+ bl GetRegionMapSectionIdAt
lsls r0, 16
lsrs r0, 16
pop {r1}
@@ -1007,7 +933,7 @@ _08123FE6:
lsrs r4, r0, 16
adds r0, r4, 0
adds r1, r5, 0
- bl sub_812386C
+ bl GetRegionMapSectionIdAt
ldr r1, =gRegionMap
ldr r1, [r1]
lsls r0, 16
@@ -1063,7 +989,7 @@ _08124058:
_0812405A:
adds r0, r4, 0
adds r1, r5, 0
- bl sub_812386C
+ bl GetRegionMapSectionIdAt
ldr r1, =gRegionMap
ldr r1, [r1]
lsls r0, 16
diff --git a/include/region_map.h b/include/region_map.h
index eb8bb3222..b784e26ec 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -218,7 +218,8 @@ enum {
MAPSEC_DESERT_UNDERPASS,
MAPSEC_ALTERING_CAVE_2,
MAPSEC_NAVEL_ROCK2,
- MAPSEC_TRAINER_HILL
+ MAPSEC_TRAINER_HILL,
+ MAPSEC_NONE2
};
struct RegionMap {
diff --git a/src/region_map.c b/src/region_map.c
index 0a2da354a..b771d7028 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -8,6 +8,13 @@
#include "trig.h"
#include "region_map.h"
+#define MAP_WIDTH 28
+#define MAP_HEIGHT 15
+#define MAPCURSOR_X_MIN 1
+#define MAPCURSOR_Y_MIN 2
+#define MAPCURSOR_X_MAX (MAPCURSOR_X_MIN + MAP_WIDTH - 1)
+#define MAPCURSOR_Y_MAX (MAPCURSOR_Y_MIN + MAP_HEIGHT - 1)
+
// Static type declarations
struct UnkStruct_0203A148 {
@@ -26,12 +33,12 @@ static u8 MoveRegionMapCursor_Full(void);
static u8 ProcessRegionMapInput_Zoomed(void);
static u8 MoveRegionMapCursor_Zoomed(void);
void CalcZoomScrollParams(s16 scrollX, s16 scrollY, s16 c, s16 d, u16 e, u16 f, u8 rotation);
-void sub_81237B4(void);
+void UpdateRegionMapVideoRegs(void);
void sub_81238AC(void);
u8 get_flagnr_blue_points(u16 mapSecId);
u16 sub_8123EB4(u16 mapSecId);
void sub_8123FB0(void);
-u16 sub_812386C(u16 x, u16 y);
+u16 GetRegionMapSectionIdAt(u16 x, u16 y);
void sub_812378C(s16 x, s16 y);
void sub_8124238(void);
void sub_81243B0(void);
@@ -39,11 +46,12 @@ void sub_81243DC(void);
// .rodata
-extern const u8 gUnknown_0859F77C[];
-extern const u8 gUnknown_085A04E0[];
-extern const u16 gUnknown_0859F73C[];
extern const u8 gUnknown_0859F60C[];
extern const u8 gUnknown_0859F650[];
+extern const u16 gUnknown_0859F73C[];
+extern const u8 gUnknown_0859F77C[];
+extern const u8 gUnknown_085A04E0[];
+extern const u8 gUnknown_085A096C[];
// .text
@@ -146,7 +154,7 @@ bool8 sub_8122DB0(void)
break;
case 7:
sub_8123FB0();
- sub_81237B4();
+ UpdateRegionMapVideoRegs();
gRegionMap->cursorSprite = NULL;
gRegionMap->playerIconSprite = NULL;
gRegionMap->cursorMovementFrameCounter = 0;
@@ -202,22 +210,22 @@ static u8 ProcessRegionMapInput_Full(void)
input = INPUT_EVENT_NONE;
gRegionMap->cursorDeltaX = 0;
gRegionMap->cursorDeltaY = 0;
- if (gMain.heldKeys & DPAD_UP && gRegionMap->cursorPosY > 2)
+ if (gMain.heldKeys & DPAD_UP && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN)
{
gRegionMap->cursorDeltaY = -1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_DOWN && gRegionMap->cursorPosY < 16)
+ if (gMain.heldKeys & DPAD_DOWN && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX)
{
gRegionMap->cursorDeltaY = +1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_LEFT && gRegionMap->cursorPosX > 1)
+ if (gMain.heldKeys & DPAD_LEFT && gRegionMap->cursorPosX > MAPCURSOR_X_MIN)
{
gRegionMap->cursorDeltaX = -1;
input = INPUT_EVENT_MOVE_START;
}
- if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->cursorPosX < 28)
+ if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->cursorPosX < MAPCURSOR_X_MAX)
{
gRegionMap->cursorDeltaX = +1;
input = INPUT_EVENT_MOVE_START;
@@ -262,7 +270,7 @@ static u8 MoveRegionMapCursor_Full(void)
{
gRegionMap->cursorPosY --;
}
- mapSecId = sub_812386C(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
+ mapSecId = GetRegionMapSectionIdAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
gRegionMap->unk_002 = get_flagnr_blue_points(mapSecId);
if (mapSecId != gRegionMap->mapSecId)
{
@@ -335,7 +343,7 @@ static u8 MoveRegionMapCursor_Zoomed(void)
{
gRegionMap->unk_064 = x;
gRegionMap->unk_066 = y;
- mapSecId = sub_812386C(x, y);
+ mapSecId = GetRegionMapSectionIdAt(x, y);
gRegionMap->unk_002 = get_flagnr_blue_points(mapSecId);
if (mapSecId != gRegionMap->mapSecId)
{
@@ -477,7 +485,7 @@ void sub_812378C(s16 x, s16 y)
gRegionMap->needUpdateVideoRegs = TRUE;
}
-void sub_81237B4(void)
+void UpdateRegionMapVideoRegs(void)
{
if (gRegionMap->needUpdateVideoRegs)
{
@@ -492,3 +500,25 @@ void sub_81237B4(void)
gRegionMap->needUpdateVideoRegs = FALSE;
}
}
+
+void sub_8123824(s16 x, s16 y)
+{
+ CalcZoomScrollParams(x, y, 0x38, 0x48, 0x100, 0x100, 0);
+ UpdateRegionMapVideoRegs();
+ if (gRegionMap->playerIconSprite != NULL)
+ {
+ gRegionMap->playerIconSprite->pos2.x = -x;
+ gRegionMap->playerIconSprite->pos2.y = -y;
+ }
+}
+
+u16 GetRegionMapSectionIdAt(u16 x, u16 y)
+{
+ if (y < MAPCURSOR_Y_MIN || y > MAPCURSOR_Y_MAX || x < MAPCURSOR_X_MIN || x > MAPCURSOR_X_MAX)
+ {
+ return MAPSEC_NONE2;
+ }
+ y -= MAPCURSOR_Y_MIN;
+ x -= MAPCURSOR_X_MIN;
+ return gUnknown_085A096C[x + y * MAP_WIDTH];
+}