2017-10-06 17:06:45 +02: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)
|
|
|
|
#define MOVE_LIMITATION_IMPRISION (1 << 5)
|
|
|
|
|
2018-07-01 11:15:42 +02:00
|
|
|
#define ABILITYEFFECT_ON_SWITCHIN 0x0
|
|
|
|
#define ABILITYEFFECT_ENDTURN 0x1
|
|
|
|
#define ABILITYEFFECT_MOVES_BLOCK 0x2
|
|
|
|
#define ABILITYEFFECT_ABSORBING 0x3
|
2018-09-01 20:00:13 +02:00
|
|
|
#define ABILITYEFFECT_MOVE_END 0x4
|
2018-07-01 11:15:42 +02:00
|
|
|
#define ABILITYEFFECT_IMMUNITY 0x5
|
|
|
|
#define ABILITYEFFECT_FORECAST 0x6
|
|
|
|
#define ABILITYEFFECT_SYNCHRONIZE 0x7
|
|
|
|
#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
|
|
|
|
#define ABILITYEFFECT_INTIMIDATE1 0x9
|
|
|
|
#define ABILITYEFFECT_INTIMIDATE2 0xA
|
|
|
|
#define ABILITYEFFECT_TRACE 0xB
|
|
|
|
#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
|
|
|
|
#define ABILITYEFFECT_CHECK_BATTLER_SIDE 0xD
|
|
|
|
#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 0xF
|
|
|
|
#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
|
|
|
|
#define ABILITYEFFECT_COUNT_BATTLER_SIDE 0x11
|
|
|
|
#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
|
|
|
|
#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
|
|
|
|
#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
|
2017-10-06 17:06:45 +02:00
|
|
|
|
2018-06-17 16:48:58 +02: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))
|
|
|
|
|
2017-10-06 17:06:45 +02:00
|
|
|
#define ITEMEFFECT_ON_SWITCH_IN 0x0
|
2018-09-01 20:00:13 +02:00
|
|
|
#define ITEMEFFECT_MOVE_END 0x3
|
|
|
|
#define ITEMEFFECT_KINGSROCK_SHELLBELL 0x4
|
2017-10-06 17:06:45 +02:00
|
|
|
|
2018-06-17 16:48:58 +02:00
|
|
|
#define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))
|
2017-10-06 17:06:45 +02:00
|
|
|
|
2018-02-08 11:17:41 +01:00
|
|
|
u8 GetBattlerForBattleScript(u8 caseId);
|
2017-10-06 17:06:45 +02:00
|
|
|
void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
|
|
|
|
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
|
|
|
|
void PressurePPLoseOnUsingImprision(u8 bankAtk);
|
2018-02-06 20:48:02 +01:00
|
|
|
void MarkAllBattlersForControllerExec(void); // unused
|
2018-03-01 00:59:52 +01:00
|
|
|
void MarkBattlerForControllerExec(u8 battlerId);
|
2017-10-06 17:06:45 +02:00
|
|
|
void sub_803F850(u8 arg0);
|
2018-03-01 00:59:52 +01:00
|
|
|
void CancelMultiTurnMoves(u8 battlerId);
|
|
|
|
bool8 WasUnableToUseMove(u8 battlerId);
|
|
|
|
void PrepareStringBattle(u16 stringId, u8 battlerId);
|
2017-10-06 17:06:45 +02:00
|
|
|
void ResetSentPokesToOpponentValue(void);
|
2018-03-01 00:59:52 +01:00
|
|
|
void sub_803F9EC(u8 battlerId);
|
|
|
|
void sub_803FA70(u8 battlerId);
|
2017-10-06 17:06:45 +02:00
|
|
|
void BattleScriptPush(const u8* bsPtr);
|
|
|
|
void BattleScriptPushCursor(void);
|
|
|
|
void BattleScriptPop(void);
|
|
|
|
u8 TrySetCantSelectMoveBattleScript(void);
|
2018-03-01 00:59:52 +01:00
|
|
|
u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check);
|
2017-10-06 17:06:45 +02:00
|
|
|
bool8 AreAllMovesUnusable(void);
|
2018-03-01 00:59:52 +01:00
|
|
|
u8 GetImprisonedMovesCount(u8 battlerId, u16 move);
|
2018-07-21 12:10:08 +02:00
|
|
|
u8 DoFieldEndTurnEffects(void);
|
2018-07-18 22:07:48 +02:00
|
|
|
u8 DoBattlerEndTurnEffects(void);
|
2017-12-02 14:08:55 +01:00
|
|
|
bool8 HandleWishPerishSongOnTurnEnd(void);
|
|
|
|
bool8 HandleFaintedMonActions(void);
|
2018-08-11 12:16:00 +02:00
|
|
|
void TryClearRageAndFuryCutter(void);
|
2017-10-06 17:06:45 +02:00
|
|
|
u8 AtkCanceller_UnableToUseMove(void);
|
2018-07-01 11:15:42 +02:00
|
|
|
bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2);
|
2018-03-01 00:59:52 +01:00
|
|
|
u8 CastformDataTypeChange(u8 battlerId);
|
2018-07-27 23:40:10 +02:00
|
|
|
bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility);
|
2018-03-01 00:59:52 +01:00
|
|
|
u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
|
2017-10-06 17:06:45 +02:00
|
|
|
void BattleScriptExecute(const u8* BS_ptr);
|
|
|
|
void BattleScriptPushCursorAndCallback(const u8* BS_ptr);
|
2018-03-01 00:59:52 +01:00
|
|
|
u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn);
|
|
|
|
void ClearFuryCutterDestinyBondGrudge(u8 battlerId);
|
2017-10-06 17:06:45 +02:00
|
|
|
void HandleAction_RunBattleScript(void);
|
2018-03-01 00:59:52 +01:00
|
|
|
u8 GetMoveTarget(u16 move, u8 setTarget);
|
2017-12-02 14:08:55 +01:00
|
|
|
u8 IsMonDisobedient(void);
|
2018-07-14 16:41:14 +02:00
|
|
|
u32 GetBattlerAbility(u8 battlerId);
|
|
|
|
u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating);
|
|
|
|
u32 GetBattlerHoldEffectParam(u8 battlerId);
|
|
|
|
bool32 IsMoveMakingContact(u16 move, u8 battlerAtk);
|
|
|
|
bool32 IsBattlerGrounded(u8 battlerId);
|
2018-07-22 15:08:32 +02:00
|
|
|
bool32 IsBattlerAlive(u8 battlerId);
|
2018-07-14 16:41:14 +02:00
|
|
|
u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move);
|
|
|
|
u32 GetBattlerWeight(u8 battlerId);
|
2018-07-14 22:56:03 +02:00
|
|
|
s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor);
|
|
|
|
u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities);
|
2018-07-15 12:39:07 +02:00
|
|
|
u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u8 abilityDef);
|
|
|
|
u16 GetTypeModifier(u8 atkType, u8 defType);
|
2018-07-24 21:47:00 +02:00
|
|
|
s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId);
|
2017-10-06 17:06:45 +02:00
|
|
|
|
|
|
|
#endif // GUARD_BATTLE_UTIL_H
|