diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-10-22 10:01:07 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-22 10:01:07 -0700 |
commit | 3e5dd1d047bada52ab0dce2fe58b04e39bcaa1cc (patch) | |
tree | 0e40067d711c783ef97667f4a8256f38ab0d4b0a /src/code_801AFA4.c | |
parent | 3f7ee3a806d965fae70fd98f2cd1af13a2e4cf0b (diff) |
Death by 74 files (#65)
* death by 74 files
* 20% reached
* doc move stuff in pokemon
* fix undef reference
* doc more and plumb a few more constanst for num party members and num moves
* that struct is def PokemonMove.. clean up all code with it
Diffstat (limited to 'src/code_801AFA4.c')
-rw-r--r-- | src/code_801AFA4.c | 173 |
1 files changed, 143 insertions, 30 deletions
diff --git a/src/code_801AFA4.c b/src/code_801AFA4.c index b7b9234..9ab6fec 100644 --- a/src/code_801AFA4.c +++ b/src/code_801AFA4.c @@ -4,12 +4,11 @@ #include "item.h" #include "team_inventory.h" #include "menu.h" - -extern struct TeamInventory *gTeamInventory_203B460; +#include "pokemon.h" extern void sub_8092C84(u8 *, u16); extern void sub_8099690(u32); -extern u32 sub_801B2F4(void); +extern s32 GetNumMonsAbleToLearnItemMove(void); extern void sub_801B064(s32); @@ -24,47 +23,52 @@ extern u32 gUnknown_80DB9E4; extern u32 gUnknown_80DBA0C; extern u8 gUnknown_202E1C8[0x50]; +extern u8 gAvailablePokemonNames[0x50]; +extern u8 gUnknown_202E218[0x50]; +extern void sub_8092AD4(struct PokemonMove*, u16); +extern void sub_809401C(struct PokemonMove *, struct PokemonMove *); extern bool8 IsHMItem(u8); -extern void DisplayGulpinDialogueSprite(u32, u32, u32 *); +extern void DisplayGulpinDialogueSprite(u32, u32, void *); extern void sub_801B178(void); -extern void sub_8094060(u32 *, u32 *); +extern void sub_8094060(void *, struct PokemonMove *); extern void PlaySound(u32); extern void sub_80141B4(u32 *, u32, u32 ,u32); extern void sub_8014248(u32 *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32); +extern void sub_808DA34(u8 *buffer, struct PokemonStruct *pokemon); +extern s32 sub_80144A4(s32 *); +extern u32 sub_801E8C0(void); +extern void sub_801E93C(void); -struct subStruct_203B22C -{ - u8 fill0[0x2C]; - u32 unk2C; -}; +extern bool8 CanMonLearnMove(u16 moveID, s16 _species); +extern s32 sub_808D580(s32*); struct unkStruct_203B22C { // size: 0xa4 - s32 state; - u32 unk4; - u8 unk8; // item index - u16 unkA; // item move?? - u32 unkC; - u8 fill10[0x58 - 0x10]; - s16 unk58; - u16 unk5A; - struct subStruct_203B22C *unk5C; + /* 0x0 */ s32 state; + /* 0x4 */ u32 teamItemIndex; + /* 0x8 */ u8 itemIndex; // item index + /* 0xA */ u16 moveID; // item move?? + /* 0xC */ struct PokemonMove moves[MAX_MON_MOVES * 2]; + /* 0x4C */ s32 monsAbleToLearnMove; // number of party members able to learn move + /* 0x50 */ s16 unk50[MAX_TEAM_MEMBERS]; // species IDs of each member able to learn move + /* 0x58 */ s16 chosenPokemon; // species of pokemon that will learn move + /* 0x5C */ struct PokemonStruct *pokeStruct; // PokemonStruct of said pokemon u32 unk60; /* 0x64 */ struct MenuItem menuItems[8]; }; extern struct unkStruct_203B22C *gUnknown_203B22C; -u32 sub_801AFA4(u32 r0) +u32 sub_801AFA4(u32 index) { gUnknown_203B22C = MemoryAlloc(sizeof(struct unkStruct_203B22C), 8); - gUnknown_203B22C->unk4 = r0; - gUnknown_203B22C->unk8 = gTeamInventory_203B460->teamItems[r0].itemIndex; - gUnknown_203B22C->unkA = GetItemMove(gUnknown_203B22C->unk8); - sub_8092C84(gUnknown_202E1C8, gUnknown_203B22C->unkA); + gUnknown_203B22C->teamItemIndex = index; + gUnknown_203B22C->itemIndex = gTeamInventory_203B460->teamItems[index].itemIndex; + gUnknown_203B22C->moveID = GetItemMove(gUnknown_203B22C->itemIndex); + sub_8092C84(gUnknown_202E1C8, gUnknown_203B22C->moveID); sub_8099690(0); - if(sub_801B2F4() == 0) + if(GetNumMonsAbleToLearnItemMove() == 0) { sub_801B064(3); } @@ -126,14 +130,14 @@ void sub_801B080(void) sub_8014248(&gUnknown_80DB9BC, 0, gUnknown_203B22C->unk60, gUnknown_203B22C->menuItems, 0, 4, 0, 0, 0x20); break; case 1: - DisplayGulpinDialogueSprite(2, gUnknown_203B22C->unk58, &gUnknown_203B22C->unkC); + DisplayGulpinDialogueSprite(2, gUnknown_203B22C->chosenPokemon, gUnknown_203B22C->moves); break; case 2: - sub_8094060(&gUnknown_203B22C->unkC, &gUnknown_203B22C->unk5C->unk2C); - if(!IsHMItem(gUnknown_203B22C->unk8)) + sub_8094060(gUnknown_203B22C->moves, gUnknown_203B22C->pokeStruct->moves); + if(!IsHMItem(gUnknown_203B22C->itemIndex)) { - gTeamInventory_203B460->teamItems[gUnknown_203B22C->unk4].numItems = gUnknown_203B22C->unk8 - 0x7D; - gTeamInventory_203B460->teamItems[gUnknown_203B22C->unk4].itemIndex = ITEM_ID_USED_TM; + gTeamInventory_203B460->teamItems[gUnknown_203B22C->teamItemIndex].numItems = gUnknown_203B22C->itemIndex - 0x7D; + gTeamInventory_203B460->teamItems[gUnknown_203B22C->teamItemIndex].itemIndex = ITEM_ID_USED_TM; } PlaySound(0x9C << 1); // #+CM$m8#R learned @@ -150,3 +154,112 @@ void sub_801B080(void) break; } } + +void sub_801B178(void) +{ + int monIndex; + u8 *bufferPtr; + + for(monIndex = 0; monIndex < gUnknown_203B22C->monsAbleToLearnMove; monIndex++) + { + bufferPtr = gAvailablePokemonNames + (0x50 * monIndex); + sub_808DA34(bufferPtr, &gRecruitedPokemonRef->pokemon[gUnknown_203B22C->unk50[monIndex]]); + gUnknown_203B22C->menuItems[monIndex].text = bufferPtr; + gUnknown_203B22C->menuItems[monIndex].menuAction = monIndex + 4; + } + gUnknown_203B22C->menuItems[monIndex].text = NULL; + gUnknown_203B22C->menuItems[monIndex].menuAction = 1; +} + +void sub_801B200(void) +{ + s32 temp; + s32 moveIndex; + struct PokemonMove *pokeMove; + + if(sub_80144A4(&temp) == 0) + { + gUnknown_203B22C->unk60 = temp; + switch(temp) + { + case 1: + sub_801B064(4); + break; + default: + gUnknown_203B22C->chosenPokemon = gUnknown_203B22C->unk50[temp - 4]; + gUnknown_203B22C->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B22C->chosenPokemon]; + sub_808DA34(gUnknown_202E218, gUnknown_203B22C->pokeStruct); + sub_809401C(gUnknown_203B22C->moves, gUnknown_203B22C->pokeStruct->moves); + for(moveIndex = 0; moveIndex < MAX_MON_MOVES * 2; moveIndex++) + { + pokeMove = &gUnknown_203B22C->moves[moveIndex]; + if((pokeMove->moveFlags & MOVE_FLAG_EXISTS) == 0) + { + sub_8092AD4(pokeMove, gUnknown_203B22C->moveID); + break; + } + } + if(moveIndex >= MAX_MON_MOVES) + sub_801B064(1); + else + sub_801B064(2); + break; + case 0: + break; + } + } +} + +void sub_801B2AC(void) +{ + switch(sub_801E8C0()) + { + case 3: + sub_801E93C(); + sub_801B064(2); + break; + case 2: + sub_801E93C(); + sub_801B064(0); + break; + case 0: + case 1: + break; + } +} + + +void sub_801B2D8(void) +{ + s32 temp; + + if(sub_80144A4(&temp) == 0) + { + sub_801B064(4); + } +} + +s32 GetNumMonsAbleToLearnItemMove(void) +{ + s32 length; + s32 iVar4; + s32 index; + s32 team [MAX_TEAM_MEMBERS]; + struct PokemonStruct *preload; + + + length = sub_808D580(team); + gUnknown_203B22C->monsAbleToLearnMove = 0; + + for(index = 0; index < length; index++) + { + preload = &gRecruitedPokemonRef->pokemon[team[index]]; + if (CanMonLearnMove(gUnknown_203B22C->moveID, preload->speciesNum)) { + gUnknown_203B22C->unk50[gUnknown_203B22C->monsAbleToLearnMove] = team[index]; + iVar4 = gUnknown_203B22C->monsAbleToLearnMove; + if (iVar4 >= MAX_TEAM_MEMBERS) break; + gUnknown_203B22C->monsAbleToLearnMove = iVar4 + 1; + } + } + return gUnknown_203B22C->monsAbleToLearnMove; +} |