diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-01 19:48:31 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-01 19:52:40 -0400 |
commit | 0685dd4920c64eae6bcfbc9f201854b4da91bfab (patch) | |
tree | f759feaf819167d436ab4fde480eca35ba591b04 /src/egg_hatch.c | |
parent | d0fbed6ad50c34593002c2b540c4e3e7f4c5cd16 (diff) | |
parent | 50dc4f429d4aa68e0365adc71d17e43a0dd7b843 (diff) |
Merge branch 'master' into trade
Diffstat (limited to 'src/egg_hatch.c')
-rw-r--r-- | src/egg_hatch.c | 862 |
1 files changed, 0 insertions, 862 deletions
diff --git a/src/egg_hatch.c b/src/egg_hatch.c deleted file mode 100644 index e85ca01af..000000000 --- a/src/egg_hatch.c +++ /dev/null @@ -1,862 +0,0 @@ -#include "global.h" -#include "pokemon.h" -#include "items.h" -#include "decompress.h" -#include "data2.h" -#include "task.h" -#include "script.h" -#include "palette.h" -#include "overworld.h" -#include "main.h" -#include "event_data.h" -#include "sound.h" -#include "songs.h" -#include "text.h" -#include "text_window.h" -#include "string_util.h" -#include "strings2.h" -#include "menu.h" -#include "naming_screen.h" -#include "trig.h" -#include "rng.h" -#include "trade.h" - -extern u8 ewram[]; -extern struct SpriteTemplate gUnknown_02024E8C; - -struct EggHatchData -{ - u8 eggSpriteID; - u8 pokeSpriteID; - u8 CB2_state; - u8 CB2_PalCounter; - u8 eggPartyID; - struct Window window; - u8 tileDataStartOffset; - u8 unused_39; - u8 eggShardVelocityID; -}; - -struct EggHatchData* gEggHatchData; - -extern const u32 gUnknown_08D00000[]; -extern const u32 gUnknown_08D00524[]; -extern const u16 gUnknown_08D004E0[]; //palette -extern const struct SpriteSheet sUnknown_0820A3B0; -extern const struct SpriteSheet sUnknown_0820A3B8; -extern const struct SpritePalette sUnknown_0820A3C0; - -bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); -u8* GetMonNick(struct Pokemon* mon, u8* dst); -u8 sav1_map_get_name(void); -const struct CompressedSpritePalette* sub_8040990(struct Pokemon* mon); //gets pokemon palette address -void sub_8080990(void); - -static void Task_EggHatch(u8 taskID); -static void CB2_EggHatch_0(void); -static void CB2_EggHatch_1(void); -static void SpriteCB_Egg_0(struct Sprite* sprite); -static void SpriteCB_Egg_1(struct Sprite* sprite); -static void SpriteCB_Egg_2(struct Sprite* sprite); -static void SpriteCB_Egg_3(struct Sprite* sprite); -static void SpriteCB_Egg_4(struct Sprite* sprite); -static void SpriteCB_Egg_5(struct Sprite* sprite); -static void SpriteCB_EggShard(struct Sprite* sprite); -static void EggHatchPrintMessage2(u8* src); -static void EggHatchPrintMessage1(u8* src); -static bool8 EggHatchUpdateWindowText(void); -static void CreateRandomEggShardSprite(void); -static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); - -// graphics - -static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/palette.gbapal"); -static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp"); -static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp"); - -static const struct OamData sOamData_820A378 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSpriteAnim_820A380[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_820A388[] = -{ - ANIMCMD_FRAME(16, 5), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_820A390[] = -{ - ANIMCMD_FRAME(32, 5), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_820A398[] = -{ - ANIMCMD_FRAME(48, 5), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_820A3A0[] = -{ - sSpriteAnim_820A380, - sSpriteAnim_820A388, - sSpriteAnim_820A390, - sSpriteAnim_820A398, -}; - -static const struct SpriteSheet sUnknown_0820A3B0 = -{ - .data = sEggHatchTiles, - .size = 2048, - .tag = 12345, -}; - -static const struct SpriteSheet sUnknown_0820A3B8 = -{ - .data = sEggShardTiles, - .size = 128, - .tag = 23456, -}; - -static const struct SpritePalette sUnknown_0820A3C0 = -{ - .data = sEggPalette, - .tag = 54321 -}; - -static const struct SpriteTemplate sSpriteTemplate_820A3C8 = -{ - .tileTag = 12345, - .paletteTag = 54321, - .oam = &sOamData_820A378, - .anims = sSpriteAnimTable_820A3A0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - - -static const struct OamData sOamData_820A3E0 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSpriteAnim_820A3E8[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_820A3F0[] = -{ - ANIMCMD_FRAME(1, 5), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_820A3F8[] = -{ - ANIMCMD_FRAME(2, 5), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_820A400[] = -{ - ANIMCMD_FRAME(3, 5), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_820A408[] = -{ - sSpriteAnim_820A3E8, - sSpriteAnim_820A3F0, - sSpriteAnim_820A3F8, - sSpriteAnim_820A400, -}; - -static const struct SpriteTemplate sSpriteTemplate_820A418 = -{ - .tileTag = 23456, - .paletteTag = 54321, - .oam = &sOamData_820A3E0, - .anims = sSpriteAnimTable_820A408, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_EggShard -}; - -// actual code - -static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) -{ - u16 species; - u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings; - u16 moves[4]; - u32 ivs[6]; - - - species = GetMonData(egg, MON_DATA_SPECIES); - - for (i = 0; i < 4; i++) - { - moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); - } - - personality = GetMonData(egg, MON_DATA_PERSONALITY); - - for (i = 0; i < 6; i++) - { - ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); - } - - gameMet = GetMonData(egg, MON_DATA_MET_GAME); - markings = GetMonData(egg, MON_DATA_MARKINGS); - pokerus = GetMonData(egg, MON_DATA_POKERUS); - - CreateMon(temp, species, 5, 32, TRUE, personality, 0, 0); - - for (i = 0; i < 4; i++) - { - SetMonData(temp, MON_DATA_MOVE1 + i, (const u8 *) &moves[i]); - } - - for (i = 0; i < 6; i++) - { - SetMonData(temp, MON_DATA_HP_IV + i, (const u8 *) &ivs[i]); - } - - language = GAME_LANGUAGE; - SetMonData(temp, MON_DATA_LANGUAGE, &language); - SetMonData(temp, MON_DATA_MET_GAME, &gameMet); - SetMonData(temp, MON_DATA_MARKINGS, &markings); - - friendship = 120; - SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); - SetMonData(temp, MON_DATA_POKERUS, (const u8 *) &pokerus); - - *egg = *temp; -} - -static void AddHatchedMonToParty(u8 id) -{ - u8 isEgg; - u16 pokeNum; - u8 name[12]; - u16 ball; - u16 caughtLvl; - u8 mapNameID; - struct Pokemon* mon = &gPlayerParty[id]; - - CreatedHatchedMon(mon, &gEnemyParty[0]); - isEgg = 0; - SetMonData(mon, MON_DATA_IS_EGG, &isEgg); - - pokeNum = GetMonData(mon, MON_DATA_SPECIES); - GetSpeciesName(name, pokeNum); - SetMonData(mon, MON_DATA_NICKNAME, name); - - pokeNum = SpeciesToNationalPokedexNum(pokeNum); - GetNationalPokedexFlag(pokeNum, 2); - GetNationalPokedexFlag(pokeNum, 3); - - GetMonNick(mon, gStringVar1); - - ball = ITEM_POKE_BALL; - SetMonData(mon, MON_DATA_POKEBALL, (const u8*) &ball); - - caughtLvl = 0; - SetMonData(mon, MON_DATA_MET_LEVEL, (const u8*) &caughtLvl); - - mapNameID = sav1_map_get_name(); - SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); - - MonRestorePP(mon); - CalculateMonStats(mon); -} - -void ScriptHatchMon(void) -{ - AddHatchedMonToParty(gSpecialVar_0x8004); -} - -#ifdef NONMATCHING -static bool8 sub_8042ABC(void* a, u8 b) -{ - -} - -#else -__attribute__((naked)) -static bool8 sub_8042ABC(void* a, u8 b) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x20\n\ - adds r5, r0, 0\n\ - lsls r4, r1, 24\n\ - lsrs r4, 24\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 4\n\ - adds r0, r5, r0\n\ - mov r1, sp\n\ - bl GetBoxMonNick\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r1, r0, 3\n\ - adds r0, r5, r1\n\ - adds r0, 0xC0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _08042B40\n\ - adds r0, r1, 0\n\ - adds r0, 0xA0\n\ - adds r5, r0\n\ - adds r6, r5, 0\n\ - adds r6, 0x2C\n\ - mov r0, sp\n\ - adds r1, r6, 0\n\ - bl StringCompareWithoutExtCtrlCodes\n\ - cmp r0, 0\n\ - bne _08042B08\n\ - ldr r0, _08042B30 @ =gSaveBlock2\n\ - adds r1, r5, 0\n\ - adds r1, 0x24\n\ - bl StringCompareWithoutExtCtrlCodes\n\ - cmp r0, 0\n\ - beq _08042B40\n\ -_08042B08:\n\ - ldr r0, _08042B34 @ =gStringVar1\n\ - mov r1, sp\n\ - bl StringCopy\n\ - ldr r4, _08042B38 @ =gStringVar2\n\ - adds r1, r5, 0\n\ - adds r1, 0x24\n\ - adds r0, r4, 0\n\ - bl StringCopy\n\ - ldr r0, _08042B3C @ =gStringVar3\n\ - adds r1, r6, 0\n\ - bl StringCopy\n\ - adds r0, r4, 0\n\ - bl SanitizeNameString\n\ - movs r0, 0x1\n\ - b _08042B42\n\ - .align 2, 0\n\ -_08042B30: .4byte gSaveBlock2\n\ -_08042B34: .4byte gStringVar1\n\ -_08042B38: .4byte gStringVar2\n\ -_08042B3C: .4byte gStringVar3\n\ -_08042B40:\n\ - movs r0, 0\n\ -_08042B42:\n\ - add sp, 0x20\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided"); -} - -#endif // NONMATCHING - -bool8 sub_8042B4C(void) -{ - return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004); -} - -static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) -{ - u8 r5 = 0; - u8 spriteID = 0; - struct Pokemon* mon = NULL; - - if (a0 == 0) - { - mon = &gPlayerParty[pokeID]; - r5 = 1; - } - if (a0 == 1) - { - mon = &gPlayerParty[pokeID]; - r5 = 3; - } - switch (switchID) - { - case 0: - { - u16 species = GetMonData(mon, MON_DATA_SPECIES); - u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,(u32)(&ewram[0]), gUnknown_081FAF4C[2 * a0 + 1], species, pid); - LoadCompressedObjectPalette(sub_8040990(mon)); - } - break; - case 1: - GetMonSpriteTemplate_803C56C(sub_8040990(mon)->tag, r5); - spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6); - gSprites[spriteID].invisible = 1; - gSprites[spriteID].callback = SpriteCallbackDummy; - break; - } - return spriteID; -} - -static void VBlankCB_EggHatch(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void EggHatch(void) -{ - ScriptContext2_Enable(); - CreateTask(Task_EggHatch, 10); - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); -} - -static void Task_EggHatch(u8 taskID) -{ - if (!gPaletteFade.active) - { - SetMainCallback2(CB2_EggHatch_0); - gFieldCallback = sub_8080990; - DestroyTask(taskID); - } -} - -static void CB2_EggHatch_0(void) -{ - switch (gMain.state) - { - case 0: - REG_DISPCNT = 0; - gEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); - gEggHatchData->eggPartyID = gSpecialVar_0x8004; - gEggHatchData->eggShardVelocityID = 0; - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_EggHatch); - gMain.state++; - gSpecialVar_0x8005 = GetCurrentMapMusic(); - break; - case 1: - SetUpWindowConfig(&gWindowConfig_81E6F84); - InitWindowFromConfig(&gEggHatchData->window, &gWindowConfig_81E6F84); - gEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20); - LoadTextWindowGraphics(&gEggHatchData->window); - gMain.state++; - break; - case 2: - LZDecompressVram(&gUnknown_08D00000, (void*)(VRAM)); - CpuSet(&gUnknown_08D00524, &ewram[0], 0x800); - DmaCopy16(3, &ewram[0], (void*)(VRAM + 0x2800), 0x500); - LoadCompressedPalette(&gUnknown_08D004E0, 0, 0x20); - gMain.state++; - break; - case 3: - LoadSpriteSheet(&sUnknown_0820A3B0); - LoadSpriteSheet(&sUnknown_0820A3B8); - LoadSpritePalette(&sUnknown_0820A3C0); - gMain.state++; - break; - case 4: - gEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5); - AddHatchedMonToParty(gEggHatchData->eggPartyID); - gMain.state++; - break; - case 5: - EggHatchCreateMonSprite(0, 0, gEggHatchData->eggPartyID); - gMain.state++; - break; - case 6: - gEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gEggHatchData->eggPartyID); - gMain.state++; - break; - case 7: - { - u32 offsetRead, offsetWrite; - u32 offsetRead2, offsetWrite2; - u32 size; - - REG_BG2CNT = 0x4C06; - LoadPalette(gUnknown_0820C9F8, 0x10, 0xA0); - - offsetRead = (u32)(&gUnknown_0820CA98); - offsetWrite = (VRAM + 0x4000); - size = 0x1300; - while (TRUE) - { - DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000); - offsetRead += 0x1000; - offsetWrite += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaCopy16(3, offsetRead, (void *) (offsetWrite), size); - break; - } - } - - offsetRead2 = (u32)(&gUnknown_0820F798); - offsetWrite2 = (u32)(VRAM + 0x6000); - DmaCopy16(3, offsetRead2, (void*)(offsetWrite2), 0x1000); - gMain.state++; - } - break; - case 8: - REG_BG1CNT = 0x501; - - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - - SetMainCallback2(CB2_EggHatch_1); - gEggHatchData->CB2_state = 0; - break; - } -} - -static void EggHatchSetMonNickname(void) -{ - SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); - SetMainCallback2(c2_exit_to_overworld_2_switch); -} - -static void Task_EggHatchPlayBGM(u8 taskID) -{ - if (gTasks[taskID].data[0] == 0) - StopMapMusic(); - if (gTasks[taskID].data[0] == 1) - PlayBGM(376); - if (gTasks[taskID].data[0] > 60) - { - PlayBGM(377); - DestroyTask(taskID); - //return; task is destroyed, yet you increment the value? - } - gTasks[taskID].data[0]++; -} - -static void CB2_EggHatch_1(void) -{ - switch (gEggHatchData->CB2_state) - { - case 0: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - REG_DISPCNT = 0x1740; - gEggHatchData->CB2_state++; - CreateTask(Task_EggHatchPlayBGM, 5); - break; - case 1: - if (!gPaletteFade.active) - { - gEggHatchData->CB2_PalCounter = 0; - gEggHatchData->CB2_state++; - } - break; - case 2: - if (++gEggHatchData->CB2_PalCounter > 30) - { - gEggHatchData->CB2_state++; - gSprites[gEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; - } - break; - case 3: - if (gSprites[gEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) - gEggHatchData->CB2_state++; - break; - case 4: - GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg); - EggHatchPrintMessage2(gStringVar4); - PlayFanfare(371); - gEggHatchData->CB2_state++; - break; - case 5: - if (IsFanfareTaskInactive()) - gEggHatchData->CB2_state++; - break; - case 6: - if (IsFanfareTaskInactive()) - gEggHatchData->CB2_state++; - break; - case 7: - GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt); - EggHatchPrintMessage1(gStringVar4); - gEggHatchData->CB2_state++; - break; - case 8: - if (EggHatchUpdateWindowText()) - { - MenuDrawTextWindow(22, 8, 27, 13); - InitYesNoMenu(22, 8, 4); - gEggHatchData->CB2_state++; - } - break; - case 9: - { - s8 menuInput; - if ((menuInput = ProcessMenuInputNoWrap_()) != -2) - { - if (menuInput != -1 && menuInput != 1) - { - u16 species; - u8 gender; - u32 personality; - - GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar3); - species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES); - gender = GetMonGender(&gPlayerParty[gEggHatchData->eggPartyID]); - personality = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); - DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); - } - else - gEggHatchData->CB2_state++; - } - } - break; - case 10: - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gEggHatchData->CB2_state++; - break; - case 11: - if (!gPaletteFade.active) - SetMainCallback2(c2_exit_to_overworld_2_switch); - break; - } - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void SpriteCB_Egg_0(struct Sprite* sprite) -{ - if (++sprite->data0 > 20) - { - sprite->callback = SpriteCB_Egg_1; - sprite->data0 = 0; - } - else - { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 1); - if (sprite->data0 == 15) - { - PlaySE(SE_BOWA); - StartSpriteAnim(sprite, 1); - CreateRandomEggShardSprite(); - } - } -} - -static void SpriteCB_Egg_1(struct Sprite* sprite) -{ - if (++sprite->data2 > 30) - { - if (++sprite->data0 > 20) - { - sprite->callback = SpriteCB_Egg_2; - sprite->data0 = 0; - sprite->data2 = 0; - } - else - { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 2); - if (sprite->data0 == 15) - { - PlaySE(SE_BOWA); - StartSpriteAnim(sprite, 2); - } - } - } -} - -static void SpriteCB_Egg_2(struct Sprite* sprite) -{ - if (++sprite->data2 > 30) - { - if (++sprite->data0 > 38) - { - u16 species; - - sprite->callback = SpriteCB_Egg_3; - sprite->data0 = 0; - species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES); - gSprites[gEggHatchData->pokeSpriteID].pos2.x = 0; - gSprites[gEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; - } - else - { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 2); - if (sprite->data0 == 15) - { - PlaySE(SE_BOWA); - StartSpriteAnim(sprite, 2); - CreateRandomEggShardSprite(); - CreateRandomEggShardSprite(); - } - if (sprite->data0 == 30) - PlaySE(SE_BOWA); - } - } -} - -static void SpriteCB_Egg_3(struct Sprite* sprite) -{ - if (++sprite->data0 > 50) - { - sprite->callback = SpriteCB_Egg_4; - sprite->data0 = 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) - { - for (i = 0; i <= 3; i++) - CreateRandomEggShardSprite(); - } - sprite->data0++; - if (!gPaletteFade.active) - { - PlaySE(SE_TAMAGO); - sprite->invisible = 1; - sprite->callback = SpriteCB_Egg_5; - sprite->data0 = 0; - } -} - -static void SpriteCB_Egg_5(struct Sprite* sprite) -{ - if (sprite->data0 == 0) - { - gSprites[gEggHatchData->pokeSpriteID].invisible = 0; - StartSpriteAffineAnim(&gSprites[gEggHatchData->pokeSpriteID], 1); - } - if (sprite->data0 == 8) - BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF); - if (sprite->data0 <= 9) - gSprites[gEggHatchData->pokeSpriteID].pos1.y -= 1; - if (sprite->data0 > 40) - sprite->callback = SpriteCallbackDummy; - sprite->data0++; -} - -static void SpriteCB_EggShard(struct Sprite* sprite) -{ - sprite->data4 += sprite->data1; - sprite->data5 += sprite->data2; - - sprite->pos2.x = sprite->data4 / 256; - sprite->pos2.y = sprite->data5 / 256; - - sprite->data2 += sprite->data3; - - if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data2 > 0) - DestroySprite(sprite); -} - -// Converts a number to Q8.8 fixed-point format -#define Q_8_8(n) ((s16)((n) * 256)) - -static const s16 sEggShardVelocities[][2] = -{ - {Q_8_8(-1.5), Q_8_8(-3.75)}, - {Q_8_8(-5), Q_8_8(-3)}, - {Q_8_8(3.5), Q_8_8(-3)}, - {Q_8_8(-4), Q_8_8(-3.75)}, - {Q_8_8(2), Q_8_8(-1.5)}, - {Q_8_8(-0.5), Q_8_8(-6.75)}, - {Q_8_8(5), Q_8_8(-2.25)}, - {Q_8_8(-1.5), Q_8_8(-3.75)}, - {Q_8_8(4.5), Q_8_8(-1.5)}, - {Q_8_8(-1), Q_8_8(-6.75)}, - {Q_8_8(4), Q_8_8(-2.25)}, - {Q_8_8(-3.5), Q_8_8(-3.75)}, - {Q_8_8(1), Q_8_8(-1.5)}, - {Q_8_8(-3.515625), Q_8_8(-6.75)}, - {Q_8_8(4.5), Q_8_8(-2.25)}, - {Q_8_8(-0.5), Q_8_8(-7.5)}, - {Q_8_8(1), Q_8_8(-4.5)}, - {Q_8_8(-2.5), Q_8_8(-2.25)}, - {Q_8_8(2.5), Q_8_8(-7.5)}, -}; - -static void CreateRandomEggShardSprite(void) -{ - u16 spriteAnimIndex; - - s16 velocity1 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][1]; - gEggHatchData->eggShardVelocityID++; - spriteAnimIndex = Random() % 4; - CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); -} - -static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) -{ - u8 spriteID = CreateSprite(&sSpriteTemplate_820A418, x, y, 4); - gSprites[spriteID].data1 = data1; - gSprites[spriteID].data2 = data2; - gSprites[spriteID].data3 = data3; - StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex); -} - -static void EggHatchPrintMessage1(u8* src) -{ - sub_8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); -} - -static void EggHatchPrintMessage2(u8* src) -{ - sub_8003460(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); -} - -static bool8 EggHatchUpdateWindowText(void) -{ - return sub_80035AC(&gEggHatchData->window); -} |