mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-16 05:30:20 -05:00
225 lines
5.7 KiB
C
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;
|
|
}
|
|
}
|
|
|