diff options
author | camthesaxman <cameronghall@cox.net> | 2017-06-10 23:01:19 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-06-10 23:01:19 -0500 |
commit | 92ac981c1c0e454a75c0f0f2b2029cd10bd05e6b (patch) | |
tree | 3502dcdbc2f4c00645add4a1c07c88c89659f6ab /src | |
parent | f44934f8f79c7b361b85721134a0a1eaa2065ca1 (diff) |
finish decompiling rom_8094928
Diffstat (limited to 'src')
-rw-r--r-- | src/rom_8094928.c | 135 |
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); +} |