From f0cb6190e00b002d00f8ac921a22943de0e3d757 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Sat, 7 Aug 2021 20:56:10 +1200 Subject: [PATCH 1/4] Implement Burmy form change Burmy changes form based on where it last battled. --- include/battle_util.h | 1 + src/battle_main.c | 1 + src/battle_util.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/include/battle_util.h b/include/battle_util.h index e10305e564..521bb2693e 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -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); diff --git a/src/battle_main.c b/src/battle_main.c index 94700bf969..d7fb7f6976 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -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; diff --git a/src/battle_util.c b/src/battle_util.c index 7deebd25e3..19913781dc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -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]); + } + } +} From 6c6363f7cf67a9f12a28a0126e3b4d84dafd6935 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Sat, 7 Aug 2021 20:59:04 +1200 Subject: [PATCH 2/4] Use form table in species check --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 19913781dc..fa5cb5456a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8669,7 +8669,7 @@ bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability) sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1]; currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL); - if ((gSpeciesToNationalPokedexNum[currSpecies - 1] == SPECIES_BURMY) && (gBitTable[monId] & sentIn)) + if ((GET_BASE_SPECIES_ID(currSpecies) == SPECIES_BURMY) && (gBitTable[monId] & sentIn)) { switch (gBattleTerrain) { From e1ca2af8b3732df237f1025d8eca28c442bdd7f1 Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Sun, 8 Aug 2021 00:52:27 +1200 Subject: [PATCH 3/4] Update src/battle_util.c Fix copy/paste typo Co-authored-by: LOuroboros --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index fa5cb5456a..50a2a62230 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8660,7 +8660,7 @@ bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability) return FALSE; } -+void DoBurmyFormChange(u32 monId) +void DoBurmyFormChange(u32 monId) { u16 newSpecies, currSpecies; s32 sentIn; From 30c983d9cac69431e5865ed6559c8c0541ad217f Mon Sep 17 00:00:00 2001 From: BuffelSaft Date: Sun, 8 Aug 2021 13:14:51 +1200 Subject: [PATCH 4/4] Define Burmy forms in battle engine Title. BE needs these to compile on its own. --- include/constants/battle_config.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index bf31c77b3b..cdeadfbf7c 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -37,6 +37,9 @@ #define SPECIES_ZYGARDE 0 // 50% #define SPECIES_ZYGARDE_10 10011 // 10 % #define SPECIES_ZYGARDE_COMPLETE 10012 // 100 % + #define SPECIES_BURMY 0 + #define SPECIES_BURMY_SANDY_CLOAK 10013 + #define SPECIES_BURMY_TRASH_CLOAK 10014 #endif // Items with peculiar battle effects.