summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-27 12:53:38 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-27 12:53:38 -0400
commitbd59586968791b7c322bc79ef571f9cbff80c38a (patch)
treeca90d3083db91ff3943528a9b73e36a02b1a4ef1 /src
parent47b9907ec58c55759a95aed1f31e92fb72031a5f (diff)
parentd58e89a51850a38bf6ae332736bdedcfd62770f7 (diff)
merge
Diffstat (limited to 'src')
-rw-r--r--src/battle/battle_2.c26
-rw-r--r--src/battle/battle_4.c32
-rw-r--r--src/battle/battle_5.c1579
-rw-r--r--src/battle/battle_7.c384
-rw-r--r--src/battle/battle_controller_linkopponent2.c (renamed from src/battle/battle_10.c)338
-rw-r--r--src/battle/battle_controller_linkpartner.c (renamed from src/battle/battle_811DA74.c)222
-rw-r--r--src/battle/battle_controller_opponent.c (renamed from src/battle/battle_8.c)519
-rw-r--r--src/battle/battle_controller_player.c (renamed from src/battle/battle_6.c)1647
-rw-r--r--src/battle/battle_controller_safari.c173
-rw-r--r--src/battle/battle_controller_wally.c (renamed from src/battle/battle_anim_8137220.c)265
-rw-r--r--src/misc/rom3.c72
11 files changed, 2958 insertions, 2299 deletions
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index bdd908ea5..106d3333b 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -1866,7 +1866,7 @@ static void BattlePrepIntroSlide(void)
if (gBattleExecBuffer == 0)
{
gActiveBank = GetBankByPlayerAI(0);
- EmitBattleIntroSlide(0, gBattleTerrain);
+ EmitIntroSlide(0, gBattleTerrain);
MarkBufferBankForExecution(gActiveBank);
gBattleMainFunc = sub_8011384;
gBattleCommunication[0] = 0;
@@ -1910,7 +1910,7 @@ void sub_8011384(void)
if (GetBankIdentity(gActiveBank) == 0)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
@@ -1918,7 +1918,7 @@ void sub_8011384(void)
{
if (GetBankIdentity(gActiveBank) == 1)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if (GetBankSide(gActiveBank) == 1
@@ -1931,7 +1931,7 @@ void sub_8011384(void)
&& !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
{
GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
- dp01_build_cmdbuf_x04_4_4_4(0);
+ EmitLoadPokeSprite(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -1941,7 +1941,7 @@ void sub_8011384(void)
if (GetBankIdentity(gActiveBank) == 2
|| GetBankIdentity(gActiveBank) == 3)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -1979,7 +1979,7 @@ void bc_801333C(void)
}
}
gActiveBank = GetBankByPlayerAI(1);
- dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80);
+ Emitcmd48(0, (u8 *)sp0, 0x80);
MarkBufferBankForExecution(gActiveBank);
for (i = 0; i < 6; i++)
@@ -1997,7 +1997,7 @@ void bc_801333C(void)
}
}
gActiveBank = GetBankByPlayerAI(0);
- dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80);
+ Emitcmd48(0, (u8 *)sp0, 0x80);
MarkBufferBankForExecution(gActiveBank);
gBattleMainFunc = bc_battle_begin_message;
@@ -2063,13 +2063,13 @@ void sub_8011834(void)
{
if (GetBankIdentity(gActiveBank) == 1)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if ((gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& GetBankIdentity(gActiveBank) == 3)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2115,13 +2115,13 @@ void sub_80119B4(void)
{
if (GetBankIdentity(gActiveBank) == 0)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if ((gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& GetBankIdentity(gActiveBank) == 2)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2140,7 +2140,7 @@ void unref_sub_8011A68(void)
{
if (GetBankSide(gActiveBank) == 0)
{
- EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0);
+ EmitSendOutPoke(0, gBattlePartyID[gActiveBank], 0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2429,7 +2429,7 @@ void sub_8012324(void)
}
else
{
- dp01_build_cmdbuf_x12_a_bb(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
+ Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
MarkBufferBankForExecution(gActiveBank);
gBattleCommunication[gActiveBank]++;
}
diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c
index 6dd5d7df6..a796ace94 100644
--- a/src/battle/battle_4.c
+++ b/src/battle/battle_4.c
@@ -5634,7 +5634,7 @@ static void atk1A_faint_animation(void)
if (gBattleExecBuffer == 0)
{
gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
- EmitFaintAnimation(0);
+ Emitcmd10(0);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -10125,7 +10125,7 @@ static void atk4E_switchin_anim(void)
GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
}
gAbsentBankFlags &= ~(gBitTable[gActiveBank]);
- EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
+ EmitSendOutPoke(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
}
@@ -10446,7 +10446,7 @@ _08022BC4:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022C7E\n\
@@ -10531,7 +10531,7 @@ _08022C7E:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022D40\n\
@@ -10615,7 +10615,7 @@ _08022D40:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022DF6\n\
@@ -10702,7 +10702,7 @@ _08022DF6:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022EB8\n\
@@ -10900,7 +10900,7 @@ _08022F92:\n\
bics r0, r1\n\
str r0, [r7]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r6]\n\
bl MarkBufferBankForExecution\n\
b _0802303A\n\
@@ -10977,7 +10977,7 @@ _0802303A:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r5]\n\
bl MarkBufferBankForExecution\n\
b _080230EE\n\
@@ -11426,7 +11426,7 @@ static void atk54_effectiveness_sound(void)
static void atk55_play_sound(void)
{
gActiveBank = gBankAttacker;
- EmitPlaySound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ Emitcmd44(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
}
@@ -11442,7 +11442,7 @@ static void atk56_fainting_cry(void)
static void atk57(void)
{
gActiveBank = GetBankByPlayerAI(0);
- dp01_build_cmdbuf_x37_a(0, gBattleOutcome);
+ Emitcmd55(0, gBattleOutcome);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 1;
}
@@ -12011,7 +12011,7 @@ static void atk61_8025BA4(void)
hpStatus[i].status = GetMonData(&party[i], MON_DATA_STATUS);
}
}
- dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1);
+ Emitcmd48(0, (u8*)(hpStatus), 1);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -12019,7 +12019,7 @@ static void atk61_8025BA4(void)
static void atk62_08025C6C(void)
{
gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
- dp01_build_cmdbuf_x31_31_31_31(0);
+ Emitcmd49(0);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -17789,13 +17789,13 @@ void atkEF_pokeball_catch_calculation(void)
gBankTarget = gBankAttacker ^ 1;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
- EmitBallThrowAnim(0, 5);
+ EmitBallThrow(0, 5);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
}
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
{
- EmitBallThrowAnim(0, 4);
+ EmitBallThrow(0, 4);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_WallyBallThrow;
}
@@ -17873,7 +17873,7 @@ void atkEF_pokeball_catch_calculation(void)
}
if (odds > 254) //poke caught
{
- EmitBallThrowAnim(0, 4);
+ EmitBallThrow(0, 4);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem);
@@ -17890,7 +17890,7 @@ void atkEF_pokeball_catch_calculation(void)
for (shakes = 0; shakes < 4 && Random() < odds; shakes++) {}
if (gLastUsedItem == ITEM_MASTER_BALL)
shakes = 4; //why calculate the shakes before that check?
- EmitBallThrowAnim(0, shakes);
+ EmitBallThrow(0, shakes);
MarkBufferBankForExecution(gActiveBank);
if (shakes == 4) //poke caught, copy of the code above
{
diff --git a/src/battle/battle_5.c b/src/battle/battle_5.c
deleted file mode 100644
index 5972c0cb1..000000000
--- a/src/battle/battle_5.c
+++ /dev/null
@@ -1,1579 +0,0 @@
-#include "global.h"
-#include "data2.h"
-#include "battle.h"
-#include "battle_interface.h"
-#include "item.h"
-#include "items.h"
-#include "link.h"
-#include "m4a.h"
-#include "main.h"
-#include "menu_cursor.h"
-#include "moves.h"
-#include "palette.h"
-#include "pokemon.h"
-#include "rom3.h"
-#include "songs.h"
-#include "sound.h"
-#include "string_util.h"
-#include "task.h"
-#include "text.h"
-#include "util.h"
-
-extern u8 gActiveBank;
-extern void (*gBattleBankFunc[])(void);
-extern bool8 gDoingBattleAnim;
-extern u16 gBattleTypeFlags;
-extern u32 gBattleExecBuffer;
-extern u8 gBattleBufferA[][0x200];
-extern u8 gObjectBankIDs[];
-extern u8 gActionSelectionCursor[];
-extern u8 gMoveSelectionCursor[];
-extern u8 gAbsentBankFlags;
-extern u8 gUnknown_03004344;
-extern u8 gNoOfAllBanks;
-extern u16 gBattlePartyID[];
-//extern const struct BattleMove gBattleMoves[];
-extern u16 gUnknown_030042A0;
-extern u16 gUnknown_030042A4;
-extern struct Window gUnknown_03004210;
-extern const u8 gUnknown_08400D89[];
-extern u8 gUnknown_03004348;
-extern struct BattlePokemon gBattleMons[];
-extern MainCallback gPreBattleCallback1;
-extern u8 gHealthboxIDs[];
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gUnknown_0300434C[];
-extern u8 gUnknown_0202E8F4;
-extern u8 gUnknown_0202E8F5;
-extern u8 gUnknown_02038470[];
-extern u16 gScriptItemId;
-extern u8 gDisplayedStringBattle[];
-extern const u8 gUnknown_08400CE0[];
-
-extern void dp11b_obj_instanciate(u8, u8, s8, s8);
-extern u8 GetBankIdentity(u8);
-extern u8 GetBankByPlayerAI(u8);
-extern void dp11b_obj_free(u8, u8);
-extern void sub_8010520(struct Sprite *);
-extern void sub_8010574(struct Sprite *);
-extern bool8 IsDoubleBattle();
-extern void sub_804777C();
-extern void sub_8141828();
-extern void sub_8094E20(u8);
-extern void nullsub_14(void);
-extern void sub_80A6DCC(void);
-extern void ReshowBattleScreenAfterMenu(void);
-
-void PlayerHandleGetAttributes(void);
-void sub_802ECF0(void);
-void PlayerHandleSetAttributes(void);
-void sub_802F7CC(void);
-void PlayerHandleLoadPokeSprite(void);
-void PlayerHandleSendOutPoke(void);
-void PlayerHandleReturnPokeToBall(void);
-void PlayerHandleTrainerThrow(void);
-void PlayerHandleTrainerSlide(void);
-void PlayerHandleTrainerSlideBack(void);
-void sub_802FE7C(void);
-void sub_802FF60(void);
-void sub_802FF80(void);
-void PlayerHandleBallThrow(void);
-void PlayerHandlePuase(void);
-void PlayerHandleMoveAnimation(void);
-void PlayerHandlePrintString(void);
-void PlayerHandlePrintStringPlayerOnly(void);
-void sub_803037C(void);
-void nullsub_42(void);
-void sub_8030468(void);
-void PlayerHandleOpenBag(void);
-void sub_8030594(void);
-void sub_8030674(void);
-void PlayerHandleHealthBarUpdate(void);
-void PlayerHandleExpBarUpdate(void);
-void PlayerHandleStatusIconUpdate(void);
-void PlayerHandleStatusAnimation(void);
-void PlayerHandleStatusXor(void);
-void sub_803097C(void);
-void PlayerHandleDMATransfer(void);
-void sub_8030A3C(void);
-void sub_8030A6C(void);
-void sub_8030A78(void);
-void sub_8030A8C(void);
-void sub_8030AA0(void);
-void sub_8030AB4(void);
-void sub_8030AC8(void);
-void sub_8030AE4(void);
-void sub_8030B1C(void);
-void sub_8030B34(void);
-void PlayerHandleHitAnimation(void);
-void sub_8030BCC(void);
-void PlayerHandleEffectivenessSound(void);
-void sub_8030C1C(void);
-void PlayerHandleFaintingCry(void);
-void PlayerHandleIntroSlide(void);
-void PlayerHandleTrainerBallThrow(void);
-void sub_8030FAC(void);
-void sub_80310A4(void);
-void sub_80310F0(void);
-void PlayerHandleSpriteInvisibility(void);
-void PlayerHandleBattleAnimation(void);
-void PlayerHandleLinkStandbyMsg(void);
-void PlayerHandleResetActionMoveSelection(void);
-void sub_80312A0(void);
-void nullsub_43(void);
-
-const u8 gString_TurnJP[] = _("ターン");
-
-void (*const gPlayerBufferCommands[])(void) =
-{
- PlayerHandleGetAttributes,
- sub_802ECF0,
- PlayerHandleSetAttributes,
- sub_802F7CC,
- PlayerHandleLoadPokeSprite,
- PlayerHandleSendOutPoke,
- PlayerHandleReturnPokeToBall,
- PlayerHandleTrainerThrow,
- PlayerHandleTrainerSlide,
- PlayerHandleTrainerSlideBack,
- sub_802FE7C,
- sub_802FF60,
- sub_802FF80,
- PlayerHandleBallThrow,
- PlayerHandlePuase,
- PlayerHandleMoveAnimation,
- PlayerHandlePrintString,
- PlayerHandlePrintStringPlayerOnly,
- sub_803037C,
- nullsub_42,
- sub_8030468,
- PlayerHandleOpenBag,
- sub_8030594,
- sub_8030674,
- PlayerHandleHealthBarUpdate,
- PlayerHandleExpBarUpdate,
- PlayerHandleStatusIconUpdate,
- PlayerHandleStatusAnimation,
- PlayerHandleStatusXor,
- sub_803097C,
- PlayerHandleDMATransfer,
- sub_8030A3C,
- sub_8030A6C,
- sub_8030A78,
- sub_8030A8C,
- sub_8030AA0,
- sub_8030AB4,
- sub_8030AC8,
- sub_8030AE4,
- sub_8030B1C,
- sub_8030B34,
- PlayerHandleHitAnimation,
- sub_8030BCC,
- PlayerHandleEffectivenessSound,
- sub_8030C1C,
- PlayerHandleFaintingCry,
- PlayerHandleIntroSlide,
- PlayerHandleTrainerBallThrow,
- sub_8030FAC,
- sub_80310A4,
- sub_80310F0,
- PlayerHandleSpriteInvisibility,
- PlayerHandleBattleAnimation,
- PlayerHandleLinkStandbyMsg,
- PlayerHandleResetActionMoveSelection,
- sub_80312A0,
- nullsub_43,
-};
-
-void PlayerBufferRunCommand(void);
-void sub_802C2EC(void);
-void sub_802C68C(void);
-void sub_802CA60(void);
-void sub_802D730(void);
-void sub_802DA9C(u8);
-void sub_802DB6C(u8);
-void sub_802DCB0(u8);
-void sub_802DD10(u8);
-void sub_802DDC4(u8);
-void sub_802DF88(void);
-void sub_802E03C(void);
-void sub_802E12C(s32, const u8 *);
-void sub_802E1B0(void);
-void sub_802E220(void);
-void sub_802E2D4(void);
-void sub_802E3B4(u8, int);
-void nullsub_7(u8);
-void b_link_standby_message(void);
-
-void nullsub_91(void)
-{
-}
-
-void SetBankFuncToPlayerBufferRunCommand(void)
-{
- gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
- gDoingBattleAnim = FALSE;
-}
-
-void PlayerBufferExecCompleted(void)
-{
- gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- {
- u8 playerId = GetMultiplayerId();
-
- dp01_prepare_buffer_wireless_probably(2, 4, &playerId);
- gBattleBufferA[gActiveBank][0] = 0x38;
- }
- else
- {
- gBattleExecBuffer &= ~gBitTable[gActiveBank];
- }
-}
-
-void PlayerBufferRunCommand(void)
-{
- if (gBattleExecBuffer & gBitTable[gActiveBank])
- {
- if (gBattleBufferA[gActiveBank][0] < 0x39)
- gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]]();
- else
- PlayerBufferExecCompleted();
- }
-}
-
-void bx_0802E404(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
- PlayerBufferExecCompleted();
-}
-
-void sub_802C098(void)
-{
- u16 itemId = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
-
- dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
- dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
- if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- DestroyMenuCursor();
-
- // Useless switch statement.
- switch (gActionSelectionCursor[gActiveBank])
- {
- case 0:
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
- break;
- case 1:
- dp01_build_cmdbuf_x21_a_bb(1, 1, 0);
- break;
- case 2:
- dp01_build_cmdbuf_x21_a_bb(1, 2, 0);
- break;
- case 3:
- dp01_build_cmdbuf_x21_a_bb(1, 3, 0);
- break;
- }
- PlayerBufferExecCompleted();
- }
- else if (gMain.newKeys & DPAD_LEFT)
- {
- if (gActionSelectionCursor[gActiveBank] & 1)
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 1;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & DPAD_RIGHT)
- {
- if (!(gActionSelectionCursor[gActiveBank] & 1))
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 1;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & DPAD_UP)
- {
- if (gActionSelectionCursor[gActiveBank] & 2)
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 2;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- if (!(gActionSelectionCursor[gActiveBank] & 2))
- {
- PlaySE(SE_SELECT);
- nullsub_8(gActionSelectionCursor[gActiveBank]);
- gActionSelectionCursor[gActiveBank] ^= 2;
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- && GetBankIdentity(gActiveBank) == 2
- && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)])
- && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- {
- if (gBattleBufferA[gActiveBank][1] == 1)
- {
- // Add item to bag if it is a ball
- if (itemId <= ITEM_PREMIER_BALL)
- AddBagItem(itemId, 1);
- else
- return;
- }
- PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 12, 0);
- PlayerBufferExecCompleted();
- DestroyMenuCursor();
- }
- }
- else if (gMain.newKeys & START_BUTTON)
- {
- sub_804454C();
- }
-}
-
-void unref_sub_802C2B8(void)
-{
- dp11b_obj_free(gActiveBank, 1);
- dp11b_obj_free(gActiveBank, 0);
- gBattleBankFunc[gActiveBank] = sub_802C2EC;
-}
-
-// TODO: fix this function
-void sub_802C2EC(void)
-{
- u8 arr[4] = {0, 2, 3, 1};
- s32 i;
-
- dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1);
- i = 0;
- if (gNoOfAllBanks != 0)
- {
- do
- {
- if (i != gUnknown_03004344)
- dp11b_obj_free(i, 1);
- i++;
- } while (i < gNoOfAllBanks);
- }
- if (gMain.newKeys & A_BUTTON)
- {
- DestroyMenuCursor();
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
- dp11b_obj_free(gUnknown_03004344, 1);
- PlayerBufferExecCompleted();
- }
- //_0802C3A8
- else if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- gBattleBankFunc[gActiveBank] = sub_802C68C;
- dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
- dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
- dp11b_obj_free(gUnknown_03004344, 1);
- }
- else if (gMain.newKeys & 0x60)
- {
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- do
- {
- u8 var = GetBankIdentity(gUnknown_03004344);
-
- for (i = 0; i < 4; i++)
- {
- if (var == arr[i])
- break;
- }
- do
- {
- i--;
- if (i < 0)
- i = 3;
- gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
- } while(gUnknown_03004344 == gNoOfAllBanks);
- i = 0;
- switch (GetBankIdentity(gUnknown_03004344))
- {
- case 0:
- case 2:
- if (gActiveBank == gUnknown_03004344)
- {
- u32 moveId;
-
- asm("":::"memory");
- moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
- if (!(gBattleMoves[moveId].target & 2))
- break;
- }
- i++;
- break;
- case 1:
- case 3:
- i++;
- }
- //_0802C500
- if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
- i = 0;
- } while (i == 0);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
- }
- //_0802C540
- else if (gMain.newKeys & 0x90)
- {
- PlaySE(SE_SELECT);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
- do
- {
- u8 var = GetBankIdentity(gUnknown_03004344);
-
- for (i = 0; i < 4; i++)
- {
- if (var == arr[i])
- break;
- }
- do
- {
- i++;
- if (i > 3)
- i = 0;
- gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
- } while (gUnknown_03004344 == gNoOfAllBanks);
- i = 0;
- switch (GetBankIdentity(gUnknown_03004344))
- {
- case 0:
- case 2:
- if (gActiveBank == gUnknown_03004344)
- {
- u32 moveId;
-
- asm("":::"memory");
- moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
- if (!(gBattleMoves[moveId].target & 2))
- break;
- }
- i++;
- break;
- case 1:
- case 3:
- i++;
- }
- if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
- i = 0;
- } while (i == 0);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
- }
-}
-
-struct UnknownStruct1
-{
- u16 moves[4];
- u8 pp[4];
- u8 unkC[0x12-0xC];
- u8 unk12;
- u8 unk13;
- u8 filler14[0x20-0x14];
-};
-
-const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}");
-
-void sub_802C68C(void)
-{
- u32 r8 = 0;
- struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4);
-
- if (gMain.newKeys & A_BUTTON)
- {
- u32 r4;
-
- PlaySE(SE_SELECT);
-
- if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE)
- r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0;
- else
- r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target;
-
- if (r4 & 0x10)
- gUnknown_03004344 = gActiveBank;
- else
- gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1);
-
- if (gBattleBufferA[gActiveBank][1] == 0)
- {
- if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0)
- r8++;
- }
- else
- {
- if (!(r4 & 0x7D))
- r8++;
- if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0)
- {
- r8 = 0;
- }
- else if (!(r4 & 0x12) && CountAliveMons(0) <= 1)
- {
- gUnknown_03004344 = sub_803C434(gActiveBank);
- r8 = 0;
- }
- }
- if (r8 == 0)
- {
- DestroyMenuCursor();
- dp01_build_cmdbuf_x21_a_bb(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
- PlayerBufferExecCompleted();
- }
- else
- {
- gBattleBankFunc[gActiveBank] = sub_802C2EC;
- if (r4 & 0x12)
- gUnknown_03004344 = gActiveBank;
- else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)])
- gUnknown_03004344 = GetBankByPlayerAI(3);
- else
- gUnknown_03004344 = GetBankByPlayerAI(1);
- gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- DestroyMenuCursor();
- PlaySE(SE_SELECT);
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 320;
- dp01_build_cmdbuf_x21_a_bb(1, 10, 0xFFFF);
- PlayerBufferExecCompleted();
- }
- else if (gMain.newKeys & DPAD_LEFT)
- {
- if (gMoveSelectionCursor[gActiveBank] & 1)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 1;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & DPAD_RIGHT)
- {
- if (!(gMoveSelectionCursor[gActiveBank] & 1)
- && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 1;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & DPAD_UP)
- {
- if (gMoveSelectionCursor[gActiveBank] & 2)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 2;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- if (!(gMoveSelectionCursor[gActiveBank] & 2)
- && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348)
- {
- nullsub_7(gMoveSelectionCursor[gActiveBank]);
- gMoveSelectionCursor[gActiveBank] ^= 2;
- PlaySE(SE_SELECT);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E220();
- sub_802E2D4();
- }
- }
- else if (gMain.newKeys & SELECT_BUTTON)
- {
- if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
- {
- sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80);
- if (gMoveSelectionCursor[gActiveBank] != 0)
- gUnknown_03004344 = 0;
- else
- gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1;
- sub_802E3B4(gUnknown_03004344, 27);
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37);
- sub_8002F44(&gUnknown_03004210);
- gBattleBankFunc[gActiveBank] = sub_802CA60;
- }
- }
-}
-
-extern const u8 gUnknown_08400D49[];
-extern const u8 gUnknown_08400D38[];
-
-void sub_802CA60(void)
-{
- u8 perMovePPBonuses[4];
- struct
- {
- u16 moves[4];
- u8 pp[4];
- u8 filler18[8]; // what is this?
- } sp0;
- //struct UnknownStruct1 sp0;
- u8 totalPPBonuses;
-
- if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON))
- {
- PlaySE(SE_SELECT);
- if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344)
- {
- struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- s32 i;
-
- i = r9->moves[gMoveSelectionCursor[gActiveBank]];
- r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344];
- r9->moves[gUnknown_03004344] = i;
-
- i = r9->pp[gMoveSelectionCursor[gActiveBank]];
- r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344];
- r9->pp[gUnknown_03004344] = i;
-
- i = r9->unkC[gMoveSelectionCursor[gActiveBank]];
- r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344];
- r9->unkC[gUnknown_03004344] = i;
-
- if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]])
- {
- gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]];
- gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344];
- }
-
- sub_802E1B0();
-
- for (i = 0; i < 4; i++)
- perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2);
- totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
- perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
- perMovePPBonuses[gUnknown_03004344] = totalPPBonuses;
-
- totalPPBonuses = 0;
- for (i = 0; i < 4; i++)
- totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
- gBattleMons[gActiveBank].ppBonuses = totalPPBonuses;
-
- for (i = 0; i < 4; i++)
- {
- gBattleMons[gActiveBank].moves[i] = r9->moves[i];
- gBattleMons[gActiveBank].pp[i] = r9->pp[i];
- }
- if (!(gBattleMons[gActiveBank].status2 & 0x200000))
- {
- for (i = 0; i < 4; i++)
- {
- sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i);
- sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i);
- }
-
- totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES);
- for (i = 0; i < 4; i++)
- perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2);
-
- i = sp0.moves[gMoveSelectionCursor[gActiveBank]];
- sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344];
- sp0.moves[gUnknown_03004344] = i;
-
- i = sp0.pp[gMoveSelectionCursor[gActiveBank]];
- sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344];
- sp0.pp[gUnknown_03004344] = i;
-
- totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
- perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
- perMovePPBonuses[gUnknown_03004344] = totalPPBonuses;
-
- totalPPBonuses = 0;
- for (i = 0; i < 4; i++)
- totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
-
- for (i = 0; i < 4; i++)
- {
- SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]);
- SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]);
- }
- SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses);
- }
- }
- else
- {
- sub_802E12C(gUnknown_03004344, gUnknown_08400D49);
- }
- gBattleBankFunc[gActiveBank] = sub_802C68C;
- gMoveSelectionCursor[gActiveBank] = gUnknown_03004344;
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
- sub_8002F44(&gUnknown_03004210);
- sub_802E220();
- sub_802E2D4();
- }
- if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
- {
- PlaySE(SE_SELECT);
- nullsub_7(gUnknown_03004344);
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49);
- gBattleBankFunc[gActiveBank] = sub_802C68C;
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
- sub_8002F44(&gUnknown_03004210);
- sub_802E220();
- sub_802E2D4();
- }
- if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1))
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 1;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
- if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348)
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 1;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
- if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2))
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 2;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
- if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348)
- {
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
- else
- nullsub_7(gUnknown_03004344);
- gUnknown_03004344 ^= 2;
- PlaySE(SE_SELECT);
- if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
- sub_802E3B4(gUnknown_03004344, 0);
- else
- sub_802E3B4(gUnknown_03004344, 0x1B);
- }
-}
-
-void sub_802D148(void)
-{
- if (gReceivedRemoteLinkPlayers == 0)
- {
- m4aSongNumStop(SE_HINSI);
- gMain.inBattle = FALSE;
- gMain.callback1 = gPreBattleCallback1;
- SetMainCallback2(c2_8011A1C);
- }
-}
-
-void sub_802D18C(void)
-{
- if (!gPaletteFade.active)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- {
- sub_800832C();
- gBattleBankFunc[gActiveBank] = sub_802D148;
- }
- else
- {
- m4aSongNumStop(SE_HINSI);
- gMain.inBattle = FALSE;
- gMain.callback1 = gPreBattleCallback1;
- SetMainCallback2(gMain.savedCallback);
- }
- }
-}
-
-void sub_802D204(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- PlayerBufferExecCompleted();
-}
-
-// duplicate of sub_802D204
-void sub_802D23C(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- PlayerBufferExecCompleted();
-}
-
-void sub_802D274(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- nullsub_10(gSaveBlock2.playerGender);
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D2E0(void)
-{
- if (--ewram17810[gActiveBank].unk9 == 0xFF)
- {
- ewram17810[gActiveBank].unk9 = 0;
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D31C(void)
-{
- bool8 r6 = FALSE;
-
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- else
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
- && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- if (IsCryPlayingOrClearCrySongs())
- r6 = FALSE;
-
- if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- ewram17810[gActiveBank ^ 2].unk0_7 = 0;
- ewram17810[gActiveBank ^ 2].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- m4aMPlayContinue(&gMPlay_BGM);
- else
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- if (IsDoubleBattle())
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
- ewram17810[gActiveBank].unk9 = 3;
- gBattleBankFunc[gActiveBank] = sub_802D2E0;
- }
-}
-
-void sub_802D500(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
- if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
- sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]);
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
- {
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank ^ 2],
- &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]],
- 0);
- sub_804777C(gActiveBank ^ 2);
- sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
- }
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gPlayerParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- ewram17840.unk9_0 = 0;
- gBattleBankFunc[gActiveBank] = sub_802D31C;
- }
-}
-
-void sub_802D680(void)
-{
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
- && ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- if (ewram17800[gActiveBank].substituteSprite)
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
- gBattleBankFunc[gActiveBank] = sub_802D730;
- }
-}
-
-void sub_802D730(void)
-{
- if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs())
- {
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D798(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
- if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
- && !ewram17810[gActiveBank].unk0_3)
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8031F88(gActiveBank);
- gBattleBankFunc[gActiveBank] = sub_802D680;
- }
-}
-
-void c3_0802FDF4(u8 taskId)
-{
- if (!IsCryPlayingOrClearCrySongs())
- {
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- DestroyTask(taskId);
- }
-}
-
-void bx_t1_healthbar_update(void)
-{
- s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
-
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- if (r4 != -1)
- {
- sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
- }
- else
- {
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802D90C(void)
-{
- if (gUnknown_03004210.state == 0)
- PlayerBufferExecCompleted();
-}
-
-// Rare Candy usage, maybe?
-void sub_802D924(u8 taskId)
-{
- u32 pkmnIndex = (u8)gTasks[taskId].data[0];
- u8 bank = gTasks[taskId].data[2];
- s16 gainedExp = gTasks[taskId].data[1];
-
- if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank])
- {
- struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
- u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
- u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
- u32 currExp = GetMonData(pkmn, MON_DATA_EXP);
- u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
-
- if (currExp + gainedExp >= nextLvlExp)
- {
- u8 savedActiveBank;
-
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp);
- CalculateMonStats(pkmn);
- gainedExp -= nextLvlExp - currExp;
- savedActiveBank = gActiveBank;
- gActiveBank = bank;
- dp01_build_cmdbuf_x21_a_bb(1, 11, gainedExp);
- gActiveBank = savedActiveBank;
-
- if (IsDoubleBattle() == TRUE
- && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2]))
- gTasks[taskId].func = sub_802DCB0;
- else
- gTasks[taskId].func = sub_802DDC4;
- }
- else
- {
- currExp += gainedExp;
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp);
- gBattleBankFunc[bank] = sub_802D90C;
- DestroyTask(taskId);
- }
- }
- else
- {
- gTasks[taskId].func = sub_802DA9C;
- }
-}
-
-void sub_802DA9C(u8 taskId)
-{
- u8 pkmnIndex = gTasks[taskId].data[0];
- s32 r9 = gTasks[taskId].data[1];
- u8 bank = gTasks[taskId].data[2];
- struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
- u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
- u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
- u32 exp = GetMonData(pkmn, MON_DATA_EXP);
- u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
- u32 expToNextLvl;
-
- exp -= currLvlExp;
- expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
- sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9);
- PlaySE(SE_EXP);
- gTasks[taskId].func = sub_802DB6C;
-}
-
-#ifdef NONMATCHING
-void sub_802DB6C(u8 taskId)
-{
- if (gTasks[taskId].data[10] < 13)
- {
- gTasks[taskId].data[10]++;
- }
- else
- {
- u8 r9 = gTasks[taskId].data[0];
- s32 r10 = gTasks[taskId].data[1]; //s16?
- u8 r7 = gTasks[taskId].data[2];
- s16 r4;
-
- r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0);
- sub_8043DFC(gHealthboxIDs[r7]);
- if (r4 == -1)
- {
- struct Pokemon *pkmn;
- u8 r4;
- u32 sp4;
- u16 r0;
- u32 sp0;
-
- m4aSongNumStop(SE_EXP);
- pkmn = &gPlayerParty[r9];
- r4 = GetMonData(pkmn, MON_DATA_LEVEL);
- sp4 = GetMonData(pkmn, MON_DATA_EXP);
- r0 = GetMonData(pkmn, MON_DATA_SPECIES);
- sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1];
- if (sp4 + r10 >= sp0)
- {
- u8 r5;
- u32 asdf;
-
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0);
- CalculateMonStats(pkmn);
- //r10 -= sp0 - sp4;
- asdf = sp0 - sp4;
- //asdf = r10 - (sp0 - sp4);
- r10 -= asdf;
- r5 = gActiveBank;
- gActiveBank = r7;
- dp01_build_cmdbuf_x21_a_bb(1, 11, r10);
- gActiveBank = r5;
- gTasks[taskId].func = sub_802DCB0;
- }
- else
- {
- //u32 asdf = sp4 + r10;
- sp4 += r10;
- SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4);
- gBattleBankFunc[r7] = sub_802D90C;
- DestroyTask(taskId);
- }
- }
- }
-}
-#else
-__attribute__((naked))
-void sub_802DB6C(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x8\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- ldr r1, _0802DB98 @ =gTasks\n\
- lsls r0, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r6, r0, r1\n\
- ldrh r1, [r6, 0x1C]\n\
- movs r2, 0x1C\n\
- ldrsh r0, [r6, r2]\n\
- cmp r0, 0xC\n\
- bgt _0802DB9C\n\
- adds r0, r1, 0x1\n\
- strh r0, [r6, 0x1C]\n\
- b _0802DC98\n\
- .align 2, 0\n\
-_0802DB98: .4byte gTasks\n\
-_0802DB9C:\n\
- ldrb r0, [r6, 0x8]\n\
- mov r9, r0\n\
- ldrh r2, [r6, 0xA]\n\
- mov r10, r2\n\
- ldrb r7, [r6, 0xC]\n\
- ldr r5, _0802DC64 @ =gHealthboxIDs\n\
- adds r5, r7, r5\n\
- ldrb r1, [r5]\n\
- adds r0, r7, 0\n\
- movs r2, 0x1\n\
- movs r3, 0\n\
- bl sub_8045C78\n\
- adds r4, r0, 0\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- ldrb r0, [r5]\n\
- bl sub_8043DFC\n\
- lsls r4, 16\n\
- asrs r4, 16\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- cmp r4, r0\n\
- bne _0802DC98\n\
- movs r0, 0x21\n\
- bl m4aSongNumStop\n\
- movs r0, 0x64\n\
- mov r1, r9\n\
- muls r1, r0\n\
- ldr r0, _0802DC68 @ =gPlayerParty\n\
- adds r5, r1, r0\n\
- adds r0, r5, 0\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- bl GetMonData\n\
- str r0, [sp, 0x4]\n\
- adds r0, r5, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- ldr r3, _0802DC6C @ =gExperienceTables\n\
- adds r4, 0x1\n\
- lsls r4, 2\n\
- ldr r2, _0802DC70 @ =gBaseStats\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- ldrb r1, [r1, 0x13]\n\
- movs r0, 0xCA\n\
- lsls r0, 1\n\
- muls r0, r1\n\
- adds r4, r0\n\
- adds r4, r3\n\
- ldr r1, [r4]\n\
- str r1, [sp]\n\
- mov r2, r10\n\
- lsls r0, r2, 16\n\
- asrs r4, r0, 16\n\
- ldr r0, [sp, 0x4]\n\
- adds r0, r4\n\
- cmp r0, r1\n\
- blt _0802DC7C\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- mov r2, sp\n\
- bl SetMonData\n\
- adds r0, r5, 0\n\
- bl CalculateMonStats\n\
- ldr r2, [sp]\n\
- add r0, sp, 0x4\n\
- ldrh r0, [r0]\n\
- subs r2, r0\n\
- subs r2, r4, r2\n\
- ldr r4, _0802DC74 @ =gActiveBank\n\
- ldrb r5, [r4]\n\
- strb r7, [r4]\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- movs r0, 0x1\n\
- movs r1, 0xB\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
- strb r5, [r4]\n\
- ldr r0, _0802DC78 @ =sub_802DCB0\n\
- str r0, [r6]\n\
- b _0802DC98\n\
- .align 2, 0\n\
-_0802DC64: .4byte gHealthboxIDs\n\
-_0802DC68: .4byte gPlayerParty\n\
-_0802DC6C: .4byte gExperienceTables\n\
-_0802DC70: .4byte gBaseStats\n\
-_0802DC74: .4byte gActiveBank\n\
-_0802DC78: .4byte sub_802DCB0\n\
-_0802DC7C:\n\
- str r0, [sp, 0x4]\n\
- add r2, sp, 0x4\n\
- adds r0, r5, 0\n\
- movs r1, 0x19\n\
- bl SetMonData\n\
- ldr r1, _0802DCA8 @ =gBattleBankFunc\n\
- lsls r0, r7, 2\n\
- adds r0, r1\n\
- ldr r1, _0802DCAC @ =sub_802D90C\n\
- str r1, [r0]\n\
- mov r0, r8\n\
- bl DestroyTask\n\
-_0802DC98:\n\
- add sp, 0x8\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0802DCA8: .4byte gBattleBankFunc\n\
-_0802DCAC: .4byte sub_802D90C\n");
-}
-#endif
-
-void sub_802DCB0(u8 taskId)
-{
- u8 bank = gTasks[taskId].data[2];
- u8 pkmnIndex = gTasks[taskId].data[0];
-
- if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
- bank ^= 2;
- move_anim_start_t4(bank, bank, bank, 0);
- gTasks[taskId].func = sub_802DD10;
-}
-
-void sub_802DD10(u8 taskId)
-{
- u8 bank = gTasks[taskId].data[2];
-
- if (!ewram17810[bank].unk0_6)
- {
- u8 pkmnIndex = gTasks[taskId].data[0];
-
- GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
- if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
- sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0);
- else
- sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0);
- gTasks[taskId].func = sub_802DDC4;
- }
-}
-
-void sub_802DDC4(u8 taskId)
-{
- u8 pkmnIndex;
- u8 bank;
-
- pkmnIndex = gTasks[taskId].data[0];
- GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
- bank = gTasks[taskId].data[2];
- gBattleBankFunc[bank] = sub_802D90C;
- DestroyTask(taskId);
-}
-
-void sub_802DE10(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
- {
- u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
-
- nullsub_9(species);
- FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802DEAC(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- PlayerBufferExecCompleted();
- }
-}
-
-// Duplicate of sub_802D90C
-void sub_802DF18(void)
-{
- if (gUnknown_03004210.state == 0)
- PlayerBufferExecCompleted();
-}
-
-void sub_802DF30(void)
-{
- if (!gPaletteFade.active)
- {
- u8 r4;
-
- gBattleBankFunc[gActiveBank] = sub_802DF88;
- r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0];
- DestroyTask(gUnknown_0300434C[gActiveBank]);
- sub_8094E20(r4);
- }
-}
-
-void sub_802DF88(void)
-{
- if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
- {
- if (gUnknown_0202E8F4 == 1)
- dp01_build_cmdbuf_x22_a_three_bytes(1, gUnknown_0202E8F5, gUnknown_02038470);
- else
- dp01_build_cmdbuf_x22_a_three_bytes(1, 6, NULL);
- if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1)
- b_link_standby_message();
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802E004(void)
-{
- if (!gPaletteFade.active)
- {
- gBattleBankFunc[gActiveBank] = sub_802E03C;
- nullsub_14();
- sub_80A6DCC();
- }
-}
-
-void sub_802E03C(void)
-{
- if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
- {
- dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId);
- PlayerBufferExecCompleted();
- }
-}
-
-void bx_wait_t1(void)
-{
- if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6)
- PlayerBufferExecCompleted();
-}
-
-void bx_blink_t1(void)
-{
- u8 spriteId = gObjectBankIDs[gActiveBank];
-
- if (gSprites[spriteId].data1 == 32)
- {
- gSprites[spriteId].data1 = 0;
- gSprites[spriteId].invisible = FALSE;
- gDoingBattleAnim = 0;
- PlayerBufferExecCompleted();
- }
- else
- {
- if (((u16)gSprites[spriteId].data1 % 4) == 0)
- gSprites[spriteId].invisible ^= 1;
- gSprites[spriteId].data1++;
- }
-}
-
-void sub_802E12C(s32 a, const u8 *b)
-{
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
-
- StringCopy(gDisplayedStringBattle, b);
- StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]);
- InitWindow(
- &gUnknown_03004210,
- gDisplayedStringBattle,
- 0x300 + a * 20,
- (a & 1) ? 11 : 1,
- (a < 2) ? 0x37 : 0x39);
- sub_8002F44(&gUnknown_03004210);
-}
-
-void sub_802E1B0(void)
-{
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- s32 i;
-
- gUnknown_03004348 = 0;
- FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A);
- for (i = 0; i < 4; i++)
- {
- nullsub_7(i);
- sub_802E12C(i, gUnknown_08400D49);
- if (r4->moves[i] != 0)
- gUnknown_03004348++;
- }
-}
-
-void sub_802E220(void)
-{
- if (gBattleBufferA[gActiveBank][2] != 1)
- {
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- u8 *str = gDisplayedStringBattle;
-
- str = StringCopy(str, gUnknown_08400D49);
- str[0] = EXT_CTRL_CODE_BEGIN;
- str[1] = 0x11;
- str[2] = 2;
- str += 3;
- str[0] = EXT_CTRL_CODE_BEGIN;
- str[1] = 0x14;
- str[2] = 6;
- str += 3;
- str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2);
- *str++ = CHAR_SLASH;
- ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2);
- InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37);
- sub_8002F44(&gUnknown_03004210);
- }
-}
-
-extern const u8 gUnknown_08400D52[];
-extern const u8 gTypeNames[][7];
-
-void sub_802E2D4(void)
-{
- if (gBattleBufferA[gActiveBank][2] == 1)
- {
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37);
- }
- else
- {
- struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
- u8 *str = gDisplayedStringBattle;
-
- str = StringCopy(str, gUnknown_08400D49);
- StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]);
- FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A);
- InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39);
- }
- sub_8002F44(&gUnknown_03004210);
-}
-
-const u8 gUnknown_081FAE89[][2] =
-{
- { 8, 120},
- {88, 120},
- { 8, 136},
- {88, 136},
-};
-
-const u8 gUnknown_081FAE91[][2] =
-{
- {144, 120},
- {190, 120},
- {144, 136},
- {190, 136},
- { 72, 72},
- { 32, 90},
- { 80, 80},
- { 80, 88},
-};
-
-void sub_802E3B4(u8 a, int unused)
-{
- sub_814A958(0x48);
- sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]);
-}
-
-void nullsub_7(u8 a)
-{
-}
-
-void sub_802E3E4(u8 a, int unused)
-{
- sub_814A958(0x2A);
- sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]);
-}
-
-void nullsub_8(u8 a)
-{
-}
-
-void sub_802E414(void)
-{
- SetMainCallback2(ReshowBattleScreenAfterMenu);
-}
-
-void sub_802E424(void)
-{
- SetMainCallback2(ReshowBattleScreenAfterMenu);
-}
-
-void sub_802E434(void)
-{
- if (!ewram17810[gActiveBank].unk0_4)
- PlayerBufferExecCompleted();
-}
-
-void sub_802E460(void)
-{
- if (!ewram17810[gActiveBank].unk0_5)
- PlayerBufferExecCompleted();
-}
-
-void b_link_standby_message(void)
-{
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- {
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 0;
- sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15);
- }
-}
diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c
index 0c4b118b4..cf3a3522e 100644
--- a/src/battle/battle_7.c
+++ b/src/battle/battle_7.c
@@ -31,7 +31,6 @@ struct Struct2019348
extern u8 gBattleBufferA[][0x200];
extern u8 gActiveBank;
-extern u32 gBattleExecBuffer;
extern u8 gNoOfAllBanks;
extern u16 gBattlePartyID[];
extern u8 gBanksBySide[];
@@ -63,7 +62,6 @@ extern const u8 gSubstituteDollGfx[];
extern const u8 gSubstituteDollPal[];
extern const struct CompressedSpriteSheet gUnknown_081FAF24;
extern const struct SpriteTemplate gSpriteTemplate_81FAF34;
-extern void (*const gOpponentBufferCommands[])(void);
extern const struct CompressedSpriteSheet gUnknown_0820A47C;
extern const struct CompressedSpriteSheet gUnknown_0820A484;
extern const struct CompressedSpriteSheet gUnknown_0820A48C[];
@@ -96,9 +94,6 @@ void sub_80324E0(u8 a);
void sub_80327CC(void);
void sub_8032978(struct Sprite *);
void sub_80328A4(struct Sprite *);
-void OpponentBufferRunCommand(void);
-void sub_80332D0(void);
-void OpponentBufferExecCompleted(void);
void sub_80312F0(struct Sprite *sprite)
{
@@ -273,29 +268,29 @@ bool8 mplay_80342A4(u8 a)
return TRUE;
}
-void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 bank)
+void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b)
{
u32 personalityValue;
u16 species;
- u32 transformPersonality;
+ u32 r7;
u32 otId;
u8 var;
u16 paletteOffset;
const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
- if (ewram17800[bank].transformedSpecies == 0)
+ if (ewram17800[b].transformedSpecies == 0)
{
species = GetMonData(pkmn, MON_DATA_SPECIES);
- transformPersonality = personalityValue;
+ r7 = personalityValue;
}
else
{
- species = ewram17800[bank].transformedSpecies;
- transformPersonality = gPID_perBank[bank];
+ species = ewram17800[b].transformedSpecies;
+ r7 = gPID_perBank[b];
}
otId = GetMonData(pkmn, MON_DATA_OT_ID);
- var = GetBankIdentity(bank);
+ var = GetBankIdentity(b);
HandleLoadSpecialPokePic(
&gMonFrontPicTable[species],
gMonFrontPicCoords[species].coords,
@@ -303,29 +298,29 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 bank)
0x02000000,
gUnknown_081FAF4C[var],
species,
- transformPersonality);
- paletteOffset = 0x100 + bank * 16;
- if (ewram17800[bank].transformedSpecies == 0)
+ r7);
+ paletteOffset = 0x100 + b * 16;
+ if (ewram17800[b].transformedSpecies == 0)
lzPaletteData = pokemon_get_pal(pkmn);
else
lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
- LoadPalette(ewram, 0x80 + bank * 16, 0x20);
+ LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + b * 16;
sub_800D238(lzPaletteData, ewram + 0x16400);
- LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20);
+ LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
- if (ewram17800[bank].transformedSpecies != 0)
+ if (ewram17800[b].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
}
-void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank)
+void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b)
{
u32 personalityValue;
u16 species;
@@ -336,18 +331,18 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank)
const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
- if (ewram17800[bank].transformedSpecies == 0)
+ if (ewram17800[b].transformedSpecies == 0)
{
species = GetMonData(pkmn, MON_DATA_SPECIES);
r7 = personalityValue;
}
else
{
- species = ewram17800[bank].transformedSpecies;
- r7 = gPID_perBank[bank];
+ species = ewram17800[b].transformedSpecies;
+ r7 = gPID_perBank[b];
}
otId = GetMonData(pkmn, MON_DATA_OT_ID);
- var = GetBankIdentity(bank);
+ var = GetBankIdentity(b);
HandleLoadSpecialPokePic(
&gMonBackPicTable[species],
gMonBackPicCoords[species].coords,
@@ -356,21 +351,21 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 bank)
gUnknown_081FAF4C[var],
species,
r7);
- paletteOffset = 0x100 + bank * 16;
- if (ewram17800[bank].transformedSpecies == 0)
+ paletteOffset = 0x100 + b * 16;
+ if (ewram17800[b].transformedSpecies == 0)
lzPaletteData = pokemon_get_pal(pkmn);
else
lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 0x20);
- LoadPalette(ewram, 0x80 + bank * 16, 0x20);
+ LoadPalette(ewram, 0x80 + b * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + b * 16;
sub_800D238(lzPaletteData, ewram + 0x16400);
- LoadPalette(ewram + 0x16400 + gBattleMonForms[bank] * 32, paletteOffset, 0x20);
+ LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
- if (ewram17800[bank].transformedSpecies != 0)
+ if (ewram17800[b].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
@@ -405,11 +400,11 @@ void sub_8031A6C(u16 a, u8 b)
LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]);
}
-void LoadPlayerTrainerBankSprite(u16 a, u8 bank)
+void LoadPlayerTrainerBankSprite(u16 a, u8 b)
{
u8 status;
- status = GetBankIdentity(bank);
+ status = GetBankIdentity(b);
DecompressPicFromTable_2(
&gTrainerBackPicTable[a],
gTrainerBackPicCoords[a].coords,
@@ -417,7 +412,7 @@ void LoadPlayerTrainerBankSprite(u16 a, u8 bank)
(void *)0x02000000,
gUnknown_081FAF4C[status],
0);
- LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + bank * 16, 32);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32);
}
void nullsub_10(int unused)
@@ -615,7 +610,7 @@ void sub_8031F88(u8 a)
ewram17800[a].invisible = gSprites[gObjectBankIDs[a]].invisible;
}
-void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
+void sub_8031FC4(u8 a, u8 b, bool8 c)
{
u16 paletteOffset;
u16 species;
@@ -626,16 +621,16 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
if (c)
{
- StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], ewram17840.unk0);
- paletteOffset = 0x100 + bank1 * 16;
+ StartSpriteAnim(&gSprites[gObjectBankIDs[a]], ewram17840.unk0);
+ paletteOffset = 0x100 + a * 16;
LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32);
- gBattleMonForms[bank1] = ewram17840.unk0;
- if (ewram17800[bank1].transformedSpecies != 0)
+ gBattleMonForms[a] = ewram17840.unk0;
+ if (ewram17800[a].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
- gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1);
+ gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a);
}
else
{
@@ -659,15 +654,15 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
}
else
{
- r10 = GetBankIdentity(bank1);
- if (GetBankSide(bank2) == 1)
- species = GetMonData(&gEnemyParty[gBattlePartyID[bank2]], MON_DATA_SPECIES);
+ r10 = GetBankIdentity(a);
+ if (GetBankSide(b) == 1)
+ species = GetMonData(&gEnemyParty[gBattlePartyID[b]], MON_DATA_SPECIES);
else
- species = GetMonData(&gPlayerParty[gBattlePartyID[bank2]], MON_DATA_SPECIES);
- if (GetBankSide(bank1) == 0)
+ species = GetMonData(&gPlayerParty[gBattlePartyID[b]], MON_DATA_SPECIES);
+ if (GetBankSide(a) == 0)
{
- personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gPlayerParty[gBattlePartyID[bank1]], MON_DATA_OT_ID);
+ personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic(
&gMonBackPicTable[species],
gMonBackPicCoords[species].coords,
@@ -675,12 +670,12 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
0x02000000,
gUnknown_081FAF4C[r10],
species,
- gPID_perBank[bank1]);
+ gPID_perBank[a]);
}
else
{
- personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gEnemyParty[gBattlePartyID[bank1]], MON_DATA_OT_ID);
+ personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic(
&gMonFrontPicTable[species],
gMonFrontPicCoords[species].coords,
@@ -688,13 +683,13 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
0x02000000,
gUnknown_081FAF4C[r10],
species,
- gPID_perBank[bank1]);
+ gPID_perBank[a]);
}
}
src = gUnknown_081FAF4C[r10];
- dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[bank1]].oam.tileNum * 32);
+ dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32);
DmaCopy32(3, src, dst, 0x800);
- paletteOffset = 0x100 + bank1 * 16;
+ paletteOffset = 0x100 + a * 16;
lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue);
sub_800D238(lzPaletteData, ewram);
LoadPalette(ewram, paletteOffset, 32);
@@ -703,17 +698,17 @@ void sub_8031FC4(u8 bank1, u8 bank2, bool8 c)
u16 *paletteSrc = (u16 *)(ewram + 0x16400);
sub_800D238(lzPaletteData, paletteSrc);
- LoadPalette(paletteSrc + gBattleMonForms[bank2] * 16, paletteOffset, 32);
+ LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32);
}
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
if (!IsContest())
{
- ewram17800[bank1].transformedSpecies = species;
- gBattleMonForms[bank1] = gBattleMonForms[bank2];
+ ewram17800[a].transformedSpecies = species;
+ gBattleMonForms[a] = gBattleMonForms[b];
}
- gSprites[gObjectBankIDs[bank1]].pos1.y = sub_8077F68(bank1);
- StartSpriteAnim(&gSprites[gObjectBankIDs[bank1]], gBattleMonForms[bank1]);
+ gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]);
}
}
@@ -958,278 +953,3 @@ void sub_8032AA8(u8 a, u8 b)
if (b == 0)
sub_80324E0(a);
}
-
-void nullsub_45(void)
-{
-}
-
-void SetBankFuncToOpponentBufferRunCommand(void)
-{
- gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
-}
-
-void OpponentBufferRunCommand(void)
-{
- if (gBattleExecBuffer & gBitTable[gActiveBank])
- {
- if (gBattleBufferA[gActiveBank][0] <= 0x38)
- gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]]();
- else
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032B4C(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- OpponentBufferExecCompleted();
-}
-
-// Duplicate of sub_8032B4C
-void sub_8032B84(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- OpponentBufferExecCompleted();
-}
-
-void sub_8032BBC(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam);
- gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5;
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032C4C(void)
-{
- if ((--ewram17810[gActiveBank].unk9) == 0xFF)
- {
- ewram17810[gActiveBank].unk9 = 0;
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032C88(void)
-{
- bool8 r6 = FALSE;
-
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- else
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
- && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- if (IsCryPlayingOrClearCrySongs())
- r6 = FALSE;
-
- if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- ewram17810[gActiveBank ^ 2].unk0_7 = 0;
- ewram17810[gActiveBank ^ 2].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- m4aMPlayContinue(&gMPlay_BGM);
- else
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
- ewram17810[gActiveBank].unk9 = 3;
- gBattleBankFunc[gActiveBank] = sub_8032C4C;
- }
-}
-
-void sub_8032E2C(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
- sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]);
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
- {
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank ^ 2],
- &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]],
- 0);
- sub_804777C(gActiveBank ^ 2);
- sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
- sub_8032984(
- gActiveBank ^ 2,
- GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES));
- }
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gEnemyParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8032984(
- gActiveBank,
- GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
-
- ewram17840.unk9_0 = 0;
- gBattleBankFunc[gActiveBank] = sub_8032C88;
- }
-}
-
-void sub_8033018(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE
- && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
- {
- if (!ewram17810[gActiveBank].unk0_7)
- {
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- return;
- }
- if (ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- OpponentBufferExecCompleted();
- return;
- }
- }
-}
-
-void sub_80330C8(void)
-{
- s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
-
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- if (r4 != -1)
- sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
- else
- OpponentBufferExecCompleted();
-}
-
-void sub_803311C(void)
-{
- if (!gSprites[gObjectBankIDs[gActiveBank]].inUse)
- {
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8033160(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8032A08(gActiveBank);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_80331D0(void)
-{
- if (gUnknown_03004210.state == 0)
- OpponentBufferExecCompleted();
-}
-
-void bx_blink_t7(void)
-{
- u8 spriteId = gObjectBankIDs[gActiveBank];
-
- if (gSprites[spriteId].data1 == 32)
- {
- gSprites[spriteId].data1 = 0;
- gSprites[spriteId].invisible = FALSE;
- gDoingBattleAnim = 0;
- OpponentBufferExecCompleted();
- }
- else
- {
- if (((u16)gSprites[spriteId].data1 % 4) == 0)
- gSprites[spriteId].invisible ^= 1;
- gSprites[spriteId].data1++;
- }
-}
-
-void sub_8033264(void)
-{
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- if (ewram17800[gActiveBank].substituteSprite)
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
- gBattleBankFunc[gActiveBank] = sub_80332D0;
- }
-}
-
-void sub_80332D0(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- CreateTask(c3_0802FDF4, 10);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8033308(void)
-{
- if (ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gEnemyParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8031F88(gActiveBank);
- gBattleBankFunc[gActiveBank] = sub_8033264;
- }
-}
-
-void sub_80333D4(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
- && !ewram17810[gActiveBank].unk0_3)
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
- gBattleBankFunc[gActiveBank] = sub_8033308;
- }
-}
-
-void sub_8033494(void)
-{
- if (!ewram17810[gActiveBank].unk0_4)
- OpponentBufferExecCompleted();
-}
-
-void sub_80334C0(void)
-{
- if (!ewram17810[gActiveBank].unk0_5)
- OpponentBufferExecCompleted();
-}
-
-void OpponentBufferExecCompleted(void)
-{
- gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
- gBattleExecBuffer &= ~gBitTable[gActiveBank];
-}
diff --git a/src/battle/battle_10.c b/src/battle/battle_controller_linkopponent2.c
index 1a01e5383..2ca7c7970 100644
--- a/src/battle/battle_10.c
+++ b/src/battle/battle_controller_linkopponent2.c
@@ -98,7 +98,9 @@ extern u8 sub_8078874();
extern u8 move_anim_start_t3();
extern void sub_8037FD8(void);
extern void sub_8037F34(void);
-extern void dp01_tbl4_exec_completed(void);
+extern void LinkOpponentBufferExecCompleted(void);
+
+// this file's functions
u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *);
void sub_8038900(u8);
@@ -108,6 +110,130 @@ void sub_8039B64(void);
void sub_803A2C4(u8);
void sub_803A4E0(void);
+void LinkOpponentHandleGetAttributes(void);
+void LinkOpponentHandlecmd1(void);
+void LinkOpponentHandleSetAttributes(void);
+void LinkOpponentHandlecmd3(void);
+void LinkOpponentHandleLoadPokeSprite(void);
+void LinkOpponentHandleSendOutPoke(void);
+void LinkOpponentHandleReturnPokeToBall(void);
+void LinkOpponentHandleTrainerThrow(void);
+void LinkOpponentHandleTrainerSlide(void);
+void LinkOpponentHandleTrainerSlideBack(void);
+void LinkOpponentHandlecmd10(void);
+void LinkOpponentHandlecmd11(void);
+void LinkOpponentHandlecmd12(void);
+void LinkOpponentHandleBallThrow(void);
+void LinkOpponentHandlePuase(void);
+void LinkOpponentHandleMoveAnimation(void);
+void LinkOpponentHandlePrintString(void);
+void LinkOpponentHandlePrintStringPlayerOnly(void);
+void LinkOpponentHandlecmd18(void);
+void LinkOpponentHandlecmd19(void);
+void LinkOpponentHandlecmd20(void);
+void LinkOpponentHandleOpenBag(void);
+void LinkOpponentHandlecmd22(void);
+void LinkOpponentHandlecmd23(void);
+void LinkOpponentHandleHealthBarUpdate(void);
+void LinkOpponentHandleExpBarUpdate(void);
+void LinkOpponentHandleStatusIconUpdate(void);
+void LinkOpponentHandleStatusAnimation(void);
+void LinkOpponentHandleStatusXor(void);
+void LinkOpponentHandlecmd29(void);
+void LinkOpponentHandleDMATransfer(void);
+void LinkOpponentHandlecmd31(void);
+void LinkOpponentHandlecmd32(void);
+void LinkOpponentHandlecmd33(void);
+void LinkOpponentHandlecmd34(void);
+void LinkOpponentHandlecmd35(void);
+void LinkOpponentHandlecmd36(void);
+void LinkOpponentHandlecmd37(void);
+void LinkOpponentHandlecmd38(void);
+void LinkOpponentHandlecmd39(void);
+void LinkOpponentHandlecmd40(void);
+void LinkOpponentHandleHitAnimation(void);
+void LinkOpponentHandlecmd42(void);
+void LinkOpponentHandleEffectivenessSound(void);
+void LinkOpponentHandlecmd44(void);
+void LinkOpponentHandleFaintingCry(void);
+void LinkOpponentHandleIntroSlide(void);
+void LinkOpponentHandleTrainerBallThrow(void);
+void LinkOpponentHandlecmd48(void);
+void LinkOpponentHandlecmd49(void);
+void LinkOpponentHandlecmd50(void);
+void LinkOpponentHandleSpriteInvisibility(void);
+void LinkOpponentHandleBattleAnimation(void);
+void LinkOpponentHandleLinkStandbyMsg(void);
+void LinkOpponentHandleResetActionMoveSelection(void);
+void LinkOpponentHandlecmd55(void);
+void LinkOpponentHandlecmd56(void);
+
+// const data
+
+typedef void (*BattleBufferCmd) (void);
+const BattleBufferCmd gLinkOpponentBufferCommands[] =
+{
+ LinkOpponentHandleGetAttributes,
+ LinkOpponentHandlecmd1,
+ LinkOpponentHandleSetAttributes,
+ LinkOpponentHandlecmd3,
+ LinkOpponentHandleLoadPokeSprite,
+ LinkOpponentHandleSendOutPoke,
+ LinkOpponentHandleReturnPokeToBall,
+ LinkOpponentHandleTrainerThrow,
+ LinkOpponentHandleTrainerSlide,
+ LinkOpponentHandleTrainerSlideBack,
+ LinkOpponentHandlecmd10,
+ LinkOpponentHandlecmd11,
+ LinkOpponentHandlecmd12,
+ LinkOpponentHandleBallThrow,
+ LinkOpponentHandlePuase,
+ LinkOpponentHandleMoveAnimation,
+ LinkOpponentHandlePrintString,
+ LinkOpponentHandlePrintStringPlayerOnly,
+ LinkOpponentHandlecmd18,
+ LinkOpponentHandlecmd19,
+ LinkOpponentHandlecmd20,
+ LinkOpponentHandleOpenBag,
+ LinkOpponentHandlecmd22,
+ LinkOpponentHandlecmd23,
+ LinkOpponentHandleHealthBarUpdate,
+ LinkOpponentHandleExpBarUpdate,
+ LinkOpponentHandleStatusIconUpdate,
+ LinkOpponentHandleStatusAnimation,
+ LinkOpponentHandleStatusXor,
+ LinkOpponentHandlecmd29,
+ LinkOpponentHandleDMATransfer,
+ LinkOpponentHandlecmd31,
+ LinkOpponentHandlecmd32,
+ LinkOpponentHandlecmd33,
+ LinkOpponentHandlecmd34,
+ LinkOpponentHandlecmd35,
+ LinkOpponentHandlecmd36,
+ LinkOpponentHandlecmd37,
+ LinkOpponentHandlecmd38,
+ LinkOpponentHandlecmd39,
+ LinkOpponentHandlecmd40,
+ LinkOpponentHandleHitAnimation,
+ LinkOpponentHandlecmd42,
+ LinkOpponentHandleEffectivenessSound,
+ LinkOpponentHandlecmd44,
+ LinkOpponentHandleFaintingCry,
+ LinkOpponentHandleIntroSlide,
+ LinkOpponentHandleTrainerBallThrow,
+ LinkOpponentHandlecmd48,
+ LinkOpponentHandlecmd49,
+ LinkOpponentHandlecmd50,
+ LinkOpponentHandleSpriteInvisibility,
+ LinkOpponentHandleBattleAnimation,
+ LinkOpponentHandleLinkStandbyMsg,
+ LinkOpponentHandleResetActionMoveSelection,
+ LinkOpponentHandlecmd55,
+ LinkOpponentHandlecmd56
+};
+
+// code
+
void LinkOpponentHandleGetAttributes(void)
{
u8 buffer[0x100];
@@ -129,8 +255,8 @@ void LinkOpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer);
- dp01_tbl4_exec_completed();
+ Emitcmd29(1, r6, buffer);
+ LinkOpponentBufferExecCompleted();
}
u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
@@ -438,12 +564,12 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
return size;
}
-void sub_803889C(void)
+void LinkOpponentHandlecmd1(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_80388A8(void)
+void LinkOpponentHandleSetAttributes(void)
{
u8 i;
u8 r4;
@@ -462,7 +588,7 @@ void sub_80388A8(void)
r4 >>= 1;
}
}
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
void sub_8038900(u8 a)
@@ -681,7 +807,7 @@ void sub_8038900(u8 a)
}
}
-void sub_8039220(void)
+void LinkOpponentHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -689,10 +815,10 @@ void sub_8039220(void)
dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = gBattleBufferA[gActiveBank][3 + i];
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039294(void)
+void LinkOpponentHandleLoadPokeSprite(void)
{
u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
@@ -711,7 +837,7 @@ void sub_8039294(void)
gBattleBankFunc[gActiveBank] = sub_8037A74;
}
-void sub_80393E4(void)
+void LinkOpponentHandleSendOutPoke(void)
{
gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
sub_8039430(gActiveBank, gBattleBufferA[gActiveBank][2]);
@@ -743,7 +869,7 @@ void sub_8039430(u8 a, u8 b)
gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE);
}
-void sub_80395B4(void)
+void LinkOpponentHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -756,7 +882,7 @@ void sub_80395B4(void)
DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
sub_8032A08(gActiveBank);
sub_8043DB0(gHealthboxIDs[gActiveBank]);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
}
@@ -780,7 +906,7 @@ void sub_8039648(void)
}
}
-void sub_80396D0(void)
+void LinkOpponentHandleTrainerThrow(void)
{
s16 xOffset;
u32 gender;
@@ -814,12 +940,12 @@ void sub_80396D0(void)
gBattleBankFunc[gActiveBank] = sub_803757C;
}
-void sub_80398A4(void)
+void LinkOpponentHandleTrainerSlide(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_80398B0(void)
+void LinkOpponentHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
gSprites[gObjectBankIDs[gActiveBank]].data0 = 35;
@@ -830,7 +956,7 @@ void sub_80398B0(void)
gBattleBankFunc[gActiveBank] = sub_80375B4;
}
-void sub_803995C(void)
+void LinkOpponentHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -847,27 +973,27 @@ void sub_803995C(void)
}
}
-void sub_8039A00(void)
+void LinkOpponentHandlecmd11(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A0C(void)
+void LinkOpponentHandlecmd12(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A18(void)
+void LinkOpponentHandleBallThrow(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A24(void)
+void LinkOpponentHandlePuase(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A30(void)
+void LinkOpponentHandleMoveAnimation(void)
{
if (!mplay_80342A4(gActiveBank))
{
@@ -890,7 +1016,7 @@ void sub_8039A30(void)
// Dead code. sub_8031720 always returns 0.
if (sub_8031720(r0, gUnknown_0202F7C4) != 0)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
else
{
@@ -945,13 +1071,13 @@ void sub_8039B64(void)
gActiveBank,
gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
ewram17810[gActiveBank].unk4 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
break;
}
}
-void sub_8039CC8(void)
+void LinkOpponentHandlePrintString(void)
{
gUnknown_030042A4 = 0;
gUnknown_030042A0 = 0;
@@ -960,42 +1086,42 @@ void sub_8039CC8(void)
gBattleBankFunc[gActiveBank] = sub_8037C2C;
}
-void sub_8039D2C(void)
+void LinkOpponentHandlePrintStringPlayerOnly(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D38(void)
+void LinkOpponentHandlecmd18(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D44(void)
+void LinkOpponentHandlecmd19(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D50(void)
+void LinkOpponentHandlecmd20(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D5C(void)
+void LinkOpponentHandleOpenBag(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D68(void)
+void LinkOpponentHandlecmd22(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D74(void)
+void LinkOpponentHandlecmd23(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D80(void)
+void LinkOpponentHandleHealthBarUpdate(void)
{
s16 r7;
@@ -1017,12 +1143,12 @@ void sub_8039D80(void)
gBattleBankFunc[gActiveBank] = sub_8037B24;
}
-void sub_8039E70(void)
+void LinkOpponentHandleExpBarUpdate(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039E7C(void)
+void LinkOpponentHandleStatusIconUpdate(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1032,7 +1158,7 @@ void sub_8039E7C(void)
}
}
-void sub_8039EF0(void)
+void LinkOpponentHandleStatusAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1046,80 +1172,80 @@ void sub_8039EF0(void)
}
}
-void sub_8039F58(void)
+void LinkOpponentHandleStatusXor(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F64(void)
+void LinkOpponentHandlecmd29(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F70(void)
+void LinkOpponentHandleDMATransfer(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F7C(void)
+void LinkOpponentHandlecmd31(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F88(void)
+void LinkOpponentHandlecmd32(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F94(void)
+void LinkOpponentHandlecmd33(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FA0(void)
+void LinkOpponentHandlecmd34(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FAC(void)
+void LinkOpponentHandlecmd35(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FB8(void)
+void LinkOpponentHandlecmd36(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FC4(void)
+void LinkOpponentHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FE0(void)
+void LinkOpponentHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A018(void)
+void LinkOpponentHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A030(void)
+void LinkOpponentHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void dp01t_29_4_blink(void)
+void LinkOpponentHandleHitAnimation(void)
{
if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
else
{
@@ -1130,12 +1256,12 @@ void dp01t_29_4_blink(void)
}
}
-void sub_803A0C8(void)
+void LinkOpponentHandlecmd42(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A0D4(void)
+void LinkOpponentHandleEffectivenessSound(void)
{
s8 pan;
@@ -1144,31 +1270,31 @@ void sub_803A0D4(void)
else
pan = 63;
PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A118(void)
+void LinkOpponentHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A148(void)
+void LinkOpponentHandleFaintingCry(void)
{
PlayCry3(
GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES),
25, 5);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void dp01t_2E_4_battle_intro(void)
+void LinkOpponentHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A1B8(void)
+void LinkOpponentHandleTrainerBallThrow(void)
{
u8 taskId;
@@ -1219,11 +1345,11 @@ void sub_803A3A8(struct Sprite *sprite)
DestroySprite(sprite);
}
-void sub_803A3DC(void)
+void LinkOpponentHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
return;
}
@@ -1256,33 +1382,33 @@ void sub_803A4E0(void)
if (ewram17810[gActiveBank].unk5++ >= 93)
{
ewram17810[gActiveBank].unk5 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
}
-void sub_803A520(void)
+void LinkOpponentHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A56C(void)
+void LinkOpponentHandlecmd50(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A578(void)
+void LinkOpponentHandleSpriteInvisibility(void)
{
if (sub_8078874(gActiveBank) != 0)
{
gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
sub_8031F88(gActiveBank);
}
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void bx_exec_buffer_A_ch0_tbl4(void)
+void LinkOpponentHandleBattleAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1290,23 +1416,23 @@ void bx_exec_buffer_A_ch0_tbl4(void)
u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0)
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
else
gBattleBankFunc[gActiveBank] = sub_8037FD8;
}
}
-void sub_803A640(void)
+void LinkOpponentHandleLinkStandbyMsg(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A64C(void)
+void LinkOpponentHandleResetActionMoveSelection(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A658(void)
+void LinkOpponentHandlecmd55(void)
{
if (gBattleBufferA[gActiveBank][1] == 3)
gBattleOutcome = gBattleBufferA[gActiveBank][1];
@@ -1314,10 +1440,10 @@ void sub_803A658(void)
gBattleOutcome = gBattleBufferA[gActiveBank][1] ^ 3;
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
gBattleBankFunc[gActiveBank] = sub_8037F34;
}
-void nullsub_48(void)
+void LinkOpponentHandlecmd56(void)
{
}
diff --git a/src/battle/battle_811DA74.c b/src/battle/battle_controller_linkpartner.c
index 14f547b82..4308a8a5c 100644
--- a/src/battle/battle_811DA74.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -64,7 +64,6 @@ extern u8 gUnknown_0300434C[];
extern u8 gBattleMonForms[];
extern u8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
-extern void (*const gLinkPartnerBufferCommands[])(void);
extern u8 move_anim_start_t3();
extern u8 sub_8078874();
@@ -111,6 +110,8 @@ extern void sub_8031F88();
extern void sub_8141828();
extern void c2_8011A1C(void);
+// this file's functions
+
void LinkPartnerBufferRunCommand(void);
void sub_811E0A0(void);
void LinkPartnerBufferExecCompleted(void);
@@ -122,6 +123,127 @@ void sub_811FF30(void);
void sub_812071C(u8);
void sub_81208E0(void);
+void LinkPartnerHandleGetAttributes(void);
+void LinkPartnerHandlecmd1(void);
+void LinkPartnerHandleSetAttributes(void);
+void LinkPartnerHandlecmd3(void);
+void LinkPartnerHandleLoadPokeSprite(void);
+void LinkPartnerHandleSendOutPoke(void);
+void LinkPartnerHandleReturnPokeToBall(void);
+void LinkPartnerHandleTrainerThrow(void);
+void LinkPartnerHandleTrainerSlide(void);
+void LinkPartnerHandleTrainerSlideBack(void);
+void LinkPartnerHandlecmd10(void);
+void LinkPartnerHandlecmd11(void);
+void LinkPartnerHandlecmd12(void);
+void LinkPartnerHandleBallThrow(void);
+void LinkPartnerHandlePuase(void);
+void LinkPartnerHandleMoveAnimation(void);
+void LinkPartnerHandlePrintString(void);
+void LinkPartnerHandlePrintStringPlayerOnly(void);
+void LinkPartnerHandlecmd18(void);
+void LinkPartnerHandlecmd19(void);
+void LinkPartnerHandlecmd20(void);
+void LinkPartnerHandleOpenBag(void);
+void LinkPartnerHandlecmd22(void);
+void LinkPartnerHandlecmd23(void);
+void LinkPartnerHandleHealthBarUpdate(void);
+void LinkPartnerHandleExpBarUpdate(void);
+void LinkPartnerHandleStatusIconUpdate(void);
+void LinkPartnerHandleStatusAnimation(void);
+void LinkPartnerHandleStatusXor(void);
+void LinkPartnerHandlecmd29(void);
+void LinkPartnerHandleDMATransfer(void);
+void LinkPartnerHandlecmd31(void);
+void LinkPartnerHandlecmd32(void);
+void LinkPartnerHandlecmd33(void);
+void LinkPartnerHandlecmd34(void);
+void LinkPartnerHandlecmd35(void);
+void LinkPartnerHandlecmd36(void);
+void LinkPartnerHandlecmd37(void);
+void LinkPartnerHandlecmd38(void);
+void LinkPartnerHandlecmd39(void);
+void LinkPartnerHandlecmd40(void);
+void LinkPartnerHandleHitAnimation(void);
+void LinkPartnerHandlecmd42(void);
+void LinkPartnerHandleEffectivenessSound(void);
+void LinkPartnerHandlecmd44(void);
+void LinkPartnerHandleFaintingCry(void);
+void LinkPartnerHandleIntroSlide(void);
+void LinkPartnerHandleTrainerBallThrow(void);
+void LinkPartnerHandlecmd48(void);
+void LinkPartnerHandlecmd49(void);
+void LinkPartnerHandlecmd50(void);
+void LinkPartnerHandleSpriteInvisibility(void);
+void LinkPartnerHandleBattleAnimation(void);
+void LinkPartnerHandleLinkStandbyMsg(void);
+void LinkPartnerHandleResetActionMoveSelection(void);
+void LinkPartnerHandlecmd55(void);
+void LinkPartnerHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gLinkPartnerBufferCommands[] =
+{
+ LinkPartnerHandleGetAttributes,
+ LinkPartnerHandlecmd1,
+ LinkPartnerHandleSetAttributes,
+ LinkPartnerHandlecmd3,
+ LinkPartnerHandleLoadPokeSprite,
+ LinkPartnerHandleSendOutPoke,
+ LinkPartnerHandleReturnPokeToBall,
+ LinkPartnerHandleTrainerThrow,
+ LinkPartnerHandleTrainerSlide,
+ LinkPartnerHandleTrainerSlideBack,
+ LinkPartnerHandlecmd10,
+ LinkPartnerHandlecmd11,
+ LinkPartnerHandlecmd12,
+ LinkPartnerHandleBallThrow,
+ LinkPartnerHandlePuase,
+ LinkPartnerHandleMoveAnimation,
+ LinkPartnerHandlePrintString,
+ LinkPartnerHandlePrintStringPlayerOnly,
+ LinkPartnerHandlecmd18,
+ LinkPartnerHandlecmd19,
+ LinkPartnerHandlecmd20,
+ LinkPartnerHandleOpenBag,
+ LinkPartnerHandlecmd22,
+ LinkPartnerHandlecmd23,
+ LinkPartnerHandleHealthBarUpdate,
+ LinkPartnerHandleExpBarUpdate,
+ LinkPartnerHandleStatusIconUpdate,
+ LinkPartnerHandleStatusAnimation,
+ LinkPartnerHandleStatusXor,
+ LinkPartnerHandlecmd29,
+ LinkPartnerHandleDMATransfer,
+ LinkPartnerHandlecmd31,
+ LinkPartnerHandlecmd32,
+ LinkPartnerHandlecmd33,
+ LinkPartnerHandlecmd34,
+ LinkPartnerHandlecmd35,
+ LinkPartnerHandlecmd36,
+ LinkPartnerHandlecmd37,
+ LinkPartnerHandlecmd38,
+ LinkPartnerHandlecmd39,
+ LinkPartnerHandlecmd40,
+ LinkPartnerHandleHitAnimation,
+ LinkPartnerHandlecmd42,
+ LinkPartnerHandleEffectivenessSound,
+ LinkPartnerHandlecmd44,
+ LinkPartnerHandleFaintingCry,
+ LinkPartnerHandleIntroSlide,
+ LinkPartnerHandleTrainerBallThrow,
+ LinkPartnerHandlecmd48,
+ LinkPartnerHandlecmd49,
+ LinkPartnerHandlecmd50,
+ LinkPartnerHandleSpriteInvisibility,
+ LinkPartnerHandleBattleAnimation,
+ LinkPartnerHandleLinkStandbyMsg,
+ LinkPartnerHandleResetActionMoveSelection,
+ LinkPartnerHandlecmd55,
+ LinkPartnerHandlecmd56,
+};
+// code starts here
void nullsub_74(void)
{
@@ -421,7 +543,7 @@ void LinkPartnerHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, unk);
+ Emitcmd29(1, r6, unk);
LinkPartnerBufferExecCompleted();
}
@@ -731,7 +853,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
return size;
}
-void sub_811EC04(void)
+void LinkPartnerHandlecmd1(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -976,7 +1098,7 @@ void sub_811EC68(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_811F664(void)
+void LinkPartnerHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -987,7 +1109,7 @@ void sub_811F664(void)
LinkPartnerBufferExecCompleted();
}
-void sub_811F6D8(void)
+void LinkPartnerHandleLoadPokeSprite(void)
{
BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
GetMonSpriteTemplate_803C56C(
@@ -1005,7 +1127,7 @@ void sub_811F6D8(void)
gBattleBankFunc[gActiveBank] = sub_811DDE8;
}
-void sub_811F7F4(void)
+void LinkPartnerHandleSendOutPoke(void)
{
sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]);
gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
@@ -1038,7 +1160,7 @@ void sub_811F864(u8 a, u8 b)
gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFF);
}
-void sub_811F9D0(void)
+void LinkPartnerHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -1074,7 +1196,7 @@ void sub_811FA5C(void)
}
}
-void sub_811FAE4(void)
+void LinkPartnerHandleTrainerThrow(void)
{
s16 xOffset;
u32 gender;
@@ -1105,12 +1227,12 @@ void sub_811FAE4(void)
gBattleBankFunc[gActiveBank] = sub_811DAE4;
}
-void sub_811FC30(void)
+void LinkPartnerHandleTrainerSlide(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FC3C(void)
+void LinkPartnerHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
gSprites[gObjectBankIDs[gActiveBank]].data0 = 35;
@@ -1121,7 +1243,7 @@ void sub_811FC3C(void)
gBattleBankFunc[gActiveBank] = sub_811DB1C;
}
-void sub_811FCE8(void)
+void LinkPartnerHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -1141,27 +1263,27 @@ void sub_811FCE8(void)
}
}
-void sub_811FDCC(void)
+void LinkPartnerHandlecmd11(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDD8(void)
+void LinkPartnerHandlecmd12(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDE4(void)
+void LinkPartnerHandleBallThrow(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDF0(void)
+void LinkPartnerHandlePuase(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDFC(void)
+void LinkPartnerHandleMoveAnimation(void)
{
if (!mplay_80342A4(gActiveBank))
{
@@ -1242,7 +1364,7 @@ void sub_811FF30(void)
}
}
-void sub_8120094(void)
+void LinkPartnerHandlePrintString(void)
{
gUnknown_030042A4 = 0;
gUnknown_030042A0 = 0;
@@ -1251,37 +1373,37 @@ void sub_8120094(void)
gBattleBankFunc[gActiveBank] = sub_811DFA0;
}
-void sub_81200F8(void)
+void LinkPartnerHandlePrintStringPlayerOnly(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120104(void)
+void LinkPartnerHandlecmd18(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120110(void)
+void LinkPartnerHandlecmd19(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812011C(void)
+void LinkPartnerHandlecmd20(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120128(void)
+void LinkPartnerHandleOpenBag(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120134(void)
+void LinkPartnerHandlecmd22(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120140(void)
+void LinkPartnerHandlecmd23(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1337,70 +1459,70 @@ void LinkPartnerHandleStatusAnimation(void)
}
}
-void sub_8120324(void)
+void LinkPartnerHandleStatusXor(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120330(void)
+void LinkPartnerHandlecmd29(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812033C(void)
+void LinkPartnerHandleDMATransfer(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120348(void)
+void LinkPartnerHandlecmd31(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120354(void)
+void LinkPartnerHandlecmd32(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120360(void)
+void LinkPartnerHandlecmd33(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812036C(void)
+void LinkPartnerHandlecmd34(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120378(void)
+void LinkPartnerHandlecmd35(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120384(void)
+void LinkPartnerHandlecmd36(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120390(void)
+void LinkPartnerHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
LinkPartnerBufferExecCompleted();
}
-void sub_81203AC(void)
+void LinkPartnerHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
LinkPartnerBufferExecCompleted();
}
-void sub_81203E4(void)
+void LinkPartnerHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
LinkPartnerBufferExecCompleted();
}
-void sub_81203FC(void)
+void LinkPartnerHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
LinkPartnerBufferExecCompleted();
@@ -1421,7 +1543,7 @@ void LinkPartnerHandleHitAnimation(void)
}
}
-void sub_8120494(void)
+void LinkPartnerHandlecmd42(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1438,7 +1560,7 @@ void LinkPartnerHandleEffectivenessSound(void)
LinkPartnerBufferExecCompleted();
}
-void sub_81204E4(void)
+void LinkPartnerHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
LinkPartnerBufferExecCompleted();
@@ -1452,14 +1574,14 @@ void LinkPartnerHandleFaintingCry(void)
LinkPartnerBufferExecCompleted();
}
-void dp01t_2E_3_battle_intro(void)
+void LinkPartnerHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
LinkPartnerBufferExecCompleted();
}
-void sub_8120588(void)
+void LinkPartnerHandleTrainerBallThrow(void)
{
u8 r4;
u8 taskId;
@@ -1517,7 +1639,7 @@ void sub_812071C(u8 taskId)
DestroyTask(taskId);
}
-void dp01t_30_3_80EB11C(void)
+void LinkPartnerHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1546,19 +1668,19 @@ void sub_81208E0(void)
}
}
-void sub_8120920(void)
+void LinkPartnerHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
LinkPartnerBufferExecCompleted();
}
-void sub_812096C(void)
+void LinkPartnerHandlecmd50(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120978(void)
+void LinkPartnerHandleSpriteInvisibility(void)
{
if (sub_8078874(gActiveBank) != 0)
{
@@ -1568,7 +1690,7 @@ void sub_8120978(void)
LinkPartnerBufferExecCompleted();
}
-void sub_81209D8(void)
+void LinkPartnerHandleBattleAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1582,17 +1704,17 @@ void sub_81209D8(void)
}
}
-void sub_8120A40(void)
+void LinkPartnerHandleLinkStandbyMsg(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120A4C(void)
+void LinkPartnerHandleResetActionMoveSelection(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120A58(void)
+void LinkPartnerHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1601,6 +1723,6 @@ void sub_8120A58(void)
gBattleBankFunc[gActiveBank] = sub_811E29C;
}
-void nullsub_75(void)
+void LinkPartnerHandlecmd56(void)
{
}
diff --git a/src/battle/battle_8.c b/src/battle/battle_controller_opponent.c
index 44e42d0d6..abfa3fef2 100644
--- a/src/battle/battle_8.c
+++ b/src/battle/battle_controller_opponent.c
@@ -1,15 +1,19 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai.h"
#include "battle_interface.h"
#include "data2.h"
-#include "graphics.h"
+#include "battle_811DA74.h"
+#include "battle_anim_813F0F4.h"
+#include "link.h"
+#include "m4a.h"
#include "main.h"
+#include "palette.h"
+#include "pokeball.h"
#include "pokemon.h"
-#include "rng.h"
#include "rom3.h"
-#include "songs.h"
+#include "rom_8077ABC.h"
#include "sound.h"
+#include "songs.h"
#include "sprite.h"
#include "string_util.h"
#include "task.h"
@@ -53,6 +57,11 @@ extern bool8 gDoingBattleAnim;
extern u16 gUnknown_02024DE8;
extern u8 gUnknown_02024E68[];
extern MainCallback gPreBattleCallback1;
+extern void (*const gOpponentBufferCommands[])(void);
+extern struct MusicPlayerInfo gMPlay_SE1;
+extern struct MusicPlayerInfo gMPlay_SE2;
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u32 gBattleExecBuffer;
extern u8 sub_8077ABC();
extern u8 sub_8077F68();
@@ -107,8 +116,11 @@ extern void sub_8032E2C(void);
extern u8 sub_8078874();
extern u8 move_anim_start_t3();
extern void sub_80334C0(void);
-extern void OpponentBufferExecCompleted(void);
+// this file's functions
+
+void OpponentBufferExecCompleted(void);
+void OpponentBufferRunCommand(void);
u32 sub_8033598(u8, u8 *);
void sub_8033E24(u8);
void sub_803495C(u8, u8);
@@ -117,6 +129,407 @@ void sub_8035238(void);
void sub_8035C10(struct Sprite *);
void sub_8035C44(u8);
void sub_8035E2C(void);
+void sub_80332D0(void);
+
+void OpponentHandleGetAttributes(void);
+void OpponentHandlecmd1(void);
+void OpponentHandleSetAttributes(void);
+void OpponentHandlecmd3(void);
+void OpponentHandleLoadPokeSprite(void);
+void OpponentHandleSendOutPoke(void);
+void OpponentHandleReturnPokeToBall(void);
+void OpponentHandleTrainerThrow(void);
+void OpponentHandleTrainerSlide(void);
+void OpponentHandleTrainerSlideBack(void);
+void OpponentHandlecmd10(void);
+void OpponentHandlecmd11(void);
+void OpponentHandlecmd12(void);
+void OpponentHandleBallThrow(void);
+void OpponentHandlePuase(void);
+void OpponentHandleMoveAnimation(void);
+void OpponentHandlePrintString(void);
+void OpponentHandlePrintStringPlayerOnly(void);
+void OpponentHandlecmd18(void);
+void OpponentHandlecmd19(void);
+void OpponentHandlecmd20(void);
+void OpponentHandleOpenBag(void);
+void OpponentHandlecmd22(void);
+void OpponentHandlecmd23(void);
+void OpponentHandleHealthBarUpdate(void);
+void OpponentHandleExpBarUpdate(void);
+void OpponentHandleStatusIconUpdate(void);
+void OpponentHandleStatusAnimation(void);
+void OpponentHandleStatusXor(void);
+void OpponentHandlecmd29(void);
+void OpponentHandleDMATransfer(void);
+void OpponentHandlecmd31(void);
+void OpponentHandlecmd32(void);
+void OpponentHandlecmd33(void);
+void OpponentHandlecmd34(void);
+void OpponentHandlecmd35(void);
+void OpponentHandlecmd36(void);
+void OpponentHandlecmd37(void);
+void OpponentHandlecmd38(void);
+void OpponentHandlecmd39(void);
+void OpponentHandlecmd40(void);
+void OpponentHandleHitAnimation(void);
+void OpponentHandlecmd42(void);
+void OpponentHandleEffectivenessSound(void);
+void OpponentHandlecmd44(void);
+void OpponentHandleFaintingCry(void);
+void OpponentHandleIntroSlide(void);
+void OpponentHandleTrainerBallThrow(void);
+void OpponentHandlecmd48(void);
+void OpponentHandlecmd49(void);
+void OpponentHandlecmd50(void);
+void OpponentHandleSpriteInvisibility(void);
+void OpponentHandleBattleAnimation(void);
+void OpponentHandleLinkStandbyMsg(void);
+void OpponentHandleResetActionMoveSelection(void);
+void OpponentHandlecmd55(void);
+void OpponentHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gOpponentBufferCommands[] =
+{
+ OpponentHandleGetAttributes,
+ OpponentHandlecmd1,
+ OpponentHandleSetAttributes,
+ OpponentHandlecmd3,
+ OpponentHandleLoadPokeSprite,
+ OpponentHandleSendOutPoke,
+ OpponentHandleReturnPokeToBall,
+ OpponentHandleTrainerThrow,
+ OpponentHandleTrainerSlide,
+ OpponentHandleTrainerSlideBack,
+ OpponentHandlecmd10,
+ OpponentHandlecmd11,
+ OpponentHandlecmd12,
+ OpponentHandleBallThrow,
+ OpponentHandlePuase,
+ OpponentHandleMoveAnimation,
+ OpponentHandlePrintString,
+ OpponentHandlePrintStringPlayerOnly,
+ OpponentHandlecmd18,
+ OpponentHandlecmd19,
+ OpponentHandlecmd20,
+ OpponentHandleOpenBag,
+ OpponentHandlecmd22,
+ OpponentHandlecmd23,
+ OpponentHandleHealthBarUpdate,
+ OpponentHandleExpBarUpdate,
+ OpponentHandleStatusIconUpdate,
+ OpponentHandleStatusAnimation,
+ OpponentHandleStatusXor,
+ OpponentHandlecmd29,
+ OpponentHandleDMATransfer,
+ OpponentHandlecmd31,
+ OpponentHandlecmd32,
+ OpponentHandlecmd33,
+ OpponentHandlecmd34,
+ OpponentHandlecmd35,
+ OpponentHandlecmd36,
+ OpponentHandlecmd37,
+ OpponentHandlecmd38,
+ OpponentHandlecmd39,
+ OpponentHandlecmd40,
+ OpponentHandleHitAnimation,
+ OpponentHandlecmd42,
+ OpponentHandleEffectivenessSound,
+ OpponentHandlecmd44,
+ OpponentHandleFaintingCry,
+ OpponentHandleIntroSlide,
+ OpponentHandleTrainerBallThrow,
+ OpponentHandlecmd48,
+ OpponentHandlecmd49,
+ OpponentHandlecmd50,
+ OpponentHandleSpriteInvisibility,
+ OpponentHandleBattleAnimation,
+ OpponentHandleLinkStandbyMsg,
+ OpponentHandleResetActionMoveSelection,
+ OpponentHandlecmd55,
+ OpponentHandlecmd56,
+};
+
+static const u8 sUnknownBytes[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20};
+
+// code
+
+void nullsub_45(void)
+{
+}
+
+void SetBankFuncToOpponentBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
+}
+
+void OpponentBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] <= 0x38)
+ gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032B4C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+// Duplicate of sub_8032B4C
+void sub_8032B84(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+void sub_8032BBC(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5;
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032C4C(void)
+{
+ if ((--ewram17810[gActiveBank].unk9) == 0xFF)
+ {
+ ewram17810[gActiveBank].unk9 = 0;
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032C88(void)
+{
+ bool8 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlay_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
+ ewram17810[gActiveBank].unk9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_8032C4C;
+ }
+}
+
+void sub_8032E2C(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]);
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank ^ 2],
+ &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]],
+ 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ sub_8032984(
+ gActiveBank ^ 2,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES));
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8032984(
+ gActiveBank,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_8032C88;
+ }
+}
+
+void sub_8033018(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE
+ && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
+ {
+ if (!ewram17810[gActiveBank].unk0_7)
+ {
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ return;
+ }
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ OpponentBufferExecCompleted();
+ return;
+ }
+ }
+}
+
+void sub_80330C8(void)
+{
+ s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ else
+ OpponentBufferExecCompleted();
+}
+
+void sub_803311C(void)
+{
+ if (!gSprites[gObjectBankIDs[gActiveBank]].inUse)
+ {
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8033160(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8032A08(gActiveBank);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_80331D0(void)
+{
+ if (gUnknown_03004210.state == 0)
+ OpponentBufferExecCompleted();
+}
+
+void bx_blink_t7(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = 0;
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_8033264(void)
+{
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ gBattleBankFunc[gActiveBank] = sub_80332D0;
+ }
+}
+
+void sub_80332D0(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ CreateTask(c3_0802FDF4, 10);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8033308(void)
+{
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8031F88(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_8033264;
+ }
+}
+
+void sub_80333D4(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
+ && !ewram17810[gActiveBank].unk0_3)
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+ gBattleBankFunc[gActiveBank] = sub_8033308;
+ }
+}
+
+void sub_8033494(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ OpponentBufferExecCompleted();
+}
+
+void sub_80334C0(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ OpponentBufferExecCompleted();
+}
+
+void OpponentBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+}
void OpponentHandleGetAttributes(void)
{
@@ -139,7 +552,7 @@ void OpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer);
+ Emitcmd29(1, r6, buffer);
OpponentBufferExecCompleted();
}
@@ -448,7 +861,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
return size;
}
-void dp01t_01_2_read_pokmon_data_slice(void)
+void OpponentHandlecmd1(void)
{
struct BattlePokemon buffer;
u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
@@ -457,7 +870,7 @@ void dp01t_01_2_read_pokmon_data_slice(void)
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = src[i];
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst);
+ Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst);
OpponentBufferExecCompleted();
}
@@ -699,7 +1112,7 @@ void sub_8033E24(u8 a)
}
}
-void sub_8034744(void)
+void OpponentHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -872,7 +1285,7 @@ void OpponentHandleTrainerSlideBack(void)
gBattleBankFunc[gActiveBank] = sub_8032BBC;
}
-void sub_8035030(void)
+void OpponentHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -889,12 +1302,12 @@ void sub_8035030(void)
}
}
-void sub_80350D4(void)
+void OpponentHandlecmd11(void)
{
OpponentBufferExecCompleted();
}
-void sub_80350E0(void)
+void OpponentHandlecmd12(void)
{
OpponentBufferExecCompleted();
}
@@ -904,7 +1317,7 @@ void OpponentHandleBallThrow(void)
OpponentBufferExecCompleted();
}
-void OpponentHandlePause(void)
+void OpponentHandlePuase(void)
{
OpponentBufferExecCompleted();
}
@@ -1007,19 +1420,19 @@ void OpponentHandlePrintStringPlayerOnly(void)
OpponentBufferExecCompleted();
}
-void sub_803540C(void)
+void OpponentHandlecmd18(void)
{
sub_8036B0C();
OpponentBufferExecCompleted();
}
-void sub_803541C(void)
+void OpponentHandlecmd19(void)
{
OpponentBufferExecCompleted();
}
#ifdef NONMATCHING
-void sub_8035428(void)
+void OpponentHandlecmd20(void)
{
u16 r4;
// Needed to match closer
@@ -1032,10 +1445,10 @@ void sub_8035428(void)
switch (r4)
{
case 5:
- dp01_build_cmdbuf_x21_a_bb(1, 4, 0);
+ Emitcmd33(1, 4, 0);
break;
case 4:
- dp01_build_cmdbuf_x21_a_bb(1, 3, 0);
+ Emitcmd33(1, 3, 0);
break;
default:
if (gBattleMoves[r5->moves[r4]].target & 0x12)
@@ -1047,7 +1460,7 @@ void sub_8035428(void)
gBankTarget = GetBankByPlayerAI(2);
}
r4 |= gBankTarget << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4);
+ Emitcmd33(1, 10, r4);
break;
}
OpponentBufferExecCompleted();
@@ -1066,26 +1479,26 @@ void sub_8035428(void)
if (gBattleMoves[r2].target & 0x12)
{
r4 |= gActiveBank << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4);
+ Emitcmd33(1, 10, r4);
}
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u16 r2 = GetBankByPlayerAI(Random() & 2) << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2);
+ Emitcmd33(1, 10, r4 | r2);
}
else
{
u16 r2 = GetBankByPlayerAI(0) << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2);
+ Emitcmd33(1, 10, r4 | r2);
}
OpponentBufferExecCompleted();
}
}
#else
__attribute__((naked))
-void sub_8035428(void)
+void OpponentHandlecmd20(void)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
@@ -1121,7 +1534,7 @@ _08035468:\n\
movs r1, 0x3\n\
_0803546C:\n\
movs r2, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _080354E0\n\
_08035474:\n\
ldr r3, _080354E8 @ =gBattleMoves\n\
@@ -1176,7 +1589,7 @@ _080354CE:\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
_080354E0:\n\
bl OpponentBufferExecCompleted\n\
b _0803558A\n\
@@ -1213,7 +1626,7 @@ _080354FA:\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _08035586\n\
.align 2, 0\n\
_08035534: .4byte gBattleMoves\n\
@@ -1238,7 +1651,7 @@ _0803553C:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _08035586\n\
.align 2, 0\n\
_0803556C: .4byte gBattleTypeFlags\n\
@@ -1251,7 +1664,7 @@ _08035570:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
_08035586:\n\
bl OpponentBufferExecCompleted\n\
_0803558A:\n\
@@ -1262,14 +1675,14 @@ _0803558A:\n\
}
#endif
-void sub_8035590(void)
+void OpponentHandleOpenBag(void)
{
// What is this?
- dp01_build_cmdbuf_x23_aa_0(1, ewram[0x160D4 + gActiveBank / 2 * 2]);
+ Emitcmd35(1, ewram[0x160D4 + gActiveBank / 2 * 2]);
OpponentBufferExecCompleted();
}
-void sub_80355C0(void)
+void OpponentHandlecmd22(void)
{
s32 r4;
@@ -1306,11 +1719,11 @@ void sub_80355C0(void)
ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] = 6;
}
ewram[0x16068 + gActiveBank] = r4;
- dp01_build_cmdbuf_x22_a_three_bytes(1, r4, 0);
+ Emitcmd34(1, r4, 0);
OpponentBufferExecCompleted();
}
-void sub_80356C0(void)
+void OpponentHandlecmd23(void)
{
OpponentBufferExecCompleted();
}
@@ -1371,7 +1784,7 @@ void OpponentHandleStatusXor(void)
OpponentBufferExecCompleted();
}
-void sub_80358B0(void)
+void OpponentHandlecmd29(void)
{
OpponentBufferExecCompleted();
}
@@ -1381,55 +1794,55 @@ void OpponentHandleDMATransfer(void)
OpponentBufferExecCompleted();
}
-void sub_80358C8(void)
+void OpponentHandlecmd31(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358D4(void)
+void OpponentHandlecmd32(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358E0(void)
+void OpponentHandlecmd33(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358EC(void)
+void OpponentHandlecmd34(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358F8(void)
+void OpponentHandlecmd35(void)
{
OpponentBufferExecCompleted();
}
-void sub_8035904(void)
+void OpponentHandlecmd36(void)
{
OpponentBufferExecCompleted();
}
-void sub_8035910(void)
+void OpponentHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
OpponentBufferExecCompleted();
}
-void sub_803592C(void)
+void OpponentHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
OpponentBufferExecCompleted();
}
-void sub_8035964(void)
+void OpponentHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
OpponentBufferExecCompleted();
}
-void sub_803597C(void)
+void OpponentHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
OpponentBufferExecCompleted();
@@ -1450,7 +1863,7 @@ void OpponentHandleHitAnimation(void)
}
}
-void sub_8035A14(void)
+void OpponentHandlecmd42(void)
{
OpponentBufferExecCompleted();
}
@@ -1467,7 +1880,7 @@ void OpponentHandleEffectivenessSound(void)
OpponentBufferExecCompleted();
}
-void sub_8035A64(void)
+void OpponentHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
OpponentBufferExecCompleted();
@@ -1481,14 +1894,14 @@ void OpponentHandleFaintingCry(void)
OpponentBufferExecCompleted();
}
-void dp01t_2E_7_battle_intro(void)
+void OpponentHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
OpponentBufferExecCompleted();
}
-void sub_8035B04(void)
+void OpponentHandleTrainerBallThrow(void)
{
u8 taskId;
@@ -1539,7 +1952,7 @@ void sub_8035C44(u8 taskId)
DestroyTask(taskId);
}
-void dp01t_30_7_0803D67C(void)
+void OpponentHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1580,14 +1993,14 @@ void sub_8035E2C(void)
}
}
-void sub_8035E6C(void)
+void OpponentHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
OpponentBufferExecCompleted();
}
-void sub_8035EB8(void)
+void OpponentHandlecmd50(void)
{
OpponentBufferExecCompleted();
}
@@ -1626,7 +2039,7 @@ void OpponentHandleResetActionMoveSelection(void)
OpponentBufferExecCompleted();
}
-void sub_8035FA4(void)
+void OpponentHandlecmd55(void)
{
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
{
@@ -1637,6 +2050,6 @@ void sub_8035FA4(void)
OpponentBufferExecCompleted();
}
-void nullsub_46(void)
+void OpponentHandlecmd56(void)
{
}
diff --git a/src/battle/battle_6.c b/src/battle/battle_controller_player.c
index e7f152a4b..269f20642 100644
--- a/src/battle/battle_6.c
+++ b/src/battle/battle_controller_player.c
@@ -1,15 +1,20 @@
#include "global.h"
+#include "data2.h"
#include "battle.h"
#include "battle_interface.h"
#include "battle_message.h"
-#include "data2.h"
+#include "item.h"
+#include "items.h"
+#include "link.h"
+#include "m4a.h"
+#include "main.h"
#include "menu_cursor.h"
+#include "moves.h"
#include "palette.h"
#include "pokemon.h"
#include "rom3.h"
#include "songs.h"
#include "sound.h"
-#include "sprite.h"
#include "string_util.h"
#include "task.h"
#include "text.h"
@@ -23,6 +28,12 @@ struct UnknownStruct3
u8 ppBonuses;
};
+#if ENGLISH
+#define SUB_803037C_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_803037C_TILE_DATA_OFFSET 444
+#endif
+
extern u16 gUnknown_030042A4;
extern u16 gUnknown_030042A0;
@@ -70,15 +81,8 @@ extern const u8 gUnknown_08400CA8[];
extern const u8 gUnknown_08400CF3[];
extern const u8 gUnknown_08400D38[];
-#if ENGLISH
-#define SUB_803037C_TILE_DATA_OFFSET 440
-#elif GERMAN
-#define SUB_803037C_TILE_DATA_OFFSET 444
-#endif
-
extern void sub_802C68C(void);
extern void sub_802E1B0(void);
-extern void sub_802E3B4();
extern void sub_802E220();
extern void sub_802E2D4();
extern void sub_802E004(void);
@@ -101,7 +105,6 @@ extern void oamt_set_x3A_32();
extern void BattleLoadPlayerMonSprite();
extern bool8 IsDoubleBattle(void);
extern void sub_802D500(void);
-extern void dp11b_obj_free();
extern bool8 sub_8078874(u8);
extern bool8 move_anim_start_t3();
extern void sub_802E460(void);
@@ -132,7 +135,190 @@ extern u8 sub_8077F68();
extern u8 sub_8046400();
extern void sub_802D798(void);
extern void bx_0802E404(void);
+extern u8 gActiveBank;
+extern void (*gBattleBankFunc[])(void);
+extern bool8 gDoingBattleAnim;
+extern u16 gBattleTypeFlags;
+extern u32 gBattleExecBuffer;
+extern u8 gBattleBufferA[][0x200];
+extern u8 gObjectBankIDs[];
+extern u8 gActionSelectionCursor[];
+extern u8 gMoveSelectionCursor[];
+extern u8 gAbsentBankFlags;
+extern u8 gUnknown_03004344;
+extern u8 gNoOfAllBanks;
+extern u16 gBattlePartyID[];
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+extern struct Window gUnknown_03004210;
+extern const u8 gUnknown_08400D89[];
+extern u8 gUnknown_03004348;
+extern struct BattlePokemon gBattleMons[];
+extern MainCallback gPreBattleCallback1;
+extern u8 gHealthboxIDs[];
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u8 gUnknown_0300434C[];
+extern u8 gUnknown_0202E8F4;
+extern u8 gUnknown_0202E8F5;
+extern u8 gUnknown_02038470[];
+extern u16 gScriptItemId;
+extern u8 gDisplayedStringBattle[];
+extern const u8 gUnknown_08400CE0[];
+extern void dp11b_obj_instanciate(u8, u8, s8, s8);
+extern u8 GetBankIdentity(u8);
+extern u8 GetBankByPlayerAI(u8);
+extern void dp11b_obj_free(u8, u8);
+extern void sub_8010520(struct Sprite *);
+extern void sub_8010574(struct Sprite *);
+extern bool8 IsDoubleBattle();
+extern void sub_804777C();
+extern void sub_8141828();
+extern void sub_8094E20(u8);
+extern void nullsub_14(void);
+extern void sub_80A6DCC(void);
+extern void ReshowBattleScreenAfterMenu(void);
+
+void PlayerHandleGetAttributes(void);
+void PlayerHandlecmd1(void);
+void PlayerHandleSetAttributes(void);
+void PlayerHandlecmd3(void);
+void PlayerHandleLoadPokeSprite(void);
+void PlayerHandleSendOutPoke(void);
+void PlayerHandleReturnPokeToBall(void);
+void PlayerHandleTrainerThrow(void);
+void PlayerHandleTrainerSlide(void);
+void PlayerHandleTrainerSlideBack(void);
+void PlayerHandlecmd10(void);
+void PlayerHandlecmd11(void);
+void PlayerHandlecmd12(void);
+void PlayerHandleBallThrow(void);
+void PlayerHandlePuase(void);
+void PlayerHandleMoveAnimation(void);
+void PlayerHandlePrintString(void);
+void PlayerHandlePrintStringPlayerOnly(void);
+void PlayerHandlecmd18(void);
+void PlayerHandlecmd19(void);
+void PlayerHandlecmd20(void);
+void PlayerHandleOpenBag(void);
+void PlayerHandlecmd22(void);
+void PlayerHandlecmd23(void);
+void PlayerHandleHealthBarUpdate(void);
+void PlayerHandleExpBarUpdate(void);
+void PlayerHandleStatusIconUpdate(void);
+void PlayerHandleStatusAnimation(void);
+void PlayerHandleStatusXor(void);
+void PlayerHandlecmd29(void);
+void PlayerHandleDMATransfer(void);
+void PlayerHandlecmd31(void);
+void PlayerHandlecmd32(void);
+void PlayerHandlecmd33(void);
+void PlayerHandlecmd34(void);
+void PlayerHandlecmd35(void);
+void PlayerHandlecmd36(void);
+void PlayerHandlecmd37(void);
+void PlayerHandlecmd38(void);
+void PlayerHandlecmd39(void);
+void PlayerHandlecmd40(void);
+void PlayerHandleHitAnimation(void);
+void PlayerHandlecmd42(void);
+void PlayerHandleEffectivenessSound(void);
+void PlayerHandlecmd44(void);
+void PlayerHandleFaintingCry(void);
+void PlayerHandleIntroSlide(void);
+void PlayerHandleTrainerBallThrow(void);
+void PlayerHandlecmd48(void);
+void PlayerHandlecmd49(void);
+void PlayerHandlecmd50(void);
+void PlayerHandleSpriteInvisibility(void);
+void PlayerHandleBattleAnimation(void);
+void PlayerHandleLinkStandbyMsg(void);
+void PlayerHandleResetActionMoveSelection(void);
+void PlayerHandlecmd55(void);
+void PlayerHandlecmd56(void);
+
+const u8 gString_TurnJP[] = _("ターン");
+
+void (*const gPlayerBufferCommands[])(void) =
+{
+ PlayerHandleGetAttributes,
+ PlayerHandlecmd1,
+ PlayerHandleSetAttributes,
+ PlayerHandlecmd3,
+ PlayerHandleLoadPokeSprite,
+ PlayerHandleSendOutPoke,
+ PlayerHandleReturnPokeToBall,
+ PlayerHandleTrainerThrow,
+ PlayerHandleTrainerSlide,
+ PlayerHandleTrainerSlideBack,
+ PlayerHandlecmd10,
+ PlayerHandlecmd11,
+ PlayerHandlecmd12,
+ PlayerHandleBallThrow,
+ PlayerHandlePuase,
+ PlayerHandleMoveAnimation,
+ PlayerHandlePrintString,
+ PlayerHandlePrintStringPlayerOnly,
+ PlayerHandlecmd18,
+ PlayerHandlecmd19,
+ PlayerHandlecmd20,
+ PlayerHandleOpenBag,
+ PlayerHandlecmd22,
+ PlayerHandlecmd23,
+ PlayerHandleHealthBarUpdate,
+ PlayerHandleExpBarUpdate,
+ PlayerHandleStatusIconUpdate,
+ PlayerHandleStatusAnimation,
+ PlayerHandleStatusXor,
+ PlayerHandlecmd29,
+ PlayerHandleDMATransfer,
+ PlayerHandlecmd31,
+ PlayerHandlecmd32,
+ PlayerHandlecmd33,
+ PlayerHandlecmd34,
+ PlayerHandlecmd35,
+ PlayerHandlecmd36,
+ PlayerHandlecmd37,
+ PlayerHandlecmd38,
+ PlayerHandlecmd39,
+ PlayerHandlecmd40,
+ PlayerHandleHitAnimation,
+ PlayerHandlecmd42,
+ PlayerHandleEffectivenessSound,
+ PlayerHandlecmd44,
+ PlayerHandleFaintingCry,
+ PlayerHandleIntroSlide,
+ PlayerHandleTrainerBallThrow,
+ PlayerHandlecmd48,
+ PlayerHandlecmd49,
+ PlayerHandlecmd50,
+ PlayerHandleSpriteInvisibility,
+ PlayerHandleBattleAnimation,
+ PlayerHandleLinkStandbyMsg,
+ PlayerHandleResetActionMoveSelection,
+ PlayerHandlecmd55,
+ PlayerHandlecmd56,
+};
+
+void PlayerBufferRunCommand(void);
+void sub_802C2EC(void);
+void sub_802C68C(void);
+void sub_802CA60(void);
+void sub_802D730(void);
+void sub_802DA9C(u8);
+void sub_802DB6C(u8);
+void sub_802DCB0(u8);
+void sub_802DD10(u8);
+void sub_802DDC4(u8);
+void sub_802DF88(void);
+void sub_802E03C(void);
+void sub_802E12C(s32, const u8 *);
+void sub_802E1B0(void);
+void sub_802E220(void);
+void sub_802E2D4(void);
+void sub_802E3B4(u8, int);
+void nullsub_7(u8);
+void b_link_standby_message(void);
u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *);
void dp01_setattr_by_ch1_for_player_pokemon(u8);
void sub_802F934(u8, u8);
@@ -143,6 +329,1379 @@ void sub_8030E38(struct Sprite *);
void task05_08033660(u8);
void sub_8031064(void);
+void nullsub_91(void)
+{
+}
+
+void SetBankFuncToPlayerBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ gDoingBattleAnim = FALSE;
+}
+
+void PlayerBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ dp01_prepare_buffer_wireless_probably(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = 0x38;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+void PlayerBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < 0x39)
+ gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ PlayerBufferExecCompleted();
+ }
+}
+
+void bx_0802E404(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802C098(void)
+{
+ u16 itemId = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
+ dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ DestroyMenuCursor();
+
+ // Useless switch statement.
+ switch (gActionSelectionCursor[gActiveBank])
+ {
+ case 0:
+ Emitcmd33(1, 0, 0);
+ break;
+ case 1:
+ Emitcmd33(1, 1, 0);
+ break;
+ case 2:
+ Emitcmd33(1, 2, 0);
+ break;
+ case 3:
+ Emitcmd33(1, 3, 0);
+ break;
+ }
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 1)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 1))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 2)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 2))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && GetBankIdentity(gActiveBank) == 2
+ && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)])
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (gBattleBufferA[gActiveBank][1] == 1)
+ {
+ // Add item to bag if it is a ball
+ if (itemId <= ITEM_PREMIER_BALL)
+ AddBagItem(itemId, 1);
+ else
+ return;
+ }
+ PlaySE(SE_SELECT);
+ Emitcmd33(1, 12, 0);
+ PlayerBufferExecCompleted();
+ DestroyMenuCursor();
+ }
+ }
+ else if (gMain.newKeys & START_BUTTON)
+ {
+ sub_804454C();
+ }
+}
+
+void unref_sub_802C2B8(void)
+{
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ gBattleBankFunc[gActiveBank] = sub_802C2EC;
+}
+
+// TODO: fix this function
+void sub_802C2EC(void)
+{
+ u8 arr[4] = {0, 2, 3, 1};
+ s32 i;
+
+ dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1);
+ i = 0;
+ if (gNoOfAllBanks != 0)
+ {
+ do
+ {
+ if (i != gUnknown_03004344)
+ dp11b_obj_free(i, 1);
+ i++;
+ } while (i < gNoOfAllBanks);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
+ dp11b_obj_free(gUnknown_03004344, 1);
+ PlayerBufferExecCompleted();
+ }
+ //_0802C3A8
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
+ dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
+ dp11b_obj_free(gUnknown_03004344, 1);
+ }
+ else if (gMain.newKeys & 0x60)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ do
+ {
+ u8 var = GetBankIdentity(gUnknown_03004344);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (var == arr[i])
+ break;
+ }
+ do
+ {
+ i--;
+ if (i < 0)
+ i = 3;
+ gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
+ } while(gUnknown_03004344 == gNoOfAllBanks);
+ i = 0;
+ switch (GetBankIdentity(gUnknown_03004344))
+ {
+ case 0:
+ case 2:
+ if (gActiveBank == gUnknown_03004344)
+ {
+ u32 moveId;
+
+ asm("":::"memory");
+ moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
+ if (!(gBattleMoves[moveId].target & 2))
+ break;
+ }
+ i++;
+ break;
+ case 1:
+ case 3:
+ i++;
+ }
+ //_0802C500
+ if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
+ i = 0;
+ } while (i == 0);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+ //_0802C540
+ else if (gMain.newKeys & 0x90)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ do
+ {
+ u8 var = GetBankIdentity(gUnknown_03004344);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (var == arr[i])
+ break;
+ }
+ do
+ {
+ i++;
+ if (i > 3)
+ i = 0;
+ gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
+ } while (gUnknown_03004344 == gNoOfAllBanks);
+ i = 0;
+ switch (GetBankIdentity(gUnknown_03004344))
+ {
+ case 0:
+ case 2:
+ if (gActiveBank == gUnknown_03004344)
+ {
+ u32 moveId;
+
+ asm("":::"memory");
+ moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
+ if (!(gBattleMoves[moveId].target & 2))
+ break;
+ }
+ i++;
+ break;
+ case 1:
+ case 3:
+ i++;
+ }
+ if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
+ i = 0;
+ } while (i == 0);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+}
+
+struct UnknownStruct1
+{
+ u16 moves[4];
+ u8 pp[4];
+ u8 unkC[0x12-0xC];
+ u8 unk12;
+ u8 unk13;
+ u8 filler14[0x20-0x14];
+};
+
+const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}");
+
+void sub_802C68C(void)
+{
+ u32 r8 = 0;
+ struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4);
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ u32 r4;
+
+ PlaySE(SE_SELECT);
+
+ if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE)
+ r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0;
+ else
+ r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target;
+
+ if (r4 & 0x10)
+ gUnknown_03004344 = gActiveBank;
+ else
+ gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1);
+
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0)
+ r8++;
+ }
+ else
+ {
+ if (!(r4 & 0x7D))
+ r8++;
+ if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0)
+ {
+ r8 = 0;
+ }
+ else if (!(r4 & 0x12) && CountAliveMons(0) <= 1)
+ {
+ gUnknown_03004344 = sub_803C434(gActiveBank);
+ r8 = 0;
+ }
+ }
+ if (r8 == 0)
+ {
+ DestroyMenuCursor();
+ Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleBankFunc[gActiveBank] = sub_802C2EC;
+ if (r4 & 0x12)
+ gUnknown_03004344 = gActiveBank;
+ else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)])
+ gUnknown_03004344 = GetBankByPlayerAI(3);
+ else
+ gUnknown_03004344 = GetBankByPlayerAI(1);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 320;
+ Emitcmd33(1, 10, 0xFFFF);
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 1)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 1)
+ && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 2)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 2)
+ && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & SELECT_BUTTON)
+ {
+ if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80);
+ if (gMoveSelectionCursor[gActiveBank] != 0)
+ gUnknown_03004344 = 0;
+ else
+ gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1;
+ sub_802E3B4(gUnknown_03004344, 27);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ gBattleBankFunc[gActiveBank] = sub_802CA60;
+ }
+ }
+}
+
+extern const u8 gUnknown_08400D49[];
+extern const u8 gUnknown_08400D38[];
+
+void sub_802CA60(void)
+{
+ u8 perMovePPBonuses[4];
+ struct
+ {
+ u16 moves[4];
+ u8 pp[4];
+ u8 filler18[8]; // what is this?
+ } sp0;
+ //struct UnknownStruct1 sp0;
+ u8 totalPPBonuses;
+
+ if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344)
+ {
+ struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ s32 i;
+
+ i = r9->moves[gMoveSelectionCursor[gActiveBank]];
+ r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344];
+ r9->moves[gUnknown_03004344] = i;
+
+ i = r9->pp[gMoveSelectionCursor[gActiveBank]];
+ r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344];
+ r9->pp[gUnknown_03004344] = i;
+
+ i = r9->unkC[gMoveSelectionCursor[gActiveBank]];
+ r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344];
+ r9->unkC[gUnknown_03004344] = i;
+
+ if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]])
+ {
+ gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]];
+ gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344];
+ }
+
+ sub_802E1B0();
+
+ for (i = 0; i < 4; i++)
+ perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2);
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
+ perMovePPBonuses[gUnknown_03004344] = totalPPBonuses;
+
+ totalPPBonuses = 0;
+ for (i = 0; i < 4; i++)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+ gBattleMons[gActiveBank].ppBonuses = totalPPBonuses;
+
+ for (i = 0; i < 4; i++)
+ {
+ gBattleMons[gActiveBank].moves[i] = r9->moves[i];
+ gBattleMons[gActiveBank].pp[i] = r9->pp[i];
+ }
+ if (!(gBattleMons[gActiveBank].status2 & 0x200000))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i);
+ sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i);
+ }
+
+ totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES);
+ for (i = 0; i < 4; i++)
+ perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2);
+
+ i = sp0.moves[gMoveSelectionCursor[gActiveBank]];
+ sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344];
+ sp0.moves[gUnknown_03004344] = i;
+
+ i = sp0.pp[gMoveSelectionCursor[gActiveBank]];
+ sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344];
+ sp0.pp[gUnknown_03004344] = i;
+
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
+ perMovePPBonuses[gUnknown_03004344] = totalPPBonuses;
+
+ totalPPBonuses = 0;
+ for (i = 0; i < 4; i++)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]);
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]);
+ }
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses);
+ }
+ }
+ else
+ {
+ sub_802E12C(gUnknown_03004344, gUnknown_08400D49);
+ }
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ gMoveSelectionCursor[gActiveBank] = gUnknown_03004344;
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_7(gUnknown_03004344);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49);
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1))
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 1;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348)
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 1;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2))
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 2;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348)
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 2;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+}
+
+void sub_802D148(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(c2_8011A1C);
+ }
+}
+
+void sub_802D18C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ sub_800832C();
+ gBattleBankFunc[gActiveBank] = sub_802D148;
+ }
+ else
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ }
+}
+
+void sub_802D204(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+// duplicate of sub_802D204
+void sub_802D23C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802D274(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ nullsub_10(gSaveBlock2.playerGender);
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D2E0(void)
+{
+ if (--ewram17810[gActiveBank].unk9 == 0xFF)
+ {
+ ewram17810[gActiveBank].unk9 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D31C(void)
+{
+ bool8 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlay_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ if (IsDoubleBattle())
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
+ ewram17810[gActiveBank].unk9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_802D2E0;
+ }
+}
+
+void sub_802D500(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]);
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank ^ 2],
+ &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]],
+ 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gPlayerParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_802D31C;
+ }
+}
+
+void sub_802D680(void)
+{
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ gBattleBankFunc[gActiveBank] = sub_802D730;
+ }
+}
+
+void sub_802D730(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D798(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
+ && !ewram17810[gActiveBank].unk0_3)
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8031F88(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_802D680;
+ }
+}
+
+void c3_0802FDF4(u8 taskId)
+{
+ if (!IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ DestroyTask(taskId);
+ }
+}
+
+void bx_t1_healthbar_update(void)
+{
+ s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ {
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ }
+ else
+ {
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D90C(void)
+{
+ if (gUnknown_03004210.state == 0)
+ PlayerBufferExecCompleted();
+}
+
+// Rare Candy usage, maybe?
+void sub_802D924(u8 taskId)
+{
+ u32 pkmnIndex = (u8)gTasks[taskId].data[0];
+ u8 bank = gTasks[taskId].data[2];
+ s16 gainedExp = gTasks[taskId].data[1];
+
+ if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank])
+ {
+ struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
+ u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
+ u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(pkmn, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBank;
+
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp);
+ CalculateMonStats(pkmn);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBank = gActiveBank;
+ gActiveBank = bank;
+ Emitcmd33(1, 11, gainedExp);
+ gActiveBank = savedActiveBank;
+
+ if (IsDoubleBattle() == TRUE
+ && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2]))
+ gTasks[taskId].func = sub_802DCB0;
+ else
+ gTasks[taskId].func = sub_802DDC4;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp);
+ gBattleBankFunc[bank] = sub_802D90C;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = sub_802DA9C;
+ }
+}
+
+void sub_802DA9C(u8 taskId)
+{
+ u8 pkmnIndex = gTasks[taskId].data[0];
+ s32 r9 = gTasks[taskId].data[1];
+ u8 bank = gTasks[taskId].data[2];
+ struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
+ u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
+ u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
+ u32 exp = GetMonData(pkmn, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9);
+ PlaySE(SE_EXP);
+ gTasks[taskId].func = sub_802DB6C;
+}
+
+#ifdef NONMATCHING
+void sub_802DB6C(u8 taskId)
+{
+ if (gTasks[taskId].data[10] < 13)
+ {
+ gTasks[taskId].data[10]++;
+ }
+ else
+ {
+ u8 r9 = gTasks[taskId].data[0];
+ s32 r10 = gTasks[taskId].data[1]; //s16?
+ u8 r7 = gTasks[taskId].data[2];
+ s16 r4;
+
+ r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0);
+ sub_8043DFC(gHealthboxIDs[r7]);
+ if (r4 == -1)
+ {
+ struct Pokemon *pkmn;
+ u8 r4;
+ u32 sp4;
+ u16 r0;
+ u32 sp0;
+
+ m4aSongNumStop(SE_EXP);
+ pkmn = &gPlayerParty[r9];
+ r4 = GetMonData(pkmn, MON_DATA_LEVEL);
+ sp4 = GetMonData(pkmn, MON_DATA_EXP);
+ r0 = GetMonData(pkmn, MON_DATA_SPECIES);
+ sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1];
+ if (sp4 + r10 >= sp0)
+ {
+ u8 r5;
+ u32 asdf;
+
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0);
+ CalculateMonStats(pkmn);
+ //r10 -= sp0 - sp4;
+ asdf = sp0 - sp4;
+ //asdf = r10 - (sp0 - sp4);
+ r10 -= asdf;
+ r5 = gActiveBank;
+ gActiveBank = r7;
+ Emitcmd33(1, 11, r10);
+ gActiveBank = r5;
+ gTasks[taskId].func = sub_802DCB0;
+ }
+ else
+ {
+ //u32 asdf = sp4 + r10;
+ sp4 += r10;
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4);
+ gBattleBankFunc[r7] = sub_802D90C;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_802DB6C(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ ldr r1, _0802DB98 @ =gTasks\n\
+ lsls r0, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r6, r0, r1\n\
+ ldrh r1, [r6, 0x1C]\n\
+ movs r2, 0x1C\n\
+ ldrsh r0, [r6, r2]\n\
+ cmp r0, 0xC\n\
+ bgt _0802DB9C\n\
+ adds r0, r1, 0x1\n\
+ strh r0, [r6, 0x1C]\n\
+ b _0802DC98\n\
+ .align 2, 0\n\
+_0802DB98: .4byte gTasks\n\
+_0802DB9C:\n\
+ ldrb r0, [r6, 0x8]\n\
+ mov r9, r0\n\
+ ldrh r2, [r6, 0xA]\n\
+ mov r10, r2\n\
+ ldrb r7, [r6, 0xC]\n\
+ ldr r5, _0802DC64 @ =gHealthboxIDs\n\
+ adds r5, r7, r5\n\
+ ldrb r1, [r5]\n\
+ adds r0, r7, 0\n\
+ movs r2, 0x1\n\
+ movs r3, 0\n\
+ bl sub_8045C78\n\
+ adds r4, r0, 0\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ ldrb r0, [r5]\n\
+ bl sub_8043DFC\n\
+ lsls r4, 16\n\
+ asrs r4, 16\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ cmp r4, r0\n\
+ bne _0802DC98\n\
+ movs r0, 0x21\n\
+ bl m4aSongNumStop\n\
+ movs r0, 0x64\n\
+ mov r1, r9\n\
+ muls r1, r0\n\
+ ldr r0, _0802DC68 @ =gPlayerParty\n\
+ adds r5, r1, r0\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ adds r4, r0, 0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ bl GetMonData\n\
+ str r0, [sp, 0x4]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r3, _0802DC6C @ =gExperienceTables\n\
+ adds r4, 0x1\n\
+ lsls r4, 2\n\
+ ldr r2, _0802DC70 @ =gBaseStats\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r2\n\
+ ldrb r1, [r1, 0x13]\n\
+ movs r0, 0xCA\n\
+ lsls r0, 1\n\
+ muls r0, r1\n\
+ adds r4, r0\n\
+ adds r4, r3\n\
+ ldr r1, [r4]\n\
+ str r1, [sp]\n\
+ mov r2, r10\n\
+ lsls r0, r2, 16\n\
+ asrs r4, r0, 16\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, r4\n\
+ cmp r0, r1\n\
+ blt _0802DC7C\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ mov r2, sp\n\
+ bl SetMonData\n\
+ adds r0, r5, 0\n\
+ bl CalculateMonStats\n\
+ ldr r2, [sp]\n\
+ add r0, sp, 0x4\n\
+ ldrh r0, [r0]\n\
+ subs r2, r0\n\
+ subs r2, r4, r2\n\
+ ldr r4, _0802DC74 @ =gActiveBank\n\
+ ldrb r5, [r4]\n\
+ strb r7, [r4]\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ movs r0, 0x1\n\
+ movs r1, 0xB\n\
+ bl Emitcmd33\n\
+ strb r5, [r4]\n\
+ ldr r0, _0802DC78 @ =sub_802DCB0\n\
+ str r0, [r6]\n\
+ b _0802DC98\n\
+ .align 2, 0\n\
+_0802DC64: .4byte gHealthboxIDs\n\
+_0802DC68: .4byte gPlayerParty\n\
+_0802DC6C: .4byte gExperienceTables\n\
+_0802DC70: .4byte gBaseStats\n\
+_0802DC74: .4byte gActiveBank\n\
+_0802DC78: .4byte sub_802DCB0\n\
+_0802DC7C:\n\
+ str r0, [sp, 0x4]\n\
+ add r2, sp, 0x4\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ bl SetMonData\n\
+ ldr r1, _0802DCA8 @ =gBattleBankFunc\n\
+ lsls r0, r7, 2\n\
+ adds r0, r1\n\
+ ldr r1, _0802DCAC @ =sub_802D90C\n\
+ str r1, [r0]\n\
+ mov r0, r8\n\
+ bl DestroyTask\n\
+_0802DC98:\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0802DCA8: .4byte gBattleBankFunc\n\
+_0802DCAC: .4byte sub_802D90C\n");
+}
+#endif
+
+void sub_802DCB0(u8 taskId)
+{
+ u8 bank = gTasks[taskId].data[2];
+ u8 pkmnIndex = gTasks[taskId].data[0];
+
+ if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
+ bank ^= 2;
+ move_anim_start_t4(bank, bank, bank, 0);
+ gTasks[taskId].func = sub_802DD10;
+}
+
+void sub_802DD10(u8 taskId)
+{
+ u8 bank = gTasks[taskId].data[2];
+
+ if (!ewram17810[bank].unk0_6)
+ {
+ u8 pkmnIndex = gTasks[taskId].data[0];
+
+ GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
+ if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
+ sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0);
+ else
+ sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0);
+ gTasks[taskId].func = sub_802DDC4;
+ }
+}
+
+void sub_802DDC4(u8 taskId)
+{
+ u8 pkmnIndex;
+ u8 bank;
+
+ pkmnIndex = gTasks[taskId].data[0];
+ GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
+ bank = gTasks[taskId].data[2];
+ gBattleBankFunc[bank] = sub_802D90C;
+ DestroyTask(taskId);
+}
+
+void sub_802DE10(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
+ {
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ nullsub_9(species);
+ FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802DEAC(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+// Duplicate of sub_802D90C
+void sub_802DF18(void)
+{
+ if (gUnknown_03004210.state == 0)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802DF30(void)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 r4;
+
+ gBattleBankFunc[gActiveBank] = sub_802DF88;
+ r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0];
+ DestroyTask(gUnknown_0300434C[gActiveBank]);
+ sub_8094E20(r4);
+ }
+}
+
+void sub_802DF88(void)
+{
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
+ {
+ if (gUnknown_0202E8F4 == 1)
+ Emitcmd34(1, gUnknown_0202E8F5, gUnknown_02038470);
+ else
+ Emitcmd34(1, 6, NULL);
+ if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1)
+ b_link_standby_message();
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802E004(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattleBankFunc[gActiveBank] = sub_802E03C;
+ nullsub_14();
+ sub_80A6DCC();
+ }
+}
+
+void sub_802E03C(void)
+{
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
+ {
+ Emitcmd35(1, gScriptItemId);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void bx_wait_t1(void)
+{
+ if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6)
+ PlayerBufferExecCompleted();
+}
+
+void bx_blink_t1(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = 0;
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_802E12C(s32 a, const u8 *b)
+{
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+
+ StringCopy(gDisplayedStringBattle, b);
+ StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]);
+ InitWindow(
+ &gUnknown_03004210,
+ gDisplayedStringBattle,
+ 0x300 + a * 20,
+ (a & 1) ? 11 : 1,
+ (a < 2) ? 0x37 : 0x39);
+ sub_8002F44(&gUnknown_03004210);
+}
+
+void sub_802E1B0(void)
+{
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ s32 i;
+
+ gUnknown_03004348 = 0;
+ FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A);
+ for (i = 0; i < 4; i++)
+ {
+ nullsub_7(i);
+ sub_802E12C(i, gUnknown_08400D49);
+ if (r4->moves[i] != 0)
+ gUnknown_03004348++;
+ }
+}
+
+void sub_802E220(void)
+{
+ if (gBattleBufferA[gActiveBank][2] != 1)
+ {
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ u8 *str = gDisplayedStringBattle;
+
+ str = StringCopy(str, gUnknown_08400D49);
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 0x11;
+ str[2] = 2;
+ str += 3;
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 0x14;
+ str[2] = 6;
+ str += 3;
+ str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2);
+ *str++ = CHAR_SLASH;
+ ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2);
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ }
+}
+
+extern const u8 gUnknown_08400D52[];
+extern const u8 gTypeNames[][7];
+
+void sub_802E2D4(void)
+{
+ if (gBattleBufferA[gActiveBank][2] == 1)
+ {
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37);
+ }
+ else
+ {
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ u8 *str = gDisplayedStringBattle;
+
+ str = StringCopy(str, gUnknown_08400D49);
+ StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39);
+ }
+ sub_8002F44(&gUnknown_03004210);
+}
+
+const u8 gUnknown_081FAE89[][2] =
+{
+ { 8, 120},
+ {88, 120},
+ { 8, 136},
+ {88, 136},
+};
+
+const u8 gUnknown_081FAE91[][2] =
+{
+ {144, 120},
+ {190, 120},
+ {144, 136},
+ {190, 136},
+ { 72, 72},
+ { 32, 90},
+ { 80, 80},
+ { 80, 88},
+};
+
+void sub_802E3B4(u8 a, int unused)
+{
+ sub_814A958(0x48);
+ sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]);
+}
+
+void nullsub_7(u8 a)
+{
+}
+
+void sub_802E3E4(u8 a, int unused)
+{
+ sub_814A958(0x2A);
+ sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]);
+}
+
+void nullsub_8(u8 a)
+{
+}
+
+void sub_802E414(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void sub_802E424(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void sub_802E434(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802E460(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ PlayerBufferExecCompleted();
+}
+
+void b_link_standby_message(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15);
+ }
+}
+
void PlayerHandleGetAttributes(void)
{
u8 unkData[0x100];
@@ -164,7 +1723,7 @@ void PlayerHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, offset, unkData);
+ Emitcmd29(1, offset, unkData);
PlayerBufferExecCompleted();
}
@@ -474,7 +2033,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
return size;
}
-void sub_802ECF0(void)
+void PlayerHandlecmd1(void)
{
struct BattlePokemon battleMon; // I think this is a BattlePokemon
u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
@@ -483,7 +2042,7 @@ void sub_802ECF0(void)
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = src[i];
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst);
+ Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst);
PlayerBufferExecCompleted();
}
@@ -727,7 +2286,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_802F7CC(void)
+void PlayerHandlecmd3(void)
{
u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
u8 i;
@@ -871,7 +2430,7 @@ void PlayerHandleTrainerSlideBack(void)
gBattleBankFunc[gActiveBank] = sub_802D274;
}
-void sub_802FE7C(void)
+void PlayerHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
@@ -894,13 +2453,13 @@ void sub_802FE7C(void)
}
}
-void sub_802FF60(void)
+void PlayerHandlecmd11(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
PlayerBufferExecCompleted();
}
-void sub_802FF80(void)
+void PlayerHandlecmd12(void)
{
ewram17840.unk8 = 4;
gDoingBattleAnim = 1;
@@ -1020,7 +2579,7 @@ void PlayerHandlePrintStringPlayerOnly(void)
PlayerBufferExecCompleted();
}
-void sub_803037C(void)
+void PlayerHandlecmd18(void)
{
int r4;
@@ -1045,11 +2604,11 @@ void sub_803037C(void)
sub_8002F44(&gUnknown_03004210);
}
-void nullsub_42()
+void PlayerHandlecmd19()
{
}
-void sub_8030468(void)
+void PlayerHandlecmd20(void)
{
sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0);
sub_80304A8();
@@ -1083,7 +2642,7 @@ void PlayerHandleOpenBag(void)
gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i];
}
-void sub_8030594(void)
+void PlayerHandlecmd22(void)
{
s32 i;
@@ -1099,7 +2658,7 @@ void sub_8030594(void)
gBankInMenu = gActiveBank;
}
-void sub_8030674(void)
+void PlayerHandlecmd23(void)
{
BattleMusicStop();
BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
@@ -1182,7 +2741,7 @@ void PlayerHandleStatusXor(void)
PlayerBufferExecCompleted();
}
-void sub_803097C(void)
+void PlayerHandlecmd29(void)
{
PlayerBufferExecCompleted();
}
@@ -1214,60 +2773,60 @@ void PlayerHandleDMATransfer(void)
PlayerBufferExecCompleted();
}
-void sub_8030A3C(void)
+void PlayerHandlecmd31(void)
{
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
PlayerBufferExecCompleted();
}
-void sub_8030A6C(void)
+void PlayerHandlecmd32(void)
{
PlayerBufferExecCompleted();
}
-void sub_8030A78(void)
+void PlayerHandlecmd33(void)
{
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
PlayerBufferExecCompleted();
}
-void sub_8030A8C(void)
+void PlayerHandlecmd34(void)
{
- dp01_build_cmdbuf_x22_a_three_bytes(1, 0, 0);
+ Emitcmd34(1, 0, 0);
PlayerBufferExecCompleted();
}
-void sub_8030AA0(void)
+void PlayerHandlecmd35(void)
{
- dp01_build_cmdbuf_x23_aa_0(1, 0);
+ Emitcmd35(1, 0);
PlayerBufferExecCompleted();
}
-void sub_8030AB4(void)
+void PlayerHandlecmd36(void)
{
- dp01_build_cmdbuf_x24_aa_0(1, 0);
+ Emitcmd36(1, 0);
PlayerBufferExecCompleted();
}
-void sub_8030AC8(void)
+void PlayerHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
PlayerBufferExecCompleted();
}
-void sub_8030AE4(void)
+void PlayerHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
PlayerBufferExecCompleted();
}
-void sub_8030B1C(void)
+void PlayerHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
PlayerBufferExecCompleted();
}
-void sub_8030B34(void)
+void PlayerHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
PlayerBufferExecCompleted();
@@ -1288,7 +2847,7 @@ void PlayerHandleHitAnimation(void)
}
}
-void sub_8030BCC(void)
+void PlayerHandlecmd42(void)
{
PlayerBufferExecCompleted();
}
@@ -1305,7 +2864,7 @@ void PlayerHandleEffectivenessSound(void)
PlayerBufferExecCompleted();
}
-void sub_8030C1C(void)
+void PlayerHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
PlayerBufferExecCompleted();
@@ -1393,7 +2952,7 @@ void task05_08033660(u8 taskId)
}
}
-void sub_8030FAC(void)
+void PlayerHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1419,14 +2978,14 @@ void sub_8031064(void)
}
}
-void sub_80310A4(void)
+void PlayerHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
PlayerBufferExecCompleted();
}
-void sub_80310F0(void)
+void PlayerHandlecmd50(void)
{
dp11b_obj_free(gActiveBank, 1);
dp11b_obj_free(gActiveBank, 0);
@@ -1493,7 +3052,7 @@ void PlayerHandleResetActionMoveSelection(void)
PlayerBufferExecCompleted();
}
-void sub_80312A0(void)
+void PlayerHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1502,6 +3061,6 @@ void sub_80312A0(void)
gBattleBankFunc[gActiveBank] = sub_802D18C;
}
-void nullsub_43(void)
+void PlayerHandlecmd56(void)
{
}
diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c
new file mode 100644
index 000000000..46e34589a
--- /dev/null
+++ b/src/battle/battle_controller_safari.c
@@ -0,0 +1,173 @@
+#include "global.h"
+#include "battle_anim_81258BC.h"
+#include "battle.h"
+#include "battle_message.h"
+#include "menu_cursor.h"
+#include "text.h"
+
+extern struct Window gUnknown_03004210;
+extern u8 gDisplayedStringBattle[];
+extern u8 gActionSelectionCursor[];
+
+extern const u8 gUnknown_08400CBB[];
+extern u8 gActiveBank;
+extern const u8 gUnknown_08400D15[];
+
+extern void *gBattleBankFunc[];
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+
+#if ENGLISH
+#define SUB_812BB10_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_812BB10_TILE_DATA_OFFSET 444
+#endif
+
+// this file's functions
+void SafariHandleGetAttributes(void);
+void SafariHandlecmd1(void);
+void SafariHandleSetAttributes(void);
+void SafariHandlecmd3(void);
+void SafariHandleLoadPokeSprite(void);
+void SafariHandleSendOutPoke(void);
+void SafariHandleReturnPokeToBall(void);
+void SafariHandleTrainerThrow(void);
+void SafariHandleTrainerSlide(void);
+void SafariHandleTrainerSlideBack(void);
+void SafariHandlecmd10(void);
+void SafariHandlecmd11(void);
+void SafariHandlecmd12(void);
+void SafariHandleBallThrow(void);
+void SafariHandlePuase(void);
+void SafariHandleMoveAnimation(void);
+void SafariHandlePrintString(void);
+void SafariHandlePrintStringPlayerOnly(void);
+void SafariHandlecmd18(void);
+void SafariHandlecmd19(void);
+void SafariHandlecmd20(void);
+void SafariHandleOpenBag(void);
+void SafariHandlecmd22(void);
+void SafariHandlecmd23(void);
+void SafariHandleHealthBarUpdate(void);
+void SafariHandleExpBarUpdate(void);
+void SafariHandleStatusIconUpdate(void);
+void SafariHandleStatusAnimation(void);
+void SafariHandleStatusXor(void);
+void SafariHandlecmd29(void);
+void SafariHandleDMATransfer(void);
+void SafariHandlecmd31(void);
+void SafariHandlecmd32(void);
+void SafariHandlecmd33(void);
+void SafariHandlecmd34(void);
+void SafariHandlecmd35(void);
+void SafariHandlecmd36(void);
+void SafariHandlecmd37(void);
+void SafariHandlecmd38(void);
+void SafariHandlecmd39(void);
+void SafariHandlecmd40(void);
+void SafariHandleHitAnimation(void);
+void SafariHandlecmd42(void);
+void SafariHandleEffectivenessSound(void);
+void SafariHandlecmd44(void);
+void SafariHandleFaintingCry(void);
+void SafariHandleIntroSlide(void);
+void SafariHandleTrainerBallThrow(void);
+void SafariHandlecmd48(void);
+void SafariHandlecmd49(void);
+void SafariHandlecmd50(void);
+void SafariHandleSpriteInvisibility(void);
+void SafariHandleBattleAnimation(void);
+void SafariHandleLinkStandbyMsg(void);
+void SafariHandleResetActionMoveSelection(void);
+void SafariHandlecmd55(void);
+void SafariHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+const BattleBufferCmd gSafariBufferCommands[] =
+{
+ SafariHandleGetAttributes,
+ SafariHandlecmd1,
+ SafariHandleSetAttributes,
+ SafariHandlecmd3,
+ SafariHandleLoadPokeSprite,
+ SafariHandleSendOutPoke,
+ SafariHandleReturnPokeToBall,
+ SafariHandleTrainerThrow,
+ SafariHandleTrainerSlide,
+ SafariHandleTrainerSlideBack,
+ SafariHandlecmd10,
+ SafariHandlecmd11,
+ SafariHandlecmd12,
+ SafariHandleBallThrow,
+ SafariHandlePuase,
+ SafariHandleMoveAnimation,
+ SafariHandlePrintString,
+ SafariHandlePrintStringPlayerOnly,
+ SafariHandlecmd18,
+ SafariHandlecmd19,
+ SafariHandlecmd20,
+ SafariHandleOpenBag,
+ SafariHandlecmd22,
+ SafariHandlecmd23,
+ SafariHandleHealthBarUpdate,
+ SafariHandleExpBarUpdate,
+ SafariHandleStatusIconUpdate,
+ SafariHandleStatusAnimation,
+ SafariHandleStatusXor,
+ SafariHandlecmd29,
+ SafariHandleDMATransfer,
+ SafariHandlecmd31,
+ SafariHandlecmd32,
+ SafariHandlecmd33,
+ SafariHandlecmd34,
+ SafariHandlecmd35,
+ SafariHandlecmd36,
+ SafariHandlecmd37,
+ SafariHandlecmd38,
+ SafariHandlecmd39,
+ SafariHandlecmd40,
+ SafariHandleHitAnimation,
+ SafariHandlecmd42,
+ SafariHandleEffectivenessSound,
+ SafariHandlecmd44,
+ SafariHandleFaintingCry,
+ SafariHandleIntroSlide,
+ SafariHandleTrainerBallThrow,
+ SafariHandlecmd48,
+ SafariHandlecmd49,
+ SafariHandlecmd50,
+ SafariHandleSpriteInvisibility,
+ SafariHandleBattleAnimation,
+ SafariHandleLinkStandbyMsg,
+ SafariHandleResetActionMoveSelection,
+ SafariHandlecmd55,
+ SafariHandlecmd56,
+};
+// code
+
+void SafariHandlecmd18(void) {
+ int i;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 160;
+ gUnknown_03004210.paletteNum = 0;
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
+ gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2;
+
+ InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
+
+ for (i = 0; i < 4; i++)
+ {
+ nullsub_8(i);
+ }
+
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB);
+
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35);
+ sub_8002F44(&gUnknown_03004210);
+}
diff --git a/src/battle/battle_anim_8137220.c b/src/battle/battle_controller_wally.c
index af2b86c17..36e525bcc 100644
--- a/src/battle/battle_anim_8137220.c
+++ b/src/battle/battle_controller_wally.c
@@ -29,7 +29,6 @@ struct UnknownStruct3
extern u8 gActiveBank;
extern void (*gBattleBankFunc[])(void);
extern u32 gBattleExecBuffer;
-extern void (*gWallyBufferCommands[])(void);
extern u8 gBattleBufferA[][0x200];
extern u8 gObjectBankIDs[];
extern MainCallback gPreBattleCallback1;
@@ -61,8 +60,8 @@ extern const u8 gUnknown_08400CCC[];
extern const u8 gUnknown_08400CF3[];
// TODO: include rom3.h when my other PR gets merged
-extern void dp01_build_cmdbuf_x21_a_bb(u8, u8, u16);
-extern void dp01_build_cmdbuf_x23_aa_0(u8, u16);
+extern void Emitcmd33(u8, u8, u16);
+extern void Emitcmd35(u8, u16);
extern void nullsub_14(void);
extern void PrepareBagForWallyTutorial(void);
@@ -72,7 +71,7 @@ extern void sub_804777C();
extern void sub_8043DFC();
extern bool8 IsDoubleBattle(void);
extern void c3_0802FDF4(u8);
-extern void sub_802ECF0(void);
+extern void PlayerHandlecmd1(void);
extern void LoadPlayerTrainerBankSprite();
extern u8 GetBankIdentity(u8);
extern void sub_80313A0(struct Sprite *);
@@ -98,6 +97,8 @@ extern u8 sub_8079E90();
extern void sub_80312F0(struct Sprite *);
extern bool8 move_anim_start_t3();
+// this file's functions
+
void WallyBufferRunCommand(void);
void sub_81374FC(void);
void sub_81376B8(void);
@@ -107,6 +108,130 @@ void sub_8138294(u8);
void sub_81390D0(void);
void sub_8139A2C(u8);
+void WallyHandleGetAttributes(void);
+void WallyHandlecmd1(void);
+void WallyHandleSetAttributes(void);
+void WallyHandlecmd3(void);
+void WallyHandleLoadPokeSprite(void);
+void WallyHandleSendOutPoke(void);
+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 WallyHandlePuase(void);
+void WallyHandleMoveAnimation(void);
+void WallyHandlePrintString(void);
+void WallyHandlePrintStringPlayerOnly(void);
+void WallyHandlecmd18(void);
+void WallyHandlecmd19(void);
+void WallyHandlecmd20(void);
+void WallyHandleOpenBag(void);
+void WallyHandlecmd22(void);
+void WallyHandlecmd23(void);
+void WallyHandleHealthBarUpdate(void);
+void WallyHandleExpBarUpdate(void);
+void WallyHandleStatusIconUpdate(void);
+void WallyHandleStatusAnimation(void);
+void WallyHandleStatusXor(void);
+void WallyHandlecmd29(void);
+void WallyHandleDMATransfer(void);
+void WallyHandlecmd31(void);
+void WallyHandlecmd32(void);
+void WallyHandlecmd33(void);
+void WallyHandlecmd34(void);
+void WallyHandlecmd35(void);
+void WallyHandlecmd36(void);
+void WallyHandlecmd37(void);
+void WallyHandlecmd38(void);
+void WallyHandlecmd39(void);
+void WallyHandlecmd40(void);
+void WallyHandleHitAnimation(void);
+void WallyHandlecmd42(void);
+void WallyHandleEffectivenessSound(void);
+void WallyHandlecmd44(void);
+void WallyHandleFaintingCry(void);
+void WallyHandleIntroSlide(void);
+void WallyHandleTrainerBallThrow(void);
+void WallyHandlecmd48(void);
+void WallyHandlecmd49(void);
+void WallyHandlecmd50(void);
+void WallyHandleSpriteInvisibility(void);
+void WallyHandleBattleAnimation(void);
+void WallyHandleLinkStandbyMsg(void);
+void WallyHandleResetActionMoveSelection(void);
+void WallyHandlecmd55(void);
+void WallyHandlecmd56(void);
+
+// const data
+
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gWallyBufferCommands[] =
+{
+ WallyHandleGetAttributes,
+ WallyHandlecmd1,
+ WallyHandleSetAttributes,
+ WallyHandlecmd3,
+ WallyHandleLoadPokeSprite,
+ WallyHandleSendOutPoke,
+ WallyHandleReturnPokeToBall,
+ WallyHandleTrainerThrow,
+ WallyHandleTrainerSlide,
+ WallyHandleTrainerSlideBack,
+ WallyHandlecmd10,
+ WallyHandlecmd11,
+ WallyHandlecmd12,
+ WallyHandleBallThrow,
+ WallyHandlePuase,
+ WallyHandleMoveAnimation,
+ WallyHandlePrintString,
+ WallyHandlePrintStringPlayerOnly,
+ WallyHandlecmd18,
+ WallyHandlecmd19,
+ WallyHandlecmd20,
+ WallyHandleOpenBag,
+ WallyHandlecmd22,
+ WallyHandlecmd23,
+ WallyHandleHealthBarUpdate,
+ WallyHandleExpBarUpdate,
+ WallyHandleStatusIconUpdate,
+ WallyHandleStatusAnimation,
+ WallyHandleStatusXor,
+ WallyHandlecmd29,
+ WallyHandleDMATransfer,
+ WallyHandlecmd31,
+ WallyHandlecmd32,
+ WallyHandlecmd33,
+ WallyHandlecmd34,
+ WallyHandlecmd35,
+ WallyHandlecmd36,
+ WallyHandlecmd37,
+ WallyHandlecmd38,
+ WallyHandlecmd39,
+ WallyHandlecmd40,
+ WallyHandleHitAnimation,
+ WallyHandlecmd42,
+ WallyHandleEffectivenessSound,
+ WallyHandlecmd44,
+ WallyHandleFaintingCry,
+ WallyHandleIntroSlide,
+ WallyHandleTrainerBallThrow,
+ WallyHandlecmd48,
+ WallyHandlecmd49,
+ WallyHandlecmd50,
+ WallyHandleSpriteInvisibility,
+ WallyHandleBattleAnimation,
+ WallyHandleLinkStandbyMsg,
+ WallyHandleResetActionMoveSelection,
+ WallyHandlecmd55,
+ WallyHandlecmd56,
+};
+
+// code
+
void unref_sub_8137220(void)
{
}
@@ -146,7 +271,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -158,7 +283,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -169,7 +294,7 @@ void sub_81372BC(void)
r4 = --ewram[0x160AA];
if (r4 == 0)
{
- dp01_build_cmdbuf_x21_a_bb(1, 9, 0);
+ Emitcmd33(1, 9, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -191,7 +316,7 @@ void sub_81372BC(void)
{
PlaySE(SE_SELECT);
DestroyMenuCursor();
- dp01_build_cmdbuf_x21_a_bb(1, 1, 0);
+ Emitcmd33(1, 1, 0);
WallyBufferExecCompleted();
}
break;
@@ -241,7 +366,7 @@ void sub_81374FC(void)
if (gMain.callback2 == sub_800F808
&& !gPaletteFade.active)
{
- dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId);
+ Emitcmd35(1, gScriptItemId);
WallyBufferExecCompleted();
}
}
@@ -374,7 +499,7 @@ void unref_sub_81379E4(void)
WallyBufferExecCompleted();
}
-void dp01t_00_5_getattr(void)
+void WallyHandleGetAttributes(void)
{
u8 arr[0x100];
u32 r6 = 0;
@@ -395,7 +520,7 @@ void dp01t_00_5_getattr(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, arr);
+ Emitcmd29(1, r6, arr);
WallyBufferExecCompleted();
}
@@ -704,12 +829,12 @@ u32 sub_8137A84(u8 a, u8 *buffer)
return size;
}
-void sub_8138230(void)
+void WallyHandlecmd1(void)
{
- sub_802ECF0();
+ PlayerHandlecmd1();
}
-void sub_813823C(void)
+void WallyHandleSetAttributes(void)
{
u8 r4;
u8 i;
@@ -948,22 +1073,22 @@ void sub_8138294(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_8138C90(void)
+void WallyHandlecmd3(void)
{
WallyBufferExecCompleted();
}
-void sub_8138C9C(void)
+void WallyHandleLoadPokeSprite(void)
{
WallyBufferExecCompleted();
}
-void sub_8138CA8(void)
+void WallyHandleSendOutPoke(void)
{
WallyBufferExecCompleted();
}
-void sub_8138CB4(void)
+void WallyHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -979,7 +1104,7 @@ void sub_8138CB4(void)
}
}
-void sub_8138D38(void)
+void WallyHandleTrainerThrow(void)
{
LoadPlayerTrainerBankSprite(2, gActiveBank);
GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
@@ -994,7 +1119,7 @@ void sub_8138D38(void)
gBattleBankFunc[gActiveBank] = sub_813741C;
}
-void sub_8138E04(void)
+void WallyHandleTrainerSlide(void)
{
LoadPlayerTrainerBankSprite(2, gActiveBank);
GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
@@ -1009,22 +1134,22 @@ void sub_8138E04(void)
gBattleBankFunc[gActiveBank] = sub_8137908;
}
-void sub_8138ED0(void)
+void WallyHandleTrainerSlideBack(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EDC(void)
+void WallyHandlecmd10(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EE8(void)
+void WallyHandlecmd11(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EF4(void)
+void WallyHandlecmd12(void)
{
ewram17840.unk8 = 4;
gDoingBattleAnim = TRUE;
@@ -1032,7 +1157,7 @@ void sub_8138EF4(void)
gBattleBankFunc[gActiveBank] = bx_wait_t5;
}
-void sub_8138F44(void)
+void WallyHandleBallThrow(void)
{
u8 val = gBattleBufferA[gActiveBank][1];
@@ -1042,12 +1167,12 @@ void sub_8138F44(void)
gBattleBankFunc[gActiveBank] = bx_wait_t5;
}
-void sub_8138FA0(void)
+void WallyHandlePuase(void)
{
WallyBufferExecCompleted();
}
-void sub_8138FAC(void)
+void WallyHandleMoveAnimation(void)
{
u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
@@ -1115,7 +1240,7 @@ void sub_81390D0(void)
}
}
-void sub_8139208(void)
+void WallyHandlePrintString(void)
{
u16 *ptr;
@@ -1129,15 +1254,15 @@ void sub_8139208(void)
gBattleBankFunc[gActiveBank] = sub_8137454;
}
-void dp01t_11_5_message_for_player_only(void)
+void WallyHandlePrintStringPlayerOnly(void)
{
if (GetBankSide(gActiveBank) == 0)
- sub_8139208();
+ WallyHandlePrintString();
else
WallyBufferExecCompleted();
}
-void sub_8139298(void)
+void WallyHandlecmd18(void)
{
s32 i;
@@ -1162,12 +1287,12 @@ void sub_8139298(void)
sub_8002F44(&gUnknown_03004210);
}
-void sub_8139378(void)
+void WallyHandlecmd19(void)
{
WallyBufferExecCompleted();
}
-void sub_8139384(void)
+void WallyHandlecmd20(void)
{
switch (ewram[0x160A9])
{
@@ -1182,31 +1307,31 @@ void sub_8139384(void)
{
DestroyMenuCursor();
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 10, 256);
+ Emitcmd33(1, 10, 256);
WallyBufferExecCompleted();
}
break;
}
}
-void sub_81393EC(void)
+void WallyHandleOpenBag(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gBattleBankFunc[gActiveBank] = sub_81374C4;
gBankInMenu = gActiveBank;
}
-void sub_813942C(void)
+void WallyHandlecmd22(void)
{
WallyBufferExecCompleted();
}
-void sub_8139438(void)
+void WallyHandlecmd23(void)
{
WallyBufferExecCompleted();
}
-void sub_8139444(void)
+void WallyHandleHealthBarUpdate(void)
{
s16 r7;
@@ -1229,87 +1354,87 @@ void sub_8139444(void)
gBattleBankFunc[gActiveBank] = sub_81377B0;
}
-void sub_8139544(void)
+void WallyHandleExpBarUpdate(void)
{
WallyBufferExecCompleted();
}
-void sub_8139550(void)
+void WallyHandleStatusIconUpdate(void)
{
WallyBufferExecCompleted();
}
-void sub_813955C(void)
+void WallyHandleStatusAnimation(void)
{
WallyBufferExecCompleted();
}
-void sub_8139568(void)
+void WallyHandleStatusXor(void)
{
WallyBufferExecCompleted();
}
-void sub_8139574(void)
+void WallyHandlecmd29(void)
{
WallyBufferExecCompleted();
}
-void sub_8139580(void)
+void WallyHandleDMATransfer(void)
{
WallyBufferExecCompleted();
}
-void sub_813958C(void)
+void WallyHandlecmd31(void)
{
WallyBufferExecCompleted();
}
-void sub_8139598(void)
+void WallyHandlecmd32(void)
{
WallyBufferExecCompleted();
}
-void sub_81395A4(void)
+void WallyHandlecmd33(void)
{
WallyBufferExecCompleted();
}
-void sub_81395B0(void)
+void WallyHandlecmd34(void)
{
WallyBufferExecCompleted();
}
-void sub_81395BC(void)
+void WallyHandlecmd35(void)
{
WallyBufferExecCompleted();
}
-void sub_81395C8(void)
+void WallyHandlecmd36(void)
{
WallyBufferExecCompleted();
}
-void sub_81395D4(void)
+void WallyHandlecmd37(void)
{
WallyBufferExecCompleted();
}
-void sub_81395E0(void)
+void WallyHandlecmd38(void)
{
WallyBufferExecCompleted();
}
-void sub_81395EC(void)
+void WallyHandlecmd39(void)
{
WallyBufferExecCompleted();
}
-void sub_81395F8(void)
+void WallyHandlecmd40(void)
{
WallyBufferExecCompleted();
}
-void sub_8139604(void)
+void WallyHandleHitAnimation(void)
{
if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
{
@@ -1324,37 +1449,37 @@ void sub_8139604(void)
}
}
-void sub_8139674(void)
+void WallyHandlecmd42(void)
{
WallyBufferExecCompleted();
}
-void sub_8139680(void)
+void WallyHandleEffectivenessSound(void)
{
PlaySE(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
WallyBufferExecCompleted();
}
-void sub_81396B0(void)
+void WallyHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
WallyBufferExecCompleted();
}
-void sub_81396E0(void)
+void WallyHandleFaintingCry(void)
{
PlayCry1(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), 25);
WallyBufferExecCompleted();
}
-void dp01t_2E_5_battle_intro(void)
+void WallyHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
WallyBufferExecCompleted();
}
-void sub_8139750(void)
+void WallyHandleTrainerBallThrow(void)
{
u8 paletteNum;
u8 taskId;
@@ -1421,7 +1546,7 @@ void sub_8139A2C(u8 taskId)
}
}
-void sub_8139AA0(void)
+void WallyHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1435,22 +1560,22 @@ void sub_8139AA0(void)
}
}
-void sub_8139B20(void)
+void WallyHandlecmd49(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B2C(void)
+void WallyHandlecmd50(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B38(void)
+void WallyHandleSpriteInvisibility(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B44(void)
+void WallyHandleBattleAnimation(void)
{
u8 val2 = gBattleBufferA[gActiveBank][1];
u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
@@ -1461,17 +1586,17 @@ void sub_8139B44(void)
gBattleBankFunc[gActiveBank] = sub_8137940;
}
-void sub_8139BA0(void)
+void WallyHandleLinkStandbyMsg(void)
{
WallyBufferExecCompleted();
}
-void sub_8139BAC(void)
+void WallyHandleResetActionMoveSelection(void)
{
WallyBufferExecCompleted();
}
-void sub_8139BB8(void)
+void WallyHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1481,6 +1606,6 @@ void sub_8139BB8(void)
gBattleBankFunc[gActiveBank] = sub_813746C;
}
-void nullsub_80(void)
+void WallyHandlecmd56(void)
{
}
diff --git a/src/misc/rom3.c b/src/misc/rom3.c
index 803bbf943..da2ea1357 100644
--- a/src/misc/rom3.c
+++ b/src/misc/rom3.c
@@ -573,7 +573,7 @@ void EmitGetAttributes(u8 a, u8 b, u8 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c)
+void Emitcmd1(u8 a, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 1;
gBattleBuffersTransferData[1] = b;
@@ -594,7 +594,7 @@ void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e)
dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3);
}
-void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d)
+void Emitcmd3(u8 a, u8 b, u8 c, u8 *d)
{
int i;
@@ -606,7 +606,7 @@ void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d)
dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 3);
}
-void dp01_build_cmdbuf_x04_4_4_4(u8 a)
+void EmitLoadPokeSprite(u8 a)
{
gBattleBuffersTransferData[0] = 4;
gBattleBuffersTransferData[1] = 4;
@@ -615,7 +615,7 @@ void dp01_build_cmdbuf_x04_4_4_4(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitSwitchInAnim(u8 a, u8 b, u8 c)
+void EmitSendOutPoke(u8 a, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 5;
gBattleBuffersTransferData[1] = b;
@@ -631,7 +631,7 @@ void EmitReturnPokeToBall(u8 a, u8 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x07_7_7_7(u8 a)
+void EmitTrainerThrow(u8 a)
{
gBattleBuffersTransferData[0] = 7;
gBattleBuffersTransferData[1] = 7;
@@ -649,7 +649,7 @@ void EmitTrainerSlide(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x09_9_9_9(u8 a)
+void EmitTrainerSlideBack(u8 a)
{
gBattleBuffersTransferData[0] = 9;
gBattleBuffersTransferData[1] = 9;
@@ -658,7 +658,7 @@ void dp01_build_cmdbuf_x09_9_9_9(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitFaintAnimation(u8 a)
+void Emitcmd10(u8 a)
{
gBattleBuffersTransferData[0] = 10;
gBattleBuffersTransferData[1] = 10;
@@ -667,7 +667,7 @@ void EmitFaintAnimation(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x0B_B_B_B(u8 a)
+void Emitcmd11(u8 a)
{
gBattleBuffersTransferData[0] = 11;
gBattleBuffersTransferData[1] = 11;
@@ -676,7 +676,7 @@ void dp01_build_cmdbuf_x0B_B_B_B(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x0C_C_C_C(u8 a)
+void Emitcmd12(u8 a)
{
gBattleBuffersTransferData[0] = 12;
gBattleBuffersTransferData[1] = 12;
@@ -685,14 +685,14 @@ void dp01_build_cmdbuf_x0C_C_C_C(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitBallThrowAnim(u8 a, u8 b)
+void EmitBallThrow(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 13;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void unref_sub_800C828(u8 a, u8 b, u8 *c)
+void EmitPuase(u8 a, u8 b, u8 *c)
{
int i;
@@ -1021,7 +1021,7 @@ _0800CB54: .4byte gBattleTextBuff1\n\
.syntax divided\n");
}
-void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c)
+void Emitcmd18(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 18;
gBattleBuffersTransferData[1] = b;
@@ -1030,14 +1030,14 @@ void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void unref_sub_800CB84(u8 a, u8 b)
+void Emitcmd19(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 19;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d)
+void Emitcmd20(u8 a, u8 b, u8 c, u8 *d)
{
u32 i;
@@ -1050,7 +1050,7 @@ void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 24);
}
-void sub_800CBE0(u8 a, u8 *b)
+void EmitOpenBag(u8 a, u8 *b)
{
int i;
@@ -1073,7 +1073,7 @@ void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written
}
-void dp01_build_cmdbuf_x17_17_17_17(u8 a)
+void Emitcmd23(u8 a)
{
gBattleBuffersTransferData[0] = 23;
gBattleBuffersTransferData[1] = 23;
@@ -1136,7 +1136,7 @@ void EmitStatusXor(u8 a, u8 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c)
+void Emitcmd29(u8 a, u16 b, u8 *c)
{
int i;
@@ -1149,7 +1149,7 @@ void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 4);
}
-void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d)
+void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d)
{
int i;
@@ -1165,7 +1165,7 @@ void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d)
dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 7);
}
-void unref_sub_800CE3C(u8 a, u16 b, u8 *c)
+void Emitcmd31(u8 a, u16 b, u8 *c)
{
int i;
@@ -1177,7 +1177,7 @@ void unref_sub_800CE3C(u8 a, u16 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3);
}
-void unref_sub_800CE84(u8 a, u16 b, u8 *c)
+void Emitcmd32(u8 a, u16 b, u8 *c)
{
int i;
@@ -1189,7 +1189,7 @@ void unref_sub_800CE84(u8 a, u16 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3);
}
-void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c)
+void Emitcmd33(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 33;
gBattleBuffersTransferData[1] = b;
@@ -1198,7 +1198,7 @@ void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c)
+void Emitcmd34(u8 a, u8 b, u8 *c)
{
int i;
@@ -1209,7 +1209,7 @@ void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 5);
}
-void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b)
+void Emitcmd35(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 35;
gBattleBuffersTransferData[1] = b;
@@ -1218,7 +1218,7 @@ void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b)
+void Emitcmd36(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 36;
gBattleBuffersTransferData[1] = b;
@@ -1227,7 +1227,7 @@ void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x25_25_25_25(u8 a)
+void Emitcmd37(u8 a)
{
gBattleBuffersTransferData[0] = 37;
gBattleBuffersTransferData[1] = 37;
@@ -1236,14 +1236,14 @@ void dp01_build_cmdbuf_x25_25_25_25(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x26_a(u8 a, u8 b)
+void Emitcmd38(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 38;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x27_27_27_27(u8 a)
+void Emitcmd39(u8 a)
{
gBattleBuffersTransferData[0] = 39;
gBattleBuffersTransferData[1] = 39;
@@ -1252,7 +1252,7 @@ void dp01_build_cmdbuf_x27_27_27_27(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x28_28_28_28(u8 a)
+void Emitcmd40(u8 a)
{
gBattleBuffersTransferData[0] = 40;
gBattleBuffersTransferData[1] = 40;
@@ -1270,7 +1270,7 @@ void EmitHitAnimation(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a)
+void Emitcmd42(u8 a)
{
gBattleBuffersTransferData[0] = 42;
gBattleBuffersTransferData[1] = 42;
@@ -1288,7 +1288,7 @@ void EmitEffectivenessSound(u8 a, u16 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitPlaySound(u8 a, u16 b)
+void Emitcmd44(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 44;
gBattleBuffersTransferData[1] = b;
@@ -1306,14 +1306,14 @@ void EmitFaintingCry(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void EmitBattleIntroSlide(u8 a, u8 b)
+void EmitIntroSlide(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 46;
gBattleBuffersTransferData[1] = b;
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a)
+void EmitTrainerBallThrow(u8 a)
{
gBattleBuffersTransferData[0] = 47;
gBattleBuffersTransferData[1] = 47;
@@ -1322,7 +1322,7 @@ void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c)
+void Emitcmd48(u8 a, u8 *b, u8 c)
{
int i;
@@ -1335,7 +1335,7 @@ void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 52);
}
-void dp01_build_cmdbuf_x31_31_31_31(u8 a)
+void Emitcmd49(u8 a)
{
gBattleBuffersTransferData[0] = 49;
gBattleBuffersTransferData[1] = 49;
@@ -1344,7 +1344,7 @@ void dp01_build_cmdbuf_x31_31_31_31(u8 a)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x32_32_32_32(u8 a)
+void Emitcmd50(u8 a)
{
gBattleBuffersTransferData[0] = 50;
gBattleBuffersTransferData[1] = 50;
@@ -1385,7 +1385,7 @@ void EmitResetActionMoveSelection(u8 a, u8 b)
dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x37_a(u8 a, u8 b)
+void Emitcmd55(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 55;
gBattleBuffersTransferData[1] = b;