pmd-red/src/code_8015080.c
2025-03-21 23:48:05 -04:00

895 lines
25 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "global.h"
#include "globaldata.h"
#include "code_800D090.h"
#include "code_80118A4.h"
#include "code_803D0D8.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "sprite.h"
#include "string_format.h"
#include "text_1.h"
#include "text_2.h"
#include "text_3.h"
struct unkStruct_203B1F8
{
// size: 0x4B4
u32 menuAction;
MenuStruct unk4;
WindowTemplates windows;
u8 buffer[0x400];
};
EWRAM_INIT struct unkStruct_203B1F8 *gUnknown_203B1F8 = {NULL};
const WindowTemplate gUnknown_80DAF70 = {
0x00,
0x03,
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const WindowTemplate gUnknown_80DAF88 = {
0x00,
0x03,
0x02, 0x02,
0x1A, 0x0c,
0x0c, 0x00,
NULL
};
const WindowTemplate gUnknown_80DAFA0 = {
0x00,
0x03,
0x16, 0x0F,
0x06, 0x03,
0x03, 0x00,
NULL
};
struct Struct80DB0F8
{
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 x;
u8 y;
u8 unk6;
s32 unk8;
};
UNUSED static const char sPksDir[] = "pksdir0";
static const DungeonPos gUnknown_80DAFC0[] =
{
{3, 0xD},
{0xF, 0xD},
{0x1B, 0xD},
{0x27, 0xD},
{0x33, 0xD},
{0x40, 0xF},
{0x4C, 0xF},
{0x58, 0xF},
{0x64, 0xF},
{0x70, 0xF},
{0x7C, 0xF},
{0x88, 0xF},
{0x94, 0xF},
{0xA1, 0xD},
{0xAD, 0xD},
{0xB9, 0xD},
{0xC5, 0xD},
{0xD1, 0xD},
{3, 0x1A},
{0xF, 0x1A},
{0x1B, 0x1A},
{0x27, 0x1A},
{0x33, 0x1A},
{0x40, 0x1C},
{0x4C, 0x1C},
{0x58, 0x1C},
{0x64, 0x1C},
{0x70, 0x1C},
{0x7C, 0x1C},
{0x88, 0x1C},
{0x94, 0x1C},
{0xA1, 0x1A},
{0xAD, 0x1A},
{0xB9, 0x1A},
{0xC5, 0x1A},
{0xD1, 0x1A},
{3, 0x28},
{0xF, 0x28},
{0x1B, 0x28},
{0x27, 0x28},
{0x33, 0x28},
{0x40, 0x2A},
{0x4C, 0x2A},
{0x58, 0x2A},
{0x64, 0x2A},
{0x70, 0x2A},
{0x7C, 0x2A},
{0x88, 0x2A},
{0x94, 0x2A},
{0xA1, 0x28},
{0xAD, 0x28},
{0xB9, 0x28},
{0xC5, 0x28},
{0xD1, 0x28},
};
static const DungeonPos gUnknown_80DB098[] =
{
{0x20, 0x12},
{0x2E, 0x12},
{0x3C, 0x12},
{0x4A, 0x12},
{0x58, 0x14},
{0x66, 0x14},
{0x74, 0x14},
{0x82, 0x14},
{0x90, 0x12},
{0x9E, 0x12},
{0xAC, 0x12},
{0xBA, 0x12},
{0x20, 0x24},
{0x2E, 0x24},
{0x3C, 0x24},
{0x4A, 0x24},
{0x58, 0x26},
{0x66, 0x26},
{0x74, 0x26},
{0x82, 0x26},
{0x90, 0x24},
{0x9E, 0x24},
{0xAC, 0x24},
{0xBA, 0x24},
};
// It was programmed as a 2d array, however it's effectively a 1d array(since there's only one entry for [0][x]). Could be different in Blue?
static const struct Struct80DB0F8 gUnknown_80DB0F8[][85] =
{
[0] = {
{0, 0, 0, 0, 8, 3, 0, 264},
{0, 0, 0, 0, 8, 14, 0, 264},
{0, 0, 0, 0, 8, 25, 0, 264},
{5, 4, 81, 9, 8, 36, 3, 263},
{3, 5, 82, 10, 8, 47, 3, 261},
{4, 3, 83, 11, 8, 58, 3, 262},
{11, 7, 78, 12, 36, 3, 0, 97},
{6, 8, 79, 13, 36, 14, 0, 110},
{7, 9, 80, 14, 36, 25, 0, 65},
{8, 10, 3, 15, 36, 36, 0, 78},
{9, 11, 4, 16, 36, 47, 0, 233},
{10, 6, 5, 17, 36, 58, 0, 43},
{17, 13, 6, 18, 50, 3, 0, 98},
{12, 14, 7, 19, 50, 14, 0, 111},
{13, 15, 8, 20, 50, 25, 0, 66},
{14, 16, 9, 21, 50, 36, 0, 79},
{15, 17, 10, 22, 50, 47, 0, 49},
{16, 12, 11, 23, 50, 58, 0, 45},
{23, 19, 12, 24, 64, 3, 0, 99},
{18, 20, 13, 25, 64, 14, 0, 112},
{19, 21, 14, 26, 64, 25, 0, 67},
{20, 22, 15, 27, 64, 36, 0, 80},
{21, 23, 16, 28, 64, 47, 0, 50},
{22, 18, 17, 29, 64, 58, 0, 44},
{29, 25, 18, 30, 78, 3, 0, 100},
{24, 26, 19, 31, 78, 14, 0, 113},
{25, 27, 20, 32, 78, 25, 0, 68},
{26, 28, 21, 33, 78, 36, 0, 81},
{27, 29, 22, 34, 78, 47, 0, 51},
{28, 24, 23, 35, 78, 58, 0, 46},
{35, 31, 24, 36, 92, 3, 0, 101},
{30, 32, 25, 37, 92, 14, 0, 114},
{31, 33, 26, 38, 92, 25, 0, 69},
{32, 34, 27, 39, 92, 36, 0, 82},
{33, 35, 28, 40, 92, 47, 0, 52},
{34, 30, 29, 41, 92, 58, 0, 33},
{41, 37, 30, 42, 106, 3, 0, 102},
{36, 38, 31, 43, 106, 14, 0, 115},
{37, 39, 32, 44, 106, 25, 0, 70},
{38, 40, 33, 45, 106, 36, 0, 83},
{39, 41, 34, 46, 106, 47, 0, 53},
{40, 36, 35, 47, 106, 58, 0, 63},
{47, 43, 36, 48, 120, 3, 0, 103},
{42, 44, 37, 49, 120, 14, 0, 116},
{43, 45, 38, 50, 120, 25, 0, 71},
{44, 46, 39, 51, 120, 36, 0, 84},
{45, 47, 40, 52, 120, 47, 0, 54},
{46, 42, 41, 53, 120, 58, 0, 145},
{53, 49, 42, 54, 134, 3, 0, 104},
{48, 50, 43, 55, 134, 14, 0, 117},
{49, 51, 44, 56, 134, 25, 0, 72},
{50, 52, 45, 57, 134, 36, 0, 85},
{51, 53, 46, 58, 134, 47, 0, 55},
{52, 48, 47, 59, 134, 58, 0, 146},
{59, 55, 48, 60, 148, 3, 0, 105},
{54, 56, 49, 61, 148, 14, 0, 118},
{55, 57, 50, 62, 148, 25, 0, 73},
{56, 58, 51, 63, 148, 36, 0, 86},
{57, 59, 52, 64, 148, 47, 0, 56},
{58, 54, 53, 65, 148, 58, 0, 147},
{65, 61, 54, 66, 162, 3, 0, 106},
{60, 62, 55, 67, 162, 14, 0, 119},
{61, 63, 56, 68, 162, 25, 0, 74},
{62, 64, 57, 69, 162, 36, 0, 87},
{63, 65, 58, 70, 162, 47, 0, 57},
{64, 60, 59, 71, 162, 58, 0, 148},
{71, 67, 60, 72, 176, 3, 0, 107},
{66, 68, 61, 73, 176, 14, 0, 120},
{67, 69, 62, 74, 176, 25, 0, 75},
{68, 70, 63, 75, 176, 36, 0, 88},
{69, 71, 64, 76, 176, 47, 0, 48},
{70, 66, 65, 77, 176, 58, 0, 189},
{77, 73, 66, 78, 190, 3, 0, 108},
{72, 74, 67, 79, 190, 14, 0, 121},
{73, 75, 68, 80, 190, 25, 0, 76},
{74, 76, 69, 81, 190, 36, 0, 89},
{75, 77, 70, 82, 190, 47, 0, 58},
{76, 72, 71, 83, 190, 58, 0, 190},
{83, 79, 72, 6, 204, 3, 0, 109},
{78, 80, 73, 7, 204, 14, 0, 122},
{79, 81, 74, 8, 204, 25, 0, 77},
{80, 82, 75, 3, 204, 36, 0, 90},
{81, 83, 76, 4, 204, 47, 0, 133},
{82, 78, 77, 5, 204, 58, 0, 32},
{0, 0, 0, 0, 8, 3, 2, 265},
}
};
static const u8 *const gUnknown_80DB4F4[] =
{
_(""),
_(""),
_("かな"),
_("カナ"),
_(""),
_("DEL"),
_("END"),
};
static const WindowTemplate gUnknown_80DB538 = {
0x00,
0x03,
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
static const WindowTemplate gUnknown_80DB550 = {
0x00,
0x01,
0x01, 0x0A,
0x1C, 0x09,
0x09, 0x00,
NULL
};
static const WindowTemplate gUnknown_80DB568 = {
0x00,
0x01,
0x04, 0x03,
0x16, 0x05,
0x05, 0x00,
NULL
};
static const WindowTemplate gUnknown_80DB580 = {
0x00,
0x01,
0x01, 0x02,
0x1C, 0x07,
0x07, 0x00,
NULL
};
bool8 sub_8015080(u8 *buffer, const MenuItem *menuItems)
{
s32 index;
gUnknown_203B1F8 = MemoryAlloc(sizeof(struct unkStruct_203B1F8), 8);
gUnknown_203B1F8->menuAction = 0;
for(index = 0; index < 4; index++)
{
gUnknown_203B1F8->windows.id[index] = gUnknown_80DAF70;
}
gUnknown_203B1F8->windows.id[0] = gUnknown_80DAF88;
gUnknown_203B1F8->windows.id[2] = gUnknown_80DAFA0;
sub_8012CAC(&gUnknown_203B1F8->windows.id[2], menuItems);
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B1F8->windows, 1, 1);
sub_80073B8(0);
FormatString(buffer, gUnknown_203B1F8->buffer, gUnknown_203B1F8->buffer + 0x400, 0);
PrintStringOnWindow(4, 4, gUnknown_203B1F8->buffer, 0, 0);
sub_80073E0(0);
sub_8012D60(&gUnknown_203B1F8->unk4, menuItems, 0, 0, -1, 2);
return TRUE;
}
u32 sub_801516C(void)
{
if(!sub_8012FD8(&gUnknown_203B1F8->unk4)) {
sub_8013114(&gUnknown_203B1F8->unk4, &gUnknown_203B1F8->menuAction);
return 3;
}
else {
return 0;
}
}
u32 sub_8015198(void)
{
return gUnknown_203B1F8->menuAction;
}
void sub_80151A4(void)
{
if(gUnknown_203B1F8) {
MemoryFree(gUnknown_203B1F8);
gUnknown_203B1F8 = NULL;
}
}
struct unkStruct_203B1FC
{
// size: 0x198
u32 unk0;
u8 unk4;
// Note: These had to be declared like these, because SpriteOAM is aligned by 4 and these aren't. Makes you think if SpriteOAM is actually a struct, and not just an array of 4 u16s.
u16 sprite1Attribs[4];
u16 sprite2Attribs[4];
u8 unk16;
u8 unk17;
u8 unk18;
u8 unk19;
u8 unk1A;
u8 unk1B;
u8 unk1C;
u16 unk1E[54];
s16 unk8A[54];
u8 *unkF8;
u8 unkFC[56];
u8 *unk134;
WindowTemplates windows;
};
extern struct unkStruct_203B1FC *gUnknown_203B1FC;
s32 sub_8015F44(void);
void sub_8015A08(u32);
void sub_8015C1C(void);
void sub_8015F84();
void sub_80157D8(void);
void sub_80158BC(void);
void sub_8015E10(u8 *a0, s32 a1, s32 _a2);
void sub_8015EB4(u8 *a0, s32 a1, s32 _a2);
s32 sub_8016028(void);
s32 sub_8015FEC(u8 *buffer, s32 size);
u32 sub_801560C(void);
bool8 sub_8015748(void);
u32 sub_80151C0(u32 r0, u8 *buffer)
{
SpriteOAM *sprite;
s32 index;
s32 i;
gUnknown_203B1FC = MemoryAlloc(sizeof(*gUnknown_203B1FC), 8);
gUnknown_203B1FC->unk0 = r0;
gUnknown_203B1FC->unk19 = 0;
gUnknown_203B1FC->unk18 = 0;
gUnknown_203B1FC->unk4 = 0;
switch(gUnknown_203B1FC->unk0) {
case 4:
gUnknown_203B1FC->unk1A = 9;
gUnknown_203B1FC->unk4 = 1;
gUnknown_203B1FC->unk1B = 0x36;
break;
case 5:
gUnknown_203B1FC->unk1A = 9;
gUnknown_203B1FC->unk4 = 1;
gUnknown_203B1FC->unk1B = 0x18;
break;
case 0:
case 1:
case 3:
default:
gUnknown_203B1FC->unk1A = 6;
gUnknown_203B1FC->unk1B = 0xA;
break;
}
gUnknown_203B1FC->unk134 = buffer;
gUnknown_203B1FC->unkF8 = gUnknown_203B1FC->unkFC;
for (i = 0; i < 0x36; i++) {
gUnknown_203B1FC->unkF8[i] = 0;
}
MemoryCopy8(gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk134, gUnknown_203B1FC->unk1B);
for (i = 0; i < gUnknown_203B1FC->unk1B; i++) {
if (gUnknown_203B1FC->unkF8[i] == 0) {
break;
}
}
for (; i < gUnknown_203B1FC->unk1B; i++) {
gUnknown_203B1FC->unkF8[i] = 0;
}
gUnknown_203B1FC->unk1C = sub_8015F44();
if (gUnknown_203B1FC->unk1C == gUnknown_203B1FC->unk1B) {
gUnknown_203B1FC->unk1C--;
}
SpriteSetAffine1((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetAffine2((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetObjMode((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetMosaic((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetBpp((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetPriority((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetPalNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 15);
SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, DISPLAY_WIDTH);
SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, DISPLAY_WIDTH);
if (gUnknown_203B1FC->unk4 != 0) {
SpriteSetMatrixNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetTileNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0x3F6);
SpriteSetSize((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetShape((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 1);
}
else {
SpriteSetMatrixNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 16);
SpriteSetTileNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0x3F0);
SpriteSetSize((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0);
SpriteSetShape((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 1);
}
gUnknown_203B1FC->unk16 = 4;
sprite = (SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs;
SpriteSetAffine1(sprite, 0);
SpriteSetAffine2(sprite, 0);
SpriteSetObjMode(sprite, 0);
SpriteSetMosaic(sprite, 0);
SpriteSetBpp(sprite, 0);
SpriteSetShape(sprite, 0);
SpriteSetTileNum(sprite, 0x3F4);
SpriteSetPriority(sprite, 0);
SpriteSetPalNum(sprite, 15);
SpriteSetMatrixNum(sprite, 0);
SpriteSetSize(sprite, 0);
SpriteSetX(sprite, DISPLAY_WIDTH);
SpriteSetY(sprite, DISPLAY_WIDTH);
gUnknown_203B1FC->unk17 = 0;
for (index = 0; index < 4; index++) {
gUnknown_203B1FC->windows.id[index] = gUnknown_80DB538;
}
if(gUnknown_203B1FC->unk4 != 0) {
gUnknown_203B1FC->windows.id[1] = gUnknown_80DB580;
}
else {
gUnknown_203B1FC->windows.id[1] = gUnknown_80DB568;
}
gUnknown_203B1FC->windows.id[0] = gUnknown_80DB550;
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B1FC->windows, 1, 1);
sub_8015A08(1);
sub_8015C1C();
sub_8015F84();
return 1;
}
u32 sub_80154F0(void)
{
gUnknown_203B1FC->unk16++;
sub_80157D8();
if (gUnknown_203B1FC->unk16 & 8) {
AddSprite((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0x100, NULL, NULL);
}
gUnknown_203B1FC->unk17++;
sub_80158BC();
if (gUnknown_203B1FC->unk17 & 8) {
AddSprite((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, 0x100, NULL, NULL);
}
switch (sub_8012AE8()) {
case 5:
if (gUnknown_203B1FC->unk1C == 0) {
PlayMenuSoundEffect(2);
}
else {
gUnknown_203B1FC->unk1C--;
PlayMenuSoundEffect(3);
}
break;
case 6:
if (gUnknown_203B1FC->unk1C != gUnknown_203B1FC->unk1B - 1 && gUnknown_203B1FC->unk1C < sub_8015F44()) {
gUnknown_203B1FC->unk1C++;
PlayMenuSoundEffect(3);
}
else {
PlayMenuSoundEffect(2);
}
break;
case 1:
return sub_801560C();
case 2:
if (sub_8015748()) {
return 2;
}
break;
case 4:
PlayMenuSoundEffect(3);
gUnknown_203B1FC->unk1A = 5;
break;
}
return 0;
}
void sub_80155F0(void)
{
if (gUnknown_203B1FC != NULL) {
MemoryFree(gUnknown_203B1FC);
gUnknown_203B1FC = NULL;
}
}
u32 sub_801560C(void)
{
s32 var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk8;
switch (var) {
case 0x107:
gUnknown_203B1FC->unk18 = (gUnknown_203B1FC->unk18 == 0);
PlayMenuSoundEffect(4);
sub_8015A08(0);
break;
case 0x105:
if (sub_8015748()) {
return 2;
}
break;
case 0x106:
if (sub_8015F44() == 0 || (gUnknown_203B1FC->unk4 != 0 && sub_8015F44() != gUnknown_203B1FC->unk1B)) {
PlayMenuSoundEffect(2);
}
else {
PlayMenuSoundEffect(0);
MemoryCopy8(gUnknown_203B1FC->unk134, gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk1B);
return 3;
}
break;
default:
if (gUnknown_203B1FC->unk4 != 0 && sub_803D0F0(var) == 0xFF) {
PlayMenuSoundEffect(2);
}
else {
if (gUnknown_203B1FC->unk18 == 1) {
s32 i;
for (i = gUnknown_203B1FC->unk1B - 2; i >= gUnknown_203B1FC->unk1C; i--) {
u8 *ptr = &gUnknown_203B1FC->unkF8[i];
ptr[1] = ptr[0];
}
}
gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C] = var;
if (gUnknown_203B1FC->unk1C < gUnknown_203B1FC->unk1B - 1) {
gUnknown_203B1FC->unk1C++;
}
else {
gUnknown_203B1FC->unk1A = 5;
}
PlayMenuSoundEffect(0);
sub_8015C1C();
sub_8015F84();
}
break;
}
return 0;
}
bool8 sub_8015748(void)
{
u32 val = gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C];
if (val == 0) {
if (gUnknown_203B1FC->unk1C == 0) {
PlayMenuSoundEffect(2);
return TRUE;
}
else {
gUnknown_203B1FC->unk1C--;
gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C] = val;
PlayMenuSoundEffect(1);
sub_8015C1C();
sub_8015F84();
}
}
else {
s32 i, n;
n = sub_8015F44() - 1;
for (i = gUnknown_203B1FC->unk1C; i < n; i++) {
u8 *ptr = &gUnknown_203B1FC->unkF8[i];
ptr[0] = ptr[1];
}
gUnknown_203B1FC->unkF8[n] = 0;
PlayMenuSoundEffect(1);
sub_8015C1C();
sub_8015F84();
}
return FALSE;
}
void sub_80157D8(void)
{
Window *window = &gWindows[1];
// Note: for cases 4 and 5, the code is identical except for different position structs.
if (gUnknown_203B1FC->unk0 == 4) {
s32 x, y;
x = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].x + (window->x * 8);
SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x);
y = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].y + (window->y * 8) + 5;
SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y);
}
else if (gUnknown_203B1FC->unk0 == 5) {
s32 x, y;
x = gUnknown_80DB098[gUnknown_203B1FC->unk1C].x + (window->x * 8);
SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x);
y = gUnknown_80DB098[gUnknown_203B1FC->unk1C].y + (window->y * 8) + 5;
SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y);
}
else {
s32 x, y;
x = gUnknown_203B1FC->unk1E[gUnknown_203B1FC->unk1C] + (gUnknown_203B1FC->unk8A[gUnknown_203B1FC->unk1C] / 2) + 30 + (window->x * 8);
SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, (u16) x);
y = (window->y * 8) + 34;
SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y);
}
}
void sub_80158BC(void)
{
s32 x, y;
Window *window = &gWindows[0];
u32 var;
switch (sub_8012AE8()) {
case 7:
var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk0;
break;
case 8:
var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk1;
break;
case 9:
var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk2;
break;
case 10:
var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk3;
break;
default:
var = gUnknown_203B1FC->unk1A;
break;
}
if (var != gUnknown_203B1FC->unk1A) {
gUnknown_203B1FC->unk1A = var;
PlayMenuSoundEffect(3);
gUnknown_203B1FC->unk17 = 8;
}
x = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].x + (window->x * 8) - 5;
y = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].y + (window->y * 8) + 1;
SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, x);
SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, y);
}
void sub_8015A08(u32 unused)
{
s32 r4;
s32 i;
u8 text1[16];
u8 text2[16];
CallPrepareTextbox_8008C54(0);
sub_80073B8(0);
for (i = 0; (r4 = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk8) != 0x109; i++) {
s32 r5;
switch (gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk6) {
case 1:
r5 = 5;
break;
case 2:
r5 = 2;
break;
case 3:
r5 = 7;
break;
default:
r5 = 7;
if (gUnknown_203B1FC->unk4 != 0) {
if (r4 <= 0xFF) {
if (sub_803D0F0(r4) == 0xFF) {
r5 = 2;
}
}
else if (r4 < 0x102) {
r5 = 2;
}
}
break;
}
if (r4 != 0x108) {
if (r4 == 0x107) {
if (gUnknown_203B1FC->unk18 == 0) {
PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, _("{COLOR GREEN}OVR{RESET}"), 0, '\0');
}
else {
PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, _("{COLOR YELLOW}INS{RESET}"), 0, '\0');
}
}
else if (r4 == 0x20) {
sprintfStatic(text1, _("{COLOR}%c{0x81}{0x59}"), r5);
PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 1, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, text1, 0, '\0');
}
else if (r4 > 0xFF) {
sprintfStatic(text2, _("{COLOR}%c%s"), r5, gUnknown_80DB4F4[r4 & 0xFF]);
PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, text2, 0, '\0');
}
else {
sub_8012C60(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, (u8) r4, r5, 0);
}
}
}
AddUnderScoreHighlight(0, 0, 0, 0xE0, 0xE);
AddUnderScoreHighlight(0, 0, 0x47, 0xE0, 0xE);
sub_8007A78(0, 0, 0, 0x48, 0xE);
sub_8007A78(0, 0xDF, 0, 0x48, 0xE);
sub_80073E0(0);
}
void sub_8015C1C(void)
{
u8 text[80];
CallPrepareTextbox_8008C54(1);
sub_80073B8(1);
if (gUnknown_203B1FC->unk4 != 0) {
AddUnderScoreHighlight(1, 0, 0, 0xE0, 0xE);
AddUnderScoreHighlight(1, 0, 0x37, 0xE0, 0xE);
sub_8007A78(1, 0, 0, 0x38, 0xE);
sub_8007A78(1, 0xDF, 0, 0x38, 0xE);
}
else {
AddUnderScoreHighlight(1, 0, 0, 0xB0, 0xE);
AddUnderScoreHighlight(1, 0, 0x27, 0xB0, 0xE);
sub_8007A78(1, 0, 0, 0x28, 0xE);
sub_8007A78(1, 0xAF, 0, 0x28, 0xE);
}
switch (gUnknown_203B1FC->unk0) {
case 0:
PrintStringOnWindow(8, 5, _("What is your name?"), 1, '\0');
break;
case 2:
PrintStringOnWindow(8, 5, _("What is this Pokémon's nickname?"), 1, '\0');
break;
case 3:
PrintStringOnWindow(8, 5, _("What is your partner's nickname?"), 1, '\0');
break;
case 1:
PrintStringOnWindow(8, 5, _("What is your team's name?"), 1, '\0');
break;
case 4:
PrintStringOnWindow(54, 2, _("Please enter the password."), 1, '\0');
break;
case 5:
PrintStringOnWindow(48, 4, _("Please enter the password."), 1, '\0');
break;
}
switch (gUnknown_203B1FC->unk0) {
case 4:
sub_8015E10(gUnknown_203B1FC->unkF8, 1, 0);
break;
case 5:
sub_8015EB4(gUnknown_203B1FC->unkF8, 1, 0);
break;
case 0:
case 1:
case 2:
case 3:
AddDoubleUnderScoreHighlight(1, 38, 33, sub_8016028(), 4);
if (sub_8015FEC(gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk1B) > sub_8016028()) {
sprintfStatic(text, _("{COLOR RED}%s{RESET}"), gUnknown_203B1FC->unkF8);
}
else if (sub_8015F44() == gUnknown_203B1FC->unk1B) {
sprintfStatic(text, _("{COLOR CYAN}%s{RESET}"), gUnknown_203B1FC->unkF8);
}
else {
sprintfStatic(text, _("%s"), gUnknown_203B1FC->unkF8);
}
PrintStringOnWindow(38, 22, text, 1, '\0');
break;
}
sub_80073E0(1);
}
void sub_8015E10(u8 *a0, s32 a1, s32 _a2)
{
s32 i;
s32 a2 = (s16) _a2;
for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DAFC0); i++) {
AddDoubleUnderScoreHighlight(a1, gUnknown_80DAFC0[i].x, gUnknown_80DAFC0[i].y + 11 + a2, 11, 5);
}
for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DAFC0) && a0[i] != 0; i++) {
s32 arg3;
if (i <= 4) arg3 = 7;
else if (i <= 12) arg3 = 6;
else if (i <= 17) arg3 = 7;
else if (i <= 22) arg3 = 7;
else if (i <= 30) arg3 = 6;
else if (i <= 35) arg3 = 7;
else if (i <= 40) arg3 = 7;
else if (i <= 48) arg3 = 6;
else arg3 = 7;
sub_8012C60(gUnknown_80DAFC0[i].x, gUnknown_80DAFC0[i].y + a2, a0[i], arg3, a1);
}
}
void sub_8015EB4(u8 *a0, s32 a1, s32 _a2)
{
s32 i;
s32 a2 = (s16) _a2;
for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DB098); i++) {
AddDoubleUnderScoreHighlight(a1, gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + 11 + a2, 12, 5);
}
for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DB098) && a0[i] != 0; i++) {
s32 arg3;
if (i <= 3) arg3 = 7;
else if (i <= 7) arg3 = 6;
else if (i <= 15) arg3 = 7;
else if (i <= 19) arg3 = 6;
else arg3 = 7;
sub_8012C60(gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + a2, a0[i], arg3, a1);
}
}