Files
pmd-red/src/code_8023144.c
T
2023-01-13 22:36:16 -05:00

358 lines
8.4 KiB
C

#include "global.h"
#include "constants/iq_skill.h"
#include "memory.h"
#include "pokemon.h"
#include "team_inventory.h"
#include "text.h"
#include "input.h"
#include "item.h"
struct unkStruct_3001B5C
{
// size: 0x3fC
u8 unk0;
u32 unk4;
u32 unk8;
s16 unkC[2];
u32 unk10;
u8 fill14[0x354 - 0x14];
u8 unk354;
u8 fill355[0x35C - 0x355];
u8 unk35C;
u8 fill35D[0x374 - 0x35D];
s16 unk374;
s16 unk376;
s16 unk378;
s16 unk37A;
u8 fill37C[0x390 - 0x37C];
u32 unk390;
struct UnkTextStruct2 *unk394;
struct UnkTextStruct2 unk398[4];
u8 unk3F8[4];
};
extern struct unkStruct_3001B5C *gUnknown_3001B5C;
extern u32 gUnknown_203B298;
extern u16 gUnknown_203B29C;
extern u16 gUnknown_203B29E;
extern struct UnkTextStruct2 gUnknown_80DC91C;
extern struct UnkTextStruct2 gUnknown_80DC904;
extern u8 sub_8023704();
extern void sub_8012D08(void *, u32);
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_8013984(u8 *);
extern void sub_8023420(void);
extern void sub_80234BC(void);
extern u32 sub_80236A4(void);
extern u8 sub_80138B8(void *, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(void *);
extern void sub_8013660(void *);
extern void AddMenuCursorSprite(void *);
struct unkStruct_203B294
{
// size: 0x1A8
/* 0x0 */ u32 state;
/* 0x4 */ u32 fallbackState;
u8 unk8[NUM_IQ_SKILLS];
u8 unk20[NUM_IQ_SKILLS];
u32 unk38;
u32 unk3C;
u32 unk40;
struct unkStruct_80915F4 unk44;
/* 0x48 */ struct PokemonStruct *pokeStruct;
u32 unk4C;
struct Item unk50;
u32 unk54;
u8 fill58[0xA4 - 0x58];
u32 unkA4;
u8 fillA8[0xF4 - 0xA8];
u32 unkF4;
u32 unkF8;
u16 unkFC;
};
struct unkStruct_203B294 *gUnknown_203B294;
extern u8 gUnknown_80DC5EC[];
extern u8 gUnknown_202DE58[];
extern void sub_8022924(s32);
extern s32 sub_80144A4(s32 *);
extern u32 sub_801B00C(void);
extern void sub_801B048(void);
extern u32 sub_801B410(void);
extern void sub_801B450(void);
extern u8 sub_8012FD8(u32 *);
extern void sub_8013114(u32 *, s32 *);
extern u32 sub_801A6E8(u32);
extern void sub_8099690(u32);
extern void sub_801A928(void);
s32 GetNumAvailableIQSkills(u8 *iqSkillBuffer, s32 pokeIQ);
void GetGummiItemStatBoost(struct PokemonStruct* pokemon, u8 itemIndex, u8 a3, struct unkStruct_80915F4* a4);
extern u32 sub_801A8AC(void);
void sub_8022E78(void)
{
switch(sub_801A6E8(1))
{
case 3:
gUnknown_203B294->unk4C = sub_801A8AC();
gUnknown_203B294->unk50 = gTeamInventory_203B460->teamItems[gUnknown_203B294->unk4C];
sub_8022924(2);
break;
case 4:
gUnknown_203B294->unk4C = sub_801A8AC();
gUnknown_203B294->unk50 = gTeamInventory_203B460->teamItems[gUnknown_203B294->unk4C];
sub_8099690(0);
sub_8022924(4);
break;
case 2:
sub_8022924(0x16);
break;
}
}
void sub_8022EF4(void)
{
s32 menuAction;
s32 r5;
menuAction = 0;
sub_801A6E8(0);
if (sub_8012FD8(&gUnknown_203B294->unk54) == 0) {
sub_8013114(&gUnknown_203B294->unk54,&menuAction);
if(menuAction != 1) gUnknown_203B294->unkF4 = menuAction;
}
switch(menuAction)
{
case 1:
sub_8022924(1);
break;
case 2:
case 3:
break;
case 5:
gUnknown_203B294->unk38 = GetNumAvailableIQSkills(gUnknown_203B294->unk8, gUnknown_203B294->pokeStruct->IQ);
GetGummiItemStatBoost(gUnknown_203B294->pokeStruct, gUnknown_203B294->unk50.id, 0, &gUnknown_203B294->unk44);
gUnknown_203B294->unk3C = GetNumAvailableIQSkills(gUnknown_203B294->unk20, gUnknown_203B294->pokeStruct->IQ);
gUnknown_203B294->unk40 = 1;
r5 = gUnknown_203B294->unk44.unk0;
sub_8090E14(gUnknown_202DE58, &gTeamInventory_203B460->teamItems[gUnknown_203B294->unk4C], NULL);
if(r5 != -1)
ShiftItemsDownFrom(gUnknown_203B294->unk4C);
sub_8099690(0);
gUnknown_203B294->fallbackState = 0xA;
switch(r5 + 1)
{
case 1:
sub_8022924(6);
break;
case 2:
sub_8022924(7);
break;
case 3:
sub_8022924(8);
break;
case 4:
sub_8022924(9);
break;
default:
case 0:
gUnknown_203B294->fallbackState = 0x16;
sub_8022924(5);
break;
}
break;
case 6:
sub_8022924(0x15);
break;
case 4:
sub_8022924(3);
break;
case 7:
sub_8099690(0);
sub_8022924(4);
break;
}
}
void sub_8023068(void)
{
s32 menuAction;
menuAction = 0;
sub_801A6E8(0);
sub_8012FD8(&gUnknown_203B294->unk54);
if (sub_8012FD8(&gUnknown_203B294->unkA4) == 0) {
sub_8013114(&gUnknown_203B294->unkA4,&menuAction);
}
switch(menuAction)
{
case 1:
case 3:
sub_8022924(1);
break;
case 2:
ShiftItemsDownFrom(gUnknown_203B294->unk4C);
if (GetNumberOfFilledInventorySlots() == 0) {
sub_8099690(0);
sub_801A928();
sub_8022924(0x14);
}
else {
sub_8022924(1);
}
break;
}
}
void sub_80230E8(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
sub_8022924(1);
case 1:
case 0:
break;
}
}
void sub_8023104(void)
{
switch(sub_801B00C())
{
case 2:
case 3:
sub_801B048();
sub_8022924(1);
case 1:
case 0:
break;
}
}
void sub_8023120(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
sub_8022924(gUnknown_203B294->fallbackState);
}
}
bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 param_4)
{
u8 param_1_u8 = param_1;
if (sub_8023704(param_1_u8)) {
return 0;
}
if (gUnknown_3001B5C == NULL) {
gUnknown_3001B5C = MemoryAlloc(sizeof(struct unkStruct_3001B5C), 8);
}
gUnknown_3001B5C->unk0 = param_1_u8;
gUnknown_3001B5C->unk4 = gUnknown_203B298;
gUnknown_3001B5C->unk390 = index;
gUnknown_3001B5C->unk394 = &gUnknown_3001B5C->unk398[index];
sub_8006518(gUnknown_3001B5C->unk398);
gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC91C;
gUnknown_3001B5C->unk394->unk14 = gUnknown_3001B5C->unk3F8;
if (sub != NULL) {
gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390].unk08 = *sub;
}
sub_8012D08(gUnknown_3001B5C->unk394,param_4);
ResetUnusedInputStruct();
sub_800641C(gUnknown_3001B5C->unk398,1,1);
sub_8013818(&gUnknown_3001B5C->unk35C,sub_80236A4(),param_4,index);
gUnknown_3001B5C->unk374 = gUnknown_203B29C;
gUnknown_3001B5C->unk37A = gUnknown_203B29E;
sub_8013984(&gUnknown_3001B5C->unk35C);
sub_8023420();
sub_80234BC();
return 1;
}
u8 sub_8023278(u8 param_1)
{
s32 iVar3;
u32 temp;
if (param_1 == 0) {
sub_8013660(&gUnknown_3001B5C->unk35C);
return 0;
}
switch(GetKeyPress(&gUnknown_3001B5C->unk35C))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
case 3:
PlayMenuSoundEffect(5);
if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) {
iVar3 = temp + 1;
}
gUnknown_3001B5C->unk4 = iVar3;
sub_80236A4();
break;
default:
if (sub_80138B8(&gUnknown_3001B5C->unk35C, 1) == 0) {
return 0;
}
break;
}
sub_8023420();
sub_80234BC();
return 1;
}
s16 sub_802331C(void)
{
return gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk37A * gUnknown_3001B5C->unk378 + gUnknown_3001B5C->unk374];
}
void sub_8023354(u8 param_1)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_3001B5C->unk398,0,0);
sub_8013984(&gUnknown_3001B5C->unk35C);
sub_8023420();
sub_80234BC();
if (param_1 != 0) {
AddMenuCursorSprite(&gUnknown_3001B5C->unk35C);
}
}
void sub_80233A0(void)
{
if (gUnknown_3001B5C != NULL) {
gUnknown_203B298 = gUnknown_3001B5C->unk4;
gUnknown_203B29C = gUnknown_3001B5C->unk374;
gUnknown_203B29E = gUnknown_3001B5C->unk37A;
gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC904;
ResetUnusedInputStruct();
sub_800641C(gUnknown_3001B5C->unk398,1,1);
MemoryFree(gUnknown_3001B5C);
gUnknown_3001B5C = NULL;
}
}