Start documenting Naming Screen

This commit is contained in:
DizzyEggg
2025-06-02 20:18:14 +02:00
parent e8a8b1c2d7
commit 86173a8955
19 changed files with 356 additions and 368 deletions

View File

@@ -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
#endif // GUARD_CODE_8012A18_1_H

View File

@@ -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);

View File

@@ -8,7 +8,7 @@ typedef struct unkChar
{
const u16 *unk0;
u16 unk4;
s16 unk6;
s16 width;
u8 unk8;
u8 fill9;
u8 unkA;

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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);
}

View File

@@ -95,7 +95,7 @@ const unkChar gUnknown_80B86A4 =
{
.unk0 = sUnknown_80B865C,
.unk4 = 0x81A1,
.unk6 = 7,
.width = 7,
.unk8 = 10,
.fill9 = 0,
.unkA = 0,

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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"