diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2017-08-27 14:00:07 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2017-08-27 14:00:07 +0200 |
commit | d4a7bcf4808f94e6d961d7788330ce8842d7cf97 (patch) | |
tree | 5de6a236ac95a265c2a9e1cdb2b3d3d6f4a9dc64 /src | |
parent | a458401c7050834326e98cf739ff29fed461d542 (diff) |
halfway there, two important functions done
Diffstat (limited to 'src')
-rw-r--r-- | src/evolution_scene.c | 488 | ||||
-rw-r--r-- | src/pokemon_3.c | 2 |
2 files changed, 437 insertions, 53 deletions
diff --git a/src/evolution_scene.c b/src/evolution_scene.c index dff128236..77054c233 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -21,6 +21,8 @@ #include "rom4.h" #include "battle_message.h" #include "pokemon_summary_screen.h" +#include "menu_cursor.h" +#include "strings2.h" struct EvoInfo { @@ -36,7 +38,10 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); void sub_8024CEC(void); void sub_8023A80(void); void sub_802BC6C(void); +void sub_8023AD8(void); +void sub_81150D8(void); void nullsub_6(void); +bool32 IsHMMove2(u16 move); extern struct Window gUnknown_03004210; extern u16 gUnknown_030042A4; @@ -58,6 +63,8 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gUnk_2009000[]; // won't match if I 'ewram' it extern bool8 gAffineAnimsDisabled; extern MainCallback gUnknown_03005E94; +extern u8 gDisplayedStringBattle[]; +extern u8 gBattleTextBuff2[]; extern u8 gBattleCommunication[]; #define sEvoCursorPos gBattleCommunication[1] // when learning a new move @@ -72,6 +79,7 @@ void VBlankCB_TradeEvolutionScene(void); void HBlankCB_EvolutionScene(void); void CB2_EvolutionSceneUpdate(void); void CB2_TradeEvolutionSceneUpdate(void); +void HBlankCB_TradeEvolutionScene(void); void CB2_BeginEvolutionScene(void) { @@ -87,14 +95,14 @@ void CB2_BeginEvolutionScene(void) #define tCanStop data[5] // in first fast data[5] only checks that #define tBits data[5] // in the second task, it works as a bitfield #define tData6 data[6] -#define tData8 data[8] +#define tLearnMoveState data[8] #define tData9 data[9] #define tData10 data[10] #define tEvoWasStopped data[11] #define tPartyID data[12] #define TASK_BIT_CAN_STOP 0x1 -#define TASK_BIT_x80 0x80 +#define TASK_BIT_LEARN_MOVE 0x80 void Task_BeginEvolutionScene(u8 taskID) { @@ -501,10 +509,11 @@ extern const u8 gUnknown_08400C8D[]; void Task_EvolutionScene(u8 taskID) { + u32 var; struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); // check if B Button was held, so the evolution gets stopped - if (gMain.newAndRepeatedKeys == B_BUTTON && gTasks[taskID].tState != 8 && gTasks[taskID].tBits & TASK_BIT_CAN_STOP) + if (gMain.heldKeys == B_BUTTON && gTasks[taskID].tState == 8 && gTasks[taskID].tBits & TASK_BIT_CAN_STOP) { gTasks[taskID].tState = 16; if (gTasks[sEvoGraphicsTaskID].isActive) @@ -517,7 +526,7 @@ void Task_EvolutionScene(u8 taskID) gSprites[sEvoInfo.preEvoSpriteID].invisible = 0; gTasks[taskID].tState++; break; - case 1: + case 1: // print 'whoa, poke is evolving!!!' msg if (!gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A); @@ -525,36 +534,36 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState++; } break; - case 2: + case 2: // wait for string, play cry if (gUnknown_03004210.state == 0) { PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); gTasks[taskID].tState++; } break; - case 3: - if (IsCryFinished) + case 3: // wait for cry, play tu du SE + if (IsCryFinished()) { PlaySE(BGM_ME_SHINKA); gTasks[taskID].tState++; } break; - case 4: - if (!IsSEPlaying) + case 4: // play evolution music and fade screen black + if (!IsSEPlaying()) { PlayNewMapMusic(BGM_SHINKA); gTasks[taskID].tState++; BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0); } break; - case 5: + case 5: // after screen fade, preapre evo sparkles if (!gPaletteFade.active) { sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17); gTasks[taskID].tState++; } break; - case 6: + case 6: // another set of evo sparkles if (!gTasks[sEvoGraphicsTaskID].isActive) { gTasks[taskID].tState++; @@ -562,14 +571,14 @@ void Task_EvolutionScene(u8 taskID) sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); } break; - case 7: + case 7: // launch task that flashes pre evo with post evo sprites if (!gTasks[sEvoGraphicsTaskID].isActive) { sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); gTasks[taskID].tState++; } break; - case 8: + case 8: // wait for the above task to finish if (--sEvoInfo.field_3 == 0) { sEvoInfo.field_3 = 3; @@ -577,7 +586,7 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState++; } break; - case 9: + case 9: // post evo sparkles sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1(); gTasks[taskID].tState++; break; @@ -588,25 +597,25 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState++; } break; - case 11: + case 11: // play tu du sound after evolution if (!gTasks[sEvoGraphicsTaskID].isActive) { PlaySE(SE_EXP); gTasks[taskID].tState++; } break; - case 12: - if (!IsSEPlaying) + case 12: // play poke cry after evolution and return screed to pre-fade state + if (IsSEPlaying()) { m4aMPlayAllStop(); PlayCry1(gTasks[taskID].tPostEvoSpecies, 0); memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60); - BeginNormalPaletteFade(0x1C, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0x1C, 0, 0x10, 0, 0); gTasks[taskID].tState++; } break; - case 13: - if (IsCryFinished && !gPaletteFade.active) + case 13: // congratulations string and rename prompt + if (IsCryFinished() && !gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, gUnknown_08400C60); sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); @@ -620,27 +629,28 @@ void Task_EvolutionScene(u8 taskID) IncrementGameStat(14); } break; - case 14: + case 14: // check if it wants to learn a new move if (gUnknown_03004210.state == 0) { - u16 var = sub_803B7C8(mon, gTasks[taskID].tData6); + var = sub_803B7C8(mon, gTasks[taskID].tData6); if (var != 0 && !gTasks[taskID].tEvoWasStopped) { - u8 text[11]; + u8 text[20]; - gTasks[taskID].tBits |= TASK_BIT_x80; + sub_8053E90(); + gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskID].tData6 = 0; - gTasks[taskID].tData8 = 0; + gTasks[taskID].tLearnMoveState = 0; GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); - if (var == 0xFFFF) + if (var == 0xFFFF) // no place to learn it gTasks[taskID].tState = 21; - else if (var == 0xFFFE) + else if (var == 0xFFFE) // it already knows that move break; else - gTasks[taskID].tState = 19; + gTasks[taskID].tState = 19; // has less than 4 moves, so it's been learned } - else + else // no move to learn { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskID].tState++; @@ -650,7 +660,7 @@ void Task_EvolutionScene(u8 taskID) case 15: // task has finished, return if (!gPaletteFade.active) { - if (!(gTasks[taskID].tBits & TASK_BIT_x80)) + if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE)) sub_8053E90(); if (!gTasks[taskID].tEvoWasStopped) CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon); @@ -658,7 +668,7 @@ void Task_EvolutionScene(u8 taskID) SetMainCallback2(gUnknown_03005E94); } break; - case 16: // evolution has been canceled + case 16: // evolution has been canceled, stop music and re-fade palette if (!gTasks[sEvoGraphicsTaskID].isActive) { m4aMPlayAllStop(); @@ -674,7 +684,7 @@ void Task_EvolutionScene(u8 taskID) } break; case 18: // after the cry, print the string 'WHOA IT DID NOT EVOLVE!!!' - if (IsCryFinished) + if (IsCryFinished()) { StringExpandPlaceholders(gStringVar4, gUnknown_08400C8D); sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); @@ -682,39 +692,39 @@ void Task_EvolutionScene(u8 taskID) gTasks[taskID].tState = 14; } break; - case 19: // yay, your poke evolved so it would be nice to print a msg that says it + case 19: // pokemon learned a new move, print string and play a fanfare if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { sub_8024CEC(); PlayFanfare(BGM_FANFA1); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData6 = 0x40; gTasks[taskID].tState++; } break; - case 20: + case 20: // wait a bit and check if can learn another move if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tData6 == 0) gTasks[taskID].tState = 14; break; case 21: // try to learn a new move - switch (gTasks[taskID].tData8) + switch (gTasks[taskID].tLearnMoveState) { case 0: if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { sub_8024CEC(); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); - gTasks[taskID].tData8++; + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; } break; case 1: if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); - gTasks[taskID].tData8++; + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; } break; case 2: @@ -723,16 +733,16 @@ void Task_EvolutionScene(u8 taskID) if (!IsSEPlaying()) { StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 5; gTasks[taskID].tData10 = 9; - gTasks[taskID].tData8++; + gTasks[taskID].tLearnMoveState++; } case 3: if (gUnknown_03004210.state == 0 && !IsSEPlaying()) { sub_8023A80(); - gTasks[taskID].tData8++; + gTasks[taskID].tLearnMoveState++; sEvoCursorPos = 0; sub_802BC6C(); } @@ -754,24 +764,26 @@ void Task_EvolutionScene(u8 taskID) } if (gMain.newKeys & A_BUTTON) { + sub_8023AD8(); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) - gTasks[taskID].tData8 = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; else { - gTasks[taskID].tData8 = gTasks[taskID].tData9; - if (gTasks[taskID].tData8 == 5) + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9; + if (gTasks[taskID].tLearnMoveState == 5) BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); } } if (gMain.newKeys & B_BUTTON) { + sub_8023AD8(); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); - sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); - gTasks[taskID].tData8 = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; } break; case 5: @@ -780,19 +792,391 @@ void Task_EvolutionScene(u8 taskID) sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics, word_2024E82); - gTasks[taskID].tData8++; + gTasks[taskID].tLearnMoveState++; } break; case 6: if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate) { - if (sub_809FA30() == 4) - gTasks[taskID].tData8 = 9; + var = sub_809FA30(); // moveID + if (var == 4) + gTasks[taskID].tLearnMoveState = 9; else { + u16 move = GetMonData(mon, var + MON_DATA_MOVE1); + if (IsHMMove2(move)) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState = 11; + } + else + { + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 2; + gBattleTextBuff2[2] = move; + gBattleTextBuff2[3] = (move & 0xFF00) >> 8; + gBattleTextBuff2[4] = EOS; + RemoveMonPPBonus(mon, var); + SetMonMoveSlot(mon, word_2024E82, var); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + } + } + break; + case 7: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 8: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tState = 19; + } + break; + case 9: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tData9 = 10; + gTasks[taskID].tData10 = 0; + gTasks[taskID].tLearnMoveState = 3; + break; + case 10: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + gTasks[taskID].tState = 14; + break; + case 11: + if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + gTasks[taskID].tLearnMoveState = 5; + break; + } + break; + } +} +void Task_TradeEvolutionScene(u8 taskID) +{ + u32 var; + struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10)); + + switch (gTasks[taskID].tState) + { + case 0: + StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A); + sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState++; + break; + case 1: + if (gUnknown_03004828->field_4.state == 0) + { + PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); + gTasks[taskID].tState++; + } + break; + case 2: + if (IsCryFinished()) + { + m4aSongNumStop(BGM_SHINKA); + PlaySE(BGM_ME_SHINKA); + gTasks[taskID].tState++; + } + break; + case 3: + if (!IsSEPlaying()) + { + PlayBGM(BGM_SHINKA); + gTasks[taskID].tState++; + BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0); + } + break; + case 4: + if (!gPaletteFade.active) + { + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP; + sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17); + gTasks[taskID].tState++; + } + break; + case 5: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + gTasks[taskID].tState++; + sEvoInfo.field_3 = 1; + sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2(); + } + break; + case 6: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID); + gTasks[taskID].tState++; + } + break; + case 7: + if (--sEvoInfo.field_3 == 0) + { + sEvoInfo.field_3 = 3; + if (!gTasks[sEvoGraphicsTaskID].isActive) + gTasks[taskID].tState++; + } + break; + case 8: + sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1(); + gTasks[taskID].tState++; + break; + case 9: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet2AndFlash_Trade(gTasks[taskID].tPostEvoSpecies); + gTasks[taskID].tState++; + } + break; + case 10: + if (!gTasks[sEvoGraphicsTaskID].isActive) + { + PlaySE(SE_EXP); + gTasks[taskID].tState++; + } + break; + case 11: + if (IsSEPlaying()) + { + PlayCry1(gTasks[taskID].tPostEvoSpecies, 0); + memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60); + BeginNormalPaletteFade(1, 0, 0x10, 0, 0); + gTasks[taskID].tState++; + } + break; + case 12: + if (IsCryFinished() && !gPaletteFade.active) + { + StringExpandPlaceholders(gStringVar4, gUnknown_08400C60); + sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15); + PlayFanfare(BGM_FANFA5); + gTasks[taskID].tState++; + SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); + CalculateMonStats(mon); + EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies); + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2); + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3); + IncrementGameStat(14); + } + break; + case 13: + if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE) + { + var = sub_803B7C8(mon, gTasks[taskID].tData6); + if (var != 0 && !gTasks[taskID].tEvoWasStopped) + { + u8 text[20]; + + gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; + gTasks[taskID].tData6 = 0; + gTasks[taskID].tLearnMoveState = 0; + GetMonData(mon, MON_DATA_NICKNAME, text); + StringCopy10(gBattleTextBuff1, text); + if (var == 0xFFFF) + gTasks[taskID].tState = 17; + else if (var == 0xFFFE) + break; + else + gTasks[taskID].tState = 15; + } + else + { + PlayBGM(BGM_SHINKA); + sub_8002EB0(&gUnknown_03004828->field_4, gOtherText_LinkStandby2, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState++; + } + } + break; + case 14: + if (gUnknown_03004828->field_4.state == 0) + { + DestroyTask(taskID); + SetMainCallback2(gUnknown_03005E94); + } + break; + case 15: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + sub_8024CEC(); + PlayFanfare(BGM_FANFA1); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tData6 = 0x40; + gTasks[taskID].tState++; + } + break; + case 16: + if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tData6 == 0) + gTasks[taskID].tState = 13; + break; + case 17: + switch (gTasks[taskID].tLearnMoveState) + { + case 0: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + sub_8024CEC(); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 1: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 2: + if (gUnknown_03004828->field_4.state != 0) + break; + if (!IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tData9 = 5; + gTasks[taskID].tData10 = 9; + gTasks[taskID].tLearnMoveState++; + } + case 3: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + DrawTextWindow(&gUnknown_03004828->field_4, 24, 8, 29, 13); + sEvoCursorPos = 0; + InitWindow(&gUnknown_03004828->field_4, gOtherText_YesNoAndPlayer, gUnknown_03004828->field_34 + 128, 25, 9); + sub_8002F44(&gUnknown_03004828->field_4); + sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); + sub_81150D8(); + gTasks[taskID].tLearnMoveState++; + sEvoCursorPos = 0; + } + break; + case 4: + if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0) + { + PlaySE(SE_SELECT); + HBlankCB_TradeEvolutionScene(); + sEvoCursorPos = 0; + sub_81150D8(); + } + if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0) + { + PlaySE(SE_SELECT); + HBlankCB_TradeEvolutionScene(); + sEvoCursorPos = 1; + sub_81150D8(); + } + if (gMain.newKeys & A_BUTTON) + { + ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD); + DestroyMenuCursor(); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + PlaySE(SE_SELECT); + if (sEvoCursorPos != 0) + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + else + { + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9; + if (gTasks[taskID].tLearnMoveState == 5) + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); } } + if (gMain.newKeys & B_BUTTON) + { + ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD); + DestroyMenuCursor(); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + PlaySE(SE_SELECT); + gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + } + break; + case 5: + if (!gPaletteFade.active) + { + sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, + gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics, + word_2024E82); + gTasks[taskID].tLearnMoveState++; + } + break; + case 6: + if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate) + { + var = sub_809FA30(); // moveID + if (var == 4) + gTasks[taskID].tLearnMoveState = 9; + else + { + u16 move = GetMonData(mon, var + MON_DATA_MOVE1); + if (IsHMMove2(move)) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState = 11; + } + else + { + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 2; + gBattleTextBuff2[2] = move; + gBattleTextBuff2[3] = (move & 0xFF00) >> 8; + gBattleTextBuff2[4] = EOS; + RemoveMonPPBonus(mon, var); + SetMonMoveSlot(mon, word_2024E82, var); + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + } + } + break; + case 7: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tLearnMoveState++; + } + break; + case 8: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + { + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState = 15; + } + break; + case 9: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tData9 = 10; + gTasks[taskID].tData10 = 0; + gTasks[taskID].tLearnMoveState = 3; + break; + case 10: + StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]); + sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); + gTasks[taskID].tState = 13; + break; + case 11: + if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying()) + gTasks[taskID].tLearnMoveState = 5; break; } break; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index e449af0a1..306119be2 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -1197,7 +1197,7 @@ const struct CompressedSpritePalette *sub_80409C8(u16 species, u32 otId , u32 pe return &gMonPaletteTable[species]; } -bool8 IsHMMove2(u16 move) +bool32 IsHMMove2(u16 move) { int i = 0; while (gHMMoves[i] != 0xFFFF) |