2017-03-05 08:35:03 +01:00
|
|
|
#ifndef GUARD_BATTLE_H
|
|
|
|
#define GUARD_BATTLE_H
|
|
|
|
|
2017-10-06 17:06:45 +02:00
|
|
|
// should they be included here or included individually by every file?
|
2018-02-08 00:35:13 +01:00
|
|
|
#include "constants/battle.h"
|
2018-02-26 15:56:59 +01:00
|
|
|
#include "battle_main.h"
|
2018-06-30 15:35:54 +02:00
|
|
|
#include "battle_message.h"
|
2017-10-06 17:06:45 +02:00
|
|
|
#include "battle_util.h"
|
|
|
|
#include "battle_script_commands.h"
|
2017-10-10 21:45:07 +02:00
|
|
|
#include "battle_ai_switch_items.h"
|
2017-11-04 16:11:13 +01:00
|
|
|
#include "battle_gfx_sfx_util.h"
|
2017-11-12 16:39:21 +01:00
|
|
|
#include "battle_util2.h"
|
2017-12-17 20:10:57 +01:00
|
|
|
#include "battle_bg.h"
|
2020-11-06 20:59:52 +01:00
|
|
|
#include "pokeball.h"
|
2017-10-06 17:06:45 +02:00
|
|
|
|
2018-02-06 02:46:59 +01:00
|
|
|
#define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler])
|
|
|
|
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
|
|
|
|
#define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE)
|
2018-01-16 22:12:38 +01:00
|
|
|
|
2021-10-12 02:49:56 +02:00
|
|
|
// Used to exclude moves learned temporarily by Transform or Mimic
|
|
|
|
#define MOVE_IS_PERMANENT(battler, moveSlot) \
|
|
|
|
(!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \
|
|
|
|
&& !(gDisableStructs[battler].mimickedMoves & gBitTable[moveSlot]))
|
|
|
|
|
2018-02-06 23:09:39 +01:00
|
|
|
// Battle Actions
|
|
|
|
// These determine what each battler will do in a turn
|
|
|
|
#define B_ACTION_USE_MOVE 0
|
|
|
|
#define B_ACTION_USE_ITEM 1
|
|
|
|
#define B_ACTION_SWITCH 2
|
|
|
|
#define B_ACTION_RUN 3
|
|
|
|
#define B_ACTION_SAFARI_WATCH_CAREFULLY 4
|
|
|
|
#define B_ACTION_SAFARI_BALL 5
|
|
|
|
#define B_ACTION_SAFARI_POKEBLOCK 6
|
|
|
|
#define B_ACTION_SAFARI_GO_NEAR 7
|
|
|
|
#define B_ACTION_SAFARI_RUN 8
|
2018-10-14 18:37:52 +02:00
|
|
|
#define B_ACTION_WALLY_THROW 9
|
2019-02-02 11:32:00 +01:00
|
|
|
#define B_ACTION_EXEC_SCRIPT 10
|
|
|
|
#define B_ACTION_TRY_FINISH 11
|
|
|
|
#define B_ACTION_FINISHED 12
|
2018-02-06 23:09:39 +01:00
|
|
|
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
|
|
|
|
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
|
|
|
|
#define B_ACTION_NONE 0xFF
|
2017-10-04 19:25:14 +02:00
|
|
|
|
2021-10-04 16:21:03 +02:00
|
|
|
#define MOVE_TARGET_SELECTED 0
|
|
|
|
#define MOVE_TARGET_DEPENDS (1 << 0)
|
|
|
|
#define MOVE_TARGET_USER_OR_SELECTED (1 << 1)
|
|
|
|
#define MOVE_TARGET_RANDOM (1 << 2)
|
|
|
|
#define MOVE_TARGET_BOTH (1 << 3)
|
|
|
|
#define MOVE_TARGET_USER (1 << 4)
|
|
|
|
#define MOVE_TARGET_FOES_AND_ALLY (1 << 5)
|
|
|
|
#define MOVE_TARGET_OPPONENTS_FIELD (1 << 6)
|
|
|
|
|
|
|
|
// For the second argument of GetMoveTarget, when no target override is needed
|
|
|
|
#define NO_TARGET_OVERRIDE 0
|
2017-09-04 21:43:13 +02:00
|
|
|
|
2018-02-07 23:21:51 +01:00
|
|
|
#define BATTLE_BUFFER_LINK_SIZE 0x1000
|
|
|
|
|
2019-04-04 23:53:06 +02:00
|
|
|
struct ResourceFlags
|
2017-09-04 21:43:13 +02:00
|
|
|
{
|
|
|
|
u32 flags[4];
|
|
|
|
};
|
|
|
|
|
2019-04-04 23:53:06 +02:00
|
|
|
#define RESOURCE_FLAG_FLASH_FIRE 1
|
2017-09-04 21:43:13 +02:00
|
|
|
|
|
|
|
struct DisableStruct
|
|
|
|
{
|
2019-01-19 22:32:25 +01:00
|
|
|
u32 transformedMonPersonality;
|
|
|
|
u16 disabledMove;
|
|
|
|
u16 encoredMove;
|
|
|
|
u8 protectUses;
|
|
|
|
u8 stockpileCounter;
|
|
|
|
u8 substituteHP;
|
|
|
|
u8 disableTimer:4;
|
|
|
|
u8 disableTimerStartValue:4;
|
|
|
|
u8 encoredMovePos;
|
|
|
|
u8 filler_D; // Unused field.
|
|
|
|
u8 encoreTimer:4;
|
|
|
|
u8 encoreTimerStartValue:4;
|
|
|
|
u8 perishSongTimer:4;
|
|
|
|
u8 perishSongTimerStartValue:4;
|
|
|
|
u8 furyCutterCounter;
|
|
|
|
u8 rolloutTimer:4;
|
|
|
|
u8 rolloutTimerStartValue:4;
|
|
|
|
u8 chargeTimer:4;
|
|
|
|
u8 chargeTimerStartValue:4;
|
|
|
|
u8 tauntTimer:4;
|
|
|
|
u8 tauntTimer2:4;
|
|
|
|
u8 battlerPreventingEscape;
|
|
|
|
u8 battlerWithSureHit;
|
|
|
|
u8 isFirstTurn;
|
|
|
|
u8 filler_17; // Unused field.
|
|
|
|
u8 truantCounter:1;
|
|
|
|
u8 truantSwitchInHack:1;
|
|
|
|
u8 filler_18_2:2; // Unused field.
|
|
|
|
u8 mimickedMoves:4;
|
|
|
|
u8 rechargeTimer;
|
2017-09-04 21:43:13 +02:00
|
|
|
};
|
|
|
|
|
2017-09-17 14:10:32 +02:00
|
|
|
struct ProtectStruct
|
|
|
|
{
|
|
|
|
u32 protected:1;
|
|
|
|
u32 endured:1;
|
2018-07-07 19:57:09 +02:00
|
|
|
u32 noValidMoves:1;
|
2017-09-17 14:10:32 +02:00
|
|
|
u32 helpingHand:1;
|
|
|
|
u32 bounceMove:1;
|
|
|
|
u32 stealMove:1;
|
2019-01-29 22:22:02 +01:00
|
|
|
u32 flag0Unknown:1; // Only set to 0 once.
|
2017-09-17 14:10:32 +02:00
|
|
|
u32 prlzImmobility:1;
|
|
|
|
u32 confusionSelfDmg:1;
|
2017-10-06 17:06:45 +02:00
|
|
|
u32 targetNotAffected:1;
|
2017-09-17 14:10:32 +02:00
|
|
|
u32 chargingTurn:1;
|
2021-10-04 16:21:03 +02:00
|
|
|
u32 fleeType:2; // 0: Normal, 1: FLEE_ITEM, 2: FLEE_ABILITY
|
2019-03-02 23:40:38 +01:00
|
|
|
u32 usedImprisonedMove:1;
|
2017-09-17 14:10:32 +02:00
|
|
|
u32 loveImmobility:1;
|
|
|
|
u32 usedDisabledMove:1;
|
2018-10-14 18:10:54 +02:00
|
|
|
u32 usedTauntedMove:1;
|
2019-01-29 22:22:02 +01:00
|
|
|
u32 flag2Unknown:1; // Only set to 0 once. Checked in 'WasUnableToUseMove' function.
|
2018-10-14 18:10:54 +02:00
|
|
|
u32 flinchImmobility:1;
|
|
|
|
u32 notFirstStrike:1;
|
2019-01-29 22:22:02 +01:00
|
|
|
u32 palaceUnableToUseMove:1;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
u32 physicalDmg;
|
|
|
|
u32 specialDmg;
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 physicalBattlerId;
|
|
|
|
u8 specialBattlerId;
|
2017-09-17 14:10:32 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct SpecialStatus
|
|
|
|
{
|
2020-08-16 19:14:35 +02:00
|
|
|
u32 statLowered:1;
|
|
|
|
u32 lightningRodRedirected:1;
|
|
|
|
u32 restoredBattlerSprite: 1;
|
|
|
|
u32 intimidatedMon:1;
|
|
|
|
u32 traced:1;
|
|
|
|
u32 ppNotAffectedByPressure:1;
|
2021-10-13 01:50:32 +02:00
|
|
|
u32 faintedHasReplacement:1;
|
2020-08-16 19:14:35 +02:00
|
|
|
u32 focusBanded:1;
|
2018-02-07 22:53:40 +01:00
|
|
|
s32 dmg;
|
|
|
|
s32 physicalDmg;
|
|
|
|
s32 specialDmg;
|
|
|
|
u8 physicalBattlerId;
|
|
|
|
u8 specialBattlerId;
|
2017-09-17 14:10:32 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct SideTimer
|
|
|
|
{
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 reflectTimer;
|
|
|
|
u8 reflectBattlerId;
|
|
|
|
u8 lightscreenTimer;
|
|
|
|
u8 lightscreenBattlerId;
|
|
|
|
u8 mistTimer;
|
|
|
|
u8 mistBattlerId;
|
|
|
|
u8 safeguardTimer;
|
|
|
|
u8 safeguardBattlerId;
|
|
|
|
u8 followmeTimer;
|
|
|
|
u8 followmeTarget;
|
|
|
|
u8 spikesAmount;
|
2017-09-17 14:10:32 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct WishFutureKnock
|
|
|
|
{
|
2018-02-06 02:46:59 +01:00
|
|
|
u8 futureSightCounter[MAX_BATTLERS_COUNT];
|
|
|
|
u8 futureSightAttacker[MAX_BATTLERS_COUNT];
|
|
|
|
s32 futureSightDmg[MAX_BATTLERS_COUNT];
|
|
|
|
u16 futureSightMove[MAX_BATTLERS_COUNT];
|
|
|
|
u8 wishCounter[MAX_BATTLERS_COUNT];
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 wishMonId[MAX_BATTLERS_COUNT];
|
2017-09-17 14:10:32 +02:00
|
|
|
u8 weatherDuration;
|
2018-10-14 18:37:52 +02:00
|
|
|
u8 knockedOffMons[2]; // Each battler is represented by a bit. The array entry is dependent on the battler's side.
|
2017-09-17 14:10:32 +02:00
|
|
|
};
|
|
|
|
|
2017-09-04 21:43:13 +02:00
|
|
|
struct AI_ThinkingStruct
|
|
|
|
{
|
|
|
|
u8 aiState;
|
|
|
|
u8 movesetIndex;
|
|
|
|
u16 moveConsidered;
|
2019-09-08 17:53:48 +02:00
|
|
|
s8 score[MAX_MON_MOVES];
|
2017-09-04 21:43:13 +02:00
|
|
|
u32 funcResult;
|
|
|
|
u32 aiFlags;
|
|
|
|
u8 aiAction;
|
|
|
|
u8 aiLogicId;
|
|
|
|
u8 filler12[6];
|
2019-09-08 17:53:48 +02:00
|
|
|
u8 simulatedRNG[MAX_MON_MOVES];
|
2017-09-04 21:43:13 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct UsedMoves
|
|
|
|
{
|
2019-09-08 17:53:48 +02:00
|
|
|
u16 moves[MAX_MON_MOVES];
|
|
|
|
u16 unknown[MAX_MON_MOVES];
|
2017-09-04 21:43:13 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct BattleHistory
|
|
|
|
{
|
2018-02-06 02:46:59 +01:00
|
|
|
struct UsedMoves usedMoves[MAX_BATTLERS_COUNT];
|
|
|
|
u8 abilities[MAX_BATTLERS_COUNT];
|
|
|
|
u8 itemEffects[MAX_BATTLERS_COUNT];
|
|
|
|
u16 trainerItems[MAX_BATTLERS_COUNT];
|
2017-09-05 09:41:48 +02:00
|
|
|
u8 itemsNo;
|
2017-09-04 21:43:13 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct BattleScriptsStack
|
|
|
|
{
|
2017-09-17 14:10:32 +02:00
|
|
|
const u8 *ptr[8];
|
2017-09-04 21:43:13 +02:00
|
|
|
u8 size;
|
|
|
|
};
|
|
|
|
|
2017-09-17 17:14:32 +02:00
|
|
|
struct BattleCallbacksStack
|
|
|
|
{
|
|
|
|
void (*function[8])(void);
|
|
|
|
u8 size;
|
|
|
|
};
|
|
|
|
|
2017-09-22 21:33:49 +02:00
|
|
|
struct StatsArray
|
|
|
|
{
|
2019-04-04 21:24:21 +02:00
|
|
|
u16 stats[NUM_STATS];
|
2017-09-22 21:33:49 +02:00
|
|
|
};
|
|
|
|
|
2017-09-04 21:43:13 +02:00
|
|
|
struct BattleResources
|
|
|
|
{
|
2019-04-05 23:11:24 +02:00
|
|
|
struct SecretBase* secretBase;
|
2019-04-04 23:53:06 +02:00
|
|
|
struct ResourceFlags *flags;
|
2017-09-04 21:43:13 +02:00
|
|
|
struct BattleScriptsStack* battleScriptsStack;
|
2017-09-17 17:14:32 +02:00
|
|
|
struct BattleCallbacksStack* battleCallbackStack;
|
2019-04-04 21:24:21 +02:00
|
|
|
struct StatsArray* beforeLvlUp;
|
2017-09-04 21:43:13 +02:00
|
|
|
struct AI_ThinkingStruct *ai;
|
|
|
|
struct BattleHistory *battleHistory;
|
|
|
|
struct BattleScriptsStack *AI_ScriptsStack;
|
|
|
|
};
|
|
|
|
|
2017-09-05 09:41:48 +02:00
|
|
|
struct BattleResults
|
|
|
|
{
|
|
|
|
u8 playerFaintCounter; // 0x0
|
|
|
|
u8 opponentFaintCounter; // 0x1
|
2017-09-25 00:09:13 +02:00
|
|
|
u8 playerSwitchesCounter; // 0x2
|
2019-01-19 22:32:25 +01:00
|
|
|
u8 numHealingItemsUsed; // 0x3
|
|
|
|
u8 numRevivesUsed; // 0x4
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 playerMonWasDamaged:1; // 0x5
|
2017-10-13 17:09:36 +02:00
|
|
|
u8 usedMasterBall:1; // 0x5
|
|
|
|
u8 caughtMonBall:4; // 0x5
|
2018-06-28 21:06:32 +02:00
|
|
|
u8 shinyWildMon:1; // 0x5
|
2017-10-06 00:12:01 +02:00
|
|
|
u16 playerMon1Species; // 0x6
|
2018-06-28 21:06:32 +02:00
|
|
|
u8 playerMon1Name[POKEMON_NAME_LENGTH + 1]; // 0x8
|
2017-09-05 09:41:48 +02:00
|
|
|
u8 battleTurnCounter; // 0x13
|
2018-06-28 21:06:32 +02:00
|
|
|
u8 playerMon2Name[POKEMON_NAME_LENGTH + 1]; // 0x14
|
|
|
|
u8 pokeblockThrows; // 0x1F
|
2017-09-05 09:41:48 +02:00
|
|
|
u16 lastOpponentSpecies; // 0x20
|
2017-10-06 00:12:01 +02:00
|
|
|
u16 lastUsedMovePlayer; // 0x22
|
|
|
|
u16 lastUsedMoveOpponent; // 0x24
|
|
|
|
u16 playerMon2Species; // 0x26
|
2017-09-28 15:34:21 +02:00
|
|
|
u16 caughtMonSpecies; // 0x28
|
2018-06-28 21:06:32 +02:00
|
|
|
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
|
2020-10-24 02:47:10 +02:00
|
|
|
u8 filler35; // 0x35
|
2020-11-06 20:59:52 +01:00
|
|
|
u8 catchAttempts[POKEBALL_COUNT - 1]; // 0x36 Doesn't include Master ball
|
2017-09-05 09:41:48 +02:00
|
|
|
};
|
|
|
|
|
2018-02-27 20:40:09 +01:00
|
|
|
struct BattleTv_Side
|
2018-02-27 18:13:28 +01:00
|
|
|
{
|
|
|
|
u32 spikesMonId:3;
|
|
|
|
u32 reflectMonId:3;
|
|
|
|
u32 lightScreenMonId:3;
|
|
|
|
u32 safeguardMonId:3;
|
|
|
|
u32 mistMonId:3;
|
|
|
|
u32 futureSightMonId:3;
|
|
|
|
u32 doomDesireMonId:3;
|
|
|
|
u32 perishSongMonId:3;
|
|
|
|
u32 wishMonId:3;
|
|
|
|
u32 grudgeMonId:3;
|
2018-02-27 20:40:09 +01:00
|
|
|
u32 usedMoveSlot:2;
|
2018-02-27 18:13:28 +01:00
|
|
|
u32 spikesMoveSlot:2;
|
|
|
|
u32 reflectMoveSlot:2;
|
|
|
|
u32 lightScreenMoveSlot:2;
|
|
|
|
u32 safeguardMoveSlot:2;
|
|
|
|
u32 mistMoveSlot:2;
|
|
|
|
u32 futureSightMoveSlot:2;
|
|
|
|
u32 doomDesireMoveSlot:2;
|
|
|
|
u32 perishSongMoveSlot:2;
|
|
|
|
u32 wishMoveSlot:2;
|
|
|
|
u32 grudgeMoveSlot:2;
|
|
|
|
u32 destinyBondMonId:3;
|
|
|
|
u32 destinyBondMoveSlot:2;
|
2018-02-27 20:40:09 +01:00
|
|
|
u32 faintCause:4;
|
|
|
|
u32 faintCauseMonId:3;
|
2018-02-27 18:13:28 +01:00
|
|
|
u32 explosion:1;
|
|
|
|
u32 explosionMoveSlot:2;
|
|
|
|
u32 explosionMonId:3;
|
|
|
|
u32 perishSong:1;
|
|
|
|
};
|
|
|
|
|
2018-02-27 20:40:09 +01:00
|
|
|
struct BattleTv_Position
|
2018-02-27 18:13:28 +01:00
|
|
|
{
|
|
|
|
u32 curseMonId:3;
|
|
|
|
u32 leechSeedMonId:3;
|
|
|
|
u32 nightmareMonId:3;
|
|
|
|
u32 wrapMonId:3;
|
|
|
|
u32 attractMonId:3;
|
|
|
|
u32 confusionMonId:3;
|
|
|
|
u32 curseMoveSlot:2;
|
|
|
|
u32 leechSeedMoveSlot:2;
|
|
|
|
u32 nightmareMoveSlot:2;
|
|
|
|
u32 wrapMoveSlot:2;
|
|
|
|
u32 attractMoveSlot:2;
|
|
|
|
u32 confusionMoveSlot:2;
|
|
|
|
u32 waterSportMoveSlot:2;
|
|
|
|
u32 waterSportMonId:3;
|
|
|
|
u32 mudSportMonId:3;
|
|
|
|
u32 mudSportMoveSlot:2;
|
|
|
|
u32 ingrainMonId:3;
|
|
|
|
u32 ingrainMoveSlot:2;
|
2018-02-27 20:40:09 +01:00
|
|
|
u32 attackedByMonId:3;
|
|
|
|
u32 attackedByMoveSlot:2;
|
2018-02-27 18:13:28 +01:00
|
|
|
};
|
|
|
|
|
2018-02-27 20:40:09 +01:00
|
|
|
struct BattleTv_Mon
|
2018-02-27 18:13:28 +01:00
|
|
|
{
|
|
|
|
u32 psnMonId:3;
|
|
|
|
u32 badPsnMonId:3;
|
|
|
|
u32 brnMonId:3;
|
|
|
|
u32 prlzMonId:3;
|
|
|
|
u32 slpMonId:3;
|
|
|
|
u32 frzMonId:3;
|
|
|
|
u32 psnMoveSlot:2;
|
|
|
|
u32 badPsnMoveSlot:2;
|
|
|
|
u32 brnMoveSlot:2;
|
|
|
|
u32 prlzMoveSlot:2;
|
|
|
|
u32 slpMoveSlot:2;
|
|
|
|
u32 frzMoveSlot:2;
|
|
|
|
};
|
|
|
|
|
2018-02-27 20:40:09 +01:00
|
|
|
struct BattleTv
|
2018-02-27 18:13:28 +01:00
|
|
|
{
|
2018-07-01 11:15:42 +02:00
|
|
|
struct BattleTv_Mon mon[2][PARTY_SIZE]; // [side][partyId]
|
2018-02-27 20:40:09 +01:00
|
|
|
struct BattleTv_Position pos[2][2]; // [side][flank]
|
|
|
|
struct BattleTv_Side side[2]; // [side]
|
2018-02-27 18:13:28 +01:00
|
|
|
};
|
|
|
|
|
2018-02-27 20:40:09 +01:00
|
|
|
struct BattleTvMovePoints
|
2018-02-27 18:13:28 +01:00
|
|
|
{
|
2018-02-27 20:40:09 +01:00
|
|
|
s16 points[2][PARTY_SIZE * 4];
|
2018-02-27 18:13:28 +01:00
|
|
|
};
|
|
|
|
|
2021-03-15 20:22:41 +01:00
|
|
|
struct LinkBattlerHeader
|
2021-03-12 21:37:31 +01:00
|
|
|
{
|
2021-03-12 22:55:58 +01:00
|
|
|
u8 versionSignatureLo;
|
|
|
|
u8 versionSignatureHi;
|
2021-03-12 21:37:31 +01:00
|
|
|
u8 vsScreenHealthFlagsLo;
|
|
|
|
u8 vsScreenHealthFlagsHi;
|
|
|
|
struct BattleEnigmaBerry battleEnigmaBerry;
|
|
|
|
};
|
|
|
|
|
2017-09-05 09:41:48 +02:00
|
|
|
struct BattleStruct
|
|
|
|
{
|
2017-09-17 14:10:32 +02:00
|
|
|
u8 turnEffectsTracker;
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 turnEffectsBattlerId;
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_0;
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 turnCountersTracker;
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
|
|
|
|
u8 moveTarget[MAX_BATTLERS_COUNT];
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 expGetterMonId;
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_1;
|
2017-09-05 09:41:48 +02:00
|
|
|
u8 wildVictorySong;
|
|
|
|
u8 dynamicMoveType;
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 wrappedBy[MAX_BATTLERS_COUNT];
|
2018-12-25 18:50:15 +01:00
|
|
|
u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves.
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 focusPunchBattlerId;
|
2018-07-07 19:57:09 +02:00
|
|
|
u8 battlerPreventingSwitchout;
|
2017-09-17 17:14:32 +02:00
|
|
|
u8 moneyMultiplier;
|
2017-12-02 23:31:58 +01:00
|
|
|
u8 savedTurnActionNumber;
|
2017-10-02 23:32:39 +02:00
|
|
|
u8 switchInAbilitiesCounter;
|
2017-12-02 14:08:55 +01:00
|
|
|
u8 faintedActionsState;
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 faintedActionsBattlerId;
|
2017-09-22 21:33:49 +02:00
|
|
|
u16 expValue;
|
2017-09-11 14:42:13 +02:00
|
|
|
u8 field_52;
|
2017-09-22 21:33:49 +02:00
|
|
|
u8 sentInPokes;
|
2018-02-06 02:46:59 +01:00
|
|
|
bool8 selectionScriptFinished[MAX_BATTLERS_COUNT];
|
2021-10-13 01:50:32 +02:00
|
|
|
u8 battlerPartyIndexes[MAX_BATTLERS_COUNT];
|
2018-02-06 02:46:59 +01:00
|
|
|
u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
|
2021-10-13 01:50:32 +02:00
|
|
|
u8 battlerPartyOrders[MAX_BATTLERS_COUNT][PARTY_SIZE / 2];
|
2017-10-06 00:12:01 +02:00
|
|
|
u8 runTries;
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1];
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_2;
|
2018-07-01 11:15:42 +02:00
|
|
|
u8 safariGoNearCounter;
|
|
|
|
u8 safariPkblThrowCounter;
|
|
|
|
u8 safariEscapeFactor;
|
|
|
|
u8 safariCatchFactor;
|
2019-01-19 22:32:25 +01:00
|
|
|
u8 linkBattleVsSpriteId_V; // The letter "V"
|
|
|
|
u8 linkBattleVsSpriteId_S; // The letter "S"
|
2017-09-08 18:19:20 +02:00
|
|
|
u8 formToChangeInto;
|
2018-02-06 02:46:59 +01:00
|
|
|
u8 chosenMovePositions[MAX_BATTLERS_COUNT];
|
|
|
|
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_3[3];
|
2021-01-23 02:03:21 +01:00
|
|
|
u8 prevSelectedPartySlot;
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_4[2];
|
2017-10-07 15:15:47 +02:00
|
|
|
u8 stringMoveType;
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 expGetterBattlerId;
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_5;
|
2021-10-13 01:50:32 +02:00
|
|
|
u8 absentBattlerFlags;
|
2020-07-17 02:12:12 +02:00
|
|
|
u8 palaceFlags; // First 4 bits are "is < 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 field_93; // related to choosing pokemon?
|
2017-10-24 21:45:41 +02:00
|
|
|
u8 wallyBattleState;
|
|
|
|
u8 wallyMovesState;
|
|
|
|
u8 wallyWaitFrames;
|
|
|
|
u8 wallyMoveFrames;
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // Last move that a battler was hit with. This field seems to erroneously take 16 bytes instead of 8.
|
2017-10-01 01:12:42 +02:00
|
|
|
u16 hpOnSwitchout[2];
|
|
|
|
u32 savedBattleTypeFlags;
|
2018-07-07 19:57:09 +02:00
|
|
|
u8 abilityPreventingSwitchout;
|
2017-09-08 18:19:20 +02:00
|
|
|
u8 hpScale;
|
|
|
|
u8 synchronizeMoveEffect;
|
2018-02-27 20:40:09 +01:00
|
|
|
bool8 anyMonHasTransformed;
|
2017-10-01 01:12:42 +02:00
|
|
|
void (*savedCallback)(void);
|
2018-02-06 02:46:59 +01:00
|
|
|
u16 usedHeldItems[MAX_BATTLERS_COUNT];
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 chosenItem[MAX_BATTLERS_COUNT]; // why is this an u8?
|
2017-10-11 12:49:42 +02:00
|
|
|
u8 AI_itemType[2];
|
|
|
|
u8 AI_itemFlags[2];
|
2018-02-06 02:46:59 +01:00
|
|
|
u16 choicedMove[MAX_BATTLERS_COUNT];
|
|
|
|
u16 changedItems[MAX_BATTLERS_COUNT];
|
2018-07-01 11:15:42 +02:00
|
|
|
u8 intimidateBattler;
|
2017-10-02 23:32:39 +02:00
|
|
|
u8 switchInItemsCounter;
|
2018-12-07 23:50:56 +01:00
|
|
|
u8 arenaTurnCounter;
|
2017-09-17 14:10:32 +02:00
|
|
|
u8 turnSideTracker;
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_6[3];
|
2018-12-07 23:50:56 +01:00
|
|
|
u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party.
|
2018-10-14 18:10:54 +02:00
|
|
|
u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; // a 3-D array [target][attacker][byte]
|
2021-10-04 16:21:03 +02:00
|
|
|
u16 castformPalette[NUM_CASTFORM_FORMS][16];
|
2021-03-12 21:37:31 +01:00
|
|
|
union {
|
2021-03-15 20:22:41 +01:00
|
|
|
struct LinkBattlerHeader linkBattlerHeader;
|
2021-03-12 21:37:31 +01:00
|
|
|
u32 battleVideo[2];
|
|
|
|
} multiBuffer;
|
2017-12-02 14:08:55 +01:00
|
|
|
u8 wishPerishSongState;
|
2018-02-07 22:53:40 +01:00
|
|
|
u8 wishPerishSongBattlerId;
|
2017-10-02 23:32:39 +02:00
|
|
|
bool8 overworldWeatherDone;
|
2017-09-17 14:10:32 +02:00
|
|
|
u8 atkCancellerTracker;
|
2018-02-27 20:40:09 +01:00
|
|
|
struct BattleTvMovePoints tvMovePoints;
|
|
|
|
struct BattleTv tv;
|
2018-12-24 00:02:29 +01:00
|
|
|
u8 unused_7[0x28];
|
2018-02-06 02:46:59 +01:00
|
|
|
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
|
2018-11-11 18:33:16 +01:00
|
|
|
s8 arenaMindPoints[2];
|
|
|
|
s8 arenaSkillPoints[2];
|
|
|
|
u16 arenaStartHp[2];
|
|
|
|
u8 arenaLostPlayerMons; // Bits for party member, lost as in referee's decision, not by fainting.
|
|
|
|
u8 arenaLostOpponentMons;
|
|
|
|
u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon.
|
2017-09-05 09:41:48 +02:00
|
|
|
};
|
|
|
|
|
2021-10-04 16:21:03 +02:00
|
|
|
#define F_DYNAMIC_TYPE_1 (1 << 6)
|
|
|
|
#define F_DYNAMIC_TYPE_2 (1 << 7)
|
|
|
|
#define DYNAMIC_TYPE_MASK (F_DYNAMIC_TYPE_1 - 1)
|
|
|
|
|
|
|
|
#define GET_MOVE_TYPE(move, typeArg) \
|
|
|
|
{ \
|
|
|
|
if (gBattleStruct->dynamicMoveType) \
|
|
|
|
typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \
|
|
|
|
else \
|
|
|
|
typeArg = gBattleMoves[move].type; \
|
2017-09-19 21:01:12 +02:00
|
|
|
}
|
|
|
|
|
2018-07-16 22:00:27 +02:00
|
|
|
#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
|
|
|
|
#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
|
2018-02-08 11:17:41 +01:00
|
|
|
|
2018-03-01 00:59:52 +01:00
|
|
|
#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
|
|
|
|
|
|
|
|
#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type))
|
|
|
|
#define SET_BATTLER_TYPE(battlerId, type) \
|
|
|
|
{ \
|
|
|
|
gBattleMons[battlerId].type1 = type; \
|
|
|
|
gBattleMons[battlerId].type2 = type; \
|
|
|
|
}
|
|
|
|
|
2017-09-22 21:33:49 +02:00
|
|
|
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
|
2018-07-29 15:51:08 +02:00
|
|
|
#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
|
2017-09-26 22:39:59 +02:00
|
|
|
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
|
2017-09-22 21:33:49 +02:00
|
|
|
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
|
|
|
|
|
2018-07-29 15:51:08 +02:00
|
|
|
#define SET_STAT_BUFF_VALUE(n)((((n) << 4) & 0xF0))
|
2017-09-20 22:54:26 +02:00
|
|
|
|
2017-11-26 11:55:17 +01:00
|
|
|
#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
|
|
|
|
|
2021-10-13 22:39:21 +02:00
|
|
|
// NOTE: The members of this struct have hard-coded offsets
|
|
|
|
// in include/constants/battle_script_commands.h
|
2017-09-05 09:41:48 +02:00
|
|
|
struct BattleScripting
|
|
|
|
{
|
2017-09-26 22:39:59 +02:00
|
|
|
s32 painSplitHp;
|
|
|
|
s32 bideDmg;
|
|
|
|
u8 multihitString[6];
|
2017-09-05 09:41:48 +02:00
|
|
|
u8 dmgMultiplier;
|
2017-11-26 00:33:40 +01:00
|
|
|
u8 twoTurnsMoveStringId;
|
2017-09-17 14:10:32 +02:00
|
|
|
u8 animArg1;
|
|
|
|
u8 animArg2;
|
2017-11-26 13:26:58 +01:00
|
|
|
u16 tripleKickPower;
|
2019-08-23 14:46:21 +02:00
|
|
|
u8 moveendState;
|
2018-02-06 23:09:39 +01:00
|
|
|
u8 battlerWithAbility;
|
2017-12-02 23:31:58 +01:00
|
|
|
u8 multihitMoveEffect;
|
2018-02-06 02:46:59 +01:00
|
|
|
u8 battler;
|
2017-09-20 00:28:00 +02:00
|
|
|
u8 animTurn;
|
|
|
|
u8 animTargetsHit;
|
2017-09-17 17:14:32 +02:00
|
|
|
u8 statChanger;
|
2018-07-29 15:33:16 +02:00
|
|
|
bool8 statAnimPlayed;
|
2019-08-23 14:46:21 +02:00
|
|
|
u8 getexpState;
|
2017-10-02 23:32:39 +02:00
|
|
|
u8 battleStyle;
|
2019-08-23 14:46:21 +02:00
|
|
|
u8 drawlvlupboxState;
|
2017-09-25 00:09:13 +02:00
|
|
|
u8 learnMoveState;
|
2021-10-13 22:39:21 +02:00
|
|
|
u8 pursuitDoublesAttacker;
|
2017-10-09 18:18:40 +02:00
|
|
|
u8 reshowMainState;
|
|
|
|
u8 reshowHelperState;
|
2020-10-06 00:48:51 +02:00
|
|
|
u8 levelUpHP;
|
2021-10-04 16:21:03 +02:00
|
|
|
u8 windowsType; // B_WIN_TYPE_*
|
2017-10-01 01:12:42 +02:00
|
|
|
u8 multiplayerId;
|
2018-10-21 20:13:12 +02:00
|
|
|
u8 specialTrainerBattleType;
|
2017-09-05 09:41:48 +02:00
|
|
|
};
|
|
|
|
|
2017-10-01 18:54:01 +02:00
|
|
|
struct BattleSpriteInfo
|
|
|
|
{
|
2018-06-20 23:07:51 +02:00
|
|
|
u16 invisible:1; // 0x1
|
|
|
|
u16 lowHpSong:1; // 0x2
|
|
|
|
u16 behindSubstitute:1; // 0x4
|
|
|
|
u16 flag_x8:1; // 0x8
|
|
|
|
u16 hpNumbersNoBars:1; // 0x10
|
2017-10-01 18:54:01 +02:00
|
|
|
u16 transformSpecies;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct BattleAnimationInfo
|
|
|
|
{
|
2017-11-04 16:11:13 +01:00
|
|
|
u16 animArg; // to fill up later
|
2017-10-18 21:42:00 +02:00
|
|
|
u8 field_2;
|
|
|
|
u8 field_3;
|
|
|
|
u8 field_4;
|
|
|
|
u8 field_5;
|
|
|
|
u8 field_6;
|
|
|
|
u8 field_7;
|
2017-10-22 18:43:15 +02:00
|
|
|
u8 ballThrowCaseId;
|
2021-01-23 02:03:21 +01:00
|
|
|
u8 introAnimActive:1;
|
2020-08-05 04:37:52 +02:00
|
|
|
u8 wildMonInvisible:1;
|
2018-06-20 23:07:51 +02:00
|
|
|
u8 field_9_x1C:3;
|
|
|
|
u8 field_9_x20:1;
|
|
|
|
u8 field_9_x40:1;
|
|
|
|
u8 field_9_x80:1;
|
2020-08-05 04:37:52 +02:00
|
|
|
u8 numBallParticles;
|
2017-11-02 18:19:49 +01:00
|
|
|
u8 field_B;
|
2020-08-05 04:37:52 +02:00
|
|
|
s16 ballSubpx;
|
2017-11-02 18:19:49 +01:00
|
|
|
u8 field_E;
|
|
|
|
u8 field_F;
|
2017-10-01 18:54:01 +02:00
|
|
|
};
|
|
|
|
|
2017-10-02 23:32:39 +02:00
|
|
|
struct BattleHealthboxInfo
|
|
|
|
{
|
2018-06-28 21:06:32 +02:00
|
|
|
u8 partyStatusSummaryShown:1;
|
2018-06-20 23:07:51 +02:00
|
|
|
u8 healthboxIsBouncing:1;
|
|
|
|
u8 battlerIsBouncing:1;
|
|
|
|
u8 ballAnimActive:1; // 0x8
|
|
|
|
u8 statusAnimActive:1; // x10
|
|
|
|
u8 animFromTableActive:1; // x20
|
2018-06-28 21:06:32 +02:00
|
|
|
u8 specialAnimActive:1; // x40
|
2020-08-30 21:11:44 +02:00
|
|
|
u8 triedShinyMonAnim:1;
|
|
|
|
u8 finishedShinyMonAnim:1;
|
2018-06-20 23:07:51 +02:00
|
|
|
u8 field_1_x1E:4;
|
2021-01-23 02:03:21 +01:00
|
|
|
u8 bgmRestored:1;
|
|
|
|
u8 waitForCry:1;
|
|
|
|
u8 healthboxSlideInStarted:1;
|
2018-06-20 23:07:51 +02:00
|
|
|
u8 healthboxBounceSpriteId;
|
|
|
|
u8 battlerBounceSpriteId;
|
2017-10-22 18:43:15 +02:00
|
|
|
u8 animationState;
|
2021-01-23 02:03:21 +01:00
|
|
|
u8 partyStatusDelayTimer;
|
2018-12-18 05:08:08 +01:00
|
|
|
u8 matrixNum;
|
2017-11-04 16:11:13 +01:00
|
|
|
u8 shadowSpriteId;
|
2021-01-23 02:03:21 +01:00
|
|
|
u8 soundTimer;
|
|
|
|
u8 introEndDelay;
|
2017-10-02 23:32:39 +02:00
|
|
|
u8 field_A;
|
|
|
|
u8 field_B;
|
|
|
|
};
|
|
|
|
|
2017-10-16 18:12:27 +02:00
|
|
|
struct BattleBarInfo
|
|
|
|
{
|
|
|
|
u8 healthboxSpriteId;
|
2017-10-19 15:28:41 +02:00
|
|
|
s32 maxValue;
|
2018-06-19 00:43:15 +02:00
|
|
|
s32 oldValue;
|
2017-10-22 18:43:15 +02:00
|
|
|
s32 receivedValue;
|
2018-06-19 00:43:15 +02:00
|
|
|
s32 currValue;
|
2017-10-16 18:12:27 +02:00
|
|
|
};
|
|
|
|
|
2017-10-01 18:54:01 +02:00
|
|
|
struct BattleSpriteData
|
|
|
|
{
|
2018-02-06 23:09:39 +01:00
|
|
|
struct BattleSpriteInfo *battlerData;
|
2017-10-02 23:32:39 +02:00
|
|
|
struct BattleHealthboxInfo *healthBoxesData;
|
2017-10-01 18:54:01 +02:00
|
|
|
struct BattleAnimationInfo *animationData;
|
2017-10-16 18:12:27 +02:00
|
|
|
struct BattleBarInfo *battleBars;
|
2017-10-01 18:54:01 +02:00
|
|
|
};
|
|
|
|
|
2017-09-11 18:27:54 +02:00
|
|
|
#include "sprite.h"
|
|
|
|
|
2017-10-01 01:12:42 +02:00
|
|
|
struct MonSpritesGfx
|
2017-09-11 11:35:41 +02:00
|
|
|
{
|
|
|
|
void* firstDecompressed; // ptr to the decompressed sprite of the first pokemon
|
2021-10-03 05:47:59 +02:00
|
|
|
union {
|
|
|
|
void* ptr[MAX_BATTLERS_COUNT];
|
|
|
|
u8* byte[MAX_BATTLERS_COUNT];
|
2020-09-19 19:37:24 +02:00
|
|
|
} sprites;
|
2021-10-03 05:47:59 +02:00
|
|
|
struct SpriteTemplate templates[MAX_BATTLERS_COUNT];
|
|
|
|
struct SpriteFrameImage frameImages[MAX_BATTLERS_COUNT][4];
|
|
|
|
u8 unusedArr[0x80];
|
2017-11-04 16:11:13 +01:00
|
|
|
u8 *barFontGfx;
|
2021-10-03 05:47:59 +02:00
|
|
|
void *unusedPtr;
|
2020-02-20 06:04:42 +01:00
|
|
|
u16 *buffer;
|
2017-09-11 11:35:41 +02:00
|
|
|
};
|
|
|
|
|
2018-06-30 15:35:54 +02:00
|
|
|
// All battle variables are declared in battle_main.c
|
2018-11-19 17:36:39 +01:00
|
|
|
extern u16 gBattle_BG0_X;
|
|
|
|
extern u16 gBattle_BG0_Y;
|
|
|
|
extern u16 gBattle_BG1_X;
|
|
|
|
extern u16 gBattle_BG1_Y;
|
|
|
|
extern u16 gBattle_BG2_X;
|
|
|
|
extern u16 gBattle_BG2_Y;
|
|
|
|
extern u16 gBattle_BG3_X;
|
|
|
|
extern u16 gBattle_BG3_Y;
|
|
|
|
extern u16 gBattle_WIN0H;
|
|
|
|
extern u16 gBattle_WIN0V;
|
|
|
|
extern u16 gBattle_WIN1H;
|
|
|
|
extern u16 gBattle_WIN1V;
|
2018-06-30 15:35:54 +02:00
|
|
|
extern u8 gDisplayedStringBattle[300];
|
|
|
|
extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
|
|
|
|
extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
|
|
|
|
extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
|
2017-10-13 17:09:36 +02:00
|
|
|
extern u32 gBattleTypeFlags;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u8 gBattleTerrain;
|
2021-01-22 08:48:22 +01:00
|
|
|
extern u32 gUnusedFirstBattleVar1;
|
2021-10-04 16:21:03 +02:00
|
|
|
extern u8 *gBattleAnimBgTileBuffer;
|
|
|
|
extern u8 *gBattleAnimBgTilemapBuffer;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
|
|
|
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
|
|
|
extern u8 gActiveBattler;
|
|
|
|
extern u32 gBattleControllerExecFlags;
|
|
|
|
extern u8 gBattlersCount;
|
|
|
|
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
|
2018-06-28 21:06:32 +02:00
|
|
|
extern u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT];
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u8 gCurrentTurnActionNumber;
|
|
|
|
extern u8 gCurrentActionFuncId;
|
|
|
|
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gCurrMovePos;
|
2018-02-08 11:17:41 +01:00
|
|
|
extern u8 gChosenMovePos;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u16 gCurrentMove;
|
|
|
|
extern u16 gChosenMove;
|
2018-09-22 18:41:00 +02:00
|
|
|
extern u16 gCalledMove;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern s32 gBattleMoveDamage;
|
|
|
|
extern s32 gHpDealt;
|
|
|
|
extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gLastUsedItem;
|
|
|
|
extern u8 gLastUsedAbility;
|
|
|
|
extern u8 gBattlerAttacker;
|
|
|
|
extern u8 gBattlerTarget;
|
2018-02-08 11:17:41 +01:00
|
|
|
extern u8 gBattlerFainted;
|
|
|
|
extern u8 gEffectBattler;
|
2018-02-08 12:13:29 +01:00
|
|
|
extern u8 gPotentialItemEffectBattler;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u8 gAbsentBattlerFlags;
|
|
|
|
extern u8 gCritMultiplier;
|
|
|
|
extern u8 gMultiHitCounter;
|
|
|
|
extern const u8 *gBattlescriptCurrInstr;
|
|
|
|
extern u32 gUnusedBattleMainVar;
|
|
|
|
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
|
|
|
|
extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
|
|
|
extern const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gLastMoves[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gMoveResultFlags;
|
|
|
|
extern u32 gHitMarker;
|
|
|
|
extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
|
2021-01-22 08:48:22 +01:00
|
|
|
extern u8 gUnusedFirstBattleVar2;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u16 gSideStatuses[2];
|
|
|
|
extern struct SideTimer gSideTimers[2];
|
|
|
|
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
|
|
|
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gPauseCounterBattle;
|
|
|
|
extern u16 gPaydayMoney;
|
|
|
|
extern u16 gRandomTurnNumber;
|
|
|
|
extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT];
|
|
|
|
extern u8 gBattleOutcome;
|
|
|
|
extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
|
|
|
|
extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
|
|
|
|
extern u16 gBattleWeather;
|
|
|
|
extern struct WishFutureKnock gWishFutureKnock;
|
2018-02-08 11:17:41 +01:00
|
|
|
extern u16 gIntroSlideFlags;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u8 gSentPokesToOpponent[2];
|
|
|
|
extern u16 gDynamicBasePower;
|
|
|
|
extern u16 gExpShareExp;
|
|
|
|
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
|
|
|
|
extern struct BattleScripting gBattleScripting;
|
|
|
|
extern struct BattleStruct *gBattleStruct;
|
|
|
|
extern u8 *gLinkBattleSendBuffer;
|
|
|
|
extern u8 *gLinkBattleRecvBuffer;
|
|
|
|
extern struct BattleResources *gBattleResources;
|
|
|
|
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
2018-02-08 11:17:41 +01:00
|
|
|
extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u8 gBattlerInMenuId;
|
|
|
|
extern bool8 gDoingBattleAnim;
|
|
|
|
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gPlayerDpadHoldFrames;
|
|
|
|
extern struct BattleSpriteData *gBattleSpritesDataPtr;
|
|
|
|
extern struct MonSpritesGfx *gMonSpritesGfxPtr;
|
2021-01-23 03:35:16 +01:00
|
|
|
extern struct BattleHealthboxInfo *gBattleControllerOpponentHealthboxData;
|
|
|
|
extern struct BattleHealthboxInfo *gBattleControllerOpponentFlankHealthboxData;
|
2018-02-07 23:21:51 +01:00
|
|
|
extern u16 gBattleMovePower;
|
|
|
|
extern u16 gMoveToLearn;
|
|
|
|
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
|
|
|
|
|
|
|
extern void (*gPreBattleCallback1)(void);
|
|
|
|
extern void (*gBattleMainFunc)(void);
|
|
|
|
extern struct BattleResults gBattleResults;
|
|
|
|
extern u8 gLeveledUpInBattle;
|
|
|
|
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
|
|
|
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
|
|
|
extern u8 gMultiUsePlayerCursor;
|
|
|
|
extern u8 gNumberOfMovesToChoose;
|
2021-01-23 02:03:21 +01:00
|
|
|
extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
|
2017-09-11 11:35:41 +02:00
|
|
|
|
|
|
|
#endif // GUARD_BATTLE_H
|