diff options
Diffstat (limited to 'src/exclusive_pokemon_1.c')
-rw-r--r-- | src/exclusive_pokemon_1.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/exclusive_pokemon_1.c b/src/exclusive_pokemon_1.c new file mode 100644 index 0000000..37b4dfe --- /dev/null +++ b/src/exclusive_pokemon_1.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "exclusive_pokemon.h" + +extern struct ExclusivePokemonData *gUnknown_203B498; +extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON]; + +void sub_8094924(u32 *, u8 *, u32); +void sub_80980B4(s16); +void sub_8097FA8(u8); +void sub_8098170(s32); +void sub_8097FF8(void); + +u8 sub_8098100(u8); +u8 sub_8098134(s16); +u8 sub_80981A0(s32); +void sub_809488C(u32 *, u8 *, s32); + +bool8 IsExclusivePokemonUnlocked(s16 pokeID) +{ + s32 iVar2; + s32 pokeID_s32; + + pokeID_s32 = pokeID; + + for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++) + { + if(gExclusivePokemon[iVar2].poke_id == pokeID_s32) + return gUnknown_203B498->Exclusives[iVar2]; + } + return TRUE; +} + +void UnlockExclusivePokemon(s16 pokeID) +{ + s32 iVar2; + s32 pokeID_s32; + + pokeID_s32 = pokeID; + + for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++) + { + if(gExclusivePokemon[iVar2].poke_id == pokeID_s32) + gUnknown_203B498->Exclusives[iVar2] = 1; + } +} + +void WriteExclusivePokemon(u32 *r0) +{ + s32 iVar2; + u8 *puVar2; + + u8 stack_0; + u8 stack_1; + u8 stack_2; + u8 neg_1; + u8 zero; + + neg_1 = -1; + zero = 0; + + + sub_809488C(r0, (u8 *)gUnknown_203B498, 1); + for(iVar2 = 0; iVar2 < 424; iVar2++) + { + stack_0 = sub_8098134(iVar2); + sub_809488C(r0, &stack_0, 1); + } + for(iVar2 = 0; iVar2 < 64; iVar2++) + { + stack_1 = sub_8098100(iVar2); + sub_809488C(r0, &stack_1, 1); + } + for(iVar2 = 0; iVar2 < 31; iVar2++) + { + stack_2 = sub_80981A0(iVar2); + sub_809488C(r0, &stack_2, 1); + } + for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++) + { + if(gUnknown_203B498->Exclusives[iVar2]) + puVar2 = &neg_1; + else + puVar2 = &zero; + sub_809488C(r0, puVar2, 1); + } +} + +void ReadExclusivePokemon(u32 *r0) +{ + s32 iVar2; + u8 stack_0; + u8 stack_1; + u8 stack_2; + u8 stack_3; + + memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData)); + sub_8094924(r0, (u8 *)gUnknown_203B498, 1); + for(iVar2 = 0; iVar2 < 424; iVar2++) + { + sub_8094924(r0, &stack_0, 1); + if(stack_0) + sub_80980B4(iVar2); + } + for(iVar2 = 0; iVar2 < 64; iVar2++) + { + sub_8094924(r0, &stack_1, 1); + if(stack_1) + sub_8097FA8(iVar2); + } + for(iVar2 = 0; iVar2 < 31; iVar2++) + { + sub_8094924(r0, &stack_2, 1); + if(stack_2) + sub_8098170(iVar2); + } + for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++) + { + sub_8094924(r0, &stack_3, 1); + + do; while(0); // do/while needed for matching - jiang + + gUnknown_203B498->Exclusives[iVar2] = 1 & stack_3; + } + sub_8097FF8(); +} |