mirror of
https://github.com/pret/pokefirered.git
synced 2026-09-29 20:38:15 -05:00
sync battle.h
This commit is contained in:
339
include/battle.h
339
include/battle.h
@@ -1,6 +1,9 @@
|
||||
#ifndef GUARD_BATTLE_H
|
||||
#define GUARD_BATTLE_H
|
||||
|
||||
// should they be included here or included individually by every file?
|
||||
#include "constants/battle.h"
|
||||
#include "constants/form_change_types.h"
|
||||
#include "battle_main.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_util.h"
|
||||
@@ -9,14 +12,13 @@
|
||||
#include "battle_gfx_sfx_util.h"
|
||||
#include "battle_util2.h"
|
||||
#include "battle_bg.h"
|
||||
#include "pokeball.h"
|
||||
#include "battle_debug.h"
|
||||
#include "battle_dynamax.h"
|
||||
#include "battle_terastal.h"
|
||||
#include "battle_gimmick.h"
|
||||
#include "pokeball.h"
|
||||
#include "move.h"
|
||||
#include "random.h" // for rng_value_t
|
||||
#include "constants/battle.h"
|
||||
#include "constants/form_change_types.h"
|
||||
|
||||
// Helper for accessing command arguments and advancing gBattlescriptCurrInstr.
|
||||
//
|
||||
@@ -38,49 +40,36 @@
|
||||
#define VARIOUS_ARGS(...) CMD_ARGS(u8 battler, u8 id, ##__VA_ARGS__)
|
||||
#define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__)
|
||||
|
||||
/*
|
||||
Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
|
||||
Each bank has a value consisting of two bits.
|
||||
0x1 bit is responsible for the side, 0 = player's side, 1 = opponent's side.
|
||||
0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.)
|
||||
*/
|
||||
|
||||
#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))
|
||||
|
||||
// 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]))
|
||||
&& !(gDisableStructs[battler].mimickedMoves & (1u << moveSlot)))
|
||||
|
||||
// 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_BAIT 6
|
||||
#define B_ACTION_SAFARI_GO_NEAR 7
|
||||
#define B_ACTION_SAFARI_RUN 8
|
||||
#define B_ACTION_OLDMAN_THROW 9
|
||||
#define B_ACTION_EXEC_SCRIPT 10
|
||||
#define B_ACTION_TRY_FINISH 11
|
||||
#define B_ACTION_FINISHED 12
|
||||
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
|
||||
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
|
||||
#define B_ACTION_DEBUG 20
|
||||
#define B_ACTION_THROW_BALL 21 // R to throw last used ball
|
||||
#define B_ACTION_NONE 0xFF
|
||||
#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_BAIT 6
|
||||
#define B_ACTION_SAFARI_GO_NEAR 7
|
||||
#define B_ACTION_SAFARI_RUN 8
|
||||
#define B_ACTION_OLDMAN_THROW 9
|
||||
#define B_ACTION_EXEC_SCRIPT 10
|
||||
#define B_ACTION_TRY_FINISH 11
|
||||
#define B_ACTION_FINISHED 12
|
||||
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
|
||||
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
|
||||
#define B_ACTION_DEBUG 20
|
||||
#define B_ACTION_THROW_BALL 21 // R to throw last used ball
|
||||
#define B_ACTION_NONE 0xFF
|
||||
|
||||
#define BATTLE_BUFFER_LINK_SIZE 0x1000
|
||||
|
||||
// Special indicator value for shellBellDmg in SpecialStatus
|
||||
#define IGNORE_SHELL_BELL 0xFFFF
|
||||
#define GET_MOVE_BATTLESCRIPT(move) gBattleMoveEffects[gMovesInfo[move].effect].battleScript // TODO: remove
|
||||
|
||||
extern const struct Trainer gTrainers[];
|
||||
|
||||
struct ResourceFlags
|
||||
{
|
||||
@@ -91,7 +80,7 @@ struct ResourceFlags
|
||||
#define RESOURCE_FLAG_ROOST 0x2
|
||||
#define RESOURCE_FLAG_UNBURDEN 0x4
|
||||
#define RESOURCE_FLAG_UNUSED 0x8
|
||||
#define RESOURCE_FLAG_TRACED 0x10
|
||||
#define RESOURCE_FLAG_UNUSED_2 0x10
|
||||
#define RESOURCE_FLAG_EMERGENCY_EXIT 0x20
|
||||
#define RESOURCE_FLAG_NEUTRALIZING_GAS 0x40
|
||||
#define RESOURCE_FLAG_ICE_FACE 0x80
|
||||
@@ -153,8 +142,6 @@ struct DisableStruct
|
||||
u16 overwrittenAbility; // abilities overwritten during battle (keep separate from battle history in case of switching)
|
||||
};
|
||||
|
||||
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
|
||||
|
||||
struct ProtectStruct
|
||||
{
|
||||
u32 protected:1;
|
||||
@@ -179,14 +166,15 @@ struct ProtectStruct
|
||||
u32 flag2Unknown:1; // Only set to 0 once. Checked in 'WasUnableToUseMove' function.
|
||||
u32 flinchImmobility:1;
|
||||
u32 notFirstStrike:1;
|
||||
u32 unused1:1;
|
||||
u32 usedHealBlockedMove:1;
|
||||
u32 usedGravityPreventedMove:1;
|
||||
u32 powderSelfDmg:1;
|
||||
u32 usedThroatChopPreventedMove:1;
|
||||
u32 statRaised:1;
|
||||
u32 usedMicleBerry:1;
|
||||
u32 usedCustapBerry:1; // also quick claw
|
||||
u32 touchedProtectLike:1;
|
||||
u32 unused:1;
|
||||
// End of 32-bit bitfield
|
||||
u16 disableEjectPack:1;
|
||||
u16 statFell:1;
|
||||
@@ -201,19 +189,14 @@ struct ProtectStruct
|
||||
u16 eatMirrorHerb:1;
|
||||
u16 activateOpportunist:2; // 2 - to copy stats. 1 - stats copied (do not repeat). 0 - no stats to copy
|
||||
u16 usedAllySwitch:1;
|
||||
u16 padding:2;
|
||||
// End of 16-bit bitfield
|
||||
u32 physicalDmg;
|
||||
u32 specialDmg;
|
||||
u8 physicalBattlerId;
|
||||
u8 specialBattlerId;
|
||||
// pokefirered
|
||||
/* field_0 */
|
||||
/* field_1 */
|
||||
u32 targetNotAffected:1;
|
||||
/* field_2 */
|
||||
};
|
||||
|
||||
extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
|
||||
|
||||
struct SpecialStatus
|
||||
{
|
||||
s32 shellBellDmg;
|
||||
@@ -259,8 +242,6 @@ struct SpecialStatus
|
||||
u8 criticalHit:1;
|
||||
};
|
||||
|
||||
extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
|
||||
|
||||
struct SideTimer
|
||||
{
|
||||
u8 reflectTimer;
|
||||
@@ -296,8 +277,6 @@ struct SideTimer
|
||||
u8 swampTimer;
|
||||
};
|
||||
|
||||
extern struct SideTimer gSideTimers[];
|
||||
|
||||
struct FieldTimer
|
||||
{
|
||||
u8 mudSportTimer;
|
||||
@@ -315,17 +294,13 @@ struct WishFutureKnock
|
||||
u8 futureSightCounter[MAX_BATTLERS_COUNT];
|
||||
u8 futureSightBattlerIndex[MAX_BATTLERS_COUNT];
|
||||
u8 futureSightPartyIndex[MAX_BATTLERS_COUNT];
|
||||
u8 futureSightAttacker[MAX_BATTLERS_COUNT]; // pokefirered, remove
|
||||
s32 futureSightDmg[MAX_BATTLERS_COUNT]; // pokefirered, remove
|
||||
u16 futureSightMove[MAX_BATTLERS_COUNT];
|
||||
u8 wishCounter[MAX_BATTLERS_COUNT];
|
||||
u8 wishPartyId[MAX_BATTLERS_COUNT];
|
||||
u8 weatherDuration;
|
||||
u8 knockedOffMons[NUM_BATTLE_SIDES];
|
||||
u8 knockedOffMons[NUM_BATTLE_SIDES]; // Each battler is represented by a bit.
|
||||
};
|
||||
|
||||
extern struct WishFutureKnock gWishFutureKnock;
|
||||
|
||||
struct AI_SavedBattleMon
|
||||
{
|
||||
u16 ability;
|
||||
@@ -443,21 +418,18 @@ struct BattleResources
|
||||
{
|
||||
struct SecretBaseRecord *secretBase;
|
||||
struct ResourceFlags *flags;
|
||||
struct BattleScriptsStack *battleScriptsStack;
|
||||
struct BattleCallbacksStack *battleCallbackStack;
|
||||
struct StatsArray *beforeLvlUp;
|
||||
struct BattleScriptsStack* battleScriptsStack;
|
||||
struct BattleCallbacksStack* battleCallbackStack;
|
||||
struct StatsArray* beforeLvlUp;
|
||||
struct AI_ThinkingStruct *ai;
|
||||
struct AiLogicData *aiData;
|
||||
struct AIPartyData *aiParty;
|
||||
struct BattleHistory *battleHistory;
|
||||
struct BattleScriptsStack *AI_ScriptsStack;
|
||||
u8 bufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
u8 bufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
u8 transferBuffer[0x100];
|
||||
};
|
||||
|
||||
extern struct BattleResources *gBattleResources;
|
||||
|
||||
#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai))
|
||||
#define AI_DATA ((struct AiLogicData *)(gBattleResources->aiData))
|
||||
#define AI_PARTY ((struct AIPartyData *)(gBattleResources->aiParty))
|
||||
@@ -471,27 +443,23 @@ struct BattleResults
|
||||
u8 numHealingItemsUsed; // 0x3
|
||||
u8 numRevivesUsed; // 0x4
|
||||
u8 playerMonWasDamaged:1; // 0x5
|
||||
u8 usedMasterBall:1; // 0x5
|
||||
u8 caughtMonBall:4; // 0x5
|
||||
u8 shinyWildMon:1; // 0x5
|
||||
u8 unk5_7:1; // 0x5
|
||||
u16 playerMon1Species; // 0x6
|
||||
u8 playerMon1Name[11]; // 0x8
|
||||
u8 playerMon1Name[POKEMON_NAME_LENGTH + 1]; // 0x8
|
||||
u8 battleTurnCounter; // 0x13
|
||||
u8 playerMon2Name[11]; // 0x14
|
||||
u8 playerMon2Name[POKEMON_NAME_LENGTH + 1]; // 0x14
|
||||
u8 pokeblockThrows; // 0x1F
|
||||
u16 lastOpponentSpecies; // 0x20
|
||||
u16 lastUsedMovePlayer; // 0x22
|
||||
u16 lastUsedMoveOpponent; // 0x24
|
||||
u16 playerMon2Species; // 0x26
|
||||
u16 caughtMonSpecies; // 0x28
|
||||
u8 caughtMonNick[10]; // 0x2A
|
||||
u8 filler34[2];
|
||||
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
|
||||
u8 filler35; // 0x35
|
||||
u8 catchAttempts[POKEBALL_COUNT]; // 0x36
|
||||
};
|
||||
|
||||
extern struct BattleResults gBattleResults;
|
||||
|
||||
struct LinkBattlerHeader
|
||||
{
|
||||
u8 versionSignatureLo;
|
||||
@@ -501,24 +469,6 @@ struct LinkBattlerHeader
|
||||
struct BattleEnigmaBerry battleEnigmaBerry;
|
||||
};
|
||||
|
||||
struct MegaEvolutionData
|
||||
{
|
||||
u8 toEvolve; // As flags using gBitTable.
|
||||
bool8 alreadyEvolved[4]; // Array id is used for mon position.
|
||||
u8 battlerId;
|
||||
bool8 playerSelect;
|
||||
u8 triggerSpriteId;
|
||||
};
|
||||
|
||||
struct UltraBurstData
|
||||
{
|
||||
u8 toBurst; // As flags using gBitTable.
|
||||
bool8 alreadyBursted[4]; // Array id is used for mon position.
|
||||
u8 battlerId;
|
||||
bool8 playerSelect;
|
||||
u8 triggerSpriteId;
|
||||
};
|
||||
|
||||
struct Illusion
|
||||
{
|
||||
u8 on;
|
||||
@@ -638,6 +588,7 @@ struct BattleStruct
|
||||
u8 prevSelectedPartySlot;
|
||||
u8 stringMoveType;
|
||||
u8 absentBattlerFlags;
|
||||
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
|
||||
u8 field_93; // related to choosing pokemon?
|
||||
u8 simulatedInputState[4]; // used by Oak/Old Man/Pokedude controllers, Wally States/Frames in pokeemerald
|
||||
u16 lastTakenMove[MAX_BATTLERS_COUNT]; // Last move that a battler was hit with.
|
||||
@@ -646,6 +597,7 @@ struct BattleStruct
|
||||
u16 abilityPreventingSwitchout;
|
||||
u8 hpScale;
|
||||
u16 synchronizeMoveEffect;
|
||||
u8 anyMonHasTransformed:1; // Only used in battle_tv.c
|
||||
u8 multipleSwitchInBattlers:4; // One bit per battler
|
||||
u8 multipleSwitchInState:2;
|
||||
u8 multipleSwitchInCursor:3;
|
||||
@@ -657,6 +609,7 @@ struct BattleStruct
|
||||
u16 changedItems[MAX_BATTLERS_COUNT];
|
||||
u8 canPickupItem;
|
||||
u8 switchInBattlerCounter;
|
||||
u8 arenaTurnCounter;
|
||||
u8 turnSideTracker;
|
||||
u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker]
|
||||
union {
|
||||
@@ -677,6 +630,11 @@ struct BattleStruct
|
||||
u8 startingStatusTimer;
|
||||
u8 atkCancellerTracker;
|
||||
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
|
||||
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 Pokémon.
|
||||
u8 debugBattler;
|
||||
u8 magnitudeBasePower;
|
||||
@@ -797,7 +755,10 @@ struct BattleStruct
|
||||
u8 lastAttackerToFaintOpponent;
|
||||
};
|
||||
|
||||
extern struct BattleStruct *gBattleStruct;
|
||||
// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,
|
||||
// and 1 flag per battler to indicate whether the battler is awake and at <= 50% HP (which affects move choice).
|
||||
// The assert below is to ensure palaceFlags is large enough to store these flags without overlap.
|
||||
STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLERS_COUNT + MAX_MON_MOVES, PalaceFlagsTooSmall)
|
||||
|
||||
#define DYNAMIC_TYPE_MASK ((1 << 6) - 1)
|
||||
#define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects.
|
||||
@@ -873,14 +834,14 @@ static inline bool32 IsBattleMoveRecoil(u32 move)
|
||||
|| gProtectStructs[battlerId].obstructed \
|
||||
|| gProtectStructs[battlerId].silkTrapped)
|
||||
|
||||
#define GET_STAT_BUFF_ID(n)((n & 7)) // first three bits 0x1, 0x2, 0x4
|
||||
#define GET_STAT_BUFF_VALUE_WITH_SIGN(n)((n & 0xF8))
|
||||
#define GET_STAT_BUFF_VALUE(n)(((n >> 3) & 0xF)) // 0x8, 0x10, 0x20, 0x40
|
||||
#define GET_STAT_BUFF_ID(n) ((n & 7)) // first three bits 0x1, 0x2, 0x4
|
||||
#define GET_STAT_BUFF_VALUE_WITH_SIGN(n) ((n & 0xF8))
|
||||
#define GET_STAT_BUFF_VALUE(n) (((n >> 3) & 0xF)) // 0x8, 0x10, 0x20, 0x40
|
||||
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
|
||||
|
||||
#define SET_STAT_BUFF_VALUE(n)((((n) << 3) & 0xF8))
|
||||
#define SET_STAT_BUFF_VALUE(n) ((((n) << 3) & 0xF8))
|
||||
|
||||
#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7))
|
||||
#define SET_STATCHANGER(statId, stage, goesDown) (gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7))
|
||||
#define SET_STATCHANGER2(dst, statId, stage, goesDown)(dst = (statId) + ((stage) << 3) + (goesDown << 7))
|
||||
|
||||
#define DO_ACCURACY_CHECK 2 // Don't skip the accuracy check before the move might be absorbed
|
||||
@@ -931,12 +892,12 @@ struct BattleScripting
|
||||
|
||||
struct BattleSpriteInfo
|
||||
{
|
||||
/*0x0*/ u16 invisible : 1; // 0x1
|
||||
u16 lowHpSong : 1; // 0x2
|
||||
u16 behindSubstitute : 1; // 0x4
|
||||
u16 flag_x8 : 1; // 0x8
|
||||
u16 hpNumbersNoBars : 1; // 0x10
|
||||
/*0x2*/ u16 transformSpecies;
|
||||
u16 invisible:1; // 0x1
|
||||
u16 lowHpSong:1; // 0x2
|
||||
u16 behindSubstitute:1; // 0x4
|
||||
u16 flag_x8:1; // 0x8
|
||||
u16 hpNumbersNoBars:1; // 0x10
|
||||
u16 transformSpecies;
|
||||
};
|
||||
|
||||
struct BattleAnimationInfo
|
||||
@@ -966,16 +927,16 @@ struct BattleAnimationInfo
|
||||
|
||||
struct BattleHealthboxInfo
|
||||
{
|
||||
u8 partyStatusSummaryShown : 1; // x1
|
||||
u8 healthboxIsBouncing : 1; // x2
|
||||
u8 battlerIsBouncing : 1; // x4
|
||||
u8 ballAnimActive : 1; // 0x8
|
||||
u8 statusAnimActive : 1; // x10
|
||||
u8 animFromTableActive : 1; // x20
|
||||
u8 specialAnimActive : 1; // x40
|
||||
u8 triedShinyMonAnim : 1; // x80
|
||||
u8 finishedShinyMonAnim : 1; // x1
|
||||
u8 opponentDrawPartyStatusSummaryDelay : 5; // x2
|
||||
u8 partyStatusSummaryShown:1;
|
||||
u8 healthboxIsBouncing:1;
|
||||
u8 battlerIsBouncing:1;
|
||||
u8 ballAnimActive:1; // 0x8
|
||||
u8 statusAnimActive:1; // x10
|
||||
u8 animFromTableActive:1; // x20
|
||||
u8 specialAnimActive:1; // x40
|
||||
u8 triedShinyMonAnim:1;
|
||||
u8 finishedShinyMonAnim:1;
|
||||
u8 opponentDrawPartyStatusSummaryDelay:4;
|
||||
u8 bgmRestored:1;
|
||||
u8 waitForCry:1;
|
||||
u8 healthboxSlideInStarted:1;
|
||||
@@ -990,6 +951,8 @@ struct BattleHealthboxInfo
|
||||
|
||||
u8 soundTimer;
|
||||
u8 introEndDelay;
|
||||
u8 field_A;
|
||||
u8 field_B;
|
||||
};
|
||||
|
||||
struct BattleBarInfo
|
||||
@@ -997,7 +960,7 @@ struct BattleBarInfo
|
||||
u8 healthboxSpriteId;
|
||||
s32 maxValue;
|
||||
s32 oldValue;
|
||||
s32 receivedValue; // if positive/negative, fills the bar to the left/right respectively
|
||||
s32 receivedValue;
|
||||
s32 currValue;
|
||||
};
|
||||
|
||||
@@ -1009,15 +972,6 @@ struct BattleSpriteData
|
||||
struct BattleBarInfo *battleBars;
|
||||
};
|
||||
|
||||
extern struct BattleSpriteData *gBattleSpritesDataPtr;
|
||||
|
||||
#define BATTLE_BUFFER_LINK_SIZE 0x1000
|
||||
|
||||
extern u8 *gLinkBattleSendBuffer;
|
||||
extern u8 *gLinkBattleRecvBuffer;
|
||||
|
||||
// Move this somewhere else
|
||||
|
||||
#include "sprite.h"
|
||||
|
||||
struct MonSpritesGfx
|
||||
@@ -1048,6 +1002,7 @@ struct QueuedStatBoost
|
||||
s8 statChanges[NUM_BATTLE_STATS - 1]; // highest bit being set decreases the stat
|
||||
}; /* size = 8 */
|
||||
|
||||
// All battle variables are declared in battle_main.c
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gBattle_BG1_X;
|
||||
@@ -1060,95 +1015,107 @@ extern u16 gBattle_WIN0H;
|
||||
extern u16 gBattle_WIN0V;
|
||||
extern u16 gBattle_WIN1H;
|
||||
extern u16 gBattle_WIN1V;
|
||||
extern struct BattleSpritesGfx *gMonSpritesGfx;
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
|
||||
extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
|
||||
extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT + 13]; //to handle stupidly large z move names
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern struct MonSpritesGfx *gMonSpritesGfxPtr;
|
||||
extern u16 gMoveToLearn;
|
||||
extern u16 gBattleMovePower;
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleTerrain;
|
||||
extern u8 *gBattleAnimBgTileBuffer;
|
||||
extern u8 *gBattleAnimBgTilemapBuffer;
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gBattlersCount;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentTurnActionNumber;
|
||||
extern u8 gCurrentActionFuncId;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrMovePos;
|
||||
extern u8 gChosenMovePos;
|
||||
extern u16 gCurrentMove;
|
||||
extern u16 gChosenMove;
|
||||
extern u16 gCalledMove;
|
||||
extern u16 gBattleWeather;
|
||||
extern s32 gBideDmg[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastUsedItem;
|
||||
extern u16 gLastUsedAbility;
|
||||
extern u8 gBattlerInMenuId;
|
||||
extern u8 gPotentialItemEffectBattler;
|
||||
extern u8 gBattlersCount;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern s32 gBattleMoveDamage;
|
||||
extern u16 gIntroSlideFlags;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern bool8 gTransformedShininess[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern struct PokedudeBattlerState *gPokedudeBattlerStates[MAX_BATTLERS_COUNT];
|
||||
extern u8 *gBattleAnimBgTileBuffer;
|
||||
extern u8 *gBattleAnimBgTilemapBuffer;
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gEffectBattler;
|
||||
extern u8 gMultiHitCounter;
|
||||
extern struct BattleScripting gBattleScripting;
|
||||
extern u8 gBattlerFainted;
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern u32 gStatuses4[MAX_BATTLERS_COUNT];
|
||||
extern u8 gSentPokesToOpponent[2];
|
||||
extern u8 gEffectBattler;
|
||||
extern u8 gPotentialItemEffectBattler;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gMultiHitCounter;
|
||||
extern const u8 *gBattlescriptCurrInstr;
|
||||
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 u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT];
|
||||
extern u32 gSideStatuses[NUM_BATTLE_SIDES];
|
||||
extern u32 gHitMarker;
|
||||
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentActionFuncId;
|
||||
extern u8 gCurrMovePos;
|
||||
extern u8 gChosenMovePos;
|
||||
extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern u8 gNumberOfMovesToChoose;
|
||||
extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastUsedMoveType[MAX_BATTLERS_COUNT];
|
||||
extern s32 gHpDealt;
|
||||
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastUsedMove;
|
||||
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
||||
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u32 gHitMarker;
|
||||
extern u8 gBideTarget[MAX_BATTLERS_COUNT];
|
||||
extern u32 gSideStatuses[NUM_BATTLE_SIDES];
|
||||
extern struct SideTimer gSideTimers[NUM_BATTLE_SIDES];
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern u32 gStatuses4[MAX_BATTLERS_COUNT];
|
||||
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPauseCounterBattle;
|
||||
extern u16 gPaydayMoney;
|
||||
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentTurnActionNumber;
|
||||
extern u8 gLeveledUpInBattle;
|
||||
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleTerrain;
|
||||
extern u8 gPartyCriticalHits[PARTY_SIZE];
|
||||
extern u32 gFieldStatuses;
|
||||
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;
|
||||
extern u16 gIntroSlideFlags;
|
||||
extern u8 gSentPokesToOpponent[2];
|
||||
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];
|
||||
extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerInMenuId;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern bool8 gTransformedShininess[MAX_BATTLERS_COUNT];
|
||||
extern u8 gPlayerDpadHoldFrames;
|
||||
extern u8 gBattlerAbility;
|
||||
extern s32 gBideDmg[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBideTarget[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastUsedMove;
|
||||
extern u8 gIsCriticalHit;
|
||||
extern struct BattleSpriteData *gBattleSpritesDataPtr;
|
||||
extern struct MonSpritesGfx *gMonSpritesGfxPtr;
|
||||
extern u16 gBattleMovePower;
|
||||
extern u16 gMoveToLearn;
|
||||
extern u32 gFieldStatuses;
|
||||
extern struct FieldTimer gFieldTimers;
|
||||
extern u8 gBattlerAbility;
|
||||
extern struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT];
|
||||
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern struct BattleResults gBattleResults;
|
||||
extern u8 gLeveledUpInBattle;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern u8 gNumberOfMovesToChoose;
|
||||
extern bool8 gHasFetchedBall;
|
||||
extern u8 gLastUsedBall;
|
||||
extern u16 gLastThrownBall;
|
||||
extern u16 gBallToDisplay;
|
||||
extern bool8 gLastUsedBallMenuPresent;
|
||||
extern struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gPartyCriticalHits[PARTY_SIZE];
|
||||
extern u8 gCategoryIconSpriteId;
|
||||
extern struct PokedudeBattlerState *gPokedudeBattlerStates[MAX_BATTLERS_COUNT];
|
||||
|
||||
static inline bool32 IsBattlerTurnDamaged(u32 battler)
|
||||
{
|
||||
@@ -1217,5 +1184,5 @@ static inline bool32 MoveResultHasEffect(u32 battler)
|
||||
return !(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT);
|
||||
}
|
||||
|
||||
|
||||
#endif // GUARD_BATTLE_H
|
||||
|
||||
|
||||
@@ -1294,7 +1294,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite)
|
||||
++sprite->data[7];
|
||||
if (IsContest())
|
||||
sprite->data[5] = 80;
|
||||
else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER)
|
||||
else if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
|
||||
sprite->data[5] = 204;
|
||||
else
|
||||
sprite->data[5] = 80;
|
||||
@@ -1338,7 +1338,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite)
|
||||
sprite->data[4] = sprite->y + 4;
|
||||
if (IsContest())
|
||||
sprite->data[2] = -0x10;
|
||||
else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER)
|
||||
else if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
|
||||
sprite->data[2] = 0x100;
|
||||
else
|
||||
sprite->data[2] = -0x10;
|
||||
|
||||
@@ -3086,11 +3086,11 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize)
|
||||
case B_TXT_ATK_PARTNER_NAME: // attacker partner name
|
||||
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
|
||||
GetMonData(
|
||||
&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) +
|
||||
&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerSide(gBattlerAttacker)) +
|
||||
2]], MON_DATA_NICKNAME, text);
|
||||
else
|
||||
GetMonData(
|
||||
&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) +
|
||||
&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerSide(gBattlerAttacker)) +
|
||||
2]], MON_DATA_NICKNAME, text);
|
||||
|
||||
StringGet_Nickname(text);
|
||||
|
||||
Reference in New Issue
Block a user