pokeemerald/include/battle_util.h

100 lines
4.6 KiB
C
Raw Normal View History

2017-10-06 15:06:45 +00: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)
2021-10-04 14:21:03 +00:00
#define MOVE_LIMITATION_IMPRISON (1 << 5)
#define MOVE_LIMITATIONS_ALL 0xFF
2017-10-06 15:06:45 +00:00
2021-10-04 14:21:03 +00:00
#define ABILITYEFFECT_ON_SWITCHIN 0
#define ABILITYEFFECT_ENDTURN 1
#define ABILITYEFFECT_MOVES_BLOCK 2
#define ABILITYEFFECT_ABSORBING 3
#define ABILITYEFFECT_ON_DAMAGE 4
#define ABILITYEFFECT_IMMUNITY 5
#define ABILITYEFFECT_FORECAST 6
#define ABILITYEFFECT_SYNCHRONIZE 7
#define ABILITYEFFECT_ATK_SYNCHRONIZE 8
#define ABILITYEFFECT_INTIMIDATE1 9
#define ABILITYEFFECT_INTIMIDATE2 10
#define ABILITYEFFECT_TRACE 11
#define ABILITYEFFECT_CHECK_OTHER_SIDE 12
#define ABILITYEFFECT_CHECK_BATTLER_SIDE 13
#define ABILITYEFFECT_FIELD_SPORT 14
#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 15
#define ABILITYEFFECT_COUNT_OTHER_SIDE 16
#define ABILITYEFFECT_COUNT_BATTLER_SIDE 17
#define ABILITYEFFECT_COUNT_ON_FIELD 18
#define ABILITYEFFECT_CHECK_ON_FIELD 19
#define ABILITYEFFECT_MUD_SPORT 253
#define ABILITYEFFECT_WATER_SPORT 254
#define ABILITYEFFECT_SWITCH_IN_WEATHER 255
2017-10-06 15:06:45 +00:00
2024-08-15 17:34:56 +00:00
#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId) (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0))
#define ABILITY_ON_FIELD(abilityId) (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0))
#define ABILITY_ON_FIELD2(abilityId) (AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0))
2018-06-17 14:48:58 +00:00
2021-10-04 14:21:03 +00: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
#define ITEMEFFECT_KINGSROCK_SHELLBELL 4
2017-10-06 15:06:45 +00:00
2018-06-17 14:48:58 +00:00
#define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))
#define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK)))
2017-10-06 15:06:45 +00:00
void HandleAction_UseMove(void);
void HandleAction_Switch(void);
void HandleAction_UseItem(void);
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);
void PressurePPLose(u8 target, u8 attacker, u16 move);
void PressurePPLoseOnUsingPerishSong(u8 attacker);
void PressurePPLoseOnUsingImprison(u8 attacker);
2018-02-28 23:59:52 +00:00
void MarkBattlerForControllerExec(u8 battlerId);
2022-05-21 19:21:50 +00:00
void MarkBattlerReceivedLinkData(u8 battlerId);
2018-02-28 23:59:52 +00:00
void CancelMultiTurnMoves(u8 battlerId);
bool8 WasUnableToUseMove(u8 battlerId);
void PrepareStringBattle(u16 stringId, u8 battlerId);
2017-10-06 15:06:45 +00:00
void ResetSentPokesToOpponentValue(void);
2020-07-28 02:22:16 +00:00
void OpponentSwitchInResetSentPokesToOpponentValue(u8 battlerId);
2020-07-27 22:10:42 +00:00
void UpdateSentPokesToOpponentValue(u8 battlerId);
void BattleScriptPush(const u8 *bsPtr);
2017-10-06 15:06:45 +00:00
void BattleScriptPushCursor(void);
void BattleScriptPop(void);
u8 TrySetCantSelectMoveBattleScript(void);
2018-02-28 23:59:52 +00:00
u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check);
2017-10-06 15:06:45 +00:00
bool8 AreAllMovesUnusable(void);
2018-02-28 23:59:52 +00:00
u8 GetImprisonedMovesCount(u8 battlerId, u16 move);
2018-08-02 22:13:44 +00:00
u8 DoFieldEndTurnEffects(void);
u8 DoBattlerEndTurnEffects(void);
2017-12-02 13:08:55 +00:00
bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void);
2017-10-06 15:06:45 +00:00
void TryClearRageStatuses(void);
u8 AtkCanceller_UnableToUseMove(void);
2018-07-01 09:15:42 +00:00
bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2);
2018-02-28 23:59:52 +00:00
u8 CastformDataTypeChange(u8 battlerId);
u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
void BattleScriptExecute(const u8 *BS_ptr);
void BattleScriptPushCursorAndCallback(const u8 *BS_ptr);
2018-02-28 23:59:52 +00:00
u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn);
void ClearFuryCutterDestinyBondGrudge(u8 battlerId);
2017-10-06 15:06:45 +00:00
void HandleAction_RunBattleScript(void);
2018-02-28 23:59:52 +00:00
u8 GetMoveTarget(u16 move, u8 setTarget);
2017-12-02 13:08:55 +00:00
u8 IsMonDisobedient(void);
2017-10-06 15:06:45 +00:00
#endif // GUARD_BATTLE_UTIL_H