summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/match_call.c407
1 files changed, 407 insertions, 0 deletions
diff --git a/src/match_call.c b/src/match_call.c
new file mode 100644
index 000000000..8712cbf3a
--- /dev/null
+++ b/src/match_call.c
@@ -0,0 +1,407 @@
+
+// Includes
+#include "global.h"
+#include "battle_setup.h"
+#include "event_data.h"
+
+#define NELEMS(a) (s32)( sizeof (a) / sizeof (*(a)) )
+
+// Static type declarations
+
+typedef struct MatchCallSusbtruct0 {
+ const u8 *text;
+ u16 v4;
+ u16 v6;
+} match_call_sub0_t;
+
+struct MatchCallStructCommon {
+ u8 type;
+ u8 v1;
+ u16 flag;
+};
+
+struct MatchCallStruct0 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ const u8 *v4;
+ const u8 *v8;
+ const match_call_sub0_t *vC;
+};
+
+struct MatchCallStruct1 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ u16 v4;
+ u8 fill6[10];
+ const match_call_sub0_t *v10;
+};
+
+struct MatchCallSubstruct2 {
+ u16 v0;
+ u8 v2;
+};
+
+struct MatchCallStruct2 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ u16 v4;
+ const u8 *v8;
+ const match_call_sub0_t *vC;
+ const struct MatchCallSubstruct2 *v10;
+};
+
+struct MatchCallStruct3 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ const u8 *v4;
+ const u8 *v8;
+};
+
+struct MatchCallStruct4 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ const u8 *v4;
+ const u8 *v8;
+ const match_call_sub0_t *vC;
+};
+
+struct MatchCallStruct5 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ u8 fill4[12];
+ const match_call_sub0_t *v10;
+};
+
+typedef union {
+ struct MatchCallStructCommon *common;
+ struct MatchCallStruct0 *type0;
+ struct MatchCallStruct1 *type1;
+ struct MatchCallStruct2 *type2;
+ struct MatchCallStruct3 *type3;
+ struct MatchCallStruct4 *type4;
+ struct MatchCallStruct5 *type5;
+} match_call_t;
+
+struct UnkStruct_08625388 {
+ u16 idx;
+ u16 v2;
+ u16 v4;
+ const u8 *v8;
+ const u8 *vC;
+ const u8 *v10;
+ const u8 *v14;
+};
+
+// Static RAM declarations
+
+// Static ROM declarations
+
+void sub_81D1920(const match_call_sub0_t *, u8 *);
+void sub_81D199C(const match_call_sub0_t *, u16, u8 *);
+void sub_8197080(u8 *);
+
+// .rodata
+
+extern const match_call_t gUnknown_086252A8[];
+extern bool32 (*const gUnknown_086252FC[])(const match_call_t);
+extern u8 (*const gUnknown_08625310[])(const match_call_t);
+extern bool32 (*const gUnknown_08625324[])(const match_call_t);
+extern bool32 (*const gUnknown_08625338[])(const match_call_t);
+extern const struct UnkStruct_08625388 gUnknown_08625388[];
+extern u32 (*const gUnknown_0862534C[])(const match_call_t);
+extern void (*const gUnknown_08625360[])(const match_call_t, u8 *);
+
+// .text
+
+u32 sub_81D1574(const match_call_t matchCall)
+{
+ switch (matchCall.common->type)
+ {
+ case 0:
+ default:
+ return 0;
+ case 1:
+ case 5:
+ return 1;
+ case 2:
+ return 2;
+ case 4:
+ return 3;
+ case 3:
+ return 4;
+ }
+}
+
+s32 sub_81D15BC(s32 rematchIdx)
+{
+ return gRematchTable[rematchIdx].trainerIds[0];
+}
+
+s32 sub_81D15CC(s32 trainerIdx)
+{
+ s32 rematchIdx;
+
+ for (rematchIdx = 0; rematchIdx < NELEMS(gRematchTable); rematchIdx++)
+ {
+ if (gRematchTable[rematchIdx].trainerIds[0] == trainerIdx)
+ return rematchIdx;
+ }
+ return -1;
+}
+
+bool32 sub_81D15F4(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return FALSE;
+ matchCall = gUnknown_086252A8[idx];
+ i = sub_81D1574(matchCall);
+ return gUnknown_086252FC[i](matchCall);
+}
+
+bool32 sub_81D1628(match_call_t matchCall)
+{
+ if (matchCall.type0->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type0->flag);
+}
+
+bool32 sub_81D164C(match_call_t matchCall)
+{
+ if (matchCall.type1->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type1->flag);
+}
+
+bool32 sub_81D1670(match_call_t matchCall)
+{
+ if (matchCall.type2->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type2->flag);
+}
+
+bool32 sub_81D1694(match_call_t matchCall)
+{
+ if (matchCall.type4->v1 != gSaveBlock2Ptr->playerGender)
+ return FALSE;
+ if (matchCall.type4->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type4->flag);
+}
+
+bool32 sub_81D16CC(match_call_t matchCall)
+{
+ return FlagGet(matchCall.type3->flag);
+}
+
+u8 sub_81D16DC(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return FALSE;
+ matchCall = gUnknown_086252A8[idx];
+ i = sub_81D1574(matchCall);
+ return gUnknown_08625310[i](matchCall);
+}
+
+u8 sub_81D1714(match_call_t matchCall)
+{
+ return matchCall.type0->v1;
+}
+
+u8 sub_81D1718(match_call_t matchCall)
+{
+ return matchCall.type1->v1;
+}
+
+u8 sub_81D171C(match_call_t matchCall)
+{
+ s32 i;
+
+ for (i = 0; matchCall.type2->v10[i].v0 != 0xffff; i++)
+ {
+ if (!FlagGet(matchCall.type2->v10[i].v0))
+ break;
+ }
+ return matchCall.type2->v10[i].v2;
+}
+
+u8 sub_81D1750(match_call_t matchCall)
+{
+ return 0xd5;
+}
+
+u8 sub_81D1754(match_call_t matchCall)
+{
+ return 0xd5;
+}
+
+bool32 sub_81D1758(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return 0;
+ matchCall = gUnknown_086252A8[idx];
+ i = sub_81D1574(matchCall);
+ return gUnknown_08625324[i](matchCall);
+}
+
+bool32 sub_81D178C(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+bool32 sub_81D1790(match_call_t matchCall)
+{
+ if (matchCall.type1->v4 > 0x48)
+ return FALSE;
+ return gSaveBlock1Ptr->trainerRematches[matchCall.type1->v4] ? TRUE : FALSE;
+}
+
+bool32 sub_81D17C0(match_call_t matchCall)
+{
+ return gSaveBlock1Ptr->trainerRematches[matchCall.type2->v4] ? TRUE : FALSE;
+}
+
+bool32 sub_81D17E0(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+bool32 sub_81D17E4(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+bool32 sub_81D17E8(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return FALSE;
+ matchCall = gUnknown_086252A8[idx];
+ i = sub_81D1574(matchCall);
+ if (gUnknown_08625338[i](matchCall))
+ return TRUE;
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_08625388[i].idx == idx)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 sub_81D1840(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+bool32 sub_81D1844(match_call_t matchCall)
+{
+ return TRUE;
+}
+
+bool32 sub_81D1848(match_call_t matchCall)
+{
+ return TRUE;
+}
+
+bool32 sub_81D184C(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+bool32 sub_81D1850(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+u32 sub_81D1854(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return ARRAY_COUNT(gRematchTable);
+ matchCall = gUnknown_086252A8[idx];
+ i = sub_81D1574(matchCall);
+ return gUnknown_0862534C[i](matchCall);
+}
+
+u32 sub_81D1888(match_call_t matchCall)
+{
+ return ARRAY_COUNT(gRematchTable);
+}
+
+u32 sub_81D188C(match_call_t matchCall)
+{
+ return matchCall.type1->v4;
+}
+
+u32 sub_81D1890(match_call_t matchCall)
+{
+ return matchCall.type2->v4;
+}
+
+u32 sub_81D1894(match_call_t matchCall)
+{
+ return ARRAY_COUNT(gRematchTable);
+}
+
+u32 sub_81D1898(match_call_t matchCall)
+{
+ return ARRAY_COUNT(gRematchTable);
+}
+
+void sub_81D189C(u32 idx, u8 *dest)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return;
+ matchCall = gUnknown_086252A8[idx];
+ i = sub_81D1574(matchCall);
+ gUnknown_08625360[i](matchCall, dest);
+}
+
+void sub_81D18D0(match_call_t matchCall, u8 *dest)
+{
+ sub_81D1920(matchCall.type0->vC, dest);
+}
+
+void sub_81D18DC(match_call_t matchCall, u8 *dest)
+{
+ if (matchCall.common->type != 5)
+ sub_81D1920(matchCall.type5->v10, dest);
+ else
+ sub_81D199C(matchCall.type1->v10, matchCall.type1->v4, dest);
+}
+
+void sub_81D18FC(match_call_t matchCall, u8 *dest)
+{
+ sub_81D1920(matchCall.type2->vC, dest);
+}
+
+void sub_81D1908(match_call_t matchCall, u8 *dest)
+{
+ sub_81D1920(matchCall.type4->vC, dest);
+}
+
+void sub_81D1914(match_call_t matchCall, u8 *dest)
+{
+ sub_8197080(dest);
+}