Fixes Gen3 berry activation timing (#6993)
This commit is contained in:
parent
a967f36091
commit
c489d36fc6
@ -1012,7 +1012,7 @@
|
||||
.4byte \jumpInstr
|
||||
.endm
|
||||
|
||||
.macro tryhealingitem
|
||||
.macro tryrestorehpberry
|
||||
.byte 0xbb
|
||||
.endm
|
||||
|
||||
|
||||
@ -5716,7 +5716,7 @@ BattleScript_MagicRoomEnds::
|
||||
setbyte gBattlerTarget, 0
|
||||
BattleScript_MagicRoomHealingItemsLoop:
|
||||
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattlerTarget, 1
|
||||
tryhealingitem
|
||||
tryrestorehpberry
|
||||
addbyte gBattlerTarget, 1
|
||||
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_MagicRoomHealingItemsLoop
|
||||
end2
|
||||
@ -6993,7 +6993,7 @@ BattleScript_DoTurnDmg:
|
||||
datahpupdate BS_ATTACKER
|
||||
tryfaintmon BS_ATTACKER
|
||||
checkteamslost BattleScript_DoTurnDmgEnd
|
||||
tryhealingitem
|
||||
tryrestorehpberry
|
||||
BattleScript_DoTurnDmgEnd:
|
||||
end2
|
||||
|
||||
@ -7241,7 +7241,7 @@ BattleScript_YawnEnd:
|
||||
BattleScript_EmbargoEndTurn::
|
||||
printstring STRINGID_EMBARGOENDS
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
tryhealingitem
|
||||
tryrestorehpberry
|
||||
end2
|
||||
|
||||
BattleScript_TelekinesisEndTurn::
|
||||
@ -7533,7 +7533,7 @@ BattleScript_PickupActivates::
|
||||
call BattleScript_AbilityPopUp
|
||||
printstring STRINGID_XFOUNDONEY
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
tryhealingitem
|
||||
tryrestorehpberry
|
||||
BattleScript_PickupActivatesEnd:
|
||||
end3
|
||||
|
||||
@ -7543,7 +7543,7 @@ BattleScript_HarvestActivates::
|
||||
call BattleScript_AbilityPopUp
|
||||
printstring STRINGID_HARVESTBERRY
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
tryhealingitem
|
||||
tryrestorehpberry
|
||||
BattleScript_HarvestActivatesEnd:
|
||||
end3
|
||||
|
||||
|
||||
@ -383,5 +383,6 @@ u32 RestoreWhiteHerbStats(u32 battler);
|
||||
bool32 IsFutureSightAttackerInParty(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 HadMoreThanHalfHpNowDoesnt(u32 battler);
|
||||
void UpdateStallMons(void);
|
||||
bool32 TryRestoreHPBerries(u32 battler, enum ItemCaseId caseId);
|
||||
|
||||
#endif // GUARD_BATTLE_UTIL_H
|
||||
|
||||
@ -20,6 +20,7 @@ enum EndTurnResolutionOrder
|
||||
ENDTURN_VARIOUS,
|
||||
ENDTURN_WEATHER,
|
||||
ENDTURN_WEATHER_DAMAGE,
|
||||
ENDTURN_GEN_3_BERRY_ACTIVATION,
|
||||
ENDTURN_EMERGENCY_EXIT_1,
|
||||
ENDTURN_AFFECTION,
|
||||
ENDTURN_FUTURE_SIGHT,
|
||||
@ -283,6 +284,20 @@ static bool32 HandleEndTurnWeatherDamage(u32 battler)
|
||||
return effect;
|
||||
}
|
||||
|
||||
static bool32 HandleEndTurnGenThreeBerryActivation(u32 battler)
|
||||
{
|
||||
bool32 effect = FALSE;
|
||||
|
||||
if (B_HP_BERRIES >= GEN_4) // Skip handler for > Gen3
|
||||
{
|
||||
gBattleStruct->endTurnEventsCounter++;
|
||||
return effect;
|
||||
}
|
||||
gBattleStruct->turnEffectsBattlerId++;
|
||||
effect = TryRestoreHPBerries(battler, ITEMEFFECT_NORMAL);
|
||||
return effect;
|
||||
}
|
||||
|
||||
static bool32 HandleEndTurnEmergencyExit(u32 battler)
|
||||
{
|
||||
bool32 effect = FALSE;
|
||||
@ -1514,6 +1529,7 @@ static bool32 (*const sEndTurnEffectHandlers[])(u32 battler) =
|
||||
[ENDTURN_VARIOUS] = HandleEndTurnVarious,
|
||||
[ENDTURN_WEATHER] = HandleEndTurnWeather,
|
||||
[ENDTURN_WEATHER_DAMAGE] = HandleEndTurnWeatherDamage,
|
||||
[ENDTURN_GEN_3_BERRY_ACTIVATION] = HandleEndTurnGenThreeBerryActivation,
|
||||
[ENDTURN_EMERGENCY_EXIT_1] = HandleEndTurnEmergencyExit,
|
||||
[ENDTURN_AFFECTION] = HandleEndTurnAffection,
|
||||
[ENDTURN_FUTURE_SIGHT] = HandleEndTurnFutureSight,
|
||||
|
||||
@ -533,7 +533,7 @@ static void Cmd_presentdamagecalculation(void);
|
||||
static void Cmd_setsafeguard(void);
|
||||
static void Cmd_magnitudedamagecalculation(void);
|
||||
static void Cmd_jumpifnopursuitswitchdmg(void);
|
||||
static void Cmd_tryhealingitem(void);
|
||||
static void Cmd_tryrestorehpberry(void);
|
||||
static void Cmd_halvehp(void);
|
||||
static void Cmd_copyfoestats(void);
|
||||
static void Cmd_rapidspinfree(void);
|
||||
@ -792,7 +792,7 @@ void (*const gBattleScriptingCommandsTable[])(void) =
|
||||
Cmd_setsafeguard, //0xB8
|
||||
Cmd_magnitudedamagecalculation, //0xB9
|
||||
Cmd_jumpifnopursuitswitchdmg, //0xBA
|
||||
Cmd_tryhealingitem, //0xBB
|
||||
Cmd_tryrestorehpberry, //0xBB
|
||||
Cmd_halvehp, //0xBC
|
||||
Cmd_copyfoestats, //0xBD
|
||||
Cmd_rapidspinfree, //0xBE
|
||||
@ -14274,17 +14274,11 @@ static void Cmd_jumpifnopursuitswitchdmg(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void Cmd_tryhealingitem(void)
|
||||
static void Cmd_tryrestorehpberry(void)
|
||||
{
|
||||
CMD_ARGS();
|
||||
|
||||
if (gItemsInfo[gBattleMons[gBattlerAttacker].item].pocket == POCKET_BERRIES
|
||||
|| GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_RESTORE_HP) // Edge case for Berry Juice
|
||||
{
|
||||
if (ItemBattleEffects(ITEMEFFECT_TRY_HEALING, gBattlerAttacker, FALSE))
|
||||
return;
|
||||
}
|
||||
|
||||
if (TryRestoreHPBerries(gBattlerAttacker, ITEMEFFECT_TRY_HEALING))
|
||||
return;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
|
||||
|
||||
@ -11442,3 +11442,14 @@ void UpdateStallMons(void)
|
||||
}
|
||||
// Handling for moves that target multiple opponents in doubles not handled currently
|
||||
}
|
||||
|
||||
bool32 TryRestoreHPBerries(u32 battler, enum ItemCaseId caseId)
|
||||
{
|
||||
if (gItemsInfo[gBattleMons[battler].item].pocket == POCKET_BERRIES
|
||||
|| GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_RESTORE_HP) // Edge case for Berry Juice
|
||||
{
|
||||
if (ItemBattleEffects(caseId, battler, FALSE))
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -63,3 +63,20 @@ DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing after a recoil mo
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight);
|
||||
}
|
||||
}
|
||||
|
||||
#if B_HP_BERRIES <= GEN_3
|
||||
SINGLE_BATTLE_TEST("Restore HP Berry triggers only during the end turn")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT) { MaxHP(100); HP(51); Item(ITEM_ORAN_BERRY); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TACKLE); }
|
||||
TURN {}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user