diff options
author | Phlosioneer <mattmdrr2@gmail.com> | 2019-03-16 00:34:11 -0400 |
---|---|---|
committer | Phlosioneer <mattmdrr2@gmail.com> | 2019-03-16 00:34:11 -0400 |
commit | bdc6ed1a985e17a25d4f551514f55ed9cf48ecab (patch) | |
tree | 91b3850d1db543a15ccbdb5631085edc6e84dd19 /src | |
parent | 8cea949e6d7991d4101b58941a82c7f87538a847 (diff) |
Decompiled two difficult functions
Had do use a lot of `asm` directives for sub_81C8A28 to match.
Diffstat (limited to 'src')
-rw-r--r-- | src/pokenav.c | 140 |
1 files changed, 136 insertions, 4 deletions
diff --git a/src/pokenav.c b/src/pokenav.c index 5796eecd4..7b9a6393a 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -179,12 +179,16 @@ extern u32 sub_81C91AC(struct UnknownSubStruct_81C81D4 *a0, const void *a1, void extern u32 sub_81C9160(struct UnknownSubSubStruct_81C81D4 *a0, void *a1); extern void sub_81C8ED0(void); extern void sub_81C8EF8(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1); -extern u32 sub_81C8958(s32 a0); -extern u32 sub_81C8A28(s32 a0); extern void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1, u32 a2); -extern void sub_81C9008(struct UnknownSubStruct_81C81D4 *a0, u32 a1); +extern void sub_81C9008(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1); extern void sub_81C7CB4(struct Sprite* sprite); +extern void sub_81C8CB4(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1); +extern void sub_81C8DBC(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1); +extern void sub_81C8E54(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1, u32 a2); +extern void sub_81C8D4C(struct UnknownSubSubStruct_81C81D4 *a0, struct UnknownSubSubStruct_0203CF40 *a1); +u32 sub_81C8A28(s32 a0); +u32 sub_81C8958(s32 a0); u32 sub_81C8870(s32 a0); u32 sub_81C85A0(s32 a0); void sub_81C8568(s32 a0, struct UnknownSubStruct_81C81D4 *a1); @@ -2233,7 +2237,7 @@ u32 sub_81C8870(s32 a0) switch (a0) { case 0: - sub_81C9008(structPtr, 1); + sub_81C9008(&structPtr->unk0, 1); // fall-through case 1: if (structPtr->unk89C != structPtr->unk888.unk6) @@ -2272,4 +2276,132 @@ u32 sub_81C8870(s32 a0) default: return 4; } +} + +u32 sub_81C8958(s32 a0) +{ + struct UnknownSubStruct_81C81D4 *structPtr; + structPtr = GetSubstructPtr(0x11); + if (IsDma3ManagerBusyWithBgCopy()) + return 2; + + switch (a0) + { + case 0: + sub_81C8CB4(&structPtr->unk888, &structPtr->unk0); + break; + case 1: + sub_81C8DBC(&structPtr->unk0, 0); + break; + case 2: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 0); + break; + case 3: + sub_81C8DBC(&structPtr->unk0, 1); + break; + case 4: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 1); + break; + case 5: + sub_81C8DBC(&structPtr->unk0, 2); + break; + case 6: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 2); + break; + case 7: + sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 3); + break; + default: + return 4; + } + return 0; +} + +u32 sub_81C8A28(s32 a0) +{ + struct UnknownSubStruct_81C81D4 *structPtr; + struct UnknownSubSubStruct_81C81D4 *subPtr888; + register struct UnknownSubSubStruct_0203CF40 *subPtr0 asm("r2"); + s32 v4; + + if (IsDma3ManagerBusyWithBgCopy()) + { + return 2; + } + + structPtr = GetSubstructPtr(0x11); + subPtr888 = &structPtr->unk888; + subPtr0 = &structPtr->unk0; + + switch (a0) + { + default: + return 4; + case 0: + sub_81C8D4C(subPtr888, subPtr0); + return 0; + case 1: + { + s32 v1; + s32 v2; + u32 *v3; + register s32 v4 asm("r5"); + + v3 = &structPtr->unk89C; + v1 = *v3 + 1; + *v3 = v1; + if (v1 < structPtr->unk888.unk8) + { + sub_81C8B70(subPtr0, v1, 1); + return 2; + } + + *v3 = 0; + if (subPtr888->unk2 <= subPtr888->unk8) + { + register u32 temp asm("r0"); + temp = subPtr888->unk0; + if (temp == 0) + return 9; + v2 = temp; + } + else + { + register s32 temp asm("r1"); + v2 = subPtr888->unk0 + subPtr888->unk8; + temp = (s32)subPtr888->unk2; + if (v2 <= temp) + return 9; + v2 -= temp; + } + v4 = v2 * -1; + sub_81C8B70(subPtr0, v4, v2); + subPtr888->unk6 = v2; + *v3 = v4; + return 0; + } + case 2: + sub_81C84E8(structPtr->unk89C, 0); + return 0; + case 3: + if (sub_81C8630()) + return 2; + + structPtr->unk89C = 0; + return 1; + case 4: + sub_81C83AC(subPtr888->unk10, subPtr888->unk0 + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, structPtr); + return 0; + case 5: + if (sub_81C83E0()) + return 2; + + v4 = ++structPtr->unk89C; + if (v4 >= subPtr888->unk2 || v4 >= subPtr888->unk8) + return 1; + return 9; + case 6: + sub_81C9008(subPtr0, 0); + return 4; + } }
\ No newline at end of file |