pmd-red/src/code_801BEEC.c

208 lines
4.7 KiB
C

#include "global.h"
#include "code_80118A4.h"
#include "code_801BEEC.h"
#include "code_801C244.h"
#include "code_801C620.h"
#include "common_strings.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "pokemon_3.h"
#include "text1.h"
#include "text2.h"
static EWRAM_DATA_2 struct unkStruct_203B238 *sUnknown_203B238 = {0};
#include "data/code_801BEEC.h"
static void sub_801BFB4(s32 newState);
static void sub_801BFCC(void);
static void sub_801C03C(void);
static void sub_801C0C8(void);
static void sub_801C118(void);
static void sub_801C1A0(void);
static void sub_801C228(void);
bool8 sub_801BEEC(s16 species)
{
s32 species_s32 = species;
if (HasNoAvailIQSkills(species_s32))
return FALSE;
sUnknown_203B238 = MemoryAlloc(sizeof(struct unkStruct_203B238), 8);
sUnknown_203B238->menuAction = 0;
sUnknown_203B238->species = species_s32;
sUnknown_203B238->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32];
sUnknown_203B238->numIQSkills = GetNumAvailableIQSkills(sUnknown_203B238->iqSkills, sUnknown_203B238->pokeStruct->IQ);
sub_801BFB4(0);
return TRUE;
}
u32 sub_801BF48(void)
{
switch (sUnknown_203B238->state) {
case 4:
return 3;
case 0:
case 1:
sub_801C118();
break;
case 2:
sub_801C1A0();
break;
case 3:
sub_801C228();
break;
}
return 0;
}
void sub_801BF98(void)
{
if (sUnknown_203B238 != NULL) {
MemoryFree(sUnknown_203B238);
sUnknown_203B238 = NULL;
}
}
static void sub_801BFB4(s32 newState)
{
sUnknown_203B238->state = newState;
sub_801BFCC();
sub_801C03C();
}
static void sub_801BFCC(void)
{
s32 i;
sub_8006518(sUnknown_203B238->unkC4);
if (sUnknown_203B238->state == 2)
sUnknown_203B238->unkC4[2] = sUnknown_80DBDB0;
else {
for (i = 0; i < 4; i++)
sUnknown_203B238->unkC4[i] = sUnknown_80DBD98;
}
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B238->unkC4, TRUE, TRUE);
}
static void sub_801C03C(void)
{
switch (sUnknown_203B238->state) {
case 0:
sub_801C244(sUnknown_203B238->species, 0, 8);
break;
case 1:
sub_801C3B0(TRUE);
break;
case 2:
sub_801C4C8();
sub_801C0C8();
sub_8012D60(&sUnknown_203B238->unk74, sUnknown_203B238->unk34, 0, 0, sUnknown_203B238->menuAction, 2);
break;
case 3:
sub_801C620(sUnknown_203B238->iqSkillIndex);
break;
case 4:
break;
}
}
static void sub_801C0C8(void)
{
struct unkStruct_203B238 *puVar1;
s32 i;
u8 *nullText;
u32 menuAction;
s32 max;
puVar1 = sUnknown_203B238;
nullText = NULL;
sUnknown_203B238->unk34[0].text = sSwitch;
puVar1->unk34[0].menuAction = 2;
menuAction = 1;
puVar1->unk34[1].text = gCommonInfo[0];
puVar1->unk34[1].menuAction = 3;
max = 2;
puVar1->unk34[2].text = nullText;
puVar1->unk34[2].menuAction = menuAction;
for (i = 0; i < max; i++) {
if (sUnknown_203B238->unk34[i].menuAction == sUnknown_203B238->menuAction)
return;
}
sUnknown_203B238->menuAction = 2;
}
static void sub_801C118(void)
{
switch (sub_801C308(TRUE)) {
case 3:
sUnknown_203B238->unk24 = sub_801C390();
sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->unk24];
sub_801BFB4(2);
break;
case 4:
sUnknown_203B238->unk24 = sub_801C390();
sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->unk24];
sub_801BFB4(3);
break;
case 2:
sub_801C3F8();
sub_801BFB4(4);
break;
case 0:
case 1:
break;
}
}
static void sub_801C1A0(void)
{
s32 menuAction;
menuAction = 0;
sub_801C308(FALSE);
if (!sub_8012FD8(&sUnknown_203B238->unk74)) {
sub_8013114(&sUnknown_203B238->unk74, &menuAction);
if (menuAction != 1)
sUnknown_203B238->menuAction = menuAction;
}
switch (menuAction) {
case 2:
PlaySound(307);
ToggleIQSkill((u8 *)&sUnknown_203B238->pokeStruct->IQSkills, sUnknown_203B238->iqSkillIndex);
sub_801BFB4(1);
break;
case 3:
sub_801BFB4(3);
break;
case 1:
sub_801BFB4(1);
break;
}
}
static void sub_801C228(void)
{
switch (sub_801C674()) {
case 2:
case 3:
sub_801C6B4();
sub_801BFB4(1);
case 0:
case 1:
break;
}
}