summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-10-07 20:37:08 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-10-07 20:37:08 -0400
commitce33bbe84fedf7fd10552bd920ae18ed3c9775f3 (patch)
tree7567e05a602d404c22c4e805d6173c3317843beb /src
parentea0d662b645afc4ece62d6e5643e938e8909f14f (diff)
through sub_810CDE8
Diffstat (limited to 'src')
-rw-r--r--src/vs_seeker.c93
1 files changed, 90 insertions, 3 deletions
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 4370b3555..d6b0b14bb 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -23,9 +23,11 @@
// static types
struct UnkStruct_845318C
{
- // TODO: populate
+ u16 unk_0;
+ u8 filler_2[14];
};
+extern u16 gUnknown_20370D2;
extern struct MapObject gUnknown_2036E38[MAP_OBJECTS_COUNT];
extern u8 gUnknown_3005074;
@@ -35,10 +37,15 @@ void sub_810C730(u8 taskId);
void sub_810C760(u8 taskId);
void sub_810C808(void);
void sub_810C8EC(u8 taskId);
-void sub_810D304(void);
bool8 sub_810C96C(void);
-void sub_810C604(void);
u8 sub_810C9A8(const struct UnkStruct_845318C *);
+u8 sub_810CD14(const u16 *, u8);
+u8 sub_810CD80(const struct UnkStruct_845318C *, u16);
+bool32 sub_810D0A8(u16);
+u8 sub_810CDB4(const struct UnkStruct_845318C *, u16);
+int sub_810D084(const struct UnkStruct_845318C *, u16);
+void sub_810D304(void);
+void sub_810C604(void);
bool8 sub_810D0FC(struct VsSeekerSubstruct *);
u16 sub_810D074(const u8 *);
u8 sub_810D1CC(void);
@@ -515,3 +522,83 @@ void sub_810CB90(void)
}
}
}
+
+void sub_810CCA0(const u16 * a0, u8 * a1)
+{
+ switch (*a1)
+ {
+ case 0:
+ break;
+ case 1:
+ if (!FlagGet(0x292))
+ *a1 = sub_810CD14(a0, *a1);
+ break;
+ case 2:
+ if (!FlagGet(0x896))
+ *a1 = sub_810CD14(a0, *a1);
+ break;
+ case 3:
+ if (!FlagGet(0x897))
+ *a1 = sub_810CD14(a0, *a1);
+ break;
+ case 4:
+ if (!FlagGet(0x82c))
+ *a1 = sub_810CD14(a0, *a1);
+ break;
+ case 5:
+ if (!FlagGet(0x844))
+ *a1 = sub_810CD14(a0, *a1);
+ break;
+ }
+}
+
+u8 sub_810CD14(const u16 * a0, u8 a1)
+{
+ while (--a1 != 0)
+ {
+ const u16 *r0 = a0 + a1;
+ if (*r0 != 0xFFFF)
+ return a1;
+ }
+ return 0;
+}
+
+u8 sub_810CD4C(void)
+{
+ if (sub_810CD80(gUnknown_845318C, gTrainerBattleOpponent_A))
+ {
+ return 1;
+ }
+ return sub_810CDB4(gUnknown_845318C, gTrainerBattleOpponent_A);
+}
+
+bool8 sub_810CD80(const struct UnkStruct_845318C *a0, u16 a1)
+{
+ int r1 = sub_810D084(a0, a1);
+
+ if (r1 == -1)
+ return FALSE;
+ if (r1 >= 0 && r1 < 0xdd)
+ {
+ if (sub_810D0A8(gUnknown_20370D2))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_810CDB4(const struct UnkStruct_845318C *a0, u16 a1)
+{
+ int r1 = sub_810D084(a0, a1);
+
+ if (r1 == -1)
+ return FALSE;
+ if (!HasTrainerAlreadyBeenFought(a0[r1].unk_0))
+ return FALSE;
+ return TRUE;
+}
+
+void sub_810CDE8(void)
+{
+ gSaveBlock1Ptr->trainerRematches[gUnknown_20370D2] = 0;
+ sub_80803FC();
+}