summaryrefslogtreecommitdiff
path: root/include/battle.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/battle.h')
-rw-r--r--include/battle.h591
1 files changed, 269 insertions, 322 deletions
diff --git a/include/battle.h b/include/battle.h
index 78b9d13de..ac12533e3 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -5,9 +5,9 @@
#include "constants/battle.h"
#include "battle_setup.h"
-#define GET_BATTLER_POSITION(bank)((gBattlerPositions[bank]))
-#define GET_BATTLER_SIDE(bank)((GetBattlerPosition(bank) & BIT_SIDE))
-#define GET_BATTLER_SIDE2(bank)((GET_BATTLER_POSITION(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)
// Battle Actions
// These determine what each battler will do in a turn
@@ -21,13 +21,39 @@
#define B_ACTION_SAFARI_GO_NEAR 7
#define B_ACTION_SAFARI_RUN 8
// The exact purposes of these are unclear
-#define B_ACTION_WALLY_THROW 9
+#define B_ACTION_WALLY_THROW 9
#define B_ACTION_EXEC_SCRIPT 10 // when executing an action
-#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
+#define B_ACTION_TRY_FINISH 11
#define B_ACTION_FINISHED 12 // when executing an action
+
+#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 MAX_TRAINER_ITEMS 4
+#define MAX_MON_MOVES 4
+
+// array entries for battle communication
+#define MULTIUSE_STATE 0x0
+#define CURSOR_POSITION 0x1
+#define TASK_ID 0x1 // task Id and cursor position share the same field
+#define SPRITES_INIT_STATE1 0x1 // shares the Id as well
+#define SPRITES_INIT_STATE2 0x2
+#define MOVE_EFFECT_BYTE 0x3
+#define ACTIONS_CONFIRMED_COUNT 0x4
+#define MULTISTRING_CHOOSER 0x5
+#define MSG_DISPLAY 0x7
+#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8
+
+#define MOVE_TARGET_SELECTED 0x0
+#define MOVE_TARGET_DEPENDS 0x1
+#define MOVE_TARGET_USER_OR_SELECTED 0x2
+#define MOVE_TARGET_RANDOM 0x4
+#define MOVE_TARGET_BOTH 0x8
+#define MOVE_TARGET_USER 0x10
+#define MOVE_TARGET_FOES_AND_ALLY 0x20
+#define MOVE_TARGET_OPPONENTS_FIELD 0x40
+
// defines for the u8 array gTypeEffectiveness
#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
@@ -47,18 +73,189 @@
#define TYPE_IS_PHYSICAL(type) ((type) < TYPE_MYSTERY)
#define TYPE_IS_SPECIAL(type) ((type) > TYPE_MYSTERY)
-enum
+struct DisableStruct
+{
+ /*0x00*/ u32 transformedMonPersonality;
+ /*0x04*/ u16 disabledMove;
+ /*0x06*/ u16 encoredMove;
+ /*0x08*/ u8 protectUses;
+ /*0x09*/ u8 stockpileCounter;
+ /*0x0A*/ u8 substituteHP;
+ /*0x0B*/ u8 disableTimer1 : 4;
+ /*0x0B*/ u8 disableTimer2 : 4;
+ /*0x0C*/ u8 encoredMovePos;
+ /*0x0D*/ u8 unkD;
+ /*0x0E*/ u8 encoreTimer1 : 4;
+ /*0x0E*/ u8 encoreTimer2 : 4;
+ /*0x0F*/ u8 perishSongTimer1 : 4;
+ /*0x0F*/ u8 perishSongTimer2 : 4;
+ /*0x10*/ u8 furyCutterCounter;
+ /*0x11*/ u8 rolloutTimer1 : 4;
+ /*0x11*/ u8 rolloutTimer2 : 4;
+ /*0x12*/ u8 chargeTimer1 : 4;
+ /*0x12*/ u8 chargeTimer2 : 4;
+ /*0x13*/ u8 tauntTimer1:4;
+ /*0x13*/ u8 tauntTimer2:4;
+ /*0x14*/ u8 bankPreventingEscape;
+ /*0x15*/ u8 bankWithSureHit;
+ /*0x16*/ u8 isFirstTurn;
+ /*0x17*/ u8 unk17;
+ /*0x18*/ u8 truantCounter : 1;
+ /*0x18*/ u8 unk18_a : 3;
+ /*0x18*/ u8 unk18_b : 4;
+ /*0x19*/ u8 rechargeCounter;
+ /*0x1A*/ u8 unk1A[2];
+};
+
+struct ProtectStruct
+{
+ /*field0*/
+ u32 protected:1;
+ u32 endured:1;
+ u32 noValidMoves:1;
+ u32 helpingHand:1;
+ u32 bounceMove:1;
+ u32 stealMove:1;
+ u32 flag0Unknown:1;
+ u32 prlzImmobility:1;
+ /*field1*/
+ u32 confusionSelfDmg:1;
+ u32 targetNotAffected:1;
+ u32 chargingTurn:1;
+ u32 fleeFlag:2; // For RunAway and Smoke Ball.
+ u32 usedImprisonedMove:1;
+ u32 loveImmobility:1;
+ u32 usedDisabledMove:1;
+ /*field2*/
+ u32 usedTauntedMove:1;
+ u32 flag2Unknown:1;
+ u32 flinchImmobility:1;
+ u32 notFirstStrike:1;
+ u32 free : 4;
+ /*field3*/
+ u32 field3 : 8;
+ u32 physicalDmg;
+ u32 specialDmg;
+ u8 physicalBattlerId;
+ u8 specialBattlerId;
+ u16 fieldE;
+};
+
+struct SpecialStatus
+{
+ u8 statLowered:1;
+ u8 lightningRodRedirected:1;
+ u8 restoredBattlerSprite: 1;
+ u8 intimidatedMon:1;
+ u8 traced:1;
+ u8 ppNotAffectedByPressure:1;
+ u8 flag40:1;
+ u8 focusBanded:1;
+ u8 field1[3];
+ s32 dmg;
+ s32 physicalDmg;
+ s32 specialDmg;
+ u8 physicalBattlerId;
+ u8 specialBattlerId;
+ u8 field12;
+ u8 field13;
+};
+
+struct SideTimer
+{
+ u8 reflectTimer; //0x0
+ u8 lightscreenTimer; //0x1
+ u8 mistTimer; //0x2
+ u8 field3; //0x3
+ u16 field4; //0x4
+ u8 spikesAmount; //0x6
+ u8 safeguardTimer; //0x7
+ u8 followmeTimer; //0x8
+ u8 followmeTarget; //0x9
+ u8 fieldA; //0xA
+ u8 fieldB; //0xB
+};
+
+struct WishFutureKnock
+{
+ 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 wishMonId[MAX_BATTLERS_COUNT];
+ u8 weatherDuration;
+ u8 knockedOffPokes[2];
+};
+
+struct AI_ThinkingStruct /* 0x2016800 */
+{
+ /*0x00*/ u8 aiState;
+ /*0x01*/ u8 movesetIndex;
+ /*0x02*/ u16 moveConsidered;
+ /*0x04*/ s8 score[4]; // score?
+ /*0x08*/ u32 funcResult;
+ /*0x0C*/ u32 aiFlags;
+ /*0x10*/ u8 aiAction;
+ /*0x11*/ u8 aiLogicId;
+ /*0x12*/ u8 filler12[6];
+ /*0x18*/ u8 simulatedRNG[4];
+};
+
+struct BattleHistory
+{
+ /*0x00*/ u16 usedMoves[2][8]; // 0xFFFF means move not used (confuse self hit, etc)
+ /*0x20*/ u8 abilities[MAX_BATTLERS_COUNT / 2];
+ /*0x22*/ u8 itemEffects[MAX_BATTLERS_COUNT / 2];
+ /*0x24*/ u16 trainerItems[MAX_BATTLERS_COUNT];
+ /*0x2C*/ u8 numItems;
+};
+
+struct BattleScriptsStack
+{
+ const u8 *ptr[8];
+ u8 size;
+};
+
+struct BattleCallbacksStack
+{
+ void* ptr[8];
+ u8 size;
+};
+
+struct StatsArray
+{
+ u16 hp;
+ u16 atk;
+ u16 def;
+ u16 spd;
+ u16 spAtk;
+ u16 spDef;
+};
+
+struct BattleResults
{
- BATTLE_TERRAIN_GRASS,
- BATTLE_TERRAIN_LONG_GRASS,
- BATTLE_TERRAIN_SAND,
- BATTLE_TERRAIN_UNDERWATER,
- BATTLE_TERRAIN_WATER,
- BATTLE_TERRAIN_POND,
- BATTLE_TERRAIN_MOUNTAIN,
- BATTLE_TERRAIN_CAVE,
- BATTLE_TERRAIN_BUILDING,
- BATTLE_TERRAIN_PLAIN,
+ u8 playerFaintCounter; // 0x0
+ u8 opponentFaintCounter; // 0x1
+ u8 unk2; // 0x2
+ u8 unk3; // 0x3
+ u8 unk4; // 0x4
+ u8 unk5_0:1; // 0x5
+ u8 unk5_1:1; // 0x5
+ u16 poke1Species; // 0x6
+ u8 pokeString1[10]; // 0x8
+ u8 unk12;
+ u8 battleTurnCounter; // 0x13
+ u8 pokeString2[10]; // 0x14
+ u8 filler1E[2];
+ u16 lastOpponentSpecies; // 0x20
+ u16 lastUsedMove; // 0x22
+ u16 opponentMove; // 0x24
+ u16 opponentSpecies; // 0x26
+ u16 caughtPoke; // 0x28
+ u8 caughtNick[10]; // 0x2A
+ u8 filler34[2];
+ u8 usedBalls[11];
};
union TrainerMonPtr
@@ -83,35 +280,12 @@ struct Trainer
/*0x24*/ union TrainerMonPtr party;
};
-struct BattleHistory
-{
- /*0x00*/ u16 usedMoves[2][8]; // 0xFFFF means move not used (confuse self hit, etc)
- /*0x20*/ u8 abilities[MAX_BATTLERS_COUNT / 2];
- /*0x22*/ u8 itemEffects[MAX_BATTLERS_COUNT / 2];
- /*0x24*/ u16 trainerItems[MAX_BATTLERS_COUNT];
- /*0x2C*/ u8 numItems;
-};
-
struct AI_Stack
{
u8 *ptr[8];
u8 size;
};
-struct AI_ThinkingStruct /* 0x2016800 */
-{
- /*0x00*/ u8 aiState;
- /*0x01*/ u8 movesetIndex;
- /*0x02*/ u16 moveConsidered;
- /*0x04*/ s8 score[4]; // score?
- /*0x08*/ u32 funcResult;
- /*0x0C*/ u32 aiFlags;
- /*0x10*/ u8 aiAction;
- /*0x11*/ u8 aiLogicId;
- /*0x12*/ u8 filler12[6];
- /*0x18*/ u8 simulatedRNG[4];
-};
-
struct BattleStruct /* 0x2000000 */
{
/*0x00000*/ u8 unk0;
@@ -352,77 +526,6 @@ struct BattleStruct /* 0x2000000 */
/* 0x16A00 */ struct BattleHistory unk_2016A00_2;
};
-struct StatsArray
-{
- u16 hp;
- u16 atk;
- u16 def;
- u16 spd;
- u16 spAtk;
- u16 spDef;
-};
-
-#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
-
-struct DisableStruct
-{
- /*0x00*/ u32 transformedMonPersonality;
- /*0x04*/ u16 disabledMove;
- /*0x06*/ u16 encoredMove;
- /*0x08*/ u8 protectUses;
- /*0x09*/ u8 stockpileCounter;
- /*0x0A*/ u8 substituteHP;
- /*0x0B*/ u8 disableTimer1 : 4;
- /*0x0B*/ u8 disableTimer2 : 4;
- /*0x0C*/ u8 encoredMovePos;
- /*0x0D*/ u8 unkD;
- /*0x0E*/ u8 encoreTimer1 : 4;
- /*0x0E*/ u8 encoreTimer2 : 4;
- /*0x0F*/ u8 perishSongTimer1 : 4;
- /*0x0F*/ u8 perishSongTimer2 : 4;
- /*0x10*/ u8 furyCutterCounter;
- /*0x11*/ u8 rolloutTimer1 : 4;
- /*0x11*/ u8 rolloutTimer2 : 4;
- /*0x12*/ u8 chargeTimer1 : 4;
- /*0x12*/ u8 chargeTimer2 : 4;
- /*0x13*/ u8 tauntTimer1:4;
- /*0x13*/ u8 tauntTimer2:4;
- /*0x14*/ u8 bankPreventingEscape;
- /*0x15*/ u8 bankWithSureHit;
- /*0x16*/ u8 isFirstTurn;
- /*0x17*/ u8 unk17;
- /*0x18*/ u8 truantCounter : 1;
- /*0x18*/ u8 unk18_a : 3;
- /*0x18*/ u8 unk18_b : 4;
- /*0x19*/ u8 rechargeCounter;
- /*0x1A*/ u8 unk1A[2];
-};
-
-struct BattleResults
-{
- u8 playerFaintCounter; // 0x0
- u8 opponentFaintCounter; // 0x1
- u8 unk2; // 0x2
- u8 unk3; // 0x3
- u8 unk4; // 0x4
- u8 unk5_0:1; // 0x5
- u8 unk5_1:1; // 0x5
- u16 poke1Species; // 0x6
- u8 pokeString1[10]; // 0x8
- u8 unk12;
- u8 battleTurnCounter; // 0x13
- u8 pokeString2[10]; // 0x14
- u8 filler1E[2];
- u16 lastOpponentSpecies; // 0x20
- u16 lastUsedMove; // 0x22
- u16 opponentMove; // 0x24
- u16 opponentSpecies; // 0x26
- u16 caughtPoke; // 0x28
- u8 caughtNick[10]; // 0x2A
- u8 filler34[2];
- u8 usedBalls[11];
-};
-
struct Struct2017100
{
u32 arr[4];
@@ -478,96 +581,7 @@ struct Struct20238C8
u8 unk0_7:1;
};
-struct ProtectStruct
-{
- /*field0*/
- u32 protected:1;
- u32 endured:1;
- u32 onlyStruggle:1;
- u32 helpingHand:1;
- u32 bounceMove:1;
- u32 stealMove:1;
- u32 flag0Unknown:1;
- u32 prlzImmobility:1;
- /*field1*/
- u32 confusionSelfDmg:1;
- u32 notEffective:1;
- u32 chargingTurn:1;
- u32 fleeFlag:2; //for RunAway and Smoke Ball
- u32 usedImprisionedMove:1;
- u32 loveImmobility:1;
- u32 usedDisabledMove:1;
- /*field2*/
- u32 usedTauntedMove:1;
- u32 flag2Unknown:1;
- u32 flinchImmobility:1;
- u32 notFirstStrike:1;
- u32 free : 4;
- /*field3*/
- u32 field3 : 8;
- u32 physicalDmg;
- u32 specialDmg;
- u8 physicalBank;
- u8 specialBank;
- u16 fieldE;
-};
-
-struct SpecialStatus
-{
- u8 statLowered : 1;
- u8 lightningRodRedirected : 1;
- u8 restoredBankSprite: 1;
- u8 intimidatedPoke : 1;
- u8 traced : 1;
- u8 flag20 : 1;
- u8 flag40 : 1;
- u8 focusBanded : 1;
- u8 field1[3];
- s32 moveturnLostHP;
- s32 moveturnLostHP_physical;
- s32 moveturnLostHP_special;
- u8 moveturnPhysicalBank;
- u8 moveturnSpecialBank;
- u8 field12;
- u8 field13;
-};
-
-struct sideTimer
-{
- u8 reflectTimer; //0x0
- u8 lightscreenTimer; //0x1
- u8 mistTimer; //0x2
- u8 field3; //0x3
- u16 field4; //0x4
- u8 spikesAmount; //0x6
- u8 safeguardTimer; //0x7
- u8 followmeTimer; //0x8
- u8 followmeTarget; //0x9
- u8 fieldA; //0xA
- u8 fieldB; //0xB
-};
-
-struct WishFutureKnock
-{
- 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];
-};
-
-extern struct BattleHistory unk_2016A00;
-extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
-extern struct BattleResults gBattleResults;
-extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
-extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
-extern struct sideTimer gSideTimers[2];
-extern struct WishFutureKnock gWishFutureKnock;
-extern struct AI_ThinkingStruct gAIThinkingSpace;
-extern struct Struct20238C8 gUnknown_020238C8;
+#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180))
#define GET_MOVE_TYPE(move, typeArg) \
{ \
@@ -577,73 +591,20 @@ extern struct Struct20238C8 gUnknown_020238C8;
typeArg = gBattleMoves[move].type; \
}
-#define MOVE_EFFECT_SLEEP 0x1
-#define MOVE_EFFECT_POISON 0x2
-#define MOVE_EFFECT_BURN 0x3
-#define MOVE_EFFECT_FREEZE 0x4
-#define MOVE_EFFECT_PARALYSIS 0x5
-#define MOVE_EFFECT_TOXIC 0x6
-#define MOVE_EFFECT_CONFUSION 0x7
-#define MOVE_EFFECT_FLINCH 0x8
-#define MOVE_EFFECT_TRI_ATTACK 0x9
-#define MOVE_EFFECT_UPROAR 0xA
-#define MOVE_EFFECT_PAYDAY 0xB
-#define MOVE_EFFECT_CHARGING 0xC
-#define MOVE_EFFECT_WRAP 0xD
-#define MOVE_EFFECT_RECOIL_25 0xE
-#define MOVE_EFFECT_ATK_PLUS_1 0xF
-#define MOVE_EFFECT_DEF_PLUS_1 0x10
-#define MOVE_EFFECT_SPD_PLUS_1 0x11
-#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
-#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
-#define MOVE_EFFECT_ACC_PLUS_1 0x14
-#define MOVE_EFFECT_EVS_PLUS_1 0x15
-#define MOVE_EFFECT_ATK_MINUS_1 0x16
-#define MOVE_EFFECT_DEF_MINUS_1 0x17
-#define MOVE_EFFECT_SPD_MINUS_1 0x18
-#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
-#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
-#define MOVE_EFFECT_ACC_MINUS_1 0x1B
-#define MOVE_EFFECT_EVS_MINUS_1 0x1C
-#define MOVE_EFFECT_RECHARGE 0x1D
-#define MOVE_EFFECT_RAGE 0x1E
-#define MOVE_EFFECT_STEAL_ITEM 0x1F
-#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
-#define MOVE_EFFECT_NIGHTMARE 0x21
-#define MOVE_EFFECT_ALL_STATS_UP 0x22
-#define MOVE_EFFECT_RAPIDSPIN 0x23
-#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
-#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
-#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
-#define MOVE_EFFECT_ATK_PLUS_2 0x27
-#define MOVE_EFFECT_DEF_PLUS_2 0x28
-#define MOVE_EFFECT_SPD_PLUS_2 0x29
-#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
-#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
-#define MOVE_EFFECT_ACC_PLUS_2 0x2C
-#define MOVE_EFFECT_EVS_PLUS_2 0x2D
-#define MOVE_EFFECT_ATK_MINUS_2 0x2E
-#define MOVE_EFFECT_DEF_MINUS_2 0x2F
-#define MOVE_EFFECT_SPD_MINUS_2 0x30
-#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
-#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
-#define MOVE_EFFECT_ACC_MINUS_2 0x33
-#define MOVE_EFFECT_EVS_MINUS_2 0x34
-#define MOVE_EFFECT_THRASH 0x35
-#define MOVE_EFFECT_KNOCK_OFF 0x36
-#define MOVE_EFFECT_NOTHING_37 0x37
-#define MOVE_EFFECT_NOTHING_38 0x38
-#define MOVE_EFFECT_NOTHING_39 0x39
-#define MOVE_EFFECT_NOTHING_3A 0x3A
-#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
-#define MOVE_EFFECT_NOTHING_3C 0x3C
-#define MOVE_EFFECT_NOTHING_3D 0x3D
-#define MOVE_EFFECT_NOTHING_3E 0x3E
-#define MOVE_EFFECT_NOTHING_3F 0x3F
-#define MOVE_EFFECT_AFFECTS_USER 0x40
-#define MOVE_EFFECT_CERTAIN 0x80
+#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
+#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+
+#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)))
+
+#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 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
@@ -651,6 +612,16 @@ extern struct Struct20238C8 gUnknown_020238C8;
#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
+extern struct BattleHistory unk_2016A00;
+extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
+extern struct BattleResults gBattleResults;
+extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
+extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
+extern struct SideTimer gSideTimers[2];
+extern struct WishFutureKnock gWishFutureKnock;
+extern struct AI_ThinkingStruct gAIThinkingSpace;
+extern struct Struct20238C8 gUnknown_020238C8;
+
// used in many battle files, it seems as though Hisashi Sogabe wrote
// some sort of macro to replace the use of actually calling memset.
// Perhaps it was thought calling memset was much slower?
@@ -679,60 +650,36 @@ extern struct Struct20238C8 gUnknown_020238C8;
typedef void (*BattleCmdFunc)(void);
-struct funcStack
-{
- void* ptr[8];
- u8 size;
-};
-
-struct scriptsStack
-{
- const u8 *ptr[8];
- u8 size;
-};
-
-#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
-#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
-
-#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 GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
-
extern u8 gBattleTextBuff1[];
//function declarations of buffer emits
-void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0
-void Emitcmd1(u8 a, u8 b, u8 c); //0x1
-void EmitSetMonData(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
-void EmitSendOutPoke(u8 a, u8 b, u8 c); //0x5
-void EmitReturnPokeToBall(u8 a, u8 b); //0x6
-void EmitTrainerSlide(u8 a); //0x8
-void Emitcmd10(u8 a); //0xA
-void EmitBallThrow(u8 a, u8 shakes); //0xD
-//void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF
-void EmitPrintString(u8 a, u16 stringID); //0x10
-//void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11
-void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16
-//void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b
-//void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19
-void EmitStatusIconUpdate(u8 a, u32 b, u32 c); //0x1A
-void EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B
-void EmitStatusXor(u8 a, u8 b); //0x1C
-void EmitHitAnimation(u8 a); //0x29
-void EmitEffectivenessSound(u8 a, u16 sound); //0x2B
-void Emitcmd44(u8 a, u16 sound); //0x2C
-void EmitFaintingCry(u8 a); //0x2D
-void EmitIntroSlide(u8 a, u8 b); //0x2E
-void Emitcmd49(u8 a); //0x31
-void EmitSpriteInvisibility(u8 a, u8 b); //0x33
-void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34
-void EmitResetActionMoveSelection(u8 a, u8 b); //0x36
-void Emitcmd55(u8 a, u8 b); //0x37
+void BtlController_EmitGetMonData(u8 buffID, u8 request, u8 c); //0x0
+void BtlController_EmitGetRawMonData(u8 a, u8 b, u8 c); //0x1
+void BtlController_EmitSetMonData(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
+void BtlController_EmitSwitchInAnim(u8 a, u8 b, u8 c); //0x5
+void BtlController_EmitReturnMonToBall(u8 a, u8 b); //0x6
+void BtlController_EmitTrainerSlide(u8 a); //0x8
+void BtlController_EmitFaintAnimation(u8 a); //0xA
+void BtlController_EmitBallThrowAnim(u8 a, u8 shakes); //0xD
+//void BtlController_EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF
+void BtlController_EmitPrintString(u8 a, u16 stringID); //0x10
+//void BtlController_EmitPrintSelectionString(u8 a, u16 stringID); //0x11
+void BtlController_EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16
+//void BtlController_EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b
+//void BtlController_EmitExpUpdate(u8 a, u8 b, u16 c); //0x19
+void BtlController_EmitStatusIconUpdate(u8 a, u32 b, u32 c); //0x1A
+void BtlController_EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B
+void BtlController_EmitStatusXor(u8 a, u8 b); //0x1C
+void BtlController_EmitHitAnimation(u8 a); //0x29
+void BtlController_EmitPlaySE(u8 a, u16 sound); //0x2B
+void BtlController_EmitPlayFanfareOrBGM(u8 a, u16 sound); //0x2C
+void BtlController_EmitFaintingCry(u8 a); //0x2D
+void BtlController_EmitIntroSlide(u8 a, u8 b); //0x2E
+void BtlController_EmitHidePartyStatusSummary(u8 a); //0x31
+void BtlController_EmitSpriteInvisibility(u8 a, u8 b); //0x33
+void BtlController_EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34
+void BtlController_EmitResetActionMoveSelection(u8 a, u8 b); //0x36
+void BtlController_EmitCmd55(u8 a, u8 b); //0x37
#define REQUEST_ALL_BATTLE 0x0
#define REQUEST_SPECIES_BATTLE 0x1
@@ -745,7 +692,7 @@ void Emitcmd55(u8 a, u8 b); //0x37
#define REQUEST_STATUS_BATTLE 0x28
#define REQUEST_HP_BATTLE 0x2A
-void MarkBufferBankForExecution(u8 bank);
+void MarkBattlerForControllerExec(u8 bank);
extern u8 gBattleTextBuff1[];
@@ -776,12 +723,12 @@ void ApplyPlayerChosenFrameToBattleMenu();
void DrawMainBattleBackground(void);
void LoadBattleTextboxAndBackground();
void sub_800DE30(u8);
-void LoadBattleEntryBackground();
+void DrawBattleEntryBackground();
// src/battle_2.o
-void sub_800E7C4(void);
-void InitBattle(void);
-void sub_800EC9C(void);
+void CB2_InitBattle(void);
+void CB2_InitBattleInternal(void);
+void CB2_HandleStartBattle(void);
void sub_800F104(void);
void sub_800F298(void);
void BattleMainCB2(void);
@@ -803,7 +750,7 @@ void nullsub_86(struct Sprite *);
void objc_dp11b_pingpong(struct Sprite *);
void nullsub_41(void);
void sub_8010800(void);
-void sub_8010824(void);
+void BattleMainCB1(void);
void sub_8010874(void);
void bc_8012FAC(void);
void sub_8011384(void);