diff options
author | Phlosioneer <mattmdrr2@gmail.com> | 2019-04-08 17:48:36 -0400 |
---|---|---|
committer | huderlem <huderlem@gmail.com> | 2019-04-13 11:34:53 -0500 |
commit | 2b740b46e8254446b2598b4ab13aeb752e060cc0 (patch) | |
tree | 25a071938506d4f696449eca074f2d60980020d9 /src/pokenav_unk_1.c | |
parent | ee2edb068af30cf2d560de510fc03cfff77acc92 (diff) |
About halfway done with pokenav_unk_1.s
Diffstat (limited to 'src/pokenav_unk_1.c')
-rw-r--r-- | src/pokenav_unk_1.c | 259 |
1 files changed, 256 insertions, 3 deletions
diff --git a/src/pokenav_unk_1.c b/src/pokenav_unk_1.c index dd2411e01..da05657cb 100644 --- a/src/pokenav_unk_1.c +++ b/src/pokenav_unk_1.c @@ -1,17 +1,35 @@ #include "global.h" #include "pokenav.h" #include "event_data.h" +#include "main.h" +#include "sound.h" +#include "constants/songs.h" struct Pokenav1Struct { u16 unk0; - u16 unk2; + s16 unk2; u16 unk4; u16 unk6; - u8 unk8[8]; + u32 unk8; + u32 (*unkC)(struct Pokenav1Struct*); }; -extern void sub_81C939C(struct Pokenav1Struct *state); + +extern u32 sub_81C76AC(void); +extern u32 sub_81C963C(struct Pokenav1Struct *a0); +extern u32 sub_81C96FC(struct Pokenav1Struct *a0); +extern u32 sub_81C9814(void); +extern void sub_81C97B0(struct Pokenav1Struct *a0, u32 a1); + +u32 sub_81C9600(struct Pokenav1Struct *a0); +u32 sub_81C9588(struct Pokenav1Struct *a0); +u32 sub_81C9520(struct Pokenav1Struct *a0); +u32 sub_81C943C(struct Pokenav1Struct *a0); +u32 (*sub_81C93EC(void))(struct Pokenav1Struct*); +void sub_81C939C(struct Pokenav1Struct *state); + +extern u8 gUnknown_0861FC59[]; u8 sub_81C9268(void) { @@ -40,4 +58,239 @@ u32 sub_81C9298(void) sub_81C939C(state); return 1; +} + +u32 sub_81C92CC(void) +{ + struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + u8 v0; + + if (state == NULL) + return 0; + + state->unk0 = sub_81C9268(); + state->unk2 = 2; + state->unk4 = 2; + state->unk6 = 0; + sub_81C939C(state); + + return 1; +} + +u32 sub_81C9304(void) +{ + struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + u8 v0; + + if (state == NULL) + return 0; + + state->unk0 = sub_81C9268(); + state->unk2 = 3; + state->unk4 = 3; + sub_81C939C(state); + + return 1; +} + +u32 sub_81C9338(void) +{ + struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + u8 v0; + + if (state == NULL) + return 0; + + state->unk0 = 3; + state->unk2 = 0; + state->unk4 = 5; + state->unk6 = 0; + sub_81C939C(state); + + return 1; +} + +u32 sub_81C9368(void) +{ + struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + u8 v0; + + if (state == NULL) + return 0; + + state->unk0 = 4; + state->unk2 = sub_81C76AC(); + state->unk4 = 8 + state->unk2; + state->unk6 = 0; + sub_81C939C(state); + + return 1; +} + +void sub_81C939C(struct Pokenav1Struct *state) +{ + switch (state->unk0) + { + case 0: + SetPokenavMode(0); + // fallthrough + case 1: + case 2: + state->unkC = sub_81C93EC(); + break; + case 3: + state->unkC = sub_81C963C; + break; + case 4: + state->unkC = sub_81C96FC; + break; + } +} + +u32 (*sub_81C93EC(void))(struct Pokenav1Struct*) +{ + switch (GetPokenavMode()) + { + default: + case 0: + return sub_81C943C; + case 1: + return sub_81C9520; + case 2: + return sub_81C9588; + } +} + +u32 sub_81C941C(void) +{ + struct Pokenav1Struct *state = GetSubstructPtr(1); + return state->unkC(state); +} + +void sub_81C9430(void) +{ + FreePokenavSubstruct(1); +} + +u32 sub_81C943C(struct Pokenav1Struct *a0) +{ + if (sub_81C9814() != 0) + return 1; + + if (gMain.newKeys & A_BUTTON) + { + switch (gUnknown_0861FC59[a0->unk2 + a0->unk0 * 6]) + { + case 0: + a0->unk6 = gSaveBlock2Ptr->regionMapZoom ? 2 : 1; + sub_81C97B0(a0, UNKNOWN_POKENAV_OFFSET + 6); + return 8; + case 1: + a0->unk0 = 3; + a0->unk2 = 0; + a0->unk4 = gUnknown_0861FC59[18]; + a0->unkC = sub_81C963C; + return 2; + case 2: + a0->unk6 = 6; + sub_81C97B0(a0, UNKNOWN_POKENAV_OFFSET + 11); + return 8; + case 3: + if (CanViewRibbonsMenu()) + { + a0->unk6 = 9; + sub_81C97B0(a0, UNKNOWN_POKENAV_OFFSET + 12); + return 8; + } + else + { + a0->unkC = sub_81C9600; + return 6; + } + case 4: + return -1; + } + } + + if (gMain.newKeys & B_BUTTON) + return -1; + + return 0; +} + +u32 sub_81C9520(struct Pokenav1Struct *a0) +{ + if (sub_81C9814() != 0) + return 1; + + if (gMain.newKeys & A_BUTTON) + { + if (gUnknown_0861FC59[a0->unk2 + a0->unk0 * 6] == 2) + { + a0->unk6 = 6; + sub_81C97B0(a0, UNKNOWN_POKENAV_OFFSET + 11); + return 8; + } + else + { + PlaySE(SE_HAZURE); + return 0; + } + } + + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_HAZURE); + return 0; + } + + return 0; +} + +u32 sub_81C9588(struct Pokenav1Struct *a0) +{ + if (sub_81C9814() != 0) + return 1; + + if (gMain.newKeys & A_BUTTON) + { + u32 v0 = gUnknown_0861FC59[a0->unk2 + a0->unk0 * 6]; + if (v0 != 2 && v0 != 4) + { + PlaySE(SE_HAZURE); + return 0; + } + else if (v0 == 2) + { + a0->unk6 = 6; + sub_81C97B0(a0, UNKNOWN_POKENAV_OFFSET + 11); + return 8; + } + else + { + return -1; + } + } + else if (gMain.newKeys & B_BUTTON) + { + return -1; + } + return 0; +} + +u32 sub_81C9600(struct Pokenav1Struct *a0) +{ + if (sub_81C9814() != 0) + { + a0->unkC = sub_81C93EC(); + return 1; + } + + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + a0->unkC = sub_81C93EC(); + return 7; + } + + return 0; }
\ No newline at end of file |