2017-10-06 16:06:45 +01:00
|
|
|
#ifndef GUARD_BATTLE_UTIL_H
|
|
|
|
#define GUARD_BATTLE_UTIL_H
|
|
|
|
|
|
|
|
#define MOVE_LIMITATION_ZEROMOVE (1 << 0)
|
|
|
|
#define MOVE_LIMITATION_PP (1 << 1)
|
|
|
|
#define MOVE_LIMITATION_DISABLED (1 << 2)
|
|
|
|
#define MOVE_LIMITATION_TORMENTED (1 << 3)
|
|
|
|
#define MOVE_LIMITATION_TAUNT (1 << 4)
|
2019-03-31 20:38:58 +01:00
|
|
|
#define MOVE_LIMITATION_IMPRISON (1 << 5)
|
2022-08-24 03:40:04 +01:00
|
|
|
#define MOVE_LIMITATION_ENCORE (1 << 6)
|
|
|
|
#define MOVE_LIMITATION_CHOICE_ITEM (1 << 7)
|
|
|
|
#define MOVE_LIMITATION_ASSAULT_VEST (1 << 8)
|
|
|
|
#define MOVE_LIMITATION_GRAVITY (1 << 9)
|
|
|
|
#define MOVE_LIMITATION_HEAL_BLOCK (1 << 10)
|
|
|
|
#define MOVE_LIMITATION_BELCH (1 << 11)
|
|
|
|
#define MOVE_LIMITATION_THROAT_CHOP (1 << 12)
|
|
|
|
#define MOVE_LIMITATION_STUFF_CHEEKS (1 << 13)
|
2023-10-20 00:16:37 +01:00
|
|
|
#define MOVE_LIMITATION_CANT_USE_TWICE (1 << 14)
|
2022-08-24 05:30:49 +01:00
|
|
|
|
|
|
|
#define MOVE_LIMITATION_PLACEHOLDER (1 << 15)
|
2022-08-24 03:40:04 +01:00
|
|
|
#define MOVE_LIMITATIONS_ALL 0xFFFF
|
2017-10-06 16:06:45 +01:00
|
|
|
|
2024-05-28 10:34:56 +01:00
|
|
|
enum {
|
|
|
|
ABILITYEFFECT_ON_SWITCHIN,
|
|
|
|
ABILITYEFFECT_ENDTURN,
|
|
|
|
ABILITYEFFECT_MOVES_BLOCK,
|
|
|
|
ABILITYEFFECT_WOULD_BLOCK, // Checks immunity without triggering a script
|
|
|
|
ABILITYEFFECT_ABSORBING,
|
|
|
|
ABILITYEFFECT_WOULD_ABSORB, // Checks immunity without triggering a script
|
|
|
|
ABILITYEFFECT_MOVE_END_ATTACKER,
|
|
|
|
ABILITYEFFECT_MOVE_END,
|
|
|
|
ABILITYEFFECT_IMMUNITY,
|
|
|
|
ABILITYEFFECT_SYNCHRONIZE,
|
|
|
|
ABILITYEFFECT_ATK_SYNCHRONIZE,
|
|
|
|
ABILITYEFFECT_MOVE_END_OTHER,
|
|
|
|
ABILITYEFFECT_NEUTRALIZINGGAS,
|
|
|
|
ABILITYEFFECT_FIELD_SPORT, // Only used if B_SPORT_TURNS >= GEN_6
|
|
|
|
ABILITYEFFECT_ON_WEATHER,
|
|
|
|
ABILITYEFFECT_ON_TERRAIN,
|
|
|
|
ABILITYEFFECT_SWITCH_IN_TERRAIN,
|
|
|
|
ABILITYEFFECT_SWITCH_IN_WEATHER,
|
|
|
|
ABILITYEFFECT_OPPORTUNIST,
|
|
|
|
ABILITYEFFECT_SWITCH_IN_STATUSES,
|
|
|
|
};
|
|
|
|
|
2021-10-30 03:32:19 +01:00
|
|
|
// Special cases
|
2023-10-09 01:32:15 +01:00
|
|
|
#define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS >= GEN_6
|
|
|
|
#define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS >= GEN_6
|
2017-10-06 16:06:45 +01:00
|
|
|
|
2021-10-04 15:21:03 +01:00
|
|
|
// For the first argument of ItemBattleEffects, to deteremine which block of item effects to try
|
|
|
|
#define ITEMEFFECT_ON_SWITCH_IN 0
|
|
|
|
#define ITEMEFFECT_NORMAL 1
|
|
|
|
#define ITEMEFFECT_DUMMY 2 // Unused, empty
|
|
|
|
#define ITEMEFFECT_MOVE_END 3
|
2021-11-21 18:40:26 +00:00
|
|
|
#define ITEMEFFECT_KINGSROCK 4
|
|
|
|
#define ITEMEFFECT_TARGET 5
|
|
|
|
#define ITEMEFFECT_ORBS 6
|
|
|
|
#define ITEMEFFECT_LIFEORB_SHELLBELL 7
|
2022-05-13 21:21:41 +01:00
|
|
|
#define ITEMEFFECT_USE_LAST_ITEM 8 // move end effects for just the battler, not whole field
|
2024-03-29 16:43:05 +00:00
|
|
|
#define ITEMEFFECT_STATS_CHANGED 9 // For White Herb and Eject Pack
|
2017-10-06 16:06:45 +01:00
|
|
|
|
2019-03-31 20:38:58 +01:00
|
|
|
#define WEATHER_HAS_EFFECT ((!IsAbilityOnField(ABILITY_CLOUD_NINE) && !IsAbilityOnField(ABILITY_AIR_LOCK)))
|
2017-10-06 16:06:45 +01:00
|
|
|
|
2023-09-05 08:21:14 +01:00
|
|
|
#define IS_WHOLE_SIDE_ALIVE(battler) ((IsBattlerAlive(battler) && IsBattlerAlive(BATTLE_PARTNER(battler))))
|
|
|
|
#define IS_ALIVE_AND_PRESENT(battler) (IsBattlerAlive(battler) && IsBattlerSpritePresent(battler))
|
2019-03-06 11:09:34 +00:00
|
|
|
|
2024-05-31 15:56:17 +01:00
|
|
|
// Lowest and highest percentages used for damage roll calculations
|
|
|
|
#define DMG_ROLL_PERCENT_LO 85
|
|
|
|
#define DMG_ROLL_PERCENT_HI 100
|
|
|
|
|
2019-05-20 11:03:00 +01:00
|
|
|
// for Natural Gift and Fling
|
|
|
|
struct TypePower
|
|
|
|
{
|
|
|
|
u8 type;
|
|
|
|
u8 power;
|
|
|
|
u16 effect;
|
|
|
|
};
|
|
|
|
|
2023-02-17 13:55:51 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
CANCELLER_FLAGS,
|
|
|
|
CANCELLER_SKY_DROP,
|
|
|
|
CANCELLER_ASLEEP,
|
|
|
|
CANCELLER_FROZEN,
|
|
|
|
CANCELLER_TRUANT,
|
|
|
|
CANCELLER_RECHARGE,
|
|
|
|
CANCELLER_FLINCH,
|
|
|
|
CANCELLER_DISABLED,
|
|
|
|
CANCELLER_GRAVITY,
|
|
|
|
CANCELLER_HEAL_BLOCKED,
|
|
|
|
CANCELLER_TAUNTED,
|
|
|
|
CANCELLER_IMPRISONED,
|
|
|
|
CANCELLER_CONFUSED,
|
|
|
|
CANCELLER_PARALYSED,
|
|
|
|
CANCELLER_IN_LOVE,
|
|
|
|
CANCELLER_BIDE,
|
|
|
|
CANCELLER_THAW,
|
|
|
|
CANCELLER_POWDER_MOVE,
|
|
|
|
CANCELLER_POWDER_STATUS,
|
|
|
|
CANCELLER_THROAT_CHOP,
|
2024-05-12 16:41:18 +01:00
|
|
|
CANCELLER_EXPLODING_DAMP,
|
2023-02-17 13:55:51 +00:00
|
|
|
CANCELLER_MULTIHIT_MOVES,
|
|
|
|
CANCELLER_Z_MOVES,
|
|
|
|
CANCELLER_END,
|
|
|
|
CANCELLER_PSYCHIC_TERRAIN,
|
|
|
|
CANCELLER_END2,
|
|
|
|
};
|
|
|
|
|
2024-08-25 10:20:26 +01:00
|
|
|
enum {
|
|
|
|
OBEYS,
|
|
|
|
DISOBEYS_LOAFS,
|
|
|
|
DISOBEYS_HITS_SELF,
|
|
|
|
DISOBEYS_FALL_ASLEEP,
|
|
|
|
DISOBEYS_WHILE_ASLEEP,
|
|
|
|
DISOBEYS_RANDOM_MOVE,
|
|
|
|
};
|
|
|
|
|
2019-05-20 11:03:00 +01:00
|
|
|
extern const struct TypePower gNaturalGiftTable[];
|
|
|
|
|
2021-06-25 20:37:59 +01:00
|
|
|
void HandleAction_ThrowBall(void);
|
2021-07-25 15:22:05 +01:00
|
|
|
bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move);
|
2020-09-08 21:44:04 +01:00
|
|
|
void HandleAction_UseMove(void);
|
|
|
|
void HandleAction_Switch(void);
|
|
|
|
void HandleAction_UseItem(void);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 TryRunFromBattle(u32 battler);
|
2020-09-08 21:44:04 +01:00
|
|
|
void HandleAction_Run(void);
|
|
|
|
void HandleAction_WatchesCarefully(void);
|
|
|
|
void HandleAction_SafariZoneBallThrow(void);
|
|
|
|
void HandleAction_ThrowPokeblock(void);
|
|
|
|
void HandleAction_GoNear(void);
|
|
|
|
void HandleAction_SafariZoneRun(void);
|
|
|
|
void HandleAction_WallyBallThrow(void);
|
|
|
|
void HandleAction_TryFinish(void);
|
|
|
|
void HandleAction_NothingIsFainted(void);
|
|
|
|
void HandleAction_ActionFinished(void);
|
2018-02-08 10:17:41 +00:00
|
|
|
u8 GetBattlerForBattleScript(u8 caseId);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 IsBattlerMarkedForControllerExec(u32 battler);
|
|
|
|
void MarkBattlerForControllerExec(u32 battler);
|
|
|
|
void MarkBattlerReceivedLinkData(u32 battler);
|
2023-10-15 09:56:55 +01:00
|
|
|
const u8* CancelMultiTurnMoves(u32 battler);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 WasUnableToUseMove(u32 battler);
|
|
|
|
void PrepareStringBattle(u16 stringId, u32 battler);
|
2017-10-06 16:06:45 +01:00
|
|
|
void ResetSentPokesToOpponentValue(void);
|
2023-09-12 23:02:26 +01:00
|
|
|
void OpponentSwitchInResetSentPokesToOpponentValue(u32 battler);
|
|
|
|
void UpdateSentPokesToOpponentValue(u32 battler);
|
2022-07-29 15:17:58 +01:00
|
|
|
void BattleScriptPush(const u8 *bsPtr);
|
2017-10-06 16:06:45 +01:00
|
|
|
void BattleScriptPushCursor(void);
|
|
|
|
void BattleScriptPop(void);
|
2023-08-30 09:18:31 +01:00
|
|
|
u32 TrySetCantSelectMoveBattleScript(u32 battler);
|
2023-09-12 23:02:26 +01:00
|
|
|
u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check);
|
2023-08-30 09:18:31 +01:00
|
|
|
bool32 AreAllMovesUnusable(u32 battler);
|
2023-09-12 23:02:26 +01:00
|
|
|
u8 GetImprisonedMovesCount(u32 battler, u16 move);
|
2018-07-21 11:10:08 +01:00
|
|
|
u8 DoFieldEndTurnEffects(void);
|
2020-04-13 14:00:17 +01:00
|
|
|
s32 GetDrainedBigRootHp(u32 battler, s32 hp);
|
2018-07-18 21:07:48 +01:00
|
|
|
u8 DoBattlerEndTurnEffects(void);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 HandleWishPerishSongOnTurnEnd(void);
|
|
|
|
bool32 HandleFaintedMonActions(void);
|
2018-08-11 11:16:00 +01:00
|
|
|
void TryClearRageAndFuryCutter(void);
|
2023-07-30 15:50:51 +01:00
|
|
|
u8 AtkCanceller_UnableToUseMove(u32 moveType);
|
2023-07-15 13:00:55 +01:00
|
|
|
void SetAtkCancellerForCalledMove(void);
|
2018-12-01 10:35:49 +00:00
|
|
|
u8 AtkCanceller_UnableToUseMove2(void);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 HasNoMonsToSwitch(u32 battler, u8 r1, u8 r2);
|
|
|
|
bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility);
|
|
|
|
u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg);
|
|
|
|
bool32 TryPrimalReversion(u32 battler);
|
2022-08-12 05:48:36 +01:00
|
|
|
bool32 IsNeutralizingGasOnField(void);
|
2024-07-26 20:11:16 +01:00
|
|
|
bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability);
|
2023-09-12 23:02:26 +01:00
|
|
|
u32 GetBattlerAbility(u32 battler);
|
2023-08-30 09:18:31 +01:00
|
|
|
u32 IsAbilityOnSide(u32 battler, u32 ability);
|
|
|
|
u32 IsAbilityOnOpposingSide(u32 battler, u32 ability);
|
2019-03-31 20:38:58 +01:00
|
|
|
u32 IsAbilityOnField(u32 ability);
|
2023-08-30 09:18:31 +01:00
|
|
|
u32 IsAbilityOnFieldExcept(u32 battler, u32 ability);
|
|
|
|
u32 IsAbilityPreventingEscape(u32 battler);
|
2024-06-12 10:21:44 +01:00
|
|
|
bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move);
|
2023-08-30 09:18:31 +01:00
|
|
|
bool32 CanBattlerEscape(u32 battler); // no ability check
|
2022-07-29 15:17:58 +01:00
|
|
|
void BattleScriptExecute(const u8 *BS_ptr);
|
|
|
|
void BattleScriptPushCursorAndCallback(const u8 *BS_ptr);
|
2023-09-12 23:02:26 +01:00
|
|
|
u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn);
|
2023-11-18 14:19:38 +00:00
|
|
|
void ClearVariousBattlerFlags(u32 battler);
|
2017-10-06 16:06:45 +01:00
|
|
|
void HandleAction_RunBattleScript(void);
|
2023-08-30 09:18:31 +01:00
|
|
|
u32 SetRandomTarget(u32 battler);
|
2021-10-16 21:10:45 +01:00
|
|
|
u32 GetMoveTarget(u16 move, u8 setTarget);
|
2024-08-25 10:20:26 +01:00
|
|
|
u8 GetAttackerObedienceForAction();
|
2023-09-12 22:20:09 +01:00
|
|
|
u32 GetBattlerHoldEffect(u32 battler, bool32 checkNegating);
|
2024-04-14 17:43:55 +01:00
|
|
|
u32 GetBattlerHoldEffectIgnoreAbility(u32 battler, bool32 checkNegating);
|
|
|
|
u32 GetBattlerHoldEffectInternal(u32 battler, bool32 checkNegating, bool32 checkAbility);
|
2023-09-12 23:02:26 +01:00
|
|
|
u32 GetBattlerHoldEffectParam(u32 battler);
|
|
|
|
bool32 IsMoveMakingContact(u32 move, u32 battlerAtk);
|
|
|
|
bool32 IsBattlerGrounded(u32 battler);
|
|
|
|
bool32 IsBattlerAlive(u32 battler);
|
2023-09-13 12:23:19 +01:00
|
|
|
u32 GetMoveSlot(u16 *moves, u32 move);
|
2023-09-12 23:02:26 +01:00
|
|
|
u32 GetBattlerWeight(u32 battler);
|
2023-07-06 12:41:16 +01:00
|
|
|
u32 CalcRolloutBasePower(u32 battlerAtk, u32 basePower, u32 rolloutTimer);
|
|
|
|
u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter);
|
2023-09-12 22:20:09 +01:00
|
|
|
s32 CalculateMoveDamage(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags);
|
2023-09-13 23:07:41 +01:00
|
|
|
s32 CalculateMoveDamageVars(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, uq4_12_t typeEffectivenessModifier,
|
|
|
|
u32 weather, bool32 isCrit, u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef);
|
2023-09-14 10:05:00 +01:00
|
|
|
uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities);
|
2023-07-07 13:11:49 +01:00
|
|
|
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef);
|
2023-09-12 22:20:09 +01:00
|
|
|
uq4_12_t GetTypeModifier(u32 atkType, u32 defType);
|
2024-01-18 12:10:20 +00:00
|
|
|
uq4_12_t GetTypeEffectiveness(struct Pokemon *mon, u8 moveType);
|
2023-09-12 23:02:26 +01:00
|
|
|
s32 GetStealthHazardDamage(u8 hazardType, u32 battler);
|
2022-05-02 04:04:16 +01:00
|
|
|
s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 CanMegaEvolve(u32 battler);
|
|
|
|
bool32 CanUltraBurst(u32 battler);
|
2024-06-22 21:25:40 +01:00
|
|
|
void ActivateMegaEvolution(u32 battler);
|
|
|
|
void ActivateUltraBurst(u32 battler);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 IsBattlerMegaEvolved(u32 battler);
|
|
|
|
bool32 IsBattlerPrimalReverted(u32 battler);
|
|
|
|
bool32 IsBattlerUltraBursted(u32 battler);
|
|
|
|
u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method);
|
2024-06-26 22:44:01 +01:00
|
|
|
bool32 TryBattleFormChange(u32 battler, u32 method);
|
2018-09-29 14:43:56 +01:00
|
|
|
bool32 DoBattlersShareType(u32 battler1, u32 battler2);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId);
|
2023-08-30 09:18:31 +01:00
|
|
|
u32 GetIllusionMonSpecies(u32 battler);
|
|
|
|
struct Pokemon *GetIllusionMonPtr(u32 battler);
|
|
|
|
void ClearIllusionMon(u32 battler);
|
|
|
|
bool32 SetIllusionMon(struct Pokemon *mon, u32 battler);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 ShouldGetStatBadgeBoost(u16 flagId, u32 battler);
|
2023-12-20 09:08:26 +00:00
|
|
|
u8 GetBattleMoveCategory(u32 moveId);
|
2023-09-07 19:13:06 +01:00
|
|
|
bool32 CanFling(u32 battler);
|
2020-12-13 22:02:21 +00:00
|
|
|
bool32 IsTelekinesisBannedSpecies(u16 species);
|
|
|
|
bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
|
2024-05-26 21:23:04 +01:00
|
|
|
bool32 IsBelchPreventingMove(u32 battler, u32 move);
|
2023-08-30 09:18:31 +01:00
|
|
|
bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 IsPartnerMonFromSameTrainer(u32 battler);
|
2023-12-20 09:08:26 +00:00
|
|
|
u8 GetCategoryBasedOnStats(u32 battler);
|
2024-06-12 10:21:44 +01:00
|
|
|
void SetShellSideArmCategory(void);
|
2024-03-14 20:20:13 +00:00
|
|
|
bool32 MoveIsAffectedBySheerForce(u32 move);
|
2024-02-26 06:11:21 +00:00
|
|
|
bool32 TestIfSheerForceAffected(u32 battler, u16 move);
|
2023-04-20 14:08:42 +01:00
|
|
|
void TryRestoreHeldItems(void);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item);
|
|
|
|
void TrySaveExchangedItem(u32 battler, u16 stolenItem);
|
|
|
|
bool32 IsPartnerMonFromSameTrainer(u32 battler);
|
|
|
|
u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute);
|
|
|
|
bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes);
|
|
|
|
void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast);
|
|
|
|
bool32 CompareStat(u32 battler, u8 statId, u8 cmpTo, u8 cmpKind);
|
|
|
|
bool32 TryRoomService(u32 battler);
|
|
|
|
void BufferStatChange(u32 battler, u8 statId, u8 stringId);
|
|
|
|
bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget);
|
|
|
|
u16 GetUsedHeldItem(u32 battler);
|
2024-08-16 14:37:23 +01:00
|
|
|
bool32 PickupHasValidTarget(u32 battler);
|
|
|
|
bool32 CantPickupItem(u32 battler);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags);
|
|
|
|
u32 GetBattlerMoveTargetType(u32 battler, u32 move);
|
2023-09-12 22:20:09 +01:00
|
|
|
bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move);
|
2022-11-02 02:50:26 +00:00
|
|
|
void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon);
|
|
|
|
void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon);
|
2022-10-21 06:08:37 +01:00
|
|
|
void RecalcBattlerStats(u32 battler, struct Pokemon *mon);
|
2023-06-21 18:19:54 +01:00
|
|
|
bool32 IsAlly(u32 battlerAtk, u32 battlerDef);
|
2023-09-08 03:18:18 +01:00
|
|
|
bool32 IsGen6ExpShareEnabled(void);
|
2024-02-26 05:21:38 +00:00
|
|
|
bool32 MoveHasAdditionalEffect(u32 move, u32 moveEffect);
|
|
|
|
bool32 MoveHasAdditionalEffectWithChance(u32 move, u32 moveEffect, u32 chance);
|
|
|
|
bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect);
|
|
|
|
bool32 MoveHasAdditionalEffectSelfArg(u32 move, u32 moveEffect, u32 argument);
|
|
|
|
bool32 MoveHasChargeTurnAdditionalEffect(u32 move);
|
2024-05-28 10:34:56 +01:00
|
|
|
bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef);
|
2024-09-24 17:40:44 +01:00
|
|
|
bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef);
|
2017-10-06 16:06:45 +01:00
|
|
|
|
2024-07-03 09:48:31 +01:00
|
|
|
bool32 CanBeSlept(u32 battler, u32 ability);
|
|
|
|
bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility);
|
|
|
|
bool32 CanBeBurned(u32 battler, u32 ability);
|
|
|
|
bool32 CanBeParalyzed(u32 battler, u32 ability);
|
2023-09-12 23:02:26 +01:00
|
|
|
bool32 CanBeFrozen(u32 battler);
|
|
|
|
bool32 CanGetFrostbite(u32 battler);
|
|
|
|
bool32 CanBeConfused(u32 battler);
|
|
|
|
bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag);
|
2023-11-14 20:29:38 +00:00
|
|
|
u32 GetBattlerAffectionHearts(u32 battler);
|
2024-11-17 09:21:01 +00:00
|
|
|
void TryToRevertMimicryAndFlags(void);
|
2023-09-12 23:02:26 +01:00
|
|
|
u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc);
|
|
|
|
bool32 ChangeTypeBasedOnTerrain(u32 battler);
|
|
|
|
void RemoveConfusionStatus(u32 battler);
|
|
|
|
u8 GetBattlerGender(u32 battler);
|
|
|
|
bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2);
|
2023-10-09 11:14:18 +01:00
|
|
|
bool32 AreBattlersOfSameGender(u32 battler1, u32 battler2);
|
2023-12-29 03:04:42 +00:00
|
|
|
u32 CalcSecondaryEffectChance(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect);
|
|
|
|
bool32 MoveEffectIsGuaranteed(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect);
|
Terastallization (#4110)
* wrote foundational terastal tests
* implemented baseline test-only Tera functionality; modified GetBattlerType + STAB calculations, misc. changes to some moves
* added tests and func. for Stellar type, more tests for Tera Blast
* more tests for Stellar type, Conversion fixes, Color Change + Conversion2 future proof
* implemented tera blast, expanded stellar type func., fixed tests
* last set of Tera/Tera Blast tests for checklist, protean fix
* implemented in-battle Terastallization, WIP stellar indicator and tera animation
* fixed bad merge
* expanded NUMBER_OF_MON_TYPES, cut down on TYPE_STELLAR hackiness, added Stellar type to summary
* fixed type indicators
* added tera logic to AI
* implemented code review changes, added B_TERA_ORB_NO_COST
* updated AI to calc damage with Tera when applicable; minor rework to AI gimmick handling
* fixed Tera Blast split choice occuring when not Terastallized
* fixed Tera Blast using Last Respects BP calcs
* added tera type to TrainerMon, code review tweaks
2024-04-24 10:17:46 +01:00
|
|
|
u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera);
|
2023-11-26 15:59:44 +00:00
|
|
|
bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon);
|
|
|
|
bool8 IsMonBannedFromSkyBattles(u16 species);
|
2024-01-11 18:02:48 +00:00
|
|
|
void RemoveBattlerType(u32 battler, u8 type);
|
2017-10-06 16:06:45 +01:00
|
|
|
|
|
|
|
#endif // GUARD_BATTLE_UTIL_H
|