summaryrefslogtreecommitdiff
path: root/src/rom_8094928.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rom_8094928.c')
-rw-r--r--src/rom_8094928.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/rom_8094928.c b/src/rom_8094928.c
new file mode 100644
index 000000000..74daec64d
--- /dev/null
+++ b/src/rom_8094928.c
@@ -0,0 +1,135 @@
+#include "global.h"
+#include "pokemon.h"
+
+#define UNK_201606C_ARRAY (unk_2000000 + 0x1606C) // lazy define but whatever.
+
+extern u8 unk_2000000[];
+
+extern struct PokemonStorage gPokemonStorage;
+extern u8 IsLinkDoubleBattle(void);
+extern u8 IsDoubleBattle(void);
+extern u8 battle_get_side_with_given_state(u8);
+extern u8 battle_side_get_owner(u8);
+void sub_8094998(u8[3], u8);
+void sub_8094A74(u8[3], u8, u32);
+
+extern u8 gUnknown_02038470[3];
+extern u8 sub_803FBBC(void);
+extern u16 gUnknown_02024A6A[];
+
+void unref_sub_8094928(struct PokemonStorage *ptr)
+{
+ *ptr = gPokemonStorage;
+}
+
+void unref_sub_8094940(struct PokemonStorage *ptr)
+{
+ gPokemonStorage = *ptr;
+}
+
+void sub_8094958(void)
+{
+ sub_8094998(gUnknown_02038470, sub_803FBBC());
+}
+
+void sub_8094978(u8 arg1, u8 arg2)
+{
+ sub_8094A74((UNK_201606C_ARRAY) + arg1 * 3, arg2, arg1);
+}
+
+void sub_8094998(u8 arg[3], u8 player_number)
+{
+ int i;
+ u32 pos;
+ u8 temp[6];
+ if (IsLinkDoubleBattle() == TRUE)
+ {
+ if (player_number)
+ {
+ *arg = 0x30;
+ arg[1] = 0x45;
+ arg[2] = 0x12;
+ }
+ else
+ {
+ *arg = 0x03;
+ arg[1] = 0x12;
+ arg[2] = 0x45;
+ }
+ }
+ else
+ {
+ if (!IsDoubleBattle())
+ {
+ pos = 1;
+ *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)];
+ for (i = 0; i <= 5; i++)
+ if (i != *temp)
+ temp[pos++] = i;
+ }
+ else
+ {
+ pos = 2;
+ *temp = gUnknown_02024A6A[battle_get_side_with_given_state(0)];
+ temp[1] = gUnknown_02024A6A[battle_get_side_with_given_state(2)];
+ for (i = 0; i <= 5; i++)
+ if ((i != *temp) && (i != temp[1]))
+ temp[pos++] = i;
+ }
+ for (i = 0; i <= 2; i++)
+ arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1];
+ }
+}
+
+void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3)
+{
+ int i, j;
+ u8 temp[6];
+ if (!battle_side_get_owner(arg3))
+ {
+ i = battle_get_side_with_given_state(0);
+ j = battle_get_side_with_given_state(2);
+ }
+ else
+ {
+ i = battle_get_side_with_given_state(1);
+ j = battle_get_side_with_given_state(3);
+ }
+ if (IsLinkDoubleBattle() == TRUE)
+ {
+ if (player_number)
+ {
+ *arg = 0x30;
+ arg[1] = 0x45;
+ arg[2] = 0x12;
+ }
+ else
+ {
+ *arg = 0x03;
+ arg[1] = 0x12;
+ arg[2] = 0x45;
+ }
+ }
+ else
+ {
+ if (!IsDoubleBattle())
+ {
+ int pos = 1;
+ *temp = gUnknown_02024A6A[i];
+ for (i = 0; i <= 5; i++)
+ if (i != *temp)
+ temp[pos++] = i;
+ }
+ else
+ {
+ int pos = 2;
+ *temp = gUnknown_02024A6A[i];
+ temp[1] = gUnknown_02024A6A[j];
+ for (i = 0; i <= 5; i++)
+ if ((i != *temp) && (i != temp[1]))
+ temp[pos++] = i;
+ }
+ for (i = 0; i <= 2; i++)
+ arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1];
+ }
+}