summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-07-14 21:14:00 -0500
committercamthesaxman <cameronghall@cox.net>2017-07-14 21:14:00 -0500
commit9013ffe84a12a8d81d32fb8125687988bd2ba8ca (patch)
tree0aefc93633c0f9c5e13d776c7b6ab15c4ba94a61 /src
parent48407f4c37e39f2792e469ee18ab743b01f84316 (diff)
decompile sub_80FAB78 - sub_80FAFC0
Diffstat (limited to 'src')
-rw-r--r--src/region_map.c272
1 files changed, 264 insertions, 8 deletions
diff --git a/src/region_map.c b/src/region_map.c
index 301c3c082..0a50da51e 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "main.h"
#include "palette.h"
#include "sprite.h"
@@ -11,25 +12,37 @@ struct UnknownStruct1
u8 (*unk18)(void);
struct Sprite *unk1C;
struct Sprite *unk20;
- u8 filler24[0x30];
- u16 unk54;
- u16 unk56;
+ u8 filler24[0x18];
+ s32 unk3C;
+ s32 unk40;
+ s32 unk44;
+ s32 unk48;
+ s32 unk4C;
+ u32 unk50;
+ u16 unk54; // cursor x
+ u16 unk56; // cursor y
u16 unk58;
u16 unk5A;
s16 unk5C;
s16 unk5E;
- u8 filler60[4];
+ s16 unk60;
+ s16 unk62;
u16 unk64;
u16 unk66;
- u8 filler68[8];
+ u16 unk68;
+ u16 unk6A;
+ u16 unk6C;
+ u16 unk6E;
u16 unk70;
u16 unk72;
u16 unk74;
u16 unk76;
u8 unk78;
u8 unk79;
- u8 unk7A;
- u8 filler7B[3];
+ s8 unk7A;
+ s8 unk7B; // movement delta horizontal
+ s8 unk7C; // movement delta vertical
+ u8 unk7D;
u8 unk7E;
u8 filler7F[0x101];
u8 unk180[0x100];
@@ -52,13 +65,21 @@ const u8 gUnknown_083E6B04[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz
void sub_80FA904(struct UnknownStruct1 *, u8);
bool8 sub_80FA940(void);
u8 sub_80FAB78(void);
+u8 _swiopen(void);
u8 sub_80FAD04(void);
-void sub_80FB170();
+u8 sub_80FADE4(void);
+void sub_80FB170(int, int, int, int, u16, u16, int);
+void sub_80FB238();
void sub_80FB260(void);
+u16 GetRegionMapSectionAt();
void sub_80FB32C(void);
u16 sub_80FB758();
u16 sub_80FB9C0(u16);
void sub_80FBA18();
+void sub_80FBB3C();
+void sub_80FBCA0(void);
+void sub_80FBDF8(void);
+void sub_80FBE24(void);
void sub_80FBFB4();
void sub_80FA8EC(struct UnknownStruct1 *a, u8 b)
@@ -153,3 +174,238 @@ u8 sub_80FAB60(void)
{
return gUnknown_020388CC->unk18();
}
+
+u8 sub_80FAB78(void)
+{
+ u8 r4 = 0;
+
+ gUnknown_020388CC->unk7B = 0;
+ gUnknown_020388CC->unk7C = 0;
+ if ((gMain.heldKeys & DPAD_UP) && gUnknown_020388CC->unk56 > 2)
+ {
+ gUnknown_020388CC->unk7C = -1;
+ r4 = 1;
+ }
+ if ((gMain.heldKeys & DPAD_DOWN) && gUnknown_020388CC->unk56 < 16)
+ {
+ gUnknown_020388CC->unk7C = 1;
+ r4 = 1;
+ }
+ if ((gMain.heldKeys & DPAD_LEFT) && gUnknown_020388CC->unk54 > 1)
+ {
+ gUnknown_020388CC->unk7B = -1;
+ r4 = 1;
+ }
+ if ((gMain.heldKeys & DPAD_RIGHT) && gUnknown_020388CC->unk54 < 0x1C)
+ {
+ gUnknown_020388CC->unk7B = 1;
+ r4 = 1;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ r4 = 4;
+ else if (gMain.newKeys & B_BUTTON)
+ r4 = 5;
+ if (r4 == 1)
+ {
+ gUnknown_020388CC->unk7A = 4;
+ gUnknown_020388CC->unk18 = _swiopen;
+ }
+ return r4;
+}
+
+u8 _swiopen(void)
+{
+ u16 r4;
+
+ if (gUnknown_020388CC->unk7A != 0)
+ return 2;
+
+ if (gUnknown_020388CC->unk7B > 0)
+ gUnknown_020388CC->unk54++;
+
+ if (gUnknown_020388CC->unk7B < 0)
+ gUnknown_020388CC->unk54--;
+
+ if (gUnknown_020388CC->unk7C > 0)
+ gUnknown_020388CC->unk56++;
+
+ if (gUnknown_020388CC->unk7C < 0)
+ gUnknown_020388CC->unk56--;
+
+ r4 = GetRegionMapSectionAt(gUnknown_020388CC->unk54, gUnknown_020388CC->unk56);
+ gUnknown_020388CC->unk16 = sub_80FB758(r4);
+ if (r4 != gUnknown_020388CC->unk14)
+ {
+ gUnknown_020388CC->unk14 = r4;
+ sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16);
+ }
+ sub_80FBA18();
+ gUnknown_020388CC->unk18 = sub_80FAB78;
+ return 3;
+}
+
+u8 sub_80FAD04(void)
+{
+ u8 r4 = 0;
+ gUnknown_020388CC->unk6A = 0;
+ gUnknown_020388CC->unk68 = 0;
+ if ((gMain.heldKeys & 0x40) && gUnknown_020388CC->unk5E > -0x34)
+ {
+ gUnknown_020388CC->unk68 = -1;
+ r4 = 1;
+ }
+ if ((gMain.heldKeys & 0x80) && gUnknown_020388CC->unk5E < 0x3C)
+ {
+ gUnknown_020388CC->unk68 = 1;
+ r4 = 1;
+ }
+ if ((gMain.heldKeys & 0x20) && gUnknown_020388CC->unk5C > -0x2C)
+ {
+ gUnknown_020388CC->unk6A = -1;
+ r4 = 1;
+ }
+ if ((gMain.heldKeys & 0x10) && gUnknown_020388CC->unk5C < 0xAC)
+ {
+ gUnknown_020388CC->unk6A = 1;
+ r4 = 1;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ r4 = 4;
+ if (gMain.newKeys & B_BUTTON)
+ r4 = 5;
+ if (r4 == 1)
+ {
+ gUnknown_020388CC->unk18 = sub_80FADE4;
+ gUnknown_020388CC->unk6C = 0;
+ }
+ return r4;
+}
+
+u8 sub_80FADE4(void)
+{
+ gUnknown_020388CC->unk5E += gUnknown_020388CC->unk68;
+ gUnknown_020388CC->unk5C += gUnknown_020388CC->unk6A;
+ sub_80FB238(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E);
+ gUnknown_020388CC->unk6C++;
+ if (gUnknown_020388CC->unk6C == 8)
+ {
+ u16 r3 = (gUnknown_020388CC->unk5C + 0x2C) / 8 + 1;
+ u16 r1 = (gUnknown_020388CC->unk5E + 0x34) / 8 + 2;
+
+ if (r3 != gUnknown_020388CC->unk64 || r1 != gUnknown_020388CC->unk66)
+ {
+ u16 r4;
+
+ gUnknown_020388CC->unk64 = r3;
+ gUnknown_020388CC->unk66 = r1;
+ r4 = GetRegionMapSectionAt(r3, r1);
+ gUnknown_020388CC->unk16 = sub_80FB758(r4);
+ if (r4 != gUnknown_020388CC->unk14)
+ {
+ gUnknown_020388CC->unk14 = r4;
+ sub_80FBFB4(gUnknown_020388CC, gUnknown_020388CC->unk14, 16);
+ }
+ sub_80FBA18();
+ }
+ gUnknown_020388CC->unk6C = 0;
+ gUnknown_020388CC->unk18 = sub_80FAD04;
+ return 3;
+ }
+ return 2;
+}
+
+void sub_80FAEC4(void)
+{
+ if (gUnknown_020388CC->unk78 == 0)
+ {
+ gUnknown_020388CC->unk5E = 0;
+ gUnknown_020388CC->unk5C = 0;
+ gUnknown_020388CC->unk40 = 0;
+ gUnknown_020388CC->unk3C = 0;
+ gUnknown_020388CC->unk60 = gUnknown_020388CC->unk54 * 8 - 0x34;
+ gUnknown_020388CC->unk62 = gUnknown_020388CC->unk56 * 8 - 0x44;
+ gUnknown_020388CC->unk44 = (gUnknown_020388CC->unk60 << 8) / 16;
+ gUnknown_020388CC->unk48 = (gUnknown_020388CC->unk62 << 8) / 16;
+ gUnknown_020388CC->unk64 = gUnknown_020388CC->unk54;
+ gUnknown_020388CC->unk66 = gUnknown_020388CC->unk56;
+ gUnknown_020388CC->unk4C = 0x10000;
+ gUnknown_020388CC->unk50 = -0x800;
+ }
+ else
+ {
+ gUnknown_020388CC->unk3C = gUnknown_020388CC->unk5C * 256;
+ gUnknown_020388CC->unk40 = gUnknown_020388CC->unk5E * 256;
+ gUnknown_020388CC->unk60 = 0;
+ gUnknown_020388CC->unk62 = 0;
+ gUnknown_020388CC->unk44 = -(gUnknown_020388CC->unk3C / 16);
+ gUnknown_020388CC->unk48 = -(gUnknown_020388CC->unk40 / 16);
+ gUnknown_020388CC->unk54 = gUnknown_020388CC->unk64;
+ gUnknown_020388CC->unk56 = gUnknown_020388CC->unk66;
+ gUnknown_020388CC->unk4C = 0x8000;
+ gUnknown_020388CC->unk50 = 0x800;
+ }
+ gUnknown_020388CC->unk6E = 0;
+ sub_80FBCA0();
+ sub_80FBDF8();
+}
+
+u8 sub_80FAFC0(void)
+{
+ u8 r4;
+
+ if (gUnknown_020388CC->unk6E > 15)
+ return 0;
+ gUnknown_020388CC->unk6E++;
+ if (gUnknown_020388CC->unk6E == 16)
+ {
+ gUnknown_020388CC->unk44 = 0;
+ gUnknown_020388CC->unk48 = 0;
+ gUnknown_020388CC->unk5C = gUnknown_020388CC->unk60;
+ gUnknown_020388CC->unk5E = gUnknown_020388CC->unk62;
+ gUnknown_020388CC->unk4C = (gUnknown_020388CC->unk78 == 0) ? 0x8000 : 0x10000;
+ gUnknown_020388CC->unk78 = (gUnknown_020388CC->unk78 == 0) ? 1 : 0;
+ gUnknown_020388CC->unk18 = (gUnknown_020388CC->unk78 == 0) ? sub_80FAB78 : sub_80FAD04;
+ sub_80FBB3C(gUnknown_020388CC->unk58, gUnknown_020388CC->unk5A);
+ sub_80FBE24();
+ r4 = 0;
+ }
+ else
+ {
+ gUnknown_020388CC->unk3C += gUnknown_020388CC->unk44;
+ gUnknown_020388CC->unk40 += gUnknown_020388CC->unk48;
+ gUnknown_020388CC->unk5C = gUnknown_020388CC->unk3C >> 8;
+ gUnknown_020388CC->unk5E = gUnknown_020388CC->unk40 >> 8;
+ gUnknown_020388CC->unk4C += gUnknown_020388CC->unk50;
+ if ((gUnknown_020388CC->unk44 < 0 && gUnknown_020388CC->unk5C < gUnknown_020388CC->unk60)
+ || (gUnknown_020388CC->unk44 > 0 && gUnknown_020388CC->unk5C > gUnknown_020388CC->unk60))
+ {
+ gUnknown_020388CC->unk5C = gUnknown_020388CC->unk60;
+ gUnknown_020388CC->unk44 = 0;
+ }
+ if ((gUnknown_020388CC->unk48 < 0 && gUnknown_020388CC->unk5E < gUnknown_020388CC->unk62)
+ || (gUnknown_020388CC->unk48 > 0 && gUnknown_020388CC->unk5E > gUnknown_020388CC->unk62))
+ {
+ gUnknown_020388CC->unk5E = gUnknown_020388CC->unk62;
+ gUnknown_020388CC->unk48 = 0;
+ }
+ if (gUnknown_020388CC->unk78 == 0)
+ {
+ if (gUnknown_020388CC->unk4C < 0x8000)
+ {
+ gUnknown_020388CC->unk4C = 0x8000;
+ gUnknown_020388CC->unk50 = 0;
+ }
+ }
+ else
+ {
+ if (gUnknown_020388CC->unk4C > 0x10000)
+ {
+ gUnknown_020388CC->unk4C = 0x10000;
+ gUnknown_020388CC->unk50 = 0;
+ }
+ }
+ r4 = 1;
+ }
+ sub_80FB170(gUnknown_020388CC->unk5C, gUnknown_020388CC->unk5E, 0x38, 0x48, gUnknown_020388CC->unk4C >> 8, gUnknown_020388CC->unk4C >> 8, 0);
+ return r4;
+}