mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-16 21:50:21 -05:00
217 lines
4.5 KiB
C
217 lines
4.5 KiB
C
#include "global.h"
|
|
#include "globaldata.h"
|
|
#include "code_8012A18_1.h"
|
|
#include "code_80130A8.h"
|
|
#include "code_801602C.h"
|
|
#include "common_strings.h"
|
|
#include "input.h"
|
|
#include "memory.h"
|
|
#include "text_util.h"
|
|
#include "text1.h"
|
|
|
|
extern u8 gAvailablePokemonNames[]; // 202DF98
|
|
|
|
static EWRAM_DATA_2 struct unkStruct_203B200 *sUnknown_203B200 = {0};
|
|
|
|
#include "data/code_801602C.h"
|
|
|
|
static void CreateConfirmNameMenu(void);
|
|
static void HandleConfirmNameMenu(void);
|
|
static bool8 IsNameEmpty(void);
|
|
static void nullsub_36(void);
|
|
|
|
static void sub_80160F4(u32 newState);
|
|
static void sub_8016110(void);
|
|
static void sub_80161F8(void);
|
|
static void sub_8016280(void);
|
|
static void sub_801629C(void);
|
|
|
|
u32 sub_801602C(u32 mode, u8 *name)
|
|
{
|
|
ResetUnusedInputStruct();
|
|
sub_800641C(NULL, TRUE, TRUE);
|
|
|
|
sUnknown_203B200 = MemoryAlloc(sizeof(struct unkStruct_203B200), 8);
|
|
sUnknown_203B200->unk0 = mode;
|
|
sUnknown_203B200->pokeName = name;
|
|
|
|
switch (mode) {
|
|
case 0:
|
|
sUnknown_203B200->unk4 = 0;
|
|
break;
|
|
case 1:
|
|
sUnknown_203B200->unk4 = 1;
|
|
break;
|
|
case 2:
|
|
sUnknown_203B200->unk4 = 2;
|
|
break;
|
|
case 3:
|
|
sUnknown_203B200->unk4 = 3;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
sub_80160F4(0);
|
|
return 1;
|
|
}
|
|
|
|
u32 sub_8016080(void)
|
|
{
|
|
switch (sUnknown_203B200->state) {
|
|
case 0:
|
|
sub_80161F8();
|
|
break;
|
|
case 1:
|
|
HandleConfirmNameMenu();
|
|
break;
|
|
case 2:
|
|
sub_8016280();
|
|
break;
|
|
case 3:
|
|
sub_801629C();
|
|
break;
|
|
case 4:
|
|
return 3;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void sub_80160D8(void)
|
|
{
|
|
if (sUnknown_203B200 != NULL) {
|
|
MemoryFree(sUnknown_203B200);
|
|
sUnknown_203B200 = NULL;
|
|
}
|
|
}
|
|
|
|
static void sub_80160F4(u32 newState)
|
|
{
|
|
sUnknown_203B200->state = newState;
|
|
nullsub_36();
|
|
sub_8016110();
|
|
}
|
|
|
|
static void nullsub_36(void)
|
|
{
|
|
}
|
|
|
|
static void sub_8016110(void)
|
|
{
|
|
switch (sUnknown_203B200->state) {
|
|
case 0:
|
|
sub_80151C0(sUnknown_203B200->unk4, sUnknown_203B200->pokeName);
|
|
break;
|
|
case 1:
|
|
CreateConfirmNameMenu();
|
|
if (sUnknown_203B200->unk4 == 1)
|
|
sub_80922B4(gAvailablePokemonNames, sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH);
|
|
else
|
|
sub_80922B4(gAvailablePokemonNames, sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH);
|
|
|
|
sub_8014248(sIsNameOKPrompt, 0, 3, sUnknown_203B200->menus, 0, 4, 0, NULL, 32);
|
|
break;
|
|
|
|
case 2:
|
|
sub_80141B4(sNameTooLong, 0, 0, 0x121);
|
|
break;
|
|
case 3:
|
|
sub_80141B4(sEnterAName, 0, 0, 0x121);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void CreateConfirmNameMenu(void)
|
|
{
|
|
sUnknown_203B200->menus[0].text = gCommonYes[0];
|
|
sUnknown_203B200->menus[0].menuAction = MENU_ACTION_YES;
|
|
|
|
sUnknown_203B200->menus[1].text = gCommonNo[0];
|
|
sUnknown_203B200->menus[1].menuAction = MENU_ACTION_NO;
|
|
|
|
sUnknown_203B200->menus[2].text = NULL;
|
|
sUnknown_203B200->menus[2].menuAction = MENU_ACTION_DEFAULT;
|
|
}
|
|
|
|
static void sub_80161F8(void)
|
|
{
|
|
s32 length;
|
|
s32 maxLength;
|
|
|
|
if (sub_80154F0() != 3)
|
|
return;
|
|
|
|
sub_80155F0();
|
|
|
|
if (IsNameEmpty()) {
|
|
sub_80160F4(3);
|
|
}
|
|
else {
|
|
length = sub_8015FEC(sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH);
|
|
maxLength = sub_8016028(); // returns 60
|
|
if (length > maxLength)
|
|
sub_80160F4(2);
|
|
else
|
|
sub_80160F4(1);
|
|
}
|
|
}
|
|
|
|
static void HandleConfirmNameMenu(void)
|
|
{
|
|
s32 temp;
|
|
|
|
if (sub_80144A4(&temp))
|
|
return;
|
|
|
|
switch (temp) {
|
|
case MENU_ACTION_YES:
|
|
sub_80160F4(4);
|
|
break;
|
|
case MENU_ACTION_NO:
|
|
case MENU_ACTION_DEFAULT:
|
|
sub_80160F4(0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void sub_8016280(void)
|
|
{
|
|
s32 temp;
|
|
|
|
if (sub_80144A4(&temp) == 0)
|
|
sub_80160F4(0);
|
|
}
|
|
|
|
static void sub_801629C(void)
|
|
{
|
|
s32 temp;
|
|
|
|
if (sub_80144A4(&temp) == 0)
|
|
sub_80160F4(0);
|
|
}
|
|
|
|
static bool8 IsNameEmpty(void)
|
|
{
|
|
u8 character;
|
|
s32 index;
|
|
s32 max;
|
|
|
|
max = POKEMON_NAME_LENGTH; // constant needed at top of loop to match
|
|
index = 0;
|
|
do {
|
|
character = sUnknown_203B200->pokeName[index];
|
|
|
|
if (character == '\0')
|
|
break;
|
|
if (character != ' ')
|
|
return FALSE;
|
|
|
|
index++;
|
|
} while (index < max);
|
|
|
|
return TRUE;
|
|
} |