Merge pull request #2605 from mrgriffin/rhh-battle-tests-fixes
Rhh battle tests fixes
This commit is contained in:
commit
53e41a2b3d
@ -2237,3 +2237,8 @@
|
|||||||
.endif
|
.endif
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro jumpifemergencyexited battler:req, ptr:req
|
||||||
|
various \battler, VARIOUS_JUMP_IF_EMERGENCY_EXITED
|
||||||
|
.4byte \ptr
|
||||||
|
.endm
|
||||||
|
|||||||
@ -3055,6 +3055,7 @@ BattleScript_EffectHitEscape:
|
|||||||
jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd
|
jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd
|
||||||
jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_HitEscapeEnd
|
jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_HitEscapeEnd
|
||||||
jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_HitEscapeEnd
|
jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_HitEscapeEnd
|
||||||
|
jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd
|
||||||
openpartyscreen BS_ATTACKER, BattleScript_HitEscapeEnd
|
openpartyscreen BS_ATTACKER, BattleScript_HitEscapeEnd
|
||||||
switchoutabilities BS_ATTACKER
|
switchoutabilities BS_ATTACKER
|
||||||
waitstate
|
waitstate
|
||||||
|
|||||||
@ -195,6 +195,7 @@ struct SpecialStatus
|
|||||||
// End of byte
|
// End of byte
|
||||||
u8 weatherAbilityDone:1;
|
u8 weatherAbilityDone:1;
|
||||||
u8 terrainAbilityDone:1;
|
u8 terrainAbilityDone:1;
|
||||||
|
u8 emergencyExited:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SideTimer
|
struct SideTimer
|
||||||
|
|||||||
@ -255,6 +255,7 @@
|
|||||||
#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 164
|
#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 164
|
||||||
#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165
|
#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165
|
||||||
#define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166
|
#define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166
|
||||||
|
#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167
|
||||||
|
|
||||||
// Cmd_manipulatedamage
|
// Cmd_manipulatedamage
|
||||||
#define DMG_CHANGE_SIGN 0
|
#define DMG_CHANGE_SIGN 0
|
||||||
|
|||||||
@ -834,7 +834,7 @@ static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
|
|||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
break;
|
break;
|
||||||
case STATUS1_TOXIC_POISON:
|
case STATUS1_TOXIC_POISON:
|
||||||
if (ability == ABILITY_IMMUNITY)
|
if (ability == ABILITY_IMMUNITY || ability == ABILITY_PASTEL_VEIL)
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2880,11 +2880,11 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
|||||||
statusChanged = TRUE;
|
statusChanged = TRUE;
|
||||||
break;
|
break;
|
||||||
case STATUS1_POISON:
|
case STATUS1_POISON:
|
||||||
if (battlerAbility == ABILITY_IMMUNITY
|
if ((battlerAbility == ABILITY_IMMUNITY || battlerAbility == ABILITY_PASTEL_VEIL)
|
||||||
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
|
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
|
||||||
{
|
{
|
||||||
gLastUsedAbility = ABILITY_IMMUNITY;
|
gLastUsedAbility = battlerAbility;
|
||||||
RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY);
|
RecordAbilityBattle(gEffectBattler, battlerAbility);
|
||||||
|
|
||||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||||
gBattlescriptCurrInstr = BattleScript_PSNPrevention;
|
gBattlescriptCurrInstr = BattleScript_PSNPrevention;
|
||||||
@ -3004,10 +3004,11 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
|||||||
statusChanged = TRUE;
|
statusChanged = TRUE;
|
||||||
break;
|
break;
|
||||||
case STATUS1_TOXIC_POISON:
|
case STATUS1_TOXIC_POISON:
|
||||||
if (battlerAbility == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
|
if ((battlerAbility == ABILITY_IMMUNITY || battlerAbility == ABILITY_PASTEL_VEIL)
|
||||||
|
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
|
||||||
{
|
{
|
||||||
gLastUsedAbility = ABILITY_IMMUNITY;
|
gLastUsedAbility = battlerAbility;
|
||||||
RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY);
|
RecordAbilityBattle(gEffectBattler, battlerAbility);
|
||||||
|
|
||||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||||
gBattlescriptCurrInstr = BattleScript_PSNPrevention;
|
gBattlescriptCurrInstr = BattleScript_PSNPrevention;
|
||||||
@ -5922,6 +5923,7 @@ static void Cmd_moveend(void)
|
|||||||
if (gBattleResources->flags->flags[i] & RESOURCE_FLAG_EMERGENCY_EXIT)
|
if (gBattleResources->flags->flags[i] & RESOURCE_FLAG_EMERGENCY_EXIT)
|
||||||
{
|
{
|
||||||
gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_EMERGENCY_EXIT;
|
gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_EMERGENCY_EXIT;
|
||||||
|
gSpecialStatuses[i].emergencyExited = TRUE;
|
||||||
gBattlerTarget = gBattlerAbility = i;
|
gBattlerTarget = gBattlerAbility = i;
|
||||||
BattleScriptPushCursor();
|
BattleScriptPushCursor();
|
||||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(i) == B_SIDE_PLAYER)
|
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(i) == B_SIDE_PLAYER)
|
||||||
@ -6764,6 +6766,7 @@ static void Cmd_switchineffects(void)
|
|||||||
if (!(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
|
if (!(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
|
||||||
&& !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)
|
&& !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)
|
||||||
&& GetBattlerAbility(gActiveBattler) != ABILITY_IMMUNITY
|
&& GetBattlerAbility(gActiveBattler) != ABILITY_IMMUNITY
|
||||||
|
&& !IsAbilityOnSide(gActiveBattler, ABILITY_PASTEL_VEIL)
|
||||||
&& !(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SAFEGUARD)
|
&& !(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SAFEGUARD)
|
||||||
&& !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN))
|
&& !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN))
|
||||||
{
|
{
|
||||||
@ -10269,6 +10272,12 @@ static void Cmd_various(void)
|
|||||||
gBattlescriptCurrInstr += 7;
|
gBattlescriptCurrInstr += 7;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
case VARIOUS_JUMP_IF_EMERGENCY_EXITED:
|
||||||
|
if (gSpecialStatuses[gActiveBattler].emergencyExited)
|
||||||
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||||
|
else
|
||||||
|
gBattlescriptCurrInstr += 7;
|
||||||
|
return;
|
||||||
} // End of switch (gBattlescriptCurrInstr[2])
|
} // End of switch (gBattlescriptCurrInstr[2])
|
||||||
|
|
||||||
gBattlescriptCurrInstr += 3;
|
gBattlescriptCurrInstr += 3;
|
||||||
@ -12113,7 +12122,9 @@ static void Cmd_trysetencore(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE
|
if (gLastMoves[gBattlerTarget] == MOVE_NONE
|
||||||
|
|| gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE
|
||||||
|
|| gLastMoves[gBattlerTarget] == MOVE_STRUGGLE
|
||||||
|| gLastMoves[gBattlerTarget] == MOVE_ENCORE
|
|| gLastMoves[gBattlerTarget] == MOVE_ENCORE
|
||||||
|| gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE
|
|| gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE
|
||||||
|| gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP)
|
|| gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP)
|
||||||
|
|||||||
@ -515,9 +515,11 @@ void HandleAction_UseMove(void)
|
|||||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||||
BattleArena_AddMindPoints(gBattlerAttacker);
|
BattleArena_AddMindPoints(gBattlerAttacker);
|
||||||
|
|
||||||
// Record HP of each battler
|
|
||||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||||
|
{
|
||||||
gBattleStruct->hpBefore[i] = gBattleMons[i].hp;
|
gBattleStruct->hpBefore[i] = gBattleMons[i].hp;
|
||||||
|
gSpecialStatuses[i].emergencyExited = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
|
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
|
||||||
}
|
}
|
||||||
@ -5623,7 +5625,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
&& gBattleMons[gBattlerAttacker].hp != 0
|
&& gBattleMons[gBattlerAttacker].hp != 0
|
||||||
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
||||||
&& TARGET_TURN_DAMAGED
|
&& TARGET_TURN_DAMAGED
|
||||||
&& CanBePoisoned(gBattlerAttacker, gBattlerTarget)
|
&& CanBePoisoned(gBattlerTarget, gBattlerAttacker)
|
||||||
&& IsMoveMakingContact(move, gBattlerAttacker)
|
&& IsMoveMakingContact(move, gBattlerAttacker)
|
||||||
&& (Random() % 3) == 0)
|
&& (Random() % 3) == 0)
|
||||||
{
|
{
|
||||||
@ -5954,6 +5956,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
switch (GetBattlerAbility(battler))
|
switch (GetBattlerAbility(battler))
|
||||||
{
|
{
|
||||||
case ABILITY_IMMUNITY:
|
case ABILITY_IMMUNITY:
|
||||||
|
case ABILITY_PASTEL_VEIL:
|
||||||
if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER))
|
if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER))
|
||||||
{
|
{
|
||||||
StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
|
StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user