diff --git a/src/battle_main.c b/src/battle_main.c index 72c2b651e5..d6bd47e03c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3388,11 +3388,14 @@ const u8* FaintClearSetData(enum BattlerId battler) enum BattlerId partner = BATTLE_PARTNER(battler); // Clear commander state immediately so a replacement doesn't inherit it. gBattleStruct->battlerState[battler].commanderSpecies = SPECIES_NONE; - gBattleMons[partner].volatiles.semiInvulnerable = STATE_NONE; - if (IsBattlerAlive(partner)) + if (gBattleMons[partner].volatiles.semiInvulnerable == STATE_COMMANDER) { - BtlController_EmitSpriteInvisibility(partner, B_COMM_TO_CONTROLLER, FALSE); - MarkBattlerForControllerExec(partner); + gBattleMons[partner].volatiles.semiInvulnerable = STATE_NONE; + if (IsBattlerAlive(partner)) + { + BtlController_EmitSpriteInvisibility(partner, B_COMM_TO_CONTROLLER, FALSE); + MarkBattlerForControllerExec(partner); + } } } diff --git a/src/battle_move_resolution.c b/src/battle_move_resolution.c index b5c88b49af..371709b643 100644 --- a/src/battle_move_resolution.c +++ b/src/battle_move_resolution.c @@ -3751,7 +3751,7 @@ static enum MoveEndResult MoveEndClearBits(void) { enum BattlerId partner = BATTLE_PARTNER(i); gBattleStruct->battlerState[i].commanderSpecies = SPECIES_NONE; - if (IsBattlerAlive(partner)) + if (gBattleMons[partner].volatiles.semiInvulnerable == STATE_COMMANDER) gBattleMons[partner].volatiles.semiInvulnerable = STATE_NONE; } } diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index bf25ecd5b3..fe9fce7953 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -529,8 +529,8 @@ DOUBLE_BATTLE_TEST("Commander does not clear semi-invulnerability of non-Tatsugi MESSAGE("Tatsugiri fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLY, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft); + HP_BAR(playerLeft); MESSAGE("Dondozo fainted!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentRight); NOT HP_BAR(playerRight); } THEN { EXPECT_EQ(playerRight->hp, playerRight->maxHP);