From 86173a8955e51114acc3fd8e4977c99cc093b42f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 2 Jun 2025 20:18:14 +0200 Subject: [PATCH] Start documenting Naming Screen --- include/code_8012A18_1.h | 6 +- include/string_format.h | 1 - include/structs/str_text.h | 2 +- ld_script.ld | 1 - src/code_8012A18_1.c | 100 -------- src/code_8015080.c | 475 ++++++++++++++++++++---------------- src/code_801602C.c | 20 +- src/code_809A560.c | 14 +- src/friend_rescue.c | 22 +- src/menu_input.c | 6 +- src/pokemon_mail.c | 4 +- src/rescue_password_menu.c | 22 +- src/text_1.c | 2 +- src/text_2.c | 2 +- src/text_3.c | 4 +- src/thank_you_wonder_mail.c | 14 +- src/wonder_mail.c | 14 +- src/wonder_mail_main_menu.c | 14 +- sym_ewram_init.txt | 1 - 19 files changed, 356 insertions(+), 368 deletions(-) delete mode 100644 src/code_8012A18_1.c diff --git a/include/code_8012A18_1.h b/include/code_8012A18_1.h index 99f960677..68df79c40 100644 --- a/include/code_8012A18_1.h +++ b/include/code_8012A18_1.h @@ -1,7 +1,7 @@ #ifndef GUARD_CODE_8012A18_1_H #define GUARD_CODE_8012A18_1_H -s32 sub_8015FEC(u8 *buffer, s32 size); -s32 sub_8016028(void); +s32 GetStrWidth(u8 *buffer, s32 size); +s32 GetMaxPokeNameWidth(void); -#endif // GUARD_CODE_8012A18_1_H \ No newline at end of file +#endif // GUARD_CODE_8012A18_1_H diff --git a/include/string_format.h b/include/string_format.h index 1e4b97720..3e25e36dc 100644 --- a/include/string_format.h +++ b/include/string_format.h @@ -12,7 +12,6 @@ void sub_80140DC(void); void sub_8014114(void); s32 sub_80144A4(s32 *); -u32 sub_80151C0(u32, u8 *); u32 sub_80154F0(void); void sub_80155F0(void); diff --git a/include/structs/str_text.h b/include/structs/str_text.h index 3f22ef2ba..ea1f5e1b0 100644 --- a/include/structs/str_text.h +++ b/include/structs/str_text.h @@ -8,7 +8,7 @@ typedef struct unkChar { const u16 *unk0; u16 unk4; - s16 unk6; + s16 width; u8 unk8; u8 fill9; u8 unkA; diff --git a/ld_script.ld b/ld_script.ld index 99e396318..d78fbe146 100755 --- a/ld_script.ld +++ b/ld_script.ld @@ -102,7 +102,6 @@ SECTIONS { src/menu_input.o(.text); src/string_format.o(.text); src/code_8015080.o(.text); - src/code_8012A18_1.o(.text); src/code_801602C.o(.text); src/felicity_bank.o(.text); src/kangaskhan_storage1.o(.text); diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c deleted file mode 100644 index 7c8cfca35..000000000 --- a/src/code_8012A18_1.c +++ /dev/null @@ -1,100 +0,0 @@ -#include "global.h" -#include "structs/sprite_oam.h" -#include "code_8012A18_1.h" -#include "text_2.h" -#include "text_util.h" - -struct unkStruct_203B1FC -{ - // size: 0x198 - u32 unk0; - u8 unk4; - SpriteOAM unk6; - SpriteOAM unkE; - u8 unk16; - u8 unk17; - u8 unk18; - u8 unk1B; - u8 unk1C; - s16 unk1E[1]; - u8 fill20[0x8A - 0x20]; - s16 unk8A[2]; - u8 fill8E[0xF8 - 0x8E]; - u8 *unkF8; - u8 unkFC[54]; -}; - -EWRAM_INIT struct unkStruct_203B1FC *gUnknown_203B1FC = NULL; - -s32 sub_8015F44(void) -{ - s32 index; - s32 counter; - index = 0; - - if (index < gUnknown_203B1FC->unk1B && gUnknown_203B1FC->unkF8[0] != 0) { - index = 1; - counter = 1; - while (TRUE) { - if (counter >= gUnknown_203B1FC->unk1B) - return index; - if (gUnknown_203B1FC->unkF8[counter] == 0) - return index; - index = counter + 1; - counter = index; - } - } - return index; -} - -void sub_8015F84(void) -{ - u32 uVar2; - const unkChar *puVar3; - s32 index; - s32 total; - - total = 0; - for(index = 0; index < gUnknown_203B1FC->unk1B; index++) - { - gUnknown_203B1FC->unk1E[index] = total; - if (gUnknown_203B1FC->unkF8[index] == 0) { - gUnknown_203B1FC->unk8A[index] = 8; - return; - } - uVar2 = ReturnIntFromChar2(gUnknown_203B1FC->unkF8[index]); - puVar3 = GetCharacter(uVar2); - gUnknown_203B1FC->unk8A[index] = puVar3->unk6; - total += puVar3->unk6; - } -} - -// TODO: Above code is in code_80130A8.s - -s32 sub_8015FEC(u8 *buffer, s32 size) -{ - const unkChar *iVar2; - s32 currLength; - s32 length; - u8 *bufferPtr; - - length = 0; - currLength = 0; - - if (currLength < size && *buffer != '\0') { - bufferPtr = buffer; // Had to have another variable to match.. - do { - iVar2 = GetCharacter(ReturnIntFromChar2(*bufferPtr)); - length += iVar2->unk6; - bufferPtr++; - currLength++; - } while (currLength < size && *bufferPtr != '\0'); - } - - return length; -} - -s32 sub_8016028(void) -{ - return 60; -} diff --git a/src/code_8015080.c b/src/code_8015080.c index 5be6ad797..cb01d4283 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -11,6 +11,8 @@ #include "text_1.h" #include "text_2.h" #include "text_3.h" +#include "text_util.h" +#include "constants/input.h" struct unkStruct_203B1F8 { @@ -337,123 +339,136 @@ void sub_80151A4(void) } } -struct unkStruct_203B1FC +#define MAX_TEXT_SIZE 54 + +struct NamingScreen { // size: 0x198 - u32 unk0; + u32 type; 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 letterCursorFrames; + u8 inputCursorFrames; u8 unk18; u8 unk19; - u8 unk1A; - u8 unk1B; - u8 unk1C; - u16 unk1E[54]; - s16 unk8A[54]; - u8 *unkF8; - u8 unkFC[56]; - u8 *unk134; + u8 inputCursorPosition; + u8 maxLetters; + u8 letterCursorPos; + u16 letterTotalWidths[MAX_TEXT_SIZE]; + s16 letterWidths[MAX_TEXT_SIZE]; + u8 *textPtr; // Points to the field below. A bit over complicated in my opinion... + u8 text[MAX_TEXT_SIZE]; + u8 *defaultText; WindowTemplates windows; }; -extern struct unkStruct_203B1FC *gUnknown_203B1FC; -s32 sub_8015F44(void); +static EWRAM_INIT struct NamingScreen *sNamingScreen = NULL; + +static s32 GetEnteredNameLength(void); void sub_8015A08(u32); -void sub_8015C1C(void); +static void UpdateNameWindow(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); +static void SetLetterCursorSpritePosition(void); +static void HandleInputCursor(void); +static void sub_8015E10(u8 *a0, s32 a1, s32 _a2); +static void sub_8015EB4(u8 *a0, s32 a1, s32 _a2); +s32 GetMaxPokeNameWidth(void); +s32 GetStrWidth(u8 *buffer, s32 size); +static u32 HandleAPress(void); +static bool8 HandleBPress(void); -u32 sub_80151C0(u32 r0, u8 *buffer) +enum +{ + NAMING_SELF, + NAMING_TEAM, + NAMING_POKEMON, + NAMING_PARTNER, + NAMING_PASSWORD1, + NAMING_PASSWORD2, +}; + +u32 NamingScreen_Init(u32 type, u8 *defaultText) { 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; + sNamingScreen = MemoryAlloc(sizeof(*sNamingScreen), 8); + sNamingScreen->type = type; + sNamingScreen->unk19 = 0; + sNamingScreen->unk18 = 0; + sNamingScreen->unk4 = 0; - switch(gUnknown_203B1FC->unk0) { - case 4: - gUnknown_203B1FC->unk1A = 9; - gUnknown_203B1FC->unk4 = 1; - gUnknown_203B1FC->unk1B = 0x36; + switch (sNamingScreen->type) { + case NAMING_PASSWORD1: + sNamingScreen->inputCursorPosition = 9; + sNamingScreen->unk4 = 1; + sNamingScreen->maxLetters = 0x36; break; - case 5: - gUnknown_203B1FC->unk1A = 9; - gUnknown_203B1FC->unk4 = 1; - gUnknown_203B1FC->unk1B = 0x18; + case NAMING_PASSWORD2: + sNamingScreen->inputCursorPosition = 9; + sNamingScreen->unk4 = 1; + sNamingScreen->maxLetters = 0x18; break; - case 0: - case 1: - case 3: + case NAMING_SELF: + case NAMING_TEAM: + case NAMING_PARTNER: default: - gUnknown_203B1FC->unk1A = 6; - gUnknown_203B1FC->unk1B = 0xA; + sNamingScreen->inputCursorPosition = 6; + sNamingScreen->maxLetters = POKEMON_NAME_LENGTH; break; } - gUnknown_203B1FC->unk134 = buffer; - gUnknown_203B1FC->unkF8 = gUnknown_203B1FC->unkFC; + sNamingScreen->defaultText = defaultText; + sNamingScreen->textPtr = sNamingScreen->text; - for (i = 0; i < 0x36; i++) { - gUnknown_203B1FC->unkF8[i] = 0; + for (i = 0; i < MAX_TEXT_SIZE; i++) { + sNamingScreen->textPtr[i] = '\0'; } - MemoryCopy8(gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk134, gUnknown_203B1FC->unk1B); + MemoryCopy8(sNamingScreen->textPtr, sNamingScreen->defaultText, sNamingScreen->maxLetters); - for (i = 0; i < gUnknown_203B1FC->unk1B; i++) { - if (gUnknown_203B1FC->unkF8[i] == 0) { + for (i = 0; i < sNamingScreen->maxLetters; i++) { + if (sNamingScreen->textPtr[i] == '\0') { break; } } - for (; i < gUnknown_203B1FC->unk1B; i++) { - gUnknown_203B1FC->unkF8[i] = 0; + for (; i < sNamingScreen->maxLetters; i++) { + sNamingScreen->textPtr[i] = '\0'; } - gUnknown_203B1FC->unk1C = sub_8015F44(); - if (gUnknown_203B1FC->unk1C == gUnknown_203B1FC->unk1B) { - gUnknown_203B1FC->unk1C--; + sNamingScreen->letterCursorPos = GetEnteredNameLength(); + if (sNamingScreen->letterCursorPos == sNamingScreen->maxLetters) { + sNamingScreen->letterCursorPos--; } - 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); + SpriteSetAffine1((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetAffine2((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetObjMode((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetMosaic((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetBpp((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetPriority((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetPalNum((SpriteOAM *) &sNamingScreen->sprite1Attribs, 15); + SpriteSetX((SpriteOAM *) &sNamingScreen->sprite1Attribs, DISPLAY_WIDTH); + SpriteSetY((SpriteOAM *) &sNamingScreen->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); + if (sNamingScreen->unk4 != 0) { + SpriteSetMatrixNum((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetTileNum((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0x3F6); + SpriteSetSize((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetShape((SpriteOAM *) &sNamingScreen->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); + SpriteSetMatrixNum((SpriteOAM *) &sNamingScreen->sprite1Attribs, 16); + SpriteSetTileNum((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0x3F0); + SpriteSetSize((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0); + SpriteSetShape((SpriteOAM *) &sNamingScreen->sprite1Attribs, 1); } - gUnknown_203B1FC->unk16 = 4; + sNamingScreen->letterCursorFrames = 4; - sprite = (SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs; + sprite = (SpriteOAM *) &sNamingScreen->sprite2Attribs; SpriteSetAffine1(sprite, 0); SpriteSetAffine2(sprite, 0); @@ -469,134 +484,134 @@ u32 sub_80151C0(u32 r0, u8 *buffer) SpriteSetX(sprite, DISPLAY_WIDTH); SpriteSetY(sprite, DISPLAY_WIDTH); - gUnknown_203B1FC->unk17 = 0; + sNamingScreen->inputCursorFrames = 0; for (index = 0; index < 4; index++) { - gUnknown_203B1FC->windows.id[index] = gUnknown_80DB538; + sNamingScreen->windows.id[index] = gUnknown_80DB538; } - if(gUnknown_203B1FC->unk4 != 0) { - gUnknown_203B1FC->windows.id[1] = gUnknown_80DB580; + if(sNamingScreen->unk4 != 0) { + sNamingScreen->windows.id[1] = gUnknown_80DB580; } else { - gUnknown_203B1FC->windows.id[1] = gUnknown_80DB568; + sNamingScreen->windows.id[1] = gUnknown_80DB568; } - gUnknown_203B1FC->windows.id[0] = gUnknown_80DB550; + sNamingScreen->windows.id[0] = gUnknown_80DB550; ResetUnusedInputStruct(); - ShowWindows(&gUnknown_203B1FC->windows, 1, 1); + ShowWindows(&sNamingScreen->windows, 1, 1); sub_8015A08(1); - sub_8015C1C(); + UpdateNameWindow(); sub_8015F84(); return 1; } -u32 sub_80154F0(void) +u32 NamingScreen_HandleInput(void) { - gUnknown_203B1FC->unk16++; - sub_80157D8(); - if (gUnknown_203B1FC->unk16 & 8) { - AddSprite((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0x100, NULL, NULL); + sNamingScreen->letterCursorFrames++; + SetLetterCursorSpritePosition(); + if (sNamingScreen->letterCursorFrames & 8) { + AddSprite((SpriteOAM *) &sNamingScreen->sprite1Attribs, 0x100, NULL, NULL); } - gUnknown_203B1FC->unk17++; - sub_80158BC(); - if (gUnknown_203B1FC->unk17 & 8) { - AddSprite((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, 0x100, NULL, NULL); + sNamingScreen->inputCursorFrames++; + HandleInputCursor(); + if (sNamingScreen->inputCursorFrames & 8) { + AddSprite((SpriteOAM *) &sNamingScreen->sprite2Attribs, 0x100, NULL, NULL); } switch (sub_8012AE8()) { - case 5: - if (gUnknown_203B1FC->unk1C == 0) { + case INPUT_L_BUTTON: + if (sNamingScreen->letterCursorPos == 0) { PlayMenuSoundEffect(2); } else { - gUnknown_203B1FC->unk1C--; + sNamingScreen->letterCursorPos--; PlayMenuSoundEffect(3); } break; - case 6: - if (gUnknown_203B1FC->unk1C != gUnknown_203B1FC->unk1B - 1 && gUnknown_203B1FC->unk1C < sub_8015F44()) { - gUnknown_203B1FC->unk1C++; + case INPUT_R_BUTTON: + if (sNamingScreen->letterCursorPos != sNamingScreen->maxLetters - 1 && sNamingScreen->letterCursorPos < GetEnteredNameLength()) { + sNamingScreen->letterCursorPos++; PlayMenuSoundEffect(3); } else { PlayMenuSoundEffect(2); } break; - case 1: - return sub_801560C(); - case 2: - if (sub_8015748()) { + case INPUT_A_BUTTON: + return HandleAPress(); + case INPUT_B_BUTTON: + if (HandleBPress()) { return 2; } break; - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(3); - gUnknown_203B1FC->unk1A = 5; + sNamingScreen->inputCursorPosition = 5; break; } return 0; } -void sub_80155F0(void) +void NamingScreen_Free(void) { - if (gUnknown_203B1FC != NULL) { - MemoryFree(gUnknown_203B1FC); - gUnknown_203B1FC = NULL; + if (sNamingScreen != NULL) { + MemoryFree(sNamingScreen); + sNamingScreen = NULL; } } -u32 sub_801560C(void) +static u32 HandleAPress(void) { - s32 var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk8; + s32 var = gUnknown_80DB0F8[sNamingScreen->unk19][sNamingScreen->inputCursorPosition].unk8; switch (var) { case 0x107: - gUnknown_203B1FC->unk18 = (gUnknown_203B1FC->unk18 == 0); + sNamingScreen->unk18 = (sNamingScreen->unk18 == 0); PlayMenuSoundEffect(4); sub_8015A08(0); break; case 0x105: - if (sub_8015748()) { + if (HandleBPress()) { return 2; } break; case 0x106: - if (sub_8015F44() == 0 || (gUnknown_203B1FC->unk4 != 0 && sub_8015F44() != gUnknown_203B1FC->unk1B)) { + if (GetEnteredNameLength() == 0 || (sNamingScreen->unk4 != 0 && GetEnteredNameLength() != sNamingScreen->maxLetters)) { PlayMenuSoundEffect(2); } else { PlayMenuSoundEffect(0); - MemoryCopy8(gUnknown_203B1FC->unk134, gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk1B); + MemoryCopy8(sNamingScreen->defaultText, sNamingScreen->textPtr, sNamingScreen->maxLetters); return 3; } break; default: - if (gUnknown_203B1FC->unk4 != 0 && sub_803D0F0(var) == 0xFF) { + if (sNamingScreen->unk4 != 0 && sub_803D0F0(var) == 0xFF) { PlayMenuSoundEffect(2); } else { - if (gUnknown_203B1FC->unk18 == 1) { + if (sNamingScreen->unk18 == 1) { s32 i; - for (i = gUnknown_203B1FC->unk1B - 2; i >= gUnknown_203B1FC->unk1C; i--) { - u8 *ptr = &gUnknown_203B1FC->unkF8[i]; + for (i = sNamingScreen->maxLetters - 2; i >= sNamingScreen->letterCursorPos; i--) { + u8 *ptr = &sNamingScreen->textPtr[i]; ptr[1] = ptr[0]; } } - gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C] = var; - if (gUnknown_203B1FC->unk1C < gUnknown_203B1FC->unk1B - 1) { - gUnknown_203B1FC->unk1C++; + sNamingScreen->textPtr[sNamingScreen->letterCursorPos] = var; + if (sNamingScreen->letterCursorPos < sNamingScreen->maxLetters - 1) { + sNamingScreen->letterCursorPos++; } else { - gUnknown_203B1FC->unk1A = 5; + sNamingScreen->inputCursorPosition = 5; } PlayMenuSoundEffect(0); - sub_8015C1C(); + UpdateNameWindow(); sub_8015F84(); } break; @@ -605,108 +620,106 @@ u32 sub_801560C(void) return 0; } -bool8 sub_8015748(void) +bool8 HandleBPress(void) { - u32 val = gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C]; - - if (val == 0) { - if (gUnknown_203B1FC->unk1C == 0) { + if (sNamingScreen->textPtr[sNamingScreen->letterCursorPos] == '\0') { + if (sNamingScreen->letterCursorPos == 0) { PlayMenuSoundEffect(2); return TRUE; } else { - gUnknown_203B1FC->unk1C--; - gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C] = val; + sNamingScreen->letterCursorPos--; + sNamingScreen->textPtr[sNamingScreen->letterCursorPos] = '\0'; PlayMenuSoundEffect(1); - sub_8015C1C(); + UpdateNameWindow(); sub_8015F84(); } } else { s32 i, n; - n = sub_8015F44() - 1; - for (i = gUnknown_203B1FC->unk1C; i < n; i++) { - u8 *ptr = &gUnknown_203B1FC->unkF8[i]; + n = GetEnteredNameLength() - 1; + for (i = sNamingScreen->letterCursorPos; i < n; i++) { + u8 *ptr = &sNamingScreen->textPtr[i]; ptr[0] = ptr[1]; } - gUnknown_203B1FC->unkF8[n] = 0; + sNamingScreen->textPtr[n] = 0; PlayMenuSoundEffect(1); - sub_8015C1C(); + UpdateNameWindow(); sub_8015F84(); } return FALSE; } -void sub_80157D8(void) +static void SetLetterCursorSpritePosition(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) { + // Note: for cases NAMING_PASSWORD1 and NAMING_PASSWORD2, the code is identical except for different position structs. + if (sNamingScreen->type == NAMING_PASSWORD1) { s32 x, y; - x = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].x + (window->x * 8); - SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x); + x = gUnknown_80DAFC0[sNamingScreen->letterCursorPos].x + (window->x * 8); + SpriteSetX((SpriteOAM *) &sNamingScreen->sprite1Attribs, x); - y = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].y + (window->y * 8) + 5; - SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); + y = gUnknown_80DAFC0[sNamingScreen->letterCursorPos].y + (window->y * 8) + 5; + SpriteSetY((SpriteOAM *) &sNamingScreen->sprite1Attribs, y); } - else if (gUnknown_203B1FC->unk0 == 5) { + else if (sNamingScreen->type == NAMING_PASSWORD2) { s32 x, y; - x = gUnknown_80DB098[gUnknown_203B1FC->unk1C].x + (window->x * 8); - SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x); + x = gUnknown_80DB098[sNamingScreen->letterCursorPos].x + (window->x * 8); + SpriteSetX((SpriteOAM *) &sNamingScreen->sprite1Attribs, x); - y = gUnknown_80DB098[gUnknown_203B1FC->unk1C].y + (window->y * 8) + 5; - SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); + y = gUnknown_80DB098[sNamingScreen->letterCursorPos].y + (window->y * 8) + 5; + SpriteSetY((SpriteOAM *) &sNamingScreen->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); + x = sNamingScreen->letterTotalWidths[sNamingScreen->letterCursorPos] + (sNamingScreen->letterWidths[sNamingScreen->letterCursorPos] / 2) + 30 + (window->x * 8); + SpriteSetX((SpriteOAM *) &sNamingScreen->sprite1Attribs, (u16) x); y = (window->y * 8) + 34; - SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); + SpriteSetY((SpriteOAM *) &sNamingScreen->sprite1Attribs, y); } } -void sub_80158BC(void) +static void HandleInputCursor(void) { s32 x, y; Window *window = &gWindows[0]; - u32 var; + u32 newPosition; switch (sub_8012AE8()) { - case 7: - var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk0; + case INPUT_DPAD_UP: + newPosition = gUnknown_80DB0F8[sNamingScreen->unk19][sNamingScreen->inputCursorPosition].unk0; break; - case 8: - var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk1; + case INPUT_DPAD_DOWN: + newPosition = gUnknown_80DB0F8[sNamingScreen->unk19][sNamingScreen->inputCursorPosition].unk1; break; - case 9: - var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk2; + case INPUT_DPAD_LEFT: + newPosition = gUnknown_80DB0F8[sNamingScreen->unk19][sNamingScreen->inputCursorPosition].unk2; break; - case 10: - var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk3; + case INPUT_DPAD_RIGHT: + newPosition = gUnknown_80DB0F8[sNamingScreen->unk19][sNamingScreen->inputCursorPosition].unk3; break; default: - var = gUnknown_203B1FC->unk1A; + newPosition = sNamingScreen->inputCursorPosition; break; } - if (var != gUnknown_203B1FC->unk1A) { - gUnknown_203B1FC->unk1A = var; + if (newPosition != sNamingScreen->inputCursorPosition) { + sNamingScreen->inputCursorPosition = newPosition; PlayMenuSoundEffect(3); - gUnknown_203B1FC->unk17 = 8; + sNamingScreen->inputCursorFrames = 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); + x = gUnknown_80DB0F8[sNamingScreen->unk19][sNamingScreen->inputCursorPosition].x + (window->x * 8) - 5; + y = gUnknown_80DB0F8[sNamingScreen->unk19][sNamingScreen->inputCursorPosition].y + (window->y * 8) + 1; + SpriteSetX((SpriteOAM *) &sNamingScreen->sprite2Attribs, x); + SpriteSetY((SpriteOAM *) &sNamingScreen->sprite2Attribs, y); } void sub_8015A08(u32 unused) @@ -719,10 +732,10 @@ void sub_8015A08(u32 unused) CallPrepareTextbox_8008C54(0); sub_80073B8(0); - for (i = 0; (r4 = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk8) != 0x109; i++) { + for (i = 0; (r4 = gUnknown_80DB0F8[sNamingScreen->unk19][i].unk8) != 0x109; i++) { s32 r5; - switch (gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk6) { + switch (gUnknown_80DB0F8[sNamingScreen->unk19][i].unk6) { case 1: r5 = 5; break; @@ -734,7 +747,7 @@ void sub_8015A08(u32 unused) break; default: r5 = 7; - if (gUnknown_203B1FC->unk4 != 0) { + if (sNamingScreen->unk4 != 0) { if (r4 <= 0xFF) { if (sub_803D0F0(r4) == 0xFF) { r5 = 2; @@ -749,23 +762,23 @@ void sub_8015A08(u32 unused) 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'); + if (sNamingScreen->unk18 == 0) { + PrintStringOnWindow(gUnknown_80DB0F8[sNamingScreen->unk19][i].x + 3, gUnknown_80DB0F8[sNamingScreen->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'); + PrintStringOnWindow(gUnknown_80DB0F8[sNamingScreen->unk19][i].x + 3, gUnknown_80DB0F8[sNamingScreen->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'); + PrintStringOnWindow(gUnknown_80DB0F8[sNamingScreen->unk19][i].x + 1, gUnknown_80DB0F8[sNamingScreen->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'); + PrintStringOnWindow(gUnknown_80DB0F8[sNamingScreen->unk19][i].x + 3, gUnknown_80DB0F8[sNamingScreen->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); + sub_8012C60(gUnknown_80DB0F8[sNamingScreen->unk19][i].x, gUnknown_80DB0F8[sNamingScreen->unk19][i].y, (u8) r4, r5, 0); } } } @@ -777,13 +790,13 @@ void sub_8015A08(u32 unused) sub_80073E0(0); } -void sub_8015C1C(void) +static void UpdateNameWindow(void) { u8 text[80]; CallPrepareTextbox_8008C54(1); sub_80073B8(1); - if (gUnknown_203B1FC->unk4 != 0) { + if (sNamingScreen->unk4 != 0) { AddUnderScoreHighlight(1, 0, 0, 0xE0, 0xE); AddUnderScoreHighlight(1, 0, 0x37, 0xE0, 0xE); sub_8007A78(1, 0, 0, 0x38, 0xE); @@ -796,47 +809,47 @@ void sub_8015C1C(void) sub_8007A78(1, 0xAF, 0, 0x28, 0xE); } - switch (gUnknown_203B1FC->unk0) { - case 0: + switch (sNamingScreen->type) { + case NAMING_SELF: PrintStringOnWindow(8, 5, _("What is your name?"), 1, '\0'); break; - case 2: + case NAMING_POKEMON: PrintStringOnWindow(8, 5, _("What is this Pokémon's nickname?"), 1, '\0'); break; - case 3: + case NAMING_PARTNER: PrintStringOnWindow(8, 5, _("What is your partner's nickname?"), 1, '\0'); break; - case 1: + case NAMING_TEAM: PrintStringOnWindow(8, 5, _("What is your team's name?"), 1, '\0'); break; - case 4: + case NAMING_PASSWORD1: PrintStringOnWindow(54, 2, _("Please enter the password."), 1, '\0'); break; - case 5: + case NAMING_PASSWORD2: PrintStringOnWindow(48, 4, _("Please enter the password."), 1, '\0'); break; } - switch (gUnknown_203B1FC->unk0) { - case 4: - sub_8015E10(gUnknown_203B1FC->unkF8, 1, 0); + switch (sNamingScreen->type) { + case NAMING_PASSWORD1: + sub_8015E10(sNamingScreen->textPtr, 1, 0); break; - case 5: - sub_8015EB4(gUnknown_203B1FC->unkF8, 1, 0); + case NAMING_PASSWORD2: + sub_8015EB4(sNamingScreen->textPtr, 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); + case NAMING_SELF: + case NAMING_TEAM: + case NAMING_POKEMON: + case NAMING_PARTNER: + AddDoubleUnderScoreHighlight(1, 38, 33, GetMaxPokeNameWidth(), 4); + if (GetStrWidth(sNamingScreen->textPtr, sNamingScreen->maxLetters) > GetMaxPokeNameWidth()) { + sprintfStatic(text, _("{COLOR RED}%s{RESET}"), sNamingScreen->textPtr); } - else if (sub_8015F44() == gUnknown_203B1FC->unk1B) { - sprintfStatic(text, _("{COLOR CYAN}%s{RESET}"), gUnknown_203B1FC->unkF8); + else if (GetEnteredNameLength() == sNamingScreen->maxLetters) { + sprintfStatic(text, _("{COLOR CYAN}%s{RESET}"), sNamingScreen->textPtr); } else { - sprintfStatic(text, _("%s"), gUnknown_203B1FC->unkF8); + sprintfStatic(text, _("%s"), sNamingScreen->textPtr); } PrintStringOnWindow(38, 22, text, 1, '\0'); break; @@ -845,7 +858,7 @@ void sub_8015C1C(void) sub_80073E0(1); } -void sub_8015E10(u8 *a0, s32 a1, s32 _a2) +static void sub_8015E10(u8 *a0, s32 a1, s32 _a2) { s32 i; s32 a2 = (s16) _a2; @@ -871,7 +884,7 @@ void sub_8015E10(u8 *a0, s32 a1, s32 _a2) } } -void sub_8015EB4(u8 *a0, s32 a1, s32 _a2) +static void sub_8015EB4(u8 *a0, s32 a1, s32 _a2) { s32 i; s32 a2 = (s16) _a2; @@ -892,3 +905,57 @@ void sub_8015EB4(u8 *a0, s32 a1, s32 _a2) sub_8012C60(gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + a2, a0[i], arg3, a1); } } + +static s32 GetEnteredNameLength(void) +{ + s32 len = 0; + s32 i; + + for (i = 0; i < sNamingScreen->maxLetters; i++) { + if (sNamingScreen->textPtr[i] != '\0') { + len = i + 1; + } + else { + break; + } + } + + return len; +} + +void sub_8015F84(void) +{ + u32 uVar2; + const unkChar *puVar3; + s32 i; + s32 total = 0; + + for (i = 0; i < sNamingScreen->maxLetters; i++) { + sNamingScreen->letterTotalWidths[i] = total; + if (sNamingScreen->textPtr[i] == '\0') { + sNamingScreen->letterWidths[i] = 8; + return; + } + uVar2 = ReturnIntFromChar2(sNamingScreen->textPtr[i]); + puVar3 = GetCharacter(uVar2); + sNamingScreen->letterWidths[i] = puVar3->width; + total += puVar3->width; + } +} + +s32 GetStrWidth(u8 *buffer, s32 size) +{ + s32 i; + s32 width = 0; + + for (i = 0; i < size && buffer[i] != '\0'; i++) { + width += GetCharacter(ReturnIntFromChar2(buffer[i]))->width; + } + + return width; +} + +s32 GetMaxPokeNameWidth(void) +{ + return 60; +} diff --git a/src/code_801602C.c b/src/code_801602C.c index fe42be4b4..53cf4b8d7 100644 --- a/src/code_801602C.c +++ b/src/code_801602C.c @@ -9,6 +9,10 @@ #include "text_util.h" #include "text_1.h" +u32 NamingScreen_Init(u32 type, u8 *defaultText); +u32 NamingScreen_HandleInput(void); +void NamingScreen_Free(void); + EWRAM_INIT static struct unkStruct_203B200 *sUnknown_203B200 = {NULL}; #include "data/code_801602C.h" @@ -98,7 +102,7 @@ static void sub_8016110(void) { switch (sUnknown_203B200->state) { case CONFIRM_NAME_MENU_INIT: - sub_80151C0(sUnknown_203B200->unk4, sUnknown_203B200->pokeName); + NamingScreen_Init(sUnknown_203B200->unk4, sUnknown_203B200->pokeName); break; case CONFIRM_NAME_MENU_PROMPT: BuildConfirmNameMenu(); @@ -135,21 +139,17 @@ static void BuildConfirmNameMenu(void) static void sub_80161F8(void) { - s32 length; - s32 maxLength; - - if (sub_80154F0() != 3) + if (NamingScreen_HandleInput() != 3) return; - sub_80155F0(); - + NamingScreen_Free(); if (IsNameEmpty()) { SetConfirmNameMenuState(CONFIRM_NAME_MENU_EMPTY); } else { - length = sub_8015FEC(sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH); - maxLength = sub_8016028(); // returns 60 - if (length > maxLength) + s32 width = GetStrWidth(sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH); + s32 maxWidth = GetMaxPokeNameWidth(); // returns 60 + if (width > maxWidth) SetConfirmNameMenuState(CONFIRM_NAME_MENU_TOO_LONG); else SetConfirmNameMenuState(CONFIRM_NAME_MENU_PROMPT); diff --git a/src/code_809A560.c b/src/code_809A560.c index 33c4c08b5..944ea511a 100644 --- a/src/code_809A560.c +++ b/src/code_809A560.c @@ -32,6 +32,10 @@ #include "wigglytuff_shop3.h" #include "wonder_mail.h" +u32 NamingScreen_Init(u32 type, u8 *defaultText); +u32 NamingScreen_HandleInput(void); +void NamingScreen_Free(void); + IWRAM_INIT struct unkStruct_3001B64 *gUnknown_3001B64 = { NULL }; extern bool8 sub_802FCF0(void); @@ -709,7 +713,7 @@ void MakuhitaDojo_Delete(); u32 HandleMakuhitaDojoState(); s16 sub_802FED0(); u8 sub_801FB50(); -void sub_80155F0(); +void NamingScreen_Free(); s32 sub_80160D8(); void ResetTextbox_809B294(); s32 sub_801A8AC(); @@ -1385,13 +1389,13 @@ bool8 sub_809B648(void) case 6: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); - sub_80151C0(4,gUnknown_3001B64->unk42C); + NamingScreen_Init(4,gUnknown_3001B64->unk42C); } else { - s32 var = sub_80154F0(); + s32 var = NamingScreen_HandleInput(); if (var == 3) { - sub_80155F0(); + NamingScreen_Free(); gUnknown_3001B64->unk430 = 1; return 0; } @@ -1400,7 +1404,7 @@ bool8 sub_809B648(void) if (gUnknown_3001B64->unk424 == 0) { return 1; } - sub_80155F0(); + NamingScreen_Free(); gUnknown_3001B64->unk430 = 0; return 0; } diff --git a/src/friend_rescue.c b/src/friend_rescue.c index 27cb19f60..f40c21e72 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -28,6 +28,10 @@ #include "wonder_mail_4.h" #include "wonder_mail_5.h" +u32 NamingScreen_Init(u32 type, u8 *defaultText); +u32 NamingScreen_HandleInput(void); +void NamingScreen_Free(void); + extern void SetFriendRescueMenuState(u32); extern TeamInventory *gTeamInventoryRef; @@ -688,7 +692,7 @@ void CleanFriendRescueMenu(void) sub_803084C(); sub_8031E10(); FriendList_Free(); - sub_80155F0(); + NamingScreen_Free(); sub_801CBB8(); sub_802F2C0(); sub_8030DE4(); @@ -1057,7 +1061,7 @@ void sub_8032828(void) RestoreSavedWindows(&gUnknown_203B33C->unk3BC); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80151C0(4, gUnknown_203B33C->passwordBuffer); + NamingScreen_Init(4, gUnknown_203B33C->passwordBuffer); break; case 0x5A: CreateMenuDialogueBoxAndPortrait(&gUnknown_80E30A4[0], 0, 6, gUnknown_80E2458, NULL, 4, 0, NULL, 0x101); @@ -1133,7 +1137,7 @@ void sub_8032828(void) RestoreSavedWindows(&gUnknown_203B33C->unk3BC); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80151C0(4, gUnknown_203B33C->passwordBuffer); + NamingScreen_Init(4, gUnknown_203B33C->passwordBuffer); break; case 0x66: CreateDialogueBoxAndPortrait(gUnknown_80E314C, 0, 0, 0x101); @@ -1659,7 +1663,7 @@ void sub_8033DBC(void) unkStruct_203B480 mail; unkStruct_203B480 *mail2; - return_var = sub_80154F0(); + return_var = NamingScreen_HandleInput(); MemoryFill8(&mail, 0, sizeof(unkStruct_203B480)); switch(return_var) { @@ -1717,10 +1721,10 @@ void sub_8033DBC(void) default: break; } - sub_80155F0(); + NamingScreen_Free(); break; case 2: - sub_80155F0(); + NamingScreen_Free(); ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B33C->unk3BC, TRUE, TRUE); SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); @@ -2555,7 +2559,7 @@ void sub_8034D74(void) unkStruct_203B480 mail; unkStruct_203B480 *mail2; - return_var = sub_80154F0(); + return_var = NamingScreen_HandleInput(); MemoryFill8(&mail, 0, sizeof(unkStruct_203B480)); switch(return_var) { @@ -2585,10 +2589,10 @@ void sub_8034D74(void) default: break; } - sub_80155F0(); + NamingScreen_Free(); break; case 2: - sub_80155F0(); + NamingScreen_Free(); ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B33C->unk3BC, TRUE, TRUE); SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); diff --git a/src/menu_input.c b/src/menu_input.c index 92269690e..9a0478b88 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -198,7 +198,7 @@ void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 windowId) piVar4++; chr = ReturnIntFromChar2(iVar1 + 0x30); iVar3 = GetCharacter(chr); - total_x += iVar3->unk6; + total_x += iVar3->width; xxx_call_draw_char(x - total_x, y, chr, color, windowId); counter++; if (counter >= len) @@ -216,8 +216,8 @@ void sub_8012C60(u32 x, u32 y, u32 a2, u32 color, u32 a4) uVar2 = ReturnIntFromChar2(a2); iVar3 = GetCharacter(uVar2); - if (iVar3->unk6 < 12) - add_x = ((12 - iVar3->unk6) / 2); + if (iVar3->width < 12) + add_x = ((12 - iVar3->width) / 2); else add_x = 0; diff --git a/src/pokemon_mail.c b/src/pokemon_mail.c index 533a7c4d3..a62b9b751 100644 --- a/src/pokemon_mail.c +++ b/src/pokemon_mail.c @@ -101,10 +101,10 @@ void CreateRescueTitle(unkStruct_802C39C *param_1) if (param_1->mailTitleType == 7) { if (param_1->playerName == NULL) - PrintStringOnWindow(178 - sub_8016028(), param_1->y, GetMonSpecies(param_1->clientSpecies), param_1->unk0[0], 0); + PrintStringOnWindow(178 - GetMaxPokeNameWidth(), param_1->y, GetMonSpecies(param_1->clientSpecies), param_1->unk0[0], 0); else { sub_80922B4(buf_2, param_1->playerName, POKEMON_NAME_LENGTH); - PrintStringOnWindow(178 - sub_8016028(), param_1->y, buf_2, param_1->unk0[0], 0); + PrintStringOnWindow(178 - GetMaxPokeNameWidth(), param_1->y, buf_2, param_1->unk0[0], 0); } } else { diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index ec4d40188..dfc284841 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -16,6 +16,10 @@ #include "string_format.h" #include "text_1.h" +u32 NamingScreen_Init(u32 type, u8 *defaultText); +u32 NamingScreen_HandleInput(void); +void NamingScreen_Free(void); + #define RESCUE_PASSWORD_SIZE 0x36 EWRAM_DATA s32 gCommsTimeout = {0}; @@ -292,7 +296,7 @@ void CreateRescuePasswordMenu(u32 currMenu) case 0x1C: case 0x1E: case 0x20: - sub_80151C0(4, gRescuePasswordBuffer); + NamingScreen_Init(4, gRescuePasswordBuffer); break; case MENU_DISPLAY_RESCUE_PASSWORD: temp = GetMailatIndex(0x1F); @@ -302,7 +306,7 @@ void CreateRescuePasswordMenu(u32 currMenu) sub_8031D70(0x1F, 0); break; case MENU_RESCUE_PASSWORD_ENTRY: - sub_80151C0(4, gRescuePasswordBuffer); + NamingScreen_Init(4, gRescuePasswordBuffer); break; } @@ -316,7 +320,7 @@ void CleanRescuePasswordMenu(void) ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); if (gRescuePasswordMenu != NULL) { - sub_80155F0(); + NamingScreen_Free(); sub_8031E10(); MemoryFree(gRescuePasswordMenu); gRescuePasswordMenu = NULL; @@ -358,7 +362,7 @@ s32 UpdateRescuePasswordMenu(void) case 1: case 3: case 5: - iVar7 = sub_80154F0(); + iVar7 = NamingScreen_HandleInput(); MemoryFill8(&mail, 0, sizeof(unkStruct_203B480)); switch(iVar7) { @@ -460,7 +464,7 @@ s32 UpdateRescuePasswordMenu(void) nextMenu = UpdateRescuePasswordMenu_sub(MENU_WONDER_MAIL); break; case 7: - switch(sub_80154F0()) + switch(NamingScreen_HandleInput()) { case 3: nextMenu = PASSWORD_ENTRY_NOT_WONDER_MAIL; @@ -496,7 +500,7 @@ s32 UpdateRescuePasswordMenu(void) sub_8039174(); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80151C0(4,gRescuePasswordBuffer); + NamingScreen_Init(4,gRescuePasswordBuffer); gRescuePasswordMenu->state = 8; subtract = gRescuePasswordMenu->currMenu - 0x21; nextMenu = MENU_FRIEND_RESCUE; @@ -524,7 +528,7 @@ s32 UpdateRescuePasswordMenu(void) sub_8039174(); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80151C0(4,gRescuePasswordBuffer); + NamingScreen_Init(4,gRescuePasswordBuffer); gRescuePasswordMenu->state = ConvertMenutoRescuePasswordState(gRescuePasswordMenu->currMenu); subtract = gRescuePasswordMenu->currMenu - 0x21; nextMenu = 0x2a; @@ -547,7 +551,7 @@ void DisplayRescuePasswordError(u32 passwordError) RestoreSavedWindows(&gRescuePasswordMenu->unk1A8); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80155F0(); + NamingScreen_Free(); switch(passwordError) { case PASSWORD_ENTRY_INCORRECT_PASSWORD: SetMenuItems(gRescuePasswordMenu->unk8,&gRescuePasswordMenu->unk148,0,&gUnknown_80E71FC,gUnknown_80E7214,FALSE,13,FALSE); @@ -587,7 +591,7 @@ void DisplayPasswordAcceptScreen(void) RestoreSavedWindows(&gRescuePasswordMenu->unk1A8); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80155F0(); + NamingScreen_Free(); SetMenuItems(gRescuePasswordMenu->unk8,&gRescuePasswordMenu->unk148,0,&gUnknown_80E7278,gUnknown_80E7290,FALSE,13,FALSE); sub_8035CF4(gRescuePasswordMenu->unk8,0,TRUE); } diff --git a/src/text_1.c b/src/text_1.c index a99630f59..165f60737 100644 --- a/src/text_1.c +++ b/src/text_1.c @@ -95,7 +95,7 @@ const unkChar gUnknown_80B86A4 = { .unk0 = sUnknown_80B865C, .unk4 = 0x81A1, - .unk6 = 7, + .width = 7, .unk8 = 10, .fill9 = 0, .unkA = 0, diff --git a/src/text_2.c b/src/text_2.c index 10aec2c28..c24504e5b 100644 --- a/src/text_2.c +++ b/src/text_2.c @@ -223,7 +223,7 @@ u32 xxx_draw_char(Window *windows, s32 x, s32 y, u32 chr, u32 color, u32 windowI } } - return sp0->unk6 + gCharacterSpacing; + return sp0->width + gCharacterSpacing; } // Copied to 01ff98f8 in NDS diff --git a/src/text_3.c b/src/text_3.c index 4bdc2842c..0ff5aa8a8 100644 --- a/src/text_3.c +++ b/src/text_3.c @@ -129,7 +129,7 @@ s32 sub_8008ED0(const u8 *str) else { const unkChar *ptr = GetCharacter(chr); if (ptr != NULL) { - ret += ptr->unk6 + gCharacterSpacing; + ret += ptr->width + gCharacterSpacing; } } } @@ -211,7 +211,7 @@ static void xxx_draw_string(Window *strArr, s32 x, s32 y, const u8 *str, u32 win if (chrPtr != NULL) { s32 x = sp.unk0; s32 x2 = gCharacterSpacing + 10; - x +=((x2 - chrPtr->unk6) / 2); + x +=((x2 - chrPtr->width) / 2); xxx_draw_char(strArr, x, sp.unk2, currChr, sp.unk10, windowId); sp.unk0 += characterSpacing; } diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index ffe5b2ba0..8808a4ae6 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -25,6 +25,10 @@ #include "wonder_mail_4.h" #include "wonder_mail_5.h" +u32 NamingScreen_Init(u32 type, u8 *defaultText); +u32 NamingScreen_HandleInput(void); +void NamingScreen_Free(void); + static EWRAM_INIT WonderMailStruct_203B2C4 *sUnknown_203B2C4 = {NULL}; #define THANK_YOU_MAIL_MAIN_MENU 0 @@ -414,7 +418,7 @@ void CleanThankYouMailPelipper(void) FreeItemDescriptionWindow(); sub_803084C(); sub_801CBB8(); - sub_80155F0(); + NamingScreen_Free(); sub_8031E10(); sub_802F2C0(); } @@ -790,7 +794,7 @@ void HandleThankYouMailPasswordMenu(void) u32 return_var; unkStruct_203B480 mail1; - return_var = sub_80154F0(); + return_var = NamingScreen_HandleInput(); MemoryFill8(&mail1, 0, sizeof(unkStruct_203B480)); switch(return_var) { @@ -821,10 +825,10 @@ void HandleThankYouMailPasswordMenu(void) case 7: break; } - sub_80155F0(); + NamingScreen_Free(); break; case 2: - sub_80155F0(); + NamingScreen_Free(); ResetUnusedInputStruct(); ShowWindows(&sUnknown_203B2C4->unk3BC, TRUE, TRUE); SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); @@ -1333,7 +1337,7 @@ void UpdateThankYouMailText(void) RestoreSavedWindows(&sUnknown_203B2C4->unk3BC); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80151C0(4,sUnknown_203B2C4->passwordBuffer); + NamingScreen_Init(4,sUnknown_203B2C4->passwordBuffer); break; case 0x1a: RestoreSavedWindows(&sUnknown_203B2C4->unk3BC); diff --git a/src/wonder_mail.c b/src/wonder_mail.c index c2a4207b4..9c78e4c7d 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -23,6 +23,10 @@ #include "wonder_mail_4.h" #include "wonder_mail_5.h" +u32 NamingScreen_Init(u32 type, u8 *defaultText); +u32 NamingScreen_HandleInput(void); +void NamingScreen_Free(void); + static EWRAM_INIT WonderMailStruct_203B2C0 *sUnknown_203B2C0 = {NULL}; extern void sub_8011C28(u32); @@ -403,7 +407,7 @@ void sub_80282FC(void) sub_8031E10(); FriendList_Free(); sub_803084C(); - sub_80155F0(); + NamingScreen_Free(); sub_80310B4(); sub_8030DE4(); sub_802453C(); @@ -575,7 +579,7 @@ void sub_8028348(void) RestoreSavedWindows(&sUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80151C0(4, sUnknown_203B2C0->passwordBuffer); + NamingScreen_Init(4, sUnknown_203B2C0->passwordBuffer); break; case 8: switch(sUnknown_203B2C0->unk538) @@ -1356,7 +1360,7 @@ void sub_80293F4(void) u32 return_var; unkStruct_203B480 mail; - return_var = sub_80154F0(); + return_var = NamingScreen_HandleInput(); MemoryFill8(&mail, 0, sizeof(unkStruct_203B480)); switch(return_var) { @@ -1387,10 +1391,10 @@ void sub_80293F4(void) default: break; } - sub_80155F0(); + NamingScreen_Free(); break; case 2: - sub_80155F0(); + NamingScreen_Free(); ResetUnusedInputStruct(); ShowWindows(&sUnknown_203B2C0->unk3BC, TRUE, TRUE); SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index 8c4a90eab..c3ae9045e 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -21,6 +21,10 @@ #include "wonder_mail_802D098.h" #include "wonder_mail_main_menu.h" +u32 NamingScreen_Init(u32 type, u8 *defaultText); +u32 NamingScreen_HandleInput(void); +void NamingScreen_Free(void); + #define SELECT_WONDER_MAIL_MODE_MAIN_SCREEN 0 #define SEND_WONDER_MAIL_MAIN_SCREEN 1 #define SEND_GAME_LINK_CABLE 2 @@ -171,7 +175,7 @@ void CleanWonderMailMenu(void) FreeItemDescriptionWindow(); // Frees 203B230 sub_803084C(); // Frees 203B320 sub_801CBB8(); // Frees 203B244 - sub_80155F0(); // Frees 203B1FC + NamingScreen_Free(); // Frees 203B1FC sub_8031E10(); // Frees 203B334 } } @@ -325,11 +329,11 @@ void HandlePasswordEntryScreen(void) { s32 iVar2; - iVar2 = sub_80154F0(); + iVar2 = NamingScreen_HandleInput(); MemoryFill8(gUnknown_203B3E8->UNK38.unk38_u8, 0, sizeof(gUnknown_203B3E8->UNK38)); switch(iVar2){ case 3: - sub_80155F0(); + NamingScreen_Free(); ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B3E8->unk1EC, TRUE, TRUE); if ( !DecodeWonderMailPassword(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->UNK38.decodedMail) || !IsValidWonderMail(&gUnknown_203B3E8->UNK38.decodedMail) ) @@ -347,7 +351,7 @@ void HandlePasswordEntryScreen(void) } break; case 2: - sub_80155F0(); + NamingScreen_Free(); ResetUnusedInputStruct(); ShowWindows(&gUnknown_203B3E8->unk1EC, TRUE, TRUE); SetWonderMailMainMenuState(EXIT_TO_MAIN_MENU); @@ -561,7 +565,7 @@ void WonderMailMainMenuCallback(void) RestoreSavedWindows(&gUnknown_203B3E8->unk1EC); ResetUnusedInputStruct(); ShowWindows(NULL, TRUE, TRUE); - sub_80151C0(5,gUnknown_203B3E8->PasswordEntryBuffer); + NamingScreen_Init(5,gUnknown_203B3E8->PasswordEntryBuffer); break; case PASSWORD_INVALID: CreateMenuDialogueBoxAndPortrait(gUnknown_80E7CC4,0,6,gUnknown_80E78F8,0,4,0,0,0x101); diff --git a/sym_ewram_init.txt b/sym_ewram_init.txt index 0ee7af698..957e6f4fe 100644 --- a/sym_ewram_init.txt +++ b/sym_ewram_init.txt @@ -25,7 +25,6 @@ .include "src/quick_save_write.o" .include "src/string_format.o" .include "src/code_8015080.o" -.include "src/code_8012A18_1.o" .include "src/code_801602C.o" .include "src/felicity_bank.o" .include "src/kangaskhan_storage1.o"