diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_4.c | 20 | ||||
-rw-r--r-- | src/daycare.c | 6 | ||||
-rw-r--r-- | src/evolution_scene.c | 58 | ||||
-rw-r--r-- | src/pokemon_1.c | 28 |
4 files changed, 59 insertions, 53 deletions
diff --git a/src/battle_4.c b/src/battle_4.c index 6dd5d7df6..fb30b2030 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -82,7 +82,7 @@ extern void (*gBattleMainFunc)(void); extern struct Window gUnknown_03004210; extern const u8 gUnknown_08400D7A[]; extern u8 gPlayerPartyCount; -extern u16 word_2024E82; //move to learn +extern u16 gMoveToLearn; //move to learn extern const u8 gTrainerMoney[]; extern u16 gRandomMove; extern u8* gBattleScriptsEffectsTable[]; @@ -129,7 +129,7 @@ u16 sub_803FBFC(u8 a); u8 GetBankByPlayerAI(u8 ID); void sub_8012258(u8); void sub_80157C4(u8 bank); //update sent pokes in battle -//sub_803B7C8 teach poke a move +//MonTryLearningNewMove teach poke a move u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); void IncrementGameStat(u8 index); u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); @@ -11460,9 +11460,9 @@ void atk59_learnmove_inbattle(void) u8* loc1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1); u8* loc2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5); - u16 ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9)); + u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9)); while (ret == 0xFFFE) - ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); if (ret == 0) { @@ -11549,7 +11549,7 @@ static void atk5A(void) case 2: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, word_2024E82); + sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); BATTLE_STRUCT->atk5A_StateTracker++; } break; @@ -11584,18 +11584,18 @@ static void atk5A(void) } ptr[0] = 0xFF; RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos); - SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], word_2024E82, move_pos); + SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], gMoveToLearn, move_pos); if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[0].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[0], move_pos); - SetBattleMonMoveSlot(&gBattleMons[0], word_2024E82, move_pos); + SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, move_pos); } if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[2].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[2], move_pos); - SetBattleMonMoveSlot(&gBattleMons[2], word_2024E82, move_pos); + SetBattleMonMoveSlot(&gBattleMons[2], gMoveToLearn, move_pos); } } } @@ -12653,8 +12653,8 @@ void sub_8024CEC(void) { gBattleTextBuff2[0] = 0xFD; gBattleTextBuff2[1] = 2; - gBattleTextBuff2[2] = (word_2024E82); - gBattleTextBuff2[3] = uBYTE1_16(word_2024E82); + gBattleTextBuff2[2] = (gMoveToLearn); + gBattleTextBuff2[3] = uBYTE1_16(gMoveToLearn); gBattleTextBuff2[4] = 0xFF; } diff --git a/src/daycare.c b/src/daycare.c index cded18207..7f688016a 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -209,7 +209,7 @@ void sub_80414C0(struct BoxPokemon * daycare_data) } u8 TryIncrementMonLevel(struct Pokemon *); -extern u16 word_2024E82; +extern u16 gMoveToLearn; void sub_804151C(struct Pokemon * mon) { @@ -221,10 +221,10 @@ void sub_804151C(struct Pokemon * mon) if(TryIncrementMonLevel(mon) == FALSE) goto end; r6 = 1; - while((temp = sub_803B7C8(mon, r6)) != 0){ + while((temp = MonTryLearningNewMove(mon, r6)) != 0){ r6 = 0; if(temp == 0xffff){ - DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82); + DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn); } } } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index f46ed52a3..baac64c35 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -54,7 +54,7 @@ extern u16 gUnknown_030041B0; extern u16 gUnknown_030041B8; extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; -extern u16 word_2024E82; +extern u16 gMoveToLearn; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gUnk_2009000[]; // won't match if I 'ewram' it extern bool8 gAffineAnimsDisabled; @@ -99,19 +99,19 @@ void CB2_BeginEvolutionScene(void) RunTasks(); } -#define tState data[0] -#define tMonPtrHI data[1] -#define tMonPtrLO data[2] -#define tPreEvoSpecies data[3] -#define tPostEvoSpecies data[4] -#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 tLearnMoveState data[8] -#define tData9 data[9] -#define tData10 data[10] -#define tEvoWasStopped data[11] -#define tPartyID data[12] +#define tState data[0] +#define tMonPtrHI data[1] +#define tMonPtrLO data[2] +#define tPreEvoSpecies data[3] +#define tPostEvoSpecies data[4] +#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 tLearnsFirstMove data[6] +#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_LEARN_MOVE 0x80 @@ -248,7 +248,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gTasks[ID].tMonPtrHI = (u32)(mon); gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10; gTasks[ID].tCanStop = canStopEvo; - gTasks[ID].tData6 = 1; + gTasks[ID].tLearnsFirstMove = TRUE; gTasks[ID].tEvoWasStopped = FALSE; gTasks[ID].tPartyID = partyID; @@ -448,7 +448,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri gTasks[ID].tPostEvoSpecies = speciesToEvolve; gTasks[ID].tMonPtrHI = (u32)(mon); gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10; - gTasks[ID].tData6 = 1; + gTasks[ID].tLearnsFirstMove = TRUE; gTasks[ID].tEvoWasStopped = FALSE; gTasks[ID].tPartyID = partyID; @@ -638,14 +638,14 @@ void Task_EvolutionScene(u8 taskID) case 14: // check if it wants to learn a new move if (gUnknown_03004210.state == 0) { - var = sub_803B7C8(mon, gTasks[taskID].tData6); + var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove); if (var != 0 && !gTasks[taskID].tEvoWasStopped) { u8 text[20]; sub_8053E90(); gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; - gTasks[taskID].tData6 = 0; + gTasks[taskID].tLearnsFirstMove = FALSE; gTasks[taskID].tLearnMoveState = 0; GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); @@ -705,12 +705,12 @@ void Task_EvolutionScene(u8 taskID) PlayFanfare(BGM_FANFA1); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); - gTasks[taskID].tData6 = 0x40; + gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } break; case 20: // wait a bit and check if can learn another move - if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tData6 == 0) + if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0) gTasks[taskID].tState = 14; break; case 21: // try to learn a new move @@ -797,7 +797,7 @@ void Task_EvolutionScene(u8 taskID) { sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics, - word_2024E82); + gMoveToLearn); gTasks[taskID].tLearnMoveState++; } break; @@ -824,7 +824,7 @@ void Task_EvolutionScene(u8 taskID) gBattleTextBuff2[3] = (move & 0xFF00) >> 8; gBattleTextBuff2[4] = EOS; RemoveMonPPBonus(mon, var); - SetMonMoveSlot(mon, word_2024E82, var); + SetMonMoveSlot(mon, gMoveToLearn, var); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; @@ -980,13 +980,13 @@ void Task_TradeEvolutionScene(u8 taskID) case 13: if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE) { - var = sub_803B7C8(mon, gTasks[taskID].tData6); + var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove); if (var != 0 && !gTasks[taskID].tEvoWasStopped) { u8 text[20]; gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; - gTasks[taskID].tData6 = 0; + gTasks[taskID].tLearnsFirstMove = FALSE; gTasks[taskID].tLearnMoveState = 0; GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); @@ -1019,12 +1019,12 @@ void Task_TradeEvolutionScene(u8 taskID) 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].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } break; case 16: - if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tData6 == 0) + if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tLearnsFirstMove == 0) gTasks[taskID].tState = 13; break; case 17: @@ -1117,7 +1117,7 @@ void Task_TradeEvolutionScene(u8 taskID) { sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics, - word_2024E82); + gMoveToLearn); gTasks[taskID].tLearnMoveState++; } break; @@ -1144,7 +1144,7 @@ void Task_TradeEvolutionScene(u8 taskID) gBattleTextBuff2[3] = (move & 0xFF00) >> 8; gBattleTextBuff2[4] = EOS; RemoveMonPPBonus(mon, var); - SetMonMoveSlot(mon, word_2024E82, var); + SetMonMoveSlot(mon, gMoveToLearn, var); StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]); sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15); gTasks[taskID].tLearnMoveState++; @@ -1188,3 +1188,5 @@ void Task_TradeEvolutionScene(u8 taskID) break; } } + + diff --git a/src/pokemon_1.c b/src/pokemon_1.c index c65bfa185..9c46e54d5 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -17,9 +17,9 @@ #define LOHALF(n) ((n) & 0xFFFF) extern u8 unk_2000000[]; -extern u16 word_2024E82; +extern u16 gMoveToLearn; -static EWRAM_DATA u8 byte_2024E88 = 0; +static EWRAM_DATA u8 sLearningMoveTableID = 0; u8 gPlayerPartyCount; struct Pokemon gPlayerParty[6]; @@ -583,29 +583,33 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) } } -u16 sub_803B7C8(struct Pokemon *mon, u8 a2) +u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) { u32 retVal = 0; u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); - if (a2) + // since you can learn more than one move per level + // the game needs to know whether you decided to + // learn it or keep the old set to avoid asking + // you to learn the same move over and over again + if (firstMove) { - byte_2024E88 = retVal; + sLearningMoveTableID = 0; - while ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) != (level << 9)) + while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9)) { - byte_2024E88++; - if (gLevelUpLearnsets[species][byte_2024E88] == (u16)-1) + sLearningMoveTableID++; + if (gLevelUpLearnsets[species][sLearningMoveTableID] == 0xFFFF) return 0; } } - if ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) == (level << 9)) + if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9)) { - word_2024E82 = (gLevelUpLearnsets[species][byte_2024E88] & 0x1FF); - byte_2024E88++; - retVal = GiveMoveToMon(mon, word_2024E82); + gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF); + sLearningMoveTableID++; + retVal = GiveMoveToMon(mon, gMoveToLearn); } return retVal; |