diff options
Diffstat (limited to 'src/egg_hatch.c')
-rw-r--r-- | src/egg_hatch.c | 179 |
1 files changed, 83 insertions, 96 deletions
diff --git a/src/egg_hatch.c b/src/egg_hatch.c index a3f7c2ab0..67876f33b 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -2,7 +2,7 @@ #include "pokemon.h" #include "egg_hatch.h" #include "pokedex.h" -#include "items.h" +#include "constants/items.h" #include "script.h" #include "decompress.h" #include "task.h" @@ -10,21 +10,22 @@ #include "main.h" #include "event_data.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "text.h" #include "text_window.h" #include "string_util.h" #include "menu.h" #include "trig.h" -#include "rng.h" +#include "random.h" #include "malloc.h" #include "dma3.h" #include "gpu_regs.h" #include "bg.h" #include "m4a.h" #include "window.h" -#include "abilities.h" +#include "constants/abilities.h" #include "daycare.h" +#include "overworld.h" #include "battle.h" // to get rid of later struct EggHatchData @@ -41,41 +42,27 @@ struct EggHatchData u8 unused_9; u8 unused_A; u16 species; - struct TextColor textColor; + u8 textColor[3]; }; -extern struct SpriteTemplate gUnknown_0202499C; -extern void (*gFieldCallback)(void); - extern const struct CompressedSpriteSheet gMonFrontPicTable[]; -extern const u8 gUnknown_08C00000[]; -extern const u8 gUnknown_08C00524[]; -extern const u8 gUnknown_08C004E0[]; -extern const u16 gUnknown_08DD7300[]; // palette, gameboy advance -extern const u32 gUnknown_08DD7360[]; // tileset gameboy advance +extern const u8 gBattleTextboxTiles[]; +extern const u8 gBattleTextboxTilemap[]; +extern const u8 gBattleTextboxPalette[]; +extern const u16 gTradeGba2_Pal[]; // palette, gameboy advance +extern const u32 gTradeGba_Gfx[]; // tileset gameboy advance extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle extern const u8 gText_HatchedFromEgg[]; extern const u8 gText_NickHatchPrompt[]; -extern u8* GetMonNick(struct Pokemon* mon, u8* dst); -extern u8* GetBoxMonNick(struct BoxPokemon* boxMon, u8* dst); extern u8 sav1_map_get_name(void); -extern s8 sub_8198C58(void); extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8); -extern void sub_806A068(u16, u8); -extern void fade_screen(u8, u8); +extern void FadeScreen(u8, u8); extern void overworld_free_bg_tilemaps(void); extern void sub_80AF168(void); -extern void AllocateMonSpritesGfx(void); -extern void FreeMonSpritesGfx(void); -extern void remove_some_task(void); -extern void reset_temp_tile_data_buffers(void); -extern void c2_exit_to_overworld_2_switch(void); +extern void ScanlineEffect_Stop(void); extern void play_some_sound(void); -extern void copy_decompressed_tile_data_to_vram_autofree(u8 bg_id, const void* src, u16 size, u16 offset, u8 mode); -extern void CreateYesNoMenu(const struct WindowTemplate*, u16, u8, u8); extern void DoNamingScreen(u8, const u8*, u16, u8, u32, MainCallback); -extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor* colors, s8 speed, u8 *str); extern u16 sub_80D22D0(void); extern u8 CountPartyAliveNonEggMonsExcept(u8); @@ -94,7 +81,7 @@ static void CreateRandomEggShardSprite(void); static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); // IWRAM bss -static IWRAM_DATA struct EggHatchData* sEggHatchData; +static IWRAM_DATA struct EggHatchData *sEggHatchData; // rom data static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/palettes/egg_palette.gbapal"); @@ -401,13 +388,13 @@ static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId) struct DaycareMon *daycareMon = &daycare->mons[daycareId]; GetBoxMonNick(&daycareMon->mon, nick); - if (daycareMon->misc.mail.itemId != 0 - && (StringCompareWithoutExtCtrlCodes(nick, daycareMon->misc.monName) != 0 - || StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->misc.OT_name) != 0)) + if (daycareMon->mail.message.itemId != 0 + && (StringCompareWithoutExtCtrlCodes(nick, daycareMon->mail.monName) != 0 + || StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0)) { StringCopy(gStringVar1, nick); - TVShowConvertInternationalString(gStringVar2, daycareMon->misc.OT_name, daycareMon->misc.gameLanguage); - TVShowConvertInternationalString(gStringVar3, daycareMon->misc.monName, daycareMon->misc.monLanguage); + TVShowConvertInternationalString(gStringVar2, daycareMon->mail.OT_name, daycareMon->mail.gameLanguage); + TVShowConvertInternationalString(gStringVar3, daycareMon->mail.monName, daycareMon->mail.monLanguage); return TRUE; } return FALSE; @@ -443,13 +430,13 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid); - LoadCompressedObjectPalette(sub_806E794(mon)); + LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); *speciesLoc = species; } break; case 1: - sub_806A068(sub_806E794(mon)->tag, r5); - spriteID = CreateSprite(&gUnknown_0202499C, 120, 75, 6); + SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r5); + spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 75, 6); gSprites[spriteID].invisible = 1; gSprites[spriteID].callback = SpriteCallbackDummy; break; @@ -468,7 +455,7 @@ void EggHatch(void) { ScriptContext2_Enable(); CreateTask(Task_EggHatch, 10); - fade_screen(1, 0); + FadeScreen(1, 0); } static void Task_EggHatch(u8 taskID) @@ -515,7 +502,7 @@ static void CB2_EggHatch_0(void) FreeAllSpritePalettes(); ResetSpriteData(); ResetTasks(); - remove_some_task(); + ScanlineEffect_Stop(); m4aSoundVSyncOn(); gMain.state++; break; @@ -525,9 +512,9 @@ static void CB2_EggHatch_0(void) gMain.state++; break; case 2: - copy_decompressed_tile_data_to_vram_autofree(0, gUnknown_08C00000, 0, 0, 0); - CopyToBgTilemapBuffer(0, gUnknown_08C00524, 0, 0); - LoadCompressedPalette(gUnknown_08C004E0, 0, 0x20); + copy_decompressed_tile_data_to_vram_autofree(0, gBattleTextboxTiles, 0, 0, 0); + CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); gMain.state++; break; case 3: @@ -551,8 +538,8 @@ static void CB2_EggHatch_0(void) break; case 7: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - LoadPalette(gUnknown_08DD7300, 0x10, 0xA0); - LoadBgTiles(1, gUnknown_08DD7360, 0x1420, 0); + LoadPalette(gTradeGba2_Pal, 0x10, 0xA0); + LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0); CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0); CopyBgTilemapBufferToVram(1); gMain.state++; @@ -574,7 +561,7 @@ static void EggHatchSetMonNickname(void) SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); FreeMonSpritesGfx(); Free(sEggHatchData); - SetMainCallback2(c2_exit_to_overworld_2_switch); + SetMainCallback2(CB2_ReturnToField); } static void Task_EggHatchPlayBGM(u8 taskID) @@ -585,10 +572,10 @@ static void Task_EggHatchPlayBGM(u8 taskID) play_some_sound(); } if (gTasks[taskID].data[0] == 1) - PlayBGM(376); + PlayBGM(MUS_ME_SHINKA); if (gTasks[taskID].data[0] > 60) { - PlayBGM(377); + PlayBGM(MUS_SHINKA); DestroyTask(taskID); // UB: task is destroyed, yet the value is incremented } @@ -604,7 +591,7 @@ static void CB2_EggHatch_1(void) switch (sEggHatchData->CB2_state) { case 0: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5); ShowBg(0); ShowBg(1); @@ -644,7 +631,7 @@ static void CB2_EggHatch_1(void) GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg); EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF); - PlayFanfare(371); + PlayFanfare(MUS_FANFA5); sEggHatchData->CB2_state++; PutWindowTilemap(sEggHatchData->windowId); CopyWindowToVram(sEggHatchData->windowId, 3); @@ -666,13 +653,13 @@ static void CB2_EggHatch_1(void) case 9: if (!IsTextPrinterActive(sEggHatchData->windowId)) { - sub_809882C(sEggHatchData->windowId, 0x140, 0xE0); + LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0); CreateYesNoMenu(&sYesNoWinTemplate, 0x140, 0xE, 0); sEggHatchData->CB2_state++; } break; case 10: - switch (sub_8198C58()) + switch (ProcessMenuInputNoWrap_()) { case 0: GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); @@ -687,7 +674,7 @@ static void CB2_EggHatch_1(void) } break; case 11: - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); sEggHatchData->CB2_state++; break; case 12: @@ -698,7 +685,7 @@ static void CB2_EggHatch_1(void) UnsetBgTilemapBuffer(0); UnsetBgTilemapBuffer(1); Free(sEggHatchData); - SetMainCallback2(c2_exit_to_overworld_2_switch); + SetMainCallback2(CB2_ReturnToField); } break; } @@ -712,16 +699,16 @@ static void CB2_EggHatch_1(void) static void SpriteCB_Egg_0(struct Sprite* sprite) { - if (++sprite->data0 > 20) + if (++sprite->data[0] > 20) { sprite->callback = SpriteCB_Egg_1; - sprite->data0 = 0; + sprite->data[0] = 0; } else { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 1); - if (sprite->data0 == 15) + sprite->data[1] = (sprite->data[1] + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 1); + if (sprite->data[0] == 15) { PlaySE(SE_BOWA); StartSpriteAnim(sprite, 1); @@ -732,19 +719,19 @@ static void SpriteCB_Egg_0(struct Sprite* sprite) static void SpriteCB_Egg_1(struct Sprite* sprite) { - if (++sprite->data2 > 30) + if (++sprite->data[2] > 30) { - if (++sprite->data0 > 20) + if (++sprite->data[0] > 20) { sprite->callback = SpriteCB_Egg_2; - sprite->data0 = 0; - sprite->data2 = 0; + sprite->data[0] = 0; + sprite->data[2] = 0; } else { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 2); - if (sprite->data0 == 15) + sprite->data[1] = (sprite->data[1] + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 2); + if (sprite->data[0] == 15) { PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); @@ -755,30 +742,30 @@ static void SpriteCB_Egg_1(struct Sprite* sprite) static void SpriteCB_Egg_2(struct Sprite* sprite) { - if (++sprite->data2 > 30) + if (++sprite->data[2] > 30) { - if (++sprite->data0 > 38) + if (++sprite->data[0] > 38) { u16 species; sprite->callback = SpriteCB_Egg_3; - sprite->data0 = 0; + sprite->data[0] = 0; species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; gSprites[sEggHatchData->pokeSpriteID].pos2.y = 0; } else { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 2); - if (sprite->data0 == 15) + sprite->data[1] = (sprite->data[1] + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 2); + if (sprite->data[0] == 15) { PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); CreateRandomEggShardSprite(); CreateRandomEggShardSprite(); } - if (sprite->data0 == 30) + if (sprite->data[0] == 30) PlaySE(SE_BOWA); } } @@ -786,60 +773,60 @@ static void SpriteCB_Egg_2(struct Sprite* sprite) static void SpriteCB_Egg_3(struct Sprite* sprite) { - if (++sprite->data0 > 50) + if (++sprite->data[0] > 50) { sprite->callback = SpriteCB_Egg_4; - sprite->data0 = 0; + sprite->data[0] = 0; } } static void SpriteCB_Egg_4(struct Sprite* sprite) { s16 i; - if (sprite->data0 == 0) - BeginNormalPaletteFade(-1, -1, 0, 0x10, 0xFFFF); - if (sprite->data0 < 4u) + if (sprite->data[0] == 0) + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, 0xFFFF); + if (sprite->data[0] < 4u) { for (i = 0; i <= 3; i++) CreateRandomEggShardSprite(); } - sprite->data0++; + sprite->data[0]++; if (!gPaletteFade.active) { PlaySE(SE_TAMAGO); sprite->invisible = 1; sprite->callback = SpriteCB_Egg_5; - sprite->data0 = 0; + sprite->data[0] = 0; } } static void SpriteCB_Egg_5(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { gSprites[sEggHatchData->pokeSpriteID].invisible = 0; StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1); } - if (sprite->data0 == 8) - BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF); - if (sprite->data0 <= 9) + if (sprite->data[0] == 8) + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x10, 0, 0xFFFF); + if (sprite->data[0] <= 9) gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1; - if (sprite->data0 > 40) + if (sprite->data[0] > 40) sprite->callback = SpriteCallbackDummy; - sprite->data0++; + sprite->data[0]++; } static void SpriteCB_EggShard(struct Sprite* sprite) { - sprite->data4 += sprite->data1; - sprite->data5 += sprite->data2; + sprite->data[4] += sprite->data[1]; + sprite->data[5] += sprite->data[2]; - sprite->pos2.x = sprite->data4 / 256; - sprite->pos2.y = sprite->data5 / 256; + sprite->pos2.x = sprite->data[4] / 256; + sprite->pos2.y = sprite->data[5] / 256; - sprite->data2 += sprite->data3; + sprite->data[2] += sprite->data[3]; - if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data2 > 0) + if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0) DestroySprite(sprite); } @@ -857,19 +844,19 @@ static void CreateRandomEggShardSprite(void) static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) { u8 spriteID = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4); - gSprites[spriteID].data1 = data1; - gSprites[spriteID].data2 = data2; - gSprites[spriteID].data3 = data3; + gSprites[spriteID].data[1] = data1; + gSprites[spriteID].data[2] = data2; + gSprites[spriteID].data[3] = data3; StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex); } static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed) { FillWindowPixelBuffer(windowId, 0xFF); - sEggHatchData->textColor.fgColor = 0; - sEggHatchData->textColor.bgColor = 5; - sEggHatchData->textColor.shadowColor = 6; - AddTextPrinterParametrized2(windowId, 1, x, y, 0, 0, &sEggHatchData->textColor, speed, string); + sEggHatchData->textColor[0] = 0; + sEggHatchData->textColor[1] = 5; + sEggHatchData->textColor[2] = 6; + AddTextPrinterParameterized2(windowId, 1, x, y, 0, 0, sEggHatchData->textColor, speed, string); } u8 GetEggStepsToSubtract(void) |