summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/daycare.c2
-rw-r--r--src/field_specials.c4
-rw-r--r--src/naming_screen.c222
-rw-r--r--src/oak_speech.c4
4 files changed, 212 insertions, 20 deletions
diff --git a/src/daycare.c b/src/daycare.c
index 36fb34c79..4d1b5aa7b 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1967,7 +1967,7 @@ static void CB2_EggHatch_1(void)
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
- DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
+ DoNamingScreen(NAMING_SCREEN_NAME_RATER, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
break;
case 1:
case -1:
diff --git a/src/field_specials.c b/src/field_specials.c
index e8def2c39..25d2eceb7 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -1637,7 +1637,7 @@ void ChangeBoxPokemonNickname(void)
species = GetBoxMonData(pokemon, MON_DATA_SPECIES, NULL);
gender = GetBoxMonGender(pokemon);
personality = GetBoxMonData(pokemon, MON_DATA_PERSONALITY, NULL);
- DoNamingScreen(3, gStringVar2, species, gender, personality, ChangeBoxPokemonNickname_CB);
+ DoNamingScreen(NAMING_SCREEN_NAME_RATER, gStringVar2, species, gender, personality, ChangeBoxPokemonNickname_CB);
}
static void ChangeBoxPokemonNickname_CB(void)
@@ -1657,7 +1657,7 @@ void ChangePokemonNickname(void)
species = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL);
gender = GetMonGender(&gPlayerParty[gSpecialVar_0x8004]);
personality = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL);
- DoNamingScreen(3, gStringVar2, species, gender, personality, ChangePokemonNickname_CB);
+ DoNamingScreen(NAMING_SCREEN_NAME_RATER, gStringVar2, species, gender, personality, ChangePokemonNickname_CB);
}
static void ChangePokemonNickname_CB(void)
diff --git a/src/naming_screen.c b/src/naming_screen.c
index a5a6b5a5b..6f506f621 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -1,21 +1,23 @@
#include "global.h"
#include "gflib.h"
-#include "battle_message.h"
#include "graphics.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "event_scripts.h"
#include "field_effect.h"
+#include "field_player_avatar.h"
#include "field_specials.h"
#include "help_system.h"
#include "naming_screen.h"
#include "new_menu_helpers.h"
+#include "pokemon_icon.h"
#include "pokemon_storage_system.h"
-#include "strings.h"
#include "task.h"
#include "trig.h"
#include "constants/help_system.h"
#include "constants/flags.h"
#include "constants/songs.h"
+#include "constants/event_objects.h"
enum
{
@@ -137,13 +139,19 @@ bool8 IsCursorAnimFinished();
u8 GetCurrentPageColumnCount(void);
void CreatePageSwitcherSprites(void);
void sub_809EC20(void);
-bool8 sub_809EC7C(struct Sprite * sprite);
-bool8 sub_809ECD0(struct Sprite * sprite);
-bool8 sub_809ECD4(struct Sprite * sprite);
-bool8 sub_809ED48(struct Sprite * sprite);
+bool8 PageSwapSpritesCB_Init(struct Sprite * sprite);
+bool8 PageSwapSpritesCB_Idle(struct Sprite * sprite);
+bool8 PageSwapSpritesCB_SwapHide(struct Sprite * sprite);
+bool8 PageSwapSpritesCB_SwapShow(struct Sprite * sprite);
+void sub_809ED88(u8 a0, struct Sprite * spr1, struct Sprite * spr2);
void CreateBackOkSprites(void);
void CreateUnderscoreSprites(void);
void CreateInputTargetIcon(void);
+void NamingScreen_NoCreateIcon(void);
+void NamingScreen_CreatePlayerIcon(void);
+void NamingScreen_CreatePCIcon(void);
+void NamingScreen_CreateMonIcon(void);
+void NamingScreen_CreateRivalIcon(void);
void sub_809FA60(void);
bool8 NamingScreen_InitDisplayMode(void);
void NamingScreen_TurnOffScreen(void);
@@ -164,6 +172,8 @@ void sub_809FC34(void);
extern const struct SubspriteTable gUnknown_83E2504[];
extern const struct SubspriteTable gUnknown_83E250C[];
+extern const struct SubspriteTable gUnknown_83E2524[];
+extern const struct SubspriteTable gUnknown_83E252C[];
extern const struct SpriteTemplate gUnknown_83E2574;
extern const struct SpriteTemplate gUnknown_83E258C;
@@ -171,8 +181,8 @@ extern const struct SpriteTemplate gUnknown_83E25A4;
extern const struct SpriteTemplate gUnknown_83E25BC;
extern const struct SpriteTemplate gUnknown_83E25D4;
extern const struct SpriteTemplate gUnknown_83E25EC;
-extern const struct SpriteTemplate gUnknown_83E2604;
-extern const struct SpriteTemplate gUnknown_83E261C;
+extern const struct SpriteTemplate sSpriteTemplate_InputArrow;
+extern const struct SpriteTemplate sSpriteTemplate_Underscore;
extern const struct SpriteTemplate gUnknown_83E2634;
const u16 gUnknown_83E1800[] = INCBIN_U16("graphics/interface/naming_screen_83E1800.4bpp");
@@ -1115,15 +1125,197 @@ void sub_809EC20(void)
sprite->data[1] = gNamingScreenData->currentPage;
}
-bool8 (*const gUnknown_83E2378[])(struct Sprite * sprite) = {
- sub_809EC7C,
- sub_809ECD0,
- sub_809ECD4,
- sub_809ED48
+bool8 (*const sPageSwapSpritesCBs[])(struct Sprite * sprite) = {
+ PageSwapSpritesCB_Init,
+ PageSwapSpritesCB_Idle,
+ PageSwapSpritesCB_SwapHide,
+ PageSwapSpritesCB_SwapShow
};
-void sub_809EC54(struct Sprite *sprite)
+void SpriteCB_PageSwap(struct Sprite *sprite)
{
- while (gUnknown_83E2378[sprite->data[0]](sprite))
+ while (sPageSwapSpritesCBs[sprite->data[0]](sprite))
;
}
+
+bool8 PageSwapSpritesCB_Init(struct Sprite *sprite)
+{
+ struct Sprite *sprite1 = &gSprites[sprite->data[6]];
+ struct Sprite *sprite2 = &gSprites[sprite->data[7]];
+
+ sub_809ED88(sub_809DE20(gNamingScreenData->currentPage), sprite1, sprite2);
+ sprite->data[0]++;
+ return FALSE;
+}
+
+bool8 PageSwapSpritesCB_Idle(struct Sprite *sprite)
+{
+ struct Sprite *sprite1 = &gSprites[sprite->data[6]];
+ struct Sprite *sprite2 = &gSprites[sprite->data[7]];
+
+ return FALSE;
+}
+
+bool8 PageSwapSpritesCB_SwapHide(struct Sprite *sprite)
+{
+ struct Sprite *sprite1 = &gSprites[sprite->data[6]];
+ struct Sprite *sprite2 = &gSprites[sprite->data[7]];
+ u8 page;
+
+ sprite1->pos2.y++;
+ if (sprite1->pos2.y > 7)
+ {
+ sprite->data[0]++;
+ sprite1->pos2.y = -4;
+ sprite1->invisible = TRUE;
+ page = sprite->data[1];
+ sub_809ED88(sub_809DE20((page + 1) % 3), sprite1, sprite2);
+ }
+ return FALSE;
+}
+
+bool8 PageSwapSpritesCB_SwapShow(struct Sprite *sprite)
+{
+ struct Sprite *sprite1 = &gSprites[sprite->data[6]];
+ struct Sprite *sprite2 = &gSprites[sprite->data[7]];
+
+ sprite1->invisible = FALSE;
+ sprite1->pos2.y++;
+ if (sprite1->pos2.y >= 0)
+ {
+ sprite1->pos2.y = 0;
+ sprite->data[0] = 1;
+ }
+ return FALSE;
+}
+
+const u16 gUnknown_83E2388[] = {1, 3, 2};
+const u16 gUnknown_83E238E[] = {4, 6, 5};
+
+void sub_809ED88(u8 page, struct Sprite * sprite1, struct Sprite * sprite2)
+{
+ sprite2->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_83E2388[page]);
+ sprite1->sheetTileStart = GetSpriteTileStartByTag(gUnknown_83E238E[page]);
+ sprite1->subspriteTableNum = page;
+}
+
+//
+
+void CreateBackOkSprites(void)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gUnknown_83E25BC, 0xCC, 0x74, 0);
+ SetSubspriteTables(&gSprites[spriteId], gUnknown_83E2524);
+ gSprites[spriteId].invisible = TRUE;
+
+ spriteId = CreateSprite(&gUnknown_83E25D4, 0xCC, 0x8C, 0);
+ SetSubspriteTables(&gSprites[spriteId], gUnknown_83E2524);
+ gSprites[spriteId].invisible = TRUE;
+}
+
+void CreateUnderscoreSprites(void)
+{
+ u8 spriteId;
+ s16 xPos;
+ u8 i;
+
+ xPos = gNamingScreenData->inputCharBaseXPos - 5;
+ spriteId = CreateSprite(&sSpriteTemplate_InputArrow, xPos, 0x38, 0);
+ gSprites[spriteId].oam.priority = 3;
+ gSprites[spriteId].invisible = TRUE;
+ xPos = gNamingScreenData->inputCharBaseXPos;
+ for (i = 0; i < gNamingScreenData->template->maxChars; i++, xPos += 8)
+ {
+ spriteId = CreateSprite(&sSpriteTemplate_Underscore, xPos + 3, 0x3C, 0);
+ gSprites[spriteId].oam.priority = 3;
+ gSprites[spriteId].data[0] = i;
+ gSprites[spriteId].invisible = TRUE;
+ }
+}
+
+//--------------------------------------------------
+// Icon creation (the thing you're naming or giving input to)
+//--------------------------------------------------
+
+void (*const sIconFunctions[])(void) = {
+ NamingScreen_NoCreateIcon,
+ NamingScreen_CreatePlayerIcon,
+ NamingScreen_CreatePCIcon,
+ NamingScreen_CreateMonIcon,
+ NamingScreen_CreateRivalIcon
+};
+
+void CreateInputTargetIcon(void)
+{
+ sIconFunctions[gNamingScreenData->template->iconFunction]();
+}
+
+void NamingScreen_NoCreateIcon(void)
+{
+
+}
+
+void NamingScreen_CreatePlayerIcon(void)
+{
+ u8 rivalGfxId;
+ u8 spriteId;
+
+ rivalGfxId = sub_805C7C8(0, gNamingScreenData->monSpecies);
+ spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0);
+ gSprites[spriteId].oam.priority = 3;
+ StartSpriteAnim(&gSprites[spriteId], 4);
+}
+
+void NamingScreen_CreatePCIcon(void)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gUnknown_83E2634, 0x38, 0x29, 0);
+ SetSubspriteTables(&gSprites[spriteId], gUnknown_83E252C);
+ gSprites[spriteId].oam.priority = 3;
+}
+
+void NamingScreen_CreateMonIcon(void)
+{
+ u8 spriteId;
+
+ LoadMonIconPalettes();
+ spriteId = CreateMonIcon(gNamingScreenData->monSpecies, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->monPersonality, 1);
+ gSprites[spriteId].oam.priority = 3;
+}
+
+const union AnimCmd gUnknown_83E23A8[] = {
+ ANIMCMD_FRAME( 0, 10),
+ ANIMCMD_FRAME(24, 10),
+ ANIMCMD_FRAME( 0, 10),
+ ANIMCMD_FRAME(32, 10),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd *const gUnknown_83E23BC[] = {
+ gUnknown_83E23A8
+};
+
+void NamingScreen_CreateRivalIcon(void)
+{
+ const struct SpriteSheet sheet = {
+ gUnknown_83E1980, 0x900, 255
+ };
+ const struct SpritePalette palette = {
+ gUnknown_8E98004, 255
+ };
+ struct SpriteTemplate template;
+ const struct SubspriteTable * tables_p;
+ u8 spriteId;
+
+ MakeObjectTemplateFromObjectEventGraphicsInfo(OBJ_EVENT_GFX_RED_NORMAL, SpriteCallbackDummy, &template, &tables_p);
+
+ template.tileTag = sheet.tag;
+ template.paletteTag = palette.tag;
+ template.anims = gUnknown_83E23BC;
+ LoadSpriteSheet(&sheet);
+ LoadSpritePalette(&palette);
+ spriteId = CreateSprite(&template, 0x38, 0x25, 0);
+ gSprites[spriteId].oam.priority = 3;
+}
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 871a73783..11281da30 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -1223,13 +1223,13 @@ static void Task_OakSpeech25(u8 taskId)
GetDefaultName(sOakSpeechResources->unk_0010, 0);
if (sOakSpeechResources->unk_0010 == 0)
{
- DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnFromNamingScreen);
+ DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnFromNamingScreen);
}
else
{
ClearStdWindowAndFrameToTransparent(gTasks[taskId].data[13], 1);
RemoveWindow(gTasks[taskId].data[13]);
- DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen);
+ DoNamingScreen(NAMING_SCREEN_RIVAL, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen);
}
DestroyLinkedPikaOrGrassPlatformSprites(taskId, 1);
FreeAllWindowBuffers();