summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-06-10 23:01:19 -0500
committercamthesaxman <cameronghall@cox.net>2017-06-10 23:01:19 -0500
commit92ac981c1c0e454a75c0f0f2b2029cd10bd05e6b (patch)
tree3502dcdbc2f4c00645add4a1c07c88c89659f6ab /src
parentf44934f8f79c7b361b85721134a0a1eaa2065ca1 (diff)
finish decompiling rom_8094928
Diffstat (limited to 'src')
-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
index 761a49d27..511c4ed7b 100644
--- a/src/rom_8094928.c
+++ b/src/rom_8094928.c
@@ -1,8 +1,28 @@
#include "global.h"
+#include "palette.h"
#include "pokemon.h"
extern u8 ewram[];
+#define DATA_COUNT (6)
+
+struct Unk201B000
+{
+ //u8 filler0[0x260];
+ struct Pokemon unk0[6];
+ u8 filler258[8];
+ u8 unk260;
+ u8 unk261;
+ u8 filler262[2];
+ s16 unk264[DATA_COUNT * 2];
+ u8 filler27C[2];
+ s16 unk27E;
+ s16 unk280;
+ s16 unk282;
+};
+
+#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000))
+
#define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever.
extern struct PokemonStorage gPokemonStorage;
@@ -12,8 +32,12 @@ 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 void nullsub_14();
+extern void OpenPartyMenu();
+extern void sub_806E6F0();
extern u8 gUnknown_02038470[3];
+extern u8 gUnknown_02038473;
extern u8 sub_803FBBC(void);
extern u16 gUnknown_02024A6A[];
@@ -171,3 +195,114 @@ void sub_8094B6C(u8 a, u8 b, u8 c)
}
}
}
+
+u8 sub_8094C20(u8 a)
+{
+ u8 retVal;
+ u8 val = a & 1;
+
+ a /= 2;
+ if (val)
+ retVal = gUnknown_02038470[a] & 0xF;
+ else
+ retVal = gUnknown_02038470[a] >> 4;
+ return retVal;
+}
+
+void sub_8094C54(u8 a, u8 b)
+{
+ u8 val = a & 1;
+
+ a /= 2;
+ if (val)
+ gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF0) | b;
+ else
+ gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF) | (b << 4);
+}
+
+void sub_8094C98(u8 a, u8 b)
+{
+ u8 r4 = sub_8094C20(a);
+ u8 r1 = sub_8094C20(b);
+
+ sub_8094C54(a, r1);
+ sub_8094C54(b, r4);
+}
+
+u8 pokemon_order_func(u8 a)
+{
+ u8 i;
+ u8 r2;
+
+ for (i = 0, r2 = 0; i < 3; i++)
+ {
+ if ((gUnknown_02038470[i] >> 4) == a)
+ return r2;
+ r2++;
+ if ((gUnknown_02038470[i] & 0xF) == a)
+ return r2;
+ r2++;
+ }
+ return 0;
+}
+
+void pokemon_change_order(void)
+{
+ u8 i;
+
+ memcpy(ewram1B000.unk0, gPlayerParty, sizeof(gPlayerParty));
+ for (i = 0; i < 6; i++)
+ {
+ u8 n = pokemon_order_func(i);
+
+ memcpy(&gPlayerParty[n], &ewram1B000.unk0[i], sizeof(struct Pokemon));
+ }
+}
+
+void sub_8094D60(void)
+{
+ struct Pokemon temp[6];
+ u8 i;
+
+ memcpy(temp, gPlayerParty, sizeof(gPlayerParty));
+ for (i = 0; i < 6; i++)
+ {
+ u8 n = sub_8094C20(i);
+
+ memcpy(&gPlayerParty[n], &temp[i], sizeof(struct Pokemon));
+ }
+}
+
+void unref_sub_8094DB0(void)
+{
+ u8 i;
+ u8 r4;
+
+ for (i = 1; i < 6; i++)
+ {
+ u8 n = sub_8094C20(i);
+
+ if (GetMonData(&gPlayerParty[n], MON_DATA_SPECIES) != 0
+ && GetMonData(&gPlayerParty[n], MON_DATA_HP) != 0)
+ {
+ r4 = sub_8094C20(0);
+ sub_8094C98(0, i);
+ sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[n]);
+ break;
+ }
+ }
+}
+
+void sub_8094E20(u8 a)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gUnknown_02038473 = a;
+ nullsub_14();
+ pokemon_change_order();
+ OpenPartyMenu(1, 0xFF);
+}
+
+void sub_8094E4C(void)
+{
+ sub_8094E20(3);
+}