From d413187fa82e19ceea5ff1b2437891329781a814 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Aug 2017 11:07:23 +0200 Subject: start decompiling egg hatch --- src/egg_hatch.c | 571 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 570 insertions(+), 1 deletion(-) (limited to 'src/egg_hatch.c') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 32fbe1547..70d206a06 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -1,7 +1,38 @@ #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 "rom4.h" +#include "main.h" +#include "event_data.h" +#include "sound.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" -void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { +extern u8 gStringVar1[]; +extern u8 ewram[]; +extern struct SpriteTemplate gUnknown_02024E8C; + +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); + +void Task_EggHatch(u8 taskID); +void CB2_EggHatch_0(void); + +void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) +{ u16 species; u32 personality, pokerus; u8 i, friendship, language, gameMet, markings; @@ -50,3 +81,541 @@ void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { *egg = *temp; } + +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, &ball); + + caughtLvl = 0; + SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl); + + mapNameID = sav1_map_get_name(); + SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); + + MonRestorePP(mon); + CalculateMonStats(mon); +} + +void ScriptHatchMon(void) +{ + AddHatchedMonToParty(gSpecialVar_0x8004); +} + +__attribute__((naked)) +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"); +} + +bool8 sub_8042B4C(void) +{ + return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004); +} + +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; +} + +void VBlankCB_EggHatch(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void EggHatch(void) +{ + ScriptContext2_Enable(); + CreateTask(Task_EggHatch, 10); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); +} + +void Task_EggHatch(u8 taskID) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_EggHatch_0); + gFieldCallback = sub_8080990; + DestroyTask(taskID); + } +} + +void CB2_EggHatch_1(void); + +struct Struct_2018000 +{ + u8 eggSpriteID; + u8 pokeSpriteID; + u8 field_2; + u8 field_3; + u8 eggPartyID; + u8 field_5; + u8 field_6; + u8 field_7; + struct Window window; + u8 field_38; + u8 field_39; + u8 field_3A; +}; + +extern struct Struct_2018000* gUnknown_0300481C; +extern const u32 gUnknown_08D00000[]; +extern const u32 gUnknown_08D00524[]; +extern const u32 gUnknown_0820CA98[]; +extern const u32 gUnknown_0820F798[]; +extern const u16 gUnknown_08D004E0[]; //palette + +extern const u16 gUnknown_0820C9F8[]; //palette + +extern const struct SpriteSheet gUnknown_0820A3B0; +extern const struct SpriteSheet gUnknown_0820A3B8; +extern const struct SpritePalette gUnknown_0820A3C0; + +extern const struct SpriteTemplate gSpriteTemplate_820A3C8; + +void CB2_EggHatch_0(void) +{ + switch (gMain.state) + { + case 0: + REG_DISPCNT = 0; + gUnknown_0300481C = (struct Struct_2018000*)(&ewram[0x18000]); + gUnknown_0300481C->eggPartyID = gSpecialVar_0x8004; + gUnknown_0300481C->field_3A = 0; + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_EggHatch); + gMain.state++; + gSpecialVar_0x8005 = GetCurrentMapMusic(); + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6F84); + InitWindowFromConfig(&gUnknown_0300481C->window, &gWindowConfig_81E6F84); + gUnknown_0300481C->field_38 = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&gUnknown_0300481C->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(&gUnknown_0820A3B0); + LoadSpriteSheet(&gUnknown_0820A3B8); + LoadSpritePalette(&gUnknown_0820A3C0); + gMain.state++; + break; + case 4: + gUnknown_0300481C->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + AddHatchedMonToParty(gUnknown_0300481C->eggPartyID); + gMain.state++; + break; + case 5: + EggHatchCreateMonSprite(0, 0, gUnknown_0300481C->eggPartyID); + gMain.state++; + break; + case 6: + gUnknown_0300481C->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gUnknown_0300481C->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); + gUnknown_0300481C->field_2 = 0; + break; + } +} + +void EggHatchSetMonNickname(void) +{ + SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); + SetMainCallback2(c2_exit_to_overworld_2_switch); +} + +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]++; +} + +void SpriteCB_Egg_0(struct Sprite* sprite); +void SpriteCB_Egg_1(struct Sprite* sprite); +void SpriteCB_Egg_2(struct Sprite* sprite); +void SpriteCB_Egg_3(struct Sprite* sprite); +void SpriteCB_Egg_4(struct Sprite* sprite); +void SpriteCB_Egg_5(struct Sprite* sprite); + +void EggHatchPrintMessage2(u8* src); +void EggHatchPrintMessage1(u8* src); +bool8 EggHatchUpdateWindowText(void); +void CreateRandomEggShardSprite(void); + +void CB2_EggHatch_1(void) +{ + switch (gUnknown_0300481C->field_2) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + REG_DISPCNT = 0x1740; + gUnknown_0300481C->field_2++; + CreateTask(Task_EggHatchPlayBGM, 5); + break; + case 1: + if (!gPaletteFade.active) + { + gUnknown_0300481C->field_3 = 0; + gUnknown_0300481C->field_2++; + } + break; + case 2: + if (++gUnknown_0300481C->field_3 > 30) + { + gUnknown_0300481C->field_2++; + gSprites[gUnknown_0300481C->eggSpriteID].callback = SpriteCB_Egg_0; + } + break; + case 3: + if (gSprites[gUnknown_0300481C->eggSpriteID].callback == SpriteCallbackDummy) + gUnknown_0300481C->field_2++; + break; + case 4: + GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg); + EggHatchPrintMessage2(gStringVar4); + PlayFanfare(371); + gUnknown_0300481C->field_2++; + break; + case 5: + if (IsFanfareTaskInactive()) + gUnknown_0300481C->field_2++; + break; + case 6: + if (IsFanfareTaskInactive()) + gUnknown_0300481C->field_2++; + break; + case 7: + GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt); + EggHatchPrintMessage1(gStringVar4); + gUnknown_0300481C->field_2++; + break; + case 8: + if (EggHatchUpdateWindowText()) + { + MenuDrawTextWindow(22, 8, 27, 13); + InitYesNoMenu(22, 8, 4); + gUnknown_0300481C->field_2++; + } + break; + case 9: + { + s8 menuInput; + if ((menuInput = ProcessMenuInputNoWrap_()) != -2) + { + if (menuInput != -1 && menuInput != 1) + { + u16 species; + u8 gender; + u32 personality; + + GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar3); + species = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); + gender = GetMonGender(&gPlayerParty[gUnknown_0300481C->eggPartyID]); + personality = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_PERSONALITY, 0); + DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); + } + else + gUnknown_0300481C->field_2++; + } + } + break; + case 10: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gUnknown_0300481C->field_2++; + break; + case 11: + if (!gPaletteFade.active) + SetMainCallback2(c2_exit_to_overworld_2_switch); + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +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(23); + StartSpriteAnim(sprite, 1); + CreateRandomEggShardSprite(); + } + } +} + +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(23); + StartSpriteAnim(sprite, 2); + } + } + } +} + +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[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); + gSprites[gUnknown_0300481C->pokeSpriteID].pos2.x = 0; + gSprites[gUnknown_0300481C->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(23); + StartSpriteAnim(sprite, 2); + CreateRandomEggShardSprite(); + CreateRandomEggShardSprite(); + } + if (sprite->data0 == 30) + PlaySE(23); + } + } +} + +void SpriteCB_Egg_3(struct Sprite* sprite) +{ + if (++sprite->data0 > 50) + { + sprite->callback = SpriteCB_Egg_4; + sprite->data0 = 0; + } +} + +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(113); + sprite->invisible = 1; + sprite->callback = SpriteCB_Egg_5; + sprite->data0 = 0; + } +} -- cgit v1.2.3 From f246b05d996dba1249393e9219f0c32337feac02 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Aug 2017 12:47:03 +0200 Subject: finish up egg hatch, make it compile --- src/egg_hatch.c | 265 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 167 insertions(+), 98 deletions(-) (limited to 'src/egg_hatch.c') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 70d206a06..f518fdb84 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -17,21 +17,61 @@ #include "menu.h" #include "naming_screen.h" #include "trig.h" +#include "rng.h" -extern u8 gStringVar1[]; 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; +}; + +extern struct EggHatchData* sEggHatchData; + +extern const u32 gUnknown_08D00000[]; +extern const u32 gUnknown_08D00524[]; +extern const u32 gUnknown_0820CA98[]; +extern const u32 gUnknown_0820F798[]; +extern const u16 gUnknown_08D004E0[]; //palette +extern const u16 gUnknown_0820C9F8[]; //palette +extern const struct SpriteSheet gUnknown_0820A3B0; +extern const struct SpriteSheet gUnknown_0820A3B8; +extern const struct SpritePalette gUnknown_0820A3C0; +extern const struct SpriteTemplate gSpriteTemplate_820A3C8; +extern const struct SpriteTemplate gSpriteTemplate_820A418; +extern const s16 gEggShardVelocities[][2]; + 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); -void Task_EggHatch(u8 taskID); -void CB2_EggHatch_0(void); - -void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) +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 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); + +static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; @@ -82,7 +122,7 @@ void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) *egg = *temp; } -void AddHatchedMonToParty(u8 id) +static void AddHatchedMonToParty(u8 id) { u8 isEgg; u16 pokeNum; @@ -107,10 +147,10 @@ void AddHatchedMonToParty(u8 id) GetMonNick(mon, gStringVar1); ball = ITEM_POKE_BALL; - SetMonData(mon, MON_DATA_POKEBALL, &ball); + SetMonData(mon, MON_DATA_POKEBALL, (const u8*) &ball); caughtLvl = 0; - SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl); + SetMonData(mon, MON_DATA_MET_LEVEL, (const u8*) &caughtLvl); mapNameID = sav1_map_get_name(); SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); @@ -124,8 +164,15 @@ void ScriptHatchMon(void) AddHatchedMonToParty(gSpecialVar_0x8004); } +#ifdef NONMATCHING +static bool8 sub_8042ABC(void* a, u8 b) +{ + +} + +#else __attribute__((naked)) -bool8 sub_8042ABC(void* a, u8 b) +static bool8 sub_8042ABC(void* a, u8 b) { asm(".syntax unified\n\ push {r4-r6,lr}\n\ @@ -194,12 +241,14 @@ _08042B42:\n\ .syntax divided"); } +#endif // NONMATCHING + bool8 sub_8042B4C(void) { return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004); } -u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) +static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) { u8 r5 = 0; u8 spriteID = 0; @@ -235,7 +284,7 @@ u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) return spriteID; } -void VBlankCB_EggHatch(void) +static void VBlankCB_EggHatch(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -249,7 +298,7 @@ void EggHatch(void) BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); } -void Task_EggHatch(u8 taskID) +static void Task_EggHatch(u8 taskID) { if (!gPaletteFade.active) { @@ -259,48 +308,15 @@ void Task_EggHatch(u8 taskID) } } -void CB2_EggHatch_1(void); - -struct Struct_2018000 -{ - u8 eggSpriteID; - u8 pokeSpriteID; - u8 field_2; - u8 field_3; - u8 eggPartyID; - u8 field_5; - u8 field_6; - u8 field_7; - struct Window window; - u8 field_38; - u8 field_39; - u8 field_3A; -}; - -extern struct Struct_2018000* gUnknown_0300481C; -extern const u32 gUnknown_08D00000[]; -extern const u32 gUnknown_08D00524[]; -extern const u32 gUnknown_0820CA98[]; -extern const u32 gUnknown_0820F798[]; -extern const u16 gUnknown_08D004E0[]; //palette - -extern const u16 gUnknown_0820C9F8[]; //palette - -extern const struct SpriteSheet gUnknown_0820A3B0; -extern const struct SpriteSheet gUnknown_0820A3B8; -extern const struct SpritePalette gUnknown_0820A3C0; - -extern const struct SpriteTemplate gSpriteTemplate_820A3C8; - void CB2_EggHatch_0(void) { switch (gMain.state) { case 0: REG_DISPCNT = 0; - gUnknown_0300481C = (struct Struct_2018000*)(&ewram[0x18000]); - gUnknown_0300481C->eggPartyID = gSpecialVar_0x8004; - gUnknown_0300481C->field_3A = 0; + sEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); + sEggHatchData->eggPartyID = gSpecialVar_0x8004; + sEggHatchData->eggShardVelocityID = 0; ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -310,9 +326,9 @@ void CB2_EggHatch_0(void) break; case 1: SetUpWindowConfig(&gWindowConfig_81E6F84); - InitWindowFromConfig(&gUnknown_0300481C->window, &gWindowConfig_81E6F84); - gUnknown_0300481C->field_38 = SetTextWindowBaseTileNum(20); - LoadTextWindowGraphics(&gUnknown_0300481C->window); + InitWindowFromConfig(&sEggHatchData->window, &gWindowConfig_81E6F84); + sEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&sEggHatchData->window); gMain.state++; break; case 2: @@ -329,16 +345,16 @@ void CB2_EggHatch_0(void) gMain.state++; break; case 4: - gUnknown_0300481C->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); - AddHatchedMonToParty(gUnknown_0300481C->eggPartyID); + sEggHatchData->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + AddHatchedMonToParty(sEggHatchData->eggPartyID); gMain.state++; break; case 5: - EggHatchCreateMonSprite(0, 0, gUnknown_0300481C->eggPartyID); + EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID); gMain.state++; break; case 6: - gUnknown_0300481C->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gUnknown_0300481C->eggPartyID); + sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID); gMain.state++; break; case 7: @@ -385,7 +401,7 @@ void CB2_EggHatch_0(void) REG_BG2VOFS = 0; SetMainCallback2(CB2_EggHatch_1); - gUnknown_0300481C->field_2 = 0; + sEggHatchData->CB2_state = 0; break; } } @@ -411,73 +427,61 @@ void Task_EggHatchPlayBGM(u8 taskID) gTasks[taskID].data[0]++; } -void SpriteCB_Egg_0(struct Sprite* sprite); -void SpriteCB_Egg_1(struct Sprite* sprite); -void SpriteCB_Egg_2(struct Sprite* sprite); -void SpriteCB_Egg_3(struct Sprite* sprite); -void SpriteCB_Egg_4(struct Sprite* sprite); -void SpriteCB_Egg_5(struct Sprite* sprite); - -void EggHatchPrintMessage2(u8* src); -void EggHatchPrintMessage1(u8* src); -bool8 EggHatchUpdateWindowText(void); -void CreateRandomEggShardSprite(void); - void CB2_EggHatch_1(void) { - switch (gUnknown_0300481C->field_2) + switch (sEggHatchData->CB2_state) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); REG_DISPCNT = 0x1740; - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; CreateTask(Task_EggHatchPlayBGM, 5); break; case 1: if (!gPaletteFade.active) { - gUnknown_0300481C->field_3 = 0; - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_PalCounter = 0; + sEggHatchData->CB2_state++; } break; case 2: - if (++gUnknown_0300481C->field_3 > 30) + if (++sEggHatchData->CB2_PalCounter > 30) { - gUnknown_0300481C->field_2++; - gSprites[gUnknown_0300481C->eggSpriteID].callback = SpriteCB_Egg_0; + sEggHatchData->CB2_state++; + gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; } break; case 3: - if (gSprites[gUnknown_0300481C->eggSpriteID].callback == SpriteCallbackDummy) - gUnknown_0300481C->field_2++; + if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) + sEggHatchData->CB2_state++; break; case 4: - GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg); EggHatchPrintMessage2(gStringVar4); PlayFanfare(371); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 5: if (IsFanfareTaskInactive()) - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 6: if (IsFanfareTaskInactive()) - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 7: - GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt); EggHatchPrintMessage1(gStringVar4); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 8: if (EggHatchUpdateWindowText()) { MenuDrawTextWindow(22, 8, 27, 13); InitYesNoMenu(22, 8, 4); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; } break; case 9: @@ -491,20 +495,20 @@ void CB2_EggHatch_1(void) u8 gender; u32 personality; - GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar3); - species = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); - gender = GetMonGender(&gPlayerParty[gUnknown_0300481C->eggPartyID]); - personality = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_PERSONALITY, 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); } else - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; } } break; case 10: BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 11: if (!gPaletteFade.active) @@ -517,7 +521,7 @@ void CB2_EggHatch_1(void) UpdatePaletteFade(); } -void SpriteCB_Egg_0(struct Sprite* sprite) +static void SpriteCB_Egg_0(struct Sprite* sprite) { if (++sprite->data0 > 20) { @@ -537,7 +541,7 @@ void SpriteCB_Egg_0(struct Sprite* sprite) } } -void SpriteCB_Egg_1(struct Sprite* sprite) +static void SpriteCB_Egg_1(struct Sprite* sprite) { if (++sprite->data2 > 30) { @@ -560,7 +564,7 @@ void SpriteCB_Egg_1(struct Sprite* sprite) } } -void SpriteCB_Egg_2(struct Sprite* sprite) +static void SpriteCB_Egg_2(struct Sprite* sprite) { if (++sprite->data2 > 30) { @@ -570,9 +574,9 @@ void SpriteCB_Egg_2(struct Sprite* sprite) sprite->callback = SpriteCB_Egg_3; sprite->data0 = 0; - species = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); - gSprites[gUnknown_0300481C->pokeSpriteID].pos2.x = 0; - gSprites[gUnknown_0300481C->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; + species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); + gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; + gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; } else { @@ -591,7 +595,7 @@ void SpriteCB_Egg_2(struct Sprite* sprite) } } -void SpriteCB_Egg_3(struct Sprite* sprite) +static void SpriteCB_Egg_3(struct Sprite* sprite) { if (++sprite->data0 > 50) { @@ -600,7 +604,7 @@ void SpriteCB_Egg_3(struct Sprite* sprite) } } -void SpriteCB_Egg_4(struct Sprite* sprite) +static void SpriteCB_Egg_4(struct Sprite* sprite) { s16 i; if (sprite->data0 == 0) @@ -619,3 +623,68 @@ void SpriteCB_Egg_4(struct Sprite* sprite) sprite->data0 = 0; } } + +static void SpriteCB_Egg_5(struct Sprite* sprite) +{ + if (sprite->data0 == 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) + gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1; + if (sprite->data0 > 40) + sprite->callback = SpriteCallbackDummy; + sprite->data0++; +} + +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); +} + +static void CreateRandomEggShardSprite(void) +{ + u16 spriteAnimIndex; + + s16 velocity1 = gEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; + s16 velocity2 = gEggShardVelocities[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(&gSpriteTemplate_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(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); +} + +static void EggHatchPrintMessage2(u8* src) +{ + sub_8003460(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); +} + +static bool8 EggHatchUpdateWindowText(void) +{ + return sub_80035AC(&sEggHatchData->window); +} -- cgit v1.2.3 From b14554c6ae23dfd1f1a8e1f3d3fc486fc9158a66 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Aug 2017 15:21:54 +0200 Subject: move data to C --- src/egg_hatch.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 191 insertions(+), 18 deletions(-) (limited to 'src/egg_hatch.c') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index f518fdb84..45021d3e4 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -43,12 +43,9 @@ extern const u32 gUnknown_0820CA98[]; extern const u32 gUnknown_0820F798[]; extern const u16 gUnknown_08D004E0[]; //palette extern const u16 gUnknown_0820C9F8[]; //palette -extern const struct SpriteSheet gUnknown_0820A3B0; -extern const struct SpriteSheet gUnknown_0820A3B8; -extern const struct SpritePalette gUnknown_0820A3C0; -extern const struct SpriteTemplate gSpriteTemplate_820A3C8; -extern const struct SpriteTemplate gSpriteTemplate_820A418; -extern const s16 gEggShardVelocities[][2]; +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); @@ -65,12 +62,162 @@ 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; @@ -308,7 +455,7 @@ static void Task_EggHatch(u8 taskID) } } -void CB2_EggHatch_0(void) +static void CB2_EggHatch_0(void) { switch (gMain.state) { @@ -339,13 +486,13 @@ void CB2_EggHatch_0(void) gMain.state++; break; case 3: - LoadSpriteSheet(&gUnknown_0820A3B0); - LoadSpriteSheet(&gUnknown_0820A3B8); - LoadSpritePalette(&gUnknown_0820A3C0); + LoadSpriteSheet(&sUnknown_0820A3B0); + LoadSpriteSheet(&sUnknown_0820A3B8); + LoadSpritePalette(&sUnknown_0820A3C0); gMain.state++; break; case 4: - sEggHatchData->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5); AddHatchedMonToParty(sEggHatchData->eggPartyID); gMain.state++; break; @@ -406,13 +553,13 @@ void CB2_EggHatch_0(void) } } -void EggHatchSetMonNickname(void) +static void EggHatchSetMonNickname(void) { SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); SetMainCallback2(c2_exit_to_overworld_2_switch); } -void Task_EggHatchPlayBGM(u8 taskID) +static void Task_EggHatchPlayBGM(u8 taskID) { if (gTasks[taskID].data[0] == 0) StopMapMusic(); @@ -427,7 +574,7 @@ void Task_EggHatchPlayBGM(u8 taskID) gTasks[taskID].data[0]++; } -void CB2_EggHatch_1(void) +static void CB2_EggHatch_1(void) { switch (sEggHatchData->CB2_state) { @@ -640,7 +787,7 @@ static void SpriteCB_Egg_5(struct Sprite* sprite) sprite->data0++; } -void SpriteCB_EggShard(struct Sprite* sprite) +static void SpriteCB_EggShard(struct Sprite* sprite) { sprite->data4 += sprite->data1; sprite->data5 += sprite->data2; @@ -654,12 +801,38 @@ void SpriteCB_EggShard(struct Sprite* sprite) 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 = gEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = gEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; + s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; + s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; sEggHatchData->eggShardVelocityID++; spriteAnimIndex = Random() % 4; CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); @@ -667,7 +840,7 @@ static void CreateRandomEggShardSprite(void) static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) { - u8 spriteID = CreateSprite(&gSpriteTemplate_820A418, x, y, 4); + u8 spriteID = CreateSprite(&sSpriteTemplate_820A418, x, y, 4); gSprites[spriteID].data1 = data1; gSprites[spriteID].data2 = data2; gSprites[spriteID].data3 = data3; -- cgit v1.2.3 From acecf4fdb5bac6774c1bd5c77ee41a4269f023ef Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 7 Aug 2017 18:13:20 +0200 Subject: SE enums and egg hatch common sym --- src/egg_hatch.c | 103 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 51 deletions(-) (limited to 'src/egg_hatch.c') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 45021d3e4..2b68d83e8 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -10,6 +10,7 @@ #include "main.h" #include "event_data.h" #include "sound.h" +#include "songs.h" #include "text.h" #include "text_window.h" #include "string_util.h" @@ -35,7 +36,7 @@ struct EggHatchData u8 eggShardVelocityID; }; -extern struct EggHatchData* sEggHatchData; +struct EggHatchData* gEggHatchData; extern const u32 gUnknown_08D00000[]; extern const u32 gUnknown_08D00524[]; @@ -461,9 +462,9 @@ static void CB2_EggHatch_0(void) { case 0: REG_DISPCNT = 0; - sEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); - sEggHatchData->eggPartyID = gSpecialVar_0x8004; - sEggHatchData->eggShardVelocityID = 0; + gEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); + gEggHatchData->eggPartyID = gSpecialVar_0x8004; + gEggHatchData->eggShardVelocityID = 0; ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -473,9 +474,9 @@ static void CB2_EggHatch_0(void) break; case 1: SetUpWindowConfig(&gWindowConfig_81E6F84); - InitWindowFromConfig(&sEggHatchData->window, &gWindowConfig_81E6F84); - sEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20); - LoadTextWindowGraphics(&sEggHatchData->window); + InitWindowFromConfig(&gEggHatchData->window, &gWindowConfig_81E6F84); + gEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&gEggHatchData->window); gMain.state++; break; case 2: @@ -492,16 +493,16 @@ static void CB2_EggHatch_0(void) gMain.state++; break; case 4: - sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5); - AddHatchedMonToParty(sEggHatchData->eggPartyID); + gEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + AddHatchedMonToParty(gEggHatchData->eggPartyID); gMain.state++; break; case 5: - EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID); + EggHatchCreateMonSprite(0, 0, gEggHatchData->eggPartyID); gMain.state++; break; case 6: - sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID); + gEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gEggHatchData->eggPartyID); gMain.state++; break; case 7: @@ -548,7 +549,7 @@ static void CB2_EggHatch_0(void) REG_BG2VOFS = 0; SetMainCallback2(CB2_EggHatch_1); - sEggHatchData->CB2_state = 0; + gEggHatchData->CB2_state = 0; break; } } @@ -576,59 +577,59 @@ static void Task_EggHatchPlayBGM(u8 taskID) static void CB2_EggHatch_1(void) { - switch (sEggHatchData->CB2_state) + switch (gEggHatchData->CB2_state) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); REG_DISPCNT = 0x1740; - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; CreateTask(Task_EggHatchPlayBGM, 5); break; case 1: if (!gPaletteFade.active) { - sEggHatchData->CB2_PalCounter = 0; - sEggHatchData->CB2_state++; + gEggHatchData->CB2_PalCounter = 0; + gEggHatchData->CB2_state++; } break; case 2: - if (++sEggHatchData->CB2_PalCounter > 30) + if (++gEggHatchData->CB2_PalCounter > 30) { - sEggHatchData->CB2_state++; - gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; + gEggHatchData->CB2_state++; + gSprites[gEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; } break; case 3: - if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) - sEggHatchData->CB2_state++; + if (gSprites[gEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) + gEggHatchData->CB2_state++; break; case 4: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg); EggHatchPrintMessage2(gStringVar4); PlayFanfare(371); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 5: if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 6: if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 7: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt); EggHatchPrintMessage1(gStringVar4); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 8: if (EggHatchUpdateWindowText()) { MenuDrawTextWindow(22, 8, 27, 13); InitYesNoMenu(22, 8, 4); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; } break; case 9: @@ -642,20 +643,20 @@ static void CB2_EggHatch_1(void) u8 gender; u32 personality; - 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); + 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 - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; } } break; case 10: BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 11: if (!gPaletteFade.active) @@ -681,7 +682,7 @@ static void SpriteCB_Egg_0(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1, 1); if (sprite->data0 == 15) { - PlaySE(23); + PlaySE(SE_BOWA); StartSpriteAnim(sprite, 1); CreateRandomEggShardSprite(); } @@ -704,7 +705,7 @@ static void SpriteCB_Egg_1(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1, 2); if (sprite->data0 == 15) { - PlaySE(23); + PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); } } @@ -721,9 +722,9 @@ static void SpriteCB_Egg_2(struct Sprite* sprite) sprite->callback = SpriteCB_Egg_3; sprite->data0 = 0; - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; - gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; + species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES); + gSprites[gEggHatchData->pokeSpriteID].pos2.x = 0; + gSprites[gEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; } else { @@ -731,13 +732,13 @@ static void SpriteCB_Egg_2(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1, 2); if (sprite->data0 == 15) { - PlaySE(23); + PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); CreateRandomEggShardSprite(); CreateRandomEggShardSprite(); } if (sprite->data0 == 30) - PlaySE(23); + PlaySE(SE_BOWA); } } } @@ -764,7 +765,7 @@ static void SpriteCB_Egg_4(struct Sprite* sprite) sprite->data0++; if (!gPaletteFade.active) { - PlaySE(113); + PlaySE(SE_TAMAGO); sprite->invisible = 1; sprite->callback = SpriteCB_Egg_5; sprite->data0 = 0; @@ -775,13 +776,13 @@ static void SpriteCB_Egg_5(struct Sprite* sprite) { if (sprite->data0 == 0) { - gSprites[sEggHatchData->pokeSpriteID].invisible = 0; - StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1); + 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[sEggHatchData->pokeSpriteID].pos1.y -= 1; + gSprites[gEggHatchData->pokeSpriteID].pos1.y -= 1; if (sprite->data0 > 40) sprite->callback = SpriteCallbackDummy; sprite->data0++; @@ -831,9 +832,9 @@ static void CreateRandomEggShardSprite(void) { u16 spriteAnimIndex; - s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; - sEggHatchData->eggShardVelocityID++; + s16 velocity1 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][0]; + s16 velocity2 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][1]; + gEggHatchData->eggShardVelocityID++; spriteAnimIndex = Random() % 4; CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); } @@ -849,15 +850,15 @@ static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 static void EggHatchPrintMessage1(u8* src) { - sub_8002EB0(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); + sub_8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); } static void EggHatchPrintMessage2(u8* src) { - sub_8003460(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); + sub_8003460(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); } static bool8 EggHatchUpdateWindowText(void) { - return sub_80035AC(&sEggHatchData->window); + return sub_80035AC(&gEggHatchData->window); } -- cgit v1.2.3