Fixes timesGotHit not increasing on forced switch out (#6493)

This commit is contained in:
Alex 2025-03-29 19:33:50 +01:00 committed by GitHub
parent c1364e14d4
commit adf4928fe0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 53 additions and 11 deletions

View File

@ -274,7 +274,6 @@ enum MoveEndEffects
MOVEEND_SYMBIOSIS,
MOVEEND_HIT_SWITCH_TARGET,
MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move
MOVEEND_NUM_HITS,
MOVEEND_SUBSTITUTE,
MOVEEND_SKY_DROP_CONFUSE,
MOVEEND_UPDATE_LAST_MOVES,

View File

@ -2108,6 +2108,7 @@ static void Cmd_adjustdamage(void)
gSpecialStatuses[battlerDef].enduredDamage = TRUE;
continue;
}
if (GetBattlerAbility(battlerDef) == ABILITY_ICE_FACE && IsBattleMovePhysical(gCurrentMove) && gBattleMons[battlerDef].species == SPECIES_EISCUE)
{
// Damage deals typeless 0 HP.
@ -2118,6 +2119,7 @@ static void Cmd_adjustdamage(void)
// Form change will be done after attack animation in Cmd_resultmessage.
continue;
}
if (gBattleMons[gBattlerTarget].hp > gBattleStruct->moveDamage[battlerDef])
continue;
@ -2669,6 +2671,11 @@ static void Cmd_datahpupdate(void)
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp);
MarkBattlerForControllerExec(battler);
}
if (gBattlerAttacker != gBattlerTarget
&& GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS
&& IsBattlerTurnDamaged(gBattlerTarget))
gBattleStruct->timesGotHit[GetBattlerSide(gBattlerTarget)][gBattlerPartyIndexes[gBattlerTarget]]++;
}
TryRestoreDamageAfterCheeckPouch(battler);
@ -6749,16 +6756,6 @@ static void Cmd_moveend(void)
}
gBattleScripting.moveendState++;
break;
case MOVEEND_NUM_HITS:
if (gBattlerAttacker != gBattlerTarget
&& GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
&& IsBattlerTurnDamaged(gBattlerTarget))
{
gBattleStruct->timesGotHit[GetBattlerSide(gBattlerTarget)][gBattlerPartyIndexes[gBattlerTarget]]++;
}
gBattleScripting.moveendState++;
break;
case MOVEEND_SUBSTITUTE: // update substitute
for (i = 0; i < gBattlersCount; i++)
{

View File

@ -296,3 +296,49 @@ SINGLE_BATTLE_TEST("Rage Fist number of hits is copied by Transform")
EXPECT_MUL_EQ(timesGotHit[0], Q_4_12(2.0), timesGotHit[1]);
}
}
SINGLE_BATTLE_TEST("Rage Fist base power is increased by 50 if user was hit and forces out")
{
s16 timesGotHit[2];
GIVEN {
PLAYER(SPECIES_REGIROCK);
OPPONENT(SPECIES_REGIROCK);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_DRAGON_TAIL); }
TURN { MOVE(player, MOVE_CELEBRATE); SWITCH(opponent, 0); }
TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_CELEBRATE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent);
HP_BAR(player, captureDamage: &timesGotHit[0]);
ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player);
HP_BAR(opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent);
HP_BAR(player, captureDamage: &timesGotHit[1]);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
} THEN {
EXPECT_MUL_EQ(timesGotHit[0], Q_4_12(2.0), timesGotHit[1]);
}
}
SINGLE_BATTLE_TEST("Rage Fist doesn't get increased power if Substitute is hit")
{
s16 timesGotHit[2];
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_CELEBRATE); }
TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_TACKLE); }
TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_CELEBRATE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent);
HP_BAR(player, captureDamage: &timesGotHit[0]);
ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent);
HP_BAR(player, captureDamage: &timesGotHit[1]);
} THEN {
EXPECT_EQ(timesGotHit[0], timesGotHit[1]);
}
}