diff options
author | Phlosioneer <mattmdrr2@gmail.com> | 2019-02-12 20:57:51 -0500 |
---|---|---|
committer | Phlosioneer <mattmdrr2@gmail.com> | 2019-02-17 23:14:14 -0500 |
commit | 112fc4701794ba3b1a35882d7995c907448431fe (patch) | |
tree | fe739fba59d8083f5f8bef7fea59f38d9ea274b6 /src | |
parent | 3d73f7c48c7c658b0d12fbc89867a44bf9490206 (diff) |
Decompiled sub_81C756C
Also discovered a constant that may be useful for future decompiling.
Comments were added in the asm that references the constant.
Diffstat (limited to 'src')
-rw-r--r-- | src/pokedex.c | 4 | ||||
-rw-r--r-- | src/pokenav_main.c | 33 |
2 files changed, 29 insertions, 8 deletions
diff --git a/src/pokedex.c b/src/pokedex.c index c47ada5b8..22c8286a4 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4036,7 +4036,7 @@ void sub_80C0460(u16 weight, u8 left, u8 top) lsls r2, 24\n\ lsrs r2, 24\n\ str r2, [sp, 0x10]\n\ - ldr r5, =0x000186a0\n\ + ldr r5, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\ muls r0, r5\n\ ldr r1, =0x000011b8\n\ bl __divsi3\n\ @@ -4070,7 +4070,7 @@ _080C04C0:\n\ mov r8, r1\n\ movs r6, 0x1\n\ _080C04C6:\n\ - ldr r1, =0x000186a0\n\ + ldr r1, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\ adds r0, r7, 0\n\ bl __umodsi3\n\ adds r7, r0, 0\n\ diff --git a/src/pokenav_main.c b/src/pokenav_main.c index e75ae38f3..21ee72f30 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -7,8 +7,10 @@ #include "palette.h" #include "pokemon_storage_system.h" +#define UNKNOWN_OFFSET 100000 + struct UnknownStruct_0203CF40 { - u32 field0; + u32 (*field0)(void); u32 field4; u16 field8; u32 fieldC; @@ -17,7 +19,7 @@ struct UnknownStruct_0203CF40 { }; struct UnknownStruct_0861F3EC { - void (*data[7])(void); + u32 (*data[7])(void); }; extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; @@ -29,13 +31,15 @@ extern void sub_81C76C4(void); extern void sub_81C7710(void); extern void sub_81C7850(u32 a0); extern void sub_81C9430(void); -extern u32 sub_81C756C(u32 a0); +extern void sub_81C75F4(void); +extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); extern u32 sub_81C76FC(void); extern u32 sub_81C786C(void); extern u32 sub_81C75E0(void); extern u32 sub_81C75D4(void); extern u32 sub_81C7738(void); +bool32 sub_81C756C(u32 a0); u32 AnyMonHasRibbon(void); void sub_81C7334(void); void sub_81C71E4(u8 a0); @@ -220,7 +224,7 @@ void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { a0->field8 = 0; a0->field4 = 0; a0->fieldC = AnyMonHasRibbon(); - a0->field0 = 0; + a0->field0 = NULL; } bool32 AnyMonHasRibbon() { @@ -278,7 +282,7 @@ void sub_81C742C(u8 taskId) { if (sub_81C76FC()) { break; } - sub_81C756C(0x186a0); + sub_81C756C(UNKNOWN_OFFSET); dataPtr[0] = 4; break; case 2: @@ -291,7 +295,7 @@ void sub_81C742C(u8 taskId) { if (v1 == -1) { sub_81C7710(); dataPtr[0] = 5; - } else if (v1 > 0x1869F) { + } else if (v1 >= UNKNOWN_OFFSET) { gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[6](); gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[5](); if (sub_81C756C(v1)) { @@ -324,4 +328,21 @@ void sub_81C742C(u8 taskId) { } } } +} + +bool32 sub_81C756C(u32 a0) { + u32 index; + + index = a0 - UNKNOWN_OFFSET; + sub_81C75F4(); + if (!gUnknown_0861F3EC[index].data[0]()) { + return FALSE; + } + if (!gUnknown_0861F3EC[index].data[2]()) { + return FALSE; + } + sub_81C7834(gUnknown_0861F3EC[index].data[3], gUnknown_0861F3EC[index].data[4]); + gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index].data[1]; + gUnknown_0203CF40->field4 = index; + return TRUE; }
\ No newline at end of file |