fixed remaining tests

This commit is contained in:
cawtds
2024-06-09 23:01:28 +02:00
parent 77637c48d0
commit fb15e62954
6 changed files with 36 additions and 5 deletions

View File

@@ -406,6 +406,7 @@ BattleScript_EffectSaltCure::
call BattleScript_EffectHit_Ret
tryfaintmon BS_TARGET
jumpiffainted BS_TARGET, TRUE, BattleScript_EffectSaltCure_End
jumpifsubstituteblocks BattleScript_EffectSaltCure_End
applysaltcure BS_TARGET
printstring STRINGID_TARGETISBEINGSALTCURED
waitmessage B_WAIT_TIME_LONG

View File

@@ -534,6 +534,7 @@ extern const u8 BattleScript_EncoredNoMore[];
extern const u8 BattleScript_DestinyBondTakesLife[];
extern const u8 BattleScript_DmgHazardsOnAttacker[];
extern const u8 BattleScript_DmgHazardsOnTarget[];
extern const u8 BattleScript_DmgHazardsOnBattlerScripting[];
extern const u8 BattleScript_DmgHazardsOnFaintedBattler[];
extern const u8 BattleScript_PerishSongTakesLife[];
extern const u8 BattleScript_PerishSongCountGoesDown[];

View File

@@ -105,6 +105,7 @@ enum
CANCELLER_POWDER_MOVE,
CANCELLER_POWDER_STATUS,
CANCELLER_THROAT_CHOP,
CANCELLER_EXPLODING_DAMP,
CANCELLER_MULTIHIT_MOVES,
CANCELLER_Z_MOVES,
CANCELLER_END,

View File

@@ -169,7 +169,7 @@ void InitAndLaunchChosenStatusAnimation(u32 battler, bool8 isStatus2, u32 status
gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive = 1;
if (!isStatus2)
{
if (status == STATUS1_FREEZE)
if (status == STATUS1_FREEZE || status == STATUS1_FROSTBITE)
LaunchStatusAnimation(battler, B_ANIM_STATUS_FRZ);
else if (status == STATUS1_POISON || status & STATUS1_TOXIC_POISON)
LaunchStatusAnimation(battler, B_ANIM_STATUS_PSN);

View File

@@ -7068,6 +7068,8 @@ static void SetDmgHazardsBattlescript(u8 battler, u8 multistringId)
gBattlescriptCurrInstr = BattleScript_DmgHazardsOnTarget;
else if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
gBattlescriptCurrInstr = BattleScript_DmgHazardsOnAttacker;
else if (gBattlescriptCurrInstr[1] == BS_SCRIPTING)
gBattlescriptCurrInstr = BattleScript_DmgHazardsOnBattlerScripting;
else
gBattlescriptCurrInstr = BattleScript_DmgHazardsOnFaintedBattler;
}

View File

@@ -750,11 +750,20 @@ void MarkBattlerReceivedLinkData(u8 battlerId)
const u8* CancelMultiTurnMoves(u32 battler)
{
const u8 *result = NULL;
gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS);
gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE);
gBattleMons[battler].status2 &= ~(STATUS2_UPROAR);
gBattleMons[battler].status2 &= ~(STATUS2_BIDE);
if (B_RAMPAGE_CANCELLING < GEN_5)
{
gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS);
gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE);
}
else if (!(gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE)
|| ((gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE) > STATUS2_LOCK_CONFUSE_TURN(1)))
{
gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS);
}
// Clear battler's semi-invulnerable bits if they are not held by Sky Drop.
if (!(gStatuses3[battler] & STATUS3_SKY_DROPPED))
gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE);
@@ -2722,7 +2731,7 @@ bool8 HandleFaintedMonActions(void)
u8 AtkCanceller_UnableToUseMove(u32 moveType)
{
u8 effect = 0;
u8 effect = 0;
do
{
switch (gBattleStruct->atkCancellerTracker)
@@ -3112,6 +3121,20 @@ u8 effect = 0;
}
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_EXPLODING_DAMP:
{
u32 dampBattler = IsAbilityOnField(ABILITY_DAMP);
if (dampBattler && (gMovesInfo[gCurrentMove].effect == EFFECT_EXPLOSION
|| gMovesInfo[gCurrentMove].effect == EFFECT_MIND_BLOWN))
{
gBattleScripting.battler = dampBattler - 1;
gBattlescriptCurrInstr = BattleScript_DampStopsExplosion;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
effect = 1;
}
gBattleStruct->atkCancellerTracker++;
break;
}
case CANCELLER_MULTIHIT_MOVES:
if (gMovesInfo[gCurrentMove].effect == EFFECT_MULTI_HIT)
{
@@ -8634,8 +8657,11 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3
break;
case EFFECT_DOUBLE_POWER_ON_ARG_STATUS:
// Comatose targets treated as if asleep
if ((gBattleMons[battlerDef].status1 | (STATUS1_SLEEP * (abilityDef == ABILITY_COMATOSE))) & gMovesInfo[move].argument)
if ((gBattleMons[battlerDef].status1 | (STATUS1_SLEEP * (abilityDef == ABILITY_COMATOSE))) & gMovesInfo[move].argument
&& !((gMovesInfo[move].additionalEffects->moveEffect == MOVE_EFFECT_REMOVE_STATUS) && DoesSubstituteBlockMove(battlerAtk, battlerDef, move)))
{
basePower *= 2;
}
break;
case EFFECT_VARY_POWER_BASED_ON_HP:
basePower = gMovesInfo[move].argument * gBattleMons[battlerDef].hp / gBattleMons[battlerDef].maxHP;