Clean up for item hold effect refactor (#8014)
This commit is contained in:
parent
fd84adc421
commit
ff557e3d0c
@ -384,7 +384,7 @@ BattleScript_SaltCureExtraDamage::
|
|||||||
printstring STRINGID_TARGETISHURTBYSALTCURE
|
printstring STRINGID_TARGETISHURTBYSALTCURE
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
tryfaintmon BS_ATTACKER
|
tryfaintmon BS_ATTACKER
|
||||||
tryactivateitem BS_ATTACKER, ON_ITEM_HP_THRESHOLD
|
tryactivateitem BS_ATTACKER, ACTIVATION_ON_HP_THRESHOLD
|
||||||
end2
|
end2
|
||||||
|
|
||||||
BattleScript_EffectCorrosiveGas::
|
BattleScript_EffectCorrosiveGas::
|
||||||
@ -1407,7 +1407,7 @@ BattleScript_EffectBestow::
|
|||||||
waitanimation
|
waitanimation
|
||||||
printstring STRINGID_BESTOWITEMGIVING
|
printstring STRINGID_BESTOWITEMGIVING
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
tryactivateitem BS_TARGET, ON_ITEM_USABLE_AGAIN
|
tryactivateitem BS_TARGET, ACTIVATION_ON_USABLE_AGAIN
|
||||||
trysymbiosis BS_ATTACKER
|
trysymbiosis BS_ATTACKER
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
@ -4896,7 +4896,7 @@ BattleScript_MagicRoomEnds::
|
|||||||
setbyte gBattlerTarget, 0
|
setbyte gBattlerTarget, 0
|
||||||
BattleScript_MagicRoomHealingItemsLoop:
|
BattleScript_MagicRoomHealingItemsLoop:
|
||||||
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattlerTarget, 1
|
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattlerTarget, 1
|
||||||
tryactivateitem BS_ATTACKER, ON_ITEM_USABLE_AGAIN
|
tryactivateitem BS_ATTACKER, ACTIVATION_ON_USABLE_AGAIN
|
||||||
addbyte gBattlerTarget, 1
|
addbyte gBattlerTarget, 1
|
||||||
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_MagicRoomHealingItemsLoop
|
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_MagicRoomHealingItemsLoop
|
||||||
end2
|
end2
|
||||||
@ -6068,7 +6068,7 @@ BattleScript_DoTurnDmg:
|
|||||||
datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE
|
datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE
|
||||||
tryfaintmon BS_ATTACKER
|
tryfaintmon BS_ATTACKER
|
||||||
checkteamslost BattleScript_DoTurnDmgEnd
|
checkteamslost BattleScript_DoTurnDmgEnd
|
||||||
tryactivateitem BS_ATTACKER, ON_ITEM_HP_THRESHOLD
|
tryactivateitem BS_ATTACKER, ACTIVATION_ON_HP_THRESHOLD
|
||||||
BattleScript_DoTurnDmgEnd:
|
BattleScript_DoTurnDmgEnd:
|
||||||
end2
|
end2
|
||||||
|
|
||||||
@ -6308,7 +6308,7 @@ BattleScript_YawnEnd:
|
|||||||
BattleScript_EmbargoEndTurn::
|
BattleScript_EmbargoEndTurn::
|
||||||
printstring STRINGID_EMBARGOENDS
|
printstring STRINGID_EMBARGOENDS
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
tryactivateitem BS_ATTACKER, ON_ITEM_USABLE_AGAIN
|
tryactivateitem BS_ATTACKER, ACTIVATION_ON_USABLE_AGAIN
|
||||||
end2
|
end2
|
||||||
|
|
||||||
BattleScript_TelekinesisEndTurn::
|
BattleScript_TelekinesisEndTurn::
|
||||||
@ -6596,7 +6596,7 @@ BattleScript_PickupActivates::
|
|||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUp
|
||||||
printstring STRINGID_XFOUNDONEY
|
printstring STRINGID_XFOUNDONEY
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
tryactivateitem BS_ATTACKER, ON_ITEM_PICK_UP
|
tryactivateitem BS_ATTACKER, ACTIVATION_ON_PICK_UP
|
||||||
BattleScript_PickupActivatesEnd:
|
BattleScript_PickupActivatesEnd:
|
||||||
end2
|
end2
|
||||||
|
|
||||||
@ -6606,7 +6606,7 @@ BattleScript_HarvestActivates::
|
|||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUp
|
||||||
printstring STRINGID_HARVESTBERRY
|
printstring STRINGID_HARVESTBERRY
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
tryactivateitem BS_ATTACKER, ON_BERRY_HARVEST
|
tryactivateitem BS_ATTACKER, ACTIVATION_ON_HARVEST
|
||||||
BattleScript_HarvestActivatesEnd:
|
BattleScript_HarvestActivatesEnd:
|
||||||
end2
|
end2
|
||||||
|
|
||||||
|
|||||||
@ -28,8 +28,6 @@ extern const struct HoldEffectInfo gHoldEffectsInfo[];
|
|||||||
|
|
||||||
typedef bool32 (*ActivationTiming)(enum HoldEffect holdEffect);
|
typedef bool32 (*ActivationTiming)(enum HoldEffect holdEffect);
|
||||||
enum ItemEffect ItemBattleEffects(u32 primaryBattler, u32 secondaryBattler, enum HoldEffect holdEffect, ActivationTiming timing);
|
enum ItemEffect ItemBattleEffects(u32 primaryBattler, u32 secondaryBattler, enum HoldEffect holdEffect, ActivationTiming timing);
|
||||||
enum ItemEffect TryBoosterEnergy(u32 battler, enum Ability ability, ActivationTiming timing);
|
|
||||||
enum ItemEffect TryHandleSeed(u32 battler, u32 terrainFlag, enum Stat statId, u32 itemId, ActivationTiming timing);
|
|
||||||
|
|
||||||
bool32 IsOnSwitchInActivation(enum HoldEffect holdEffect);
|
bool32 IsOnSwitchInActivation(enum HoldEffect holdEffect);
|
||||||
bool32 IsOnSwitchInFirstTurnActivation(enum HoldEffect holdEffect);
|
bool32 IsOnSwitchInFirstTurnActivation(enum HoldEffect holdEffect);
|
||||||
@ -47,8 +45,8 @@ bool32 IsLifeOrbShellBellActivation(enum HoldEffect holdEffect);
|
|||||||
bool32 IsLeftoversActivation(enum HoldEffect holdEffect);
|
bool32 IsLeftoversActivation(enum HoldEffect holdEffect);
|
||||||
bool32 IsOrbsActivation(enum HoldEffect holdEffect);
|
bool32 IsOrbsActivation(enum HoldEffect holdEffect);
|
||||||
bool32 IsOnEffectActivation(enum HoldEffect holdEffect);
|
bool32 IsOnEffectActivation(enum HoldEffect holdEffect);
|
||||||
bool32 IsActivationForceTriggerItem(enum HoldEffect holdEffect);
|
bool32 IsForceTriggerItemActivation(enum HoldEffect holdEffect);
|
||||||
bool32 IsActivationOnBerry(enum HoldEffect holdEffect);
|
bool32 IsOnBerryActivation(enum HoldEffect holdEffect);
|
||||||
bool32 IsOnFlingActivation(enum HoldEffect holdEffect);
|
bool32 IsOnFlingActivation(enum HoldEffect holdEffect);
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_HOLD_EFFECTS
|
#endif // GUARD_BATTLE_HOLD_EFFECTS
|
||||||
|
|||||||
@ -151,12 +151,12 @@ enum __attribute__((packed)) HoldEffect
|
|||||||
#define HOLD_EFFECT_PARAM_MISTY_TERRAIN 2
|
#define HOLD_EFFECT_PARAM_MISTY_TERRAIN 2
|
||||||
#define HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN 3
|
#define HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN 3
|
||||||
|
|
||||||
enum ActivationState
|
enum ItemActivationState
|
||||||
{
|
{
|
||||||
ON_ITEM_USABLE_AGAIN,
|
ACTIVATION_ON_USABLE_AGAIN,
|
||||||
ON_ITEM_PICK_UP,
|
ACTIVATION_ON_PICK_UP,
|
||||||
ON_BERRY_HARVEST,
|
ACTIVATION_ON_HARVEST,
|
||||||
ON_ITEM_HP_THRESHOLD,
|
ACTIVATION_ON_HP_THRESHOLD,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GUARD_HOLD_EFFECTS_H
|
#endif // GUARD_HOLD_EFFECTS_H
|
||||||
|
|||||||
@ -27,10 +27,10 @@ bool32 IsLifeOrbShellBellActivation(enum HoldEffect holdEffect) { return gHol
|
|||||||
bool32 IsLeftoversActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].leftovers; }
|
bool32 IsLeftoversActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].leftovers; }
|
||||||
bool32 IsOrbsActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].orbs; }
|
bool32 IsOrbsActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].orbs; }
|
||||||
bool32 IsOnEffectActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onEffect; }
|
bool32 IsOnEffectActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onEffect; }
|
||||||
bool32 IsActivationOnBerry(enum HoldEffect holdEffect) { return GetItemPocket(gLastUsedItem) == POCKET_BERRIES; }
|
bool32 IsOnBerryActivation(enum HoldEffect holdEffect) { return GetItemPocket(gLastUsedItem) == POCKET_BERRIES; }
|
||||||
bool32 IsOnFlingActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onFling; }
|
bool32 IsOnFlingActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onFling; }
|
||||||
|
|
||||||
bool32 IsActivationForceTriggerItem(enum HoldEffect holdEffect)
|
bool32 IsForceTriggerItemActivation(enum HoldEffect holdEffect)
|
||||||
{
|
{
|
||||||
return gHoldEffectsInfo[holdEffect].onSwitchIn
|
return gHoldEffectsInfo[holdEffect].onSwitchIn
|
||||||
|| gHoldEffectsInfo[holdEffect].whiteHerb
|
|| gHoldEffectsInfo[holdEffect].whiteHerb
|
||||||
@ -64,7 +64,6 @@ enum ItemEffect TryBoosterEnergy(u32 battler, enum Ability ability, ActivationTi
|
|||||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler));
|
PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler));
|
||||||
gBattlerAbility = gBattleScripting.battler = battler;
|
gBattlerAbility = gBattleScripting.battler = battler;
|
||||||
gDisableStructs[battler].boosterEnergyActivated = TRUE;
|
gDisableStructs[battler].boosterEnergyActivated = TRUE;
|
||||||
gLastUsedItem = ITEM_BOOSTER_ENERGY;
|
|
||||||
RecordAbilityBattle(battler, ability);
|
RecordAbilityBattle(battler, ability);
|
||||||
if (timing == IsOnSwitchInFirstTurnActivation)
|
if (timing == IsOnSwitchInFirstTurnActivation)
|
||||||
BattleScriptExecute(BattleScript_BoosterEnergyEnd2);
|
BattleScriptExecute(BattleScript_BoosterEnergyEnd2);
|
||||||
@ -84,7 +83,6 @@ static enum ItemEffect TryRoomService(u32 battler, ActivationTiming timing)
|
|||||||
SET_STATCHANGER(STAT_SPEED, 1, TRUE);
|
SET_STATCHANGER(STAT_SPEED, 1, TRUE);
|
||||||
gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_SPEED;
|
gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_SPEED;
|
||||||
gBattleScripting.animArg2 = 0;
|
gBattleScripting.animArg2 = 0;
|
||||||
gLastUsedItem = gBattleMons[battler].item;
|
|
||||||
|
|
||||||
if (timing == IsOnSwitchInFirstTurnActivation)
|
if (timing == IsOnSwitchInFirstTurnActivation)
|
||||||
BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2);
|
BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2);
|
||||||
@ -97,11 +95,10 @@ static enum ItemEffect TryRoomService(u32 battler, ActivationTiming timing)
|
|||||||
return ITEM_NO_EFFECT;
|
return ITEM_NO_EFFECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ItemEffect TryHandleSeed(u32 battler, u32 terrainFlag, enum Stat statId, u32 itemId, ActivationTiming timing)
|
enum ItemEffect TryHandleSeed(u32 battler, u32 terrainFlag, enum Stat statId, ActivationTiming timing)
|
||||||
{
|
{
|
||||||
if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN))
|
if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN))
|
||||||
{
|
{
|
||||||
gLastUsedItem = itemId; // For surge abilities
|
|
||||||
gEffectBattler = gBattleScripting.battler = battler;
|
gEffectBattler = gBattleScripting.battler = battler;
|
||||||
SET_STATCHANGER(statId, 1, FALSE);
|
SET_STATCHANGER(statId, 1, FALSE);
|
||||||
gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId;
|
gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId;
|
||||||
@ -122,16 +119,16 @@ static enum ItemEffect TryTerrainSeeds(u32 battler, u32 item, ActivationTiming t
|
|||||||
switch (GetItemHoldEffectParam(item))
|
switch (GetItemHoldEffectParam(item))
|
||||||
{
|
{
|
||||||
case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN:
|
case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN:
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, timing);
|
effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, timing);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_PARAM_GRASSY_TERRAIN:
|
case HOLD_EFFECT_PARAM_GRASSY_TERRAIN:
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, timing);
|
effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, timing);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_PARAM_MISTY_TERRAIN:
|
case HOLD_EFFECT_PARAM_MISTY_TERRAIN:
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, timing);
|
effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, timing);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN:
|
case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN:
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, timing);
|
effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, timing);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +254,7 @@ static enum ItemEffect TryAirBalloon(u32 battler, ActivationTiming timing)
|
|||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum ItemEffect TryRockyHelmet(u32 battlerDef, u32 battlerAtk)
|
static enum ItemEffect TryRockyHelmet(u32 battlerDef, u32 battlerAtk, u32 item)
|
||||||
{
|
{
|
||||||
enum ItemEffect effect = ITEM_NO_EFFECT;
|
enum ItemEffect effect = ITEM_NO_EFFECT;
|
||||||
enum Ability ability = GetBattlerAbility(battlerAtk);
|
enum Ability ability = GetBattlerAbility(battlerAtk);
|
||||||
@ -268,7 +265,7 @@ static enum ItemEffect TryRockyHelmet(u32 battlerDef, u32 battlerAtk)
|
|||||||
&& !IsAbilityAndRecord(battlerAtk, ability, ABILITY_MAGIC_GUARD))
|
&& !IsAbilityAndRecord(battlerAtk, ability, ABILITY_MAGIC_GUARD))
|
||||||
{
|
{
|
||||||
SetPassiveDamageAmount(battlerAtk, GetNonDynamaxMaxHP(battlerAtk) / 6);
|
SetPassiveDamageAmount(battlerAtk, GetNonDynamaxMaxHP(battlerAtk) / 6);
|
||||||
PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[battlerDef].item);
|
PREPARE_ITEM_BUFFER(gBattleTextBuff1, item);
|
||||||
BattleScriptCall(BattleScript_RockyHelmetActivates);
|
BattleScriptCall(BattleScript_RockyHelmetActivates);
|
||||||
effect = ITEM_HP_CHANGE;
|
effect = ITEM_HP_CHANGE;
|
||||||
}
|
}
|
||||||
@ -355,7 +352,7 @@ static enum ItemEffect TryAbsorbBulb(u32 battlerDef)
|
|||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum ItemEffect TryJabocaBerry(u32 battlerDef, u32 battlerAtk)
|
static enum ItemEffect TryJabocaBerry(u32 battlerDef, u32 battlerAtk, u32 item)
|
||||||
{
|
{
|
||||||
enum ItemEffect effect = ITEM_NO_EFFECT;
|
enum ItemEffect effect = ITEM_NO_EFFECT;
|
||||||
|
|
||||||
@ -370,14 +367,14 @@ static enum ItemEffect TryJabocaBerry(u32 battlerDef, u32 battlerAtk)
|
|||||||
jabocaDamage *= 2;
|
jabocaDamage *= 2;
|
||||||
SetPassiveDamageAmount(battlerAtk, jabocaDamage);
|
SetPassiveDamageAmount(battlerAtk, jabocaDamage);
|
||||||
BattleScriptCall(BattleScript_JabocaRowapBerryActivates);
|
BattleScriptCall(BattleScript_JabocaRowapBerryActivates);
|
||||||
PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[battlerDef].item);
|
PREPARE_ITEM_BUFFER(gBattleTextBuff1, item);
|
||||||
effect = ITEM_HP_CHANGE;
|
effect = ITEM_HP_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum ItemEffect TryRowapBerry(u32 battlerDef, u32 battlerAtk)
|
static enum ItemEffect TryRowapBerry(u32 battlerDef, u32 battlerAtk, u32 item)
|
||||||
{
|
{
|
||||||
enum ItemEffect effect = ITEM_NO_EFFECT;
|
enum ItemEffect effect = ITEM_NO_EFFECT;
|
||||||
|
|
||||||
@ -392,7 +389,7 @@ static enum ItemEffect TryRowapBerry(u32 battlerDef, u32 battlerAtk)
|
|||||||
rowapDamage *= 2;
|
rowapDamage *= 2;
|
||||||
SetPassiveDamageAmount(battlerAtk, rowapDamage);
|
SetPassiveDamageAmount(battlerAtk, rowapDamage);
|
||||||
BattleScriptCall(BattleScript_JabocaRowapBerryActivates);
|
BattleScriptCall(BattleScript_JabocaRowapBerryActivates);
|
||||||
PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[battlerDef].item);
|
PREPARE_ITEM_BUFFER(gBattleTextBuff1, item);
|
||||||
effect = ITEM_HP_CHANGE;
|
effect = ITEM_HP_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -582,7 +579,7 @@ static enum ItemEffect TryLifeOrb(u32 battlerAtk)
|
|||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum ItemEffect TryStickyBarbOnTargetHit(u32 battlerDef, u32 battlerAtk)
|
static enum ItemEffect TryStickyBarbOnTargetHit(u32 battlerDef, u32 battlerAtk, u32 item)
|
||||||
{
|
{
|
||||||
enum ItemEffect effect = ITEM_NO_EFFECT;
|
enum ItemEffect effect = ITEM_NO_EFFECT;
|
||||||
|
|
||||||
@ -590,8 +587,8 @@ static enum ItemEffect TryStickyBarbOnTargetHit(u32 battlerDef, u32 battlerAtk)
|
|||||||
&& !CanBattlerAvoidContactEffects(battlerAtk, battlerDef, GetBattlerAbility(battlerAtk), GetBattlerHoldEffect(battlerAtk), gCurrentMove)
|
&& !CanBattlerAvoidContactEffects(battlerAtk, battlerDef, GetBattlerAbility(battlerAtk), GetBattlerHoldEffect(battlerAtk), gCurrentMove)
|
||||||
&& !DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove)
|
&& !DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove)
|
||||||
&& IsBattlerAlive(battlerAtk)
|
&& IsBattlerAlive(battlerAtk)
|
||||||
&& CanStealItem(battlerAtk, battlerDef, gBattleMons[battlerDef].item)
|
&& CanStealItem(battlerAtk, battlerDef, item)
|
||||||
&& gBattleMons[battlerAtk].item == ITEM_NONE)
|
&& item == ITEM_NONE)
|
||||||
{
|
{
|
||||||
// No sticky hold checks.
|
// No sticky hold checks.
|
||||||
gEffectBattler = battlerDef;
|
gEffectBattler = battlerDef;
|
||||||
@ -603,14 +600,14 @@ static enum ItemEffect TryStickyBarbOnTargetHit(u32 battlerDef, u32 battlerAtk)
|
|||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum ItemEffect TryStickyBarbOnEndTurn(u32 battler)
|
static enum ItemEffect TryStickyBarbOnEndTurn(u32 battler, u32 item)
|
||||||
{
|
{
|
||||||
enum ItemEffect effect = ITEM_NO_EFFECT;
|
enum ItemEffect effect = ITEM_NO_EFFECT;
|
||||||
|
|
||||||
if (!IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD))
|
if (!IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD))
|
||||||
{
|
{
|
||||||
SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8);
|
SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8);
|
||||||
PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[battler].item);
|
PREPARE_ITEM_BUFFER(gBattleTextBuff1, item);
|
||||||
BattleScriptExecute(BattleScript_ItemHurtEnd2);
|
BattleScriptExecute(BattleScript_ItemHurtEnd2);
|
||||||
effect = ITEM_HP_CHANGE;
|
effect = ITEM_HP_CHANGE;
|
||||||
}
|
}
|
||||||
@ -1070,7 +1067,7 @@ static enum ItemEffect TrySetMicleBerry(u32 battler, u32 itemId, ActivationTimin
|
|||||||
enum ItemEffect ItemBattleEffects(u32 itemBattler, u32 battler, enum HoldEffect holdEffect, ActivationTiming timing)
|
enum ItemEffect ItemBattleEffects(u32 itemBattler, u32 battler, enum HoldEffect holdEffect, ActivationTiming timing)
|
||||||
{
|
{
|
||||||
enum ItemEffect effect = ITEM_NO_EFFECT;
|
enum ItemEffect effect = ITEM_NO_EFFECT;
|
||||||
u32 item = (timing == IsActivationOnBerry) ? gLastUsedItem : gBattleMons[itemBattler].item;
|
u32 item = (timing == IsOnBerryActivation) ? gLastUsedItem : gBattleMons[itemBattler].item;
|
||||||
|
|
||||||
if (holdEffect == HOLD_EFFECT_NONE
|
if (holdEffect == HOLD_EFFECT_NONE
|
||||||
|| !timing(holdEffect)
|
|| !timing(holdEffect)
|
||||||
@ -1113,7 +1110,7 @@ enum ItemEffect ItemBattleEffects(u32 itemBattler, u32 battler, enum HoldEffect
|
|||||||
effect = TryAirBalloon(itemBattler, timing);
|
effect = TryAirBalloon(itemBattler, timing);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_ROCKY_HELMET:
|
case HOLD_EFFECT_ROCKY_HELMET:
|
||||||
effect = TryRockyHelmet(itemBattler, battler);
|
effect = TryRockyHelmet(itemBattler, battler, item);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_WEAKNESS_POLICY:
|
case HOLD_EFFECT_WEAKNESS_POLICY:
|
||||||
effect = TryWeaknessPolicy(itemBattler);
|
effect = TryWeaknessPolicy(itemBattler);
|
||||||
@ -1131,10 +1128,10 @@ enum ItemEffect ItemBattleEffects(u32 itemBattler, u32 battler, enum HoldEffect
|
|||||||
effect = TryAbsorbBulb(itemBattler);
|
effect = TryAbsorbBulb(itemBattler);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_JABOCA_BERRY:
|
case HOLD_EFFECT_JABOCA_BERRY:
|
||||||
effect = TryJabocaBerry(itemBattler, battler);
|
effect = TryJabocaBerry(itemBattler, battler, item);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_ROWAP_BERRY:
|
case HOLD_EFFECT_ROWAP_BERRY:
|
||||||
effect = TryRowapBerry(itemBattler, battler);
|
effect = TryRowapBerry(itemBattler, battler, item);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move
|
case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move
|
||||||
effect = TrySetEnigmaBerry(itemBattler, battler);
|
effect = TrySetEnigmaBerry(itemBattler, battler);
|
||||||
@ -1162,9 +1159,9 @@ enum ItemEffect ItemBattleEffects(u32 itemBattler, u32 battler, enum HoldEffect
|
|||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_STICKY_BARB:
|
case HOLD_EFFECT_STICKY_BARB:
|
||||||
if (timing == IsOnTargetHitActivation)
|
if (timing == IsOnTargetHitActivation)
|
||||||
effect = TryStickyBarbOnTargetHit(itemBattler, battler);
|
effect = TryStickyBarbOnTargetHit(itemBattler, battler, item);
|
||||||
else
|
else
|
||||||
effect = TryStickyBarbOnEndTurn(itemBattler);
|
effect = TryStickyBarbOnEndTurn(itemBattler, item);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_TOXIC_ORB:
|
case HOLD_EFFECT_TOXIC_ORB:
|
||||||
effect = TryToxicOrb(itemBattler);
|
effect = TryToxicOrb(itemBattler);
|
||||||
@ -1202,7 +1199,7 @@ enum ItemEffect ItemBattleEffects(u32 itemBattler, u32 battler, enum HoldEffect
|
|||||||
case HOLD_EFFECT_CURE_STATUS: // Lum Berry
|
case HOLD_EFFECT_CURE_STATUS: // Lum Berry
|
||||||
effect = TryCureAnyStatus(itemBattler, timing);
|
effect = TryCureAnyStatus(itemBattler, timing);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_RESTORE_HP: // Oran Berry / Berry Juice
|
case HOLD_EFFECT_RESTORE_HP: // Oran / Sitrus Berry / Berry Juice
|
||||||
effect = ItemHealHp(itemBattler, item, FIXED_HEAL_AMOUNT, timing);
|
effect = ItemHealHp(itemBattler, item, FIXED_HEAL_AMOUNT, timing);
|
||||||
break;
|
break;
|
||||||
case HOLD_EFFECT_RESTORE_PCT_HP: // Sitrus Berry
|
case HOLD_EFFECT_RESTORE_PCT_HP: // Sitrus Berry
|
||||||
|
|||||||
@ -12124,18 +12124,19 @@ static void Cmd_tryactivateitem(void)
|
|||||||
CMD_ARGS(u8 battler, u8 flag);
|
CMD_ARGS(u8 battler, u8 flag);
|
||||||
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
||||||
|
|
||||||
switch (cmd->flag)
|
switch ((enum ItemActivationState)cmd->flag)
|
||||||
{
|
{
|
||||||
case ON_ITEM_USABLE_AGAIN:
|
case ACTIVATION_ON_USABLE_AGAIN:
|
||||||
case ON_ITEM_PICK_UP:
|
case ACTIVATION_ON_PICK_UP:
|
||||||
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsActivationForceTriggerItem))
|
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsForceTriggerItemActivation))
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case ON_BERRY_HARVEST:
|
case ACTIVATION_ON_HARVEST:
|
||||||
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsActivationOnBerry))
|
gLastUsedItem = gBattleMons[battler].item;
|
||||||
|
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnBerryActivation))
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case ON_ITEM_HP_THRESHOLD:
|
case ACTIVATION_ON_HP_THRESHOLD:
|
||||||
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnHpThresholdActivation))
|
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnHpThresholdActivation))
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
@ -16432,16 +16433,17 @@ void BS_TryBoosterEnergy(void)
|
|||||||
|
|
||||||
for (u32 orderNum = 0; orderNum < gBattlersCount; orderNum++)
|
for (u32 orderNum = 0; orderNum < gBattlersCount; orderNum++)
|
||||||
{
|
{
|
||||||
u32 battlerByTurnOrder = gBattlerByTurnOrder[orderNum];
|
u32 battler = gBattlerByTurnOrder[orderNum];
|
||||||
if (GetBattlerHoldEffect(battlerByTurnOrder) != HOLD_EFFECT_BOOSTER_ENERGY)
|
enum HoldEffect holdEffect = GetBattlerHoldEffect(battler);
|
||||||
|
if (holdEffect != HOLD_EFFECT_BOOSTER_ENERGY)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
enum Ability ability = GetBattlerAbility(battlerByTurnOrder);
|
enum Ability ability = GetBattlerAbility(battler);
|
||||||
if (!(ability == ABILITY_PROTOSYNTHESIS && cmd->onFieldStatus != ON_TERRAIN)
|
if (!(ability == ABILITY_PROTOSYNTHESIS && cmd->onFieldStatus != ON_TERRAIN)
|
||||||
&& !(ability == ABILITY_QUARK_DRIVE && cmd->onFieldStatus != ON_WEATHER))
|
&& !(ability == ABILITY_QUARK_DRIVE && cmd->onFieldStatus != ON_WEATHER))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (TryBoosterEnergy(battlerByTurnOrder, ability, IsOnEffectActivation))
|
if (ItemBattleEffects(battler, 0, holdEffect, IsOnEffectActivation))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17600,7 +17602,7 @@ void BS_ActivateItemEffects(void)
|
|||||||
if (!IsBattlerAlive(battler))
|
if (!IsBattlerAlive(battler))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsActivationForceTriggerItem))
|
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsForceTriggerItemActivation))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||||
@ -17620,29 +17622,9 @@ void BS_TryTerrainSeed(void)
|
|||||||
{
|
{
|
||||||
NATIVE_ARGS(u8 battler, const u8 *failInstr);
|
NATIVE_ARGS(u8 battler, const u8 *failInstr);
|
||||||
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
||||||
if (GetBattlerHoldEffect(battler) == HOLD_EFFECT_TERRAIN_SEED)
|
enum HoldEffect holdEffect = GetBattlerHoldEffect(battler);
|
||||||
{
|
if (holdEffect == HOLD_EFFECT_TERRAIN_SEED && ItemBattleEffects(battler, 0, holdEffect, IsOnEffectActivation))
|
||||||
enum ItemEffect effect = ITEM_NO_EFFECT;
|
return;
|
||||||
u16 item = gBattleMons[battler].item;
|
|
||||||
switch (GetBattlerHoldEffectParam(battler))
|
|
||||||
{
|
|
||||||
case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN:
|
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, IsOnEffectActivation);
|
|
||||||
break;
|
|
||||||
case HOLD_EFFECT_PARAM_GRASSY_TERRAIN:
|
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, IsOnEffectActivation);
|
|
||||||
break;
|
|
||||||
case HOLD_EFFECT_PARAM_MISTY_TERRAIN:
|
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, IsOnEffectActivation);
|
|
||||||
break;
|
|
||||||
case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN:
|
|
||||||
effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, IsOnEffectActivation);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (effect != ITEM_NO_EFFECT)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
gBattlescriptCurrInstr = cmd->failInstr;
|
gBattlescriptCurrInstr = cmd->failInstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -17890,7 +17872,7 @@ void BS_ConsumeBerry(void)
|
|||||||
|
|
||||||
gBattleScripting.overrideBerryRequirements = 1;
|
gBattleScripting.overrideBerryRequirements = 1;
|
||||||
GetBattlerPartyState(battler)->ateBerry = TRUE;
|
GetBattlerPartyState(battler)->ateBerry = TRUE;
|
||||||
if (ItemBattleEffects(battler, 0, GetItemHoldEffect(gLastUsedItem), IsActivationOnBerry))
|
if (ItemBattleEffects(battler, 0, GetItemHoldEffect(gLastUsedItem), IsOnBerryActivation))
|
||||||
{
|
{
|
||||||
gBattleScripting.overrideBerryRequirements = 2;
|
gBattleScripting.overrideBerryRequirements = 2;
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user