summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pokemon_3.c117
-rw-r--r--src/rom3.c4
-rw-r--r--src/rom_8077ABC.c1
3 files changed, 119 insertions, 3 deletions
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 857eb5935..3f857a599 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -84,6 +84,8 @@ extern struct BaseStats gBaseStats[];
extern u32 gBitTable[];
extern u32 gExperienceTables[8][101];
extern u32 gTMHMLearnsets[][2];
+extern const u16 *gLevelUpLearnsets[];
+extern u8 gBattleMonForms[];
extern u8 gUnknown_082082F8[];
extern u8 gUnknown_083FFDB3[];
@@ -1013,3 +1015,118 @@ u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm)
return gTMHMLearnsets[species][1] & mask;
}
}
+
+u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
+{
+ u16 learnedMoves[4];
+ u8 numMoves = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ int i, j, k;
+
+ for (i = 0; i < 4; i++)
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+
+ for (i = 0; i < 20; i++)
+ {
+ u16 moveLevel;
+
+ if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ break;
+
+ moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+
+ if (moveLevel <= (level << 9))
+ {
+ for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ ;
+
+ if (j == 4)
+ {
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ ;
+
+ if (k == numMoves)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ }
+ }
+ }
+
+ return numMoves;
+}
+
+u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
+{
+ u8 numMoves = 0;
+ int i;
+
+ for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+
+ return numMoves;
+}
+
+u8 sub_8040574(struct Pokemon *mon)
+{
+ u16 learnedMoves[4];
+ u16 moves[20];
+ u8 numMoves = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ int i, j, k;
+
+ if (species == SPECIES_EGG)
+ return 0;
+
+ for (i = 0; i < 4; i++)
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+
+ for (i = 0; i < 20; i++)
+ {
+ u16 moveLevel;
+
+ if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ break;
+
+ moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+
+ if (moveLevel <= (level << 9))
+ {
+ for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ ;
+
+ if (j == 4)
+ {
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ ;
+
+ if (k == numMoves)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ }
+ }
+ }
+
+ return numMoves;
+}
+
+u16 SpeciesToPokedexNum(u16 species)
+{
+ if (IsNationalPokedexEnabled())
+ {
+ return SpeciesToNationalPokedexNum(species);
+ }
+ else
+ {
+ species = SpeciesToHoennPokedexNum(species);
+ if (species <= 202)
+ return species;
+ return 0xFFFF;
+ }
+}
+
+void ClearBattleMonForms(void)
+{
+ int i;
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+}
diff --git a/src/rom3.c b/src/rom3.c
index 351d5d44b..b0ef7f088 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -56,7 +56,7 @@ extern void sub_8083C50(u8);
extern void nullsub_41(void);
extern void nullsub_91(void);
extern void battle_anim_clear_some_data(void);
-extern void sub_8040710(void);
+extern void ClearBattleMonForms(void);
extern void BattleAI_HandleItemUseBeforeAISetup(void);
extern void sub_8094978(u8, int);
extern void sub_800BA78(void);
@@ -102,7 +102,7 @@ void setup_poochyena_battle(void)
sub_800B858();
gUnknown_02024A64 = 0;
battle_anim_clear_some_data();
- sub_8040710();
+ ClearBattleMonForms();
BattleAI_HandleItemUseBeforeAISetup();
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index 2d7691033..b216bbe97 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -20,7 +20,6 @@
#define NUM_BATTLE_SLOTS 4
#define gBattleMonPartyPositions gUnknown_02024A6A
-#define gBattleMonForms gUnknown_02024E84
#define gCastformFrontSpriteCoords gUnknownCastformCoords_0837F598
#define gCastformElevations gUnknownCastformData_0837F5A8
#define gCastformBackSpriteYCoords gUnknown_0837F5AC