Implement Burmy form change

Burmy changes form based on where it last battled.
This commit is contained in:
BuffelSaft 2021-08-07 20:56:10 +12:00
parent e6a2d2226f
commit f0cb6190e0
3 changed files with 42 additions and 0 deletions

View file

@ -138,6 +138,7 @@ bool32 CanFling(u8 battlerId);
bool32 IsTelekinesisBannedSpecies(u16 species);
bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId);
void DoBurmyFormChange(u32 monId);
// ability checks
bool32 IsRolePlayBannedAbilityAtk(u16 ability);

View file

@ -4879,6 +4879,7 @@ static void HandleEndTurn_FinishBattle(void)
{
UndoMegaEvolution(i);
UndoFormChange(i, B_SIDE_PLAYER, FALSE);
DoBurmyFormChange(i);
}
gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions;
gCB2_AfterEvolution = BattleMainCB2;

View file

@ -8659,3 +8659,43 @@ bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability)
}
return FALSE;
}
+void DoBurmyFormChange(u32 monId)
{
u16 newSpecies, currSpecies;
s32 sentIn;
struct Pokemon *party = gPlayerParty;
sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1];
currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
if ((gSpeciesToNationalPokedexNum[currSpecies - 1] == SPECIES_BURMY) && (gBitTable[monId] & sentIn))
{
switch (gBattleTerrain)
{
case BATTLE_TERRAIN_GRASS:
case BATTLE_TERRAIN_LONG_GRASS:
case BATTLE_TERRAIN_POND:
case BATTLE_TERRAIN_MOUNTAIN:
case BATTLE_TERRAIN_PLAIN:
newSpecies = SPECIES_BURMY;
break;
case BATTLE_TERRAIN_CAVE:
case BATTLE_TERRAIN_SAND:
newSpecies = SPECIES_BURMY_SANDY_CLOAK;
break;
case BATTLE_TERRAIN_BUILDING:
newSpecies = SPECIES_BURMY_TRASH_CLOAK;
break;
default: // Don't change form if last battle was water-related
newSpecies = SPECIES_NONE;
break;
}
if (newSpecies != SPECIES_NONE)
{
SetMonData(&party[monId], MON_DATA_SPECIES, &newSpecies);
CalculateMonStats(&party[monId]);
}
}
}