diff options
Diffstat (limited to 'src/battle_5.c')
-rw-r--r-- | src/battle_5.c | 1579 |
1 files changed, 0 insertions, 1579 deletions
diff --git a/src/battle_5.c b/src/battle_5.c deleted file mode 100644 index 5972c0cb1..000000000 --- a/src/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); - } -} |