From 4aeb66f9df4e6174c94c1b9d3215468ea4e6b76f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 25 Jun 2019 19:21:02 -0400 Subject: [PATCH 1/4] Remove egg_hatch files --- asm/egg_hatch.s | 8 - src/egg_hatch.c | 878 ------------------------------------------------ 2 files changed, 886 deletions(-) delete mode 100644 asm/egg_hatch.s delete mode 100644 src/egg_hatch.c diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s deleted file mode 100644 index 2428f2984..000000000 --- a/asm/egg_hatch.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - .align 2, 0 @ Don't pad with nop. diff --git a/src/egg_hatch.c b/src/egg_hatch.c deleted file mode 100644 index 5e27a6482..000000000 --- a/src/egg_hatch.c +++ /dev/null @@ -1,878 +0,0 @@ -#include "global.h" -#include "pokemon.h" -#include "egg_hatch.h" -#include "pokedex.h" -#include "constants/items.h" -#include "script.h" -#include "decompress.h" -#include "task.h" -#include "palette.h" -#include "main.h" -#include "event_data.h" -#include "sound.h" -#include "constants/songs.h" -#include "text.h" -#include "text_window.h" -#include "string_util.h" -#include "menu.h" -#include "trig.h" -#include "random.h" -#include "malloc.h" -#include "dma3.h" -#include "gpu_regs.h" -#include "bg.h" -#include "m4a.h" -#include "window.h" -#include "graphics.h" -#include "constants/abilities.h" -#include "constants/species.h" -#include "daycare.h" -#include "overworld.h" -#include "scanline_effect.h" -#include "field_weather.h" -#include "international_string_util.h" -#include "naming_screen.h" -#include "pokemon_storage_system.h" -#include "field_screen_effect.h" -#include "battle.h" // to get rid of later -#include "help_system.h" -#include "field_fadetransition.h" -#include "new_menu_helpers.h" - -struct EggHatchData -{ - u8 eggSpriteID; - u8 pokeSpriteID; - u8 CB2_state; - u8 CB2_PalCounter; - u8 eggPartyID; - u8 unused_5; - u8 unused_6; - u8 eggShardVelocityID; - u8 windowId; - u8 unused_9; - u8 unused_A; - u16 species; - struct TextColor textColor; -}; - -extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle -extern const u8 gText_HatchedFromEgg[]; -extern const u8 gText_NickHatchPrompt[]; - -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 EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed); -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; - -// rom data -static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.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_EggHatch = - { - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, - }; - -static const union AnimCmd sSpriteAnim_EggHatch0[] = - { - ANIMCMD_FRAME(0, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggHatch1[] = - { - ANIMCMD_FRAME(16, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggHatch2[] = - { - ANIMCMD_FRAME(32, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggHatch3[] = - { - ANIMCMD_FRAME(48, 5), - ANIMCMD_END - }; - -static const union AnimCmd *const sSpriteAnimTable_EggHatch[] = - { - sSpriteAnim_EggHatch0, - sSpriteAnim_EggHatch1, - sSpriteAnim_EggHatch2, - sSpriteAnim_EggHatch3, - }; - -static const struct SpriteSheet sEggHatch_Sheet = - { - .data = sEggHatchTiles, - .size = 2048, - .tag = 12345, - }; - -static const struct SpriteSheet sEggShards_Sheet = - { - .data = sEggShardTiles, - .size = 128, - .tag = 23456, - }; - -static const struct SpritePalette sEgg_SpritePalette = - { - .data = sEggPalette, - .tag = 54321 - }; - -static const struct SpriteTemplate sSpriteTemplate_EggHatch = - { - .tileTag = 12345, - .paletteTag = 54321, - .oam = &sOamData_EggHatch, - .anims = sSpriteAnimTable_EggHatch, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy - }; - -static const struct OamData sOamData_EggShard = - { - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, - }; - -static const union AnimCmd sSpriteAnim_EggShard0[] = - { - ANIMCMD_FRAME(0, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggShard1[] = - { - ANIMCMD_FRAME(1, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggShard2[] = - { - ANIMCMD_FRAME(2, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggShard3[] = - { - ANIMCMD_FRAME(3, 5), - ANIMCMD_END - }; - -static const union AnimCmd *const sSpriteAnimTable_EggShard[] = - { - sSpriteAnim_EggShard0, - sSpriteAnim_EggShard1, - sSpriteAnim_EggShard2, - sSpriteAnim_EggShard3, - }; - -static const struct SpriteTemplate sSpriteTemplate_EggShard = - { - .tileTag = 23456, - .paletteTag = 54321, - .oam = &sOamData_EggShard, - .anims = sSpriteAnimTable_EggShard, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_EggShard - }; - -static const struct BgTemplate sBgTemplates_EggHatch[2] = - { - { - .bg = 0, - .charBaseIndex = 2, - .mapBaseIndex = 24, - .screenSize = 3, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - - { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 8, - .screenSize = 1, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - }; - -static const struct WindowTemplate sWinTemplates_EggHatch[2] = - { - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 15, - .width = 26, - .height = 4, - .paletteNum = 0, - .baseBlock = 64 - }, - DUMMY_WIN_TEMPLATE - }; - -static const struct WindowTemplate sYesNoWinTemplate = - { - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 9, - .width = 5, - .height = 4, - .paletteNum = 15, - .baseBlock = 424 - }; - -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)}, - }; - -// code - -static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) -{ - u16 species; - u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, obedience; - u16 moves[4]; - u32 ivs[NUM_STATS]; - - - 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 < NUM_STATS; i++) - { - ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); - } - -// language = GetMonData(egg, MON_DATA_LANGUAGE); - gameMet = GetMonData(egg, MON_DATA_MET_GAME); - markings = GetMonData(egg, MON_DATA_MARKINGS); - pokerus = GetMonData(egg, MON_DATA_POKERUS); - obedience = GetMonData(egg, MON_DATA_OBEDIENCE); - - CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0); - - for (i = 0; i < 4; i++) - { - SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]); - } - - for (i = 0; i < NUM_STATS; i++) - { - SetMonData(temp, MON_DATA_HP_IV + i, &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, &pokerus); - SetMonData(temp, MON_DATA_OBEDIENCE, &obedience); - - *egg = *temp; -} - -static void AddHatchedMonToParty(u8 id) -{ - u8 isEgg = 0x46; // ? - u16 pokeNum; - u8 name[12]; - u16 ball; - u16 caughtLvl; - u8 mapNameID; - struct Pokemon* mon = &gPlayerParty[id]; - - CreatedHatchedMon(mon, &gEnemyParty[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); - GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN); - GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT); - - GetMonNick(mon, gStringVar1); - - ball = ITEM_POKE_BALL; - SetMonData(mon, MON_DATA_POKEBALL, &ball); - - caughtLvl = 0; - SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl); - - mapNameID = GetCurrentRegionMapSectionId(); - SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); - - MonRestorePP(mon); - CalculateMonStats(mon); -} - -void ScriptHatchMon(void) -{ - AddHatchedMonToParty(gSpecialVar_0x8004); -} - -static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId) -{ - u8 nick[0x20]; - struct DaycareMon *daycareMon = &daycare->mons[daycareId]; - - GetBoxMonNick(&daycareMon->mon, nick); - if (daycareMon->mail.message.itemId != 0 - && (StringCompare(nick, daycareMon->mail.monName) != 0 - || StringCompare(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0)) - { - StringCopy(gStringVar1, nick); - StringCopy(gStringVar2, daycareMon->mail.OT_name); - StringCopy(gStringVar3, daycareMon->mail.monName); - return TRUE; - } - return FALSE; -} - -bool8 sub_8046EAC(void) -{ - return sub_8046E34(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004); -} - -extern const struct CompressedSpriteSheet gMonFrontPicTable[]; - -static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc) -{ - u8 r4 = 0; - u8 spriteID = 0; // r7 - struct Pokemon* mon = NULL; // r5 - - if (a0 == 0) - { - mon = &gPlayerParty[pokeID]; - r4 = 1; - } - if (a0 == 1) - { - mon = &gPlayerParty[pokeID]; - r4 = 3; - } - switch (switchID) - { - case 0: - { - u16 species = GetMonData(mon, MON_DATA_SPECIES); - u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - sub_800ECC4(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid); - LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); - *speciesLoc = species; - } - break; - case 1: - SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r4); - spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 70, 6); - gSprites[spriteID].invisible = TRUE; - 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(0xFFFFFFFF, 0, 0, 16, 0); - sub_812B478(); -} - -static void Task_EggHatch(u8 taskID) -{ - if (!gPaletteFade.active) - { - CleanupOverworldWindowsAndTilemaps(); - SetMainCallback2(CB2_EggHatch_0); - gFieldCallback = FieldCallback_ReturnToEventScript2; - DestroyTask(taskID); - } -} - -static void CB2_EggHatch_0(void) -{ - switch (gMain.state) - { - case 0: - SetGpuReg(REG_OFFSET_DISPCNT, 0); - - sEggHatchData = Alloc(sizeof(struct EggHatchData)); - AllocateMonSpritesGfx(); - sEggHatchData->eggPartyID = gSpecialVar_0x8004; - sEggHatchData->eggShardVelocityID = 0; - - SetVBlankCallback(VBlankCB_EggHatch); - gSpecialVar_0x8005 = GetCurrentMapMusic(); - - reset_temp_tile_data_buffers(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch)); - - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - - SetBgAttribute(1, 7, 2); - SetBgTilemapBuffer(1, Alloc(0x1000)); - SetBgTilemapBuffer(0, Alloc(0x2000)); - - DeactivateAllTextPrinters(); - ResetPaletteFade(); - FreeAllSpritePalettes(); - ResetSpriteData(); - ResetTasks(); - ScanlineEffect_Stop(); - m4aSoundVSyncOn(); - gMain.state++; - break; - case 1: - InitWindows(sWinTemplates_EggHatch); - sEggHatchData->windowId = 0; - gMain.state++; - break; - case 2: - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - CopyToBgTilemapBuffer(0, gFile_graphics_interface_menu_map_tilemap, 0, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); - gMain.state++; - break; - case 3: - LoadSpriteSheet(&sEggHatch_Sheet); - LoadSpriteSheet(&sEggShards_Sheet); - LoadSpritePalette(&sEgg_SpritePalette); - gMain.state++; - break; - case 4: - CopyBgTilemapBufferToVram(0); - AddHatchedMonToParty(sEggHatchData->eggPartyID); - gMain.state++; - break; - case 5: - EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID, &sEggHatchData->species); - gMain.state++; - break; - case 6: - sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID, &sEggHatchData->species); - gMain.state++; - break; - case 7: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - LoadPalette(gTradeGba2_Pal, 0x10, 0xA0); - LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0); - CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0); - CopyBgTilemapBufferToVram(1); - gMain.state++; - break; - case 8: - SetMainCallback2(CB2_EggHatch_1); - sEggHatchData->CB2_state = 0; - break; - } - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void EggHatchSetMonNickname(void) -{ - SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); - FreeMonSpritesGfx(); - Free(sEggHatchData); - sub_812B484(); - SetMainCallback2(CB2_ReturnToField); -} - -static void Task_EggHatchPlayBGM(u8 taskID) -{ - if (gTasks[taskID].data[0] == 0) - { - StopMapMusic(); - } - if (gTasks[taskID].data[0] == 1) - PlayBGM(MUS_ME_SHINKA); - if (gTasks[taskID].data[0] > 60) - { - PlayBGM(MUS_SHINKA); - DestroyTask(taskID); - // UB: task is destroyed, yet the value is incremented - } - gTasks[taskID].data[0]++; -} - -static void CB2_EggHatch_1(void) -{ - u16 species; - u8 gender; - u32 personality; - - switch (sEggHatchData->CB2_state) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); - sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5); - ShowBg(0); - ShowBg(1); - sEggHatchData->CB2_state++; - CreateTask(Task_EggHatchPlayBGM, 5); - break; - case 1: - if (!gPaletteFade.active) - { - FillWindowPixelBuffer(sEggHatchData->windowId, 0x00); - sEggHatchData->CB2_PalCounter = 0; - sEggHatchData->CB2_state++; - } - break; - case 2: - if (++sEggHatchData->CB2_PalCounter > 30) - { - sEggHatchData->CB2_state++; - gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; - } - break; - case 3: - if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) - { - PlayCry1(sEggHatchData->species, 0); - sEggHatchData->CB2_state++; - } - break; - case 4: - if (IsCryFinished()) - { - sEggHatchData->CB2_state++; - } - break; - case 5: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); - StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg); - EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF); - PlayFanfare(MUS_FANFA5); - sEggHatchData->CB2_state++; - PutWindowTilemap(sEggHatchData->windowId); - CopyWindowToVram(sEggHatchData->windowId, 3); - break; - case 6: - if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; - break; - case 7: - if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; - break; - case 8: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); - StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt); - EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1); - sEggHatchData->CB2_state++; - break; - case 9: - if (!IsTextPrinterActive(sEggHatchData->windowId)) - { - LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0); - CreateYesNoMenu(&sYesNoWinTemplate, 3, 0, 2, 0x140, 0xE, 0); - sEggHatchData->CB2_state++; - } - break; - case 10: - switch (Menu_ProcessInputNoWrapClearOnChoose()) - { - case 0: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); - 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); - break; - case 1: - case -1: - sEggHatchData->CB2_state++; - } - break; - case 11: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - sEggHatchData->CB2_state++; - break; - case 12: - if (!gPaletteFade.active) - { - RemoveWindow(sEggHatchData->windowId); - UnsetBgTilemapBuffer(0); - UnsetBgTilemapBuffer(1); - Free(sEggHatchData); - SetMainCallback2(CB2_ReturnToField); - sub_812B484(); - } - break; - } - - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void SpriteCB_Egg_0(struct Sprite* sprite) -{ - if (++sprite->data[0] > 20) - { - sprite->callback = SpriteCB_Egg_1; - sprite->data[0] = 0; - } - else - { - 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); - CreateRandomEggShardSprite(); - } - } -} - -static void SpriteCB_Egg_1(struct Sprite* sprite) -{ - if (++sprite->data[2] > 30) - { - if (++sprite->data[0] > 20) - { - sprite->callback = SpriteCB_Egg_2; - sprite->data[0] = 0; - sprite->data[2] = 0; - } - else - { - 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); - } - } - } -} - -struct UnkStruct_82349CC -{ - u8 field_0; - u8 field_1; - u8 field_2; - u8 field_3; -}; - -extern const struct UnkStruct_82349CC gUnknown_82349CC[NUM_SPECIES]; - -static void SpriteCB_Egg_2(struct Sprite* sprite) -{ - if (++sprite->data[2] > 30) - { - if (++sprite->data[0] > 38) - { - u16 species; - - sprite->callback = SpriteCB_Egg_3; - sprite->data[0] = 0; - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; - gSprites[sEggHatchData->pokeSpriteID].pos2.y = gUnknown_82349CC[species].field_1; - } - else - { - 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->data[0] == 30) - PlaySE(SE_BOWA); - } - } -} - -static void SpriteCB_Egg_3(struct Sprite* sprite) -{ - if (++sprite->data[0] > 50) - { - sprite->callback = SpriteCB_Egg_4; - sprite->data[0] = 0; - } -} - -static void SpriteCB_Egg_4(struct Sprite* sprite) -{ - s16 i; - if (sprite->data[0] == 0) - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, 0xFFFF); - if (sprite->data[0] < 4u) - { - for (i = 0; i <= 3; i++) - CreateRandomEggShardSprite(); - } - sprite->data[0]++; - if (!gPaletteFade.active) - { - PlaySE(SE_JIHANKI); - sprite->invisible = TRUE; - sprite->callback = SpriteCB_Egg_5; - sprite->data[0] = 0; - } -} - -static void SpriteCB_Egg_5(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE; - StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1); - } - if (sprite->data[0] == 8) - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x10, 0, 0xFFFF); - if (sprite->data[0] <= 9) - gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1; - if (sprite->data[0] > 40) - sprite->callback = SpriteCallbackDummy; - sprite->data[0]++; -} - -static void SpriteCB_EggShard(struct Sprite* sprite) -{ - sprite->data[4] += sprite->data[1]; - sprite->data[5] += sprite->data[2]; - - sprite->pos2.x = sprite->data[4] / 256; - sprite->pos2.y = sprite->data[5] / 256; - - sprite->data[2] += sprite->data[3]; - - if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0) - DestroySprite(sprite); -} - -static void CreateRandomEggShardSprite(void) -{ - u16 spriteAnimIndex; - - s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; - sEggHatchData->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_EggShard, x, y, 4); - 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; - AddTextPrinterParameterized4(windowId, 3, x, y, 1, 1, &sEggHatchData->textColor, speed, string); -} From c13c19c9638f38d2e74473fbfdaef2b32e4cb418 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 26 Jun 2019 07:31:39 +0800 Subject: [PATCH 2/4] finished hof_pc --- asm/bike.s | 2 +- asm/evolution_scene.s | 4 +- asm/field_effect.s | 12 ++-- asm/field_fadetransition.s | 18 +++--- asm/hall_of_fame.s | 2 +- asm/hof_pc.s | 118 ------------------------------------- asm/map_preview_screen.s | 2 +- asm/overworld.s | 6 +- asm/script_menu.s | 12 ++-- data/specials.inc | 6 +- include/hall_of_fame.h | 2 + include/overworld.h | 3 +- include/script_menu.h | 3 + ld_script.txt | 2 +- src/hof_pc.c | 53 +++++++++++++++++ src/quest_log.c | 2 +- src/teachy_tv.c | 2 +- 17 files changed, 94 insertions(+), 155 deletions(-) delete mode 100644 asm/hof_pc.s create mode 100644 src/hof_pc.c diff --git a/asm/bike.s b/asm/bike.s index b731e51c0..94583aa47 100644 --- a/asm/bike.s +++ b/asm/bike.s @@ -730,7 +730,7 @@ StartTransitionToFlipBikeState: @ 80BD5C8 movs r0, 0x1 bl SetPlayerAvatarTransitionFlags bl sav1_reset_battle_music_maybe - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic b _080BD618 .align 2, 0 _080BD5F0: .4byte gUnknown_2036E2C diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index 08aa16703..e151e6d7d 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -1870,7 +1870,7 @@ _080CEDC6: cmp r4, 0 bne _080CEE40 bl StopMapMusic - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic ldrh r1, [r5, 0xE] movs r0, 0x80 orrs r0, r1 @@ -1944,7 +1944,7 @@ _080CEE74: cmp r0, 0 bne _080CEE90 bl StopMapMusic - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic _080CEE90: movs r2, 0x1A ldrsh r0, [r4, r2] diff --git a/asm/field_effect.s b/asm/field_effect.s index 0fa36ce46..aef487a7e 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -2062,7 +2062,7 @@ _0808438C: .4byte mapldr_08084390 thumb_func_start mapldr_08084390 mapldr_08084390: @ 8084390 push {r4,lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl sub_807DC00 ldr r0, _080843E8 @ =c3_080843F8 movs r1, 0 @@ -2154,7 +2154,7 @@ _08084450: .4byte gPaletteFade thumb_func_start sub_8084454 sub_8084454: @ 8084454 push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable @@ -2885,7 +2885,7 @@ _080849F0: .4byte sub_80847C0 thumb_func_start sub_80849F4 sub_80849F4: @ 80849F4 push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable @@ -3909,7 +3909,7 @@ _080851B8: .4byte sub_8084F44 thumb_func_start mapldr_080851BC mapldr_080851BC: @ 80851BC push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable @@ -4965,7 +4965,7 @@ _080859C4: thumb_func_start sub_80859D4 sub_80859D4: @ 80859D4 push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable @@ -5431,7 +5431,7 @@ _08085D84: .4byte sub_8085B78 thumb_func_start mapldr_08085D88 mapldr_08085D88: @ 8085D88 push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable diff --git a/asm/field_fadetransition.s b/asm/field_fadetransition.s index ceaaaf7a6..a53329fab 100644 --- a/asm/field_fadetransition.s +++ b/asm/field_fadetransition.s @@ -245,7 +245,7 @@ _0807DCDC: sub_807DCE4: @ 807DCE4 push {lr} bl ScriptContext2_Enable - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl sub_807DC00 ldr r0, _0807DD00 @ =task0A_nop_for_a_while movs r1, 0xA @@ -277,7 +277,7 @@ _0807DD1C: FieldCallback_ReturnToEventScript2: @ 807DD24 push {lr} bl ScriptContext2_Enable - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl sub_807DC00 ldr r0, _0807DD40 @ =task0A_asap_script_env_2_enable_and_set_ctx_running movs r1, 0xA @@ -366,7 +366,7 @@ _0807DDCA: sub_807DDD0: @ 807DDD0 push {lr} bl ScriptContext2_Enable - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl palette_bg_faded_fill_black ldr r0, _0807DDEC @ =task_mpl_807DD60 movs r1, 0xA @@ -434,7 +434,7 @@ _0807DE50: sub_807DE58: @ 807DE58 push {lr} bl ScriptContext2_Enable - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl palette_bg_faded_fill_black ldr r0, _0807DE74 @ =sub_807DDF0 movs r1, 0xA @@ -563,7 +563,7 @@ _0807DF5E: thumb_func_start sub_807DF64 sub_807DF64: @ 807DF64 push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl sub_8111CF0 movs r0, 0 bl sub_807DE78 @@ -575,7 +575,7 @@ sub_807DF64: @ 807DF64 thumb_func_start sub_807DF7C sub_807DF7C: @ 807DF7C push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl sub_8111CF0 movs r0, 0x1 bl sub_807DE78 @@ -587,7 +587,7 @@ sub_807DF7C: @ 807DF7C thumb_func_start sub_807DF94 sub_807DF94: @ 807DF94 push {lr} - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl sub_8111CF0 movs r0, 0x28 @@ -1112,7 +1112,7 @@ _0807E3E4: sub_807E3EC: @ 807E3EC push {lr} bl ScriptContext2_Enable - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl sub_807DC00 ldr r0, _0807E408 @ =task_mpl_807E3C8 movs r1, 0xA @@ -2188,7 +2188,7 @@ sub_807EC34: @ 807EC34 .align 2, 0 _0807EC6C: .4byte gTasks+0x8 _0807EC70: - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic bl pal_fill_for_maplights bl ScriptContext2_Enable adds r0, r5, 0x2 diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s index 97bf9ef64..f74b82551 100644 --- a/asm/hall_of_fame.s +++ b/asm/hall_of_fame.s @@ -2322,7 +2322,7 @@ _080F3082: bl Free str r4, [r5] _080F3090: - bl sub_80CA5A0 + bl ReturnFromHallOfFamePC _080F3094: pop {r4,r5} pop {r0} diff --git a/asm/hof_pc.s b/asm/hof_pc.s deleted file mode 100644 index 80f7fc3f9..000000000 --- a/asm/hof_pc.s +++ /dev/null @@ -1,118 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80CA53C -sub_80CA53C: @ 80CA53C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080CA56C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080CA564 - bl FreeAllWindowBuffers - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - adds r0, r4, 0 - bl DestroyTask - ldr r0, _080CA570 @ =sub_80F2978 - bl SetMainCallback2 -_080CA564: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CA56C: .4byte gPaletteFade -_080CA570: .4byte sub_80F2978 - thumb_func_end sub_80CA53C - - thumb_func_start sub_80CA574 -sub_80CA574: @ 80CA574 - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl ScriptContext2_Enable - ldr r0, _080CA59C @ =sub_80CA53C - movs r1, 0 - bl CreateTask - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080CA59C: .4byte sub_80CA53C - thumb_func_end sub_80CA574 - - thumb_func_start sub_80CA5A0 -sub_80CA5A0: @ 80CA5A0 - push {lr} - ldr r0, _080CA5B4 @ =CB2_ReturnToField - bl SetMainCallback2 - ldr r1, _080CA5B8 @ =gFieldCallback - ldr r0, _080CA5BC @ =sub_80CA5C0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080CA5B4: .4byte CB2_ReturnToField -_080CA5B8: .4byte gFieldCallback -_080CA5BC: .4byte sub_80CA5C0 - thumb_func_end sub_80CA5A0 - - thumb_func_start sub_80CA5C0 -sub_80CA5C0: @ 80CA5C0 - push {lr} - sub sp, 0x4 - bl ScriptContext2_Enable - bl sub_8055DC4 - bl sp109_CreatePCMenu - bl sub_809D254 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _080CA5F4 @ =sub_80CA5F8 - movs r1, 0xA - bl CreateTask - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080CA5F4: .4byte sub_80CA5F8 - thumb_func_end sub_80CA5C0 - - thumb_func_start sub_80CA5F8 -sub_80CA5F8: @ 80CA5F8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080CA614 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080CA610 - adds r0, r2, 0 - bl DestroyTask -_080CA610: - pop {r0} - bx r0 - .align 2, 0 -_080CA614: .4byte gPaletteFade - thumb_func_end sub_80CA5F8 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/map_preview_screen.s b/asm/map_preview_screen.s index be9f5e3c5..a06141b9d 100644 --- a/asm/map_preview_screen.s +++ b/asm/map_preview_screen.s @@ -440,7 +440,7 @@ _080F8448: lsls r0, 24 cmp r0, 0 beq _080F853C - bl sub_8055DC4 + bl Overworld_PlaySpecialMapMusic b _080F84EA _080F8458: ldrh r0, [r4, 0x2] diff --git a/asm/overworld.s b/asm/overworld.s index 62add03d2..479276cb1 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -2378,8 +2378,8 @@ sub_8055DB8: @ 8055DB8 bx r0 thumb_func_end sub_8055DB8 - thumb_func_start sub_8055DC4 -sub_8055DC4: @ 8055DC4 + thumb_func_start Overworld_PlaySpecialMapMusic +Overworld_PlaySpecialMapMusic: @ 8055DC4 push {r4,r5,lr} sub sp, 0x4 ldr r0, _08055DD8 @ =gUnknown_2031DD8 @@ -2462,7 +2462,7 @@ _08055E6C: bx r0 .align 2, 0 _08055E74: .4byte 0x00000131 - thumb_func_end sub_8055DC4 + thumb_func_end Overworld_PlaySpecialMapMusic thumb_func_start Overworld_SetSavedMusic Overworld_SetSavedMusic: @ 8055E78 diff --git a/asm/script_menu.s b/asm/script_menu.s index 69e487bcc..f99f541fe 100644 --- a/asm/script_menu.s +++ b/asm/script_menu.s @@ -914,8 +914,8 @@ _0809D034: _0809D03C: .4byte gSpecialVar_Result thumb_func_end sub_809CFDC - thumb_func_start sp109_CreatePCMenu -sp109_CreatePCMenu: @ 809D040 + thumb_func_start ScrSpecial_CreatePCMenu +ScrSpecial_CreatePCMenu: @ 809D040 push {lr} ldr r0, _0809D060 @ =sub_809CC98 bl FuncIsActiveTask @@ -937,7 +937,7 @@ _0809D068: _0809D06A: pop {r1} bx r1 - thumb_func_end sp109_CreatePCMenu + thumb_func_end ScrSpecial_CreatePCMenu thumb_func_start sub_809D070 sub_809D070: @ 809D070 @@ -1159,8 +1159,8 @@ _0809D24C: .4byte gStringVar4 _0809D250: .4byte gUnknown_8417BB6 thumb_func_end sub_809D070 - thumb_func_start sub_809D254 -sub_809D254: @ 809D254 + thumb_func_start ScriptMenu_DisplayPCStartupPrompt +ScriptMenu_DisplayPCStartupPrompt: @ 809D254 push {lr} sub sp, 0x10 movs r0, 0 @@ -1184,7 +1184,7 @@ sub_809D254: @ 809D254 bx r0 .align 2, 0 _0809D284: .4byte gUnknown_81A508A - thumb_func_end sub_809D254 + thumb_func_end ScriptMenu_DisplayPCStartupPrompt thumb_func_start sub_809D288 sub_809D288: @ 809D288 diff --git a/data/specials.inc b/data/specials.inc index 96d0ef253..e5edb47dd 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -162,7 +162,7 @@ gSpecials:: @ 815FD60 def_special sub_80CA758 def_special nullsub_75 def_special nullsub_75 - def_special sub_8055DC4 + def_special Overworld_PlaySpecialMapMusic def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 @@ -271,8 +271,8 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 - def_special sp109_CreatePCMenu - def_special sub_80CA574 + def_special ScrSpecial_CreatePCMenu + def_special HallOfFamePCBeginFade def_special sub_80CA618 def_special nullsub_75 def_special nullsub_75 diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h index 2dc9fae41..17786dad3 100644 --- a/include/hall_of_fame.h +++ b/include/hall_of_fame.h @@ -7,5 +7,7 @@ void CB2_DoHallOfFameScreen(void); void CB2_DoHallOfFameScreenDontSaveData(void); void CB2_DoHallOfFamePC(void); void sub_8175280(void); +void sub_80F2978(void); +void HallOfFamePCBeginFade(void); #endif // GUARD_HALL_OF_FAME_H diff --git a/include/overworld.h b/include/overworld.h index fed1a33a5..e08842143 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -86,7 +86,7 @@ void sub_8055D5C(struct WarpData *); void sub_80572A8(void); void sub_805726C(void); void sub_8057430(void); -void sub_8055DC4(void); +void Overworld_PlaySpecialMapMusic(void); u8 GetCurrentRegionMapSectionId(void); @@ -111,7 +111,6 @@ void Overworld_ResetStateAfterTeleport(void); void Overworld_FadeOutMapMusic(void); void sub_805671C(void); -void sub_8055DC4(void); bool8 sub_8055FC4(void); bool8 is_light_level_8_or_9(u8 mapType); bool32 sub_8055C9C(void); diff --git a/include/script_menu.h b/include/script_menu.h index f82b061a5..c1e32beae 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -10,6 +10,9 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 va bool8 ScriptMenu_YesNo(u8 var1, u8 var2); bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3); +bool32 ScrSpecial_CreatePCMenu(void); +void ScriptMenu_DisplayPCStartupPrompt(void); + bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void); void sub_809D6D4(void); diff --git a/ld_script.txt b/ld_script.txt index 2664d8010..f88050c17 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -185,7 +185,7 @@ SECTIONS { asm/fldeff_flash.o(.text); asm/post_battle_event_funcs.o(.text); src/prof_pc.o(.text); - asm/hof_pc.o(.text); + src/hof_pc.o(.text); asm/field_specials.o(.text); asm/battle_records.o(.text); asm/evolution_scene.o(.text); diff --git a/src/hof_pc.c b/src/hof_pc.c new file mode 100644 index 000000000..241fbc4f3 --- /dev/null +++ b/src/hof_pc.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "hall_of_fame.h" +#include "palette.h" +#include "overworld.h" +#include "script.h" +#include "script_menu.h" +#include "task.h" +#include "hall_of_fame.h" +#include "bg.h" +#include "window.h" + +static void ReshowPCMenuAfterHallOfFamePC(void); +static void Task_WaitForPaletteFade(u8 taskId); + +static void Task_WaitFadeAndSetCallback(u8 taskId) +{ + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ResetBgsAndClearDma3BusyFlags(0); + DestroyTask(taskId); + SetMainCallback2(sub_80F2978); + } +} + +void HallOfFamePCBeginFade(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + ScriptContext2_Enable(); + CreateTask(Task_WaitFadeAndSetCallback, 0); +} + +void ReturnFromHallOfFamePC(void) +{ + SetMainCallback2(CB2_ReturnToField); + gFieldCallback = ReshowPCMenuAfterHallOfFamePC; +} + +static void ReshowPCMenuAfterHallOfFamePC(void) +{ + ScriptContext2_Enable(); + Overworld_PlaySpecialMapMusic(); + ScrSpecial_CreatePCMenu(); + ScriptMenu_DisplayPCStartupPrompt(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + CreateTask(Task_WaitForPaletteFade, 10); +} + +static void Task_WaitForPaletteFade(u8 taskId) +{ + if (!gPaletteFade.active) + DestroyTask(taskId); +} diff --git a/src/quest_log.c b/src/quest_log.c index 0021ee927..0f449e282 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -1567,7 +1567,7 @@ void sub_81120AC(u8 taskId) { case 0: gUnknown_2031DD8 = 0; - sub_8055DC4(); + Overworld_PlaySpecialMapMusic(); sub_811229C(); FillWindowPixelRect(gUnknown_203ADFE[0], 0xF, 0, 0, gUnknown_845661C[0].width * 8, gUnknown_845661C[0].height * 8); data[0]++; diff --git a/src/teachy_tv.c b/src/teachy_tv.c index eb5a7293d..06ddd68aa 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -718,7 +718,7 @@ static void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) } else { - sub_8055DC4(); + Overworld_PlaySpecialMapMusic(); SetMainCallback2(sStaticResources.callback); } TeachyTvFree(); From bf81005d44a64cd69002f48dabcfd1fc65cd2e7d Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 26 Jun 2019 07:42:17 +0800 Subject: [PATCH 3/4] sync with branch misc --- include/hall_of_fame.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h index 17786dad3..1d2122399 100644 --- a/include/hall_of_fame.h +++ b/include/hall_of_fame.h @@ -9,5 +9,6 @@ void CB2_DoHallOfFamePC(void); void sub_8175280(void); void sub_80F2978(void); void HallOfFamePCBeginFade(void); +void ReturnFromHallOfFamePC(void); #endif // GUARD_HALL_OF_FAME_H From b5ebf7074daac6b9aed33d07cda992dc6da06ebe Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 26 Jun 2019 08:16:33 +0800 Subject: [PATCH 4/4] finished play_time --- asm/play_time.s | 137 ------------------------------------------------ ld_script.txt | 2 +- src/play_time.c | 67 +++++++++++++++++++++++ sym_bss.txt | 5 +- 4 files changed, 70 insertions(+), 141 deletions(-) delete mode 100644 asm/play_time.s create mode 100644 src/play_time.c diff --git a/asm/play_time.s b/asm/play_time.s deleted file mode 100644 index 41d0f6239..000000000 --- a/asm/play_time.s +++ /dev/null @@ -1,137 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start PlayTimeCounter_Reset -PlayTimeCounter_Reset: @ 8054814 - ldr r1, _08054830 @ =gUnknown_3000E7C - movs r0, 0 - strb r0, [r1] - ldr r2, _08054834 @ =gSaveBlock2Ptr - ldr r3, [r2] - movs r1, 0 - movs r0, 0 - strh r0, [r3, 0xE] - strb r1, [r3, 0x10] - ldr r0, [r2] - strb r1, [r0, 0x11] - ldr r0, [r2] - strb r1, [r0, 0x12] - bx lr - .align 2, 0 -_08054830: .4byte gUnknown_3000E7C -_08054834: .4byte gSaveBlock2Ptr - thumb_func_end PlayTimeCounter_Reset - - thumb_func_start PlayTimeCounter_Start -PlayTimeCounter_Start: @ 8054838 - push {lr} - ldr r1, _08054854 @ =gUnknown_3000E7C - movs r0, 0x1 - strb r0, [r1] - ldr r0, _08054858 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrh r1, [r0, 0xE] - ldr r0, _0805485C @ =0x000003e7 - cmp r1, r0 - bls _08054850 - bl PlayTimeCounter_SetToMax -_08054850: - pop {r0} - bx r0 - .align 2, 0 -_08054854: .4byte gUnknown_3000E7C -_08054858: .4byte gSaveBlock2Ptr -_0805485C: .4byte 0x000003e7 - thumb_func_end PlayTimeCounter_Start - - thumb_func_start sub_8054860 -sub_8054860: @ 8054860 - ldr r1, _08054868 @ =gUnknown_3000E7C - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_08054868: .4byte gUnknown_3000E7C - thumb_func_end sub_8054860 - - thumb_func_start PlayTimeCounter_Update -PlayTimeCounter_Update: @ 805486C - push {lr} - ldr r0, _080548C8 @ =gUnknown_3000E7C - ldrb r0, [r0] - cmp r0, 0x1 - bne _080548C4 - ldr r2, _080548CC @ =gSaveBlock2Ptr - ldr r0, [r2] - ldrb r1, [r0, 0x12] - adds r1, 0x1 - movs r3, 0 - strb r1, [r0, 0x12] - ldr r1, [r2] - ldrb r0, [r1, 0x12] - cmp r0, 0x3B - bls _080548C4 - strb r3, [r1, 0x12] - ldr r0, [r2] - ldrb r1, [r0, 0x11] - adds r1, 0x1 - strb r1, [r0, 0x11] - ldr r1, [r2] - ldrb r0, [r1, 0x11] - cmp r0, 0x3B - bls _080548C4 - strb r3, [r1, 0x11] - ldr r0, [r2] - ldrb r1, [r0, 0x10] - adds r1, 0x1 - strb r1, [r0, 0x10] - ldr r1, [r2] - ldrb r0, [r1, 0x10] - cmp r0, 0x3B - bls _080548C4 - strb r3, [r1, 0x10] - ldr r0, [r2] - ldrh r1, [r0, 0xE] - adds r1, 0x1 - strh r1, [r0, 0xE] - lsls r1, 16 - ldr r0, _080548D0 @ =0x03e70000 - cmp r1, r0 - bls _080548C4 - bl PlayTimeCounter_SetToMax -_080548C4: - pop {r0} - bx r0 - .align 2, 0 -_080548C8: .4byte gUnknown_3000E7C -_080548CC: .4byte gSaveBlock2Ptr -_080548D0: .4byte 0x03e70000 - thumb_func_end PlayTimeCounter_Update - - thumb_func_start PlayTimeCounter_SetToMax -PlayTimeCounter_SetToMax: @ 80548D4 - ldr r1, _080548F0 @ =gUnknown_3000E7C - movs r0, 0x2 - strb r0, [r1] - ldr r2, _080548F4 @ =gSaveBlock2Ptr - ldr r3, [r2] - ldr r0, _080548F8 @ =0x000003e7 - strh r0, [r3, 0xE] - movs r1, 0x3B - strb r1, [r3, 0x10] - ldr r0, [r2] - strb r1, [r0, 0x11] - ldr r0, [r2] - strb r1, [r0, 0x12] - bx lr - .align 2, 0 -_080548F0: .4byte gUnknown_3000E7C -_080548F4: .4byte gSaveBlock2Ptr -_080548F8: .4byte 0x000003e7 - thumb_func_end PlayTimeCounter_SetToMax - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index f88050c17..a44810372 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -87,7 +87,7 @@ SECTIONS { asm/pokeball.o(.text); src/load_save.o(.text); asm/trade.o(.text); - asm/play_time.o(.text); + src/play_time.o(.text); asm/new_game.o(.text); asm/overworld.o(.text); src/fieldmap.o(.text); diff --git a/src/play_time.c b/src/play_time.c new file mode 100644 index 000000000..cb70a57c4 --- /dev/null +++ b/src/play_time.c @@ -0,0 +1,67 @@ +#include "play_time.h" + +static IWRAM_DATA u8 sPlayTimeCounterState; + +enum +{ + STOPPED, + RUNNING, + MAXED_OUT, +}; + +void PlayTimeCounter_Reset(void) +{ + sPlayTimeCounterState = STOPPED; + + gSaveBlock2Ptr->playTimeHours = 0; + gSaveBlock2Ptr->playTimeMinutes = 0; + gSaveBlock2Ptr->playTimeSeconds = 0; + gSaveBlock2Ptr->playTimeVBlanks = 0; +} + +void PlayTimeCounter_Start(void) +{ + sPlayTimeCounterState = RUNNING; + + if (gSaveBlock2Ptr->playTimeHours > 999) + PlayTimeCounter_SetToMax(); +} + +void PlayTimeCounter_Stop(void) +{ + sPlayTimeCounterState = STOPPED; +} + +void PlayTimeCounter_Update(void) +{ + if (sPlayTimeCounterState == RUNNING) + { + gSaveBlock2Ptr->playTimeVBlanks++; + if (gSaveBlock2Ptr->playTimeVBlanks > 59) + { + gSaveBlock2Ptr->playTimeVBlanks = 0; + gSaveBlock2Ptr->playTimeSeconds++; + if (gSaveBlock2Ptr->playTimeSeconds > 59) + { + gSaveBlock2Ptr->playTimeSeconds = 0; + gSaveBlock2Ptr->playTimeMinutes++; + if (gSaveBlock2Ptr->playTimeMinutes > 59) + { + gSaveBlock2Ptr->playTimeMinutes = 0; + gSaveBlock2Ptr->playTimeHours++; + if (gSaveBlock2Ptr->playTimeHours > 999) + PlayTimeCounter_SetToMax(); + } + } + } + } +} + +void PlayTimeCounter_SetToMax(void) +{ + sPlayTimeCounterState = MAXED_OUT; + gSaveBlock2Ptr->playTimeHours = 999; + gSaveBlock2Ptr->playTimeMinutes = 59; + gSaveBlock2Ptr->playTimeSeconds = 59; + gSaveBlock2Ptr->playTimeVBlanks = 59; +} diff --git a/sym_bss.txt b/sym_bss.txt index 603da6ddb..efe0940fa 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -65,9 +65,8 @@ gUnknown_3000E6C: @ 3000E6C gUnknown_3000E78: @ 3000E78 .space 0x4 -gUnknown_3000E7C: @ 3000E7C - .space 0x4 - + .include "src/play_time.o" + .align 2 gUnknown_3000E80: @ 3000E80 .space 0x4