resolve some Emerald differences

This commit is contained in:
camthesaxman 2019-07-29 20:44:18 -05:00
parent b8393b3a79
commit db4af549fd
64 changed files with 3972 additions and 3863 deletions

View File

@ -765,7 +765,7 @@ BattleScript_AlreadyPoisoned: @ 81D7455
goto BattleScript_MoveEnd
BattleScript_ImmunityProtected: @ 81D7463
copybyte gEffectBank, gBankTarget
copybyte gEffectBattler, gBattlerTarget
setbyte cMULTISTRING_CHOOSER, 0
call BattleScript_PSNPrevention
goto BattleScript_MoveEnd
@ -1086,7 +1086,7 @@ BattleScript_AlreadyParalyzed: @ 81D784B
goto BattleScript_MoveEnd
BattleScript_LimberProtected: @ 81D7859
copybyte gEffectBank, gBankTarget
copybyte gEffectBattler, gBattlerTarget
setbyte cMULTISTRING_CHOOSER, 0
call BattleScript_PRLZPrevention
goto BattleScript_MoveEnd
@ -1557,7 +1557,7 @@ BattleScript_EffectCurse: @ 81D7D3B
jumpifstat USER, EQUAL, DEFENSE, 12, BattleScript_ButItFailed
BattleScript_CurseTrySpeed: @ 81D7D60
copybyte gBankTarget, gBankAttacker
copybyte gBattlerTarget, gBattlerAttacker
setbyte sANIM_TURN, 1
attackanimation
waitanimation
@ -1582,7 +1582,7 @@ BattleScript_CurseEnd: @ 81D7DAE
goto BattleScript_MoveEnd
BattleScript_GhostCurse: @ 81D7DB3
jumpifbytenotequal gBankAttacker, gBankTarget, BattleScript_DoGhostCurse
jumpifbytenotequal gBattlerAttacker, gBattlerTarget, BattleScript_DoGhostCurse
getmovetarget USER
BattleScript_DoGhostCurse: @ 81D7DC4
@ -2291,7 +2291,7 @@ BattleScript_EffectWillOWisp: @ 81D850F
goto BattleScript_MoveEnd
BattleScript_WaterVeilPrevents: @ 81D855B
copybyte gEffectBank, gBankTarget
copybyte gEffectBattler, gBattlerTarget
setbyte cMULTISTRING_CHOOSER, 0
call BattleScript_BRNPrevention
goto BattleScript_MoveEnd
@ -2680,12 +2680,12 @@ BattleScript_EffectTeeterDance: @ 81D8929
attackcanceler
attackstring
ppreduce
setbyte gBankTarget, 0
setbyte gBattlerTarget, 0
BattleScript_TeeterDanceLoop: @ 81D8932
movevaluescleanup
setmoveeffect EFFECT_CONFUSION
jumpifbyteequal gBankAttacker, gBankTarget, BattleScript_TeeterDanceDoMoveEndIncrement
jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_TeeterDanceDoMoveEndIncrement
jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceLoopIncrement
jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_TeeterDanceSubstitutePrevents
jumpifstatus2 TARGET, STATUS2_CONFUSION, BattleScript_TeeterDanceAlreadyConfused
@ -2700,8 +2700,8 @@ BattleScript_TeeterDanceLoop: @ 81D8932
BattleScript_TeeterDanceDoMoveEndIncrement: @ 81D8978
setbyte sMOVEEND_STATE, 0
moveend 2, 16
addbyte gBankTarget, 1
jumpifbytenotequal gBankTarget, gBattlersCount, BattleScript_TeeterDanceLoop
addbyte gBattlerTarget, 1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TeeterDanceLoop
end
BattleScript_TeeterDanceLoopIncrement: @ 81D8996
@ -3248,7 +3248,7 @@ BattleScript_DamagingWeatherContinues:: @ 81D8F7D
setbyte gBattleCommunication, 0
BattleScript_DamagingWeatherLoop: @ 81D8F95
copyarraywithindex gBankAttacker, gBanksByTurnOrder, gBattleCommunication, 1
copyarraywithindex gBattlerAttacker, gBanksByTurnOrder, gBattleCommunication, 1
weatherdamage
jumpifword EQUAL, gBattleMoveDamage, 0x0, BattleScript_DamagingWeatherLoopIncrement
printfromtable gSandStormHailDmgStringIds
@ -4064,7 +4064,7 @@ BattleScript_1D9792: @ 81D9792
pause 32
gUnknown_081D9795:: @ 81D9795
setbyte gBankTarget, 0
setbyte gBattlerTarget, 0
setstatchanger ATTACK, 1, TRUE
BattleScript_1D97A1: @ 81D97A1
@ -4081,7 +4081,7 @@ BattleScript_1D97A1: @ 81D97A1
waitmessage 64
BattleScript_1D97E4: @ 81D97E4
addbyte gBankTarget, 1
addbyte gBattlerTarget, 1
goto BattleScript_1D97A1
BattleScript_1D97EF: @ 81D97EF

View File

@ -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
{
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,
/*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
{
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);

View File

@ -1,6 +1,8 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
#define TEXT_BUFF_ARRAY_COUNT 16
struct StringInfoBattle
{
u16 currentMove;
@ -154,7 +156,7 @@ struct StringInfoBattle
}
void BufferStringBattle(u16 stringID);
u32 StrCpyDecodeToDisplayedStringBattle(const u8* src);
u32 StrCpyDecodeBattle(const u8* src, u8* dst);
u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src);
u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
#endif // GUARD_BATTLE_MESSAGE_H

View File

@ -43,97 +43,6 @@
#define BIT_SIDE 1
#define BIT_FLANK 2
#define STATUS_SLEEP 0x7
#define STATUS_POISON 0x8
#define STATUS_BURN 0x10
#define STATUS_FREEZE 0x20
#define STATUS_PARALYSIS 0x40
#define STATUS_TOXIC_POISON 0x80
#define STATUS_TOXIC_COUNTER 0xF00
#define STATUS_PSN_ANY ((STATUS_POISON | STATUS_TOXIC_POISON))
#define STATUS_ANY ((STATUS_SLEEP | STATUS_POISON | STATUS_BURN | STATUS_FREEZE | STATUS_PARALYSIS | STATUS_TOXIC_POISON))
#define STATUS2_CONFUSION 0x00000007
#define STATUS2_FLINCHED 0x00000008
#define STATUS2_UPROAR 0x00000070
#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
#define STATUS2_LOCK_CONFUSE 0x00000C00
#define STATUS2_MULTIPLETURNS 0x00001000
#define STATUS2_WRAPPED 0x0000E000
#define STATUS2_INFATUATION 0x000F0000
#define STATUS2_FOCUS_ENERGY 0x00100000
#define STATUS2_TRANSFORMED 0x00200000
#define STATUS2_RECHARGE 0x00400000
#define STATUS2_RAGE 0x00800000
#define STATUS2_SUBSTITUTE 0x01000000
#define STATUS2_DESTINY_BOND 0x02000000
#define STATUS2_ESCAPE_PREVENTION 0x04000000
#define STATUS2_NIGHTMARE 0x08000000
#define STATUS2_CURSED 0x10000000
#define STATUS2_FORESIGHT 0x20000000
#define STATUS2_DEFENSE_CURL 0x40000000
#define STATUS2_TORMENT 0x80000000
#define STATUS3_LEECHSEED_BANK 0x3
#define STATUS3_LEECHSEED 0x4
#define STATUS3_ALWAYS_HITS 0x18 //two bits
#define STATUS3_PERISH_SONG 0x20
#define STATUS3_ON_AIR 0x40
#define STATUS3_UNDERGROUND 0x80
#define STATUS3_MINIMIZED 0x100
#define STATUS3_ROOTED 0x400
#define STATUS3_CHARGED_UP 0x200
#define STATUS3_YAWN 0x1800 //two bits
#define STATUS3_IMPRISIONED 0x2000
#define STATUS3_GRUDGE 0x4000
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
#define STATUS3_MUDSPORT 0x10000
#define STATUS3_WATERSPORT 0x20000
#define STATUS3_UNDERWATER 0x40000
#define STATUS3_INTIMIDATE_POKES 0x80000
#define STATUS3_TRACE 0x100000
#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
#define HITMARKER_x10 0x00000010
#define HITMARKER_x20 0x00000020
#define HITMARKER_DESTINYBOND 0x00000040
#define HITMARKER_NO_ANIMATIONS 0x00000080
#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
#define HITMARKER_NO_ATTACKSTRING 0x00000200
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
#define HITMARKER_NO_PPDEDUCT 0x00000800
#define HITMARKER_PURSUIT_TRAP 0x00001000
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
#define HITMARKER_RUN 0x00008000
#define HITMARKER_IGNORE_ON_AIR 0x00010000
#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
#define HITMARKER_IGNORE_UNDERWATER 0x00040000
#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
#define HITMARKER_x100000 0x00100000
#define HITMARKER_x200000 0x00200000
#define HITMARKER_x400000 0x00400000
#define HITMARKER_x800000 0x00800000
#define HITMARKER_GRUDGE 0x01000000
#define HITMARKER_OBEYS 0x02000000
#define HITMARKER_x4000000 0x04000000
#define HITMARKER_x8000000 0x08000000
#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
#define HITMARKER_UNK(bank) ((0x10000000 << bank))
// Flags describing move's result
#define MOVE_RESULT_MISSED (1 << 0)
#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
#define MOVE_RESULT_FAILED (1 << 5)
#define MOVE_RESULT_FOE_ENDURED (1 << 6)
#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
#define BATTLE_TYPE_DOUBLE 0x0001
#define BATTLE_TYPE_LINK 0x0002
#define BATTLE_TYPE_WILD 0x0004
@ -166,6 +75,93 @@
#define OUTCOME_LINK_BATTLE_RUN 0x80
// Non-volatile status conditions
// These persist remain outside of battle and after switching out
#define STATUS1_NONE 0x0
#define STATUS_SLEEP 0x7
#define STATUS_POISON 0x8
#define STATUS_BURN 0x10
#define STATUS_FREEZE 0x20
#define STATUS_PARALYSIS 0x40
#define STATUS_TOXIC_POISON 0x80
#define STATUS_TOXIC_COUNTER 0xF00
#define STATUS_PSN_ANY ((STATUS_POISON | STATUS_TOXIC_POISON))
#define STATUS_ANY ((STATUS_SLEEP | STATUS_POISON | STATUS_BURN | STATUS_FREEZE | STATUS_PARALYSIS | STATUS_TOXIC_POISON))
// Volatile status ailments
// These are removed after exiting the battle or switching out
#define STATUS2_CONFUSION 0x00000007
#define STATUS2_FLINCHED 0x00000008
#define STATUS2_UPROAR 0x00000070
#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
#define STATUS2_LOCK_CONFUSE 0x00000C00
#define STATUS2_MULTIPLETURNS 0x00001000
#define STATUS2_WRAPPED 0x0000E000
#define STATUS2_INFATUATION 0x000F0000
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
#define STATUS2_FOCUS_ENERGY 0x00100000
#define STATUS2_TRANSFORMED 0x00200000
#define STATUS2_RECHARGE 0x00400000
#define STATUS2_RAGE 0x00800000
#define STATUS2_SUBSTITUTE 0x01000000
#define STATUS2_DESTINY_BOND 0x02000000
#define STATUS2_ESCAPE_PREVENTION 0x04000000
#define STATUS2_NIGHTMARE 0x08000000
#define STATUS2_CURSED 0x10000000
#define STATUS2_FORESIGHT 0x20000000
#define STATUS2_DEFENSE_CURL 0x40000000
#define STATUS2_TORMENT 0x80000000
// Seems like per-battler statuses. Not quite sure how to categorize these
#define STATUS3_LEECHSEED_BANK 0x3
#define STATUS3_LEECHSEED 0x4
#define STATUS3_ALWAYS_HITS 0x18 //two bits
#define STATUS3_PERISH_SONG 0x20
#define STATUS3_ON_AIR 0x40
#define STATUS3_UNDERGROUND 0x80
#define STATUS3_MINIMIZED 0x100
#define STATUS3_ROOTED 0x400
#define STATUS3_CHARGED_UP 0x200
#define STATUS3_YAWN 0x1800 //two bits
#define STATUS3_IMPRISIONED 0x2000
#define STATUS3_GRUDGE 0x4000
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
#define STATUS3_MUDSPORT 0x10000
#define STATUS3_WATERSPORT 0x20000
#define STATUS3_UNDERWATER 0x40000
#define STATUS3_INTIMIDATE_POKES 0x80000
#define STATUS3_TRACE 0x100000
#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
// Not really sure what a "hitmarker" is.
#define HITMARKER_x10 0x00000010
#define HITMARKER_x20 0x00000020
#define HITMARKER_DESTINYBOND 0x00000040
#define HITMARKER_NO_ANIMATIONS 0x00000080
#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
#define HITMARKER_NO_ATTACKSTRING 0x00000200
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
#define HITMARKER_NO_PPDEDUCT 0x00000800
#define HITMARKER_PURSUIT_TRAP 0x00001000
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
#define HITMARKER_RUN 0x00008000
#define HITMARKER_IGNORE_ON_AIR 0x00010000
#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
#define HITMARKER_IGNORE_UNDERWATER 0x00040000
#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
#define HITMARKER_x100000 0x00100000
#define HITMARKER_x200000 0x00200000
#define HITMARKER_x400000 0x00400000
#define HITMARKER_x800000 0x00800000
#define HITMARKER_GRUDGE 0x01000000
#define HITMARKER_OBEYS 0x02000000
#define HITMARKER_x4000000 0x04000000
#define HITMARKER_x8000000 0x08000000
#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
#define HITMARKER_UNK(bank) ((0x10000000 << bank))
// Per-side statuses that affect an entire party
#define SIDE_STATUS_REFLECT (1 << 0)
#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
#define SIDE_STATUS_X4 (1 << 2)
@ -175,21 +171,112 @@
#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
// Flags describing move's result
#define MOVE_RESULT_MISSED (1 << 0)
#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
#define MOVE_RESULT_FAILED (1 << 5)
#define MOVE_RESULT_FOE_ENDURED (1 << 6)
#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
// Battle Weather flags
#define WEATHER_RAIN_TEMPORARY (1 << 0)
#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
#define WEATHER_RAIN_PERMANENT (1 << 2)
#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT)
#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
#define WEATHER_SUN_TEMPORARY (1 << 5)
#define WEATHER_SUN_PERMANENT (1 << 6)
#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
#define WEATHER_HAIL (1 << 7)
#define WEATHER_HAIL_ANY (WEATHER_HAIL)
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
// Move Effects
#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
enum
{
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,
};
#define TARGET_SELECTED_POKEMON 0
#define TARGET_SPECIAL (1 << 0)
@ -239,45 +326,6 @@
#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
#define MAX_TRAINER_ITEMS 4
#define MAX_MON_MOVES 4
// Battle Weather flags
#define WEATHER_RAIN_TEMPORARY (1 << 0)
#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
#define WEATHER_RAIN_PERMANENT (1 << 2)
#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT)
#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
#define WEATHER_SUN_TEMPORARY (1 << 5)
#define WEATHER_SUN_PERMANENT (1 << 6)
#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
#define WEATHER_HAIL (1 << 7)
#define WEATHER_HAIL_ANY (WEATHER_HAIL)
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
#define MOVE_TARGET_SELECTED 0x0
#define MOVE_TARGET_DEPENDS 0x1
#define MOVE_TARGET_USER 0x2
#define MOVE_TARGET_RANDOM 0x4
#define MOVE_TARGET_x10 0x10
#define MOVE_TARGET_BOTH 0x8
#define MOVE_TARGET_FOES_AND_ALLY 0x20
#define MOVE_TARGET_OPPONENTS_FIELD 0x40
// 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 BS_GET_TARGET 0
#define BS_GET_ATTACKER 1
#define BS_GET_EFFECT_BANK 2

View File

@ -195,9 +195,9 @@ extern u8 gSharedMem[];
#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000))
#define ewram17002 (&gSharedMem[0x17002])
#define eFlashFireArr (*(struct Struct2017100 *)(gSharedMem + 0x17100))
#define B_BATTLESCRIPTS_STACK ((struct scriptsStack *) (gSharedMem + 0x17110))
#define B_BATTLESCRIPTS_STACK ((struct BattleScriptsStack *) (gSharedMem + 0x17110))
#define ewram17130 (gSharedMem[0x17130])
#define B_FUNCTION_STACK ((struct funcStack *) (gSharedMem + 0x17140))
#define B_FUNCTION_STACK ((struct BattleCallbacksStack *) (gSharedMem + 0x17140))
#define ewram17160 (gSharedMem[0x17160])
#define ewram17800 ((struct Struct2017800 *) (gSharedMem + 0x17800))
#define ewram17800_2 (&gSharedMem[0x17800])

View File

@ -4,7 +4,7 @@
struct DoorGraphics
{
u16 metatileNum;
u8 unk2;
u8 sound;
const void *tiles;
const void *palette;
};

View File

@ -87,6 +87,29 @@ struct OamData
#define ST_OAM_H_RECTANGLE 1
#define ST_OAM_V_RECTANGLE 2
#define ST_OAM_SIZE_0 0
#define ST_OAM_SIZE_1 1
#define ST_OAM_SIZE_2 2
#define ST_OAM_SIZE_3 3
#define SPRITE_SIZE_8x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_16x16 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_32x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_64x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_SQUARE))
#define SPRITE_SIZE_16x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_32x8 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_32x16 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_64x32 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_H_RECTANGLE))
#define SPRITE_SIZE_8x16 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_8x32 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03)
#define SPRITE_SHAPE(dim) (SPRITE_SIZE_##dim & 0x03)
struct BgAffineSrcData
{
s32 texX;

View File

@ -68,7 +68,7 @@ struct LinkPlayer
/* 0x08 */ u8 name[11];
/* 0x13 */ u8 gender;
/* 0x14 */ u32 linkType;
/* 0x18 */ u16 lp_field_18;
/* 0x18 */ u16 id;
/* 0x1A */ u16 language;
};

View File

@ -10,64 +10,64 @@ struct HpAndStatus
struct DisableStruct;
void sub_800B858(void);
void setup_poochyena_battle();
void SetUpBattleVarsAndBirchPoochyena();
void sub_800B950(void);
void sub_800B9A8(void);
void sub_800BA78(void);
void sub_800BD54(void);
void sub_800BF28(void);
void CreateTasksForSendRecvLinkBuffers(void);
void PrepareBufferDataTransferLink(u8 a, u16, u8 *c);
void sub_800C1A8(u8);
void Task_HandleSendLinkBuffersData(u8);
void sub_800C35C(void);
void sub_800C47C(u8);
void EmitGetAttributes(u8 a, u8 b, u8 c);
void Emitcmd1(u8 a, u8 b, u8 c);
void EmitLoadPokeSprite(u8 a);
void EmitSendOutPoke(u8, u8, u8);
void EmitReturnPokeToBall(u8 a, u8 b);
void EmitTrainerThrow(u8 a);
void EmitTrainerSlide(u8 a);
void EmitTrainerSlideBack(u8 a);
void Emitcmd10(u8 a);
void Emitcmd11(u8 a);
void Emitcmd12(u8 a);
void EmitBallThrow(u8 a, u8 b);
void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g);
void EmitPrintString(u8 a, u16 b);
void EmitPrintStringPlayerOnly(u8 a, u16 stringID);
void Emitcmd18(u8 a, u8 b, u16 c);
void Emitcmd20(u8 a, u8 b, u8 c, u8 *d);
void EmitOpenBag(u8 a, u8 *b);
void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e);
void Emitcmd23(u8 a);
void EmitHealthBarUpdate(u8 a, u16 b);
void EmitExpBarUpdate(u8 a, u8 b, u16 c);
void EmitStatusIconUpdate(u8 a, u32 b, u32 c);
void EmitStatusAnimation(u8 a, u8 b, u32 c);
void EmitStatusXor(u8 a, u8 b);
void Emitcmd29(u8, u16, u8 *);
void Emitcmd33(u8 a, u8 b, u16 c);
void Emitcmd34(u8 a, u8 b, u8 *c);
void Emitcmd35(u8 a, u16 b);
void Emitcmd36(u8 a, u16 b);
void Emitcmd37(u8 a);
void Emitcmd38(u8 a, u8 b);
void Emitcmd39(u8 a);
void Emitcmd40(u8 a);
void EmitHitAnimation(u8 a);
void Emitcmd42(u8 a);
void EmitEffectivenessSound(u8 a, u16 b);
void Emitcmd44(u8 a, u16 b);
void EmitFaintingCry(u8 a);
void EmitIntroSlide(u8 a, u8 b);
void EmitTrainerBallThrow(u8 a);
void EmitDrawPartyStatusSummary(u8 a, struct HpAndStatus *hpAndStatus, u8 c); //0x30
void Emitcmd49(u8 a);
void Emitcmd50(u8 a);
void EmitSpriteInvisibility(u8 a, u8 b);
void EmitBattleAnimation(u8 a, u8 b, u16 c);
void EmitLinkStandbyMsg(u8 a, u8 b);
void EmitResetActionMoveSelection(u8 a, u8 b);
void Emitcmd55(u8 a, u8 b);
void Task_HandleCopyReceivedLinkBuffersData(u8);
void BtlController_EmitGetMonData(u8 a, u8 b, u8 c);
void BtlController_EmitGetRawMonData(u8 a, u8 b, u8 c);
void BtlController_EmitLoadMonSprite(u8 a);
void BtlController_EmitSwitchInAnim(u8, u8, u8);
void BtlController_EmitReturnMonToBall(u8 a, u8 b);
void BtlController_EmitDrawTrainerPic(u8 a);
void BtlController_EmitTrainerSlide(u8 a);
void BtlController_EmitTrainerSlideBack(u8 a);
void BtlController_EmitFaintAnimation(u8 a);
void BtlController_EmitPaletteFade(u8 a);
void BtlController_EmitSuccessBallThrowAnim(u8 a);
void BtlController_EmitBallThrowAnim(u8 a, u8 b);
void BtlController_EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g);
void BtlController_EmitPrintString(u8 a, u16 b);
void BtlController_EmitPrintSelectionString(u8 a, u16 stringID);
void BtlController_EmitChooseAction(u8 a, u8 b, u16 c);
void BtlController_EmitChooseMove(u8 a, u8 b, u8 c, u8 *d);
void BtlController_EmitChooseItem(u8 a, u8 *b);
void BtlController_EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e);
void BtlController_EmitCmd23(u8 a);
void BtlController_EmitHealthBarUpdate(u8 a, u16 b);
void BtlController_EmitExpUpdate(u8 a, u8 b, u16 c);
void BtlController_EmitStatusIconUpdate(u8 a, u32 b, u32 c);
void BtlController_EmitStatusAnimation(u8 a, u8 b, u32 c);
void BtlController_EmitStatusXor(u8 a, u8 b);
void BtlController_EmitDataTransfer(u8, u16, u8 *);
void BtlController_EmitTwoReturnValues(u8 a, u8 b, u16 c);
void BtlController_EmitChosenMonReturnValue(u8 a, u8 b, u8 *c);
void BtlController_EmitOneReturnValue(u8 a, u16 b);
void BtlController_EmitOneReturnValue_Duplicate(u8 a, u16 b);
void BtlController_EmitCmd37(u8 a);
void BtlController_EmitCmd38(u8 a, u8 b);
void BtlController_EmitCmd39(u8 a);
void BtlController_EmitCmd40(u8 a);
void BtlController_EmitHitAnimation(u8 a);
void BtlController_EmitCmd42(u8 a);
void BtlController_EmitPlaySE(u8 a, u16 b);
void BtlController_EmitPlayFanfareOrBGM(u8 a, u16 b);
void BtlController_EmitFaintingCry(u8 a);
void BtlController_EmitIntroSlide(u8 a, u8 b);
void BtlController_EmitIntroTrainerBallThrow(u8 a);
void BtlController_EmitDrawPartyStatusSummary(u8 a, struct HpAndStatus *hpAndStatus, u8 c); //0x30
void BtlController_EmitHidePartyStatusSummary(u8 a);
void BtlController_EmitEndBounceEffect(u8 a);
void BtlController_EmitSpriteInvisibility(u8 a, u8 b);
void BtlController_EmitBattleAnimation(u8 a, u8 b, u16 c);
void BtlController_EmitLinkStandbyMsg(u8 a, u8 b);
void BtlController_EmitResetActionMoveSelection(u8 a, u8 b);
void BtlController_EmitCmd55(u8 a, u8 b);
#endif // GUARD_ROM3_H

View File

@ -21,6 +21,7 @@ SECTIONS {
{
/* .bss starts at 0x3000000 */
INCLUDE "sym_bss.ld"
*(.bss);
/* .bss.code starts at 0x3000F60 */
src/libs/m4a.o(.bss.code);
@ -28,6 +29,7 @@ SECTIONS {
/* COMMON starts at 0x3001760 */
INCLUDE "sym_common.ld"
*libc.a:sbrkr.o(COMMON);
*(COMMON);
end = .;
. = 0x8000;
}

View File

@ -14,7 +14,7 @@
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
extern u16 gBattle_BG2_X;
@ -233,7 +233,7 @@ static void sub_80DFC9C(u8 taskId)
gTasks[taskId].data[2] = 0;
if (r2 == 16)
{
gSprites[gBankSpriteIds[gBattleAnimAttacker]].invisible = 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = 1;
DestroyAnimVisualTask(taskId);
}
}
@ -957,12 +957,12 @@ void sub_80E0918(u8 taskId)
{
u8 toBG2 = GetBattlerPosition_permutated(gBattleAnimAttacker) ^ 1 ? 1 : 0;
MoveBattlerSpriteToBG(gBattleAnimAttacker, toBG2);
gSprites[gBankSpriteIds[gBattleAnimAttacker]].invisible = 0;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = 0;
if (IsAnimBankSpriteVisible(gBattleAnimAttacker ^ 2))
{
MoveBattlerSpriteToBG(gBattleAnimAttacker ^ 2, toBG2 ^ 1);
gSprites[gBankSpriteIds[gBattleAnimAttacker ^ 2]].invisible = 0;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].invisible = 0;
}
DestroyAnimVisualTask(taskId);
@ -1015,7 +1015,7 @@ void sub_80E0A4C(u8 taskId)
{
if (IsAnimBankSpriteVisible(gBattleAnimAttacker ^ 2) == TRUE)
{
gSprites[gBankSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority--;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority--;
REG_BG1CNT_BITFIELD.priority = 1;
var0 = 1;
}
@ -1101,7 +1101,7 @@ static void sub_80E0CD0(u8 taskId)
if (gTasks[taskIdCopy].data[6] == 1)
{
gSprites[gBankSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority++;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority++;
}
DestroyAnimVisualTask(taskIdCopy);
@ -1149,7 +1149,7 @@ void sub_80E0E24(u8 taskId)
{
bank = GetBattlerAtPosition(identity);
if (IsAnimBankSpriteVisible(bank))
spriteId = gBankSpriteIds[bank];
spriteId = gBattlerSpriteIds[bank];
else
spriteId = 0xFF;
}

View File

@ -8,11 +8,11 @@
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBankAttacker;
extern u8 gBattlerAttacker;
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
extern u16 gUnknown_03000730[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
void sub_80DF5A0(struct Sprite *sprite);
void sub_80DF760(struct Sprite *sprite);
@ -286,8 +286,8 @@ void sub_80DF78C(struct Sprite *sprite)
sprite->data[4] = 0;
sprite->data[5] = 1;
sprite->data[6] = gBattleAnimArgs[0];
r5 = GetBattlerSpriteCoordAttr(gBankAttacker, 0);
r0 = GetBattlerSpriteCoordAttr(gBankAttacker, 1);
r5 = GetBattlerSpriteCoordAttr(gBattlerAttacker, 0);
r0 = GetBattlerSpriteCoordAttr(gBattlerAttacker, 1);
if (r5 > r0)
sprite->data[7] = r5 / 2;
else

View File

@ -8,10 +8,10 @@
#include "constants/battle.h"
extern s16 gBattleAnimArgs[];
extern u8 gBankAttacker;
extern u8 gBattlerAttacker;
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u8 gBanksBySide[];
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
@ -817,8 +817,8 @@ void sub_80D97CC(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBankAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBankAttacker, 3);
sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
sprite->data[7] = gBattleAnimTarget;
}
@ -919,8 +919,8 @@ void sub_80D9A38(struct Sprite *sprite)
if (gBattleAnimArgs[0] == 0)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBankAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBankAttacker, 3);
sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
bank = gBattleAnimTarget;
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
}

View File

@ -11,7 +11,7 @@
#include "constants/songs.h"
extern s16 gBattleAnimArgs[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gUnknown_0202F7D2;
@ -1301,7 +1301,7 @@ static void sub_80DF3D8(struct Sprite *sprite)
static void sub_80DF49C(struct Sprite *sprite)
{
sprite->invisible = 1;
sprite->data[5] = gBankSpriteIds[gBattleAnimAttacker];
sprite->data[5] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[0] = 128;
sprite->data[1] = 10;
sprite->data[2] = gBattleAnimArgs[0];

View File

@ -17,7 +17,7 @@ extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
extern u16 gAnimMovePower;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
static void AnimBonemerangProjectile(struct Sprite *sprite);
static void AnimBonemerangProjectileStep(struct Sprite *sprite);
@ -593,7 +593,7 @@ void sub_80E1864(u8 taskId)
{
if (IsAnimBankSpriteVisible(i))
{
task->data[task->data[13] + 9] = gBankSpriteIds[i];
task->data[task->data[13] + 9] = gBattlerSpriteIds[i];
task->data[13]++;
}
}

View File

@ -15,7 +15,7 @@ extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gAnimVisualTaskCount;
extern u8 gBanksBySide[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;

View File

@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
void sub_80CD774(struct Sprite* sprite);
void sub_80CD9C4(struct Sprite* sprite);
@ -73,7 +73,7 @@ static void sub_80CD7CC(struct Sprite* sprite)
sprite->data[0] = 6;
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2;
sprite->data[2] = 0;
sprite->data[3] = gBankSpriteIds[gBattleAnimAttacker];
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
StoreSpriteCallbackInData(sprite, sub_80CD81C);
sprite->callback = TranslateMonBGUntil;
}
@ -82,7 +82,7 @@ static void sub_80CD81C(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
sprite->data[3] = gBankSpriteIds[gBattleAnimAttacker];
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
PrepareBattlerSpriteForRotScale(sprite->data[3], 0);
sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00;
sprite->data[5] = 0;
@ -103,7 +103,7 @@ static void sub_80CD8A8(struct Sprite* sprite)
sprite->data[0] = 4;
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3;
sprite->data[2] = 0;
sprite->data[3] = gBankSpriteIds[gBattleAnimAttacker];
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
StoreSpriteCallbackInData(sprite, sub_80CD9B8);
sprite->callback = TranslateMonBGUntil;
}
@ -121,7 +121,7 @@ static void sub_80CD91C(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
sprite->data[3] = gBankSpriteIds[gBattleAnimAttacker];
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[6] = GetBattlerSide(gBattleAnimAttacker);
if (GetBattlerSide(gBattleAnimAttacker))
{
@ -162,7 +162,7 @@ static void sub_80CD9D4(struct Sprite* sprite)
{
case 0:
sprite->data[1] = 0;
sprite->data[2] = gBankSpriteIds[gBattleAnimAttacker];
sprite->data[2] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[3] = GetBattlerSide(gBattleAnimAttacker);
sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200;
sprite->data[5] = 0;
@ -196,7 +196,7 @@ void sub_80CDAC8(u8 taskId)
{
u8 a;
gTasks[taskId].data[0] = gBankSpriteIds[gBattleAnimAttacker];
gTasks[taskId].data[0] = gBattlerSpriteIds[gBattleAnimAttacker];
a = GetBattlerSide(gBattleAnimAttacker);
gTasks[taskId].data[1] = a;
gTasks[taskId].data[2] = 0;

View File

@ -16,14 +16,14 @@
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
extern u8 gBattlersCount;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u8 gBattleTerrain;
extern u16 gBattlerPartyIndexes[];
extern u8 gBankTarget;
extern u8 gEffectBank;
extern u8 gBankAttacker;
extern u8 gBattlerTarget;
extern u8 gEffectBattler;
extern u8 gBattlerAttacker;
extern u8 gAnimVisualTaskCount;
extern const u8 gUnknown_08D20A14[];
@ -702,7 +702,7 @@ void unref_sub_80E23A8(u8 taskId)
if (gTasks[taskId].data[2] & 0x1)
{
paletteIndex = IndexOfSpritePaletteTag(gSprites[gHealthboxIDs[attackerBattler]].template->paletteTag);
paletteIndex = IndexOfSpritePaletteTag(gSprites[gHealthboxSpriteIds[attackerBattler]].template->paletteTag);
selectedPalettes |= ((1 << paletteIndex) << 16);
}
@ -781,7 +781,7 @@ static void sub_80E255C(struct Sprite *sprite)
if (var0 < 2)
{
for (i = 0; i < gBattlersCount; i++)
gSprites[gBankSpriteIds[i]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = 0;
}
DestroyAnimSprite(sprite);
@ -790,20 +790,20 @@ static void sub_80E255C(struct Sprite *sprite)
static void sub_80E260C(void)
{
gSprites[gBankSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0;
gSprites[gBankSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0;
if (gBattleAnimArgs[4] == 2)
{
gSprites[gBankSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBankSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
}
else
{
if (gBattleAnimArgs[4] == 0)
gSprites[gBankSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
else
gSprites[gBankSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
}
}
@ -1206,7 +1206,7 @@ void sub_80E2F2C(u8 taskId)
{
if (IsAnimBankSpriteVisible(gBattleAnimAttacker ^ 2) == TRUE)
{
gSprites[gBankSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority -= 1;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority -= 1;
REG_BG1CNT_BITFIELD.priority = 1;
var0 = 1;
}
@ -1275,7 +1275,7 @@ static void sub_80E3194(u8 taskId)
sub_8078914(&subStruct);
DmaFill32Defvars(3, 0, subStruct.field_4, 0x800);
if (gTasks[taskId].data[6] == 1)
gSprites[gBankSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority++;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].oam.priority++;
REG_BG1CNT_BITFIELD.areaOverflowMode = 0;
do {} while(0); // needed to match. perhaps part of a debug macro
@ -1343,7 +1343,7 @@ static void sub_80E3338(u8 taskId)
{
if (IsAnimBankSpriteVisible(battler2) == TRUE)
{
gSprites[gBankSpriteIds[battler2]].oam.priority -= 1;
gSprites[gBattlerSpriteIds[battler2]].oam.priority -= 1;
REG_BG1CNT_BITFIELD.priority = 1;
var0 = 1;
}
@ -1362,9 +1362,9 @@ static void sub_80E3338(u8 taskId)
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
}
spriteId = sub_807A4A0(battler1, gBankSpriteIds[battler1], species);
spriteId = sub_807A4A0(battler1, gBattlerSpriteIds[battler1], species);
if (taskData[3])
spriteId2 = sub_807A4A0(battler2, gBankSpriteIds[battler2], species);
spriteId2 = sub_807A4A0(battler2, gBattlerSpriteIds[battler2], species);
sub_8078914(&subStruct);
if (taskData[0] == 0)
@ -1422,7 +1422,7 @@ static void sub_80E3338(u8 taskId)
gTasks[taskId].data[2] = taskData[3];
gTasks[taskId].data[3] = spriteId2;
gTasks[taskId].data[6] = var0;
gTasks[taskId].data[7] = gBankSpriteIds[battler2];
gTasks[taskId].data[7] = gBattlerSpriteIds[battler2];
gTasks[taskId].func = sub_80E3704;
if (taskData[0] == 0)
@ -1648,7 +1648,7 @@ void sub_80E3BDC(u8 taskId)
for (i = 0; i < 4; i++)
{
if (i != gBattleAnimAttacker && IsAnimBankSpriteVisible(i))
gSprites[gBankSpriteIds[i]].invisible = gBattleAnimArgs[0];
gSprites[gBattlerSpriteIds[i]].invisible = gBattleAnimArgs[0];
}
DestroyAnimVisualTask(taskId);
@ -1692,9 +1692,9 @@ void sub_80E3C4C(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5,
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
}
spriteId = sub_807A4A0(battler1, gBankSpriteIds[battler1], species);
spriteId = sub_807A4A0(battler1, gBattlerSpriteIds[battler1], species);
if (arg4)
spriteId2 = sub_807A4A0(battler2, gBankSpriteIds[battler2], species);
spriteId2 = sub_807A4A0(battler2, gBattlerSpriteIds[battler2], species);
sub_8078914(&subStruct);
LZDecompressVram(arg9, subStruct.field_4);
@ -1884,8 +1884,8 @@ void sub_80E4200(u8 taskId)
void sub_80E4234(u8 taskId)
{
gBattleAnimAttacker = gBankTarget;
gBattleAnimTarget = gEffectBank;
gBattleAnimAttacker = gBattlerTarget;
gBattleAnimTarget = gEffectBattler;
DestroyAnimVisualTask(taskId);
}
@ -1901,14 +1901,14 @@ void sub_80E4264(u8 taskId)
void sub_80E42B0(u8 taskId)
{
gBattleAnimTarget = gBankTarget;
gBattleAnimTarget = gBattlerTarget;
DestroyAnimVisualTask(taskId);
}
void sub_80E42D0(u8 taskId)
{
gBattleAnimAttacker = gBankAttacker;
gBattleAnimTarget = gEffectBank;
gBattleAnimAttacker = gBattlerAttacker;
gBattleAnimTarget = gEffectBattler;
DestroyAnimVisualTask(taskId);
}

View File

@ -14,7 +14,7 @@ extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG2_X;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
void sub_80DB74C(struct Sprite *sprite);
void sub_80DBA4C(struct Sprite *sprite);
@ -524,11 +524,11 @@ static void sub_80DB92C(struct Sprite *sprite)
u8 bank = bankCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
if (IsAnimBankSpriteVisible(bank))
gSprites[gBankSpriteIds[bank]].invisible = 0;
gSprites[gBattlerSpriteIds[bank]].invisible = 0;
bank = bankCopy ^ 2;
if (IsAnimBankSpriteVisible(bank))
gSprites[gBankSpriteIds[bank]].invisible = 0;
gSprites[gBattlerSpriteIds[bank]].invisible = 0;
}
sprite->invisible = 1;

View File

@ -10,7 +10,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
void sub_80D0FD8(struct Sprite* sprite);
void sub_80D10B8(struct Sprite* sprite);
@ -284,23 +284,23 @@ void sub_80D10B8(struct Sprite* sprite)
{
r9 = GetBattlerSpriteCoord(bankr7, r10) + gBattleAnimArgs[0];
if (IsAnimBankSpriteVisible(bankr8 ^ 2))
sprite->subpriority = gSprites[gBankSpriteIds[bankr8 ^ 2]].subpriority - 1;
sprite->subpriority = gSprites[gBattlerSpriteIds[bankr8 ^ 2]].subpriority - 1;
else
sprite->subpriority = gSprites[gBankSpriteIds[bankr8]].subpriority - 1;
sprite->subpriority = gSprites[gBattlerSpriteIds[bankr8]].subpriority - 1;
}
else
{
r9 = GetBattlerSpriteCoord(bankr7, r10) - gBattleAnimArgs[0];
if (gMain.inBattle && IsAnimBankSpriteVisible(bankr7 ^ 2))
{
if (gSprites[gBankSpriteIds[bankr7]].pos1.x < gSprites[gBankSpriteIds[bankr7 ^ 2]].pos1.x)
sprite->subpriority = gSprites[gBankSpriteIds[bankr7 ^ 2]].subpriority + 1;
if (gSprites[gBattlerSpriteIds[bankr7]].pos1.x < gSprites[gBattlerSpriteIds[bankr7 ^ 2]].pos1.x)
sprite->subpriority = gSprites[gBattlerSpriteIds[bankr7 ^ 2]].subpriority + 1;
else
sprite->subpriority = gSprites[gBankSpriteIds[bankr7]].subpriority - 1;
sprite->subpriority = gSprites[gBattlerSpriteIds[bankr7]].subpriority - 1;
}
else
{
sprite->subpriority = gSprites[gBankSpriteIds[bankr7]].subpriority - 1;
sprite->subpriority = gSprites[gBattlerSpriteIds[bankr7]].subpriority - 1;
}
}

View File

@ -9,7 +9,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBattlersCount;
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
void sub_80CE09C(struct Sprite* sprite);
void sub_80CE17C(struct Sprite* sprite);
@ -198,10 +198,10 @@ void unref_sub_80CE260(u8 taskId)
for (i = 0; i < gBattlersCount; i++)
{
if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == 0)
sub_8043DB0(gHealthboxIDs[i]);
sub_8043DB0(gHealthboxSpriteIds[i]);
if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == 1)
sub_8043DB0(gHealthboxIDs[i]);
sub_8043DB0(gHealthboxSpriteIds[i]);
}
DestroyAnimVisualTask(taskId);
@ -212,7 +212,7 @@ void unref_sub_80CE2D4(u8 taskId)
u8 i;
for (i = 0; i < gBattlersCount; i++)
{
sub_8043DFC(gHealthboxIDs[i]);
sub_8043DFC(gHealthboxSpriteIds[i]);
}
DestroyAnimVisualTask(taskId);

View File

@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
void sub_80CF3C4(struct Sprite* sprite);
@ -45,7 +45,7 @@ void sub_80CF3C4(struct Sprite* sprite)
u8 a;
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
a = gBankSpriteIds[gBattleAnimTarget];
a = gBattlerSpriteIds[gBattleAnimTarget];
if (GetBattlerSide(gBattleAnimAttacker) != 0)
{
sprite->pos1.x -= gBattleAnimArgs[0];

View File

@ -9,7 +9,7 @@
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimTarget;
extern u8 gBattleAnimAttacker;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
void sub_80D5CC0(struct Sprite *sprite);
static void sub_80D5E4C(u8 taskId);
@ -211,7 +211,7 @@ void sub_80D60B4(u8 taskId)
}
gTasks[taskId].data[0]++;
spriteId = gBankSpriteIds[gBattleAnimTarget];
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
if (!gTasks[taskId].data[4])
unk = gUnknown_083D9794[gTasks[taskId].data[0] % 10];

View File

@ -8,7 +8,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
static void sub_80CF514(u8 taskId);
@ -17,13 +17,13 @@ static void sub_80CF514(u8 taskId);
void sub_80CF4D8(u8 taskId)
{
PrepareBattlerSpriteForRotScale(gBankSpriteIds[gBattleAnimAttacker], 0);
PrepareBattlerSpriteForRotScale(gBattlerSpriteIds[gBattleAnimAttacker], 0);
gTasks[taskId].func = sub_80CF514;
}
void sub_80CF514(u8 taskId)
{
u8 a = gBankSpriteIds[gBattleAnimAttacker];
u8 a = gBattlerSpriteIds[gBattleAnimAttacker];
s16 b;
if (GetBattlerSide(gBattleAnimAttacker) == 0)
{

View File

@ -21,8 +21,8 @@ extern u8 gActiveBattler;
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
extern u16 gCurrentMove;
extern int gBattleMoveDamage;
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gAbsentBattlerFlags;
extern u8 gMoveResultFlags;
extern u16 gDynamicBasePower;
@ -318,17 +318,17 @@ void BattleAI_SetupAIData(void)
// clear AI stack.
AI_STACK->size = 0;
gBankAttacker = gActiveBattler;
gBattlerAttacker = gActiveBattler;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
gBankTarget = Random() & 2; // just pick somebody to target.
gBattlerTarget = Random() & 2; // just pick somebody to target.
if (gAbsentBattlerFlags & gBitTable[gBankTarget])
gBankTarget ^= 2;
if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
gBattlerTarget ^= 2;
}
else
gBankTarget = gActiveBattler ^ 1;
gBattlerTarget = gActiveBattler ^ 1;
// special AI flag cases.
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
@ -407,13 +407,13 @@ void BattleAI_DoAIProcessing(void)
break;
case BATTLEAI_SETTING_UP:
gAIScriptPtr = BattleAIs[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr.
if (gBattleMons[gBankAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0)
if (gBattleMons[gBattlerAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0)
{
AI_THINKING_STRUCT->moveConsidered = MOVE_NONE; // don't consider a move you have 0 PP for, idiot.
}
else
{
AI_THINKING_STRUCT->moveConsidered = gBattleMons[gBankAttacker].moves[AI_THINKING_STRUCT->movesetIndex];
AI_THINKING_STRUCT->moveConsidered = gBattleMons[gBattlerAttacker].moves[AI_THINKING_STRUCT->movesetIndex];
}
AI_THINKING_STRUCT->aiState++;
break;
@ -446,9 +446,9 @@ void sub_810745C(void)
for (i = 0; i < 8; i++)
{
if (AI_BATTLE_HISTORY->usedMoves[gBankTarget >> 1][i] == 0)
if (AI_BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == 0)
{
AI_BATTLE_HISTORY->usedMoves[gBankTarget >> 1][i] = gLastUsedMove[gBankTarget];
AI_BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] = gLastUsedMove[gBattlerTarget];
return;
}
}
@ -521,9 +521,9 @@ static void BattleAICmd_if_hp_less_than(void)
u16 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < gAIScriptPtr[2])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
@ -536,9 +536,9 @@ static void BattleAICmd_if_hp_more_than(void)
u16 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > gAIScriptPtr[2])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
@ -551,9 +551,9 @@ static void BattleAICmd_if_hp_equal(void)
u16 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == gAIScriptPtr[2])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
@ -566,9 +566,9 @@ static void BattleAICmd_if_hp_not_equal(void)
u16 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != gAIScriptPtr[2])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
@ -582,9 +582,9 @@ static void BattleAICmd_if_status(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg = T1_READ_32(gAIScriptPtr + 2);
@ -600,9 +600,9 @@ static void BattleAICmd_if_not_status(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg = T1_READ_32(gAIScriptPtr + 2);
@ -618,9 +618,9 @@ static void BattleAICmd_if_status2(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg = T1_READ_32(gAIScriptPtr + 2);
@ -636,9 +636,9 @@ static void BattleAICmd_if_not_status2(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg = T1_READ_32(gAIScriptPtr + 2);
@ -654,9 +654,9 @@ static void BattleAICmd_if_status3(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg = T1_READ_32(gAIScriptPtr + 2);
@ -672,9 +672,9 @@ static void BattleAICmd_if_not_status3(void)
u32 arg;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg = T1_READ_32(gAIScriptPtr + 2);
@ -690,9 +690,9 @@ static void BattleAICmd_if_status4(void)
u32 arg1, arg2;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg1 = GetBattlerPosition(index) & 1;
arg2 = T1_READ_32(gAIScriptPtr + 2);
@ -709,9 +709,9 @@ static void BattleAICmd_if_not_status4(void)
u32 arg1, arg2;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
arg1 = GetBattlerPosition(index) & 1;
arg2 = T1_READ_32(gAIScriptPtr + 2);
@ -884,8 +884,8 @@ static void BattleAICmd_if_user_can_damage(void)
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (gBattleMons[gBankAttacker].moves[i] != 0
&& gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power != 0)
if (gBattleMons[gBattlerAttacker].moves[i] != 0
&& gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power != 0)
break;
}
if (i == MAX_MON_MOVES)
@ -900,8 +900,8 @@ static void BattleAICmd_if_user_cant_damage(void)
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (gBattleMons[gBankAttacker].moves[i] != 0
&& gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power != 0)
if (gBattleMons[gBattlerAttacker].moves[i] != 0
&& gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power != 0)
break;
}
if (i != MAX_MON_MOVES)
@ -921,16 +921,16 @@ static void BattleAICmd_get_type(void)
switch (gAIScriptPtr[1])
{
case 1: // player primary type
AI_THINKING_STRUCT->funcResult = gBattleMons[gBankAttacker].type1;
AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type1;
break;
case 0: // enemy primary type
AI_THINKING_STRUCT->funcResult = gBattleMons[gBankTarget].type1;
AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type1;
break;
case 3: // player secondary type
AI_THINKING_STRUCT->funcResult = gBattleMons[gBankAttacker].type2;
AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type2;
break;
case 2: // enemy secondary type
AI_THINKING_STRUCT->funcResult = gBattleMons[gBankTarget].type2;
AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type2;
break;
case 4: // type of move being pointed to
AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type;
@ -968,18 +968,18 @@ static void BattleAICmd_is_most_powerful_move(void)
{
for (j = 0; sDiscouragedPowerfulMoveEffects[j] != 0xFFFF; j++)
{ // _08108276
if (gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == sDiscouragedPowerfulMoveEffects[j])
if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sDiscouragedPowerfulMoveEffects[j])
break;
}
// _081082BA
if (gBattleMons[gBankAttacker].moves[i]
if (gBattleMons[gBattlerAttacker].moves[i]
&& sDiscouragedPowerfulMoveEffects[j] == 0xFFFF
&& gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power > 1)
&& gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].power > 1)
{
gCurrentMove = gBattleMons[gBankAttacker].moves[i];
AI_CalcDmg(gBankAttacker, gBankTarget);
TypeCalc(gCurrentMove, gBankAttacker, gBankTarget);
gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
damages[i] = (gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[i]) / 100;
if (damages[i] == 0) // moves always do at least 1 damage.
@ -1085,7 +1085,7 @@ _08108276:\n\
movs r3, 0\n\
ldr r5, _08108348 @ =gBattleMons\n\
lsls r4, r6, 1\n\
ldr r7, _0810834C @ =gBankAttacker\n\
ldr r7, _0810834C @ =gBattlerAttacker\n\
lsls r1, r6, 2\n\
mov r8, r1\n\
adds r2, r6, 0x1\n\
@ -1146,7 +1146,7 @@ _081082BA:\n\
ldr r5, _08108350 @ =gCurrentMove\n\
strh r2, [r5]\n\
ldrb r0, [r7]\n\
ldr r4, _08108354 @ =gBankTarget\n\
ldr r4, _08108354 @ =gBattlerTarget\n\
ldrb r1, [r4]\n\
bl AI_CalcDmg\n\
ldrh r0, [r5]\n\
@ -1180,9 +1180,9 @@ _0810833C: .4byte 0xfffff81c\n\
_08108340: .4byte gMoveResultFlags\n\
_08108344: .4byte gCritMultiplier\n\
_08108348: .4byte gBattleMons\n\
_0810834C: .4byte gBankAttacker\n\
_0810834C: .4byte gBattlerAttacker\n\
_08108350: .4byte gCurrentMove\n\
_08108354: .4byte gBankTarget\n\
_08108354: .4byte gBattlerTarget\n\
_08108358: .4byte gBattleMoveDamage\n\
_0810835C:\n\
mov r1, sp\n\
@ -1256,9 +1256,9 @@ _081083D0: .4byte gAIScriptPtr\n\
static void BattleAICmd_get_move(void)
{
if (gAIScriptPtr[1] == USER)
AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBankAttacker];
AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBattlerAttacker];
else
AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBankTarget];
AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBattlerTarget];
gAIScriptPtr += 2;
}
@ -1281,7 +1281,7 @@ static void BattleAICmd_if_arg_not_equal(void)
static void BattleAICmd_if_would_go_first(void)
{
if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) == gAIScriptPtr[1])
if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) == gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@ -1289,7 +1289,7 @@ static void BattleAICmd_if_would_go_first(void)
static void BattleAICmd_if_would_not_go_first(void)
{
if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) != gAIScriptPtr[1])
if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) != gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
@ -1313,9 +1313,9 @@ static void BattleAICmd_count_alive_pokemon(void)
AI_THINKING_STRUCT->funcResult = 0;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if (GetBattlerSide(index) == 0)
party = gPlayerParty;
@ -1366,9 +1366,9 @@ static void BattleAICmd_get_ability(void)
u8 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if (GetBattlerSide(index) == TARGET)
{
@ -1437,11 +1437,11 @@ static void BattleAICmd_get_highest_possible_damage(void)
for (i = 0; i < MAX_MON_MOVES; i++)
{
gBattleMoveDamage = 40;
gCurrentMove = gBattleMons[gBankAttacker].moves[i];
gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
if (gCurrentMove)
{
TypeCalc(gCurrentMove, gBankAttacker, gBankTarget);
TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
// reduce by 1/3.
if (gBattleMoveDamage == 120)
@ -1476,7 +1476,7 @@ static void BattleAICmd_if_damage_bonus(void)
gBattleMoveDamage = 40;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
TypeCalc(gCurrentMove, gBankAttacker, gBankTarget);
TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
if (gBattleMoveDamage == 120)
gBattleMoveDamage = 80;
@ -1611,9 +1611,9 @@ static void BattleAICmd_if_stat_level_less_than(void)
u32 party;
if (gAIScriptPtr[1] == USER)
party = gBankAttacker;
party = gBattlerAttacker;
else
party = gBankTarget;
party = gBattlerTarget;
if (gBattleMons[party].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
@ -1626,9 +1626,9 @@ static void BattleAICmd_if_stat_level_more_than(void)
u32 party;
if (gAIScriptPtr[1] == USER)
party = gBankAttacker;
party = gBattlerAttacker;
else
party = gBankTarget;
party = gBattlerTarget;
if (gBattleMons[party].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
@ -1641,9 +1641,9 @@ static void BattleAICmd_if_stat_level_equal(void)
u32 party;
if (gAIScriptPtr[1] == USER)
party = gBankAttacker;
party = gBattlerAttacker;
else
party = gBankTarget;
party = gBattlerTarget;
if (gBattleMons[party].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
@ -1656,9 +1656,9 @@ static void BattleAICmd_if_stat_level_not_equal(void)
u32 party;
if (gAIScriptPtr[1] == USER)
party = gBankAttacker;
party = gBattlerAttacker;
else
party = gBankTarget;
party = gBattlerTarget;
if (gBattleMons[party].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
@ -1680,8 +1680,8 @@ static void BattleAICmd_if_can_faint(void)
gMoveResultFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
AI_CalcDmg(gBankAttacker, gBankTarget);
TypeCalc(gCurrentMove, gBankAttacker, gBankTarget);
AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
@ -1689,7 +1689,7 @@ static void BattleAICmd_if_can_faint(void)
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[gBankTarget].hp <= gBattleMoveDamage)
if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
@ -1709,14 +1709,14 @@ static void BattleAICmd_if_cant_faint(void)
gMoveResultFlags = 0;
gCritMultiplier = 1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
AI_CalcDmg(gBankAttacker, gBankTarget);
TypeCalc(gCurrentMove, gBankAttacker, gBankTarget);
AI_CalcDmg(gBattlerAttacker, gBattlerTarget);
TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
// this macro is missing the damage 0 = 1 assumption.
if (gBattleMons[gBankTarget].hp > gBattleMoveDamage)
if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
@ -1733,7 +1733,7 @@ static void BattleAICmd_if_has_move(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (gBattleMons[gBankAttacker].moves[i] == *temp_ptr)
if (gBattleMons[gBattlerAttacker].moves[i] == *temp_ptr)
break;
}
if (i == MAX_MON_MOVES)
@ -1745,7 +1745,7 @@ static void BattleAICmd_if_has_move(void)
case 2:
for (i = 0; i < 8; i++)
{
if (AI_BATTLE_HISTORY->usedMoves[gBankTarget >> 1][i] == *temp_ptr)
if (AI_BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == *temp_ptr)
break;
}
if (i == 8)
@ -1767,7 +1767,7 @@ static void BattleAICmd_if_dont_have_move(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (gBattleMons[gBankAttacker].moves[i] == *temp_ptr)
if (gBattleMons[gBattlerAttacker].moves[i] == *temp_ptr)
break;
}
if (i != MAX_MON_MOVES)
@ -1779,7 +1779,7 @@ static void BattleAICmd_if_dont_have_move(void)
case 2:
for (i = 0; i < 8; i++)
{
if (AI_BATTLE_HISTORY->usedMoves[gBankTarget >> 1][i] == *temp_ptr)
if (AI_BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] == *temp_ptr)
break;
}
if (i != 8)
@ -1800,7 +1800,7 @@ static void BattleAICmd_if_move_effect(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == gAIScriptPtr[2])
if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2])
break;
}
if (i != MAX_MON_MOVES)
@ -1812,7 +1812,7 @@ static void BattleAICmd_if_move_effect(void)
case 2:
for (i = 0; i < 8; i++)
{
if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[AI_BATTLE_HISTORY->usedMoves[gBankTarget >> 1][i]].effect == gAIScriptPtr[2])
if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[AI_BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2])
break;
}
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
@ -1829,7 +1829,7 @@ static void BattleAICmd_if_not_move_effect(void)
case 3:
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == gAIScriptPtr[2])
if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2])
break;
}
if (i != MAX_MON_MOVES)
@ -1841,7 +1841,7 @@ static void BattleAICmd_if_not_move_effect(void)
case 2:
for (i = 0; i < 8; i++)
{
if (AI_BATTLE_HISTORY->usedMoves[gBankTarget >> 1][i] != 0 && gBattleMoves[AI_BATTLE_HISTORY->usedMoves[gBankTarget >> 1][i]].effect == gAIScriptPtr[2])
if (AI_BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] != 0 && gBattleMoves[AI_BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2])
break;
}
gAIScriptPtr += 7;
@ -1853,9 +1853,9 @@ static void BattleAICmd_if_last_move_did_damage(void)
u8 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if (gAIScriptPtr[2] == 0)
{
@ -1932,9 +1932,9 @@ static void BattleAICmd_get_hold_effect(void)
u16 side;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
if (GetBattlerSide(index) == 0)
{
@ -1952,9 +1952,9 @@ static void BattleAICmd_get_gender(void)
u8 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[index].species, gBattleMons[index].personality);
@ -1966,9 +1966,9 @@ static void BattleAICmd_is_first_turn(void)
u8 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn;
@ -1980,9 +1980,9 @@ static void BattleAICmd_get_stockpile_count(void)
u8 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter;
@ -2001,9 +2001,9 @@ static void BattleAICmd_get_used_item(void)
u8 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
AI_THINKING_STRUCT->funcResult = AI_ARRAY_160CC(index);
@ -2036,9 +2036,9 @@ static void BattleAICmd_get_protect_count(void)
u8 index;
if (gAIScriptPtr[1] == USER)
index = gBankAttacker;
index = gBattlerAttacker;
else
index = gBankTarget;
index = gBattlerTarget;
AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses;
@ -2091,7 +2091,7 @@ static void BattleAICmd_if_level_compare(void)
switch (gAIScriptPtr[1])
{
case 0: // greater than
if (gBattleMons[gBankAttacker].level > gBattleMons[gBankTarget].level)
if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
@ -2099,7 +2099,7 @@ static void BattleAICmd_if_level_compare(void)
gAIScriptPtr += 6;
return;
case 1: // less than
if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level)
if (gBattleMons[gBattlerAttacker].level < gBattleMons[gBattlerTarget].level)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
@ -2107,7 +2107,7 @@ static void BattleAICmd_if_level_compare(void)
gAIScriptPtr += 6;
return;
case 2: // equal
if (gBattleMons[gBankAttacker].level == gBattleMons[gBankTarget].level)
if (gBattleMons[gBattlerAttacker].level == gBattleMons[gBattlerTarget].level)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
@ -2119,7 +2119,7 @@ static void BattleAICmd_if_level_compare(void)
static void BattleAICmd_if_taunted(void)
{
if (gDisableStructs[gBankTarget].tauntTimer1 != 0)
if (gDisableStructs[gBattlerTarget].tauntTimer1 != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
@ -2127,7 +2127,7 @@ static void BattleAICmd_if_taunted(void)
static void BattleAICmd_if_not_taunted(void)
{
if (gDisableStructs[gBankTarget].tauntTimer1 == 0)
if (gDisableStructs[gBattlerTarget].tauntTimer1 == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;

View File

@ -40,7 +40,7 @@ static bool8 ShouldSwitchIfPerishSong(void)
&& gDisableStructs[gActiveBattler].perishSongTimer1 == 0)
{
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = 6; // gBattleStruct->AI_monToSwitchIntoId[GetBattlerPosition(gActiveBattler)] = 6;
Emitcmd33(1, 2, 0);
BtlController_EmitTwoReturnValues(1, 2, 0);
return TRUE;
}
@ -97,7 +97,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
{
// we found a mon
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = i; // gBattleStruct->AI_monToSwitchIntoId[GetBattlerPosition(gActiveBattler)] = i;
Emitcmd33(1, B_ACTION_SWITCH, 0);
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
}
@ -137,7 +137,7 @@ _08036070:\n\
movs r0, 0x1\n\
movs r1, 0x2\n\
movs r2, 0\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
movs r0, 0x1\n\
b _080361CA\n\
.align 2, 0\n\
@ -376,7 +376,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
{
// we found a mon
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = i;
Emitcmd33(1, B_ACTION_SWITCH, 0);
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
}
@ -396,13 +396,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
if ((gLastLandedMoves[gActiveBattler] == 0 || gLastLandedMoves[gActiveBattler] == 0xFFFF) && Random() & 1)
{
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = 6;
Emitcmd33(1, B_ACTION_SWITCH, 0);
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0 && Random() & 1)
{
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = 6;
Emitcmd33(1, B_ACTION_SWITCH, 0);
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
@ -413,7 +413,7 @@ static bool8 ShouldSwitchIfNaturalCure(void)
if (Random() & 1)
{
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = 6;
Emitcmd33(1, B_ACTION_SWITCH, 0);
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
@ -557,7 +557,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % moduloPercent == 0)
{
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = i;
Emitcmd33(1, B_ACTION_SWITCH, 0);
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
}
@ -704,7 +704,7 @@ void AI_TrySwitchOrUseItem(void)
}
}
Emitcmd33(1, B_ACTION_USE_MOVE, (gActiveBattler ^ BIT_SIDE) << 8);
BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, (gActiveBattler ^ BIT_SIDE) << 8);
}
static void ModulateByTypeEffectiveness(u8 attackType, u8 defenseType1, u8 defenseType2, u8 *var)
@ -996,7 +996,7 @@ static bool8 ShouldUseItem(void)
if (shouldUse)
{
Emitcmd33(1, B_ACTION_USE_ITEM, 0);
BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0);
ewram160D4(gActiveBattler) = item;
AI_BATTLE_HISTORY->trainerItems[i] = 0;
return shouldUse;

View File

@ -1283,9 +1283,9 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] =
};
extern u16 gBattlerPartyIndexes[4];
extern u8 gBankSpriteIds[];
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBattlerSpriteIds[];
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
// sBattleAnimScriptPtr is a pointer to the next set of battle script commands.
EWRAM_DATA const u8 *sBattleAnimScriptPtr = NULL;
@ -1464,8 +1464,8 @@ void ClearBattleAnimationVars(void)
void DoMoveAnim(u16 move)
{
gBattleAnimAttacker = gBankAttacker;
gBattleAnimTarget = gBankTarget;
gBattleAnimAttacker = gBattlerAttacker;
gBattleAnimTarget = gBattlerTarget;
LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE);
}
@ -1844,7 +1844,7 @@ static void ScriptCmd_monbg(void)
toBG_2 = 1;
MoveBattlerSpriteToBG(bank, toBG_2);
spriteId = gBankSpriteIds[bank];
spriteId = gBattlerSpriteIds[bank];
taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10);
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
@ -1875,7 +1875,7 @@ static void ScriptCmd_monbg(void)
else
toBG_2 = 1;
MoveBattlerSpriteToBG(bank, toBG_2);
spriteId = gBankSpriteIds[bank];
spriteId = gBattlerSpriteIds[bank];
taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10);
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
@ -1912,7 +1912,7 @@ bool8 IsAnimBankSpriteVisible(u8 bank)
return FALSE;
if (IsContest())
return TRUE; // this line wont ever be reached.
if (!(EWRAM_17800[bank].unk0 & 1) || !gSprites[gBankSpriteIds[bank]].invisible)
if (!(EWRAM_17800[bank].unk0 & 1) || !gSprites[gBattlerSpriteIds[bank]].invisible)
return TRUE;
return FALSE;
@ -1938,12 +1938,12 @@ void MoveBattlerSpriteToBG(u8 bank, u8 toBG_2)
REG_BG1CNT_BITFIELD.screenSize = 1;
REG_BG1CNT_BITFIELD.areaOverflowMode = 0;
spriteId = gBankSpriteIds[bank];
spriteId = gBattlerSpriteIds[bank];
gBattle_BG1_X = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32;
if (IsContest() != 0 && IsSpeciesNotUnown(EWRAM_19348[0]) != 0)
gBattle_BG1_X--;
gBattle_BG1_Y = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32;
gSprites[gBankSpriteIds[bank]].invisible = TRUE;
gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
REG_BG1HOFS = gBattle_BG1_X;
REG_BG1VOFS = gBattle_BG1_Y;
@ -1972,10 +1972,10 @@ void MoveBattlerSpriteToBG(u8 bank, u8 toBG_2)
REG_BG2CNT_BITFIELD.screenSize = 1;
REG_BG2CNT_BITFIELD.areaOverflowMode = 0;
spriteId = gBankSpriteIds[bank];
spriteId = gBattlerSpriteIds[bank];
gBattle_BG2_X = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32;
gBattle_BG2_Y = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32;
gSprites[gBankSpriteIds[bank]].invisible = TRUE;
gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
REG_BG2HOFS = gBattle_BG2_X;
REG_BG2VOFS = gBattle_BG2_Y;
@ -2106,9 +2106,9 @@ static void ScriptCmd_clearmonbg(void)
bank = gBattleAnimTarget;
if (gMonAnimTaskIdArray[0] != 0xFF)
gSprites[gBankSpriteIds[bank]].invisible = FALSE;
gSprites[gBattlerSpriteIds[bank]].invisible = FALSE;
if (animBankId > 1 && gMonAnimTaskIdArray[1] != 0xFF)
gSprites[gBankSpriteIds[bank ^ 2]].invisible = FALSE;
gSprites[gBattlerSpriteIds[bank ^ 2]].invisible = FALSE;
else
animBankId = 0;
@ -2177,7 +2177,7 @@ static void ScriptCmd_monbg_22(void)
else
r1 = 1;
MoveBattlerSpriteToBG(bank, r1);
gSprites[gBankSpriteIds[bank]].invisible = FALSE;
gSprites[gBattlerSpriteIds[bank]].invisible = FALSE;
}
bank ^= 2;
@ -2190,7 +2190,7 @@ static void ScriptCmd_monbg_22(void)
else
r1 = 1;
MoveBattlerSpriteToBG(bank, r1);
gSprites[gBankSpriteIds[bank]].invisible = FALSE;
gSprites[gBattlerSpriteIds[bank]].invisible = FALSE;
}
sBattleAnimScriptPtr++;
}
@ -2215,9 +2215,9 @@ static void ScriptCmd_clearmonbg_23(void)
bank = gBattleAnimTarget;
if (IsAnimBankSpriteVisible(bank))
gSprites[gBankSpriteIds[bank]].invisible = FALSE;
gSprites[gBattlerSpriteIds[bank]].invisible = FALSE;
if (animBankId > 1 && IsAnimBankSpriteVisible(bank ^ 2))
gSprites[gBankSpriteIds[bank ^ 2]].invisible = FALSE;
gSprites[gBattlerSpriteIds[bank ^ 2]].invisible = FALSE;
else
animBankId = 0;

View File

@ -41,7 +41,7 @@ extern const u8 gUnknown_08D2E014[];
extern const u8 gUnknown_08D2E170[];
extern const u16 gUnknown_08D2E150[];
extern u8 gBattleMonForms[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u16 gBattlerPartyIndexes[];
extern u8 sub_8046234(s16 x, s16 y, u8 a3);
@ -2327,11 +2327,11 @@ void sub_812D7E8(u8 taskId)
ptr = EWRAM_19348;
if (IsSpeciesNotUnown(ptr[1]))
gSprites[gBankSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18;
else
gSprites[gBankSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7BEC;
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7BEC;
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[gBattleAnimAttacker]], 0);
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
}
gTasks[taskId].data[0]++;
@ -2371,7 +2371,7 @@ void sub_812D7E8(u8 taskId)
void c3_80DFBE4(u8 taskId)
{
gBattleAnimArgs[7] = gSprites[gBankSpriteIds[gBattleAnimAttacker]].invisible;
gBattleAnimArgs[7] = gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible;
DestroyAnimVisualTask(taskId);
}
@ -3673,7 +3673,7 @@ static void sub_812FAF8(u8 taskId)
void sub_812FC68(u8 taskId)
{
gTasks[taskId].data[15] = gBankSpriteIds[gBattleAnimAttacker];
gTasks[taskId].data[15] = gBattlerSpriteIds[gBattleAnimAttacker];
gTasks[taskId].data[14] = gBattleAnimArgs[0];
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[13] = gBattleAnimArgs[6];
@ -4675,8 +4675,8 @@ void sub_81312E4(u8 taskId)
refresh_graphics_maybe(gBattleAnimAttacker, 0, spriteId);
if (IsContest())
{
gSprites[gBankSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18;
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[gBattleAnimAttacker]], 0);
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18;
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
}
for (i = 0; i < 16; i++)
@ -5801,7 +5801,7 @@ void AnimTask_SnatchPartnerMove(u8 taskId)
gTasks[taskId].data[15]++;
break;
case 1:
spriteId = gBankSpriteIds[gBattleAnimAttacker];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
gSprites[spriteId].pos2.x += gTasks[taskId].data[0];
if (gTasks[taskId].data[0] > 0)
{
@ -5819,7 +5819,7 @@ void AnimTask_SnatchPartnerMove(u8 taskId)
gTasks[taskId].data[15]++;
break;
case 3:
spriteId = gBankSpriteIds[gBattleAnimAttacker];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
gSprites[spriteId].pos2.x += gTasks[taskId].data[0];
if (gTasks[taskId].data[0] < 0)
{
@ -5834,7 +5834,7 @@ void AnimTask_SnatchPartnerMove(u8 taskId)
break;
case 4:
default:
spriteId = gBankSpriteIds[gBattleAnimAttacker];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
gSprites[spriteId].pos2.x = 0;
DestroyAnimVisualTask(taskId);
break;

View File

@ -10,7 +10,7 @@
extern s16 gBattleAnimArgs[8];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern s32 gAnimMoveDmg;
extern u16 gAnimMovePower;
extern u8 gBattleAnimAttacker;
@ -199,11 +199,11 @@ void AnimTask_ShakeMon2(u8 taskId)
if (IsAnimBankSpriteVisible(side) == FALSE)
destroy = TRUE;
sprite = gBankSpriteIds[side];
sprite = gBattlerSpriteIds[side];
}
else
{
sprite = gBankSpriteIds[gBattleAnimAttacker];
sprite = gBattlerSpriteIds[gBattleAnimAttacker];
}
if (destroy)
@ -447,7 +447,7 @@ static void DoHorizontalLunge(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[2] = 0;
sprite->data[3] = gBankSpriteIds[gBattleAnimAttacker];
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData(sprite, ReverseHorizontalLungeDirection);
sprite->callback = TranslateMonBGUntil;
@ -498,9 +498,9 @@ static void SlideMonToOriginalPos(struct Sprite *sprite)
int something;
int monSpriteId;
if (!gBattleAnimArgs[0])
monSpriteId = gBankSpriteIds[gBattleAnimAttacker];
monSpriteId = gBattlerSpriteIds[gBattleAnimAttacker];
else
monSpriteId = gBankSpriteIds[gBattleAnimTarget];
monSpriteId = gBattlerSpriteIds[gBattleAnimTarget];
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gSprites[monSpriteId].pos1.x + gSprites[monSpriteId].pos2.x;
@ -571,7 +571,7 @@ static void SlideMonToOffset(struct Sprite *sprite)
else
battler = gBattleAnimTarget;
monSpriteId = gBankSpriteIds[battler];
monSpriteId = gBattlerSpriteIds[battler];
if (GetBattlerSide(battler) != B_SIDE_PLAYER)
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@ -608,7 +608,7 @@ static void sub_80A8818(struct Sprite *sprite)
{
v1 = gBattleAnimTarget;
}
spriteId = gBankSpriteIds[v1];
spriteId = gBattlerSpriteIds[v1];
if (GetBattlerSide(v1))
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
@ -726,7 +726,7 @@ void sub_80A8A80(u8 taskId)
DestroyAnimVisualTask(taskId);
return;
}
spriteId = gBankSpriteIds[gBattleAnimAttacker ^ 2];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker ^ 2];
break;
case 3:
if (!IsAnimBankSpriteVisible(gBattleAnimTarget ^ 2))
@ -734,7 +734,7 @@ void sub_80A8A80(u8 taskId)
DestroyAnimVisualTask(taskId);
return;
}
spriteId = gBankSpriteIds[gBattleAnimTarget ^ 2];
spriteId = gBattlerSpriteIds[gBattleAnimTarget ^ 2];
break;
default:
DestroyAnimVisualTask(taskId);

View File

@ -26,12 +26,12 @@ extern u16 gUnknown_03005F14;
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u8 gHealthboxIDs[];
extern u8 gBankSpriteIds[];
extern u8 gHealthboxSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u16 gBattlerPartyIndexes[];
extern u16 gLastUsedItem;
extern u8 gDoingBattleAnim;
extern u8 gEffectBank;
extern u8 gEffectBattler;
extern const u8 gUnknown_08D2EE48[];
extern const u8 gUnknown_08D2EDFC[];
@ -380,7 +380,7 @@ void unref_sub_813F0F4(u8 taskId)
REG_BG1CNT_BITFIELD.areaOverflowMode = 1;
REG_BG1CNT_BITFIELD.charBaseBlock = 1;
healthBoxSpriteId = gHealthboxIDs[battler];
healthBoxSpriteId = gHealthboxSpriteIds[battler];
spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
spriteId2 = gSprites[healthBoxSpriteId].data[5];
spriteId3 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
@ -460,9 +460,9 @@ static void sub_813F300(u8 taskId)
sub_8078914(&subStruct);
DmaFill32Defvars(3, 0, subStruct.field_4, 0x800);
REG_BG1CNT_BITFIELD.areaOverflowMode = 0;
spriteId1 = gSprites[gHealthboxIDs[battler]].oam.affineParam;
spriteId2 = gSprites[gHealthboxIDs[battler]].data[5];
gSprites[gHealthboxIDs[battler]].oam.priority = 1;
spriteId1 = gSprites[gHealthboxSpriteIds[battler]].oam.affineParam;
spriteId2 = gSprites[gHealthboxSpriteIds[battler]].data[5];
gSprites[gHealthboxSpriteIds[battler]].oam.priority = 1;
gSprites[spriteId1].oam.priority = 1;
gSprites[spriteId2].oam.priority = 1;
DestroyAnimVisualTask(taskId);
@ -479,7 +479,7 @@ void sub_813F4EC(u8 taskId)
u8 paletteNum1, paletteNum2;
u16 offset1, offset2;
healthBoxSpriteId = gHealthboxIDs[gBattleAnimAttacker];
healthBoxSpriteId = gHealthboxSpriteIds[gBattleAnimAttacker];
spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
spriteId2 = gSprites[healthBoxSpriteId].data[5];
paletteNum1 = AllocSpritePalette(0xD709);
@ -502,7 +502,7 @@ void sub_813F5E8(u8 taskId)
u8 spriteId1, spriteId2;
u8 paletteIndex1, paletteIndex2;
healthBoxSpriteId = gHealthboxIDs[gBattleAnimAttacker];
healthBoxSpriteId = gHealthboxSpriteIds[gBattleAnimAttacker];
spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
spriteId2 = gSprites[healthBoxSpriteId].data[5];
@ -565,7 +565,7 @@ void sub_813F798(u8 taskId)
{
u8 spriteId;
spriteId = gBankSpriteIds[gBattleAnimAttacker];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
switch (gTasks[taskId].data[0])
{
case 0:
@ -597,7 +597,7 @@ void sub_813F844(u8 taskId)
u8 priority, subpriority;
u32 selectedPalettes;
spriteId = gBankSpriteIds[gBattleAnimAttacker];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL);
else
@ -690,7 +690,7 @@ void sub_813FA94(u8 taskId)
gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
gSprites[spriteId].callback = sub_813FD90;
ewram17840.unk9_1 = gSprites[gBankSpriteIds[gBattleAnimTarget]].invisible;
ewram17840.unk9_1 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].func = sub_813FB7C;
}
@ -727,14 +727,14 @@ void sub_813FBB8(u8 taskId)
gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
gSprites[spriteId].callback = SpriteCallbackDummy;
StartSpriteAnim(&gSprites[gBankSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 1);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 1);
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].func = sub_813FCBC;
}
static void sub_813FCBC(u8 taskId)
{
if (gSprites[gBankSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1)
if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1)
{
PlaySE12WithPanning(SE_NAGERU, 0);
gSprites[gTasks[taskId].data[0]].callback = sub_813FD90;
@ -745,9 +745,9 @@ static void sub_813FCBC(u8 taskId)
static void sub_813FD34(u8 taskId)
{
if (gSprites[gBankSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded)
if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded)
{
StartSpriteAnim(&gSprites[gBankSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 0);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 0);
DestroyTask(taskId);
}
}
@ -811,7 +811,7 @@ static void sub_813FE70(struct Sprite *sprite)
{
sprite->data[5] = CreateTask(TaskDummy, 50);
sprite->callback = sub_813FEC8;
gSprites[gBankSpriteIds[gBattleAnimTarget]].data[1] = 0;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0;
}
}
@ -820,7 +820,7 @@ static void sub_813FEC8(struct Sprite *sprite)
u8 spriteId;
u8 taskId;
spriteId = gBankSpriteIds[gBattleAnimTarget];
spriteId = gBattlerSpriteIds[gBattleAnimTarget];
taskId = sprite->data[5];
if (++gTasks[taskId].data[1] == 11)
@ -1139,8 +1139,8 @@ static void sub_8140454(struct Sprite *sprite)
}
else if (sprite->data[4] == 315)
{
FreeOamMatrix(gSprites[gBankSpriteIds[*battler]].oam.matrixNum);
DestroySprite(&gSprites[gBankSpriteIds[*battler]]);
FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum);
DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]);
sprite->data[0] = 0;
sprite->callback = sub_81404E4;
}
@ -1223,10 +1223,10 @@ static void sub_81405F4(struct Sprite *sprite)
sub_8141314(1, gBattleAnimTarget, 14, ballIndex);
LABEL:
gSprites[gBankSpriteIds[gBattleAnimTarget]].invisible = 0;
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[gBattleAnimTarget]], 1);
AnimateSprite(&gSprites[gBankSpriteIds[gBattleAnimTarget]]);
gSprites[gBankSpriteIds[gBattleAnimTarget]].data[1] = 0x1000;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = 0;
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1);
AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]);
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000;
}
static void sub_81406BC(struct Sprite *sprite)
@ -1236,21 +1236,21 @@ static void sub_81406BC(struct Sprite *sprite)
if (sprite->animEnded)
sprite->invisible = 1;
if (gSprites[gBankSpriteIds[gBattleAnimTarget]].affineAnimEnded)
if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded)
{
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[gBattleAnimTarget]], 0);
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0);
next = TRUE;
}
else
{
gSprites[gBankSpriteIds[gBattleAnimTarget]].data[1] -= 288;
gSprites[gBankSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBankSpriteIds[gBattleAnimTarget]].data[1] >> 8;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] -= 288;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] >> 8;
}
if (sprite->animEnded && next)
{
gSprites[gBankSpriteIds[gBattleAnimTarget]].pos2.y = 0;
gSprites[gBankSpriteIds[gBattleAnimTarget]].invisible = ewram17840.unk9_1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = ewram17840.unk9_1;
sprite->data[0] = 0;
sprite->callback = sub_81405C8;
gDoingBattleAnim = 0;
@ -1824,7 +1824,7 @@ void sub_814151C(u8 taskId)
u32 done;
done = FALSE;
spriteId = gBankSpriteIds[gBattleAnimAttacker];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
switch (gTasks[taskId].data[10])
{
case 0:
@ -1905,7 +1905,7 @@ void sub_81416C4(u8 taskId)
}
break;
case 2:
spriteId = gBankSpriteIds[gBattleAnimAttacker];
spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
DmaClear32(3, (void *)OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * TILE_SIZE_4BPP, 0x800);
sub_80324E0(gBattleAnimAttacker);
DestroyAnimVisualTask(taskId);
@ -1921,7 +1921,7 @@ void sub_81417D8(u8 taskId)
void sub_8141808(u8 taskId)
{
gBattleAnimTarget = gEffectBank;
gBattleAnimTarget = gEffectBattler;
DestroyAnimVisualTask(taskId);
}
@ -2107,13 +2107,13 @@ static void sub_8141C30(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 1) + gBattleAnimArgs[3];
sprite->data[5] = -32;
InitAnimArcTranslation(sprite);
StartSpriteAnim(&gSprites[gBankSpriteIds[gBattleAnimAttacker]], 1);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 1);
sprite->callback = sub_8141CBC;
}
static void sub_8141CBC(struct Sprite *sprite)
{
if (gSprites[gBankSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1)
if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1)
sprite->callback = sub_8141CF4;
}
@ -2129,11 +2129,11 @@ static void sub_8141CF4(struct Sprite *sprite)
static void sub_8141D20(struct Sprite *sprite)
{
if (gSprites[gBankSpriteIds[gBattleAnimAttacker]].animEnded)
if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded)
{
if (++sprite->data[0] > 0)
{
StartSpriteAnim(&gSprites[gBankSpriteIds[gBattleAnimAttacker]], 0);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
DestroyAnimSprite(sprite);
}
}

View File

@ -15,7 +15,7 @@ extern bool8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimTarget;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
extern const u8 *const gBattleAnims_StatusConditions[];
@ -72,7 +72,7 @@ static void sub_807BDAC(u8);
u8 unref_sub_807B69C(u8 a, u8 b)
{
u8 spriteId1 = gBankSpriteIds[a];
u8 spriteId1 = gBattlerSpriteIds[a];
u8 taskId = CreateTask(sub_807B7E0, 10);
u8 spriteId2;
u8 i;

View File

@ -262,22 +262,22 @@ void DrawMainBattleBackground(void)
{
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER /*| BATTLE_TYPE_x2000000*/))
{
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60);
}
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
{
if (gGameVersion == VERSION_RUBY)
{
LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60);
}
else
{
LZDecompressVram(gBattleTerrainTiles_Water, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Water, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60);
}
}
@ -288,15 +288,15 @@ void DrawMainBattleBackground(void)
u8 trainerClass = gTrainers[gTrainerBattleOpponent].trainerClass;
if (trainerClass == TRAINER_CLASS_LEADER)
{
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60);
return;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumSteven, 0x20, 0x60);
return;
}
@ -305,48 +305,48 @@ void DrawMainBattleBackground(void)
switch (GetCurrentMapBattleScene())
{
case MAP_BATTLE_SCENE_NORMAL:
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_GYM:
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_MAGMA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_AQUA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_SIDNEY:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_PHOEBE:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_GLACIA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_DRAKE:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_BATTLE_TOWER:
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60);
break;
}
@ -359,6 +359,7 @@ void LoadBattleTextboxAndBackground(void)
CpuSet(gBattleTextboxTilemap, (void *)(VRAM + 0xC000), 0x800);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
ApplyPlayerChosenFrameToBattleMenu();
DrawMainBattleBackground();
#if DEBUG
@ -466,8 +467,8 @@ static void PrintLinkBattleWinLossTie(void)
if (gBattleOutcome == 1)
{
// lp_field_18 = player position?
switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18)
// id = player position?
switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].id)
{
case 0:
case 2:
@ -485,7 +486,7 @@ static void PrintLinkBattleWinLossTie(void)
else
{
switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18)
switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].id)
{
case 1:
case 3:
@ -507,7 +508,7 @@ static void PrintLinkBattleWinLossTie(void)
if (gBattleOutcome == 1)
{
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0)
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id != 0)
{
PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN);
PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS);
@ -520,7 +521,7 @@ static void PrintLinkBattleWinLossTie(void)
}
else
{
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0)
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id != 0)
{
PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN);
PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS);
@ -544,7 +545,7 @@ void sub_800DE30(u8 taskId)
case 0:
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) {
for (i = 0; i < 4; i++) {
u8 windowId = (gLinkPlayers[i].lp_field_18 & 3);
u8 windowId = (gLinkPlayers[i].id & 3);
Text_InitWindow8002E4C(
gLinkResultWindows[windowId].window,
gLinkPlayers[i].name,
@ -560,7 +561,7 @@ void sub_800DE30(u8 taskId)
u8 playerId = gBattleStruct->linkPlayerIndex;
u8 opponentId = gBattleStruct->linkPlayerIndex ^ 1;
if (gLinkPlayers[playerId].lp_field_18) {
if (gLinkPlayers[playerId].id) {
opponentId = gBattleStruct->linkPlayerIndex;
playerId = gBattleStruct->linkPlayerIndex ^ 1;
}
@ -633,8 +634,10 @@ void sub_800DE30(u8 taskId)
}
}
void LoadBattleEntryBackground(void) {
if (gBattleTypeFlags & BATTLE_TYPE_LINK) {
void DrawBattleEntryBackground(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
LZDecompressVram(gVersusFrameGfx, (void *)(VRAM + 0x4000));
LZDecompressVram(gVersusFrameTilemap, (void *)(VRAM + 0xE000));
LZDecompressVram(gVersusFrameTilemap, (void *)(VRAM + 0xF000));
@ -646,44 +649,61 @@ void LoadBattleEntryBackground(void) {
gBattle_BG1_Y = 0xff5c;
gBattle_BG2_Y = 0xff5c;
LoadCompressedObjectPic(gUnknown_081F95A4);
return;
} else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) {
}
else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(VRAM + 0xE000));
return;
} else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) {
if (gGameVersion == VERSION_RUBY) {
}
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
{
if (gGameVersion == VERSION_RUBY)
{
LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void *)(VRAM + 0xE000));
return;
} else {
}
else
{
LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void *)(VRAM + 0xE000));
return;
}
} else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) {
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) {
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(VRAM + 0xE000));
return;
} else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) {
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(VRAM + 0xE000));
return;
}
}
if (sav1_map_get_battletype() == 0) {
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTileset, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)(VRAM + 0xE000));
return;
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19)
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(VRAM + 0xE000));
return;
}
else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20)
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(VRAM + 0xE000));
return;
}
}
if (sav1_map_get_battletype() == 0)
{
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTileset, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)(VRAM + 0xE000));
}
else
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(VRAM + 0xE000));
}
}
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(VRAM + 0xE000));
}
int LoadChosenBattleElement(u8 type) {
int ret = 0;
switch (type) {
int LoadChosenBattleElement(u8 caseId)
{
int ret = FALSE;
switch (caseId)
{
case 0:
LZDecompressVram(&gBattleTextboxTiles, (void *)VRAM);
break;
@ -694,132 +714,172 @@ int LoadChosenBattleElement(u8 type) {
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
break;
case 3: // tiles
if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) {
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) {
if (gGameVersion == VERSION_RUBY) {
LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(VRAM + 0x8000));
break;
} else {
LZDecompressVram(gBattleTerrainTiles_Water, (void *)(VRAM + 0x8000));
if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
{
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
{
if (gGameVersion == VERSION_RUBY)
{
LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2)));
break;
}
} else {
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) {
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) {
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(VRAM + 0x8000));
else
{
LZDecompressVram(gBattleTerrainTiles_Water, (void *)(BG_CHAR_ADDR(2)));
break;
}
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19)
{
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
} else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) {
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(VRAM + 0x8000));
}
else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20)
{
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
}
}
switch (sav1_map_get_battletype()) {
switch (sav1_map_get_battletype())
{
case 0:
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2)));
break;
case 2:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case 3:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case 4:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case 5:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case 6:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case 7:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case 1:
case 8:
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(VRAM + 0x8000));
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
}
break;
}
} else {
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(VRAM + 0x8000));
}
else
{
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
}
case 4: // tilemap
if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) {
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) {
if (gGameVersion == 2) {
LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(VRAM + 0xD000));
break;
} else {
LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(VRAM + 0xD000));
if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
{
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
{
if (gGameVersion == 2)
{
LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26)));
break;
}
} else {
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) {
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) {
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(VRAM + 0xD000));
else
{
LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26)));
break;
}
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19)
{
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
} else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) {
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(VRAM + 0xD000));
}
else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20)
{
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
}
}
switch (sav1_map_get_battletype()) {
switch (sav1_map_get_battletype())
{
case 0:
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26)));
break;
case 2:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case 3:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case 4:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case 5:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case 6:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case 7:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case 1:
case 8:
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(VRAM + 0xD000));
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
}
break;
}
} else {
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(VRAM + 0xD000));
}
else
{
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
}
case 5: // palette
if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) {
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) {
if (gGameVersion == 2) {
if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
{
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
{
if (gGameVersion == 2)
{
LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60);
break;
} else {
}
else
{
LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60);
break;
}
} else {
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) {
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19) {
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x19)
{
LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60);
break;
} else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20) {
}
else if (gTrainers[gTrainerBattleOpponent].trainerClass == 0x20)
{
LoadCompressedPalette(gBattleTerrainPalette_StadiumSteven, 0x20, 0x60);
break;
}
}
switch (sav1_map_get_battletype()) {
switch (sav1_map_get_battletype())
{
case 0:
LoadCompressedPalette(gBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60);
break;
@ -850,7 +910,9 @@ int LoadChosenBattleElement(u8 type) {
}
break;
}
} else {
}
else
{
LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60);
break;
}
@ -858,7 +920,8 @@ int LoadChosenBattleElement(u8 type) {
ApplyPlayerChosenFrameToBattleMenu();
break;
default:
ret = 1;
ret = TRUE;
break;
}
return ret;
}

View File

@ -28,12 +28,12 @@ struct MovePpInfo
extern u8 gActiveBattler;
extern u8 gBattleBufferA[][0x200];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u16 gBattlerPartyIndexes[];
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
extern u16 gBattleTypeFlags;
extern u8 gBattleMonForms[];
extern void (*gBattleBankFunc[])(void);
extern void (*gBattlerControllerFuncs[])(void);
extern s32 gAnimMoveDmg;
extern u16 gAnimMovePower;
extern u8 gAnimFriendship;
@ -50,7 +50,7 @@ extern struct SpriteTemplate gUnknown_02024E8C;
extern u8 gAnimMoveTurn;
extern struct Window gUnknown_03004210;
extern u8 gUnknown_0300434C[];
extern u32 gBattleExecBuffer;
extern u32 gBattleControllerExecFlags;
extern MainCallback gPreBattleCallback1;
extern struct MusicPlayerInfo gMPlay_BGM;
@ -76,7 +76,7 @@ extern void StartAnimLinearTranslation(struct Sprite *);
extern void sub_80375B4(void);
extern void sub_8010384(struct Sprite *);
extern void sub_8037B78(void);
extern u8 sub_8031720();
extern u8 IsMoveWithoutAnimation();
extern bool8 mplay_80342A4(u8);
extern void DoMoveAnim();
extern void sub_80326EC();
@ -248,12 +248,12 @@ void nullsub_47(void)
void SetBankFuncToLinkOpponentBufferRunCommand(void)
{
gBattleBankFunc[gActiveBattler] = sub_803752C;
gBattlerControllerFuncs[gActiveBattler] = sub_803752C;
}
void sub_803752C(void)
{
if (gBattleExecBuffer & gBitTable[gActiveBattler])
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
if (gBattleBufferA[gActiveBattler][0] <= 0x38)
gLinkOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
@ -264,18 +264,18 @@ void sub_803752C(void)
void sub_803757C(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
LinkOpponentBufferExecCompleted();
}
void sub_80375B4(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
sub_8031B74(gSprites[gBankSpriteIds[gActiveBattler]].oam.affineParam);
gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum = gSprites[gBankSpriteIds[gActiveBattler]].data[5];
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
sub_8031B74(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = gSprites[gBattlerSpriteIds[gActiveBattler]].data[5];
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
LinkOpponentBufferExecCompleted();
}
}
@ -295,13 +295,13 @@ void sub_8037680(void)
if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
r6 = TRUE;
}
else
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxIDs[gActiveBattler ^ 2]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ 2]].callback == SpriteCallbackDummy)
r6 = TRUE;
}
if (IsCryPlayingOrClearCrySongs())
@ -330,7 +330,7 @@ void sub_8037680(void)
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
}
ewram17810[gActiveBattler].unk9 = 3;
gBattleBankFunc[gActiveBattler] = sub_8037644;
gBattlerControllerFuncs[gActiveBattler] = sub_8037644;
}
}
@ -352,35 +352,35 @@ void sub_8037840(void)
{
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler ^ 2]]);
sub_8045A5C(
gHealthboxIDs[gActiveBattler ^ 2],
gHealthboxSpriteIds[gActiveBattler ^ 2],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ 2]],
0);
sub_804777C(gActiveBattler ^ 2);
sub_8043DFC(gHealthboxIDs[gActiveBattler ^ 2]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler ^ 2]);
sub_8032984(
gActiveBattler ^ 2,
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ 2]], MON_DATA_SPECIES));
}
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler]]);
sub_8045A5C(
gHealthboxIDs[gActiveBattler],
gHealthboxSpriteIds[gActiveBattler],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]],
0);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
sub_8032984(
gActiveBattler,
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
ewram17840.unk9_0 = 0;
gBattleBankFunc[gActiveBattler] = sub_8037680;
gBattlerControllerFuncs[gActiveBattler] = sub_8037680;
}
}
void sub_8037A74(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].animEnded == TRUE
&& gSprites[gBankSpriteIds[gActiveBattler]].pos2.x == 0)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
{
if (!ewram17810[gActiveBattler].unk0_7)
{
@ -401,20 +401,20 @@ void sub_8037A74(void)
void sub_8037B24(void)
{
s16 r4 = sub_8045C78(gActiveBattler, gHealthboxIDs[gActiveBattler], 0, 0);
s16 r4 = sub_8045C78(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], 0, 0);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
if (r4 != -1)
sub_80440EC(gHealthboxIDs[gActiveBattler], r4, 0);
sub_80440EC(gHealthboxSpriteIds[gActiveBattler], r4, 0);
else
LinkOpponentBufferExecCompleted();
}
void sub_8037B78(void)
{
if (!gSprites[gBankSpriteIds[gActiveBattler]].inUse)
if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse)
{
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
LinkOpponentBufferExecCompleted();
}
}
@ -423,10 +423,10 @@ void sub_8037BBC(void)
{
if (!ewram17810[gActiveBattler].unk0_6)
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8032A08(gActiveBattler);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
LinkOpponentBufferExecCompleted();
}
}
@ -439,7 +439,7 @@ void sub_8037C2C(void)
void dp01t_0F_4_move_anim(void)
{
u8 spriteId = gBankSpriteIds[gActiveBattler];
u8 spriteId = gBattlerSpriteIds[gActiveBattler];
if (gSprites[spriteId].data[1] == 32)
{
@ -458,11 +458,11 @@ void dp01t_0F_4_move_anim(void)
void sub_8037CC0(void)
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
if (ewram17800[gActiveBattler].substituteSprite)
move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6);
gBattleBankFunc[gActiveBattler] = sub_8037D2C;
gBattlerControllerFuncs[gActiveBattler] = sub_8037D2C;
}
}
@ -483,15 +483,15 @@ void sub_8037D64(void)
ewram17810[gActiveBattler].unk1_0 = 0;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], 0);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
sub_8045A5C(
gHealthboxIDs[gActiveBattler],
gHealthboxSpriteIds[gActiveBattler],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]],
0);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
sub_8031F88(gActiveBattler);
gBattleBankFunc[gActiveBattler] = sub_8037CC0;
gBattlerControllerFuncs[gActiveBattler] = sub_8037CC0;
}
}
@ -504,7 +504,7 @@ void sub_8037E30(void)
{
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler]]);
sub_8032984(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattleBankFunc[gActiveBattler] = sub_8037D64;
gBattlerControllerFuncs[gActiveBattler] = sub_8037D64;
}
}
@ -526,7 +526,7 @@ void sub_8037F34(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
sub_800832C();
gBattleBankFunc[gActiveBattler] = sub_8037EF0;
gBattlerControllerFuncs[gActiveBattler] = sub_8037EF0;
}
else
{
@ -552,7 +552,7 @@ void sub_8037FD8(void)
void LinkOpponentBufferExecCompleted(void)
{
gBattleBankFunc[gActiveBattler] = sub_803752C;
gBattlerControllerFuncs[gActiveBattler] = sub_803752C;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
u8 playerId = GetMultiplayerId();
@ -562,7 +562,7 @@ void LinkOpponentBufferExecCompleted(void)
}
else
{
gBattleExecBuffer &= ~gBitTable[gActiveBattler];
gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
}
}
@ -587,7 +587,7 @@ void LinkOpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
Emitcmd29(1, r6, buffer);
BtlController_EmitDataTransfer(1, r6, buffer);
LinkOpponentBufferExecCompleted();
}
@ -1153,24 +1153,24 @@ void LinkOpponentHandleLoadPokeSprite(void)
BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
GetBattlerSpriteCoord(gActiveBattler, 2),
sub_8077F68(gActiveBattler),
GetBattlerSubpriority(gActiveBattler));
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
sub_8032984(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattleBankFunc[gActiveBattler] = sub_8037A74;
gBattlerControllerFuncs[gActiveBattler] = sub_8037A74;
}
void LinkOpponentHandleSendOutPoke(void)
{
gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
sub_8039430(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
gBattleBankFunc[gActiveBattler] = sub_8037E30;
gBattlerControllerFuncs[gActiveBattler] = sub_8037E30;
}
void sub_8039430(u8 a, u8 b)
@ -1183,18 +1183,18 @@ void sub_8039430(u8 a, u8 b)
gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0);
BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[a]], a);
GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a));
gBankSpriteIds[a] = CreateSprite(
gBattlerSpriteIds[a] = CreateSprite(
&gUnknown_02024E8C,
GetBattlerSpriteCoord(a, 2),
sub_8077F68(a),
GetBattlerSubpriority(a));
gSprites[gUnknown_0300434C[a]].data[1] = gBankSpriteIds[a];
gSprites[gBankSpriteIds[a]].data[0] = a;
gSprites[gBankSpriteIds[a]].data[2] = species;
gSprites[gBankSpriteIds[a]].oam.paletteNum = a;
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBankSpriteIds[a]].invisible = TRUE;
gSprites[gBankSpriteIds[a]].callback = SpriteCallbackDummy;
gSprites[gUnknown_0300434C[a]].data[1] = gBattlerSpriteIds[a];
gSprites[gBattlerSpriteIds[a]].data[0] = a;
gSprites[gBattlerSpriteIds[a]].data[2] = species;
gSprites[gBattlerSpriteIds[a]].oam.paletteNum = a;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBattlerSpriteIds[a]].invisible = TRUE;
gSprites[gBattlerSpriteIds[a]].callback = SpriteCallbackDummy;
gSprites[gUnknown_0300434C[a]].data[0] = StartSendOutMonAnimation(0, 0xFE);
}
@ -1203,14 +1203,14 @@ void LinkOpponentHandleReturnPokeToBall(void)
if (gBattleBufferA[gActiveBattler][1] == 0)
{
ewram17810[gActiveBattler].unk4 = 0;
gBattleBankFunc[gActiveBattler] = sub_8039648;
gBattlerControllerFuncs[gActiveBattler] = sub_8039648;
}
else
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8032A08(gActiveBattler);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
LinkOpponentBufferExecCompleted();
}
}
@ -1229,7 +1229,7 @@ void sub_8039648(void)
{
ewram17810[gActiveBattler].unk4 = 0;
move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 2);
gBattleBankFunc[gActiveBattler] = sub_8037BBC;
gBattlerControllerFuncs[gActiveBattler] = sub_8037BBC;
}
break;
}
@ -1255,18 +1255,18 @@ void LinkOpponentHandleTrainerThrow(void)
}
sub_8031A6C(gender, gActiveBattler);
GetMonSpriteTemplate_803C5A0(gender, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords),
GetBattlerSubpriority(gActiveBattler));
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[gender].tag);
gSprites[gBankSpriteIds[gActiveBattler]].data[5] = gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[gender].tag);
gSprites[gBankSpriteIds[gActiveBattler]].oam.affineParam = gender;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattleBankFunc[gActiveBattler] = sub_803757C;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[gender].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[gender].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = gender;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattlerControllerFuncs[gActiveBattler] = sub_803757C;
}
void LinkOpponentHandleTrainerSlide(void)
@ -1276,13 +1276,13 @@ void LinkOpponentHandleTrainerSlide(void)
void LinkOpponentHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBattler]]);
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBankSpriteIds[gActiveBattler]].data[4] = gSprites[gBankSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBankSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBankSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattleBankFunc[gActiveBattler] = sub_80375B4;
oamt_add_pos2_onto_pos1(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_80375B4;
}
void LinkOpponentHandlecmd10(void)
@ -1297,8 +1297,8 @@ void LinkOpponentHandlecmd10(void)
{
ewram17810[gActiveBattler].unk4 = 0;
PlaySE12WithPanning(SE_POKE_DEAD, 63);
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_8010384;
gBattleBankFunc[gActiveBattler] = sub_8037B78;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8010384;
gBattlerControllerFuncs[gActiveBattler] = sub_8037B78;
}
}
@ -1342,15 +1342,15 @@ void LinkOpponentHandleMoveAnimation(void)
gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
// Dead code. sub_8031720 always returns 0.
if (sub_8031720(r0, gAnimMoveTurn) != 0)
// Dead code. IsMoveWithoutAnimation always returns 0.
if (IsMoveWithoutAnimation(r0, gAnimMoveTurn) != 0)
{
LinkOpponentBufferExecCompleted();
}
else
{
ewram17810[gActiveBattler].unk4 = 0;
gBattleBankFunc[gActiveBattler] = sub_8039B64;
gBattlerControllerFuncs[gActiveBattler] = sub_8039B64;
}
}
}
@ -1412,7 +1412,7 @@ void LinkOpponentHandlePrintString(void)
gBattle_BG0_Y = 0;
BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gBattleBankFunc[gActiveBattler] = sub_8037C2C;
gBattlerControllerFuncs[gActiveBattler] = sub_8037C2C;
}
void LinkOpponentHandlePrintStringPlayerOnly(void)
@ -1461,15 +1461,15 @@ void LinkOpponentHandleHealthBarUpdate(void)
u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
u32 hp = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, hp, r7);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, hp, r7);
}
else
{
u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, 0, r7);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, r7);
}
gBattleBankFunc[gActiveBattler] = sub_8037B24;
gBattlerControllerFuncs[gActiveBattler] = sub_8037B24;
}
void LinkOpponentHandleExpBarUpdate(void)
@ -1481,9 +1481,9 @@ void LinkOpponentHandleStatusIconUpdate(void)
{
if (mplay_80342A4(gActiveBattler) == 0)
{
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], 9);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], 9);
ewram17810[gActiveBattler].unk0_4 = 0;
gBattleBankFunc[gActiveBattler] = sub_8037FAC;
gBattlerControllerFuncs[gActiveBattler] = sub_8037FAC;
}
}
@ -1497,7 +1497,7 @@ void LinkOpponentHandleStatusAnimation(void)
| (gBattleBufferA[gActiveBattler][3] << 8)
| (gBattleBufferA[gActiveBattler][4] << 16)
| (gBattleBufferA[gActiveBattler][5] << 24));
gBattleBankFunc[gActiveBattler] = sub_8037FAC;
gBattlerControllerFuncs[gActiveBattler] = sub_8037FAC;
}
}
@ -1572,16 +1572,16 @@ void LinkOpponentHandlecmd40(void)
void LinkOpponentHandleHitAnimation(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].invisible == TRUE)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
{
LinkOpponentBufferExecCompleted();
}
else
{
gDoingBattleAnim = TRUE;
gSprites[gBankSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
sub_8047858(gActiveBattler);
gBattleBankFunc[gActiveBattler] = dp01t_0F_4_move_anim;
gBattlerControllerFuncs[gActiveBattler] = dp01t_0F_4_move_anim;
}
}
@ -1627,18 +1627,18 @@ void LinkOpponentHandleTrainerBallThrow(void)
{
u8 taskId;
oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBattler]]);
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBankSpriteIds[gActiveBattler]].data[4] = gSprites[gBankSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBankSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBankSpriteIds[gActiveBattler]], sub_803A3A8);
oamt_add_pos2_onto_pos1(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_803A3A8);
taskId = CreateTask(sub_803A2C4, 5);
gTasks[taskId].data[0] = gActiveBattler;
if (ewram17810[gActiveBattler].unk0_0)
gTasks[gUnknown_02024E68[gActiveBattler]].func = sub_8044CA0;
ewram17840.unk9_0 = 1;
gBattleBankFunc[gActiveBattler] = nullsub_47;
gBattlerControllerFuncs[gActiveBattler] = nullsub_47;
}
void sub_803A2C4(u8 taskId)
@ -1661,7 +1661,7 @@ void sub_803A2C4(u8 taskId)
sub_8039430(gActiveBattler, 0);
gActiveBattler ^= 2;
}
gBattleBankFunc[gActiveBattler] = sub_8037840;
gBattlerControllerFuncs[gActiveBattler] = sub_8037840;
gActiveBattler = r9;
DestroyTask(taskId);
}
@ -1703,7 +1703,7 @@ void LinkOpponentHandlecmd48(void)
ewram17810[gActiveBattler].unk5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
ewram17810[gActiveBattler].unk5 = 0x5D;
gBattleBankFunc[gActiveBattler] = sub_803A4E0;
gBattlerControllerFuncs[gActiveBattler] = sub_803A4E0;
}
void sub_803A4E0(void)
@ -1731,7 +1731,7 @@ void LinkOpponentHandleSpriteInvisibility(void)
{
if (IsBankSpritePresent(gActiveBattler) != 0)
{
gSprites[gBankSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
sub_8031F88(gActiveBattler);
}
LinkOpponentBufferExecCompleted();
@ -1747,7 +1747,7 @@ void LinkOpponentHandleBattleAnimation(void)
if (move_anim_start_t3(gActiveBattler, gActiveBattler, gActiveBattler, r3, r4) != 0)
LinkOpponentBufferExecCompleted();
else
gBattleBankFunc[gActiveBattler] = sub_8037FD8;
gBattlerControllerFuncs[gActiveBattler] = sub_8037FD8;
}
}
@ -1770,7 +1770,7 @@ void LinkOpponentHandlecmd55(void)
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
LinkOpponentBufferExecCompleted();
gBattleBankFunc[gActiveBattler] = sub_8037F34;
gBattlerControllerFuncs[gActiveBattler] = sub_8037F34;
}
void LinkOpponentHandlecmd56(void)

View File

@ -34,9 +34,9 @@ extern u16 gBattleTypeFlags;
extern u8 gDisplayedStringBattle[];
extern u8 gBattleBufferA[][0x200];
extern u8 gActiveBattler;
extern u32 gBattleExecBuffer;
extern u32 gBattleControllerExecFlags;
extern u16 gBattlerPartyIndexes[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u8 gBattleOutcome;
extern u16 gUnknown_02024DE8;
extern u8 gUnknown_02024E68[];
@ -50,8 +50,8 @@ extern u16 gWeatherMoveAnim;
extern u8 gAnimMoveTurn;
extern struct Window gUnknown_03004210;
extern MainCallback gPreBattleCallback1;
extern void (*gBattleBankFunc[])(void);
extern u8 gHealthboxIDs[];
extern void (*gBattlerControllerFuncs[])(void);
extern u8 gHealthboxSpriteIds[];
extern u8 gUnknown_0300434C[];
extern u8 gBattleMonForms[];
extern u8 gAnimScriptActive;
@ -70,7 +70,7 @@ extern void sub_8031F24(void);
extern void sub_80326EC();
extern void DoMoveAnim();
extern void sub_80324BC();
extern u8 sub_8031720();
extern u8 IsMoveWithoutAnimation();
extern u8 mplay_80342A4();
extern void oamt_add_pos2_onto_pos1();
extern void StoreSpriteCallbackInData();
@ -241,12 +241,12 @@ void nullsub_74(void)
void SetBankFuncToLinkPartnerBufferRunCommand(void)
{
gBattleBankFunc[gActiveBattler] = LinkPartnerBufferRunCommand;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerBufferRunCommand;
}
void LinkPartnerBufferRunCommand(void)
{
if (gBattleExecBuffer & gBitTable[gActiveBattler])
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
if (gBattleBufferA[gActiveBattler][0] <= 0x38)
gLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
@ -257,17 +257,17 @@ void LinkPartnerBufferRunCommand(void)
void sub_811DAE4(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
LinkPartnerBufferExecCompleted();
}
void sub_811DB1C(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
nullsub_10(0);
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
LinkPartnerBufferExecCompleted();
}
}
@ -287,13 +287,13 @@ void sub_811DBC0(void)
if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & 0x40)))
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
r6 = TRUE;
}
else
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxIDs[gActiveBattler ^ 2]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ 2]].callback == SpriteCallbackDummy)
r6 = TRUE;
}
if (IsCryPlayingOrClearCrySongs())
@ -301,7 +301,7 @@ void sub_811DBC0(void)
if (r6)
{
ewram17810[gActiveBattler].unk9 = 3;
gBattleBankFunc[gActiveBattler] = sub_811DB84;
gBattlerControllerFuncs[gActiveBattler] = sub_811DB84;
}
}
@ -319,24 +319,24 @@ void sub_811DCA0(void)
if (IsDoubleBattle() && !(gBattleTypeFlags & 0x40))
{
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler ^ 2]]);
sub_8045A5C(gHealthboxIDs[gActiveBattler ^ 2], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ 2]], 0);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler ^ 2], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ 2]], 0);
sub_804777C(gActiveBattler ^ 2);
sub_8043DFC(gHealthboxIDs[gActiveBattler ^ 2]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler ^ 2]);
}
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler]]);
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 0);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 0);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
(s8)ewram17810[4].unk9 &= ~1;
gBattleBankFunc[gActiveBattler] = sub_811DBC0;
gBattlerControllerFuncs[gActiveBattler] = sub_811DBC0;
}
}
}
void sub_811DDE8(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].animEnded
&& gSprites[gBankSpriteIds[gActiveBattler]].pos2.x == 0)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
LinkPartnerBufferExecCompleted();
}
@ -344,11 +344,11 @@ void bx_t3_healthbar_update(void)
{
s16 r4;
r4 = sub_8045C78(gActiveBattler, gHealthboxIDs[gActiveBattler], 0, 0);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
r4 = sub_8045C78(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], 0, 0);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
if (r4 != -1)
{
sub_80440EC(gHealthboxIDs[gActiveBattler], r4, 0);
sub_80440EC(gHealthboxSpriteIds[gActiveBattler], r4, 0);
}
else
{
@ -359,12 +359,12 @@ void bx_t3_healthbar_update(void)
void sub_811DE98(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].pos1.y + gSprites[gBankSpriteIds[gActiveBattler]].pos2.y > 160)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > 160)
{
nullsub_9(GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
FreeOamMatrix(gSprites[gBankSpriteIds[gActiveBattler]].oam.matrixNum);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
LinkPartnerBufferExecCompleted();
}
}
@ -373,9 +373,9 @@ void sub_811DF34(void)
{
if (!ewram17810[gActiveBattler].unk0_6)
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
LinkPartnerBufferExecCompleted();
}
}
@ -388,7 +388,7 @@ void sub_811DFA0(void)
void bx_blink_t3(void)
{
u8 spriteId = gBankSpriteIds[gActiveBattler];
u8 spriteId = gBattlerSpriteIds[gActiveBattler];
if (gSprites[spriteId].data[1] == 32)
{
gSprites[spriteId].data[1] = 0;
@ -408,11 +408,11 @@ void bx_blink_t3(void)
void sub_811E034(void)
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
if (ewram17800[gActiveBattler].substituteSprite)
move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6);
gBattleBankFunc[gActiveBattler] = sub_811E0A0;
gBattlerControllerFuncs[gActiveBattler] = sub_811E0A0;
}
}
@ -432,12 +432,12 @@ void sub_811E0CC(void)
FreeSpritePaletteByTag(0x27F9);
CreateTask(c3_0802FDF4, 10);
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], 0);
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 0);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 0);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
sub_8031F88(gActiveBattler);
gBattleBankFunc[gActiveBattler] = sub_811E034;
gBattlerControllerFuncs[gActiveBattler] = sub_811E034;
}
}
@ -449,7 +449,7 @@ void sub_811E1BC(void)
&& !ewram17810[gActiveBattler].unk0_3)
{
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler]]);
gBattleBankFunc[gActiveBattler] = sub_811E0CC;
gBattlerControllerFuncs[gActiveBattler] = sub_811E0CC;
}
}
@ -471,7 +471,7 @@ void sub_811E29C(void)
if (gBattleTypeFlags & 2)
{
sub_800832C();
gBattleBankFunc[gActiveBattler] = sub_811E258;
gBattlerControllerFuncs[gActiveBattler] = sub_811E258;
}
else
{
@ -487,7 +487,7 @@ void LinkPartnerBufferExecCompleted(void)
{
u8 multiplayerId;
gBattleBankFunc[gActiveBattler] = LinkPartnerBufferRunCommand;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerBufferRunCommand;
if (gBattleTypeFlags & 2)
{
multiplayerId = GetMultiplayerId();
@ -496,7 +496,7 @@ void LinkPartnerBufferExecCompleted(void)
}
else
{
gBattleExecBuffer &= ~gBitTable[gActiveBattler];
gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
}
}
@ -533,7 +533,7 @@ void LinkPartnerHandleGetAttributes(void)
r4 >>= 1;
}
}
Emitcmd29(1, r6, unk);
BtlController_EmitDataTransfer(1, r6, unk);
LinkPartnerBufferExecCompleted();
}
@ -1101,16 +1101,16 @@ void LinkPartnerHandleLoadPokeSprite(void)
GetMonSpriteTemplate_803C56C(
GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES),
GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
GetBattlerSpriteCoord(gActiveBattler, 2),
sub_8077F68(gActiveBattler),
GetBattlerSubpriority(gActiveBattler));
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
gBattleBankFunc[gActiveBattler] = sub_811DDE8;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
gBattlerControllerFuncs[gActiveBattler] = sub_811DDE8;
}
void LinkPartnerHandleSendOutPoke(void)
@ -1119,7 +1119,7 @@ void LinkPartnerHandleSendOutPoke(void)
gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
BattleLoadPlayerMonSprite(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
sub_811F864(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
gBattleBankFunc[gActiveBattler] = sub_811E1BC;
gBattlerControllerFuncs[gActiveBattler] = sub_811E1BC;
}
void sub_811F864(u8 a, u8 b)
@ -1131,18 +1131,18 @@ void sub_811F864(u8 a, u8 b)
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[a]], MON_DATA_SPECIES);
gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0);
GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a));
gBankSpriteIds[a] = CreateSprite(
gBattlerSpriteIds[a] = CreateSprite(
&gUnknown_02024E8C,
GetBattlerSpriteCoord(a, 2),
sub_8077F68(a),
GetBattlerSubpriority(a));
gSprites[gUnknown_0300434C[a]].data[1] = gBankSpriteIds[a];
gSprites[gBankSpriteIds[a]].data[0] = a;
gSprites[gBankSpriteIds[a]].data[2] = species;
gSprites[gBankSpriteIds[a]].oam.paletteNum = a;
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBankSpriteIds[a]].invisible = TRUE;
gSprites[gBankSpriteIds[a]].callback = SpriteCallbackDummy;
gSprites[gUnknown_0300434C[a]].data[1] = gBattlerSpriteIds[a];
gSprites[gBattlerSpriteIds[a]].data[0] = a;
gSprites[gBattlerSpriteIds[a]].data[2] = species;
gSprites[gBattlerSpriteIds[a]].oam.paletteNum = a;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBattlerSpriteIds[a]].invisible = TRUE;
gSprites[gBattlerSpriteIds[a]].callback = SpriteCallbackDummy;
gSprites[gUnknown_0300434C[a]].data[0] = StartSendOutMonAnimation(0, 0xFF);
}
@ -1151,13 +1151,13 @@ void LinkPartnerHandleReturnPokeToBall(void)
if (gBattleBufferA[gActiveBattler][1] == 0)
{
ewram17810[gActiveBattler].unk4 = 0;
gBattleBankFunc[gActiveBattler] = sub_811FA5C;
gBattlerControllerFuncs[gActiveBattler] = sub_811FA5C;
}
else
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
LinkPartnerBufferExecCompleted();
}
}
@ -1176,7 +1176,7 @@ void sub_811FA5C(void)
{
ewram17810[gActiveBattler].unk4 = 0;
move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 1);
gBattleBankFunc[gActiveBattler] = sub_811DF34;
gBattlerControllerFuncs[gActiveBattler] = sub_811DF34;
}
break;
}
@ -1202,15 +1202,15 @@ void LinkPartnerHandleTrainerThrow(void)
}
LoadPlayerTrainerBankSprite(gender, gActiveBattler);
GetMonSpriteTemplate_803C5A0(gender, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
80 + xOffset, 80 + 4 * (8 - gTrainerBackPicCoords[gender].coords),
GetBattlerSubpriority(gActiveBattler));
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattleBankFunc[gActiveBattler] = sub_811DAE4;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattlerControllerFuncs[gActiveBattler] = sub_811DAE4;
}
void LinkPartnerHandleTrainerSlide(void)
@ -1220,13 +1220,13 @@ void LinkPartnerHandleTrainerSlide(void)
void LinkPartnerHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBattler]]);
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBankSpriteIds[gActiveBattler]].data[4] = gSprites[gBankSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBankSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBankSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattleBankFunc[gActiveBattler] = sub_811DB1C;
oamt_add_pos2_onto_pos1(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_811DB1C;
}
void LinkPartnerHandlecmd10(void)
@ -1242,10 +1242,10 @@ void LinkPartnerHandlecmd10(void)
ewram17810[gActiveBattler].unk4 = 0;
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
PlaySE12WithPanning(SE_POKE_DEAD, -64);
gSprites[gBankSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80105EC;
gBattleBankFunc[gActiveBattler] = sub_811DE98;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80105EC;
gBattlerControllerFuncs[gActiveBattler] = sub_811DE98;
}
}
@ -1289,12 +1289,12 @@ void LinkPartnerHandleMoveAnimation(void)
gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
if (sub_8031720(r0, gAnimMoveTurn) != 0)
if (IsMoveWithoutAnimation(r0, gAnimMoveTurn) != 0)
LinkPartnerBufferExecCompleted();
else
{
ewram17810[gActiveBattler].unk4 = 0;
gBattleBankFunc[gActiveBattler] = sub_811FF30;
gBattlerControllerFuncs[gActiveBattler] = sub_811FF30;
}
}
}
@ -1356,7 +1356,7 @@ void LinkPartnerHandlePrintString(void)
gBattle_BG0_Y = 0;
BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gBattleBankFunc[gActiveBattler] = sub_811DFA0;
gBattlerControllerFuncs[gActiveBattler] = sub_811DFA0;
}
void LinkPartnerHandlePrintStringPlayerOnly(void)
@ -1405,15 +1405,15 @@ void LinkPartnerHandleHealthBarUpdate(void)
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
u32 hp = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, hp, r7);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, hp, r7);
}
else
{
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, 0, r7);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, r7);
}
gBattleBankFunc[gActiveBattler] = bx_t3_healthbar_update;
gBattlerControllerFuncs[gActiveBattler] = bx_t3_healthbar_update;
}
void LinkPartnerHandleExpBarUpdate(void)
@ -1425,9 +1425,9 @@ void LinkPartnerHandleStatusIconUpdate(void)
{
if (mplay_80342A4(gActiveBattler) == 0)
{
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 9);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 9);
ewram17810[gActiveBattler].unk0_4 = 0;
gBattleBankFunc[gActiveBattler] = sub_811E38C;
gBattlerControllerFuncs[gActiveBattler] = sub_811E38C;
}
}
@ -1441,7 +1441,7 @@ void LinkPartnerHandleStatusAnimation(void)
| (gBattleBufferA[gActiveBattler][3] << 8)
| (gBattleBufferA[gActiveBattler][4] << 16)
| (gBattleBufferA[gActiveBattler][5] << 24));
gBattleBankFunc[gActiveBattler] = sub_811E38C;
gBattlerControllerFuncs[gActiveBattler] = sub_811E38C;
}
}
@ -1516,16 +1516,16 @@ void LinkPartnerHandlecmd40(void)
void LinkPartnerHandleHitAnimation(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].invisible == TRUE)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
{
LinkPartnerBufferExecCompleted();
}
else
{
gDoingBattleAnim = TRUE;
gSprites[gBankSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
sub_8047858(gActiveBattler);
gBattleBankFunc[gActiveBattler] = bx_blink_t3;
gBattlerControllerFuncs[gActiveBattler] = bx_blink_t3;
}
}
@ -1572,25 +1572,25 @@ void LinkPartnerHandleTrainerBallThrow(void)
u8 r4;
u8 taskId;
oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBattler]]);
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBankSpriteIds[gActiveBattler]].data[4] = gSprites[gBankSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBankSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBankSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData(&gSprites[gBankSpriteIds[gActiveBattler]], sub_8030E38);
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], 1);
oamt_add_pos2_onto_pos1(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_8030E38);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
r4 = AllocSpritePalette(0xD6F9);
LoadCompressedPalette(
gTrainerBackPicPaletteTable[gLinkPlayers[sub_803FC34(gActiveBattler)].gender].data,
0x100 + r4 * 16, 0x20);
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = r4;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = r4;
taskId = CreateTask(sub_812071C, 5);
gTasks[taskId].data[0] = gActiveBattler;
if (ewram17810[gActiveBattler].unk0_0)
gTasks[gUnknown_02024E68[gActiveBattler]].func = sub_8044CA0;
ewram17840.unk9_0 = 1;
gBattleBankFunc[gActiveBattler] = nullsub_74;
gBattlerControllerFuncs[gActiveBattler] = nullsub_74;
}
void sub_812071C(u8 taskId)
@ -1620,7 +1620,7 @@ void sub_812071C(u8 taskId)
sub_811F864(gActiveBattler, 0);
gActiveBattler ^= 2;
}
gBattleBankFunc[gActiveBattler] = sub_811DCA0;
gBattlerControllerFuncs[gActiveBattler] = sub_811DCA0;
gActiveBattler = r9;
DestroyTask(taskId);
}
@ -1642,7 +1642,7 @@ void LinkPartnerHandlecmd48(void)
ewram17810[gActiveBattler].unk5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
ewram17810[gActiveBattler].unk5 = 0x5D;
gBattleBankFunc[gActiveBattler] = sub_81208E0;
gBattlerControllerFuncs[gActiveBattler] = sub_81208E0;
}
void sub_81208E0(void)
@ -1670,7 +1670,7 @@ void LinkPartnerHandleSpriteInvisibility(void)
{
if (IsBankSpritePresent(gActiveBattler) != 0)
{
gSprites[gBankSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
sub_8031F88(gActiveBattler);
}
LinkPartnerBufferExecCompleted();
@ -1686,7 +1686,7 @@ void LinkPartnerHandleBattleAnimation(void)
if (move_anim_start_t3(gActiveBattler, gActiveBattler, gActiveBattler, r3, r4) != 0)
LinkPartnerBufferExecCompleted();
else
gBattleBankFunc[gActiveBattler] = sub_811E3B8;
gBattlerControllerFuncs[gActiveBattler] = sub_811E3B8;
}
}
@ -1706,7 +1706,7 @@ void LinkPartnerHandlecmd55(void)
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
LinkPartnerBufferExecCompleted();
gBattleBankFunc[gActiveBattler] = sub_811E29C;
gBattlerControllerFuncs[gActiveBattler] = sub_811E29C;
}
void LinkPartnerHandlecmd56(void)

View File

@ -35,12 +35,12 @@ extern u8 gUnknown_02023A14_50;
extern u8 gActiveBattler;
extern u8 gBattleBufferA[][0x200];
extern u16 gBattlerPartyIndexes[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u8 gBattleMonForms[];
extern struct SpriteTemplate gUnknown_02024E8C;
extern void (*gBattleBankFunc[])(void);
extern void (*gBattlerControllerFuncs[])(void);
extern u8 gUnknown_0300434C[];
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
extern u16 gBattleTypeFlags;
extern u16 gTrainerBattleOpponent;
extern s32 gAnimMoveDmg;
@ -53,7 +53,7 @@ extern u8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
extern struct Window gUnknown_03004210;
extern u8 gDisplayedStringBattle[];
extern u8 gBankTarget;
extern u8 gBattlerTarget;
extern u8 gAbsentBattlerFlags;
extern bool8 gDoingBattleAnim;
extern u16 gUnknown_02024DE8;
@ -63,7 +63,7 @@ extern void (*const gOpponentBufferCommands[])(void);
extern struct MusicPlayerInfo gMPlay_SE1;
extern struct MusicPlayerInfo gMPlay_SE2;
extern struct MusicPlayerInfo gMPlay_BGM;
extern u32 gBattleExecBuffer;
extern u32 gBattleControllerExecFlags;
extern u8 GetBattlerSpriteCoord();
extern u8 sub_8077F68();
@ -90,7 +90,7 @@ extern void StoreSpriteCallbackInData();
extern void sub_803311C(void);
extern void sub_8010384(struct Sprite *);
extern bool8 mplay_80342A4(u8);
extern u8 sub_8031720();
extern u8 IsMoveWithoutAnimation();
extern void DoMoveAnim();
extern void sub_80326EC();
extern void sub_8031F24(void);
@ -262,12 +262,12 @@ void nullsub_45(void)
void SetBankFuncToOpponentBufferRunCommand(void)
{
gBattleBankFunc[gActiveBattler] = OpponentBufferRunCommand;
gBattlerControllerFuncs[gActiveBattler] = OpponentBufferRunCommand;
}
void OpponentBufferRunCommand(void)
{
if (gBattleExecBuffer & gBitTable[gActiveBattler])
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
if (gBattleBufferA[gActiveBattler][0] <= 0x38)
gOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
@ -278,25 +278,25 @@ void OpponentBufferRunCommand(void)
void sub_8032B4C(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
OpponentBufferExecCompleted();
}
// Duplicate of sub_8032B4C
void sub_8032B84(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
OpponentBufferExecCompleted();
}
void sub_8032BBC(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
sub_8031B74(gSprites[gBankSpriteIds[gActiveBattler]].oam.affineParam);
gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum = gSprites[gBankSpriteIds[gActiveBattler]].data[5];
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
sub_8031B74(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = gSprites[gBattlerSpriteIds[gActiveBattler]].data[5];
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
OpponentBufferExecCompleted();
}
}
@ -316,13 +316,13 @@ void sub_8032C88(void)
if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
r6 = TRUE;
}
else
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxIDs[gActiveBattler ^ 2]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gHealthboxSpriteIds[gActiveBattler ^ 2]].callback == SpriteCallbackDummy)
r6 = TRUE;
}
if (IsCryPlayingOrClearCrySongs())
@ -341,7 +341,7 @@ void sub_8032C88(void)
else
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
ewram17810[gActiveBattler].unk9 = 3;
gBattleBankFunc[gActiveBattler] = sub_8032C4C;
gBattlerControllerFuncs[gActiveBattler] = sub_8032C4C;
}
}
@ -357,35 +357,35 @@ void sub_8032E2C(void)
{
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler ^ 2]]);
sub_8045A5C(
gHealthboxIDs[gActiveBattler ^ 2],
gHealthboxSpriteIds[gActiveBattler ^ 2],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ 2]],
0);
sub_804777C(gActiveBattler ^ 2);
sub_8043DFC(gHealthboxIDs[gActiveBattler ^ 2]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler ^ 2]);
sub_8032984(
gActiveBattler ^ 2,
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ 2]], MON_DATA_SPECIES));
}
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler]]);
sub_8045A5C(
gHealthboxIDs[gActiveBattler],
gHealthboxSpriteIds[gActiveBattler],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]],
0);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
sub_8032984(
gActiveBattler,
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
ewram17840.unk9_0 = 0;
gBattleBankFunc[gActiveBattler] = sub_8032C88;
gBattlerControllerFuncs[gActiveBattler] = sub_8032C88;
}
}
void sub_8033018(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].animEnded == TRUE
&& gSprites[gBankSpriteIds[gActiveBattler]].pos2.x == 0)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE
&& gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0)
{
if (!ewram17810[gActiveBattler].unk0_7)
{
@ -406,20 +406,20 @@ void sub_8033018(void)
void sub_80330C8(void)
{
s16 r4 = sub_8045C78(gActiveBattler, gHealthboxIDs[gActiveBattler], 0, 0);
s16 r4 = sub_8045C78(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], 0, 0);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
if (r4 != -1)
sub_80440EC(gHealthboxIDs[gActiveBattler], r4, 0);
sub_80440EC(gHealthboxSpriteIds[gActiveBattler], r4, 0);
else
OpponentBufferExecCompleted();
}
void sub_803311C(void)
{
if (!gSprites[gBankSpriteIds[gActiveBattler]].inUse)
if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse)
{
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
OpponentBufferExecCompleted();
}
}
@ -428,10 +428,10 @@ void sub_8033160(void)
{
if (!ewram17810[gActiveBattler].unk0_6)
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8032A08(gActiveBattler);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
OpponentBufferExecCompleted();
}
}
@ -444,7 +444,7 @@ void sub_80331D0(void)
void bx_blink_t7(void)
{
u8 spriteId = gBankSpriteIds[gActiveBattler];
u8 spriteId = gBattlerSpriteIds[gActiveBattler];
if (gSprites[spriteId].data[1] == 32)
{
@ -463,11 +463,11 @@ void bx_blink_t7(void)
void sub_8033264(void)
{
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
{
if (ewram17800[gActiveBattler].substituteSprite)
move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6);
gBattleBankFunc[gActiveBattler] = sub_80332D0;
gBattlerControllerFuncs[gActiveBattler] = sub_80332D0;
}
}
@ -488,15 +488,15 @@ void sub_8033308(void)
ewram17810[gActiveBattler].unk1_0 = 0;
FreeSpriteTilesByTag(0x27F9);
FreeSpritePaletteByTag(0x27F9);
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], 0);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0);
sub_8045A5C(
gHealthboxIDs[gActiveBattler],
gHealthboxSpriteIds[gActiveBattler],
&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]],
0);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
sub_8031F88(gActiveBattler);
gBattleBankFunc[gActiveBattler] = sub_8033264;
gBattlerControllerFuncs[gActiveBattler] = sub_8033264;
}
}
@ -509,7 +509,7 @@ void sub_80333D4(void)
{
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler]]);
sub_8032984(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattleBankFunc[gActiveBattler] = sub_8033308;
gBattlerControllerFuncs[gActiveBattler] = sub_8033308;
}
}
@ -527,8 +527,8 @@ void sub_80334C0(void)
void OpponentBufferExecCompleted(void)
{
gBattleBankFunc[gActiveBattler] = OpponentBufferRunCommand;
gBattleExecBuffer &= ~gBitTable[gActiveBattler];
gBattlerControllerFuncs[gActiveBattler] = OpponentBufferRunCommand;
gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
}
void OpponentHandleGetAttributes(void)
@ -552,7 +552,7 @@ void OpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
Emitcmd29(1, r6, buffer);
BtlController_EmitDataTransfer(1, r6, buffer);
OpponentBufferExecCompleted();
}
@ -866,7 +866,7 @@ void OpponentHandlecmd1(void)
u8 *dst;
MEMSET_ALT(&buffer + gBattleBufferA[gActiveBattler][1], src[i], gBattleBufferA[gActiveBattler][2], i, dst);
Emitcmd29(1, gBattleBufferA[gActiveBattler][2], dst);
BtlController_EmitDataTransfer(1, gBattleBufferA[gActiveBattler][2], dst);
OpponentBufferExecCompleted();
}
@ -1124,18 +1124,18 @@ void OpponentHandleLoadPokeSprite(void)
BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
GetBattlerSpriteCoord(gActiveBattler, 2),
sub_8077F68(gActiveBattler),
GetBattlerSubpriority(gActiveBattler));
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = species;
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]);
sub_8032984(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES));
gBattleBankFunc[gActiveBattler] = sub_8033018;
gBattlerControllerFuncs[gActiveBattler] = sub_8033018;
}
void OpponentHandleSendOutPoke(void)
@ -1143,7 +1143,7 @@ void OpponentHandleSendOutPoke(void)
gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
sub_803495C(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
gBattleBankFunc[gActiveBattler] = sub_80333D4;
gBattlerControllerFuncs[gActiveBattler] = sub_80333D4;
}
void sub_803495C(u8 a, u8 b)
@ -1156,18 +1156,18 @@ void sub_803495C(u8 a, u8 b)
gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0);
BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[a]], a);
GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a));
gBankSpriteIds[a] = CreateSprite(
gBattlerSpriteIds[a] = CreateSprite(
&gUnknown_02024E8C,
GetBattlerSpriteCoord(a, 2),
sub_8077F68(a),
GetBattlerSubpriority(a));
gSprites[gBankSpriteIds[a]].data[0] = a;
gSprites[gBankSpriteIds[a]].data[2] = species;
gSprites[gUnknown_0300434C[a]].data[1] = gBankSpriteIds[a];
gSprites[gBankSpriteIds[a]].oam.paletteNum = a;
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBankSpriteIds[a]].invisible = TRUE;
gSprites[gBankSpriteIds[a]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[a]].data[0] = a;
gSprites[gBattlerSpriteIds[a]].data[2] = species;
gSprites[gUnknown_0300434C[a]].data[1] = gBattlerSpriteIds[a];
gSprites[gBattlerSpriteIds[a]].oam.paletteNum = a;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBattlerSpriteIds[a]].invisible = TRUE;
gSprites[gBattlerSpriteIds[a]].callback = SpriteCallbackDummy;
gSprites[gUnknown_0300434C[a]].data[0] = StartSendOutMonAnimation(0, 0xFE);
}
@ -1176,14 +1176,14 @@ void OpponentHandleReturnPokeToBall(void)
if (gBattleBufferA[gActiveBattler][1] == 0)
{
ewram17810[gActiveBattler].unk4 = 0;
gBattleBankFunc[gActiveBattler] = sub_8034B74;
gBattlerControllerFuncs[gActiveBattler] = sub_8034B74;
}
else
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8032A08(gActiveBattler);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
OpponentBufferExecCompleted();
}
}
@ -1202,7 +1202,7 @@ void sub_8034B74(void)
{
ewram17810[gActiveBattler].unk4 = 0;
move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 2);
gBattleBankFunc[gActiveBattler] = sub_8033160;
gBattlerControllerFuncs[gActiveBattler] = sub_8033160;
}
break;
}
@ -1232,19 +1232,19 @@ void OpponentHandleTrainerThrow(void)
sub_8031A6C(trainerPicIndex, gActiveBattler);
GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
0xB0,
40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords),
GetBattlerSubpriority(gActiveBattler));
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag);
gSprites[gBankSpriteIds[gActiveBattler]].data[5] = gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag);
gSprites[gBankSpriteIds[gActiveBattler]].oam.affineParam = trainerPicIndex;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattleBankFunc[gActiveBattler] = sub_8032B4C;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicIndex;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattlerControllerFuncs[gActiveBattler] = sub_8032B4C;
}
void OpponentHandleTrainerSlide(void)
@ -1262,31 +1262,31 @@ void OpponentHandleTrainerSlide(void)
sub_8031A6C(trainerPicIndex, gActiveBattler);
GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
0xB0,
40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords),
0x1E);
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = 96;
gSprites[gBankSpriteIds[gActiveBattler]].pos1.x += 32;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag);
gSprites[gBankSpriteIds[gActiveBattler]].data[5] = gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBankSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag);
gSprites[gBankSpriteIds[gActiveBattler]].oam.affineParam = trainerPicIndex;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattleBankFunc[gActiveBattler] = sub_8032B84;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicIndex;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattlerControllerFuncs[gActiveBattler] = sub_8032B84;
}
void OpponentHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBattler]]);
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBankSpriteIds[gActiveBattler]].data[4] = gSprites[gBankSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBankSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBankSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattleBankFunc[gActiveBattler] = sub_8032BBC;
oamt_add_pos2_onto_pos1(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_8032BBC;
}
void OpponentHandlecmd10(void)
@ -1301,8 +1301,8 @@ void OpponentHandlecmd10(void)
{
ewram17810[gActiveBattler].unk4 = 0;
PlaySE12WithPanning(SE_POKE_DEAD, 63);
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_8010384;
gBattleBankFunc[gActiveBattler] = sub_803311C;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8010384;
gBattlerControllerFuncs[gActiveBattler] = sub_803311C;
}
}
@ -1346,15 +1346,15 @@ void OpponentHandleMoveAnimation(void)
gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
// Dead code. sub_8031720 always returns 0.
if (sub_8031720(r0, gAnimMoveTurn) != 0)
// Dead code. IsMoveWithoutAnimation always returns 0.
if (IsMoveWithoutAnimation(r0, gAnimMoveTurn) != 0)
{
OpponentBufferExecCompleted();
}
else
{
ewram17810[gActiveBattler].unk4 = 0;
gBattleBankFunc[gActiveBattler] = sub_8035238;
gBattlerControllerFuncs[gActiveBattler] = sub_8035238;
}
}
}
@ -1416,7 +1416,7 @@ void OpponentHandlePrintString(void)
gBattle_BG0_Y = 0;
BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gBattleBankFunc[gActiveBattler] = sub_80331D0;
gBattlerControllerFuncs[gActiveBattler] = sub_80331D0;
}
void OpponentHandlePrintStringPlayerOnly(void)
@ -1571,7 +1571,7 @@ void OpponentHandlecmd20(void)
mov r0, #0x1\n\
mov r1, #0xa\n\
._569:\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
._573:\n\
bl OpponentBufferExecCompleted\n\
b ._562\n\
@ -1618,7 +1618,7 @@ void OpponentHandlecmd20(void)
and r0, r0, r1\n\
cmp r0, #0\n\
beq ._570 @cond_branch\n\
ldr r1, ._574 + 4 @ gBankTarget\n\
ldr r1, ._574 + 4 @ gBattlerTarget\n\
ldrb r0, [r6]\n\
strb r0, [r1]\n\
._570:\n\
@ -1634,7 +1634,7 @@ void OpponentHandlecmd20(void)
beq ._572 @cond_branch\n\
mov r0, #0x0\n\
bl GetBattlerAtPosition\n\
ldr r5, ._574 + 4 @ gBankTarget\n\
ldr r5, ._574 + 4 @ gBattlerTarget\n\
strb r0, [r5]\n\
ldr r0, ._574 + 8 @ gAbsentBattlerFlags\n\
ldrb r1, [r0]\n\
@ -1650,19 +1650,19 @@ void OpponentHandlecmd20(void)
bl GetBattlerAtPosition\n\
strb r0, [r5]\n\
._572:\n\
ldr r0, ._574 + 4 @ gBankTarget\n\
ldr r0, ._574 + 4 @ gBattlerTarget\n\
ldrb r2, [r0]\n\
lsl r2, r2, #0x8\n\
orr r2, r2, r4\n\
mov r0, #0x1\n\
mov r1, #0xa\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
b ._573\n\
._575:\n\
.align 2, 0\n\
._574:\n\
.word gBattleMoves\n\
.word gBankTarget\n\
.word gBattlerTarget\n\
.word gAbsentBattlerFlags\n\
.word gBitTable\n\
._563:\n\
@ -1716,7 +1716,7 @@ void OpponentHandlecmd20(void)
orr r2, r2, r4\n\
mov r0, #0x1\n\
mov r1, #0xa\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
b ._582\n\
._584:\n\
.align 2, 0\n\
@ -1731,7 +1731,7 @@ void OpponentHandlecmd20(void)
orr r2, r2, r4\n\
mov r0, #0x1\n\
mov r1, #0xa\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
._582:\n\
bl OpponentBufferExecCompleted\n\
._562:\n\
@ -1758,22 +1758,22 @@ void OpponentHandlecmd20(void)
switch (r4)
{
case 5:
Emitcmd33(1, 4, 0);
BtlController_EmitTwoReturnValues(1, 4, 0);
break;
case 4:
Emitcmd33(1, 3, 0);
BtlController_EmitTwoReturnValues(1, 3, 0);
break;
default:
if (gBattleMoves[r5->moves[r4]].target & 0x12)
gBankTarget = gActiveBattler;
gBattlerTarget = gActiveBattler;
if (gBattleMoves[r5->moves[r4]].target & 8)
{
gBankTarget = GetBattlerAtPosition(0);
if (gAbsentBattlerFlags & gBitTable[gBankTarget])
gBankTarget = GetBattlerAtPosition(2);
gBattlerTarget = GetBattlerAtPosition(0);
if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
gBattlerTarget = GetBattlerAtPosition(2);
}
r4 |= gBankTarget << 8;
Emitcmd33(1, 10, r4);
r4 |= gBattlerTarget << 8;
BtlController_EmitTwoReturnValues(1, 10, r4);
break;
}
OpponentBufferExecCompleted();
@ -1792,19 +1792,19 @@ void OpponentHandlecmd20(void)
if (gBattleMoves[r2].target & 0x12)
{
r4 |= gActiveBattler << 8;
Emitcmd33(1, 10, r4);
BtlController_EmitTwoReturnValues(1, 10, r4);
}
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u16 r2 = GetBattlerAtPosition(Random() & 2) << 8;
Emitcmd33(1, 10, r4 | r2);
BtlController_EmitTwoReturnValues(1, 10, r4 | r2);
}
else
{
u16 r2 = GetBattlerAtPosition(0) << 8;
Emitcmd33(1, 10, r4 | r2);
BtlController_EmitTwoReturnValues(1, 10, r4 | r2);
}
OpponentBufferExecCompleted();
}
@ -1847,7 +1847,7 @@ _08035468:\n\
movs r1, 0x3\n\
_0803546C:\n\
movs r2, 0\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
b _080354E0\n\
_08035474:\n\
ldr r3, _080354E8 @ =gBattleMoves\n\
@ -1863,7 +1863,7 @@ _08035474:\n\
ands r0, r1\n\
cmp r0, 0\n\
beq _08035494\n\
ldr r1, _080354EC @ =gBankTarget\n\
ldr r1, _080354EC @ =gBattlerTarget\n\
ldrb r0, [r6]\n\
strb r0, [r1]\n\
_08035494:\n\
@ -1879,7 +1879,7 @@ _08035494:\n\
beq _080354CE\n\
movs r0, 0\n\
bl GetBattlerAtPosition\n\
ldr r5, _080354EC @ =gBankTarget\n\
ldr r5, _080354EC @ =gBattlerTarget\n\
strb r0, [r5]\n\
ldr r0, _080354F0 @ =gAbsentBattlerFlags\n\
ldrb r1, [r0]\n\
@ -1895,20 +1895,20 @@ _08035494:\n\
bl GetBattlerAtPosition\n\
strb r0, [r5]\n\
_080354CE:\n\
ldr r0, _080354EC @ =gBankTarget\n\
ldr r0, _080354EC @ =gBattlerTarget\n\
ldrb r0, [r0]\n\
lsls r0, 8\n\
orrs r4, r0\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
_080354E0:\n\
bl OpponentBufferExecCompleted\n\
b _0803558A\n\
.align 2, 0\n\
_080354E8: .4byte gBattleMoves\n\
_080354EC: .4byte gBankTarget\n\
_080354EC: .4byte gBattlerTarget\n\
_080354F0: .4byte gAbsentBattlerFlags\n\
_080354F4: .4byte gBitTable\n\
_080354F8:\n\
@ -1939,7 +1939,7 @@ _080354FA:\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
b _08035586\n\
.align 2, 0\n\
_08035534: .4byte gBattleMoves\n\
@ -1964,7 +1964,7 @@ _0803553C:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
b _08035586\n\
.align 2, 0\n\
_0803556C: .4byte gBattleTypeFlags\n\
@ -1977,7 +1977,7 @@ _08035570:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
bl Emitcmd33\n\
bl BtlController_EmitTwoReturnValues\n\
_08035586:\n\
bl OpponentBufferExecCompleted\n\
_0803558A:\n\
@ -1992,7 +1992,7 @@ _0803558A:\n\
void OpponentHandleOpenBag(void)
{
// What is this?
Emitcmd35(1, ewram160D4(gActiveBattler));
BtlController_EmitOneReturnValue(1, ewram160D4(gActiveBattler));
OpponentBufferExecCompleted();
}
@ -2033,7 +2033,7 @@ void OpponentHandlecmd22(void)
ewram160C8arr(GetBattlerPosition(gActiveBattler)) = 6;
}
ewram16068arr(gActiveBattler) = r4;
Emitcmd34(1, r4, 0);
BtlController_EmitChosenMonReturnValue(1, r4, 0);
OpponentBufferExecCompleted();
}
@ -2053,15 +2053,15 @@ void OpponentHandleHealthBarUpdate(void)
u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
u32 hp = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, hp, r7);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, hp, r7);
}
else
{
u32 maxHP = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, 0, r7);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, r7);
}
gBattleBankFunc[gActiveBattler] = sub_80330C8;
gBattlerControllerFuncs[gActiveBattler] = sub_80330C8;
}
void OpponentHandleExpBarUpdate(void)
@ -2073,9 +2073,9 @@ void OpponentHandleStatusIconUpdate(void)
{
if (mplay_80342A4(gActiveBattler) == 0)
{
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], 9);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], 9);
ewram17810[gActiveBattler].unk0_4 = 0;
gBattleBankFunc[gActiveBattler] = sub_8033494;
gBattlerControllerFuncs[gActiveBattler] = sub_8033494;
}
}
@ -2089,7 +2089,7 @@ void OpponentHandleStatusAnimation(void)
| (gBattleBufferA[gActiveBattler][3] << 8)
| (gBattleBufferA[gActiveBattler][4] << 16)
| (gBattleBufferA[gActiveBattler][5] << 24));
gBattleBankFunc[gActiveBattler] = sub_8033494;
gBattlerControllerFuncs[gActiveBattler] = sub_8033494;
}
}
@ -2164,16 +2164,16 @@ void OpponentHandlecmd40(void)
void OpponentHandleHitAnimation(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].invisible == TRUE)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
{
OpponentBufferExecCompleted();
}
else
{
gDoingBattleAnim = TRUE;
gSprites[gBankSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
sub_8047858(gActiveBattler);
gBattleBankFunc[gActiveBattler] = bx_blink_t7;
gBattlerControllerFuncs[gActiveBattler] = bx_blink_t7;
}
}
@ -2219,18 +2219,18 @@ void OpponentHandleTrainerBallThrow(void)
{
u8 taskId;
oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBattler]]);
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBankSpriteIds[gActiveBattler]].data[4] = gSprites[gBankSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBankSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBankSpriteIds[gActiveBattler]], sub_8035C10);
oamt_add_pos2_onto_pos1(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_8035C10);
taskId = CreateTask(sub_8035C44, 5);
gTasks[taskId].data[0] = gActiveBattler;
if (ewram17810[gActiveBattler].unk0_0)
gTasks[gUnknown_02024E68[gActiveBattler]].func = sub_8044CA0;
ewram17840.unk9_0 = 1;
gBattleBankFunc[gActiveBattler] = nullsub_45;
gBattlerControllerFuncs[gActiveBattler] = nullsub_45;
}
void sub_8035C10(struct Sprite *sprite)
@ -2261,7 +2261,7 @@ void sub_8035C44(u8 taskId)
sub_803495C(gActiveBattler, 0);
gActiveBattler ^= 2;
}
gBattleBankFunc[gActiveBattler] = sub_8032E2C;
gBattlerControllerFuncs[gActiveBattler] = sub_8032E2C;
gActiveBattler = r9;
DestroyTask(taskId);
}
@ -2295,7 +2295,7 @@ void OpponentHandlecmd48(void)
ewram17810[gActiveBattler].unk5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
ewram17810[gActiveBattler].unk5 = 0x5D;
gBattleBankFunc[gActiveBattler] = sub_8035E2C;
gBattlerControllerFuncs[gActiveBattler] = sub_8035E2C;
}
void sub_8035E2C(void)
@ -2323,7 +2323,7 @@ void OpponentHandleSpriteInvisibility(void)
{
if (IsBankSpritePresent(gActiveBattler) != 0)
{
gSprites[gBankSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
sub_8031F88(gActiveBattler);
}
OpponentBufferExecCompleted();
@ -2339,7 +2339,7 @@ void OpponentHandleBattleAnimation(void)
if (move_anim_start_t3(gActiveBattler, gActiveBattler, gActiveBattler, r3, r4) != 0)
OpponentBufferExecCompleted();
else
gBattleBankFunc[gActiveBattler] = sub_80334C0;
gBattlerControllerFuncs[gActiveBattler] = sub_80334C0;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -23,17 +23,17 @@ extern const u8 BattleText_PlayerMenu[];
extern u8 gActiveBattler;
extern const u8 BattleText_MenuOptionsSafari[];
extern void *gBattleBankFunc[];
extern void *gBattlerControllerFuncs[];
extern u8 gBattleBufferA[][0x200];
extern bool8 gDoingBattleAnim;
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern struct SpriteTemplate gUnknown_02024E8C;
extern u16 gBattleTypeFlags;
extern u32 gBattleExecBuffer;
extern u32 gBattleControllerExecFlags;
extern u16 gSpecialVar_ItemId;
extern MainCallback gPreBattleCallback1;
extern u8 gBankInMenu;
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
extern u16 gBattlerPartyIndexes[];
extern u16 gUnknown_02024DE8;
extern u8 gBattleOutcome;
@ -192,12 +192,12 @@ void unref_sub_812B464(void)
void SetBankFuncToSafariBufferRunCommand(void)
{
gBattleBankFunc[gActiveBattler] = SafariBufferRunCommand;
gBattlerControllerFuncs[gActiveBattler] = SafariBufferRunCommand;
}
void SafariBufferRunCommand(void)
{
if (gBattleExecBuffer & gBitTable[gActiveBattler])
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
if (gBattleBufferA[gActiveBattler][0] < 0x39)
gSafariBufferCommands[gBattleBufferA[gActiveBattler][0]]();
@ -217,16 +217,16 @@ void bx_battle_menu_t6_2(void)
switch (gActionSelectionCursor[gActiveBattler])
{
case 0:
Emitcmd33(1, 5, 0);
BtlController_EmitTwoReturnValues(1, 5, 0);
break;
case 1:
Emitcmd33(1, 6, 0);
BtlController_EmitTwoReturnValues(1, 6, 0);
break;
case 2:
Emitcmd33(1, 7, 0);
BtlController_EmitTwoReturnValues(1, 7, 0);
break;
case 3:
Emitcmd33(1, 8, 0);
BtlController_EmitTwoReturnValues(1, 8, 0);
break;
}
SafariBufferExecCompleted();
@ -286,7 +286,7 @@ void bx_battle_menu_t6_2(void)
void sub_812B65C(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
SafariBufferExecCompleted();
}
@ -316,7 +316,7 @@ void sub_812B724(void)
{
if (!gPaletteFade.active)
{
gBattleBankFunc[gActiveBattler] = sub_812B758;
gBattlerControllerFuncs[gActiveBattler] = sub_812B758;
sub_810BADC();
}
}
@ -325,7 +325,7 @@ void sub_812B758(void)
{
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{
Emitcmd35(1, gSpecialVar_ItemId);
BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId);
SafariBufferExecCompleted();
}
}
@ -338,7 +338,7 @@ void sub_812B794(void)
void SafariBufferExecCompleted(void)
{
gBattleBankFunc[gActiveBattler] = SafariBufferRunCommand;
gBattlerControllerFuncs[gActiveBattler] = SafariBufferRunCommand;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
u8 playerId = GetMultiplayerId();
@ -348,7 +348,7 @@ void SafariBufferExecCompleted(void)
}
else
{
gBattleExecBuffer &= ~gBitTable[gActiveBattler];
gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
}
}
@ -397,16 +397,16 @@ void SafariHandleTrainerThrow(void)
{
LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler);
GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
80,
(8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
30);
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattleBankFunc[gActiveBattler] = sub_812B65C;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattlerControllerFuncs[gActiveBattler] = sub_812B65C;
}
void SafariHandleTrainerSlide(void)
@ -434,7 +434,7 @@ void SafariHandlecmd12(void)
ewram17840.unk8 = 4;
gDoingBattleAnim = 1;
move_anim_start_t4(gActiveBattler, gActiveBattler, GetBattlerAtPosition(1), 4);
gBattleBankFunc[gActiveBattler] = bx_wait_t6;
gBattlerControllerFuncs[gActiveBattler] = bx_wait_t6;
}
void SafariHandleBallThrow(void)
@ -444,7 +444,7 @@ void SafariHandleBallThrow(void)
ewram17840.unk8 = var;
gDoingBattleAnim = 1;
move_anim_start_t4(gActiveBattler, gActiveBattler, GetBattlerAtPosition(1), 4);
gBattleBankFunc[gActiveBattler] = bx_wait_t6;
gBattlerControllerFuncs[gActiveBattler] = bx_wait_t6;
}
// TODO: spell Pause correctly
@ -464,7 +464,7 @@ void SafariHandlePrintString(void)
gBattle_BG0_Y = 0;
BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gBattleBankFunc[gActiveBattler] = sub_812B694;
gBattlerControllerFuncs[gActiveBattler] = sub_812B694;
}
void SafariHandlePrintStringPlayerOnly(void)
@ -484,7 +484,7 @@ void SafariHandlecmd18(void)
gUnknown_03004210.paletteNum = 0;
Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
gBattleBankFunc[gActiveBattler] = bx_battle_menu_t6_2;
gBattlerControllerFuncs[gActiveBattler] = bx_battle_menu_t6_2;
Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35);
Text_PrintWindow8002F44(&gUnknown_03004210);
@ -494,7 +494,7 @@ void SafariHandlecmd18(void)
nullsub_8(i);
sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0);
StrCpyDecodeToDisplayedStringBattle(BattleText_PlayerMenu);
BattleStringExpandPlaceholdersToDisplayedString(BattleText_PlayerMenu);
Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35);
Text_PrintWindow8002F44(&gUnknown_03004210);
@ -513,7 +513,7 @@ void SafariHandlecmd20(void)
void SafariHandleOpenBag(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
gBattleBankFunc[gActiveBattler] = sub_812B724;
gBattlerControllerFuncs[gActiveBattler] = sub_812B724;
gBankInMenu = gActiveBattler;
}
@ -539,7 +539,7 @@ void SafariHandleExpBarUpdate(void)
void SafariHandleStatusIconUpdate(void)
{
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 11);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 11);
SafariBufferExecCompleted();
}
@ -658,9 +658,9 @@ void SafariHandleIntroSlide(void)
void SafariHandleTrainerBallThrow(void)
{
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 10);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 10);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
SafariBufferExecCompleted();
}
@ -692,7 +692,7 @@ void SafariHandleBattleAnimation(void)
if (move_anim_start_t3(gActiveBattler, gActiveBattler, gActiveBattler, r3, r4) != 0)
SafariBufferExecCompleted();
else
gBattleBankFunc[gActiveBattler] = sub_812B794;
gBattlerControllerFuncs[gActiveBattler] = sub_812B794;
}
void SafariHandleLinkStandbyMsg(void)
@ -712,7 +712,7 @@ void SafariHandlecmd55(void)
BeginFastPaletteFade(3);
SafariBufferExecCompleted();
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
gBattleBankFunc[gActiveBattler] = sub_812B6AC;
gBattlerControllerFuncs[gActiveBattler] = sub_812B6AC;
}
void SafariHandlecmd56(void)

View File

@ -29,14 +29,14 @@ struct MovePpInfo
};
extern u8 gActiveBattler;
extern void (*gBattleBankFunc[])(void);
extern u32 gBattleExecBuffer;
extern void (*gBattlerControllerFuncs[])(void);
extern u32 gBattleControllerExecFlags;
extern u8 gBattleBufferA[][0x200];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern MainCallback gPreBattleCallback1;
extern bool8 gDoingBattleAnim;
extern u16 gBattlerPartyIndexes[];
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
extern u16 gBattleTypeFlags;
extern u16 gAnimMovePower;
extern s32 gAnimMoveDmg;
@ -59,8 +59,8 @@ extern const u8 BattleText_WallyMenu[];
extern const u8 BattleText_MenuOptions[];
// TODO: include rom3.h when my other PR gets merged
extern void Emitcmd33(u8, u8, u16);
extern void Emitcmd35(u8, u16);
extern void BtlController_EmitTwoReturnValues(u8, u8, u16);
extern void BtlController_EmitOneReturnValue(u8, u16);
extern void nullsub_14(void);
extern void PrepareBagForWallyTutorial(void);
@ -74,7 +74,7 @@ extern void LoadPlayerTrainerBankSprite();
extern u8 GetBattlerPosition(u8);
extern void sub_80313A0(struct Sprite *);
extern u8 GetBattlerAtPosition(u8);
extern u8 sub_8031720();
extern u8 IsMoveWithoutAnimation();
extern void DoMoveAnim();
extern void sub_80326EC();
extern void sub_8031F24(void);
@ -116,10 +116,10 @@ void WallyHandleReturnPokeToBall(void);
void WallyHandleTrainerThrow(void);
void WallyHandleTrainerSlide(void);
void WallyHandleTrainerSlideBack(void);
void WallyHandlecmd10(void);
void WallyHandlecmd11(void);
void WallyHandlecmd12(void);
void WallyHandleBallThrow(void);
void WallyHandleFaintAnimation(void);
void WallyHandlePaletteFade(void);
void WallyHandleSuccessBallThrowAnim(void);
void WallyHandleBallThrowAnim(void);
void WallyHandlePuase(void);
void WallyHandleMoveAnimation(void);
void WallyHandlePrintString(void);
@ -179,10 +179,10 @@ static const BattleBufferCmd gWallyBufferCommands[] =
WallyHandleTrainerThrow,
WallyHandleTrainerSlide,
WallyHandleTrainerSlideBack,
WallyHandlecmd10,
WallyHandlecmd11,
WallyHandlecmd12,
WallyHandleBallThrow,
WallyHandleFaintAnimation,
WallyHandlePaletteFade,
WallyHandleSuccessBallThrowAnim,
WallyHandleBallThrowAnim,
WallyHandlePuase,
WallyHandleMoveAnimation,
WallyHandlePrintString,
@ -236,7 +236,7 @@ void unref_sub_8137220(void)
void SetBankFuncToWallyBufferRunCommand(void)
{
gBattleBankFunc[gActiveBattler] = WallyBufferRunCommand;
gBattlerControllerFuncs[gActiveBattler] = WallyBufferRunCommand;
ewram160A8 = 0;
ewram160A9 = 0;
ewram160AA = 0;
@ -245,7 +245,7 @@ void SetBankFuncToWallyBufferRunCommand(void)
void WallyBufferRunCommand(void)
{
if (gBattleExecBuffer & gBitTable[gActiveBattler])
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
if (gBattleBufferA[gActiveBattler][0] < 0x39)
gWallyBufferCommands[gBattleBufferA[gActiveBattler][0]]();
@ -269,7 +269,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
Emitcmd33(1, 0, 0);
BtlController_EmitTwoReturnValues(1, 0, 0);
WallyBufferExecCompleted();
ewram160A8++;
ewram160A9 = r4;
@ -281,7 +281,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
Emitcmd33(1, 0, 0);
BtlController_EmitTwoReturnValues(1, 0, 0);
WallyBufferExecCompleted();
ewram160A8++;
ewram160A9 = r4;
@ -292,7 +292,7 @@ void sub_81372BC(void)
r4 = --ewram160AA;
if (r4 == 0)
{
Emitcmd33(1, 9, 0);
BtlController_EmitTwoReturnValues(1, 9, 0);
WallyBufferExecCompleted();
ewram160A8++;
ewram160A9 = r4;
@ -314,7 +314,7 @@ void sub_81372BC(void)
{
PlaySE(SE_SELECT);
DestroyMenuCursor();
Emitcmd33(1, 1, 0);
BtlController_EmitTwoReturnValues(1, 1, 0);
WallyBufferExecCompleted();
}
break;
@ -323,7 +323,7 @@ void sub_81372BC(void)
void sub_813741C(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
WallyBufferExecCompleted();
}
@ -343,7 +343,7 @@ void sub_813746C(void)
}
}
void bx_wait_t5(void)
void CompleteOnFinishedAnimation(void)
{
if (!gDoingBattleAnim)
WallyBufferExecCompleted();
@ -353,7 +353,7 @@ void sub_81374C4(void)
{
if (!gPaletteFade.active)
{
gBattleBankFunc[gActiveBattler] = sub_81374FC;
gBattlerControllerFuncs[gActiveBattler] = sub_81374FC;
nullsub_14();
PrepareBagForWallyTutorial();
}
@ -364,7 +364,7 @@ void sub_81374FC(void)
if (gMain.callback2 == BattleMainCB2
&& !gPaletteFade.active)
{
Emitcmd35(1, gSpecialVar_ItemId);
BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId);
WallyBufferExecCompleted();
}
}
@ -382,16 +382,16 @@ void sub_8137538(void)
if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler ^ 2]]);
sub_8045A5C(gHealthboxIDs[gActiveBattler ^ 2], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ 2]], 0);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler ^ 2], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ 2]], 0);
sub_804777C(gActiveBattler ^ 2);
sub_8043DFC(gHealthboxIDs[gActiveBattler ^ 2]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler ^ 2]);
}
DestroySprite(&gSprites[gUnknown_0300434C[gActiveBattler]]);
sub_8045A5C(gHealthboxIDs[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 0);
sub_8045A5C(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], 0);
sub_804777C(gActiveBattler);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
ewram17840.unk9_0 = 0;
gBattleBankFunc[gActiveBattler] = sub_81376B8;
gBattlerControllerFuncs[gActiveBattler] = sub_81376B8;
}
}
@ -399,7 +399,7 @@ void sub_81376B8(void)
{
bool8 r4 = FALSE;
if (gSprites[gHealthboxIDs[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
r4 = TRUE;
if (r4 && ewram17810[gActiveBattler].unk1_0 && ewram17810[gActiveBattler ^ 2].unk1_0)
{
@ -419,11 +419,11 @@ void sub_81377B0(void)
{
s16 r4;
r4 = sub_8045C78(gActiveBattler, gHealthboxIDs[gActiveBattler], 0, 0);
sub_8043DFC(gHealthboxIDs[gActiveBattler]);
r4 = sub_8045C78(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], 0, 0);
sub_8043DFC(gHealthboxSpriteIds[gActiveBattler]);
if (r4 != -1)
{
sub_80440EC(gHealthboxIDs[gActiveBattler], r4, 0);
sub_80440EC(gHealthboxSpriteIds[gActiveBattler], r4, 0);
}
else
{
@ -434,7 +434,7 @@ void sub_81377B0(void)
void bx_blink_t5(void)
{
u8 spriteId = gBankSpriteIds[gActiveBattler];
u8 spriteId = gBattlerSpriteIds[gActiveBattler];
if (gSprites[spriteId].data[1] == 32)
{
@ -455,17 +455,17 @@ void sub_813789C(void)
{
if (!ewram17810[gActiveBattler].unk0_6)
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
WallyBufferExecCompleted();
}
}
// Duplicate of sub_813741C
void sub_8137908(void)
void CompleteOnBankSpriteCallbackDummy2(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
WallyBufferExecCompleted();
}
@ -477,7 +477,7 @@ void sub_8137940(void)
void WallyBufferExecCompleted(void)
{
gBattleBankFunc[gActiveBattler] = WallyBufferRunCommand;
gBattlerControllerFuncs[gActiveBattler] = WallyBufferRunCommand;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
u8 multiplayerId = GetMultiplayerId();
@ -487,7 +487,7 @@ void WallyBufferExecCompleted(void)
}
else
{
gBattleExecBuffer &= ~gBitTable[gActiveBattler];
gBattleControllerExecFlags &= ~gBitTable[gActiveBattler];
}
}
@ -518,7 +518,7 @@ void WallyHandleGetAttributes(void)
r4 >>= 1;
}
}
Emitcmd29(1, r6, arr);
BtlController_EmitDataTransfer(1, r6, arr);
WallyBufferExecCompleted();
}
@ -1087,13 +1087,13 @@ void WallyHandleReturnPokeToBall(void)
if (gBattleBufferA[gActiveBattler][1] == 0)
{
move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 1);
gBattleBankFunc[gActiveBattler] = sub_813789C;
gBattlerControllerFuncs[gActiveBattler] = sub_813789C;
}
else
{
FreeSpriteOamMatrix(&gSprites[gBankSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBankSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxIDs[gActiveBattler]);
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
sub_8043DB0(gHealthboxSpriteIds[gActiveBattler]);
WallyBufferExecCompleted();
}
}
@ -1102,30 +1102,30 @@ void WallyHandleTrainerThrow(void)
{
LoadPlayerTrainerBankSprite(2, gActiveBattler);
GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords),
30);
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattleBankFunc[gActiveBattler] = sub_813741C;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattlerControllerFuncs[gActiveBattler] = sub_813741C;
}
void WallyHandleTrainerSlide(void)
{
LoadPlayerTrainerBankSprite(2, gActiveBattler);
GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(gActiveBattler));
gBankSpriteIds[gActiveBattler] = CreateSprite(
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_02024E8C,
80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords),
30);
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBankSpriteIds[gActiveBattler]].pos2.x = -96;
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBankSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattleBankFunc[gActiveBattler] = sub_8137908;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80313A0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2;
}
void WallyHandleTrainerSlideBack(void)
@ -1133,32 +1133,32 @@ void WallyHandleTrainerSlideBack(void)
WallyBufferExecCompleted();
}
void WallyHandlecmd10(void)
void WallyHandleFaintAnimation(void)
{
WallyBufferExecCompleted();
}
void WallyHandlecmd11(void)
void WallyHandlePaletteFade(void)
{
WallyBufferExecCompleted();
}
void WallyHandlecmd12(void)
void WallyHandleSuccessBallThrowAnim(void)
{
ewram17840.unk8 = 4;
gDoingBattleAnim = TRUE;
move_anim_start_t4(gActiveBattler, gActiveBattler, GetBattlerAtPosition(1), 4);
gBattleBankFunc[gActiveBattler] = bx_wait_t5;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedAnimation;
}
void WallyHandleBallThrow(void)
void WallyHandleBallThrowAnim(void)
{
u8 val = gBattleBufferA[gActiveBattler][1];
u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
ewram17840.unk8 = val;
ewram17840.unk8 = ballThrowCaseId;
gDoingBattleAnim = TRUE;
move_anim_start_t4(gActiveBattler, gActiveBattler, GetBattlerAtPosition(1), 4);
gBattleBankFunc[gActiveBattler] = bx_wait_t5;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedAnimation;
}
void WallyHandlePuase(void)
@ -1177,15 +1177,15 @@ void WallyHandleMoveAnimation(void)
gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
if (sub_8031720(move, gAnimMoveTurn) != 0)
if (IsMoveWithoutAnimation(move, gAnimMoveTurn) != 0)
{
// Dead code. sub_8031720 always returns 0.
// Dead code. IsMoveWithoutAnimation always returns 0.
WallyBufferExecCompleted();
}
else
{
ewram17810[gActiveBattler].unk4 = 0;
gBattleBankFunc[gActiveBattler] = sub_81390D0;
gBattlerControllerFuncs[gActiveBattler] = sub_81390D0;
}
}
@ -1245,7 +1245,7 @@ void WallyHandlePrintString(void)
DestroyMenuCursor();
BufferStringBattle(*ptr);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15);
gBattleBankFunc[gActiveBattler] = sub_8137454;
gBattlerControllerFuncs[gActiveBattler] = sub_8137454;
}
void WallyHandlePrintStringPlayerOnly(void)
@ -1265,14 +1265,14 @@ void WallyHandlecmd18(void)
gUnknown_03004210.paletteNum = 0;
Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
gBattleBankFunc[gActiveBattler] = sub_81372BC;
gBattlerControllerFuncs[gActiveBattler] = sub_81372BC;
Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35);
Text_PrintWindow8002F44(&gUnknown_03004210);
MenuCursor_Create814A5C0(0, 0xFFFF, 12, 0x2D9F, 0);
for (i = 0; i < 4; i++)
nullsub_8(i);
sub_802E3E4(0, 0);
StrCpyDecodeToDisplayedStringBattle(BattleText_WallyMenu);
BattleStringExpandPlaceholdersToDisplayedString(BattleText_WallyMenu);
#ifdef ENGLISH
Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35);
#else
@ -1301,7 +1301,7 @@ void WallyHandlecmd20(void)
{
DestroyMenuCursor();
PlaySE(SE_SELECT);
Emitcmd33(1, 10, 256);
BtlController_EmitTwoReturnValues(1, 10, 256);
WallyBufferExecCompleted();
}
break;
@ -1311,7 +1311,7 @@ void WallyHandlecmd20(void)
void WallyHandleOpenBag(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
gBattleBankFunc[gActiveBattler] = sub_81374C4;
gBattlerControllerFuncs[gActiveBattler] = sub_81374C4;
gBankInMenu = gActiveBattler;
}
@ -1336,16 +1336,16 @@ void WallyHandleHealthBarUpdate(void)
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, curHP, r7);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, r7);
}
else
{
u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP);
sub_8043D84(gActiveBattler, gHealthboxIDs[gActiveBattler], maxHP, 0, r7);
sub_80440EC(gHealthboxIDs[gActiveBattler], 0, 0);
sub_8043D84(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, r7);
sub_80440EC(gHealthboxSpriteIds[gActiveBattler], 0, 0);
}
gBattleBankFunc[gActiveBattler] = sub_81377B0;
gBattlerControllerFuncs[gActiveBattler] = sub_81377B0;
}
void WallyHandleExpBarUpdate(void)
@ -1430,16 +1430,16 @@ void WallyHandlecmd40(void)
void WallyHandleHitAnimation(void)
{
if (gSprites[gBankSpriteIds[gActiveBattler]].invisible == TRUE)
if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE)
{
WallyBufferExecCompleted();
}
else
{
gDoingBattleAnim = 1;
gSprites[gBankSpriteIds[gActiveBattler]].data[1] = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0;
sub_8047858(gActiveBattler);
gBattleBankFunc[gActiveBattler] = bx_blink_t5;
gBattlerControllerFuncs[gActiveBattler] = bx_blink_t5;
}
}
@ -1478,23 +1478,23 @@ void WallyHandleTrainerBallThrow(void)
u8 paletteNum;
u8 taskId;
oamt_add_pos2_onto_pos1(&gSprites[gBankSpriteIds[gActiveBattler]]);
gSprites[gBankSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBankSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBankSpriteIds[gActiveBattler]].data[4] = gSprites[gBankSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBankSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBankSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData(&gSprites[gBankSpriteIds[gActiveBattler]], sub_8030E38);
StartSpriteAnim(&gSprites[gBankSpriteIds[gActiveBattler]], 1);
oamt_add_pos2_onto_pos1(&gSprites[gBattlerSpriteIds[gActiveBattler]]);
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_8030E38);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[2].data, 0x100 + paletteNum * 16, 32);
gSprites[gBankSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(sub_8139A2C, 5);
gTasks[taskId].data[0] = gActiveBattler;
if (ewram17810[gActiveBattler].unk0_0)
gTasks[gUnknown_02024E68[gActiveBattler]].func = sub_8044CA0;
ewram17810[4].unk9 |= 1;
gBattleBankFunc[gActiveBattler] = nullsub_91;
gBattlerControllerFuncs[gActiveBattler] = nullsub_91;
}
void sub_81398BC(u8 bank)
@ -1506,18 +1506,18 @@ void sub_81398BC(u8 bank)
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0);
GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(bank));
gBankSpriteIds[bank] = CreateSprite(
gBattlerSpriteIds[bank] = CreateSprite(
&gUnknown_02024E8C,
GetBattlerSpriteCoord(bank, 2),
sub_8077F68(bank),
GetBattlerSubpriority(bank));
gSprites[gUnknown_0300434C[bank]].data[1] = gBankSpriteIds[bank];
gSprites[gBankSpriteIds[bank]].data[0] = bank;
gSprites[gBankSpriteIds[bank]].data[2] = species;
gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
gSprites[gBankSpriteIds[bank]].invisible = TRUE;
gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gUnknown_0300434C[bank]].data[1] = gBattlerSpriteIds[bank];
gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
gSprites[gBattlerSpriteIds[bank]].data[2] = species;
gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gUnknown_0300434C[bank]].data[0] = StartSendOutMonAnimation(0, 0xFF);
}
@ -1534,7 +1534,7 @@ void sub_8139A2C(u8 taskId)
gActiveBattler = gTasks[taskId].data[0];
gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
sub_81398BC(gActiveBattler);
gBattleBankFunc[gActiveBattler] = sub_8137538;
gBattlerControllerFuncs[gActiveBattler] = sub_8137538;
gActiveBattler = savedActiveBank;
DestroyTask(taskId);
}
@ -1577,7 +1577,7 @@ void WallyHandleBattleAnimation(void)
if (move_anim_start_t3(gActiveBattler, gActiveBattler, gActiveBattler, val2, val))
WallyBufferExecCompleted();
else
gBattleBankFunc[gActiveBattler] = sub_8137940;
gBattlerControllerFuncs[gActiveBattler] = sub_8137940;
}
void WallyHandleLinkStandbyMsg(void)
@ -1597,7 +1597,7 @@ void WallyHandlecmd55(void)
BeginFastPaletteFade(3);
WallyBufferExecCompleted();
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
gBattleBankFunc[gActiveBattler] = sub_813746C;
gBattlerControllerFuncs[gActiveBattler] = sub_813746C;
}
void WallyHandlecmd56(void)

View File

@ -28,13 +28,13 @@ extern u8 gActiveBattler;
extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[];
extern u8 gBanksBySide[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u16 gUnknown_02024DE8;
extern u8 gDoingBattleAnim;
extern u32 gTransformedPersonalities[];
extern struct Window gUnknown_03004210;
extern void (*gBattleBankFunc[])(void);
extern u8 gHealthboxIDs[];
extern void (*gBattlerControllerFuncs[])(void);
extern u8 gHealthboxSpriteIds[];
extern u8 gUnknown_0300434C[];
extern struct MusicPlayerInfo gMPlay_SE1;
extern struct MusicPlayerInfo gMPlay_SE2;
@ -198,9 +198,9 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e)
}
if (ewram17800[a].substituteSprite && sub_803163C(d) == 0)
return TRUE;
if (ewram17800[a].substituteSprite && d == 2 && gSprites[gBankSpriteIds[a]].invisible)
if (ewram17800[a].substituteSprite && d == 2 && gSprites[gBattlerSpriteIds[a]].invisible)
{
refresh_graphics_maybe(a, 1, gBankSpriteIds[a]);
refresh_graphics_maybe(a, 1, gBattlerSpriteIds[a]);
sub_80324E0(a);
return TRUE;
}
@ -262,7 +262,7 @@ void sub_80316CC(u8 taskId)
}
}
u8 sub_8031720(int unused1, int unused2)
u8 IsMoveWithoutAnimation(int unused1, int unused2)
{
return 0;
}
@ -554,9 +554,9 @@ u8 battle_load_something(u8 *pState, u8 *b)
break;
case 3:
if ((gBattleTypeFlags & 0x80) && *b == 0)
gHealthboxIDs[*b] = battle_make_oam_safari_battle();
gHealthboxSpriteIds[*b] = battle_make_oam_safari_battle();
else
gHealthboxIDs[*b] = battle_make_oam_normal_battle(*b);
gHealthboxSpriteIds[*b] = battle_make_oam_normal_battle(*b);
(*b)++;
if (*b == gBattlersCount)
{
@ -567,9 +567,9 @@ u8 battle_load_something(u8 *pState, u8 *b)
case 4:
sub_8043F44(*b);
if (gBanksBySide[*b] <= 1)
nullsub_11(gHealthboxIDs[*b], 0);
nullsub_11(gHealthboxSpriteIds[*b], 0);
else
nullsub_11(gHealthboxIDs[*b], 1);
nullsub_11(gHealthboxSpriteIds[*b], 1);
(*b)++;
if (*b == gBattlersCount)
{
@ -581,13 +581,13 @@ u8 battle_load_something(u8 *pState, u8 *b)
if (GetBattlerSide(*b) == 0)
{
if (!(gBattleTypeFlags & 0x80))
sub_8045A5C(gHealthboxIDs[*b], &gPlayerParty[gBattlerPartyIndexes[*b]], 0);
sub_8045A5C(gHealthboxSpriteIds[*b], &gPlayerParty[gBattlerPartyIndexes[*b]], 0);
}
else
{
sub_8045A5C(gHealthboxIDs[*b], &gEnemyParty[gBattlerPartyIndexes[*b]], 0);
sub_8045A5C(gHealthboxSpriteIds[*b], &gEnemyParty[gBattlerPartyIndexes[*b]], 0);
}
sub_8043DB0(gHealthboxIDs[*b]);
sub_8043DB0(gHealthboxSpriteIds[*b]);
(*b)++;
if (*b == gBattlersCount)
{
@ -621,12 +621,12 @@ void sub_8031F24(void)
s32 i;
for (i = 0; i < gBattlersCount; i++)
ewram17800[i].invisible = gSprites[gBankSpriteIds[i]].invisible;
ewram17800[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible;
}
void sub_8031F88(u8 a)
{
ewram17800[a].invisible = gSprites[gBankSpriteIds[a]].invisible;
ewram17800[a].invisible = gSprites[gBattlerSpriteIds[a]].invisible;
}
void sub_8031FC4(u8 a, u8 b, bool8 c)
@ -640,7 +640,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
if (c)
{
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], ewram17840.unk0);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[a]], ewram17840.unk0);
paletteOffset = 0x100 + a * 16;
LoadPalette(ewram16400 + ewram17840.unk0 * 32, paletteOffset, 32);
gBattleMonForms[a] = ewram17840.unk0;
@ -649,7 +649,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
BlendPalette(paletteOffset, 16, 6, RGB(31, 31, 31));
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
gSprites[gBankSpriteIds[a]].pos1.y = sub_8077F68(a);
gSprites[gBattlerSpriteIds[a]].pos1.y = sub_8077F68(a);
}
else
{
@ -702,7 +702,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
gTransformedPersonalities[a]);
}
}
DmaCopy32Defvars(3, gUnknown_081FAF4C[r10], (void *)(VRAM + 0x10000 + gSprites[gBankSpriteIds[a]].oam.tileNum * 32), 0x800);
DmaCopy32Defvars(3, gUnknown_081FAF4C[r10], (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[a]].oam.tileNum * 32), 0x800);
paletteOffset = 0x100 + a * 16;
lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue);
LZDecompressWram(lzPaletteData, gSharedMem);
@ -721,8 +721,8 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
ewram17800[a].transformedSpecies = species;
gBattleMonForms[a] = gBattleMonForms[b];
}
gSprites[gBankSpriteIds[a]].pos1.y = sub_8077F68(a);
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBattlerSpriteIds[a]].pos1.y = sub_8077F68(a);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[a]], gBattleMonForms[a]);
}
}
@ -862,15 +862,15 @@ void sub_80326EC(u8 a)
{
if (IsBankSpritePresent(i) != 0)
{
gSprites[gBankSpriteIds[i]].oam.affineMode = a;
gSprites[gBattlerSpriteIds[i]].oam.affineMode = a;
if (a == 0)
{
ewram17810[i].unk6 = gSprites[gBankSpriteIds[i]].oam.matrixNum;
gSprites[gBankSpriteIds[i]].oam.matrixNum = 0;
ewram17810[i].unk6 = gSprites[gBattlerSpriteIds[i]].oam.matrixNum;
gSprites[gBattlerSpriteIds[i]].oam.matrixNum = 0;
}
else
{
gSprites[gBankSpriteIds[i]].oam.matrixNum = ewram17810[i].unk6;
gSprites[gBattlerSpriteIds[i]].oam.matrixNum = ewram17810[i].unk6;
}
}
}
@ -896,7 +896,7 @@ void sub_80328A4(struct Sprite *sprite)
{
bool8 invisible = FALSE;
u8 r4 = sprite->data[0];
struct Sprite *r7 = &gSprites[gBankSpriteIds[r4]];
struct Sprite *r7 = &gSprites[gBattlerSpriteIds[r4]];
if (!r7->inUse || IsBankSpritePresent(r4) == 0)
{

View File

@ -426,7 +426,7 @@ extern u8 gDisplayedStringBattle[];
extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[];
extern u8 gBanksBySide[];
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
extern u16 gBattleTypeFlags;
@ -957,7 +957,7 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority)
u8 spriteId2;
u8 spriteId3;
spriteId1 = gHealthboxIDs[i];
spriteId1 = gHealthboxSpriteIds[i];
spriteId2 = gSprites[spriteId1].oam.affineParam;
spriteId3 = gSprites[spriteId1].data[5];
gSprites[spriteId1].oam.priority = priority;
@ -1006,7 +1006,7 @@ void sub_8043F44(u8 a)
break;
}
}
sub_8043E50(gHealthboxIDs[a], x, y);
sub_8043E50(gHealthboxSpriteIds[a], x, y);
}
#if ENGLISH
@ -1650,7 +1650,7 @@ void sub_804454C(void)
for (i = 0; i < gBattlersCount; i++)
{
if (gSprites[gHealthboxIDs[i]].callback == SpriteCallbackDummy
if (gSprites[gHealthboxSpriteIds[i]].callback == SpriteCallbackDummy
#if DEBUG
&& (gUnknown_020297ED != 0 || GetBattlerSide(i) != 1)
#else
@ -1672,17 +1672,17 @@ void sub_804454C(void)
if (r6 == 1)
{
spriteId = gSprites[gHealthboxIDs[i]].data[5];
spriteId = gSprites[gHealthboxSpriteIds[i]].data[5];
CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100);
sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), 0);
sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), 1);
sub_8044210(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), 0);
sub_8044210(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), 1);
}
else
{
draw_status_ailment_maybe(gHealthboxIDs[i]);
sub_8045A5C(gHealthboxIDs[i], &gPlayerParty[gBattlerPartyIndexes[i]], 5);
CpuCopy32(sub_8043CDC(0x75), OBJ_VRAM0 + 0x680 + gSprites[gHealthboxIDs[i]].oam.tileNum * 32, 32);
draw_status_ailment_maybe(gHealthboxSpriteIds[i]);
sub_8045A5C(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], 5);
CpuCopy32(sub_8043CDC(0x75), OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * 32, 32);
}
}
else
@ -1691,26 +1691,26 @@ void sub_804454C(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
{
sub_8044338(gHealthboxIDs[i], &gEnemyParty[gBattlerPartyIndexes[i]]);
sub_8044338(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]]);
}
else
{
spriteId = gSprites[gHealthboxIDs[i]].data[5];
spriteId = gSprites[gHealthboxSpriteIds[i]].data[5];
CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100);
sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_HP), 0);
sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), 1);
sub_8044210(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_HP), 0);
sub_8044210(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), 1);
}
}
else
{
draw_status_ailment_maybe(gHealthboxIDs[i]);
sub_8045A5C(gHealthboxIDs[i], &gEnemyParty[gBattlerPartyIndexes[i]], 5);
draw_status_ailment_maybe(gHealthboxSpriteIds[i]);
sub_8045A5C(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], 5);
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
sub_8045A5C(gHealthboxIDs[i], &gEnemyParty[gBattlerPartyIndexes[i]], 4);
sub_8045A5C(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], 4);
}
}
gSprites[gHealthboxIDs[i]].data[7] ^= 1;
gSprites[gHealthboxSpriteIds[i]].data[7] ^= 1;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@
#endif
// This is four lists of moves which use a different attack string in Japanese
// to the default. See the documentation for sub_8121D74 for more detail.
// to the default. See the documentation for ChooseTypeOfMoveUsedString for more detail.
const u16 gUnknown_084016BC[] =
{
MOVE_SWORDS_DANCE,
@ -156,10 +156,10 @@ extern const u8* const gBattleStringsTable[BATTLESTRINGS_NO];
extern u16 gLastUsedItem;
extern u8 gLastUsedAbility;
extern u8 gActiveBattler;
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gStringBank;
extern u8 gEffectBank;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gPotentialItemEffectBattler;
extern u8 gEffectBattler;
extern u8 gBattleTextBuff1[];
extern u8 gBattleTextBuff2[];
extern u8 gBattleTextBuff3[];
@ -193,9 +193,9 @@ extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text
extern struct StringInfoBattle* gSelectedOrderFromParty;
#define gStringInfo gSelectedOrderFromParty
void sub_8121D1C(u8* textBuff);
void sub_8121D74(u8* textBuff);
void StrCpyDecodeBattleTextBuff(u8* src, u8* dst);
void ChooseMoveUsedParticle(u8* textBuff);
void ChooseTypeOfMoveUsedString(u8* textBuff);
void ExpandBattleTextBuffPlaceholders(u8* src, u8* dst);
u8 GetBattlerSide(u8 bank);
s32 sub_803FC34(u16);
@ -220,7 +220,7 @@ void BufferStringBattle(u16 stringID)
gBattleStruct->scriptingActive = gStringInfo->scrActive;
gBattleStruct->unk1605E = gStringInfo->unk1605E;
gBattleStruct->hpScale = gStringInfo->hpScale;
gStringBank = gStringInfo->StringBank;
gPotentialItemEffectBattler = gStringInfo->StringBank;
gBattleStruct->stringMoveType = gStringInfo->moveType;
for (i = 0; i < 4; i++)
{
@ -365,12 +365,12 @@ void BufferStringBattle(u16 stringID)
}
break;
case 4: // pokemon used a move msg
sub_8121D1C(gBattleTextBuff1);
ChooseMoveUsedParticle(gBattleTextBuff1);
if (gStringInfo->currentMove > 0x162)
StringCopy(gBattleTextBuff2, gUnknown_08401674[gBattleStruct->stringMoveType]);
else
StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
sub_8121D74(gBattleTextBuff2);
ChooseTypeOfMoveUsedString(gBattleTextBuff2);
stringPtr = BattleText_OpponentUsedMove;
break;
case 5: // battle end
@ -440,15 +440,15 @@ void BufferStringBattle(u16 stringID)
}
break;
}
StrCpyDecodeToDisplayedStringBattle(stringPtr);
BattleStringExpandPlaceholdersToDisplayedString(stringPtr);
}
u32 StrCpyDecodeToDisplayedStringBattle(const u8* src)
u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src)
{
StrCpyDecodeBattle(src, gDisplayedStringBattle);
BattleStringExpandPlaceholders(src, gDisplayedStringBattle);
}
const u8* AppendStatusString(u8* src)
const u8* TryGetStatusString(u8* src)
{
u32 i;
u8 status[8];
@ -529,7 +529,7 @@ extern u8 *de_sub_8041024(s32, u32);
}
#endif
u32 StrCpyDecodeBattle(const u8* src, u8* dst)
u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
{
u32 dstID = 0; // if they used dstID, why not use srcID as well?
const u8* toCpy = NULL;
@ -546,12 +546,12 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
case 0:
if (gBattleTextBuff1[0] == 0xFD)
{
StrCpyDecodeBattleTextBuff(gBattleTextBuff1, gStringVar1);
ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gStringVar1);
toCpy = gStringVar1;
}
else
{
toCpy = AppendStatusString(gBattleTextBuff1);
toCpy = TryGetStatusString(gBattleTextBuff1);
if (toCpy == 0)
toCpy = gBattleTextBuff1;
}
@ -559,7 +559,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
case 1:
if (gBattleTextBuff2[0] == 0xFD)
{
StrCpyDecodeBattleTextBuff(gBattleTextBuff2, gStringVar2);
ExpandBattleTextBuffPlaceholders(gBattleTextBuff2, gStringVar2);
toCpy = gStringVar2;
}
else
@ -568,7 +568,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
case 42:
if (gBattleTextBuff3[0] == 0xFD)
{
StrCpyDecodeBattleTextBuff(gBattleTextBuff3, gStringVar3);
ExpandBattleTextBuffPlaceholders(gBattleTextBuff3, gStringVar3);
toCpy = gStringVar3;
}
else
@ -595,45 +595,45 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = text;
break;
case 6: // link first player poke name
GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18]], MON_DATA_NICKNAME, text);
GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 7: // link first opponent poke name
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 1]], MON_DATA_NICKNAME, text);
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id ^ 1]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 8: // link second player poke name
GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 2]], MON_DATA_NICKNAME, text);
GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id ^ 2]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 9: // link second opponent poke name
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 3]], MON_DATA_NICKNAME, text);
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id ^ 3]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 10: // attacker name with prefix, only bank 0/1
HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(gBankAttacker) & 1)])
HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) & 1)])
break;
case 11: // attacker partner name, only bank 0/1
if (GetBattlerSide(gBankAttacker) == 0)
GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
if (GetBattlerSide(gBattlerAttacker) == 0)
GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
else
GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case 12: // attacker name with prefix
HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlerPartyIndexes[gBankAttacker])
HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker])
break;
case 13: // target name with prefix
HANDLE_NICKNAME_STRING_CASE(gBankTarget, gBattlerPartyIndexes[gBankTarget])
HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
break;
case 14: // effect bank name with prefix
HANDLE_NICKNAME_STRING_CASE(gEffectBank, gBattlerPartyIndexes[gEffectBank])
HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
break;
case 15: // active bank name with prefix
HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
@ -658,9 +658,9 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
{
if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank)
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id == gPotentialItemEffectBattler)
{
StringCopy(text, gEnigmaBerries[gStringBank].name);
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
#ifdef ENGLISH
StringAppend(text, BattleText_Berry);
#else
@ -687,16 +687,16 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = gAbilityNames[gLastUsedAbility];
break;
case 21: // attacker ability
toCpy = gAbilityNames[gAbilitiesPerBank[gBankAttacker]];
toCpy = gAbilityNames[gAbilitiesPerBank[gBattlerAttacker]];
break;
case 22: // target ability
toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]];
toCpy = gAbilityNames[gAbilitiesPerBank[gBattlerTarget]];
break;
case 23: // scripting active ability
toCpy = gAbilityNames[gAbilitiesPerBank[gBattleStruct->scriptingActive]];
break;
case 24: // effect bank ability
toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]];
toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBattler]];
break;
case 25: // trainer class name
#ifdef ENGLISH
@ -744,13 +744,13 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = gLinkPlayers[multiplayerID].name;
break;
case 28: // link partner name?
toCpy = gLinkPlayers[sub_803FC34(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
toCpy = gLinkPlayers[sub_803FC34(2 ^ gLinkPlayers[multiplayerID].id)].name;
break;
case 29: // link opponent 1 name?
toCpy = gLinkPlayers[sub_803FC34(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
toCpy = gLinkPlayers[sub_803FC34(1 ^ gLinkPlayers[multiplayerID].id)].name;
break;
case 30: // link opponent 2 name?
toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].id)].name;
break;
case 31: // link scripting active name
toCpy = gLinkPlayers[sub_803FC34(gBattleStruct->scriptingActive)].name;
@ -771,37 +771,37 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
toCpy = BattleText_Someone;
break;
case 38:
if (GetBattlerSide(gBankAttacker) == 0)
if (GetBattlerSide(gBattlerAttacker) == 0)
toCpy = BattleText_Ally2;
else
toCpy = BattleText_Foe3;
break;
case 39:
if (GetBattlerSide(gBankTarget) == 0)
if (GetBattlerSide(gBattlerTarget) == 0)
toCpy = BattleText_Ally2;
else
toCpy = BattleText_Foe3;
break;
case 36:
if (GetBattlerSide(gBankAttacker) == 0)
if (GetBattlerSide(gBattlerAttacker) == 0)
toCpy = BattleText_Ally;
else
toCpy = BattleText_Foe2;
break;
case 37:
if (GetBattlerSide(gBankTarget) == 0)
if (GetBattlerSide(gBattlerTarget) == 0)
toCpy = BattleText_Ally;
else
toCpy = BattleText_Foe2;
break;
case 40:
if (GetBattlerSide(gBankAttacker) == 0)
if (GetBattlerSide(gBattlerAttacker) == 0)
toCpy = BattleText_Ally3;
else
toCpy = BattleText_Foe4;
break;
case 41:
if (GetBattlerSide(gBankTarget) == 0)
if (GetBattlerSide(gBattlerTarget) == 0)
toCpy = BattleText_Ally3;
else
toCpy = BattleText_Foe4;
@ -837,7 +837,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
#define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
void ExpandBattleTextBuffPlaceholders(u8* src, u8* dst)
{
u32 srcID = 1;
u32 value = 0;
@ -949,9 +949,9 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
{
if (hword == ITEM_ENIGMA_BERRY)
{
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank)
if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id == gPotentialItemEffectBattler)
{
StringCopy(dst, gEnigmaBerries[gStringBank].name);
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
#ifdef ENGLISH
StringAppend(dst, BattleText_Berry);
#else
@ -975,9 +975,9 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
// Loads one of two text strings into the provided buffer. This is functionally
// unused, since the value loaded into the buffer is not read; it loaded one of
// two particles (either "は" or "の") which works in tandem with sub_8121D74
// two particles (either "は" or "の") which works in tandem with ChooseTypeOfMoveUsedString
// below to effect changes in the meaning of the line.
void sub_8121D1C(u8* textBuff)
void ChooseMoveUsedParticle(u8* textBuff)
{
s32 counter = 0;
u32 i = 0;
@ -1017,7 +1017,7 @@ void sub_8121D1C(u8* textBuff)
//
// BattleText_Exclamation5 was " こうげき!" This resulted in a translation of
// "<NAME>'s <ATTACK> attack!".
void sub_8121D74(u8* dst)
void ChooseTypeOfMoveUsedString(u8* dst)
{
s32 counter = 0;
s32 i = 0;

File diff suppressed because it is too large Load Diff

View File

@ -484,7 +484,7 @@ static void Task_BattleStart(u8 taskId)
case 1:
if (IsBattleTransitionDone() == TRUE)
{
SetMainCallback2(sub_800E7C4);
SetMainCallback2(CB2_InitBattle);
RestartWildEncounterImmunitySteps();
ClearPoisonStepCounter();
DestroyTask(taskId);
@ -887,7 +887,7 @@ static void CB2_StartFirstBattle(void)
{
gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE;
gMain.savedCallback = CB2_EndFirstBattle;
SetMainCallback2(sub_800E7C4);
SetMainCallback2(CB2_InitBattle);
RestartWildEncounterImmunitySteps();
ClearPoisonStepCounter();
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);

View File

@ -1290,7 +1290,7 @@ void sub_8135534(u8 taskId)
if (IsBattleTransitionDone() == TRUE)
{
gMain.savedCallback = sub_81354CC;
SetMainCallback2(sub_800E7C4);
SetMainCallback2(CB2_InitBattle);
DestroyTask(taskId);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -784,7 +784,7 @@ static void sub_808382C(u8 taskId)
break;
}
SetMainCallback2(sub_800E7C4);
SetMainCallback2(CB2_InitBattle);
gMain.savedCallback = sub_8083958;
DestroyTask(taskId);
break;

View File

@ -44,10 +44,10 @@ extern struct MusicPlayerInfo gMPlay_SE1;
extern u8 gBattleMonForms[];
extern u8 gDisplayedStringBattle[];
extern u16 gBattleTypeFlags;
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gBanksBySide[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern struct Window gUnknown_03004210;
extern u32 gContestRngValue;
@ -533,9 +533,9 @@ u8 sub_80AB70C(u8 *a)
gBanksBySide[2] = 3;
gBanksBySide[3] = 2;
gBattleTypeFlags = 0;
gBankAttacker = 2;
gBankTarget = 3;
gBankSpriteIds[gBankAttacker] = CreateJudgeSprite();
gBattlerAttacker = 2;
gBattlerTarget = 3;
gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite();
sub_80B292C();
break;
default:
@ -912,7 +912,7 @@ void debug_sub_80BA054(u8 taskId)
gSprites[r6].pos2.x = 120;
gSprites[r6].callback = sub_80AD8FC;
gTasks[taskId].data[2] = r6;
gBankSpriteIds[gBankAttacker] = r6;
gBattlerSpriteIds[gBattlerAttacker] = r6;
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[0]++;
sContest.unk1925E = 0;
@ -1124,7 +1124,7 @@ void sub_80AC2CC(u8 taskId)
gSprites[spriteId].pos2.x = 120;
gSprites[spriteId].callback = sub_80AD8FC;
gTasks[taskId].data[2] = spriteId;
gBankSpriteIds[gBankAttacker] = spriteId;
gBattlerSpriteIds[gBattlerAttacker] = spriteId;
sub_80B0BC4(sub_80B09E4(sContest.unk19215), FALSE);
gTasks[taskId].data[0] = 4;
return;
@ -5393,14 +5393,14 @@ void sub_80B28F0(u8 a)
void sub_80B292C(void)
{
gBankSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
InitSpriteAffineAnim(&gSprites[gBankSpriteIds[gBankTarget]]);
gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]);
sub_80B2968();
}
void sub_80B2968(void)
{
struct Sprite *sprite = &gSprites[gBankSpriteIds[3]];
struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]];
sprite->pos2.x = 0;
sprite->pos2.y = 0;
@ -5415,14 +5415,14 @@ void SelectContestMoveBankTarget(u16 move)
{
case TARGET_UNK2:
case TARGET_USER:
gBankTarget = 2;
gBattlerTarget = 2;
break;
case TARGET_SELECTED_POKEMON:
case TARGET_RANDOM:
case TARGET_BOTH_ENEMIES:
case TARGET_ALL_EXCEPT_USER:
default:
gBankTarget = 3;
gBattlerTarget = 3;
break;
}
}

View File

@ -712,7 +712,7 @@ static void Task_EvolutionScene(u8 taskID)
{
sub_8024CEC();
PlayFanfare(MUS_FANFA1);
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[3]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
gTasks[taskID].tState++;
@ -729,7 +729,7 @@ static void Task_EvolutionScene(u8 taskID)
if (gUnknown_03004210.state == 0 && !IsSEPlaying())
{
sub_8024CEC();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[4]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -737,7 +737,7 @@ static void Task_EvolutionScene(u8 taskID)
case 1:
if (gUnknown_03004210.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[5]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -747,7 +747,7 @@ static void Task_EvolutionScene(u8 taskID)
break;
if (!IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[6]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tData9 = 5;
gTasks[taskID].tdata10 = 9;
@ -780,7 +780,7 @@ static void Task_EvolutionScene(u8 taskID)
if (gMain.newKeys & A_BUTTON)
{
sub_8023AD8();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
PlaySE(SE_SELECT);
if (sEvoCursorPos != 0)
@ -795,7 +795,7 @@ static void Task_EvolutionScene(u8 taskID)
if (gMain.newKeys & B_BUTTON)
{
sub_8023AD8();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
PlaySE(SE_SELECT);
gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10;
@ -821,7 +821,7 @@ static void Task_EvolutionScene(u8 taskID)
u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
if (IsHMMove2(move))
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[307]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tLearnMoveState = 11;
}
@ -834,7 +834,7 @@ static void Task_EvolutionScene(u8 taskID)
gBattleTextBuff2[4] = EOS;
RemoveMonPPBonus(mon, var);
SetMonMoveSlot(mon, gMoveToLearn, var);
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[207]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -844,7 +844,7 @@ static void Task_EvolutionScene(u8 taskID)
case 7:
if (gUnknown_03004210.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[7]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -852,20 +852,20 @@ static void Task_EvolutionScene(u8 taskID)
case 8:
if (gUnknown_03004210.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[208]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tState = 19;
}
break;
case 9:
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[8]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tData9 = 10;
gTasks[taskID].tdata10 = 0;
gTasks[taskID].tLearnMoveState = 3;
break;
case 10:
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[9]);
Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
gTasks[taskID].tState = 14;
break;
@ -1026,7 +1026,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
{
sub_8024CEC();
PlayFanfare(MUS_FANFA1);
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[3]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
gTasks[taskID].tState++;
@ -1043,7 +1043,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
sub_8024CEC();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[4]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -1051,7 +1051,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
case 1:
if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[5]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -1061,7 +1061,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
break;
if (!IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[6]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tData9 = 5;
gTasks[taskID].tdata10 = 9;
@ -1099,7 +1099,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
{
Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD);
DestroyMenuCursor();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
PlaySE(SE_SELECT);
if (sEvoCursorPos != 0)
@ -1115,7 +1115,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
{
Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD);
DestroyMenuCursor();
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
PlaySE(SE_SELECT);
gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10;
@ -1141,7 +1141,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
if (IsHMMove2(move))
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[307]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState = 11;
}
@ -1154,7 +1154,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
gBattleTextBuff2[4] = EOS;
RemoveMonPPBonus(mon, var);
SetMonMoveSlot(mon, gMoveToLearn, var);
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[207]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -1164,7 +1164,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
case 7:
if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[7]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tLearnMoveState++;
}
@ -1172,20 +1172,20 @@ static void Task_TradeEvolutionScene(u8 taskID)
case 8:
if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
{
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[208]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tState = 15;
}
break;
case 9:
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[8]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tData9 = 10;
gTasks[taskID].tdata10 = 0;
gTasks[taskID].tLearnMoveState = 3;
break;
case 10:
StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[9]);
Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
gTasks[taskID].tState = 13;
break;

View File

@ -3,8 +3,8 @@
#include "field_camera.h"
#include "fieldmap.h"
#include "metatile_behavior.h"
#include "constants/songs.h"
#include "task.h"
#include "constants/songs.h"
const u8 DoorAnimTiles_04[][0x100] =
{
@ -517,7 +517,7 @@ static s8 StartDoorAnimationTask(const struct DoorGraphics *gfx, const struct Do
}
}
static void DrawClosedDoor(const struct DoorGraphics *unused, u32 x, u32 y)
static void DrawClosedDoor(const struct DoorGraphics *gfx, u32 x, u32 y)
{
DrawClosedDoorTiles(x, y);
}
@ -553,7 +553,7 @@ static s8 cur_mapdata_get_door_x2_at(const struct DoorGraphics *gfx, u32 x, u32
if (gfx == NULL)
return -1;
else
return gfx->unk2;
return gfx->sound;
}
void unref_sub_805869C(u32 x, u32 y)

View File

@ -274,7 +274,7 @@ void LinkTestScreen(void)
void sub_8007270(u8 a1)
{
localLinkPlayer.lp_field_18 = a1;
localLinkPlayer.id = a1;
}
static void InitLocalLinkPlayer(void)

View File

@ -85,6 +85,11 @@ extern struct MapLayout * const gMapLayouts[];
extern struct MapHeader * const * const gMapGroups[];
extern s32 gMaxFlashLevel;
u16 word_3004858;
void (*gFieldCallback)(void);
u8 gUnknown_03004860;
u8 gFieldLinkPlayerCount;
EWRAM_DATA struct WarpData gLastUsedWarp = {0};
EWRAM_DATA struct WarpData gWarpDestination = {0};
EWRAM_DATA struct WarpData gFixedDiveWarp = {0};
@ -98,11 +103,6 @@ static u8 gUnknown_03000580[4];
static u16 (*gUnknown_03000584)(u32);
static u8 gUnknown_03000588;
u16 word_3004858;
extern void (*gFieldCallback)(void);
u8 gUnknown_03004860;
u8 gFieldLinkPlayerCount;
static void CB2_Overworld(void);
static u8 GetAdjustedInitialTransitionFlags(struct InitialPlayerAvatarState*, u16, u8);
static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState*, u8, u16, u8);

View File

@ -19,12 +19,12 @@
extern struct MusicPlayerInfo gMPlay_BGM;
extern u16 gBattleTypeFlags;
extern u8 gBankTarget;
extern u8 gBattlerTarget;
extern u8 gActiveBattler;
extern u16 gBattlerPartyIndexes[];
extern u8 gBankSpriteIds[];
extern u8 gBattlerSpriteIds[];
extern u8 gDoingBattleAnim;
extern u8 gHealthboxIDs[];
extern u8 gHealthboxSpriteIds[];
#define GFX_TAG_POKEBALL 55000
#define GFX_TAG_GREATBALL 55001
@ -371,7 +371,7 @@ static void SendOutMonAnimation(u8 taskId)
switch (side)
{
case 0xFF: // Player's side
gBankTarget = battler;
gBattlerTarget = battler;
gSprites[spriteId].pos1.x = 24;
gSprites[spriteId].pos1.y = 68;
gSprites[spriteId].callback = SendOutPlayerMonAnimation_Step0;
@ -379,17 +379,17 @@ static void SendOutMonAnimation(u8 taskId)
case 0xFE: // Opponent's side
gSprites[spriteId].pos1.x = GetBattlerSpriteCoord(battler, 0);
gSprites[spriteId].pos1.y = GetBattlerSpriteCoord(battler, 1) + 24;
gBankTarget = battler;
gBattlerTarget = battler;
gSprites[spriteId].data[0] = 0;
gSprites[spriteId].callback = SendOutOpponentMonAnimation_Step0;
break;
default:
gBankTarget = GetBattlerAtPosition(1);
gBattlerTarget = GetBattlerAtPosition(1);
debug = TRUE;
break;
}
gSprites[spriteId].data[6] = gBankTarget;
gSprites[spriteId].data[6] = gBattlerTarget;
if (!debug)
{
DestroyTask(taskId);
@ -397,12 +397,12 @@ static void SendOutMonAnimation(u8 taskId)
}
gSprites[spriteId].data[0] = 0x22;
gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBankTarget, 0);
gSprites[spriteId].data[4] = GetBattlerSpriteCoord(gBankTarget, 1) - 16;
gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, 0);
gSprites[spriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, 1) - 16;
gSprites[spriteId].data[5] = -40;
InitAnimArcTranslation(&gSprites[spriteId]);
gSprites[spriteId].oam.affineParam = taskId;
gTasks[taskId].data[4] = gBankTarget;
gTasks[taskId].data[4] = gBattlerTarget;
gTasks[taskId].func = TaskDummy;
PlaySE(SE_NAGERU);
}
@ -445,9 +445,9 @@ static void sub_80466F4(struct Sprite *sprite)
{
sprite->data[5] = 0;
sprite->callback = sub_8046760;
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[sprite->data[6]]], 2);
AnimateSprite(&gSprites[gBankSpriteIds[sprite->data[6]]]);
gSprites[gBankSpriteIds[sprite->data[6]]].data[1] = 0;
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->data[6]]], 2);
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->data[6]]]);
gSprites[gBattlerSpriteIds[sprite->data[6]]].data[1] = 0;
}
}
@ -456,17 +456,17 @@ static void sub_8046760(struct Sprite *sprite)
sprite->data[5]++;
if (sprite->data[5] == 11)
PlaySE(SE_SUIKOMU);
if (gSprites[gBankSpriteIds[sprite->data[6]]].affineAnimEnded)
if (gSprites[gBattlerSpriteIds[sprite->data[6]]].affineAnimEnded)
{
StartSpriteAnim(sprite, 2);
gSprites[gBankSpriteIds[sprite->data[6]]].invisible = TRUE;
gSprites[gBattlerSpriteIds[sprite->data[6]]].invisible = TRUE;
sprite->data[5] = 0;
sprite->callback = sub_80467F8;
}
else
{
gSprites[gBankSpriteIds[sprite->data[6]]].data[1] += 0x60;
gSprites[gBankSpriteIds[sprite->data[6]]].pos2.y = -gSprites[gBankSpriteIds[sprite->data[6]]].data[1] >> 8;
gSprites[gBattlerSpriteIds[sprite->data[6]]].data[1] += 0x60;
gSprites[gBattlerSpriteIds[sprite->data[6]]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->data[6]]].data[1] >> 8;
}
}
@ -754,9 +754,9 @@ static void sub_8046C78(struct Sprite *sprite)
gTasks[taskId].data[15] = 0;
}
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[sprite->data[6]]], 1);
AnimateSprite(&gSprites[gBankSpriteIds[sprite->data[6]]]);
gSprites[gBankSpriteIds[sprite->data[6]]].data[1] = 0x1000;
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->data[6]]], 1);
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->data[6]]]);
gSprites[gBattlerSpriteIds[sprite->data[6]]].data[1] = 0x1000;
}
static void sub_8046E7C(struct Sprite *sprite)
@ -773,25 +773,25 @@ static void sub_8046E9C(struct Sprite *sprite)
bool8 r7 = FALSE;
u8 r4 = sprite->data[6];
gSprites[gBankSpriteIds[r4]].invisible = FALSE;
gSprites[gBattlerSpriteIds[r4]].invisible = FALSE;
if (sprite->animEnded)
sprite->invisible = TRUE;
if (gSprites[gBankSpriteIds[r4]].affineAnimEnded)
if (gSprites[gBattlerSpriteIds[r4]].affineAnimEnded)
{
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[r4]], 0);
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[r4]], 0);
r7 = TRUE;
}
else
{
gSprites[gBankSpriteIds[r4]].data[1] -= 288;
gSprites[gBankSpriteIds[r4]].pos2.y = gSprites[gBankSpriteIds[r4]].data[1] >> 8;
gSprites[gBattlerSpriteIds[r4]].data[1] -= 288;
gSprites[gBattlerSpriteIds[r4]].pos2.y = gSprites[gBattlerSpriteIds[r4]].data[1] >> 8;
}
if (sprite->animEnded && r7)
{
s32 i;
u32 r3;
gSprites[gBankSpriteIds[r4]].pos2.y = 0;
gSprites[gBattlerSpriteIds[r4]].pos2.y = 0;
gDoingBattleAnim = 0;
ewram17810[r4].unk0_3 = 0;
FreeSpriteOamMatrix(sprite);
@ -826,8 +826,8 @@ static void sub_8046FBC(struct Sprite *sprite)
}
else if (sprite->data[4] == 315)
{
FreeOamMatrix(gSprites[gBankSpriteIds[sprite->data[6]]].oam.matrixNum);
DestroySprite(&gSprites[gBankSpriteIds[sprite->data[6]]]);
FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->data[6]]].oam.matrixNum);
DestroySprite(&gSprites[gBattlerSpriteIds[sprite->data[6]]]);
DestroySpriteAndFreeResources(sprite);
if (gMain.inBattle)
ewram17810[r7].unk0_3 = 0;
@ -1103,7 +1103,7 @@ void obj_delete_and_free_associated_resources_(struct Sprite *sprite)
void sub_804777C(u8 a)
{
struct Sprite *sprite = &gSprites[gHealthboxIDs[a]];
struct Sprite *sprite = &gSprites[gHealthboxSpriteIds[a]];
sprite->data[0] = 5;
sprite->data[1] = 0;
@ -1146,7 +1146,7 @@ void sub_8047858(u8 a)
spriteId = CreateInvisibleSpriteWithCallback(oamc_804BEB4);
gSprites[spriteId].data[0] = 1;
gSprites[spriteId].data[1] = gHealthboxIDs[a];
gSprites[spriteId].data[1] = gHealthboxSpriteIds[a];
gSprites[spriteId].callback = oamc_804BEB4;
}

View File

@ -26,8 +26,8 @@ extern u8 gActiveBattler;
extern struct BattlePokemon gBattleMons[4];
extern u16 gCurrentMove;
extern u8 gLastUsedAbility;
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gAbsentBattlerFlags;
extern u8 gXXX_CritRelated;
extern u16 gBattleWeather;
@ -67,14 +67,14 @@ u8 CountAliveMons(u8 a1)
case 1:
for (i = 0; i < 4; i++)
{
if (GetBattlerSide(i) == GetBattlerSide(gBankAttacker) && !(gAbsentBattlerFlags & gBitTable[i]))
if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
}
break;
case 2:
for (i = 0; i < 4; i++)
{
if (GetBattlerSide(i) == GetBattlerSide(gBankTarget) && !(gAbsentBattlerFlags & gBitTable[i]))
if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
}
break;

View File

@ -40,9 +40,9 @@ extern u16 gSpeciesIdToCryId[];
extern u8 gBattleTextBuff1[];
extern u8 gBattleTextBuff2[];
extern u8 gDisplayedStringBattle[];
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gStringBank;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gPotentialItemEffectBattler;
extern u8 gBankInMenu;
extern struct SpindaSpot gSpindaSpotGraphics[];
extern s8 gNatureStatTable[][5];
@ -197,10 +197,10 @@ const u8 gUnknown_082082F8[] = {1, 1, 3, 2, 4, 6};
void sub_803F324(int stat)
{
gBankTarget = gBankInMenu;
gBattlerTarget = gBankInMenu;
StringCopy(gBattleTextBuff1, gUnknown_08400F58[gUnknown_082082F8[stat]]);
StringCopy(gBattleTextBuff2, BattleText_Rose);
StrCpyDecodeToDisplayedStringBattle(BattleText_UnknownString3);
BattleStringExpandPlaceholdersToDisplayedString(BattleText_UnknownString3);
}
u8 *sub_803F378(u16 itemId)
@ -224,7 +224,7 @@ u8 *sub_803F378(u16 itemId)
itemEffect = gItemEffectTable[itemId - 13];
}
gStringBank = gBankInMenu;
gPotentialItemEffectBattler = gBankInMenu;
for (i = 0; i < 3; i++)
{
@ -238,16 +238,16 @@ u8 *sub_803F378(u16 itemId)
}
else
{
gBankAttacker = gBankInMenu;
StrCpyDecodeToDisplayedStringBattle(BattleText_GetPumped);
gBattlerAttacker = gBankInMenu;
BattleStringExpandPlaceholdersToDisplayedString(BattleText_GetPumped);
}
}
}
if (itemEffect[3] & 0x80)
{
gBankAttacker = gBankInMenu;
StrCpyDecodeToDisplayedStringBattle(BattleText_MistShroud);
gBattlerAttacker = gBankInMenu;
BattleStringExpandPlaceholdersToDisplayedString(BattleText_MistShroud);
}
return gDisplayedStringBattle;
@ -579,7 +579,7 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
bool8 sub_803FBBC(void)
{
bool8 retVal = FALSE;
switch (gLinkPlayers[GetMultiplayerId()].lp_field_18)
switch (gLinkPlayers[GetMultiplayerId()].id)
{
case 0:
case 3:
@ -596,7 +596,7 @@ bool8 sub_803FBBC(void)
bool8 sub_803FBFC(u8 id)
{
bool8 retVal = FALSE;
switch (gLinkPlayers[id].lp_field_18)
switch (gLinkPlayers[id].id)
{
case 0:
case 3:
@ -614,7 +614,7 @@ s32 sub_803FC34(u16 a1)
{
s32 id;
for (id = 0; id < MAX_LINK_PLAYERS; id++)
if (gLinkPlayers[id].lp_field_18 == a1)
if (gLinkPlayers[id].id == a1)
break;
return id;
}
@ -1314,7 +1314,7 @@ void sub_8040B8C(void)
gBattleTextBuff2[2] = gBankInMenu;
gBattleTextBuff2[3] = pokemon_order_func(gBattlerPartyIndexes[gBankInMenu]);
gBattleTextBuff2[4] = EOS;
StrCpyDecodeBattle(BattleText_PreventedSwitch, gStringVar4);
BattleStringExpandPlaceholders(BattleText_PreventedSwitch, gStringVar4);
}
void SetWildMonHeldItem(void)
@ -1360,7 +1360,7 @@ bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
u8 *sub_8040D08(void)
{
u8 id = GetMultiplayerId();
return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name;
return gLinkPlayers[sub_803FC34(gLinkPlayers[id].id ^ 2)].name;
}
const u8 gJapaneseNidoranNames[][11] = {_("ニドラン♂"), _("ニドラン♀")};

View File

@ -21,7 +21,7 @@ extern u8 gBankInMenu;
extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[];
extern u8 gActiveBattler;
extern u8 gStringBank;
extern u8 gPotentialItemEffectBattler;
extern struct BattlePokemon gBattleMons[];
extern struct BattleEnigmaBerry gEnigmaBerries[];
@ -75,7 +75,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
holdEffect = ItemId_GetHoldEffect(heldItem);
}
gStringBank = gBankInMenu;
gPotentialItemEffectBattler = gBankInMenu;
if (gMain.inBattle)
{
gActiveBattler = gBankInMenu;
@ -332,8 +332,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 mo
// I have to re-use this variable to match.
r5 = gActiveBattler;
gActiveBattler = sp34;
EmitGetAttributes(0, 0, 0);
MarkBufferBankForExecution(gActiveBattler);
BtlController_EmitGetMonData(0, 0, 0);
MarkBattlerForControllerExec(gActiveBattler);
gActiveBattler = r5;
}
}

View File

@ -17,9 +17,9 @@ extern u8 gBankInMenu;
extern u16 gBattlerPartyIndexes[4];
extern u8 gBattlersCount;
extern u16 gBattleTypeFlags;
extern u8 gBankSpriteIds[4];
extern u8 gBattlerSpriteIds[4];
extern u8 gBattleMonForms[4];
extern u8 gHealthboxIDs[4];
extern u8 gHealthboxSpriteIds[4];
bool8 LoadChosenBattleElement(u8 a0);
bool8 sub_8031C30(u8 a0);
@ -235,46 +235,46 @@ static void sub_807B184(u8 bank)
if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_HP) == 0)
return;
GetMonSpriteTemplate_803C56C(GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES), GetBattlerPosition(bank));
gBankSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank));
gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBankSpriteIds[bank]].data[0] = bank;
gSprites[gBankSpriteIds[bank]].data[2] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank));
gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
gSprites[gBattlerSpriteIds[bank]].data[2] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
}
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0)
{
GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(0));
gBankSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50,
gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50,
(8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
GetBattlerSubpriority(0));
gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBankSpriteIds[bank]].data[0] = bank;
gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
}
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0)
{
GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(0));
gBankSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50,
gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50,
(8 - gTrainerBackPicCoords[2].coords) * 4 + 80,
GetBattlerSubpriority(0));
gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBankSpriteIds[bank]].data[0] = bank;
gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
}
else
{
if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_HP) == 0)
return;
GetMonSpriteTemplate_803C56C(GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES), GetBattlerPosition(bank));
gBankSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank));
gSprites[gBankSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBankSpriteIds[bank]].data[0] = bank;
gSprites[gBankSpriteIds[bank]].data[2] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank));
gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
gSprites[gBattlerSpriteIds[bank]].data[2] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
}
gSprites[gBankSpriteIds[bank]].invisible = ewram17800[bank].invisible;
gSprites[gBattlerSpriteIds[bank]].invisible = ewram17800[bank].invisible;
}
}
@ -289,19 +289,19 @@ static void sub_807B508(u8 bank)
return;
else
healthboxID = battle_make_oam_normal_battle(bank);
gHealthboxIDs[bank] = healthboxID;
gHealthboxSpriteIds[bank] = healthboxID;
sub_8043F44(bank);
sub_8043DFC(healthboxID);
if (GetBattlerSide(bank))
sub_8045A5C(gHealthboxIDs[bank], &gEnemyParty[gBattlerPartyIndexes[bank]], 0);
sub_8045A5C(gHealthboxSpriteIds[bank], &gEnemyParty[gBattlerPartyIndexes[bank]], 0);
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[gBattlerPartyIndexes[bank]], 10);
sub_8045A5C(gHealthboxSpriteIds[bank], &gPlayerParty[gBattlerPartyIndexes[bank]], 10);
else
sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[gBattlerPartyIndexes[bank]], 0);
sub_8045A5C(gHealthboxSpriteIds[bank], &gPlayerParty[gBattlerPartyIndexes[bank]], 0);
if (GetBattlerPosition(bank) == 3 || GetBattlerPosition(bank) == 2)
nullsub_11(gHealthboxIDs[bank], 1);
nullsub_11(gHealthboxSpriteIds[bank], 1);
else
nullsub_11(gHealthboxIDs[bank], 0);
nullsub_11(gHealthboxSpriteIds[bank], 0);
if (GetBattlerSide(bank))
{
if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_HP) == 0)

View File

@ -23,15 +23,15 @@ extern u16 gBattleTypeFlags;
extern u16 gBattleWeather;
extern struct BattlePokemon gBattleMons[];
static EWRAM_DATA u8 gUnknown_020238C4 = 0;
static EWRAM_DATA u8 gUnknown_020238C5 = 0;
static EWRAM_DATA u8 sLinkSendTaskId = 0;
static EWRAM_DATA u8 sLinkReceiveTaskId = 0;
static EWRAM_DATA u8 gUnknown_020238C6 = 0;
extern u32 gUnknown_020239FC;
extern u8 gBattleBufferA[][0x200];
extern u8 gBattleBufferB[][0x200];
extern u8 gActiveBattler;
extern u32 gBattleExecBuffer;
extern u32 gBattleControllerExecFlags;
extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[];
extern u8 gBanksBySide[];
@ -39,10 +39,10 @@ extern u16 gCurrentMove;
extern u16 gChosenMove;
extern u16 gLastUsedItem;
extern u8 gLastUsedAbility;
extern u8 gBankAttacker;
extern u8 gBankTarget;
extern u8 gEffectBank;
extern u8 gStringBank;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gEffectBattler;
extern u8 gPotentialItemEffectBattler;
extern u8 gAbsentBattlerFlags;
extern u8 gMultiHitCounter;
extern u8 gUnknown_02024C78;
@ -53,7 +53,7 @@ extern u8 gBattleTextBuff1[];
extern u8 gBattleTextBuff2[];
extern u8 gBattleTextBuff3[];
extern void (*gBattleMainFunc)(void);
extern void (*gBattleBankFunc[])(void);
extern void (*gBattlerControllerFuncs[])(void);
u8 gBattleBuffersTransferData[0x170];
@ -63,7 +63,7 @@ void sub_800B858(void)
{
OpenLink();
CreateTask(sub_8083C50, 0);
sub_800BF28();
CreateTasksForSendRecvLinkBuffers();
}
}
@ -71,20 +71,20 @@ void sub_800B858(void)
extern u8 gUnknown_02023A14_50;
#endif
void setup_poochyena_battle(void)
void SetUpBattleVarsAndBirchPoochyena(void)
{
s32 i;
gBattleMainFunc = nullsub_41;
for (i = 0; i < 4; i++)
{
gBattleBankFunc[i] = nullsub_91;
gBattlerControllerFuncs[i] = nullsub_91;
gBanksBySide[i] = 0xFF;
gActionSelectionCursor[i] = 0;
gMoveSelectionCursor[i] = 0;
}
sub_800B858();
gBattleExecBuffer = 0;
gBattleControllerExecFlags = 0;
ClearBattleAnimationVars();
ClearBattleMonForms();
BattleAI_HandleItemUseBeforeAISetup();
@ -131,26 +131,26 @@ void sub_800B9A8(void)
{
gBattleMainFunc = sub_8010800;
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
gBattleBankFunc[0] = SetBankFuncToSafariBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToSafariBufferRunCommand;
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
gBattleBankFunc[0] = SetBankFuncToWallyBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToWallyBufferRunCommand;
else
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[0] = 0;
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
gBattlerControllerFuncs[1] = SetBankFuncToOpponentBufferRunCommand;
gBanksBySide[1] = 1;
gBattlersCount = 2;
}
else
{
gBattleMainFunc = sub_8010800;
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[0] = 0;
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
gBattlerControllerFuncs[1] = SetBankFuncToOpponentBufferRunCommand;
gBanksBySide[1] = 1;
gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[2] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[2] = 2;
gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand;
gBattlerControllerFuncs[3] = SetBankFuncToOpponentBufferRunCommand;
gBanksBySide[3] = 3;
gBattlersCount = 4;
}
@ -166,17 +166,17 @@ void sub_800BA78(void)
if (gBattleTypeFlags & BATTLE_TYPE_WILD)
{
gBattleMainFunc = sub_8010800;
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[0] = 0;
gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand;
gBattlerControllerFuncs[1] = SetBankFuncToLinkOpponentBufferRunCommand;
gBanksBySide[1] = 1;
gBattlersCount = 2;
}
else
{
gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[1] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[1] = 0;
gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToLinkOpponentBufferRunCommand;
gBanksBySide[0] = 1;
gBattlersCount = 2;
}
@ -187,25 +187,25 @@ void sub_800BA78(void)
if (gBattleTypeFlags & BATTLE_TYPE_WILD)
{
gBattleMainFunc = sub_8010800;
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[0] = 0;
gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand;
gBattlerControllerFuncs[1] = SetBankFuncToLinkOpponentBufferRunCommand;
gBanksBySide[1] = 1;
gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[2] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[2] = 2;
gBattleBankFunc[3] = SetBankFuncToLinkOpponentBufferRunCommand;
gBattlerControllerFuncs[3] = SetBankFuncToLinkOpponentBufferRunCommand;
gBanksBySide[3] = 3;
gBattlersCount = 4;
}
else
{
gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[1] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[1] = 0;
gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand;
gBattlerControllerFuncs[0] = SetBankFuncToLinkOpponentBufferRunCommand;
gBanksBySide[0] = 1;
gBattleBankFunc[3] = SetBankFuncToPlayerBufferRunCommand;
gBattlerControllerFuncs[3] = SetBankFuncToPlayerBufferRunCommand;
gBanksBySide[3] = 2;
gBattleBankFunc[2] = SetBankFuncToLinkOpponentBufferRunCommand;
gBattlerControllerFuncs[2] = SetBankFuncToLinkOpponentBufferRunCommand;
gBanksBySide[2] = 3;
gBattlersCount = 4;
@ -217,69 +217,69 @@ void sub_800BA78(void)
gBattleMainFunc = sub_8010800;
for (i = 0; i < 4; i++)
{
switch (gLinkPlayers[i].lp_field_18)
switch (gLinkPlayers[i].id)
{
case 0:
case 3:
sub_8094978(gLinkPlayers[i].lp_field_18, 0);
sub_8094978(gLinkPlayers[i].id, 0);
break;
case 1:
case 2:
sub_8094978(gLinkPlayers[i].lp_field_18, 1);
sub_8094978(gLinkPlayers[i].id, 1);
break;
}
if (i == multiplayerId)
{
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToPlayerBufferRunCommand;
switch (gLinkPlayers[i].lp_field_18)
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetBankFuncToPlayerBufferRunCommand;
switch (gLinkPlayers[i].id)
{
case 0:
case 3:
gBanksBySide[gLinkPlayers[i].lp_field_18] = 0;
gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
gBanksBySide[gLinkPlayers[i].id] = 0;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
gBanksBySide[gLinkPlayers[i].lp_field_18] = 2;
gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
gBanksBySide[gLinkPlayers[i].id] = 2;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
else
{
if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1))
|| ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1)))
if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1))
|| ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
{
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkPartnerBufferRunCommand;
switch (gLinkPlayers[i].lp_field_18)
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetBankFuncToLinkPartnerBufferRunCommand;
switch (gLinkPlayers[i].id)
{
case 0:
case 3:
gBanksBySide[gLinkPlayers[i].lp_field_18] = 0;
gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
gBanksBySide[gLinkPlayers[i].id] = 0;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
gBanksBySide[gLinkPlayers[i].lp_field_18] = 2;
gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
gBanksBySide[gLinkPlayers[i].id] = 2;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
else
{
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkOpponentBufferRunCommand;
switch (gLinkPlayers[i].lp_field_18)
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetBankFuncToLinkOpponentBufferRunCommand;
switch (gLinkPlayers[i].id)
{
case 0:
case 3:
gBanksBySide[gLinkPlayers[i].lp_field_18] = 1;
gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
gBanksBySide[gLinkPlayers[i].id] = 1;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
gBanksBySide[gLinkPlayers[i].lp_field_18] = 3;
gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
gBanksBySide[gLinkPlayers[i].id] = 3;
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
@ -386,19 +386,21 @@ void PrepareBufferDataTransfer(u8 a, u8 *data, u16 size)
}
}
void sub_800BF28(void)
void CreateTasksForSendRecvLinkBuffers(void)
{
gUnknown_020238C4 = CreateTask(sub_800C1A8, 0);
gTasks[gUnknown_020238C4].data[11] = 0;
gTasks[gUnknown_020238C4].data[12] = 0;
gTasks[gUnknown_020238C4].data[13] = 0;
gTasks[gUnknown_020238C4].data[14] = 0;
gTasks[gUnknown_020238C4].data[15] = 0;
gUnknown_020238C5 = CreateTask(sub_800C47C, 0);
gTasks[gUnknown_020238C5].data[12] = 0;
gTasks[gUnknown_020238C5].data[13] = 0;
gTasks[gUnknown_020238C5].data[14] = 0;
gTasks[gUnknown_020238C5].data[15] = 0;
sLinkSendTaskId = CreateTask(Task_HandleSendLinkBuffersData, 0);
gTasks[sLinkSendTaskId].data[11] = 0;
gTasks[sLinkSendTaskId].data[12] = 0;
gTasks[sLinkSendTaskId].data[13] = 0;
gTasks[sLinkSendTaskId].data[14] = 0;
gTasks[sLinkSendTaskId].data[15] = 0;
sLinkReceiveTaskId = CreateTask(Task_HandleCopyReceivedLinkBuffersData, 0);
gTasks[sLinkReceiveTaskId].data[12] = 0;
gTasks[sLinkReceiveTaskId].data[13] = 0;
gTasks[sLinkReceiveTaskId].data[14] = 0;
gTasks[sLinkReceiveTaskId].data[15] = 0;
gUnknown_020238C6 = 0;
CpuFill16(0, EWRAM_14000, 0x2000);
}
@ -409,27 +411,27 @@ void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data)
int i;
r9 = size - size % 4 + 4;
if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000)
if (gTasks[sLinkSendTaskId].data[14] + r9 + 9 > 0x1000)
{
gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14];
gTasks[gUnknown_020238C4].data[14] = 0;
gTasks[sLinkSendTaskId].data[12] = gTasks[sLinkSendTaskId].data[14];
gTasks[sLinkSendTaskId].data[14] = 0;
}
ewram14000arr(0, gTasks[gUnknown_020238C4].data[14]) = a;
ewram14000arr(1, gTasks[gUnknown_020238C4].data[14]) = gActiveBattler;
ewram14000arr(2, gTasks[gUnknown_020238C4].data[14]) = gBankAttacker;
ewram14000arr(3, gTasks[gUnknown_020238C4].data[14]) = gBankTarget;
ewram14000arr(4, gTasks[gUnknown_020238C4].data[14]) = r9;
ewram14000arr(5, gTasks[gUnknown_020238C4].data[14]) = (r9 & 0x0000FF00) >> 8;
ewram14000arr(6, gTasks[gUnknown_020238C4].data[14]) = gAbsentBattlerFlags;
ewram14000arr(7, gTasks[gUnknown_020238C4].data[14]) = gEffectBank;
ewram14000arr(0, gTasks[sLinkSendTaskId].data[14]) = a;
ewram14000arr(1, gTasks[sLinkSendTaskId].data[14]) = gActiveBattler;
ewram14000arr(2, gTasks[sLinkSendTaskId].data[14]) = gBattlerAttacker;
ewram14000arr(3, gTasks[sLinkSendTaskId].data[14]) = gBattlerTarget;
ewram14000arr(4, gTasks[sLinkSendTaskId].data[14]) = r9;
ewram14000arr(5, gTasks[sLinkSendTaskId].data[14]) = (r9 & 0x0000FF00) >> 8;
ewram14000arr(6, gTasks[sLinkSendTaskId].data[14]) = gAbsentBattlerFlags;
ewram14000arr(7, gTasks[sLinkSendTaskId].data[14]) = gEffectBattler;
for (i = 0; i < size; i++)
ewram14008arr(i, gTasks[gUnknown_020238C4].data[14]) = data[i];
gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8;
ewram14008arr(i, gTasks[sLinkSendTaskId].data[14]) = data[i];
gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + r9 + 8;
}
void sub_800C1A8(u8 taskId)
void Task_HandleSendLinkBuffersData(u8 taskId)
{
u16 var;
@ -519,24 +521,24 @@ void sub_800C35C(void)
recvBuffer = gBlockRecvBuffer[i];
#endif
r6 = gBlockRecvBuffer[i][2];
if (gTasks[gUnknown_020238C5].data[14] + 9 + r6 > 0x1000)
if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000)
{
gTasks[gUnknown_020238C5].data[12] = gTasks[gUnknown_020238C5].data[14];
gTasks[gUnknown_020238C5].data[14] = 0;
gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14];
gTasks[sLinkReceiveTaskId].data[14] = 0;
}
//_0800C402
dest = EWRAM_15000 + gTasks[gUnknown_020238C5].data[14];
dest = EWRAM_15000 + gTasks[sLinkReceiveTaskId].data[14];
src = (u8 *)recvBuffer;
for (j = 0; j < r6 + 8; j++)
dest[j] = src[j];
gTasks[gUnknown_020238C5].data[14] = gTasks[gUnknown_020238C5].data[14] + r6 + 8;
gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8;
}
//_0800C446
}
}
}
void sub_800C47C(u8 taskId)
void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
{
u16 r7;
u8 r4;
@ -555,16 +557,16 @@ void sub_800C47C(u8 taskId)
switch (ewram15000arr(0, gTasks[taskId].data[15]))
{
case 0:
if (gBattleExecBuffer & gBitTable[r4])
if (gBattleControllerExecFlags & gBitTable[r4])
return;
memcpy(gBattleBufferA[r4], &ewram15000arr(8, gTasks[taskId].data[15]), r7);
sub_80155A4(r4);
if (!(gBattleTypeFlags & BATTLE_TYPE_WILD))
{
gBankAttacker = ewram15000arr(2, gTasks[taskId].data[15]);
gBankTarget = ewram15000arr(3, gTasks[taskId].data[15]);
gBattlerAttacker = ewram15000arr(2, gTasks[taskId].data[15]);
gBattlerTarget = ewram15000arr(3, gTasks[taskId].data[15]);
gAbsentBattlerFlags = ewram15000arr(6, gTasks[taskId].data[15]);
gEffectBank = ewram15000arr(7, gTasks[taskId].data[15]);
gEffectBattler = ewram15000arr(7, gTasks[taskId].data[15]);
}
break;
case 1:
@ -572,32 +574,33 @@ void sub_800C47C(u8 taskId)
break;
case 2:
r2 = ewram15000arr(8, gTasks[taskId].data[15]);
gBattleExecBuffer &= ~(gBitTable[r4] << (r2 * 4));
gBattleControllerExecFlags &= ~(gBitTable[r4] << (r2 * 4));
break;
}
gTasks[taskId].data[15] = gTasks[taskId].data[15] + r7 + 8;
}
}
void EmitGetAttributes(u8 a, u8 b, u8 c)
void BtlController_EmitGetMonData(u8 bufferId, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 0;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void Emitcmd1(u8 a, u8 b, u8 c)
void BtlController_EmitGetRawMonData(u8 bufferId, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 1;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = 0;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void EmitSetMonData(u8 a, u8 b, u8 c, u8 d, void *e)
void BtlController_EmitSetMonData(u8 bufferId, u8 b, u8 c, u8 d, void *e)
{
int i;
@ -606,10 +609,10 @@ void EmitSetMonData(u8 a, u8 b, u8 c, u8 d, void *e)
gBattleBuffersTransferData[2] = c;
for (i = 0; i < d; i++)
gBattleBuffersTransferData[3 + i] = *(u8*)(e++);
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, d + 3);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, d + 3);
}
void Emitcmd3(u8 a, u8 b, u8 c, u8 *d)
void BtlController_EmitSetRawMonData(u8 bufferId, u8 b, u8 c, u8 *d)
{
int i;
@ -618,35 +621,35 @@ void Emitcmd3(u8 a, u8 b, u8 c, u8 *d)
gBattleBuffersTransferData[2] = c;
for (i = 0; i < c; i++)
gBattleBuffersTransferData[3 + i] = *(d++);
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 3);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, c + 3);
}
void EmitLoadPokeSprite(u8 a)
void BtlController_EmitLoadMonSprite(u8 bufferId)
{
gBattleBuffersTransferData[0] = 4;
gBattleBuffersTransferData[1] = 4;
gBattleBuffersTransferData[2] = 4;
gBattleBuffersTransferData[3] = 4;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void EmitSendOutPoke(u8 a, u8 b, u8 c)
void BtlController_EmitSwitchInAnim(u8 bufferId, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 5;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = 5;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
}
void EmitReturnPokeToBall(u8 a, u8 b)
void BtlController_EmitReturnMonToBall(u8 bufferId, u8 b)
{
gBattleBuffersTransferData[0] = 6;
gBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
}
void EmitTrainerThrow(u8 a)
void BtlController_EmitDrawTrainerPic(u8 a)
{
gBattleBuffersTransferData[0] = 7;
gBattleBuffersTransferData[1] = 7;
@ -655,7 +658,7 @@ void EmitTrainerThrow(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitTrainerSlide(u8 a)
void BtlController_EmitTrainerSlide(u8 a)
{
gBattleBuffersTransferData[0] = 8;
gBattleBuffersTransferData[1] = 8;
@ -664,7 +667,7 @@ void EmitTrainerSlide(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitTrainerSlideBack(u8 a)
void BtlController_EmitTrainerSlideBack(u8 a)
{
gBattleBuffersTransferData[0] = 9;
gBattleBuffersTransferData[1] = 9;
@ -673,7 +676,7 @@ void EmitTrainerSlideBack(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd10(u8 a)
void BtlController_EmitFaintAnimation(u8 a)
{
gBattleBuffersTransferData[0] = 10;
gBattleBuffersTransferData[1] = 10;
@ -682,7 +685,7 @@ void Emitcmd10(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd11(u8 a)
void BtlController_EmitPaletteFade(u8 a)
{
gBattleBuffersTransferData[0] = 11;
gBattleBuffersTransferData[1] = 11;
@ -691,7 +694,7 @@ void Emitcmd11(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd12(u8 a)
void BtlController_EmitSuccessBallThrowAnim(u8 a)
{
gBattleBuffersTransferData[0] = 12;
gBattleBuffersTransferData[1] = 12;
@ -700,14 +703,14 @@ void Emitcmd12(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitBallThrow(u8 a, u8 b)
void BtlController_EmitBallThrowAnim(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 13;
gBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void EmitPuase(u8 a, u8 b, u8 *c)
void BtlController_EmitPause(u8 a, u8 b, u8 *c)
{
int i;
@ -718,7 +721,7 @@ void EmitPuase(u8 a, u8 b, u8 *c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b * 3 + 2);
}
void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g)
void BtlController_EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g)
{
gBattleBuffersTransferData[0] = 15;
gBattleBuffersTransferData[1] = b;
@ -748,7 +751,7 @@ void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStru
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 0x2C);
}
void EmitPrintString(u8 a, u16 stringID)
void BtlController_EmitPrintString(u8 a, u16 stringID)
{
s32 i;
struct StringInfoBattle* stringInfo;
@ -766,7 +769,7 @@ void EmitPrintString(u8 a, u16 stringID)
stringInfo->scrActive = gBattleStruct->scriptingActive;
stringInfo->unk1605E = gBattleStruct->unk1605E;
stringInfo->hpScale = gBattleStruct->hpScale;
stringInfo->StringBank = gStringBank;
stringInfo->StringBank = gPotentialItemEffectBattler;
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
for (i = 0; i < 4; i++)
@ -780,7 +783,7 @@ void EmitPrintString(u8 a, u16 stringID)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
}
void EmitPrintStringPlayerOnly(u8 a, u16 stringID)
void BtlController_EmitPrintSelectionString(u8 a, u16 stringID)
{
s32 i;
struct StringInfoBattle* stringInfo;
@ -809,7 +812,7 @@ void EmitPrintStringPlayerOnly(u8 a, u16 stringID)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
}
void Emitcmd18(u8 a, u8 b, u16 c)
void BtlController_EmitChooseAction(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 18;
gBattleBuffersTransferData[1] = b;
@ -818,14 +821,14 @@ void Emitcmd18(u8 a, u8 b, u16 c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd19(u8 a, u8 b)
void BtlController_EmitUnknownYesNoBox(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 19;
gBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void Emitcmd20(u8 a, u8 b, u8 c, u8 *d)
void BtlController_EmitChooseMove(u8 a, u8 b, u8 c, u8 *d)
{
u32 i;
@ -838,7 +841,7 @@ void Emitcmd20(u8 a, u8 b, u8 c, u8 *d)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 24);
}
void EmitOpenBag(u8 a, u8 *b)
void BtlController_EmitChooseItem(u8 a, u8 *b)
{
int i;
@ -848,7 +851,7 @@ void EmitOpenBag(u8 a, u8 *b)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
void BtlController_EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
{
int i;
@ -861,7 +864,7 @@ void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written
}
void Emitcmd23(u8 a)
void BtlController_EmitCmd23(u8 a)
{
gBattleBuffersTransferData[0] = 23;
gBattleBuffersTransferData[1] = 23;
@ -872,7 +875,7 @@ void Emitcmd23(u8 a)
// FIXME: I think this function is supposed to take s16 as its second argument,
// but battle_4.c expects u16
void EmitHealthBarUpdate(u8 a, u16 b)
void BtlController_EmitHealthBarUpdate(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 24;
gBattleBuffersTransferData[1] = 0;
@ -883,7 +886,7 @@ void EmitHealthBarUpdate(u8 a, u16 b)
// FIXME: I think this function is supposed to take s16 as its third argument,
// but battle_4.c expects u16
void EmitExpBarUpdate(u8 a, u8 b, u16 c)
void BtlController_EmitExpUpdate(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 25;
gBattleBuffersTransferData[1] = b;
@ -892,7 +895,7 @@ void EmitExpBarUpdate(u8 a, u8 b, u16 c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitStatusIconUpdate(u8 a, u32 b, u32 c)
void BtlController_EmitStatusIconUpdate(u8 a, u32 b, u32 c)
{
gBattleBuffersTransferData[0] = 26;
gBattleBuffersTransferData[1] = b;
@ -906,7 +909,7 @@ void EmitStatusIconUpdate(u8 a, u32 b, u32 c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 9);
}
void EmitStatusAnimation(u8 a, u8 b, u32 c)
void BtlController_EmitStatusAnimation(u8 a, u8 b, u32 c)
{
gBattleBuffersTransferData[0] = 27;
gBattleBuffersTransferData[1] = b;
@ -917,14 +920,14 @@ void EmitStatusAnimation(u8 a, u8 b, u32 c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 6);
}
void EmitStatusXor(u8 a, u8 b)
void BtlController_EmitStatusXor(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 28;
gBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void Emitcmd29(u8 a, u16 b, u8 *c)
void BtlController_EmitDataTransfer(u8 a, u16 b, u8 *c)
{
int i;
@ -937,7 +940,7 @@ void Emitcmd29(u8 a, u16 b, u8 *c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 4);
}
void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d)
void BtlController_EmitDMA3Transfer(u8 a, u32 b, u16 c, u8 *d)
{
int i;
@ -953,7 +956,7 @@ void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 7);
}
void Emitcmd31(u8 a, u16 b, u8 *c)
void BtlController_EmitPlayBGM(u8 a, u16 b, u8 *c)
{
int i;
@ -965,7 +968,7 @@ void Emitcmd31(u8 a, u16 b, u8 *c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3);
}
void Emitcmd32(u8 a, u16 b, u8 *c)
void BtlController_EmitCmd32(u8 a, u16 b, u8 *c)
{
int i;
@ -977,7 +980,7 @@ void Emitcmd32(u8 a, u16 b, u8 *c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3);
}
void Emitcmd33(u8 a, u8 b, u16 c)
void BtlController_EmitTwoReturnValues(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 33;
gBattleBuffersTransferData[1] = b;
@ -986,7 +989,7 @@ void Emitcmd33(u8 a, u8 b, u16 c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd34(u8 a, u8 b, u8 *c)
void BtlController_EmitChosenMonReturnValue(u8 a, u8 b, u8 *c)
{
int i;
@ -997,7 +1000,7 @@ void Emitcmd34(u8 a, u8 b, u8 *c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 5);
}
void Emitcmd35(u8 a, u16 b)
void BtlController_EmitOneReturnValue(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 35;
gBattleBuffersTransferData[1] = b;
@ -1006,7 +1009,7 @@ void Emitcmd35(u8 a, u16 b)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd36(u8 a, u16 b)
void BtlController_EmitOneReturnValue_Duplicate(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 36;
gBattleBuffersTransferData[1] = b;
@ -1015,7 +1018,7 @@ void Emitcmd36(u8 a, u16 b)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd37(u8 a)
void BtlController_EmitCmd37(u8 a)
{
gBattleBuffersTransferData[0] = 37;
gBattleBuffersTransferData[1] = 37;
@ -1024,14 +1027,14 @@ void Emitcmd37(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd38(u8 a, u8 b)
void BtlController_EmitCmd38(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 38;
gBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void Emitcmd39(u8 a)
void BtlController_EmitCmd39(u8 a)
{
gBattleBuffersTransferData[0] = 39;
gBattleBuffersTransferData[1] = 39;
@ -1040,7 +1043,7 @@ void Emitcmd39(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd40(u8 a)
void BtlController_EmitCmd40(u8 a)
{
gBattleBuffersTransferData[0] = 40;
gBattleBuffersTransferData[1] = 40;
@ -1049,7 +1052,7 @@ void Emitcmd40(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitHitAnimation(u8 a)
void BtlController_EmitHitAnimation(u8 a)
{
gBattleBuffersTransferData[0] = 41;
gBattleBuffersTransferData[1] = 41;
@ -1058,7 +1061,7 @@ void EmitHitAnimation(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd42(u8 a)
void BtlController_EmitCmd42(u8 a)
{
gBattleBuffersTransferData[0] = 42;
gBattleBuffersTransferData[1] = 42;
@ -1067,7 +1070,7 @@ void Emitcmd42(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitEffectivenessSound(u8 a, u16 b)
void BtlController_EmitPlaySE(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 43;
gBattleBuffersTransferData[1] = b;
@ -1076,7 +1079,7 @@ void EmitEffectivenessSound(u8 a, u16 b)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd44(u8 a, u16 b)
void BtlController_EmitPlayFanfareOrBGM(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 44;
gBattleBuffersTransferData[1] = b;
@ -1085,7 +1088,7 @@ void Emitcmd44(u8 a, u16 b)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitFaintingCry(u8 a)
void BtlController_EmitFaintingCry(u8 a)
{
gBattleBuffersTransferData[0] = 45;
gBattleBuffersTransferData[1] = 45;
@ -1094,14 +1097,14 @@ void EmitFaintingCry(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitIntroSlide(u8 a, u8 battleTerrain)
void BtlController_EmitIntroSlide(u8 a, u8 battleTerrain)
{
gBattleBuffersTransferData[0] = 46;
gBattleBuffersTransferData[1] = battleTerrain;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void EmitTrainerBallThrow(u8 a)
void BtlController_EmitIntroTrainerBallThrow(u8 a)
{
gBattleBuffersTransferData[0] = 47;
gBattleBuffersTransferData[1] = 47;
@ -1110,7 +1113,7 @@ void EmitTrainerBallThrow(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitDrawPartyStatusSummary(u8 a, struct HpAndStatus *hpAndStatus, u8 c)
void BtlController_EmitDrawPartyStatusSummary(u8 a, struct HpAndStatus *hpAndStatus, u8 c)
{
int i;
@ -1123,7 +1126,7 @@ void EmitDrawPartyStatusSummary(u8 a, struct HpAndStatus *hpAndStatus, u8 c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 52);
}
void Emitcmd49(u8 a)
void BtlController_EmitHidePartyStatusSummary(u8 a)
{
gBattleBuffersTransferData[0] = 49;
gBattleBuffersTransferData[1] = 49;
@ -1132,7 +1135,7 @@ void Emitcmd49(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void Emitcmd50(u8 a)
void BtlController_EmitEndBounceEffect(u8 a)
{
gBattleBuffersTransferData[0] = 50;
gBattleBuffersTransferData[1] = 50;
@ -1141,7 +1144,7 @@ void Emitcmd50(u8 a)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitSpriteInvisibility(u8 a, u8 b)
void BtlController_EmitSpriteInvisibility(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 51;
gBattleBuffersTransferData[1] = b;
@ -1150,7 +1153,7 @@ void EmitSpriteInvisibility(u8 a, u8 b)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitBattleAnimation(u8 a, u8 b, u16 c)
void BtlController_EmitBattleAnimation(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 52;
gBattleBuffersTransferData[1] = b;
@ -1159,21 +1162,21 @@ void EmitBattleAnimation(u8 a, u8 b, u16 c)
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitLinkStandbyMsg(u8 a, u8 b)
void BtlController_EmitLinkStandbyMsg(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 53;
gBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void EmitResetActionMoveSelection(u8 a, u8 b)
void BtlController_EmitResetActionMoveSelection(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 54;
gBattleBuffersTransferData[1] = b;
PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void Emitcmd55(u8 a, u8 b)
void BtlController_EmitCmd55(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 55;
gBattleBuffersTransferData[1] = b;

View File

@ -31,7 +31,7 @@
#define gCastformElevations gUnknownCastformData_0837F5A8
#define gCastformBackSpriteYCoords gUnknown_0837F5AC
#define gTransformPersonalities gTransformedPersonalities
#define gBattleMonSprites gBankSpriteIds
#define gBattleMonSprites gBattlerSpriteIds
struct Struct_gUnknown_0837F578
{

View File

@ -18,15 +18,15 @@
#define ALLOC_SPRITE_TILE(n) \
{ \
gSpriteTileAllocBitmap[(n) / 8] |= (1 << ((n) % 8)); \
sSpriteTileAllocBitmap[(n) / 8] |= (1 << ((n) % 8)); \
}
#define FREE_SPRITE_TILE(n) \
{ \
gSpriteTileAllocBitmap[(n) / 8] &= ~(1 << ((n) % 8)); \
sSpriteTileAllocBitmap[(n) / 8] &= ~(1 << ((n) % 8)); \
}
#define SPRITE_TILE_IS_ALLOCATED(n) ((gSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1)
#define SPRITE_TILE_IS_ALLOCATED(n) ((sSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1)
struct SpriteCopyRequest
{
@ -93,21 +93,21 @@ typedef void (*AnimFunc)(struct Sprite *);
typedef void (*AnimCmdFunc)(struct Sprite *);
typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *);
#define DUMMY_OAM_DATA \
{ \
160, /* Y (off-screen) */ \
0, \
0, \
0, \
0, \
0, \
304, /* X */ \
0, \
0, \
0, \
3, /* lowest priority */ \
0, \
0 \
#define DUMMY_OAM_DATA \
{ \
.y = 160, \
.affineMode = 0, \
.objMode = 0, \
.mosaic = 0, \
.bpp = 0, \
.shape = SPRITE_SHAPE(8x8), \
.x = 304, \
.matrixNum = 0, \
.size = SPRITE_SIZE(8x8), \
.tileNum = 0, \
.priority = 3, /* lowest priority */ \
.paletteNum = 0, \
.affineParam = 0 \
}
#define ANIM_END 0xFFFF
@ -180,10 +180,10 @@ static const struct Sprite sDummySprite =
.animPaused = 0,
.affineAnimPaused = 0,
.animLoopCounter = 0,
.data = {0},
.data = {0, 0, 0, 0, 0, 0, 0},
.inUse = 0,
.coordOffsetEnabled = 0,
.invisible = 0,
.invisible = FALSE,
.flags_3 = 0,
.flags_4 = 0,
.flags_5 = 0,
@ -287,22 +287,22 @@ static u16 sSpriteTileRanges[MAX_SPRITES * 2];
static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT];
static u16 sSpritePaletteTags[16];
u8 gSpriteOrder[MAX_SPRITES];
bool8 gShouldProcessSpriteCopyRequests;
u8 gSpriteCopyRequestCount;
struct SpriteCopyRequest gSpriteCopyRequests[MAX_SPRITE_COPY_REQUESTS];
u8 gOamLimit;
u16 gReservedSpriteTileCount;
u8 gSpriteTileAllocBitmap[128];
s16 gSpriteCoordOffsetX;
s16 gSpriteCoordOffsetY;
u32 gOamMatrixAllocBitmap;
struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT];
u8 gReservedSpritePaletteCount;
EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0};
EWRAM_DATA u16 gSpritePriorities[MAX_SPRITES] = {0};
EWRAM_DATA u8 gAffineAnimsDisabled = {0};
EWRAM_DATA u16 sSpritePriorities[MAX_SPRITES] = {0};
u8 sSpriteOrder[MAX_SPRITES];
bool8 sShouldProcessSpriteCopyRequests;
u8 gSpriteCopyRequestCount;
struct SpriteCopyRequest sSpriteCopyRequests[MAX_SPRITE_COPY_REQUESTS];
u8 gOamLimit;
u16 gReservedSpriteTileCount;
u8 sSpriteTileAllocBitmap[128];
s16 gSpriteCoordOffsetX;
s16 gSpriteCoordOffsetY;
struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT];
EWRAM_DATA bool8 gAffineAnimsDisabled = 0;
void ResetSpriteData(void)
{
@ -346,7 +346,7 @@ void BuildOamBuffer(void)
AddSpritesToOamBuffer();
CopyMatricesToOamBuffer();
gMain.oamLoadDisabled = temp;
gShouldProcessSpriteCopyRequests = TRUE;
sShouldProcessSpriteCopyRequests = TRUE;
}
static void UpdateOamCoords(void)
@ -378,7 +378,7 @@ static void BuildSpritePriorities(void)
{
struct Sprite *sprite = &gSprites[i];
u16 priority = sprite->subpriority | (sprite->oam.priority << 8);
gSpritePriorities[i] = priority;
sSpritePriorities[i] = priority;
}
}
@ -388,10 +388,10 @@ static void SortSprites(void)
for (i = 1; i < MAX_SPRITES; i++)
{
u8 j = i;
struct Sprite *sprite1 = &gSprites[gSpriteOrder[i - 1]];
struct Sprite *sprite2 = &gSprites[gSpriteOrder[i]];
u16 sprite1Priority = gSpritePriorities[gSpriteOrder[i - 1]];
u16 sprite2Priority = gSpritePriorities[gSpriteOrder[i]];
struct Sprite *sprite1 = &gSprites[sSpriteOrder[i - 1]];
struct Sprite *sprite2 = &gSprites[sSpriteOrder[i]];
u16 sprite1Priority = sSpritePriorities[sSpriteOrder[i - 1]];
u16 sprite2Priority = sSpritePriorities[sSpriteOrder[i]];
s16 sprite1Y = sprite1->oam.y;
s16 sprite2Y = sprite2->oam.y;
@ -427,20 +427,20 @@ static void SortSprites(void)
&& ((sprite1Priority > sprite2Priority)
|| (sprite1Priority == sprite2Priority && sprite1Y < sprite2Y)))
{
u8 temp = gSpriteOrder[j];
gSpriteOrder[j] = gSpriteOrder[j - 1];
gSpriteOrder[j - 1] = temp;
u8 temp = sSpriteOrder[j];
sSpriteOrder[j] = sSpriteOrder[j - 1];
sSpriteOrder[j - 1] = temp;
// UB: If j equals 1, then j-- makes j equal 0.
// Then, gSpriteOrder[-1] gets accessed below.
// Then, sSpriteOrder[-1] gets accessed below.
// Although this doesn't result in a bug in the ROM,
// the behavior is undefined.
j--;
sprite1 = &gSprites[gSpriteOrder[j - 1]];
sprite2 = &gSprites[gSpriteOrder[j]];
sprite1Priority = gSpritePriorities[gSpriteOrder[j - 1]];
sprite2Priority = gSpritePriorities[gSpriteOrder[j]];
sprite1 = &gSprites[sSpriteOrder[j - 1]];
sprite2 = &gSprites[sSpriteOrder[j]];
sprite1Priority = sSpritePriorities[sSpriteOrder[j - 1]];
sprite2Priority = sSpritePriorities[sSpriteOrder[j]];
sprite1Y = sprite1->oam.y;
sprite2Y = sprite2->oam.y;
@ -495,7 +495,7 @@ static void AddSpritesToOamBuffer(void)
while (i < MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[gSpriteOrder[i]];
struct Sprite *sprite = &gSprites[sSpriteOrder[i]];
if (sprite->inUse && !sprite->invisible && AddSpriteToOamBuffer(sprite, &oamIndex))
break;
i++;
@ -662,14 +662,14 @@ static void ClearSpriteCopyRequests(void)
{
u8 i;
gShouldProcessSpriteCopyRequests = FALSE;
sShouldProcessSpriteCopyRequests = FALSE;
gSpriteCopyRequestCount = 0;
for (i = 0; i < MAX_SPRITE_COPY_REQUESTS; i++)
{
gSpriteCopyRequests[i].src = 0;
gSpriteCopyRequests[i].dest = 0;
gSpriteCopyRequests[i].size = 0;
sSpriteCopyRequests[i].src = 0;
sSpriteCopyRequests[i].dest = 0;
sSpriteCopyRequests[i].size = 0;
}
}
@ -777,17 +777,17 @@ u8 SpriteTileAllocBitmapOp(u16 bit, u8 op)
if (op == 0)
{
val = ~(1 << val);
gSpriteTileAllocBitmap[index] &= val;
sSpriteTileAllocBitmap[index] &= val;
}
else if (op == 1)
{
val = (1 << val);
gSpriteTileAllocBitmap[index] |= val;
sSpriteTileAllocBitmap[index] |= val;
}
else
{
retVal = 1 << shift;
retVal &= gSpriteTileAllocBitmap[index];
retVal &= sSpriteTileAllocBitmap[index];
}
return retVal;
@ -799,18 +799,18 @@ void SpriteCallbackDummy(struct Sprite *sprite)
void ProcessSpriteCopyRequests(void)
{
if (gShouldProcessSpriteCopyRequests)
if (sShouldProcessSpriteCopyRequests)
{
u8 i = 0;
while (gSpriteCopyRequestCount > 0)
{
CpuCopy16(gSpriteCopyRequests[i].src, gSpriteCopyRequests[i].dest, gSpriteCopyRequests[i].size);
CpuCopy16(sSpriteCopyRequests[i].src, sSpriteCopyRequests[i].dest, sSpriteCopyRequests[i].size);
gSpriteCopyRequestCount--;
i++;
}
gShouldProcessSpriteCopyRequests = FALSE;
sShouldProcessSpriteCopyRequests = FALSE;
}
}
@ -818,9 +818,9 @@ static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct Spr
{
if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS)
{
gSpriteCopyRequests[gSpriteCopyRequestCount].src = images[index].data;
gSpriteCopyRequests[gSpriteCopyRequestCount].dest = OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum;
gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size;
sSpriteCopyRequests[gSpriteCopyRequestCount].src = images[index].data;
sSpriteCopyRequests[gSpriteCopyRequestCount].dest = OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum;
sSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size;
gSpriteCopyRequestCount++;
}
#if DEBUG
@ -835,9 +835,9 @@ void RequestSpriteCopy(const void *src, u8 *dest, u16 size)
{
if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS)
{
gSpriteCopyRequests[gSpriteCopyRequestCount].src = src;
gSpriteCopyRequests[gSpriteCopyRequestCount].dest = dest;
gSpriteCopyRequests[gSpriteCopyRequestCount].size = size;
sSpriteCopyRequests[gSpriteCopyRequestCount].src = src;
sSpriteCopyRequests[gSpriteCopyRequestCount].dest = dest;
sSpriteCopyRequests[gSpriteCopyRequestCount].size = size;
gSpriteCopyRequestCount++;
}
#if DEBUG
@ -880,7 +880,7 @@ static void ResetAllSprites(void)
for (i = 0; i < MAX_SPRITES; i++)
{
ResetSprite(&gSprites[i]);
gSpriteOrder[i] = i;
sSpriteOrder[i] = i;
}
ResetSprite(&gSprites[i]);

View File

@ -7,7 +7,7 @@
#define TAIL_SENTINEL 0xFF
// gTasks is a queue of the active 16 tasks
struct Task gTasks[ACTIVE_SENTINEL];
struct Task gTasks[NUM_TASKS];
static void InsertTask(u8 newTaskId);
static u8 FindFirstActiveTask();
@ -16,38 +16,38 @@ const u8 gError_NoTasksLeft[] = _(
"TASK OVER\n"
"タスクがオーバーしました");
void ResetTasks()
void ResetTasks(void)
{
u8 taskId;
u8 i;
for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++)
for (i = 0; i < NUM_TASKS; i++)
{
gTasks[taskId].isActive = FALSE;
gTasks[taskId].func = TaskDummy;
gTasks[taskId].prev = taskId;
gTasks[taskId].next = taskId + 1;
gTasks[taskId].priority = -1;
memset(gTasks[taskId].data, 0, sizeof(gTasks[taskId].data));
gTasks[i].isActive = FALSE;
gTasks[i].func = TaskDummy;
gTasks[i].prev = i;
gTasks[i].next = i + 1;
gTasks[i].priority = -1;
memset(gTasks[i].data, 0, sizeof(gTasks[i].data));
}
gTasks[0].prev = HEAD_SENTINEL;
gTasks[ACTIVE_SENTINEL - 1].next = TAIL_SENTINEL;
gTasks[NUM_TASKS - 1].next = TAIL_SENTINEL;
}
u8 CreateTask(TaskFunc func, u8 priority)
{
u8 taskId;
u8 i;
for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++)
for (i = 0; i < NUM_TASKS; i++)
{
if (!gTasks[taskId].isActive)
if (!gTasks[i].isActive)
{
gTasks[taskId].func = func;
gTasks[taskId].priority = priority;
InsertTask(taskId);
memset(gTasks[taskId].data, 0, sizeof(gTasks[taskId].data));
gTasks[taskId].isActive = TRUE;
return taskId;
gTasks[i].func = func;
gTasks[i].priority = priority;
InsertTask(i);
memset(gTasks[i].data, 0, sizeof(gTasks[i].data));
gTasks[i].isActive = TRUE;
return i;
}
}
@ -62,7 +62,7 @@ static void InsertTask(u8 newTaskId)
{
u8 taskId = FindFirstActiveTask();
if (taskId == ACTIVE_SENTINEL)
if (taskId == NUM_TASKS)
{
// The task system inserts from the top downwards starting from the end (0xFF) to 0. If FindFirstActiveTask returned the value equivalent to ACTIVE_SENTINEL, it means it is the only task because it searched the entire queue.
gTasks[newTaskId].prev = HEAD_SENTINEL;
@ -78,10 +78,8 @@ static void InsertTask(u8 newTaskId)
// so we insert the new task before it.
gTasks[newTaskId].prev = gTasks[taskId].prev;
gTasks[newTaskId].next = taskId;
if (gTasks[taskId].prev != HEAD_SENTINEL)
gTasks[gTasks[taskId].prev].next = newTaskId; // as long as we are not at the end, insert the newTask appropriately.
gTasks[taskId].prev = newTaskId;
return;
}
@ -127,7 +125,7 @@ void RunTasks(void)
{
u8 taskId = FindFirstActiveTask();
if (taskId != ACTIVE_SENTINEL)
if (taskId != NUM_TASKS)
{
do
{
@ -141,7 +139,7 @@ static u8 FindFirstActiveTask(void)
{
u8 taskId;
for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++)
for (taskId = 0; taskId < NUM_TASKS; taskId++)
if (gTasks[taskId].isActive == TRUE && gTasks[taskId].prev == HEAD_SENTINEL)
break;
@ -184,7 +182,7 @@ bool8 FuncIsActiveTask(TaskFunc func)
{
u8 i;
for (i = 0; i < ACTIVE_SENTINEL; i++)
for (i = 0; i < NUM_TASKS; i++)
if (gTasks[i].isActive == TRUE && gTasks[i].func == func)
return TRUE;
@ -195,11 +193,11 @@ u8 FindTaskIdByFunc(TaskFunc func)
{
s32 i;
for (i = 0; i < ACTIVE_SENTINEL; i++)
for (i = 0; i < NUM_TASKS; i++)
if (gTasks[i].isActive == TRUE && gTasks[i].func == func)
return (u8)i;
return -1;
return 0xFF;
}
u8 GetTaskCount(void)
@ -207,7 +205,7 @@ u8 GetTaskCount(void)
u8 i;
u8 count = 0;
for (i = 0; i < ACTIVE_SENTINEL; i++)
for (i = 0; i < NUM_TASKS; i++)
if (gTasks[i].isActive == TRUE)
count++;

View File

@ -126,6 +126,8 @@ struct TradeEwramSubstruct {
/*0x08fc*/ u8 filler_08fc[0x704];
};
struct TradeEwramSubstruct2 *gUnknown_03004828;
IWRAM_DATA u8 gUnknown_03000508[8];
struct UnkStructF {
@ -209,7 +211,7 @@ EWRAM_DATA u8 *gUnknown_020296CC[13] = {0};
EWRAM_DATA struct MailStruct gUnknown_02029700[6] = {0};
EWRAM_DATA u8 gUnknown_020297D8[2] = {0};
extern struct TradeEwramSubstruct *gUnknown_03004824;
struct TradeEwramSubstruct *gUnknown_03004824;
const u32 unref_data_820ABD4[] =
{

View File

@ -23,16 +23,16 @@ SYMBOL(IntrMain_Buffer, 2048)
SYMBOL(gPcmDmaCounter, 4)
// sprite.c
SYMBOL(gSpriteOrder, 64)
SYMBOL(gSpriteTileAllocBitmap, 128)
SYMBOL(sSpriteOrder, 64)
SYMBOL(sSpriteTileAllocBitmap, 128)
SYMBOL(gSpriteCoordOffsetX, 4)
SYMBOL(gOamLimit, 4)
SYMBOL(gReservedSpriteTileCount, 4)
SYMBOL(gSpriteCopyRequestCount, 4)
SYMBOL(gSpriteCopyRequests, 768)
SYMBOL(sSpriteCopyRequests, 768)
SYMBOL(gSpriteCoordOffsetY, 4)
SYMBOL(gOamMatrices, 256)
SYMBOL(gShouldProcessSpriteCopyRequests, 4)
SYMBOL(sShouldProcessSpriteCopyRequests, 4)
SYMBOL(gOamMatrixAllocBitmap, 4)
SYMBOL(gReservedSpritePaletteCount, 4)
@ -130,8 +130,8 @@ SYMBOL(gPreBattleCallback1, 4)
SYMBOL(gBattleMainFunc, 4)
SYMBOL(gBattleResults, 68)
SYMBOL(gLeveledUpInBattle, 4)
SYMBOL(gBattleBankFunc, 16)
SYMBOL(gHealthboxIDs, 4)
SYMBOL(gBattlerControllerFuncs, 16)
SYMBOL(gHealthboxSpriteIds, 4)
SYMBOL(gUnknown_03004344, 4)
SYMBOL(gUnknown_03004348, 4)
SYMBOL(gUnknown_0300434C, 4)

View File

@ -61,7 +61,7 @@ gBattleBufferB = .; /* 2024260 */
gActiveBattler = .; /* 2024A60 */
. += 0x4;
gBattleExecBuffer = .; /* 2024A64 */
gBattleControllerExecFlags = .; /* 2024A64 */
. += 0x4;
gBattlersCount = .; /* 2024A68 */
@ -88,7 +88,7 @@ gCurrentActionFuncId = .; /* 2024A7F */
gBattleMons = .; /* 2024A80 */
. += 0x160;
gBankSpriteIds = .; /* 2024BE0 */
gBattlerSpriteIds = .; /* 2024BE0 */
. += 0x4;
gCurrMovePos = .; /* 2024BE4 */
@ -121,19 +121,19 @@ gLastUsedItem = .; /* 2024C04 */
gLastUsedAbility = .; /* 2024C06 */
. += 0x1;
gBankAttacker = .; /* 2024C07 */
gBattlerAttacker = .; /* 2024C07 */
. += 0x1;
gBankTarget = .; /* 2024C08 */
gBattlerTarget = .; /* 2024C08 */
. += 0x1;
gBank1 = .; /* 2024C09 */
. += 0x1;
gEffectBank = .; /* 2024C0A */
gEffectBattler = .; /* 2024C0A */
. += 0x1;
gStringBank = .; /* 2024C0B */
gPotentialItemEffectBattler = .; /* 2024C0B */
. += 0x1;
gAbsentBattlerFlags = .; /* 2024C0C */