From 107ace784b16575f80aa0169a58c6b7bdad15ae2 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 6 Dec 2022 06:18:18 -0300 Subject: [PATCH] Implemented Mycelium Might's effect --- include/battle_util.h | 1 + src/battle_main.c | 4 ++++ src/battle_util.c | 16 ++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/include/battle_util.h b/include/battle_util.h index 8922cd8427..6d6361fc7d 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -205,5 +205,6 @@ bool32 CanBeConfused(u8 battlerId); bool32 IsBattlerTerrainAffected(u8 battlerId, u32 terrainFlag); u32 GetBattlerFriendshipScore(u8 battlerId); u32 CountBattlerStatIncreases(u8 battlerId, bool32 countEvasionAcc); +bool32 IsMyceliumMightOnField(void); #endif // GUARD_BATTLE_UTIL_H diff --git a/src/battle_main.c b/src/battle_main.c index 42de8ac3a8..e9a88ecb6b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4673,6 +4673,10 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) strikesFirst = 1; else if (ability2 == ABILITY_STALL && ability1 != ABILITY_STALL) strikesFirst = 0; + else if (ability1 == ABILITY_MYCELIUM_MIGHT && ability2 != ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)) + strikesFirst = 1; + else if (ability2 == ABILITY_MYCELIUM_MIGHT && ability1 != ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)) + strikesFirst = 0; else { if (speedBattler1 == speedBattler2 && Random() & 1) diff --git a/src/battle_util.c b/src/battle_util.c index d8068ef301..527fbd5d0d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6338,6 +6338,19 @@ bool32 IsNeutralizingGasOnField(void) return FALSE; } +bool32 IsMyceliumMightOnField(void) +{ + u32 i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)) + return TRUE; + } + + return FALSE; +} + u32 GetBattlerAbility(u8 battlerId) { if (gStatuses3[battlerId] & STATUS3_GASTRO_ACID) @@ -6346,6 +6359,9 @@ u32 GetBattlerAbility(u8 battlerId) if (IsNeutralizingGasOnField() && !IsNeutralizingGasBannedAbility(gBattleMons[battlerId].ability)) return ABILITY_NONE; + if (IsMyceliumMightOnField()) + return ABILITY_NONE; + if ((((gBattleMons[gBattlerAttacker].ability == ABILITY_MOLD_BREAKER || gBattleMons[gBattlerAttacker].ability == ABILITY_TERAVOLT || gBattleMons[gBattlerAttacker].ability == ABILITY_TURBOBLAZE)