diff options
Diffstat (limited to 'include/battle.h')
-rw-r--r-- | include/battle.h | 372 |
1 files changed, 202 insertions, 170 deletions
diff --git a/include/battle.h b/include/battle.h index b1284fd6c..445902b39 100644 --- a/include/battle.h +++ b/include/battle.h @@ -2,8 +2,6 @@ #define GUARD_BATTLE_H #include "global.h" - -// should they be included here or included individually by every file? #include "constants/battle.h" #include "battle_util.h" #include "battle_script_commands.h" @@ -19,8 +17,6 @@ 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 BATTLE_BANKS_COUNT 4 - #define IDENTITY_PLAYER_MON1 0 #define IDENTITY_OPPONENT_MON1 1 #define IDENTITY_PLAYER_MON2 2 @@ -29,9 +25,9 @@ #define SIDE_PLAYER 0x0 #define SIDE_OPPONENT 0x1 -#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank])) -#define GET_BANK_SIDE(bank)((GetBattlerPosition(bank) & BIT_SIDE)) -#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE)) +#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)) #define TRAINER_OPPONENT_3FE 0x3FE #define TRAINER_OPPONENT_C00 0xC00 @@ -73,21 +69,22 @@ #define SIDE_STATUS_MIST (1 << 8) #define SIDE_STATUS_SPIKES_DAMAGED (1 << 9) -#define ACTION_USE_MOVE 0 -#define ACTION_USE_ITEM 1 -#define ACTION_SWITCH 2 -#define ACTION_RUN 3 -#define ACTION_WATCHES_CAREFULLY 4 -#define ACTION_SAFARI_ZONE_BALL 5 -#define ACTION_POKEBLOCK_CASE 6 -#define ACTION_GO_NEAR 7 -#define ACTION_SAFARI_ZONE_RUN 8 -#define ACTION_9 9 -#define ACTION_RUN_BATTLESCRIPT 10 // when executing an action -#define ACTION_CANCEL_PARTNER 12 // when choosing an action -#define ACTION_FINISHED 12 // when executing an action -#define ACTION_NOTHING_FAINTED 13 // when choosing an action -#define ACTION_INIT_VALUE 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_POKEBLOCK 6 +#define B_ACTION_SAFARI_GO_NEAR 7 +#define B_ACTION_SAFARI_RUN 8 +#define B_ACTION_9 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_NONE 0xFF #define MOVESTATUS_MISSED (1 << 0) #define MOVESTATUS_SUPEREFFECTIVE (1 << 1) @@ -208,10 +205,10 @@ struct TrainerMonItemCustomMoves union TrainerMonPtr { - struct TrainerMonNoItemDefaultMoves* NoItemDefaultMoves; - struct TrainerMonNoItemCustomMoves* NoItemCustomMoves; - struct TrainerMonItemDefaultMoves* ItemDefaultMoves; - struct TrainerMonItemCustomMoves* ItemCustomMoves; + struct TrainerMonNoItemDefaultMoves *NoItemDefaultMoves; + struct TrainerMonNoItemCustomMoves *NoItemCustomMoves; + struct TrainerMonItemDefaultMoves *ItemDefaultMoves; + struct TrainerMonItemCustomMoves *ItemCustomMoves; }; struct Trainer @@ -235,12 +232,12 @@ extern const struct Trainer gTrainers[]; #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) -struct UnknownFlags +struct ResourceFlags { u32 flags[4]; }; -#define UNKNOWN_FLAG_FLASH_FIRE 1 +#define RESOURCE_FLAG_FLASH_FIRE 1 struct DisableStruct { @@ -250,41 +247,41 @@ struct DisableStruct /*0x08*/ u8 protectUses; /*0x09*/ u8 stockpileCounter; /*0x0A*/ u8 substituteHP; - /*0x0B*/ u8 disableTimer1 : 4; - /*0x0B*/ u8 disableTimer2 : 4; + /*0x0B*/ u8 disableTimer : 4; + /*0x0B*/ u8 disableTimerStartValue : 4; /*0x0C*/ u8 encoredMovePos; /*0x0D*/ u8 unkD; - /*0x0E*/ u8 encoreTimer1 : 4; - /*0x0E*/ u8 encoreTimer2 : 4; - /*0x0F*/ u8 perishSongTimer1 : 4; - /*0x0F*/ u8 perishSongTimer2 : 4; + /*0x0E*/ u8 encoreTimer : 4; + /*0x0E*/ u8 encoreTimerStartValue : 4; + /*0x0F*/ u8 perishSongTimer : 4; + /*0x0F*/ u8 perishSongTimerStartValue : 4; /*0x10*/ u8 furyCutterCounter; - /*0x11*/ u8 rolloutCounter1 : 4; - /*0x11*/ u8 rolloutCounter2 : 4; - /*0x12*/ u8 chargeTimer1 : 4; - /*0x12*/ u8 chargeTimer2 : 4; - /*0x13*/ u8 tauntTimer1:4; + /*0x11*/ u8 rolloutTimer : 4; + /*0x11*/ u8 rolloutTimerStartValue : 4; + /*0x12*/ u8 chargeTimer : 4; + /*0x12*/ u8 chargeTimerStartValue : 4; + /*0x13*/ u8 tauntTimer:4; /*0x13*/ u8 tauntTimer2:4; - /*0x14*/ u8 bankPreventingEscape; - /*0x15*/ u8 bankWithSureHit; + /*0x14*/ u8 battlerPreventingEscape; + /*0x15*/ u8 battlerWithSureHit; /*0x16*/ u8 isFirstTurn; /*0x17*/ u8 unk17; /*0x18*/ u8 truantCounter : 1; - /*0x18*/ u8 truantUnknownBit : 1; + /*0x18*/ u8 truantSwitchInHack : 1; /*0x18*/ u8 unk18_a_2 : 2; - /*0x18*/ u8 unk18_b : 4; - /*0x19*/ u8 rechargeCounter; + /*0x18*/ u8 mimickedMoves : 4; + /*0x19*/ u8 rechargeTimer; /*0x1A*/ u8 unk1A[2]; }; -extern struct DisableStruct gDisableStructs[BATTLE_BANKS_COUNT]; +extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT]; struct ProtectStruct { /* field_0 */ u32 protected:1; u32 endured:1; - u32 onlyStruggle:1; + u32 noValidMoves:1; u32 helpingHand:1; u32 bounceMove:1; u32 stealMove:1; @@ -295,7 +292,7 @@ struct ProtectStruct u32 targetNotAffected:1; u32 chargingTurn:1; u32 fleeFlag:2; // for RunAway and Smoke Ball - u32 usedImprisionedMove:1; + u32 usedImprisonedMove:1; u32 loveImmobility:1; u32 usedDisabledMove:1; /* field_2 */ @@ -312,45 +309,45 @@ struct ProtectStruct /* field_4 */ u32 physicalDmg; /* field_8 */ u32 specialDmg; - /* field_C */ u8 physicalBank; - /* field_D */ u8 specialBank; + /* field_C */ u8 physicalBattlerId; + /* field_D */ u8 specialBattlerId; /* field_E */ u16 fieldE; }; -extern struct ProtectStruct gProtectStructs[BATTLE_BANKS_COUNT]; +extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT]; struct SpecialStatus { u8 statLowered : 1; // 0x1 u8 lightningRodRedirected : 1; // 0x2 - u8 restoredBankSprite: 1; // 0x4 - u8 intimidatedPoke : 1; // 0x8 + u8 restoredBattlerSprite: 1; // 0x4 + u8 intimidatedMon : 1; // 0x8 u8 traced : 1; // 0x10 - u8 flag20 : 1; + u8 ppNotAffectedByPressure : 1; u8 flag40 : 1; u8 focusBanded : 1; u8 field1[3]; - s32 moveturnLostHP; - s32 moveturnLostHP_physical; - s32 moveturnLostHP_special; - u8 moveturnPhysicalBank; - u8 moveturnSpecialBank; + s32 dmg; + s32 physicalDmg; + s32 specialDmg; + u8 physicalBattlerId; + u8 specialBattlerId; u8 field12; u8 field13; }; -extern struct SpecialStatus gSpecialStatuses[BATTLE_BANKS_COUNT]; +extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT]; struct SideTimer { /*0x00*/ u8 reflectTimer; - /*0x01*/ u8 reflectBank; + /*0x01*/ u8 reflectBattlerId; /*0x02*/ u8 lightscreenTimer; - /*0x03*/ u8 lightscreenBank; + /*0x03*/ u8 lightscreenBattlerId; /*0x04*/ u8 mistTimer; - /*0x05*/ u8 mistBank; + /*0x05*/ u8 mistBattlerId; /*0x06*/ u8 safeguardTimer; - /*0x07*/ u8 safeguardBank; + /*0x07*/ u8 safeguardBattlerId; /*0x08*/ u8 followmeTimer; /*0x09*/ u8 followmeTarget; /*0x0A*/ u8 spikesAmount; @@ -361,14 +358,14 @@ extern struct SideTimer gSideTimers[]; struct WishFutureKnock { - u8 futureSightCounter[BATTLE_BANKS_COUNT]; - u8 futureSightAttacker[BATTLE_BANKS_COUNT]; - s32 futureSightDmg[BATTLE_BANKS_COUNT]; - u16 futureSightMove[BATTLE_BANKS_COUNT]; - u8 wishCounter[BATTLE_BANKS_COUNT]; - u8 wishUserID[BATTLE_BANKS_COUNT]; + 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]; + u8 wishUserID[MAX_BATTLERS_COUNT]; u8 weatherDuration; - u8 knockedOffPokes[2]; + u8 knockedOffMons[2]; }; extern struct WishFutureKnock gWishFutureKnock; @@ -413,6 +410,12 @@ extern u8 gAbsentBattlerFlags; extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT]; +struct UsedMoves +{ + u16 moves[MAX_BATTLERS_COUNT]; + u16 unknown[MAX_BATTLERS_COUNT]; +}; + struct BattleHistory { /*0x00*/ u16 usedMoves[2][8]; // 0xFFFF means move not used (confuse self hit, etc) @@ -446,17 +449,17 @@ struct StatsArray struct BattleResources { - struct SecretBaseRecord* secretBase; - struct UnknownFlags *flags; - struct BattleScriptsStack* battleScriptsStack; - struct BattleCallbacksStack* battleCallbackStack; - struct StatsArray* statsBeforeLvlUp; + struct SecretBaseRecord *secretBase; + struct ResourceFlags *flags; + struct BattleScriptsStack *battleScriptsStack; + struct BattleCallbacksStack *battleCallbackStack; + struct StatsArray *beforeLvlUp; struct AI_ThinkingStruct *ai; struct BattleHistory *battleHistory; struct BattleScriptsStack *AI_ScriptsStack; }; -extern struct BattleResources* gBattleResources; +extern struct BattleResources *gBattleResources; #define BATTLESCRIPTS_STACK (gBattleResources->battleScriptsStack) #define BATTLE_CALLBACKS_STACK (gBattleResources->battleCallbackStack) @@ -467,18 +470,18 @@ struct BattleResults u8 playerFaintCounter; // 0x0 u8 opponentFaintCounter; // 0x1 u8 playerSwitchesCounter; // 0x2 - u8 unk3; // 0x3 - u8 unk4; // 0x4 - u8 unk5_0:1; // 0x5 + u8 numHealingItemsUsed; // 0x3 + u8 numRevivesUsed; // 0x4 + u8 playerMonWasDamaged:1; // 0x5 u8 usedMasterBall:1; // 0x5 u8 caughtMonBall:4; // 0x5 - u8 unk5_6:1; // 0x5 + u8 shinyWildMon:1; // 0x5 u8 unk5_7:1; // 0x5 u16 playerMon1Species; // 0x6 u8 playerMon1Name[11]; // 0x8 u8 battleTurnCounter; // 0x13 u8 playerMon2Name[11]; // 0x14 - u8 field_1F; // 0x1F + u8 pokeblockThrows; // 0x1F u16 lastOpponentSpecies; // 0x20 u16 lastUsedMovePlayer; // 0x22 u16 lastUsedMoveOpponent; // 0x24 @@ -494,39 +497,31 @@ extern struct BattleResults gBattleResults; struct BattleStruct { u8 turnEffectsTracker; - u8 turnEffectsBank; + u8 turnEffectsBattlerId; u8 filler2; - u8 turncountersTracker; - u8 wrappedMove[8]; // ask gamefreak why they declared it that way - u8 moveTarget[4]; + u8 turnCountersTracker; + u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access. + u8 moveTarget[MAX_BATTLERS_COUNT]; u8 expGetterId; u8 field_11; u8 wildVictorySong; u8 dynamicMoveType; u8 wrappedBy[4]; - u16 assistPossibleMoves[5 * 4]; // 5 mons, each of them knowing 4 moves - u8 field_40; - u8 field_41; - u8 field_42; - u8 field_43; - u8 field_44; - u8 field_45; - u8 field_46; - u8 field_47; - u8 focusPunchBank; + u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // 6 mons, each of them knowing 4 moves + u8 focusPunchBattlerId; u8 battlerPreventingSwitchout; u8 moneyMultiplier; u8 savedTurnActionNumber; u8 switchInAbilitiesCounter; u8 faintedActionsState; - u8 faintedActionsBank; + u8 faintedActionsBattlerId; u8 field_4F; u16 expValue; u8 field_52; u8 sentInPokes; - bool8 selectionScriptFinished[BATTLE_BANKS_COUNT]; + bool8 selectionScriptFinished[MAX_BATTLERS_COUNT]; u8 field_58[4]; - u8 monToSwitchIntoId[BATTLE_BANKS_COUNT]; + u8 monToSwitchIntoId[MAX_BATTLERS_COUNT]; u8 field_60[4][3]; u8 runTries; u8 caughtMonNick[11]; @@ -535,11 +530,11 @@ struct BattleStruct u8 safariPkblThrowCounter; u8 safariEscapeFactor; u8 safariCatchFactor; - u8 field_7D; - u8 field_7E; + u8 linkBattleVsSpriteId_V; + u8 linkBattleVsSpriteId_S; u8 formToChangeInto; - u8 chosenMovePositions[BATTLE_BANKS_COUNT]; - u8 stateIdAfterSelScript[BATTLE_BANKS_COUNT]; + u8 chosenMovePositions[MAX_BATTLERS_COUNT]; + u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT]; u8 field_88; u8 field_89; u8 field_8A; @@ -547,69 +542,48 @@ struct BattleStruct u8 field_8C; u8 field_8D; u8 stringMoveType; - u8 expGetterBank; + u8 expGetterBattlerId; u8 field_90; u8 field_91; - u8 field_92; - u8 field_93; - u8 wallyBattleState; - u8 wallyMovesState; - u8 wallyWaitFrames; - u8 wallyMoveFrames; - u8 mirrorMoves[8]; // ask gamefreak why they declared it that way - u8 field_A0; - u8 field_A1; - u8 field_A2; - u8 field_A3; - u8 field_A4; - u8 field_A5; - u8 field_A6; - u8 field_A7; + u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; + u8 field_96; + u8 field_97; + u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // ask gamefreak why they declared it that way u16 hpOnSwitchout[2]; - u32 savedBattleTypeFlags; u8 abilityPreventingSwitchout; u8 hpScale; - u8 synchronizeMoveEffect; + u8 field_AE; + u8 field_AF; + u8 field_B0; + u8 field_B1; + u8 field_B2; u8 field_B3; - u8 field_B4; + u8 synchronizeMoveEffect; u8 field_B5; u8 field_B6; - u8 field_B7; - // void (*savedCallback)(void); - u16 usedHeldItems[BATTLE_BANKS_COUNT]; + u8 atkCancellerTracker; + u16 usedHeldItems[MAX_BATTLERS_COUNT]; u8 chosenItem[4]; // why is this an u8? u8 AI_itemType[2]; u8 AI_itemFlags[2]; - u16 choicedMove[BATTLE_BANKS_COUNT]; - u16 changedItems[BATTLE_BANKS_COUNT]; - u8 intimidateBank; + u16 choicedMove[MAX_BATTLERS_COUNT]; + u16 changedItems[MAX_BATTLERS_COUNT]; + u8 intimidateBattler; u8 switchInItemsCounter; - u8 field_DA; + u8 arenaTurnCounter; // not used in FR? u8 turnSideTracker; u8 fillerDC[0xDF-0xDC]; - u8 field_DF; - u8 mirrorMoveArrays[32]; - u16 castformPalette[BATTLE_BANKS_COUNT][16]; - u8 field_180; - u8 field_181; - u8 field_182; - u8 field_183; - struct BattleEnigmaBerry battleEnigmaBerry; + u8 givenExpMons; + u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; + u16 castformPalette[MAX_BATTLERS_COUNT][16]; u8 wishPerishSongState; - u8 wishPerishSongBank; - bool8 overworldWeatherDone; - u8 atkCancellerTracker; - u8 field_1A4[96]; - u8 field_204[104]; - u8 field_26C[40]; - u8 AI_monToSwitchIntoId[BATTLE_BANKS_COUNT]; - u8 field_298[8]; - u8 field_2A0; - u8 field_2A1; - u8 field_2A2; -}; + u8 wishPerishSongBattlerId; + u8 field_182; // overworldWeatherDone? + u8 field_183; + u8 field_184[124]; // currently unknown +}; // size == 0x200 bytes -extern struct BattleStruct* gBattleStruct; +extern struct BattleStruct *gBattleStruct; #define GET_MOVE_TYPE(move, typeArg) \ { \ @@ -621,6 +595,13 @@ extern struct BattleStruct* gBattleStruct; #define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY) #define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY) +#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; \ +} #define MOVE_EFFECT_SLEEP 0x1 #define MOVE_EFFECT_POISON 0x2 @@ -735,6 +716,7 @@ extern struct BattleStruct* gBattleStruct; #define B_ANIM_STATUS_WRAPPED 0x9 #define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 +#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0)) #define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40 #define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit @@ -779,13 +761,13 @@ struct BattleScripting u8 animArg2; u16 tripleKickPower; u8 atk49_state; - u8 bankWithAbility; + u8 battlerWithAbility; u8 multihitMoveEffect; - u8 bank; + u8 battler; u8 animTurn; u8 animTargetsHit; u8 statChanger; - u8 field_1B; + bool8 statAnimPlayed; u8 atk23_state; u8 battleStyle; u8 atk6C_state; @@ -794,12 +776,8 @@ struct BattleScripting u8 reshowMainState; u8 reshowHelperState; u8 field_23; - u8 field_24; - u8 multiplayerId; }; -extern struct BattleScripting gBattleScripting; - // functions // battle_1 @@ -809,6 +787,7 @@ void ApplyPlayerChosenFrameToBattleMenu(void); bool8 LoadChosenBattleElement(u8 caseId); void DrawMainBattleBackground(void); void task00_0800F6FC(u8 taskId); +void sub_800F324(void); enum { @@ -863,24 +842,23 @@ struct BattleAnimationInfo struct BattleHealthboxInfo { - u8 flag_x1 : 1; - u8 flag_x2 : 1; - u8 flag_x4 : 1; + 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 flag_x80 : 1; u8 field_1_x1 : 1; - u8 field_1_x1E : 4; - u8 field_1_x20 : 1; + u8 field_1_x1E : 5; u8 field_1_x40 : 1; u8 field_1_x80 : 1; - u8 field_2; - u8 field_3; + u8 healthboxBounceSpriteId; + u8 battlerBounceSpriteId; u8 animationState; u8 field_5; - u8 field_6; + u8 matrixNum; u8 shadowSpriteId; u8 field_8; u8 field_9; @@ -892,14 +870,14 @@ struct BattleBarInfo { u8 healthboxSpriteId; s32 maxValue; - s32 currentValue; + s32 oldValue; s32 receivedValue; - s32 field_10; + s32 currValue; }; struct BattleSpriteData { - struct BattleSpriteInfo *bankData; + struct BattleSpriteInfo *battlerData; struct BattleHealthboxInfo *healthBoxesData; struct BattleAnimationInfo *animationData; struct BattleBarInfo *battleBars; @@ -931,16 +909,30 @@ struct MonSpritesGfx void *field_17C; }; -extern struct BattleSpritesGfx* gMonSpritesGfx; +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; +extern struct BattleSpritesGfx *gMonSpritesGfx; extern u8 gBattleOutcome; extern u16 gLastUsedItem; extern u32 gBattleTypeFlags; -extern struct MonSpritesGfx* gMonSpritesGfxPtr; +extern struct MonSpritesGfx *gMonSpritesGfxPtr; extern u16 gTrainerBattleOpponent_A; extern u16 gMoveToLearn; extern u16 gBattleMovePower; extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT]; extern u16 gCurrentMove; +extern u16 gChosenMove; +extern u16 gCalledMove; extern u8 gCritMultiplier; extern u16 gBattleWeather; extern u8 gLastUsedAbility; @@ -949,8 +941,48 @@ 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 u8 gBattlerPositions[MAX_BATTLERS_COUNT]; +extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; extern u8 gBattleOutcome; extern u8 gBattleMonForms[MAX_BATTLERS_COUNT]; +extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void); +extern u32 gBattleControllerExecFlags; +extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200]; +extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200]; +extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT]; +extern void (*gPreBattleCallback1)(void); +extern bool8 gDoingBattleAnim; +extern void *gUnknown_3005EE0[]; +extern u8 *gUnknown_2022BB8; +extern u8 *gUnknown_2022BBC; +extern void (*gBattleMainFunc)(void); +extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT]; +extern u32 gUnknown_2022B54; +extern u8 gUnknown_2023DDC; +extern u8 gBattlerAttacker; +extern u8 gEffectBattler; +extern u8 gUnknown_2023D72; +extern struct BattleScripting gBattleScripting; +extern u8 gBattlerFainted; +extern u32 gStatuses3[MAX_BATTLERS_COUNT]; +extern u8 gSentPokesToOpponent[2]; +extern const u8 *gBattlescriptCurrInstr; +extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT]; +extern u16 gLastMoves[MAX_BATTLERS_COUNT]; +extern u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT]; +extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT]; +extern u16 gSideStatuses[2]; +extern u32 gHitMarker; +extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT]; +extern u8 gMoveResultFlags; +extern s32 gTakenDmg[MAX_BATTLERS_COUNT]; +extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT]; +extern u8 gCurrentActionFuncId; +extern u8 gCurrMovePos; +extern u8 gChosenMovePos; +extern u8 gUnknown_3004FFC[MAX_BATTLERS_COUNT]; +extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT]; #endif // GUARD_BATTLE_H |