pmd-red/src/code_801F808.c
2025-02-26 09:53:49 +01:00

225 lines
5.7 KiB
C

#include "global.h"
#include "globaldata.h"
#include "string_format.h"
#include "code_80118A4.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "moves.h"
#include "sprite.h"
#include "structs/menu.h"
#include "structs/str_text.h"
#include "text.h"
// TODO: UNIFY WITH struct_Sub80095E4
struct unkStruct_203B278
{
/* 0x0 */ s32 state;
/* 0x4 */ u16 *moveIDs;
/* 0x8 */ u16 selectedMoveID;
s32 unkC;
s32 unk10;
struct subStruct_203B240 *unk14[4];
u32 unk24;
MenuInputStruct unk28;
u32 unk5C;
Window *unk60;
Windows windows;
WindowHeader unkC4;
MenuInputStructSub unkC8;
};
EWRAM_INIT struct unkStruct_203B278 *gUnknown_203B278 = {NULL};
static const Window sUnknown_80DC2F8 = {
0,
3,
0, 0,
0, 0,
0, 0,
NULL
};
const u8 gUnknown_80DC310[] = _("{POKEMON_0}");
extern void sub_801F918(s32);
extern void sub_801FA58(void);
extern void sub_801FAD4(void);
extern void sub_801F930(void);
extern void sub_801F9A4(void);
bool8 sub_801F808(u16 *moveIDs)
{
s32 index;
ResetSprites(TRUE);
gUnknown_203B278 = MemoryAlloc(sizeof(struct unkStruct_203B278), 8);
gUnknown_203B278->unk5C = 0;
gUnknown_203B278->unk60 = &gUnknown_203B278->windows.id[0];
sub_80140B4(&gUnknown_203B278->windows);
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B278->windows, TRUE, TRUE);
gUnknown_203B278->moveIDs = moveIDs;
for(index = 4; index > 1; index--)
{
if(gUnknown_203B278->moveIDs[index - 1] != 0) break;
}
sub_8013818(&gUnknown_203B278->unk28,index,1,gUnknown_203B278->unk5C);
sub_801317C(&gUnknown_203B278->unkC8);
sub_801F918(0);
return 1;
}
u32 sub_801F890(void)
{
switch (gUnknown_203B278->state) {
case 0:
sub_801FA58();
break;
case 1:
sub_801FAD4();
break;
case 3:
return 3;
default:
case 2:
return 2;
}
return 0;
}
void sub_801F8D0(void)
{
if(gUnknown_203B278)
{
gUnknown_203B278->windows.id[gUnknown_203B278->unk5C] = sUnknown_80DC2F8;
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B278->windows, TRUE, TRUE);
MemoryFree(gUnknown_203B278);
gUnknown_203B278 = NULL;
}
}
void sub_801F918(s32 newState)
{
gUnknown_203B278->state = newState;
sub_801F930();
sub_801F9A4();
}
void sub_801F930(void)
{
sub_80140B4(&gUnknown_203B278->windows);
switch(gUnknown_203B278->state)
{
case 0:
gUnknown_203B278->unk60->unk14 = &gUnknown_203B278->unkC4;
gUnknown_203B278->unkC4.f0 = gUnknown_203B278->unk28.unk20;
gUnknown_203B278->unkC4.f1 = gUnknown_203B278->unk28.unk1E;
gUnknown_203B278->unkC4.f2 = 0x10;
gUnknown_203B278->unkC4.f3 = 0;
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B278->windows, TRUE, TRUE);
break;
case 1:
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B278->windows, TRUE, TRUE);
break;
default:
break;
}
}
void sub_801F9A4(void)
{
u8 **name;
switch (gUnknown_203B278->state) {
case 0:
CallPrepareTextbox_8008C54(gUnknown_203B278->unk5C);
gUnknown_203B278->selectedMoveID = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E];
gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->selectedMoveID,gUnknown_203B278->unk5C,gUnknown_203B278->unk14);
gUnknown_203B278->unk24 = 0;
break;
case 1:
CallPrepareTextbox_8008C54(gUnknown_203B278->unk5C);
sub_80073B8(gUnknown_203B278->unk5C);
name = &(gUnknown_203B278->unk14[gUnknown_203B278->unkC]->pokeName);
strcpy(gFormatBuffer_Monsters[0], *name);
PrintFormattedStringOnWindow(0x10,0,gUnknown_80DC310,gUnknown_203B278->unk5C,0); // $m0
PrintFormattedStringOnWindow(4,0x10,gUnknown_203B278->unk14[gUnknown_203B278->unkC]->unk4,gUnknown_203B278->unk5C,0);
sub_80073E0(gUnknown_203B278->unk5C);
break;
case 2:
break;
}
}
void sub_801FA58(void)
{
if(gUnknown_203B278->unk10 != 0)
{
if(gUnknown_203B278->unk24 & 8)
{
sub_8013F84();
}
gUnknown_203B278->unk24++;
}
switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C))
{
case 1:
PlayMenuSoundEffect(0);
if(gUnknown_203B278->unk10 != 0)
{
gUnknown_203B278->unkC = 0;
sub_801F918(1);
}
else
{
sub_801F918(3);
}
break;
case 2:
PlayMenuSoundEffect(1);
sub_801F918(2);
break;
default:
if(sub_8013938(&gUnknown_203B278->unk28))
{
sub_801F918(0);
}
}
}
void sub_801FAD4(void)
{
if(gUnknown_203B278->unkC < gUnknown_203B278->unk10 - 1)
{
if(gUnknown_203B278->unk24 & 8)
{
sub_8013F84();
}
gUnknown_203B278->unk24++;
}
switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C))
{
case 1:
PlayMenuSoundEffect(0);
gUnknown_203B278->unkC++;
if(gUnknown_203B278->unkC < gUnknown_203B278->unk10)
{
sub_801F918(1);
}
else {
sub_801F918(0);
}
break;
case 2:
PlayMenuSoundEffect(1);
sub_801F918(2);
break;
}
}