diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/daycare.c | 2 | ||||
-rw-r--r-- | src/field_specials.c | 4 | ||||
-rw-r--r-- | src/naming_screen.c | 222 | ||||
-rw-r--r-- | src/oak_speech.c | 4 |
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(); |