diff options
author | camthesaxman <cameronghall@cox.net> | 2017-07-14 21:14:00 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-07-14 21:14:00 -0500 |
commit | 9013ffe84a12a8d81d32fb8125687988bd2ba8ca (patch) | |
tree | 0aefc93633c0f9c5e13d776c7b6ab15c4ba94a61 /src | |
parent | 48407f4c37e39f2792e469ee18ab743b01f84316 (diff) |
decompile sub_80FAB78 - sub_80FAFC0
Diffstat (limited to 'src')
-rw-r--r-- | src/region_map.c | 272 |
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; +} |