summaryrefslogtreecommitdiff
path: root/src/pokemon_3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokemon_3.c')
-rw-r--r--src/pokemon_3.c193
1 files changed, 193 insertions, 0 deletions
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
new file mode 100644
index 0000000..fd03834
--- /dev/null
+++ b/src/pokemon_3.c
@@ -0,0 +1,193 @@
+#include "global.h"
+
+extern u32 gIQSkillNames[];
+extern u32 gIQSkillDescriptions[];
+extern u32 gTacticsDescriptions[];
+extern u8 *gTactics[];
+extern u8 gUnknown_810A36B[];
+
+extern s16 gUnknown_810A378[];
+extern s32 gUnknown_810A390[];
+extern u32 gUnknown_81076E4[];
+
+extern bool8 sub_808ECD0(u8 *, u32);
+extern void sub_808EC30(u8 *, u32);
+
+u32 GetIQSkillName(u8 r0)
+{
+ return gIQSkillNames[r0];
+}
+
+void CopyTacticsNameToBuffer(char *r0, u8 r1)
+{
+ strncpy(r0, gTactics[r1], 0x14);
+}
+
+u32 GetIQSkillDescription(u8 r0)
+{
+ return gIQSkillDescriptions[r0];
+}
+
+u32 GetTacticsDescription(u8 r0)
+{
+ return gTacticsDescriptions[r0];
+}
+
+u8 sub_808EAFC(u8 r0)
+{
+ return gUnknown_810A36B[r0];
+}
+
+void sub_808EB0C(u8 *r0, s32 r1)
+{
+ s32 counter;
+ s32 storage;
+ u32 index;
+ storage = 0;
+ index = 0;
+ for(counter = 0; counter <= 0xB; counter++)
+ {
+ if(gUnknown_810A378[index] <= r1)
+ {
+ r0[storage] = counter;
+ storage++;
+ }
+ index++;
+ }
+ if(storage > 0xB)
+ {
+ return;
+ }
+ while(storage <= 0xB)
+ {
+ r0[storage] = 0xB;
+ storage++;
+ }
+}
+
+void sub_808EB48(u8 *r0, s32 r1)
+{
+ s32 counter;
+
+ for(counter = 0; counter <= 0xB; counter++)
+ {
+ if(gUnknown_810A378[counter] <= r1)
+ {
+ r0[counter] = TRUE;
+ }
+ else
+ {
+ r0[counter] = FALSE;
+ }
+ }
+}
+
+bool8 sub_808EB7C(s32 r0, u8 r1)
+{
+ if(r1 == 0)
+ {
+ return FALSE;
+ }
+
+ return gUnknown_810A390[r1] <= r0;
+}
+
+s32 sub_808EBA8(u8 param_1[], s32 param_2)
+{
+ s32 counter_2;
+ s32 counter_1;
+ u8 cast_u8;
+ s32 index;
+
+ index = 0;
+
+ for(counter_1 = 1; counter_1 < 0x18; counter_1++) {
+ cast_u8 = counter_1; // force this cast to be in a reg
+ if (sub_808EB7C(param_2, cast_u8)) {
+ param_1[index] = cast_u8;
+ index++;
+ }
+ }
+
+ counter_2 = index; // set counter to where the first loop ended
+
+ while (counter_2 < 0x18) {
+ param_1[counter_2] = 0;
+ counter_2++;
+ }
+ return index;
+}
+
+void sub_808EBF4(u8 *param_1, u32 param_2)
+{
+ int iVar2; // a mask?
+
+ iVar2 = 1 << (param_2);
+ if (sub_808ECD0(param_1,iVar2)) {
+ param_1[0] = param_1[0] & ~iVar2;
+ param_1[1] = param_1[1] & ~(iVar2 >> 8);
+ param_1[2] = param_1[2] & ~(iVar2 >> 0x10);
+ }
+ else
+ {
+ sub_808EC30(param_1,param_2);
+ }
+}
+
+void sub_808EC30(u8 *param_1, u32 param_2)
+{
+ s32 iVar1;
+ s32 counter;
+ s32 iVar4;
+ s32 iVar5;
+
+ counter = 0;
+ iVar4 = gUnknown_81076E4[param_2];
+ do {
+ if (iVar4 == gUnknown_81076E4[counter]) {
+ iVar1 = 1 << (counter);
+ param_1[0] = param_1[0] & ~iVar1;
+ param_1[1] = param_1[1] & ~(iVar1 >> 8);
+ param_1[2] = param_1[2] & ~(iVar1 >> 0x10);
+ }
+ counter++;
+ } while (counter < 0x18);
+
+ iVar5 = 1 << (param_2);
+ param_1[0] = iVar5 | param_1[0];
+ param_1[1] = (iVar5 >> 8) | param_1[1];
+ param_1[2] = (iVar5 >> 0x10) | param_1[2];
+}
+
+void sub_808EC94(u8 *param_1, u8 param_2)
+{
+
+ param_1[0] = 0;
+ param_1[1] = 0;
+ param_1[2] = 0;
+ sub_808EC30(param_1, 2);
+ sub_808EC30(param_1, 3);
+ sub_808EC30(param_1, 0x16);
+ if (param_2 != 0) {
+ sub_808EC30(param_1, 0x12);
+ }
+}
+
+bool8 sub_808ECD0(u8 *param_1, u32 param_2)
+{
+
+ if ((((param_1[0] & param_2) == 0) &&
+ ((param_1[1] & param_2 >> 8) == 0)) &&
+ ((param_1[2] & param_2 >> 0x10) == 0))
+ {
+ return 0;
+ }
+ else {
+ return 1;
+ }
+}
+
+u32 sub_808ECFC(void)
+{
+ return 0;
+}