summaryrefslogtreecommitdiff
path: root/src/engine/naming_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/naming_screen.c')
-rw-r--r--src/engine/naming_screen.c425
1 files changed, 289 insertions, 136 deletions
diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c
index 4d2545440..440504d5a 100644
--- a/src/engine/naming_screen.c
+++ b/src/engine/naming_screen.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "naming_screen.h"
#include "data2.h"
+#include "graphics.h"
#include "field_effect.h"
#include "field_map_obj.h"
#include "field_player_avatar.h"
@@ -29,16 +30,11 @@ extern u16 gKeyRepeatStartDelay;
extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality);
-const u32 gSpriteImage_83CE094[] = INCBIN_U32("graphics/naming_screen/pc_icon/0.4bpp");
-const u32 gSpriteImage_83CE154[] = INCBIN_U32("graphics/naming_screen/pc_icon/1.4bpp");
+const u8 gSpriteImage_83CE094[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp");
+const u8 gSpriteImage_83CE154[] = INCBIN_U8("graphics/naming_screen/pc_icon/1.4bpp");
-//Some unused pointer, perhaps.
-asm(".section .rodata\n\
-@ XXX: what is this?\n\
- .align 2\n\
- .4byte 0x2000000\n");
+struct NamingScreenData *const namingScreenDataPtr = &namingScreenData;
-extern u16 *const gUnknown_083CE28C[];
extern const struct SubspriteTable gSubspriteTables_83CE558[];
extern const struct SubspriteTable gSubspriteTables_83CE560[];
extern const struct SubspriteTable gSubspriteTables_83CE578[];
@@ -55,7 +51,6 @@ extern const struct SpriteTemplate gSpriteTemplate_83CE688;
extern const struct SpriteSheet gUnknown_083CE6A0[];
extern const struct SpritePalette gUnknown_083CE708[];
extern const u8 gNamingScreenMenu_Gfx[];
-extern const u16 gNamingScreenPalettes[];
extern const u16 gUnknown_083CE748[];
extern const u16 gUnknown_083CEBF8[];
extern const u16 gUnknown_083CF0A8[];
@@ -198,12 +193,12 @@ static void VBlankCB_NamingScreen(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- REG_BG1VOFS = namingScreenData.bg1vOffset;
- REG_BG2VOFS = namingScreenData.bg2vOffset;
+ REG_BG1VOFS = namingScreenDataPtr->bg1vOffset;
+ REG_BG2VOFS = namingScreenDataPtr->bg2vOffset;
REG_BG1CNT &= 0xFFFC;
- REG_BG1CNT |= namingScreenData.unk8;
+ REG_BG1CNT |= namingScreenDataPtr->unk8;
REG_BG2CNT &= 0xFFFC;
- REG_BG2CNT |= namingScreenData.unkA;
+ REG_BG2CNT |= namingScreenDataPtr->unkA;
}
static void StoreNamingScreenParameters(u8 templateNum, u8 *destBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback)
@@ -228,12 +223,12 @@ static void GetNamingScreenParameters(void)
taskId = FindTaskIdByFunc(Task_DoNothing);
task = &gTasks[taskId];
- namingScreenData.templateNum = task->data[0];
- namingScreenData.unk3E = task->data[1];
- namingScreenData.unk40 = task->data[2];
- namingScreenData.unk42 = (task->data[3] << 16) | (u16)task->data[4];
- LoadWordFromTwoHalfwords(&task->data[5], (u32 *)&namingScreenData.destBuffer);
- LoadWordFromTwoHalfwords(&task->data[7], (u32 *)&namingScreenData.returnCallback);
+ namingScreenDataPtr->templateNum = task->data[0];
+ namingScreenDataPtr->unk3E = task->data[1];
+ namingScreenDataPtr->unk40 = task->data[2];
+ namingScreenDataPtr->unk42 = (task->data[3] << 16) | (u16)task->data[4];
+ LoadWordFromTwoHalfwords(&task->data[5], (u32 *)&namingScreenDataPtr->destBuffer);
+ LoadWordFromTwoHalfwords(&task->data[7], (u32 *)&namingScreenDataPtr->returnCallback);
DestroyTask(taskId);
}
@@ -311,20 +306,20 @@ static const struct NamingScreenTemplate *const sNamingScreenTemplates[]; //for
static void NamingScreen_Init(void)
{
GetNamingScreenParameters();
- namingScreenData.state = 0;
- namingScreenData.bg1vOffset = 0;
- namingScreenData.bg2vOffset = 0;
- namingScreenData.unk8 = 1;
- namingScreenData.unkA = 2;
- namingScreenData.unkC = 0;
- namingScreenData.unkD = 1;
- namingScreenData.template = sNamingScreenTemplates[namingScreenData.templateNum];
- namingScreenData.currentPage = namingScreenData.template->unk4;
- namingScreenData.unk2 = 14 - namingScreenData.template->maxChars / 2;
- namingScreenData.unk3C = gKeyRepeatStartDelay;
- memset(namingScreenData.textBuffer, 0xFF, sizeof(namingScreenData.textBuffer));
- if (namingScreenData.template->unk0 != 0)
- StringCopy(namingScreenData.textBuffer, namingScreenData.destBuffer);
+ namingScreenDataPtr->state = 0;
+ namingScreenDataPtr->bg1vOffset = 0;
+ namingScreenDataPtr->bg2vOffset = 0;
+ namingScreenDataPtr->unk8 = 1;
+ namingScreenDataPtr->unkA = 2;
+ namingScreenDataPtr->unkC = 0;
+ namingScreenDataPtr->unkD = 1;
+ namingScreenDataPtr->template = sNamingScreenTemplates[namingScreenDataPtr->templateNum];
+ namingScreenDataPtr->currentPage = namingScreenDataPtr->template->unk4;
+ namingScreenDataPtr->unk2 = 14 - namingScreenDataPtr->template->maxChars / 2;
+ namingScreenDataPtr->unk3C = gKeyRepeatStartDelay;
+ memset(namingScreenDataPtr->textBuffer, 0xFF, sizeof(namingScreenDataPtr->textBuffer));
+ if (namingScreenDataPtr->template->unk0 != 0)
+ StringCopy(namingScreenDataPtr->textBuffer, namingScreenDataPtr->destBuffer);
gKeyRepeatStartDelay = 16;
}
@@ -408,14 +403,14 @@ static void sub_80B5E50(void)
static void Task_NamingScreenMain(u8 taskId)
{
- while (sMainStateFuncs[namingScreenData.state](&gTasks[taskId]) != 0)
+ while (sMainStateFuncs[namingScreenDataPtr->state](&gTasks[taskId]) != 0)
;
}
static bool8 MainState_BeginFadeIn(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- namingScreenData.state++;
+ namingScreenDataPtr->state++;
return 0;
}
@@ -425,7 +420,7 @@ static bool8 MainState_WaitFadeIn(struct Task *task)
{
SetInputState(INPUT_STATE_ENABLED);
sub_80B68D8(1);
- namingScreenData.state++;
+ namingScreenDataPtr->state++;
}
return FALSE;
}
@@ -441,7 +436,7 @@ static bool8 MainState_MoveToOKButton(struct Task *task)
{
SetInputState(INPUT_STATE_ENABLED);
MoveCursorToOKButton();
- namingScreenData.state = MAIN_STATE_HANDLE_INPUT;
+ namingScreenDataPtr->state = MAIN_STATE_HANDLE_INPUT;
}
return FALSE;
}
@@ -454,7 +449,7 @@ static bool8 MainState_StartPageSwap(struct Task *task)
sub_80B6888(1);
sub_80B6460(0, 0, 1);
PlaySE(SE_WIN_OPEN);
- namingScreenData.state = MAIN_STATE_WAIT_PAGE_SWAP;
+ namingScreenDataPtr->state = MAIN_STATE_WAIT_PAGE_SWAP;
return FALSE;
}
@@ -465,18 +460,18 @@ static bool8 MainState_WaitPageSwap(struct Task *task)
if (IsPageSwapAnimNotInProgress())
{
- namingScreenData.state = MAIN_STATE_HANDLE_INPUT;
- namingScreenData.currentPage++;
- namingScreenData.currentPage %= 3;
+ namingScreenDataPtr->state = MAIN_STATE_HANDLE_INPUT;
+ namingScreenDataPtr->currentPage++;
+ namingScreenDataPtr->currentPage %= 3;
sub_80B7614();
sub_80B77F8();
SetInputState(INPUT_STATE_ENABLED);
GetCursorPos(&cursorX, &cursorY);
#if ENGLISH
- if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
+ if (namingScreenDataPtr->currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
cursorX = 5;
#elif GERMAN
- if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 7 || cursorX == 8))
+ if (namingScreenDataPtr->currentPage == PAGE_OTHERS && (cursorX == 7 || cursorX == 8))
cursorX = 6;
#endif
SetCursorPos(cursorX, cursorY);
@@ -491,17 +486,17 @@ static bool8 MainState_6(struct Task *task)
SetInputState(INPUT_STATE_DISABLED);
sub_80B68D8(0);
sub_80B6460(3, 0, 1);
- gKeyRepeatStartDelay = namingScreenData.unk3C;
- if (namingScreenData.templateNum == NAMING_SCREEN_TEMPLATE_MON_NAME
+ gKeyRepeatStartDelay = namingScreenDataPtr->unk3C;
+ if (namingScreenDataPtr->templateNum == NAMING_SCREEN_TEMPLATE_MON_NAME
&& CalculatePlayerPartyCount() >= 6)
{
DisplaySentToPCMessage();
- namingScreenData.state = MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE;
+ namingScreenDataPtr->state = MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE;
return FALSE;
}
else
{
- namingScreenData.state = MAIN_STATE_BEGIN_FADE_OUT;
+ namingScreenDataPtr->state = MAIN_STATE_BEGIN_FADE_OUT;
return TRUE; //Exit the naming screen
}
}
@@ -509,21 +504,21 @@ static bool8 MainState_6(struct Task *task)
static bool8 MainState_UpdateSentToPCMessage(struct Task *task)
{
if (MenuUpdateWindowText())
- namingScreenData.state++;
+ namingScreenDataPtr->state++;
return FALSE;
}
static bool8 MainState_BeginFadeInOut(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- namingScreenData.state++;
+ namingScreenDataPtr->state++;
return FALSE;
}
static bool8 MainState_WaitFadeOutAndExit(struct Task *task)
{
if (!gPaletteFade.active)
- SetMainCallback2(namingScreenData.returnCallback);
+ SetMainCallback2(namingScreenDataPtr->returnCallback);
return FALSE;
}
@@ -584,7 +579,7 @@ static bool8 KeyboardKeyHandler_Character(u8 event)
if (var)
{
SetInputState(INPUT_STATE_DISABLED);
- namingScreenData.state = MAIN_STATE_MOVE_TO_OK_BUTTON;
+ namingScreenDataPtr->state = MAIN_STATE_MOVE_TO_OK_BUTTON;
}
}
return FALSE;
@@ -613,7 +608,7 @@ static bool8 KeyboardKeyHandler_OK(u8 event)
if (event == KBEVENT_PRESSED_A)
{
PlaySE(SE_SELECT);
- namingScreenData.state = MAIN_STATE_6;
+ namingScreenDataPtr->state = MAIN_STATE_6;
return TRUE;
}
else
@@ -622,7 +617,7 @@ static bool8 KeyboardKeyHandler_OK(u8 event)
static bool8 sub_80B61C8(void)
{
- namingScreenData.state = MAIN_STATE_START_PAGE_SWAP;
+ namingScreenDataPtr->state = MAIN_STATE_START_PAGE_SWAP;
return TRUE;
}
@@ -764,9 +759,9 @@ static void HandleDpadMovement(struct Task *task)
{
//The "others" page only has 5 columns
#if ENGLISH
- if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
+ if (namingScreenDataPtr->currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
#elif GERMAN
- if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7 || cursorX == 8))
+ if (namingScreenDataPtr->currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7 || cursorX == 8))
#endif
{
if (sDpadDeltaX[dpadDir] > 0)
@@ -948,8 +943,8 @@ static void Task_HandlePageSwapAnim(u8 taskId)
static bool8 PageSwapAnimState_Init(struct Task *task)
{
- namingScreenData.bg1vOffset = 0;
- namingScreenData.bg2vOffset = 0;
+ namingScreenDataPtr->bg1vOffset = 0;
+ namingScreenDataPtr->bg2vOffset = 0;
task->tState++;
return 0;
}
@@ -958,19 +953,19 @@ static bool8 PageSwapAnimState_1(struct Task *task)
{
u16 *const arr[] =
{
- &namingScreenData.bg2vOffset,
- &namingScreenData.bg1vOffset
+ &namingScreenDataPtr->bg2vOffset,
+ &namingScreenDataPtr->bg1vOffset
};
task->tFrameCount += 4;
- *arr[namingScreenData.unkC] = Sin(task->tFrameCount, 40);
- *arr[namingScreenData.unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40);
+ *arr[namingScreenDataPtr->unkC] = Sin(task->tFrameCount, 40);
+ *arr[namingScreenDataPtr->unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40);
if (task->tFrameCount >= 64)
{
- u8 temp = namingScreenData.unk8; //Why u8 and not u16?
+ u8 temp = namingScreenDataPtr->unk8; //Why u8 and not u16?
- namingScreenData.unk8 = namingScreenData.unkA;
- namingScreenData.unkA = temp;
+ namingScreenDataPtr->unk8 = namingScreenDataPtr->unkA;
+ namingScreenDataPtr->unkA = temp;
task->tState++;
}
return 0;
@@ -978,17 +973,17 @@ static bool8 PageSwapAnimState_1(struct Task *task)
static bool8 PageSwapAnimState_2(struct Task *task)
{
- u16 *const arr[] = {&namingScreenData.bg2vOffset, &namingScreenData.bg1vOffset};
+ u16 *const arr[] = {&namingScreenDataPtr->bg2vOffset, &namingScreenDataPtr->bg1vOffset};
task->tFrameCount += 4;
- *arr[namingScreenData.unkC] = Sin(task->tFrameCount, 40);
- *arr[namingScreenData.unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40);
+ *arr[namingScreenDataPtr->unkC] = Sin(task->tFrameCount, 40);
+ *arr[namingScreenDataPtr->unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40);
if (task->tFrameCount >= 128)
{
- u8 temp = namingScreenData.unkC;
+ u8 temp = namingScreenDataPtr->unkC;
- namingScreenData.unkC = namingScreenData.unkD;
- namingScreenData.unkD = temp;
+ namingScreenDataPtr->unkC = namingScreenDataPtr->unkD;
+ namingScreenDataPtr->unkD = temp;
task->tState++;
}
return 0;
@@ -1009,11 +1004,11 @@ static bool8 PageSwapAnimState_Done(struct Task *task)
static void CursorInit(void)
{
- namingScreenData.cursorSpriteId = CreateSprite(&gSpriteTemplate_83CE640, 0, 0, 0);
- gSprites[namingScreenData.cursorSpriteId].oam.priority = 1;
- gSprites[namingScreenData.cursorSpriteId].oam.objMode = 1;
- gSprites[namingScreenData.cursorSpriteId].data[6] = 1;
- gSprites[namingScreenData.cursorSpriteId].data[6] = 2;
+ namingScreenDataPtr->cursorSpriteId = CreateSprite(&gSpriteTemplate_83CE640, 0, 0, 0);
+ gSprites[namingScreenDataPtr->cursorSpriteId].oam.priority = 1;
+ gSprites[namingScreenDataPtr->cursorSpriteId].oam.objMode = 1;
+ gSprites[namingScreenDataPtr->cursorSpriteId].data[6] = 1;
+ gSprites[namingScreenDataPtr->cursorSpriteId].data[6] = 2;
SetCursorPos(0, 0);
}
@@ -1031,12 +1026,12 @@ static const u8 sKeyboardSymbolPositions[][COLUMN_COUNT] = {
static u8 CursorColToKeyboardCol(s16 x)
{
- return sKeyboardSymbolPositions[namingScreenData.currentPage][x];
+ return sKeyboardSymbolPositions[namingScreenDataPtr->currentPage][x];
}
static void SetCursorPos(s16 x, s16 y)
{
- struct Sprite *cursorSprite = &gSprites[namingScreenData.cursorSpriteId];
+ struct Sprite *cursorSprite = &gSprites[namingScreenDataPtr->cursorSpriteId];
cursorSprite->pos1.x = CursorColToKeyboardCol(x) * 8 + 27;
cursorSprite->pos1.y = y * 16 + 80;
@@ -1048,7 +1043,7 @@ static void SetCursorPos(s16 x, s16 y)
static void GetCursorPos(s16 *x, s16 *y)
{
- struct Sprite *cursorSprite = &gSprites[namingScreenData.cursorSpriteId];
+ struct Sprite *cursorSprite = &gSprites[namingScreenDataPtr->cursorSpriteId];
*x = cursorSprite->data[0];
*y = cursorSprite->data[1];
@@ -1061,25 +1056,25 @@ static void MoveCursorToOKButton(void)
static void sub_80B6888(u8 a)
{
- gSprites[namingScreenData.cursorSpriteId].data[4] &= -256;
- gSprites[namingScreenData.cursorSpriteId].data[4] |= a;
- StartSpriteAnim(&gSprites[namingScreenData.cursorSpriteId], 0);
+ gSprites[namingScreenDataPtr->cursorSpriteId].data[4] &= -256;
+ gSprites[namingScreenDataPtr->cursorSpriteId].data[4] |= a;
+ StartSpriteAnim(&gSprites[namingScreenDataPtr->cursorSpriteId], 0);
}
static void sub_80B68D8(u8 a)
{
- gSprites[namingScreenData.cursorSpriteId].data[4] &= 0xFF;
- gSprites[namingScreenData.cursorSpriteId].data[4] |= a << 8;
+ gSprites[namingScreenDataPtr->cursorSpriteId].data[4] &= 0xFF;
+ gSprites[namingScreenDataPtr->cursorSpriteId].data[4] |= a << 8;
}
static void sub_80B6914(void)
{
- StartSpriteAnim(&gSprites[namingScreenData.cursorSpriteId], 1);
+ StartSpriteAnim(&gSprites[namingScreenDataPtr->cursorSpriteId], 1);
}
static bool8 IsCursorAnimFinished(void)
{
- return gSprites[namingScreenData.cursorSpriteId].animEnded;
+ return gSprites[namingScreenDataPtr->cursorSpriteId].animEnded;
}
static u8 GetKeyRoleAtCursorPos(void)
@@ -1134,7 +1129,7 @@ static void sub_80B6A80(void)
u8 spriteId3;
spriteId1 = CreateSprite(&gSpriteTemplate_83CE5C8, 0xCC, 0x50, 0);
- namingScreenData.unk10 = spriteId1;
+ namingScreenDataPtr->unk10 = spriteId1;
SetSubspriteTables(&gSprites[spriteId1], gSubspriteTables_83CE558);
spriteId2 = CreateSprite(&gSpriteTemplate_83CE5F8, 0xCC, 0x4C, 1);
@@ -1148,10 +1143,10 @@ static void sub_80B6A80(void)
static void sub_80B6B14(void)
{
- struct Sprite *sprite = &gSprites[namingScreenData.unk10];
+ struct Sprite *sprite = &gSprites[namingScreenDataPtr->unk10];
sprite->data[0] = 2;
- sprite->data[1] = namingScreenData.currentPage;
+ sprite->data[1] = namingScreenDataPtr->currentPage;
}
static u8 sub_80B6B5C(struct Sprite *);
@@ -1178,7 +1173,7 @@ static u8 sub_80B6B5C(struct Sprite *sprite)
struct Sprite *sprite1 = &gSprites[sprite->data[6]];
struct Sprite *sprite2 = &gSprites[sprite->data[7]];
- sub_80B6C48(namingScreenData.currentPage, sprite1, sprite2);
+ sub_80B6C48(namingScreenDataPtr->currentPage, sprite1, sprite2);
sprite->data[0]++;
return 0;
}
@@ -1247,11 +1242,11 @@ static void sub_80B6D04(void)
s16 r1;
u8 i;
- r1 = (namingScreenData.unk2 - 1) * 8 + 4;
+ r1 = (namingScreenDataPtr->unk2 - 1) * 8 + 4;
spriteId = CreateSprite(&gSpriteTemplate_83CE658, r1, 0x28, 0);
gSprites[spriteId].oam.priority = 3;
- r1 = namingScreenData.unk2 * 8 + 4;
- for (i = 0; i < namingScreenData.template->maxChars; i++, r1 += 8)
+ r1 = namingScreenDataPtr->unk2 * 8 + 4;
+ for (i = 0; i < namingScreenDataPtr->template->maxChars; i++, r1 += 8)
{
spriteId = CreateSprite(&gSpriteTemplate_83CE670, r1, 0x2C, 0);
gSprites[spriteId].oam.priority = 3;
@@ -1312,7 +1307,7 @@ static void (*const gUnknown_083CE2E0[])(void) =
static void sub_80B6E44(void)
{
- gUnknown_083CE2E0[namingScreenData.template->unk2]();
+ gUnknown_083CE2E0[namingScreenDataPtr->template->unk2]();
}
static void nullsub_40(void)
@@ -1324,7 +1319,7 @@ static void sub_80B6E68(void)
u8 rivalGfxId;
u8 spriteId;
- rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, namingScreenData.unk3E);
+ rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, namingScreenDataPtr->unk3E);
spriteId = AddPseudoFieldObject(rivalGfxId, SpriteCallbackDummy, 0x38, 0x18, 0);
gSprites[spriteId].oam.priority = 3;
StartSpriteAnim(&gSprites[spriteId], 4);
@@ -1344,7 +1339,7 @@ static void sub_80B6EFC(void)
u8 spriteId;
sub_809D51C();
- spriteId = CreateMonIcon(namingScreenData.unk3E, SpriteCallbackDummy, 0x34, 0x18, 0, namingScreenData.unk42);
+ spriteId = CreateMonIcon(namingScreenDataPtr->unk3E, SpriteCallbackDummy, 0x34, 0x18, 0, namingScreenDataPtr->unk42);
gSprites[spriteId].oam.priority = 3;
}
@@ -1352,21 +1347,21 @@ static u8 GetTextCaretPosition(void)
{
u8 i;
- for (i = 0; i < namingScreenData.template->maxChars; i++)
+ for (i = 0; i < namingScreenDataPtr->template->maxChars; i++)
{
- if (namingScreenData.textBuffer[i] == EOS)
+ if (namingScreenDataPtr->textBuffer[i] == EOS)
return i;
}
- return namingScreenData.template->maxChars - 1;
+ return namingScreenDataPtr->template->maxChars - 1;
}
static u8 GetPreviousTextCaretPosition(void)
{
s8 i;
- for (i = namingScreenData.template->maxChars - 1; i > 0; i--)
+ for (i = namingScreenDataPtr->template->maxChars - 1; i > 0; i--)
{
- if (namingScreenData.textBuffer[i] != EOS)
+ if (namingScreenDataPtr->textBuffer[i] != EOS)
return i;
}
return 0;
@@ -1378,9 +1373,9 @@ static void DeleteTextCharacter(void)
u8 var2;
index = GetPreviousTextCaretPosition();
- namingScreenData.textBuffer[index] = 0;
+ namingScreenDataPtr->textBuffer[index] = 0;
sub_80B7960();
- namingScreenData.textBuffer[index] = EOS;
+ namingScreenDataPtr->textBuffer[index] = EOS;
var2 = GetKeyRoleAtCursorPos();
if (var2 == 0 || var2 == 2)
sub_80B6460(1, 0, 1);
@@ -1408,7 +1403,7 @@ static bool8 sub_80B7004(void)
PlaySE(SE_SELECT);
if (r4)
{
- if (GetPreviousTextCaretPosition() == namingScreenData.template->maxChars - 1)
+ if (GetPreviousTextCaretPosition() == namingScreenDataPtr->template->maxChars - 1)
return TRUE;
}
return FALSE;
@@ -1420,7 +1415,7 @@ static void sub_80B7090(void) // DoInput?
u8 r4;
r5 = GetPreviousTextCaretPosition();
- r4 = namingScreenData.textBuffer[r5];
+ r4 = namingScreenDataPtr->textBuffer[r5];
if (sub_80B7198(r4))
{
if (sub_80B7264(r4))
@@ -1445,7 +1440,7 @@ static bool8 sub_80B7104(void)
u8 r4;
r5 = GetPreviousTextCaretPosition();
- r4 = namingScreenData.textBuffer[r5];
+ r4 = namingScreenDataPtr->textBuffer[r5];
if (sub_80B720C(r4))
{
sub_80B72A4(r4, r5);
@@ -1460,7 +1455,7 @@ static bool8 sub_80B713C(void)
u8 r4;
r5 = GetPreviousTextCaretPosition();
- r4 = namingScreenData.textBuffer[r5];
+ r4 = namingScreenDataPtr->textBuffer[r5];
if (sub_80B7264(r4))
{
sub_80B7370(r4, r5);
@@ -1473,7 +1468,7 @@ static void AddTextCharacter(u8 ch)
{
u8 index = GetTextCaretPosition();
- namingScreenData.textBuffer[index] = ch;
+ namingScreenDataPtr->textBuffer[index] = ch;
}
static bool8 sub_80B7198(u8 a)
@@ -1545,7 +1540,7 @@ static void sub_80B72A4(u8 a, u8 b)
chr = a + 0x2C;
else if (a >= 155 && a <= 159)
chr = a + 0xFB;
- namingScreenData.textBuffer[b] = chr;
+ namingScreenDataPtr->textBuffer[b] = chr;
}
static void sub_80B7370(u8 a, u8 b)
@@ -1560,7 +1555,7 @@ static void sub_80B7370(u8 a, u8 b)
chr = a + 0x31;
else if (a >= 150 && a <= 154)
chr = a + 5;
- namingScreenData.textBuffer[b] = chr;
+ namingScreenDataPtr->textBuffer[b] = chr;
}
static void sub_80B73CC(u8 a, u8 b)
@@ -1583,7 +1578,7 @@ static void sub_80B73CC(u8 a, u8 b)
chr = a + 0xCF;
else if (a >= 150 && a <= 154)
chr = a + 0xD4;
- namingScreenData.textBuffer[b] = chr;
+ namingScreenDataPtr->textBuffer[b] = chr;
}
static void sub_80B7474(u8 a, u8 b)
@@ -1594,18 +1589,18 @@ static void sub_80B7474(u8 a, u8 b)
chr = a + 0xCF;
else if (a >= 155 && a <= 159)
chr = a + 0xCF;
- namingScreenData.textBuffer[b] = chr;
+ namingScreenDataPtr->textBuffer[b] = chr;
}
static void sub_80B74B0(void)
{
u8 i;
- for (i = 0; i < namingScreenData.template->maxChars; i++)
+ for (i = 0; i < namingScreenDataPtr->template->maxChars; i++)
{
- if (namingScreenData.textBuffer[i] != 0 && namingScreenData.textBuffer[i] != 0xFF)
+ if (namingScreenDataPtr->textBuffer[i] != 0 && namingScreenDataPtr->textBuffer[i] != 0xFF)
{
- StringCopyN(namingScreenData.destBuffer, namingScreenData.textBuffer, namingScreenData.template->maxChars + 1);
+ StringCopyN(namingScreenDataPtr->destBuffer, namingScreenDataPtr->textBuffer, namingScreenDataPtr->template->maxChars + 1);
break;
}
}
@@ -1613,7 +1608,7 @@ static void sub_80B74B0(void)
static void DisplaySentToPCMessage(void)
{
- StringCopy(gStringVar1, namingScreenData.destBuffer);
+ StringCopy(gStringVar1, namingScreenDataPtr->destBuffer);
StringExpandPlaceholders(gStringVar4, gOtherText_SentToPC);
BasicInitMenuWindow(&gWindowConfig_81E6E88);
MenuDisplayMessageBox();
@@ -1670,8 +1665,8 @@ static void sub_80B75C4(void)
(u16 *)(VRAM + 0xE800),
};
- gUnknown_083CE2F0[namingScreenData.currentPage][0](arr[namingScreenData.unkC]);
- gUnknown_083CE2F0[namingScreenData.currentPage][1](arr[namingScreenData.unkD]);
+ gUnknown_083CE2F0[namingScreenDataPtr->currentPage][0](arr[namingScreenDataPtr->unkC]);
+ gUnknown_083CE2F0[namingScreenDataPtr->currentPage][1](arr[namingScreenDataPtr->unkD]);
}
static void sub_80B7614(void)
@@ -1682,7 +1677,7 @@ static void sub_80B7614(void)
(u16 *)(VRAM + 0xE800),
};
- gUnknown_083CE2F0[namingScreenData.currentPage][1](arr[namingScreenData.unkD]);
+ gUnknown_083CE2F0[namingScreenDataPtr->currentPage][1](arr[namingScreenDataPtr->unkD]);
}
static void sub_80B7650(u16 *vramBuffer)
@@ -1736,12 +1731,12 @@ static void sub_80B76E0(u16 *vramBuffer, const u16 *src)
static void sub_80B772C(void)
{
- nullsub_20(namingScreenData.currentPage, namingScreenData.unkC);
+ nullsub_20(namingScreenDataPtr->currentPage, namingScreenDataPtr->unkC);
}
static void sub_80B7740(void)
{
- nullsub_20((namingScreenData.currentPage + 1) % 3, namingScreenData.unkD);
+ nullsub_20((namingScreenDataPtr->currentPage + 1) % 3, namingScreenDataPtr->unkD);
}
static void nullsub_20(u8 a, u8 b)
@@ -1802,23 +1797,23 @@ static const u8 sKeyboardCharacters[][4][20]; //forward declaration
static u8 GetCharAtKeyboardPos(s16 a, s16 b)
{
- return sKeyboardCharacters[namingScreenData.currentPage][b][a];
+ return sKeyboardCharacters[namingScreenDataPtr->currentPage][b][a];
}
static void sub_80B7794(void)
{
- BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][0][namingScreenData.unkC]);
- gUnknown_083CE310[namingScreenData.currentPage][0]();
- BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][1][namingScreenData.unkD]);
- gUnknown_083CE310[namingScreenData.currentPage][1]();
+ BasicInitMenuWindow(gUnknown_083CE328[namingScreenDataPtr->currentPage][0][namingScreenDataPtr->unkC]);
+ gUnknown_083CE310[namingScreenDataPtr->currentPage][0]();
+ BasicInitMenuWindow(gUnknown_083CE328[namingScreenDataPtr->currentPage][1][namingScreenDataPtr->unkD]);
+ gUnknown_083CE310[namingScreenDataPtr->currentPage][1]();
sub_80B772C();
sub_80B7740();
}
static void sub_80B77F8(void)
{
- BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][1][namingScreenData.unkD]);
- gUnknown_083CE310[namingScreenData.currentPage][1]();
+ BasicInitMenuWindow(gUnknown_083CE328[namingScreenDataPtr->currentPage][1][namingScreenDataPtr->unkD]);
+ gUnknown_083CE310[namingScreenDataPtr->currentPage][1]();
sub_80B7740();
}
@@ -1849,9 +1844,9 @@ static void PrintKeyboardCharacters(u8 page) //print letters on page
static void sub_80B78A8(void)
{
BasicInitMenuWindow(&gWindowConfig_81E6F4C);
- gUnknown_083CE358[namingScreenData.templateNum]();
- gUnknown_083CE368[namingScreenData.template->unk3]();
- MenuPrint(namingScreenData.template->title, 9, 2);
+ gUnknown_083CE358[namingScreenDataPtr->templateNum]();
+ gUnknown_083CE368[namingScreenDataPtr->template->unk3]();
+ MenuPrint(namingScreenDataPtr->template->title, 9, 2);
}
static void nullsub_61(void)
@@ -1860,7 +1855,7 @@ static void nullsub_61(void)
static void sub_80B78F8(void)
{
- StringCopy(gStringVar1, gSpeciesNames[(s16)namingScreenData.unk3E]);
+ StringCopy(gStringVar1, gSpeciesNames[(s16)namingScreenDataPtr->unk3E]);
}
static void nullsub_62(void)
@@ -1871,9 +1866,9 @@ static void sub_80B7924(void)
{
u8 genderSymbol[2] = _("♂");
- if ((s16)namingScreenData.unk40 != MON_GENDERLESS)
+ if ((s16)namingScreenDataPtr->unk40 != MON_GENDERLESS)
{
- if ((s16)namingScreenData.unk40 == MON_FEMALE)
+ if ((s16)namingScreenDataPtr->unk40 == MON_FEMALE)
genderSymbol[0] = 0xB6; //female symbol
MenuPrint(genderSymbol, 0x14, 4);
}
@@ -1890,9 +1885,9 @@ static void sub_80B7960(void)
string[4] = 0x11;
string[5] = 1;
string += 6;
- StringCopy(string, namingScreenData.textBuffer);
+ StringCopy(string, namingScreenDataPtr->textBuffer);
BasicInitMenuWindow(&gWindowConfig_81E6F4C);
- MenuPrint(gStringVar1, namingScreenData.unk2, 4);
+ MenuPrint(gStringVar1, namingScreenDataPtr->unk2, 4);
}
//--------------------------------------------------
@@ -2034,4 +2029,162 @@ const struct OamData gOamData_83CE4A8 =
.affineParam = 0,
};
-//TODO: dump sprite data
+
+const struct Subsprite gSubspriteTable_83CE4B0[] = {
+ { -20, -16, ST_OAM_H_RECTANGLE, 1, 0, 1 },
+ { 12, -16, ST_OAM_SQUARE, 0, 4, 1 },
+ { -20, -8, ST_OAM_H_RECTANGLE, 1, 5, 1 },
+ { 12, -8, ST_OAM_SQUARE, 0, 9, 1 },
+ { -20, 0, ST_OAM_H_RECTANGLE, 1, 10, 1 },
+ { 12, 0, ST_OAM_SQUARE, 0, 14, 1 },
+ { -20, 8, ST_OAM_H_RECTANGLE, 1, 15, 1 },
+ { 12, 8, ST_OAM_SQUARE, 0, 19, 1 }
+};
+
+const struct Subsprite gSubspriteTable_83CE4F0[] = {
+ { -12, -4, ST_OAM_SQUARE, 0, 0, 1 },
+ { 4, -4, ST_OAM_SQUARE, 0, 1, 1 }
+};
+
+const struct Subsprite gSubspriteTable_83CE500[] = {
+ { -12, -4, ST_OAM_H_RECTANGLE, 0, 0, 1 },
+ { 4, -4, ST_OAM_SQUARE, 0, 2, 1 }
+};
+
+const struct Subsprite gSubspriteTable_83CE510[] = {
+ { -20, -12, ST_OAM_H_RECTANGLE, 1, 0, 1 },
+ { 12, -12, ST_OAM_SQUARE, 0, 4, 1 },
+ { -20, -4, ST_OAM_H_RECTANGLE, 1, 5, 1 },
+ { 12, -4, ST_OAM_SQUARE, 0, 9, 1 },
+ { -20, 4, ST_OAM_H_RECTANGLE, 1, 10, 1 },
+ { 12, 4, ST_OAM_SQUARE, 0, 14, 1 }
+};
+
+const struct Subsprite gSubspriteTable_83CE540[] = {
+ { -8, -12, ST_OAM_H_RECTANGLE, 0, 0, 3 },
+ { -8, -4, ST_OAM_H_RECTANGLE, 0, 2, 3 },
+ { -8, 4, ST_OAM_H_RECTANGLE, 0, 4, 3 }
+};
+
+const struct SubspriteTable gSubspriteTables_83CE558[] = {
+ { 8, gSubspriteTable_83CE4B0 }
+};
+
+const struct SubspriteTable gSubspriteTables_83CE560[] = {
+ { 2, gSubspriteTable_83CE500 },
+ { 2, gSubspriteTable_83CE500 },
+ { 2, gSubspriteTable_83CE500 }
+};
+
+const struct SubspriteTable gSubspriteTables_83CE578[] = {
+ { 6, gSubspriteTable_83CE510 }
+};
+
+const struct SubspriteTable gSubspriteTables_83CE580[] = {
+ { 3, gSubspriteTable_83CE540 }
+};
+
+const struct SpriteFrameImage gSpriteImageTable_83CE588[] = {
+ { gSpriteImage_83CE094, 0xc0 },
+ { gSpriteImage_83CE154, 0xc0 }
+};
+
+const union AnimCmd gSpriteAnim_83CE598[] = {
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd gSpriteAnim_83CE5A0[] = {
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_83CE5AC[] = {
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(1, 2),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const gSpriteAnimTable_83CE5B8[] = {
+ gSpriteAnim_83CE598
+};
+
+const union AnimCmd *const gSpriteAnimTable_83CE5BC[] = {
+ gSpriteAnim_83CE598,
+ gSpriteAnim_83CE5A0
+};
+
+const union AnimCmd *const gSpriteAnimTable_83CE5C4[] = {
+ gSpriteAnim_83CE5AC
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE5C8 = {
+ 2, 4, &gOamData_83CE498, gSpriteAnimTable_83CE5B8, NULL, gDummySpriteAffineAnimTable, sub_80B6B34
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE5E0 = {
+ 3, 1, &gOamData_83CE4A8, gSpriteAnimTable_83CE5B8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE5F8 = {
+ 4, 4, &gOamData_83CE498, gSpriteAnimTable_83CE5B8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE610 = {
+ 0, 6, &gOamData_83CE498, gSpriteAnimTable_83CE5B8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE628 = {
+ 1, 6, &gOamData_83CE498, gSpriteAnimTable_83CE5B8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE640 = {
+ 7, 5, &gOamData_83CE4A0, gSpriteAnimTable_83CE5BC, NULL, gDummySpriteAffineAnimTable, sub_80B6998
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE658 = {
+ 10, 3, &gOamData_83CE498, gSpriteAnimTable_83CE5B8, NULL, gDummySpriteAffineAnimTable, sub_80B6D9C
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE670 = {
+ 11, 3, &gOamData_83CE498, gSpriteAnimTable_83CE5B8, NULL, gDummySpriteAffineAnimTable, sub_80B6DE8
+};
+
+const struct SpriteTemplate gSpriteTemplate_83CE688 = {
+ 0xFFFF, 0, &gOamData_83CE498, gSpriteAnimTable_83CE5C4, gSpriteImageTable_83CE588, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+const struct SpriteSheet gUnknown_083CE6A0[] = {
+ { gNamingScreenBackButtonTiles, 0x1E0, 0 },
+ { gNamingScreenOKButtonTiles, 0x1E0, 1 },
+ { gNamingScreenChangeKeyboardBoxTiles, 0x280, 2 },
+ { gNamingScreenChangeKeyboardButtonTiles, 0x100, 3 },
+ { gNamingScreenLowerTextTiles, 0x60, 4 },
+ { gNamingScreenUpperTextTiles, 0x60, 5 },
+ { gNamingScreenOthersTextTiles, 0x60, 6 },
+ { gNamingScreenCursorTiles, 0x80, 7 },
+ { gNamingScreenActiveCursorSmallTiles, 0x80, 8 },
+ { gNamingScreenActiveCursorBigTiles, 0x80, 9 },
+ { gNamingScreenRightPointingTriangleTiles, 0x20, 10 },
+ { gNamingScreenUnderscoreTiles, 0x20, 11 },
+ {}
+};
+
+const struct SpritePalette gUnknown_083CE708[] = {
+ {gNamingScreenPalettes[0], 0},
+ {gNamingScreenPalettes[1], 1},
+ {gNamingScreenPalettes[2], 2},
+ {gNamingScreenPalettes[3], 3},
+ {gNamingScreenPalettes[4], 4},
+ {gNamingScreenPalettes[5], 5},
+ {gNamingScreenPalettes[4], 6},
+ {}
+};
+
+const u16 gUnknown_083CE748[] = INCBIN_U16("graphics/naming_screen/lower_keyboard_map.bin");
+
+const u16 gUnknown_083CEBF8[] = INCBIN_U16("graphics/naming_screen/upper_keyboard_map.bin");
+
+const u16 gUnknown_083CF0A8[] = INCBIN_U16("graphics/naming_screen/others_keyboard_map.bin");
+