diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-03-17 21:39:47 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-03-18 08:40:31 -0400 |
commit | 655dd2f0c67bd39abf1562d42b8b35635ad578a8 (patch) | |
tree | e5268117d981b3a6891b2e36de66a4347380866f /src | |
parent | 7d0604cd61b699f7fd7319c698a5fc93d703ffc2 (diff) |
Fix matching HandleAction_UseItem
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/battle_2.c | 2243 | ||||
-rw-r--r-- | src/battle/battle_util.c | 16 |
2 files changed, 359 insertions, 1900 deletions
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 1c28c281d..8c9d8a13b 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1367,7 +1367,7 @@ void debug_sub_8012D10(u8); u32 debug_sub_8013294(u8, void *, u32); void debug_sub_80132C8(u8, void *, u32); -extern s16 gUnknown_Debug_2023A76[][0x23]; +extern s16 gUnknown_Debug_2023A76[][35]; extern s16 gUnknown_Debug_2023B02[][6][4]; extern u8 gUnknown_Debug_03004360; extern struct Window gUnknown_Debug_03004370; @@ -1546,7 +1546,7 @@ void debug_sub_8010B80(u8 a) // absolutely no clue as to why this phenomenon occurs. For example, // I have to make debug_sub_8010CAC access gUnknown_Debug_2023A76 as a 3D array. // If I use a 2D array, SetActionsAndBanksTurnOrder will no longer match. -#ifdef NONMATCHING +//#ifdef NONMATCHING void debug_sub_8010CAC(void) { s32 r5; @@ -1844,7 +1844,7 @@ void debug_sub_8010CAC(void) AnimateSprites(); BuildOamBuffer(); } -#else +/*#else // 3D array extern s16 gUnknown_Debug_2023A76_[][7][5]; @@ -2146,7 +2146,7 @@ void debug_sub_8010CAC(void) AnimateSprites(); BuildOamBuffer(); } -#endif +#endif*/ extern u16 gUnknown_Debug_821F564[][5]; @@ -4399,1536 +4399,366 @@ void sub_8012258(u8 a) } } -/* +enum +{ + STATE_BEFORE_ACTION_CHOSEN, + STATE_WAIT_ACTION_CHOSEN, + STATE_WAIT_ACTION_CASE_CHOSEN, + STATE_WAIT_ACTION_CONFIRMED_STANDBY, + STATE_WAIT_ACTION_CONFIRMED, + STATE_SELECTION_SCRIPT, + STATE_WAIT_SET_BEFORE_ACTION, + STATE_SELECTION_SCRIPT_MAY_RUN +}; + +extern u8 * gSelectionBattleScripts[]; +extern u8 BattleScript_ActionSelectionItemsCantBeUsed[]; +extern u8 BattleScript_PrintFullBox[]; +extern u8 BattleScript_PrintCantRunFromTrainer[]; +extern u8 BattleScript_PrintCantEscapeFromBattle[]; + void sub_8012324(void) { - u8 r5; + u8 position; + s32 i; gBattleCommunication[4] = 0; // inverted loop //_0801234C for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { - r5 = GetBattlerPosition(gActiveBattler); + position = GetBattlerPosition(gActiveBattler); switch (gBattleCommunication[gActiveBattler]) { - case 0: - ewram16068arr(gActiveBattler) = 6; - if (!(gBattleTypeFlags & 0x40) - && (r5 & 2) - && !(ewram160A6 & gBitTable[GetBattlerAtPosition(r5 ^ 2)]) - && gBattleCommunication[GetBattlerAtPosition(r5)] != 4) + case STATE_BEFORE_ACTION_CHOSEN: + ewram16068arr(gActiveBattler) = 6; + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) + && (position & BIT_FLANK) != B_FLANK_LEFT + && !(ewram160A6 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))]) + && gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] != STATE_WAIT_ACTION_CONFIRMED) + break; + //_080123F8 + if (ewram160A6 & gBitTable[gActiveBattler]) + { + gActionForBanks[gActiveBattler] = 13; + if (!(gBattleTypeFlags & 0x40)) + gBattleCommunication[gActiveBattler] = 4; + //_08012454 + else + gBattleCommunication[gActiveBattler] = 3; + break; + } + //_08012468 + if ((gBattleMons[gActiveBattler].status2 & 0x1000) + || (gBattleMons[gActiveBattler].status2 & 0x400000)) + { + gActionForBanks[gActiveBattler] = 0; + gBattleCommunication[gActiveBattler] = 3; + } + else + { + Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); + MarkBufferBankForExecution(gActiveBattler); + gBattleCommunication[gActiveBattler]++; + } break; - //_080123F8 - if (ewram160A6 & gBitTable[gActiveBattler]) - { - gActionForBanks[gActiveBattler] = 13; - if (!(gBattleTypeFlags & 0x40)) - gBattleCommunication[gActiveBattler] = 4; - //_08012454 + case STATE_WAIT_ACTION_CHOSEN: + if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + gActionForBanks[gActiveBattler] = gBattleBufferB[gActiveBattler][1]; + switch (gBattleBufferB[gActiveBattler][1]) + { + case B_ACTION_USE_MOVE: + if (AreAllMovesUnusable()) + { + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + ewram16060(gActiveBattler) = FALSE; + ewram16094arr(gActiveBattler) = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + ewram16010arr(gActiveBattler) = gBattleBufferB[gActiveBattler][3]; + return; + } + else if (gDisableStructs[gActiveBattler].encoredMove != 0) + { + gChosenMovesByBanks[gActiveBattler] = gDisableStructs[gActiveBattler].encoredMove; + gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + return; + } + else + { + struct ChooseMoveStruct { + u16 moves[4]; + u8 currentPp[4]; + u8 maxPp[4]; + u16 species; + u8 monType1; + u8 monType2; + } moveInfo; + + moveInfo.species = gBattleMons[gActiveBattler].species; + moveInfo.monType1 = gBattleMons[gActiveBattler].type1; + moveInfo.monType2 = gBattleMons[gActiveBattler].type2; + + for (i = 0; i < 4; i++) + { + moveInfo.moves[i] = gBattleMons[gActiveBattler].moves[i]; + moveInfo.currentPp[i] = gBattleMons[gActiveBattler].pp[i]; + moveInfo.maxPp[i] = CalculatePPWithBonus( + gBattleMons[gActiveBattler].moves[i], + gBattleMons[gActiveBattler].ppBonuses, + i); + } + + Emitcmd20(0, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, (u8 *)&moveInfo); + MarkBufferBankForExecution(gActiveBattler); + } + break; + case B_ACTION_USE_ITEM: + if (gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_BATTLE_TOWER + | BATTLE_TYPE_EREADER_TRAINER)) + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_ActionSelectionItemsCantBeUsed; + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + ewram16060(gActiveBattler) = FALSE; + ewram16094arr(gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN; + return; + } + else + { + EmitOpenBag(0, &ewram1606Carr(0, gActiveBattler)); + MarkBufferBankForExecution(gActiveBattler); + } + break; + case B_ACTION_SWITCH: + ewram16064arr(gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION) + || gStatuses3[gActiveBattler] & STATUS3_ROOTED) + { + EmitChoosePokemon(0, 2, 6, ABILITY_NONE, &ewram1606Carr(0, gActiveBattler)); + } + else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG)) + || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) + && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE) + || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0)) + && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))) + { + EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ABILITY_PREVENTS, 6, gLastUsedAbility, &ewram1606Carr(0, gActiveBattler)); + } + else + { + if (gActiveBattler == 2 && gActionForBanks[0] == B_ACTION_SWITCH) + EmitChoosePokemon(0, PARTY_CHOOSE_MON, ewram16068arr(0), ABILITY_NONE, &ewram1606Carr(0, gActiveBattler)); + else if (gActiveBattler == 3 && gActionForBanks[1] == B_ACTION_SWITCH) + EmitChoosePokemon(0, PARTY_CHOOSE_MON, ewram16068arr(1), ABILITY_NONE, &ewram1606Carr(0, gActiveBattler)); + else + EmitChoosePokemon(0, PARTY_CHOOSE_MON, 6, ABILITY_NONE, &ewram1606Carr(0, gActiveBattler)); + } + MarkBufferBankForExecution(gActiveBattler); + break; + case B_ACTION_SAFARI_BALL: + if (PlayerPartyAndPokemonStorageFull()) + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintFullBox; + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + ewram16060(gActiveBattler) = FALSE; + ewram16094arr(gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN; + return; + } + break; + case B_ACTION_SAFARI_POKEBLOCK: + EmitOpenBag(0, &ewram1606Carr(0, gActiveBattler)); + MarkBufferBankForExecution(gActiveBattler); + break; + case B_ACTION_CANCEL_PARTNER: + gBattleCommunication[gActiveBattler] = STATE_WAIT_SET_BEFORE_ACTION; + gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))] = STATE_BEFORE_ACTION_CHOSEN; + Emitcmd50(0); + MarkBufferBankForExecution(gActiveBattler); + return; + } + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER + && !(gBattleTypeFlags & (BATTLE_TYPE_LINK)) + && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN) + { + BattleScriptExecute(BattleScript_PrintCantRunFromTrainer); + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else if (CanRunFromBattle() + && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN) + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintCantEscapeFromBattle; + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + ewram16060(gActiveBattler) = FALSE; + ewram16094arr(gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN; + return; + } + else + { + gBattleCommunication[gActiveBattler]++; + } + } + break; + case STATE_WAIT_ACTION_CASE_CHOSEN: + if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + switch (gActionForBanks[gActiveBattler]) + { + case B_ACTION_USE_MOVE: + switch (gBattleBufferB[gActiveBattler][1]) + { + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + gActionForBanks[gActiveBattler] = gBattleBufferB[gActiveBattler][1]; + return; + default: + if ((gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)) == 0xFFFF) + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else if (TrySetCantSelectMoveBattleScript()) + { + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + ewram16060(gActiveBattler) = FALSE; + gBattleBufferB[gActiveBattler][1] = 0; + ewram16094arr(gActiveBattler) = STATE_WAIT_ACTION_CHOSEN; + return; + } + else + { + ewram1608Carr(gActiveBattler) = gBattleBufferB[gActiveBattler][2]; + gChosenMovesByBanks[gActiveBattler] = gBattleMons[gActiveBattler].moves[ewram1608Carr(gActiveBattler)]; + ewram16010arr(gActiveBattler) = gBattleBufferB[gActiveBattler][3]; + gBattleCommunication[gActiveBattler]++; + } + break; + } + break; + case B_ACTION_USE_ITEM: + if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) == 0) + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else + { + gLastUsedItem = (gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)); + gBattleCommunication[gActiveBattler]++; + } + break; + case B_ACTION_SWITCH: + if (gBattleBufferB[gActiveBattler][1] == PARTY_SIZE) + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else + { + ewram16068arr(gActiveBattler) = gBattleBufferB[gActiveBattler][1]; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + ewram1606Carr(0, gActiveBattler) &= 0xF; + ewram1606Carr(0, gActiveBattler) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); + ewram1606Carr(1, gActiveBattler) = gBattleBufferB[gActiveBattler][3]; + + ewram1606Carr(0, (gActiveBattler ^ BIT_FLANK)) &= (0xF0); + ewram1606Carr(0, (gActiveBattler ^ BIT_FLANK)) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; + ewram1606Carr(2, (gActiveBattler ^ BIT_FLANK)) = gBattleBufferB[gActiveBattler][3]; + } + gBattleCommunication[gActiveBattler]++; + } + break; + case B_ACTION_RUN: + gHitMarker |= HITMARKER_RUN; + gBattleCommunication[gActiveBattler]++; + break; + case B_ACTION_SAFARI_WATCH_CAREFULLY: + gBattleCommunication[gActiveBattler]++; + break; + case B_ACTION_SAFARI_BALL: + gBattleCommunication[gActiveBattler]++; + break; + case B_ACTION_SAFARI_POKEBLOCK: + if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) != 0) + { + gBattleCommunication[gActiveBattler]++; + } + else + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + break; + case B_ACTION_SAFARI_GO_NEAR: + gBattleCommunication[gActiveBattler]++; + break; + case B_ACTION_SAFARI_RUN: + gHitMarker |= HITMARKER_RUN; + gBattleCommunication[gActiveBattler]++; + break; + case B_ACTION_WALLY_THROW: + gBattleCommunication[gActiveBattler]++; + break; + } + } + break; + case STATE_WAIT_ACTION_CONFIRMED_STANDBY: + if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE) + || (position & BIT_FLANK) != B_FLANK_LEFT + || (ewram160A6 & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) + { + EmitLinkStandbyMsg(0, 0); + } + else + { + EmitLinkStandbyMsg(0, 1); + } + MarkBufferBankForExecution(gActiveBattler); + gBattleCommunication[gActiveBattler]++; + } + break; + case STATE_WAIT_ACTION_CONFIRMED: + if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + gBattleCommunication[ACTIONS_CONFIRMED_COUNT]++; + } + break; + case STATE_SELECTION_SCRIPT: + if (ewram16060(gActiveBattler)) + { + gBattleCommunication[gActiveBattler] = ewram16094arr(gActiveBattler); + } else - gBattleCommunication[gActiveBattler] = 3; + { + gBankAttacker = gActiveBattler; + gBattlescriptCurrInstr = gSelectionBattleScripts[gActiveBattler]; + if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } + gSelectionBattleScripts[gActiveBattler] = gBattlescriptCurrInstr; + } + break; + case STATE_WAIT_SET_BEFORE_ACTION: + if (!(gBattleExecBuffer & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } break; - } - //_08012468 - if ((gBattleMons[gActiveBattler].status2 & 0x1000) - || (gBattleMons[gActiveBattler].status2 & 0x10000000)) - { - gActionForBanks[gActiveBattler] = 0; - gBattleCommunication[gActiveBattler] = 3; - } - else - { - Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); - MarkBufferBankForExecution(gActiveBattler); - gBattleCommunication[gActiveBattler]++; - } - break; - case 1: } } -} -*/ -NAKED -void sub_8012324(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x1C\n\ - ldr r0, _08012340 @ =gBattleCommunication\n\ - movs r1, 0\n\ - strb r1, [r0, 0x4]\n\ - ldr r0, _08012344 @ =gActiveBattler\n\ - strb r1, [r0]\n\ - ldr r0, _08012348 @ =gBattlersCount\n\ - bl _08012F74\n\ - .align 2, 0\n\ -_08012340: .4byte gBattleCommunication\n\ -_08012344: .4byte gActiveBattler\n\ -_08012348: .4byte gBattlersCount\n\ -_0801234C:\n\ - ldr r4, _08012374 @ =gActiveBattler\n\ - ldrb r0, [r4]\n\ - bl GetBattlerPosition\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r1, _08012378 @ =gBattleCommunication\n\ - ldrb r0, [r4]\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x6\n\ - bls _08012368\n\ - bl _08012F66\n\ -_08012368:\n\ - lsls r0, 2\n\ - ldr r1, _0801237C @ =_08012380\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_08012374: .4byte gActiveBattler\n\ -_08012378: .4byte gBattleCommunication\n\ -_0801237C: .4byte _08012380\n\ - .align 2, 0\n\ -_08012380:\n\ - .4byte _0801239C\n\ - .4byte _080124C8\n\ - .4byte _08012A28\n\ - .4byte _08012DA8\n\ - .4byte _08012E50\n\ - .4byte _08012E94\n\ - .4byte _08012F38\n\ -_0801239C:\n\ - ldr r4, _08012434 @ =gSharedMem\n\ - ldr r0, _08012438 @ =gActiveBattler\n\ - ldrb r0, [r0]\n\ - ldr r1, _0801243C @ =0x00016068\n\ - adds r0, r1\n\ - adds r0, r4\n\ - movs r1, 0x6\n\ - strb r1, [r0]\n\ - ldr r0, _08012440 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080123F8\n\ - movs r1, 0x2\n\ - movs r0, 0x2\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _080123F8\n\ - eors r5, r1\n\ - adds r0, r5, 0\n\ - bl GetBattlerAtPosition\n\ - ldr r2, _08012444 @ =0x000160a6\n\ - adds r1, r4, r2\n\ - ldrb r1, [r1]\n\ - ldr r2, _08012448 @ =gBitTable\n\ - lsls r0, 24\n\ - lsrs r0, 22\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _080123F8\n\ - ldr r4, _0801244C @ =gBattleCommunication\n\ - adds r0, r5, 0\n\ - bl GetBattlerAtPosition\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - beq _080123F8\n\ - bl _08012F66\n\ -_080123F8:\n\ - ldr r0, _08012434 @ =gSharedMem\n\ - ldr r3, _08012444 @ =0x000160a6\n\ - adds r0, r3\n\ - ldrb r3, [r0]\n\ - ldr r1, _08012448 @ =gBitTable\n\ - ldr r4, _08012438 @ =gActiveBattler\n\ - ldrb r2, [r4]\n\ - lsls r0, r2, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _08012468\n\ - ldr r0, _08012450 @ =gActionForBanks\n\ - adds r0, r2, r0\n\ - movs r1, 0xD\n\ - strb r1, [r0]\n\ - ldr r0, _08012440 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08012454\n\ - ldr r0, _0801244C @ =gBattleCommunication\n\ - ldrb r1, [r4]\n\ - adds r1, r0\n\ - movs r0, 0x4\n\ - strb r0, [r1]\n\ - bl _08012F66\n\ - .align 2, 0\n\ -_08012434: .4byte gSharedMem\n\ -_08012438: .4byte gActiveBattler\n\ -_0801243C: .4byte 0x00016068\n\ -_08012440: .4byte gBattleTypeFlags\n\ -_08012444: .4byte 0x000160a6\n\ -_08012448: .4byte gBitTable\n\ -_0801244C: .4byte gBattleCommunication\n\ -_08012450: .4byte gActionForBanks\n\ -_08012454:\n\ - ldr r0, _08012464 @ =gBattleCommunication\n\ - ldrb r1, [r4]\n\ - adds r1, r0\n\ - movs r0, 0x3\n\ - strb r0, [r1]\n\ - bl _08012F66\n\ - .align 2, 0\n\ -_08012464: .4byte gBattleCommunication\n\ -_08012468:\n\ - ldr r1, _0801249C @ =gBattleMons\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 5\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08012488\n\ - movs r0, 0x80\n\ - lsls r0, 15\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _080124A8\n\ -_08012488:\n\ - ldr r0, _080124A0 @ =gActionForBanks\n\ - adds r0, r2, r0\n\ - strb r3, [r0]\n\ - ldr r1, _080124A4 @ =gBattleCommunication\n\ - ldrb r0, [r4]\n\ - adds r0, r1\n\ - movs r1, 0x3\n\ - strb r1, [r0]\n\ - bl _08012F66\n\ - .align 2, 0\n\ -_0801249C: .4byte gBattleMons\n\ -_080124A0: .4byte gActionForBanks\n\ -_080124A4: .4byte gBattleCommunication\n\ -_080124A8:\n\ - ldr r0, _080124C0 @ =gActionForBanks\n\ - ldrb r1, [r0]\n\ - ldr r0, _080124C4 @ =gBattleBufferB\n\ - ldrb r2, [r0, 0x1]\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 8\n\ - orrs r2, r0\n\ - movs r0, 0\n\ - bl Emitcmd18\n\ - bl _08012E32\n\ - .align 2, 0\n\ -_080124C0: .4byte gActionForBanks\n\ -_080124C4: .4byte gBattleBufferB\n\ -_080124C8:\n\ - ldr r4, _08012520 @ =gBattleExecBuffer\n\ - ldr r1, _08012524 @ =gBitTable\n\ - ldr r3, _08012528 @ =gActiveBattler\n\ - ldrb r5, [r3]\n\ - lsls r0, r5, 2\n\ - adds r0, r1\n\ - ldr r2, [r0]\n\ - lsls r0, r2, 4\n\ - movs r1, 0xF0\n\ - lsls r1, 24\n\ - orrs r0, r1\n\ - orrs r0, r2\n\ - lsls r1, r2, 8\n\ - orrs r0, r1\n\ - lsls r2, 12\n\ - orrs r0, r2\n\ - ldr r1, [r4]\n\ - ands r1, r0\n\ - mov r8, r3\n\ - cmp r1, 0\n\ - beq _080124F6\n\ - bl _08012F66\n\ -_080124F6:\n\ - ldr r2, _0801252C @ =gActionForBanks\n\ - adds r2, r5, r2\n\ - ldr r1, _08012530 @ =gBattleBufferB\n\ - lsls r0, r5, 9\n\ - adds r1, 0x1\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - ldrb r0, [r3]\n\ - lsls r0, 9\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xC\n\ - bls _08012514\n\ - b _08012968\n\ -_08012514:\n\ - lsls r0, 2\n\ - ldr r1, _08012534 @ =_08012538\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_08012520: .4byte gBattleExecBuffer\n\ -_08012524: .4byte gBitTable\n\ -_08012528: .4byte gActiveBattler\n\ -_0801252C: .4byte gActionForBanks\n\ -_08012530: .4byte gBattleBufferB\n\ -_08012534: .4byte _08012538\n\ - .align 2, 0\n\ -_08012538:\n\ - .4byte _0801256C\n\ - .4byte _080126B4\n\ - .4byte _080126E0\n\ - .4byte _08012968\n\ - .4byte _08012968\n\ - .4byte _080128B0\n\ - .4byte _08012908\n\ - .4byte _08012968\n\ - .4byte _08012968\n\ - .4byte _08012968\n\ - .4byte _08012968\n\ - .4byte _08012968\n\ - .4byte _0801292C\n\ -_0801256C:\n\ - bl AreAllMovesUnusable\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080125D0\n\ - ldr r0, _080125B4 @ =gBattleCommunication\n\ - ldr r2, _080125B8 @ =gActiveBattler\n\ - ldrb r1, [r2]\n\ - adds r1, r0\n\ - movs r4, 0\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - ldr r3, _080125BC @ =gSharedMem\n\ - ldrb r0, [r2]\n\ - ldr r1, _080125C0 @ =0x00016060\n\ - adds r0, r1\n\ - adds r0, r3\n\ - strb r4, [r0]\n\ - ldrb r0, [r2]\n\ - ldr r4, _080125C4 @ =0x00016094\n\ - adds r0, r4\n\ - adds r0, r3\n\ - movs r1, 0x3\n\ - strb r1, [r0]\n\ - ldrb r1, [r2]\n\ - ldr r0, _080125C8 @ =0x00016010\n\ - adds r2, r1, r0\n\ - adds r2, r3\n\ - ldr r0, _080125CC @ =gBattleBufferB\n\ - lsls r1, 9\n\ - adds r0, 0x3\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - strb r0, [r2]\n\ - bl _08012F90\n\ - .align 2, 0\n\ -_080125B4: .4byte gBattleCommunication\n\ -_080125B8: .4byte gActiveBattler\n\ -_080125BC: .4byte gSharedMem\n\ -_080125C0: .4byte 0x00016060\n\ -_080125C4: .4byte 0x00016094\n\ -_080125C8: .4byte 0x00016010\n\ -_080125CC: .4byte gBattleBufferB\n\ -_080125D0:\n\ - ldr r1, _080125FC @ =gDisableStructs\n\ - ldr r5, _08012600 @ =gActiveBattler\n\ - ldrb r4, [r5]\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrh r2, [r0, 0x6]\n\ - cmp r2, 0\n\ - beq _0801260C\n\ - ldr r1, _08012604 @ =gChosenMovesByBanks\n\ - lsls r0, r4, 1\n\ - adds r0, r1\n\ - strh r2, [r0]\n\ - ldr r1, _08012608 @ =gBattleCommunication\n\ - ldrb r0, [r5]\n\ - adds r0, r1\n\ - movs r1, 0x3\n\ - strb r1, [r0]\n\ - bl _08012F90\n\ - .align 2, 0\n\ -_080125FC: .4byte gDisableStructs\n\ -_08012600: .4byte gActiveBattler\n\ -_08012604: .4byte gChosenMovesByBanks\n\ -_08012608: .4byte gBattleCommunication\n\ -_0801260C:\n\ - add r2, sp, 0x4\n\ - ldr r3, _080126AC @ =gBattleMons\n\ - movs r1, 0x58\n\ - adds r0, r4, 0\n\ - muls r0, r1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - strh r0, [r2, 0x10]\n\ - ldrb r0, [r5]\n\ - muls r0, r1\n\ - adds r0, r3\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - strb r0, [r2, 0x12]\n\ - ldrb r0, [r5]\n\ - muls r0, r1\n\ - adds r0, r3\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - strb r0, [r2, 0x13]\n\ - movs r4, 0\n\ - mov r1, sp\n\ - adds r1, 0xC\n\ - str r1, [sp, 0x18]\n\ - add r2, sp, 0x10\n\ - mov r10, r2\n\ - mov r8, r3\n\ - adds r7, r5, 0\n\ - movs r6, 0x58\n\ - movs r3, 0xC\n\ - add r3, r8\n\ - mov r9, r3\n\ - add r5, sp, 0x4\n\ -_0801264E:\n\ - lsls r2, r4, 1\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r2, r0\n\ - add r0, r9\n\ - ldrh r0, [r0]\n\ - strh r0, [r5]\n\ - ldr r0, [sp, 0x18]\n\ - adds r3, r0, r4\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r4, r0\n\ - mov r1, r8\n\ - adds r1, 0x24\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - strb r0, [r3]\n\ - ldrb r0, [r7]\n\ - adds r1, r0, 0\n\ - muls r1, r6\n\ - adds r2, r1\n\ - add r2, r9\n\ - ldrh r0, [r2]\n\ - add r1, r8\n\ - adds r1, 0x3B\n\ - ldrb r1, [r1]\n\ - lsls r2, r4, 24\n\ - lsrs r2, 24\n\ - bl CalculatePPWithBonus\n\ - mov r2, r10\n\ - adds r1, r2, r4\n\ - strb r0, [r1]\n\ - adds r5, 0x2\n\ - adds r4, 0x1\n\ - cmp r4, 0x3\n\ - ble _0801264E\n\ - ldr r0, _080126B0 @ =gBattleTypeFlags\n\ - ldrb r0, [r0]\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - movs r0, 0\n\ - movs r2, 0\n\ - add r3, sp, 0x4\n\ - bl Emitcmd20\n\ - b _0801289E\n\ - .align 2, 0\n\ -_080126AC: .4byte gBattleMons\n\ -_080126B0: .4byte gBattleTypeFlags\n\ -_080126B4:\n\ - ldr r0, _080126D0 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _080126D4 @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080126C2\n\ - b _08012908\n\ -_080126C2:\n\ - ldr r1, _080126D8 @ =gUnknown_02024C1C\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r1, _080126DC @ =BattleScript_ActionSelectionItemsCantBeUsed\n\ - b _080129CC\n\ - .align 2, 0\n\ -_080126D0: .4byte gBattleTypeFlags\n\ -_080126D4: .4byte 0x00000902\n\ -_080126D8: .4byte gUnknown_02024C1C\n\ -_080126DC: .4byte BattleScript_ActionSelectionItemsCantBeUsed\n\ -_080126E0:\n\ - ldr r3, _08012738 @ =gSharedMem\n\ - ldr r5, _0801273C @ =gActiveBattler\n\ - ldrb r0, [r5]\n\ - ldr r4, _08012740 @ =0x00016064\n\ - adds r1, r0, r4\n\ - adds r1, r3\n\ - ldr r2, _08012744 @ =gBattlerPartyIndexes\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r7, _08012748 @ =gBattleMons\n\ - ldrb r2, [r5]\n\ - movs r6, 0x58\n\ - adds r0, r2, 0\n\ - muls r0, r6\n\ - adds r1, r7, 0\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _0801274C @ =0x0400e000\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08012722\n\ - ldr r0, _08012750 @ =gStatuses3\n\ - lsls r1, r2, 2\n\ - adds r1, r0\n\ - ldr r1, [r1]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _08012758\n\ -_08012722:\n\ - lsls r0, r2, 1\n\ - adds r0, r2\n\ - ldr r2, _08012754 @ =0x0001606c\n\ - adds r1, r3, r2\n\ - adds r0, r1\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - movs r2, 0x6\n\ - b _0801286C\n\ - .align 2, 0\n\ -_08012738: .4byte gSharedMem\n\ -_0801273C: .4byte gActiveBattler\n\ -_08012740: .4byte 0x00016064\n\ -_08012744: .4byte gBattlerPartyIndexes\n\ -_08012748: .4byte gBattleMons\n\ -_0801274C: .4byte 0x0400e000\n\ -_08012750: .4byte gStatuses3\n\ -_08012754: .4byte 0x0001606c\n\ -_08012758:\n\ - str r1, [sp]\n\ - movs r0, 0xC\n\ - adds r1, r2, 0\n\ - movs r2, 0x17\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0\n\ - bne _080127E0\n\ - ldrb r1, [r5]\n\ - str r4, [sp]\n\ - movs r0, 0xC\n\ - movs r2, 0x47\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0\n\ - beq _080127A8\n\ - ldrb r0, [r5]\n\ - muls r0, r6\n\ - adds r1, r0, r7\n\ - adds r0, r1, 0\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - beq _080127A8\n\ - adds r0, r1, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - beq _080127A8\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1A\n\ - bne _080127E0\n\ -_080127A8:\n\ - ldr r5, _08012808 @ =gActiveBattler\n\ - ldrb r1, [r5]\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0xF\n\ - movs r2, 0x2A\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0\n\ - beq _08012818\n\ - ldr r2, _0801280C @ =gBattleMons\n\ - ldrb r1, [r5]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r1, r0, r2\n\ - adds r0, r1, 0\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x8\n\ - beq _080127E0\n\ - adds r0, r1, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x8\n\ - bne _08012818\n\ -_080127E0:\n\ - subs r1, r4, 0x1\n\ - lsls r1, 4\n\ - movs r0, 0x4\n\ - orrs r1, r0\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - ldr r0, _08012810 @ =gLastUsedAbility\n\ - ldrb r3, [r0]\n\ - ldr r0, _08012808 @ =gActiveBattler\n\ - ldrb r2, [r0]\n\ - lsls r0, r2, 1\n\ - adds r0, r2\n\ - ldr r2, _08012814 @ =gSharedMem + 0x1606C\n\ - adds r0, r2\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r2, 0x6\n\ - bl EmitChoosePokemon\n\ - b _0801289E\n\ - .align 2, 0\n\ -_08012808: .4byte gActiveBattler\n\ -_0801280C: .4byte gBattleMons\n\ -_08012810: .4byte gLastUsedAbility\n\ -_08012814: .4byte gSharedMem + 0x1606C\n\ -_08012818:\n\ - ldr r0, _08012830 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - mov r8, r0\n\ - cmp r1, 0x2\n\ - bne _08012840\n\ - ldr r0, _08012834 @ =gActionForBanks\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - bne _08012840\n\ - ldr r3, _08012838 @ =gSharedMem\n\ - ldr r4, _0801283C @ =0x00016068\n\ - b _08012854\n\ - .align 2, 0\n\ -_08012830: .4byte gActiveBattler\n\ -_08012834: .4byte gActionForBanks\n\ -_08012838: .4byte gSharedMem\n\ -_0801283C: .4byte 0x00016068\n\ -_08012840:\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - cmp r0, 0x3\n\ - bne _08012884\n\ - ldr r0, _08012874 @ =gActionForBanks\n\ - ldrb r0, [r0, 0x1]\n\ - cmp r0, 0x2\n\ - bne _08012884\n\ - ldr r3, _08012878 @ =gSharedMem\n\ - ldr r4, _0801287C @ =0x00016069\n\ -_08012854:\n\ - adds r0, r3, r4\n\ - ldrb r2, [r0]\n\ - mov r0, r8\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - ldr r1, _08012880 @ =0x0001606c\n\ - adds r3, r1\n\ - adds r0, r3\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0\n\ -_0801286C:\n\ - movs r3, 0\n\ - bl EmitChoosePokemon\n\ - b _0801289E\n\ - .align 2, 0\n\ -_08012874: .4byte gActionForBanks\n\ -_08012878: .4byte gSharedMem\n\ -_0801287C: .4byte 0x00016069\n\ -_08012880: .4byte 0x0001606c\n\ -_08012884:\n\ - ldr r0, _080128A8 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - ldr r1, _080128AC @ =gSharedMem + 0x1606C\n\ - adds r0, r1\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0\n\ - movs r2, 0x6\n\ - movs r3, 0\n\ - bl EmitChoosePokemon\n\ -_0801289E:\n\ - ldr r0, _080128A8 @ =gActiveBattler\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ - b _08012968\n\ - .align 2, 0\n\ -_080128A8: .4byte gActiveBattler\n\ -_080128AC: .4byte gSharedMem + 0x1606C\n\ -_080128B0:\n\ - bl PlayerPartyAndPokemonStorageFull\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08012968\n\ - ldr r1, _080128EC @ =gUnknown_02024C1C\n\ - ldr r2, _080128F0 @ =gActiveBattler\n\ - ldrb r0, [r2]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r1, _080128F4 @ =BattleScript_PrintFullBox\n\ - str r1, [r0]\n\ - ldr r0, _080128F8 @ =gBattleCommunication\n\ - ldrb r1, [r2]\n\ - adds r1, r0\n\ - movs r3, 0\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - ldr r1, _080128FC @ =gSharedMem\n\ - ldrb r0, [r2]\n\ - ldr r4, _08012900 @ =0x00016060\n\ - adds r0, r4\n\ - adds r0, r1\n\ - strb r3, [r0]\n\ - ldrb r0, [r2]\n\ - ldr r2, _08012904 @ =0x00016094\n\ - adds r0, r2\n\ - adds r0, r1\n\ - strb r3, [r0]\n\ - b _08012F90\n\ - .align 2, 0\n\ -_080128EC: .4byte gUnknown_02024C1C\n\ -_080128F0: .4byte gActiveBattler\n\ -_080128F4: .4byte BattleScript_PrintFullBox\n\ -_080128F8: .4byte gBattleCommunication\n\ -_080128FC: .4byte gSharedMem\n\ -_08012900: .4byte 0x00016060\n\ -_08012904: .4byte 0x00016094\n\ -_08012908:\n\ - ldr r4, _08012924 @ =gActiveBattler\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - ldr r0, _08012928 @ =gSharedMem + 0x1606C\n\ - adds r1, r0\n\ - movs r0, 0\n\ - bl EmitOpenBag\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08012968\n\ - .align 2, 0\n\ -_08012924: .4byte gActiveBattler\n\ -_08012928: .4byte gSharedMem + 0x1606C\n\ -_0801292C:\n\ - ldr r4, _08012964 @ =gBattleCommunication\n\ - mov r3, r8\n\ - ldrb r1, [r3]\n\ - adds r1, r4\n\ - movs r5, 0\n\ - movs r0, 0x6\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - bl GetBattlerPosition\n\ - movs r1, 0x2\n\ - eors r0, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetBattlerAtPosition\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r0, r4\n\ - strb r5, [r0]\n\ - movs r0, 0\n\ - bl Emitcmd50\n\ - mov r4, r8\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08012F90\n\ - .align 2, 0\n\ -_08012964: .4byte gBattleCommunication\n\ -_08012968:\n\ - ldr r0, _08012994 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0xA\n\ - ands r0, r1\n\ - cmp r0, 0x8\n\ - bne _080129A8\n\ - ldr r0, _08012998 @ =gBattleBufferB\n\ - ldr r4, _0801299C @ =gActiveBattler\n\ - ldrb r1, [r4]\n\ - lsls r1, 9\n\ - adds r0, 0x1\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x3\n\ - bne _080129A8\n\ - ldr r0, _080129A0 @ =BattleScript_PrintCantRunFromTrainer\n\ - bl BattleScriptExecute\n\ - ldr r1, _080129A4 @ =gBattleCommunication\n\ - ldrb r0, [r4]\n\ - adds r0, r1\n\ - b _08012BFE\n\ - .align 2, 0\n\ -_08012994: .4byte gBattleTypeFlags\n\ -_08012998: .4byte gBattleBufferB\n\ -_0801299C: .4byte gActiveBattler\n\ -_080129A0: .4byte BattleScript_PrintCantRunFromTrainer\n\ -_080129A4: .4byte gBattleCommunication\n\ -_080129A8:\n\ - bl CanRunFromBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08012A14\n\ - ldr r0, _080129F4 @ =gBattleBufferB\n\ - ldr r3, _080129F8 @ =gActiveBattler\n\ - ldrb r2, [r3]\n\ - lsls r1, r2, 9\n\ - adds r0, 0x1\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x3\n\ - bne _08012A14\n\ - ldr r1, _080129FC @ =gUnknown_02024C1C\n\ - lsls r0, r2, 2\n\ - adds r0, r1\n\ - ldr r1, _08012A00 @ =BattleScript_PrintCantEscapeFromBattle\n\ -_080129CC:\n\ - str r1, [r0]\n\ - ldr r0, _08012A04 @ =gBattleCommunication\n\ - ldrb r1, [r3]\n\ - adds r1, r0\n\ - movs r2, 0\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - ldr r1, _08012A08 @ =gSharedMem\n\ - ldrb r0, [r3]\n\ - ldr r4, _08012A0C @ =0x00016060\n\ - adds r0, r4\n\ - adds r0, r1\n\ - strb r2, [r0]\n\ - ldrb r0, [r3]\n\ - ldr r3, _08012A10 @ =0x00016094\n\ - adds r0, r3\n\ - adds r0, r1\n\ - strb r2, [r0]\n\ - b _08012F90\n\ - .align 2, 0\n\ -_080129F4: .4byte gBattleBufferB\n\ -_080129F8: .4byte gActiveBattler\n\ -_080129FC: .4byte gUnknown_02024C1C\n\ -_08012A00: .4byte BattleScript_PrintCantEscapeFromBattle\n\ -_08012A04: .4byte gBattleCommunication\n\ -_08012A08: .4byte gSharedMem\n\ -_08012A0C: .4byte 0x00016060\n\ -_08012A10: .4byte 0x00016094\n\ -_08012A14:\n\ - ldr r2, _08012A20 @ =gBattleCommunication\n\ - ldr r0, _08012A24 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, r2\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012A20: .4byte gBattleCommunication\n\ -_08012A24: .4byte gActiveBattler\n\ -_08012A28:\n\ - ldr r4, _08012A6C @ =gBattleExecBuffer\n\ - ldr r1, _08012A70 @ =gBitTable\n\ - ldr r3, _08012A74 @ =gActiveBattler\n\ - ldrb r5, [r3]\n\ - lsls r0, r5, 2\n\ - adds r0, r1\n\ - ldr r2, [r0]\n\ - lsls r0, r2, 4\n\ - movs r1, 0xF0\n\ - lsls r1, 24\n\ - orrs r0, r1\n\ - orrs r0, r2\n\ - lsls r1, r2, 8\n\ - orrs r0, r1\n\ - lsls r2, 12\n\ - orrs r0, r2\n\ - ldr r1, [r4]\n\ - ands r1, r0\n\ - mov r8, r3\n\ - cmp r1, 0\n\ - beq _08012A54\n\ - b _08012F66\n\ -_08012A54:\n\ - ldr r1, _08012A78 @ =gActionForBanks\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - adds r3, r1, 0\n\ - cmp r0, 0x9\n\ - bls _08012A62\n\ - b _08012F66\n\ -_08012A62:\n\ - lsls r0, 2\n\ - ldr r1, _08012A7C @ =_08012A80\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_08012A6C: .4byte gBattleExecBuffer\n\ -_08012A70: .4byte gBitTable\n\ -_08012A74: .4byte gActiveBattler\n\ -_08012A78: .4byte gActionForBanks\n\ -_08012A7C: .4byte _08012A80\n\ - .align 2, 0\n\ -_08012A80:\n\ - .4byte _08012AA8\n\ - .4byte _08012BB0\n\ - .4byte _08012BE8\n\ - .4byte _08012CE0\n\ - .4byte _08012D04\n\ - .4byte _08012D18\n\ - .4byte _08012D2C\n\ - .4byte _08012D5C\n\ - .4byte _08012D70\n\ - .4byte _08012D94\n\ -_08012AA8:\n\ - ldr r0, _08012AC8 @ =gBattleBufferB\n\ - mov r1, r8\n\ - ldrb r4, [r1]\n\ - lsls r1, r4, 9\n\ - adds r2, r0, 0x1\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - adds r6, r0, 0\n\ - cmp r1, 0x9\n\ - bgt _08012ACC\n\ - cmp r1, 0x3\n\ - blt _08012ACC\n\ - adds r0, r4, r3\n\ - strb r1, [r0]\n\ - b _08012F90\n\ - .align 2, 0\n\ -_08012AC8: .4byte gBattleBufferB\n\ -_08012ACC:\n\ - adds r3, r6, 0\n\ - mov r5, r8\n\ - ldrb r4, [r5]\n\ - lsls r1, r4, 9\n\ - adds r7, r3, 0x2\n\ - adds r0, r1, r7\n\ - ldrb r2, [r0]\n\ - adds r3, 0x3\n\ - mov r9, r3\n\ - add r1, r9\n\ - ldrb r0, [r1]\n\ - lsls r0, 8\n\ - orrs r2, r0\n\ - ldr r0, _08012AF4 @ =0x0000ffff\n\ - cmp r2, r0\n\ - bne _08012AFC\n\ - ldr r0, _08012AF8 @ =gBattleCommunication\n\ - adds r0, r4, r0\n\ - b _08012BFE\n\ - .align 2, 0\n\ -_08012AF4: .4byte 0x0000ffff\n\ -_08012AF8: .4byte gBattleCommunication\n\ -_08012AFC:\n\ - bl TrySetCantSelectMoveBattleScript\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08012B48\n\ - ldr r0, _08012B38 @ =gBattleCommunication\n\ - ldrb r1, [r5]\n\ - adds r1, r0\n\ - movs r2, 0\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - ldr r3, _08012B3C @ =gSharedMem\n\ - ldrb r0, [r5]\n\ - ldr r4, _08012B40 @ =0x00016060\n\ - adds r0, r4\n\ - adds r0, r3\n\ - strb r2, [r0]\n\ - ldrb r0, [r5]\n\ - lsls r0, 9\n\ - adds r1, r6, 0x1\n\ - adds r0, r1\n\ - strb r2, [r0]\n\ - ldrb r0, [r5]\n\ - ldr r1, _08012B44 @ =0x00016094\n\ - adds r0, r1\n\ - adds r0, r3\n\ - movs r1, 0x1\n\ - strb r1, [r0]\n\ - b _08012F90\n\ - .align 2, 0\n\ -_08012B38: .4byte gBattleCommunication\n\ -_08012B3C: .4byte gSharedMem\n\ -_08012B40: .4byte 0x00016060\n\ -_08012B44: .4byte 0x00016094\n\ -_08012B48:\n\ - ldr r6, _08012B98 @ =gSharedMem\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - ldr r2, _08012B9C @ =0x0001608c\n\ - adds r1, r0, r2\n\ - adds r1, r6\n\ - lsls r0, 9\n\ - adds r0, r7\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r0, _08012BA0 @ =gChosenMovesByBanks\n\ - mov r4, r8\n\ - ldrb r3, [r4]\n\ - lsls r5, r3, 1\n\ - adds r5, r0\n\ - ldr r4, _08012BA4 @ =gBattleMons\n\ - adds r2, r3, r2\n\ - adds r2, r6\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - movs r1, 0x58\n\ - muls r1, r3\n\ - adds r0, r1\n\ - adds r4, 0xC\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - strh r0, [r5]\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - ldr r2, _08012BA8 @ =0x00016010\n\ - adds r1, r0, r2\n\ - adds r1, r6\n\ - lsls r0, 9\n\ - add r0, r9\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r0, _08012BAC @ =gBattleCommunication\n\ - mov r3, r8\n\ - ldrb r1, [r3]\n\ - b _08012E3C\n\ - .align 2, 0\n\ -_08012B98: .4byte gSharedMem\n\ -_08012B9C: .4byte 0x0001608c\n\ -_08012BA0: .4byte gChosenMovesByBanks\n\ -_08012BA4: .4byte gBattleMons\n\ -_08012BA8: .4byte 0x00016010\n\ -_08012BAC: .4byte gBattleCommunication\n\ -_08012BB0:\n\ - ldr r2, _08012BD8 @ =gBattleBufferB\n\ - ldr r5, _08012BDC @ =gActiveBattler\n\ - ldrb r4, [r5]\n\ - lsls r1, r4, 9\n\ - adds r0, r2, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r3, [r0]\n\ - adds r2, 0x2\n\ - adds r1, r2\n\ - ldrb r0, [r1]\n\ - lsls r0, 8\n\ - orrs r3, r0\n\ - cmp r3, 0\n\ - bne _08012BCE\n\ - b _08012F60\n\ -_08012BCE:\n\ - ldr r0, _08012BE0 @ =gLastUsedItem\n\ - strh r3, [r0]\n\ - ldr r0, _08012BE4 @ =gBattleCommunication\n\ - ldrb r1, [r5]\n\ - b _08012E3C\n\ - .align 2, 0\n\ -_08012BD8: .4byte gBattleBufferB\n\ -_08012BDC: .4byte gActiveBattler\n\ -_08012BE0: .4byte gLastUsedItem\n\ -_08012BE4: .4byte gBattleCommunication\n\ -_08012BE8:\n\ - ldr r4, _08012C04 @ =gBattleBufferB\n\ - ldr r7, _08012C08 @ =gActiveBattler\n\ - ldrb r2, [r7]\n\ - lsls r0, r2, 9\n\ - adds r1, r4, 0x1\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - cmp r1, 0x6\n\ - bne _08012C10\n\ - ldr r0, _08012C0C @ =gBattleCommunication\n\ - adds r0, r2, r0\n\ -_08012BFE:\n\ - movs r1, 0\n\ - strb r1, [r0]\n\ - b _08012F66\n\ - .align 2, 0\n\ -_08012C04: .4byte gBattleBufferB\n\ -_08012C08: .4byte gActiveBattler\n\ -_08012C0C: .4byte gBattleCommunication\n\ -_08012C10:\n\ - ldr r0, _08012CC4 @ =gSharedMem\n\ - mov r12, r0\n\ - ldr r3, _08012CC8 @ =0x00016068\n\ - adds r0, r2, r3\n\ - add r0, r12\n\ - strb r1, [r0]\n\ - ldr r0, _08012CCC @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08012CBE\n\ - ldrb r0, [r7]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - ldr r5, _08012CD0 @ =0x0001606c\n\ - adds r1, r5\n\ - add r1, r12\n\ - ldrb r2, [r1]\n\ - movs r0, 0xF\n\ - ands r0, r2\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - lsls r2, r0, 1\n\ - adds r2, r0\n\ - adds r2, r5\n\ - add r2, r12\n\ - lsls r0, 9\n\ - adds r6, r4, 0x2\n\ - adds r0, r6\n\ - ldrb r1, [r0]\n\ - movs r3, 0xF0\n\ - adds r0, r3, 0\n\ - ands r0, r1\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldrb r0, [r7]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - ldr r2, _08012CD4 @ =0x0001606d\n\ - adds r1, r2\n\ - add r1, r12\n\ - lsls r0, 9\n\ - adds r4, 0x3\n\ - mov r8, r4\n\ - add r0, r8\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - movs r4, 0x2\n\ - eors r0, r4\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - adds r1, r5\n\ - add r1, r12\n\ - ldrb r2, [r1]\n\ - adds r0, r3, 0\n\ - ands r0, r2\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - eors r0, r4\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - adds r1, r5\n\ - add r1, r12\n\ - ldrb r0, [r7]\n\ - lsls r0, 9\n\ - adds r0, r6\n\ - ldrb r0, [r0]\n\ - ands r3, r0\n\ - lsrs r3, 4\n\ - ldrb r0, [r1]\n\ - orrs r3, r0\n\ - strb r3, [r1]\n\ - ldrb r0, [r7]\n\ - eors r4, r0\n\ - lsls r1, r4, 1\n\ - adds r1, r4\n\ - ldr r3, _08012CD8 @ =0x0001606e\n\ - adds r1, r3\n\ - add r1, r12\n\ - ldrb r0, [r7]\n\ - lsls r0, 9\n\ - add r0, r8\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ -_08012CBE:\n\ - ldr r0, _08012CDC @ =gBattleCommunication\n\ - ldrb r1, [r7]\n\ - b _08012E3C\n\ - .align 2, 0\n\ -_08012CC4: .4byte gSharedMem\n\ -_08012CC8: .4byte 0x00016068\n\ -_08012CCC: .4byte gBattleTypeFlags\n\ -_08012CD0: .4byte 0x0001606c\n\ -_08012CD4: .4byte 0x0001606d\n\ -_08012CD8: .4byte 0x0001606e\n\ -_08012CDC: .4byte gBattleCommunication\n\ -_08012CE0:\n\ - ldr r2, _08012CF8 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 8\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r2, _08012CFC @ =gBattleCommunication\n\ - ldr r0, _08012D00 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, r2\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012CF8: .4byte gHitMarker\n\ -_08012CFC: .4byte gBattleCommunication\n\ -_08012D00: .4byte gActiveBattler\n\ -_08012D04:\n\ - ldr r2, _08012D10 @ =gBattleCommunication\n\ - ldr r0, _08012D14 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, r2\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012D10: .4byte gBattleCommunication\n\ -_08012D14: .4byte gActiveBattler\n\ -_08012D18:\n\ - ldr r2, _08012D24 @ =gBattleCommunication\n\ - ldr r0, _08012D28 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, r2\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012D24: .4byte gBattleCommunication\n\ -_08012D28: .4byte gActiveBattler\n\ -_08012D2C:\n\ - ldr r2, _08012D50 @ =gBattleBufferB\n\ - ldr r0, _08012D54 @ =gActiveBattler\n\ - ldrb r4, [r0]\n\ - lsls r1, r4, 9\n\ - adds r0, r2, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r3, [r0]\n\ - adds r2, 0x2\n\ - adds r1, r2\n\ - ldrb r0, [r1]\n\ - lsls r0, 8\n\ - orrs r3, r0\n\ - cmp r3, 0\n\ - bne _08012D4A\n\ - b _08012F60\n\ -_08012D4A:\n\ - ldr r1, _08012D58 @ =gBattleCommunication\n\ - adds r1, r4, r1\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012D50: .4byte gBattleBufferB\n\ -_08012D54: .4byte gActiveBattler\n\ -_08012D58: .4byte gBattleCommunication\n\ -_08012D5C:\n\ - ldr r2, _08012D68 @ =gBattleCommunication\n\ - ldr r0, _08012D6C @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, r2\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012D68: .4byte gBattleCommunication\n\ -_08012D6C: .4byte gActiveBattler\n\ -_08012D70:\n\ - ldr r2, _08012D88 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 8\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r2, _08012D8C @ =gBattleCommunication\n\ - ldr r0, _08012D90 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, r2\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012D88: .4byte gHitMarker\n\ -_08012D8C: .4byte gBattleCommunication\n\ -_08012D90: .4byte gActiveBattler\n\ -_08012D94:\n\ - ldr r2, _08012DA0 @ =gBattleCommunication\n\ - ldr r0, _08012DA4 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, r2\n\ - b _08012E3E\n\ - .align 2, 0\n\ -_08012DA0: .4byte gBattleCommunication\n\ -_08012DA4: .4byte gActiveBattler\n\ -_08012DA8:\n\ - ldr r3, _08012E10 @ =gBattleExecBuffer\n\ - ldr r4, _08012E14 @ =gBitTable\n\ - ldr r0, _08012E18 @ =gActiveBattler\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldr r2, [r0]\n\ - lsls r1, r2, 4\n\ - movs r0, 0xF0\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - orrs r1, r2\n\ - lsls r0, r2, 8\n\ - orrs r1, r0\n\ - lsls r2, 12\n\ - orrs r1, r2\n\ - ldr r0, [r3]\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08012DD2\n\ - b _08012F66\n\ -_08012DD2:\n\ - ldr r0, _08012E1C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x41\n\ - ands r0, r1\n\ - cmp r0, 0x1\n\ - bne _08012E06\n\ - movs r1, 0x2\n\ - movs r0, 0x2\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - bne _08012E06\n\ - adds r0, r5, 0\n\ - eors r0, r1\n\ - bl GetBattlerAtPosition\n\ - ldr r1, _08012E20 @ =gSharedMem\n\ - ldr r2, _08012E24 @ =0x000160a6\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 22\n\ - adds r0, r4\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _08012E28\n\ -_08012E06:\n\ - movs r0, 0\n\ - movs r1, 0\n\ - bl EmitLinkStandbyMsg\n\ - b _08012E30\n\ - .align 2, 0\n\ -_08012E10: .4byte gBattleExecBuffer\n\ -_08012E14: .4byte gBitTable\n\ -_08012E18: .4byte gActiveBattler\n\ -_08012E1C: .4byte gBattleTypeFlags\n\ -_08012E20: .4byte gSharedMem\n\ -_08012E24: .4byte 0x000160a6\n\ -_08012E28:\n\ - movs r0, 0\n\ - movs r1, 0x1\n\ - bl EmitLinkStandbyMsg\n\ -_08012E30:\n\ - ldr r4, _08012E48 @ =gActiveBattler\n\ -_08012E32:\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, _08012E4C @ =gBattleCommunication\n\ - ldrb r1, [r4]\n\ -_08012E3C:\n\ - adds r1, r0\n\ -_08012E3E:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _08012F66\n\ - .align 2, 0\n\ -_08012E48: .4byte gActiveBattler\n\ -_08012E4C: .4byte gBattleCommunication\n\ -_08012E50:\n\ - ldr r3, _08012E84 @ =gBattleExecBuffer\n\ - ldr r1, _08012E88 @ =gBitTable\n\ - ldr r0, _08012E8C @ =gActiveBattler\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r2, [r0]\n\ - lsls r1, r2, 4\n\ - movs r0, 0xF0\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - orrs r1, r2\n\ - lsls r0, r2, 8\n\ - orrs r1, r0\n\ - lsls r2, 12\n\ - orrs r1, r2\n\ - ldr r0, [r3]\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08012F66\n\ - ldr r1, _08012E90 @ =gBattleCommunication\n\ - ldrb r0, [r1, 0x4]\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x4]\n\ - b _08012F66\n\ - .align 2, 0\n\ -_08012E84: .4byte gBattleExecBuffer\n\ -_08012E88: .4byte gBitTable\n\ -_08012E8C: .4byte gActiveBattler\n\ -_08012E90: .4byte gBattleCommunication\n\ -_08012E94:\n\ - ldr r2, _08012EB8 @ =gSharedMem\n\ - ldr r5, _08012EBC @ =gActiveBattler\n\ - ldrb r1, [r5]\n\ - ldr r3, _08012EC0 @ =0x00016060\n\ - adds r0, r1, r3\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08012ECC\n\ - ldr r0, _08012EC4 @ =gBattleCommunication\n\ - adds r0, r1, r0\n\ - ldr r4, _08012EC8 @ =0x00016094\n\ - adds r1, r4\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - strb r1, [r0]\n\ - b _08012F66\n\ - .align 2, 0\n\ -_08012EB8: .4byte gSharedMem\n\ -_08012EBC: .4byte gActiveBattler\n\ -_08012EC0: .4byte 0x00016060\n\ -_08012EC4: .4byte gBattleCommunication\n\ -_08012EC8: .4byte 0x00016094\n\ -_08012ECC:\n\ - ldr r0, _08012F20 @ =gBankAttacker\n\ - strb r1, [r0]\n\ - ldr r7, _08012F24 @ =gBattlescriptCurrInstr\n\ - ldr r6, _08012F28 @ =gUnknown_02024C1C\n\ - ldrb r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r4, [r0]\n\ - str r4, [r7]\n\ - ldr r3, _08012F2C @ =gBattleExecBuffer\n\ - ldr r1, _08012F30 @ =gBitTable\n\ - ldrb r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r2, [r0]\n\ - lsls r1, r2, 4\n\ - movs r0, 0xF0\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - orrs r1, r2\n\ - lsls r0, r2, 8\n\ - orrs r1, r0\n\ - lsls r2, 12\n\ - orrs r1, r2\n\ - ldr r0, [r3]\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08012F12\n\ - ldr r0, _08012F34 @ =gBattleScriptingCommandsTable\n\ - ldrb r1, [r4]\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldr r0, [r1]\n\ - bl _call_via_r0\n\ -_08012F12:\n\ - ldrb r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r1, [r7]\n\ - str r1, [r0]\n\ - b _08012F66\n\ - .align 2, 0\n\ -_08012F20: .4byte gBankAttacker\n\ -_08012F24: .4byte gBattlescriptCurrInstr\n\ -_08012F28: .4byte gUnknown_02024C1C\n\ -_08012F2C: .4byte gBattleExecBuffer\n\ -_08012F30: .4byte gBitTable\n\ -_08012F34: .4byte gBattleScriptingCommandsTable\n\ -_08012F38:\n\ - ldr r3, _08012FA0 @ =gBattleExecBuffer\n\ - ldr r1, _08012FA4 @ =gBitTable\n\ - ldr r0, _08012FA8 @ =gActiveBattler\n\ - ldrb r4, [r0]\n\ - lsls r0, r4, 2\n\ - adds r0, r1\n\ - ldr r2, [r0]\n\ - lsls r0, r2, 4\n\ - movs r1, 0xF0\n\ - lsls r1, 24\n\ - orrs r0, r1\n\ - orrs r0, r2\n\ - lsls r1, r2, 8\n\ - orrs r0, r1\n\ - lsls r2, 12\n\ - orrs r0, r2\n\ - ldr r3, [r3]\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - bne _08012F66\n\ -_08012F60:\n\ - ldr r0, _08012FAC @ =gBattleCommunication\n\ - adds r0, r4, r0\n\ - strb r3, [r0]\n\ -_08012F66:\n\ - ldr r0, _08012FA8 @ =gActiveBattler\n\ - ldrb r1, [r0]\n\ - adds r1, 0x1\n\ - strb r1, [r0]\n\ - ldr r0, _08012FB0 @ =gBattlersCount\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ -_08012F74:\n\ - adds r2, r0, 0\n\ - ldrb r0, [r2]\n\ - cmp r1, r0\n\ - bcs _08012F80\n\ - bl _0801234C\n\ -_08012F80:\n\ - ldr r0, _08012FAC @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x4]\n\ - ldrb r2, [r2]\n\ - cmp r0, r2\n\ - bne _08012F90\n\ - ldr r1, _08012FB4 @ =gBattleMainFunc\n\ - ldr r0, _08012FB8 @ =SetActionsAndBanksTurnOrder\n\ - str r0, [r1]\n\ -_08012F90:\n\ - add sp, 0x1C\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\ -_08012FA0: .4byte gBattleExecBuffer\n\ -_08012FA4: .4byte gBitTable\n\ -_08012FA8: .4byte gActiveBattler\n\ -_08012FAC: .4byte gBattleCommunication\n\ -_08012FB0: .4byte gBattlersCount\n\ -_08012FB4: .4byte gBattleMainFunc\n\ -_08012FB8: .4byte SetActionsAndBanksTurnOrder\n\ - .syntax divided\n"); + + // Check if everyone chose actions. + if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount) + { + gBattleMainFunc = SetActionsAndBanksTurnOrder; + } } void SwapTurnOrder(u8 a, u8 b) @@ -6739,7 +5569,6 @@ void HandleAction_Switch(void) gBattleResults.unk2++; } -#ifdef NONMATCHING void HandleAction_UseItem(void) { gBankAttacker = gBankTarget = gBanksByTurnOrder[gCurrentTurnActionNumber]; @@ -6779,7 +5608,7 @@ void HandleAction_UseItem(void) { while (!(ewram160DA(gBankAttacker) & 1)) { - ewram160DA(gBankAttacker) /= 2; + ewram160DA(gBankAttacker) >>= 1; gBattleCommunication[MULTISTRING_CHOOSER]++; } } @@ -6797,7 +5626,7 @@ void HandleAction_UseItem(void) while (!(ewram160DA(gBankAttacker) & 1)) { - ewram160DA(gBankAttacker) /= 2; + ewram160DA(gBankAttacker) >>= 1; gBattleTextBuff1[2]++; } @@ -6817,376 +5646,6 @@ void HandleAction_UseItem(void) } gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; } -#else -NAKED -void HandleAction_UseItem(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - ldr r4, _08014804 @ =gBankAttacker\n\ - ldr r2, _08014808 @ =gBankTarget\n\ - ldr r1, _0801480C @ =gBanksByTurnOrder\n\ - ldr r0, _08014810 @ =gCurrentTurnActionNumber\n\ - ldrb r0, [r0]\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - strb r0, [r4]\n\ - ldr r0, _08014814 @ =gBattle_BG0_X\n\ - movs r2, 0\n\ - strh r2, [r0]\n\ - ldr r0, _08014818 @ =gBattle_BG0_Y\n\ - strh r2, [r0]\n\ - ldr r3, _0801481C @ =gDisableStructs\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 3\n\ - subs r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - strb r2, [r0, 0x10]\n\ - ldr r5, _08014820 @ =gLastUsedItem\n\ - ldr r2, _08014824 @ =gBattleBufferB\n\ - ldrb r1, [r4]\n\ - lsls r1, 9\n\ - adds r0, r2, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r3, [r0]\n\ - adds r2, 0x2\n\ - adds r1, r2\n\ - ldrb r0, [r1]\n\ - lsls r0, 8\n\ - orrs r3, r0\n\ - strh r3, [r5]\n\ - cmp r3, 0xC\n\ - bhi _08014830\n\ - ldr r2, _08014828 @ =gBattlescriptCurrInstr\n\ - ldr r1, _0801482C @ =gBattlescriptsForBallThrow\n\ - ldrh r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - str r0, [r2]\n\ - b _08014A8C\n\ - .align 2, 0\n\ -_08014804: .4byte gBankAttacker\n\ -_08014808: .4byte gBankTarget\n\ -_0801480C: .4byte gBanksByTurnOrder\n\ -_08014810: .4byte gCurrentTurnActionNumber\n\ -_08014814: .4byte gBattle_BG0_X\n\ -_08014818: .4byte gBattle_BG0_Y\n\ -_0801481C: .4byte gDisableStructs\n\ -_08014820: .4byte gLastUsedItem\n\ -_08014824: .4byte gBattleBufferB\n\ -_08014828: .4byte gBattlescriptCurrInstr\n\ -_0801482C: .4byte gBattlescriptsForBallThrow\n\ -_08014830:\n\ - adds r0, r3, 0\n\ - subs r0, 0x50\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bhi _0801484C\n\ - ldr r0, _08014844 @ =gBattlescriptCurrInstr\n\ - ldr r1, _08014848 @ =gBattlescriptsForRunningByItem\n\ - b _0801485C\n\ - .align 2, 0\n\ -_08014844: .4byte gBattlescriptCurrInstr\n\ -_08014848: .4byte gBattlescriptsForRunningByItem\n\ -_0801484C:\n\ - ldrb r0, [r4]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0801486C\n\ - ldr r0, _08014864 @ =gBattlescriptCurrInstr\n\ - ldr r1, _08014868 @ =gBattlescriptsForUsingItem\n\ -_0801485C:\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ - b _08014A8C\n\ - .align 2, 0\n\ -_08014864: .4byte gBattlescriptCurrInstr\n\ -_08014868: .4byte gBattlescriptsForUsingItem\n\ -_0801486C:\n\ - ldr r2, _080148A0 @ =gSharedMem\n\ - ldrb r0, [r4]\n\ - ldr r3, _080148A4 @ =0x00016003\n\ - adds r1, r2, r3\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 25\n\ - ldr r1, _080148A8 @ =0x000160d8\n\ - adds r0, r1\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ - mov r8, r4\n\ - ldr r3, _080148AC @ =gBattlescriptCurrInstr\n\ - mov r9, r3\n\ - ldr r1, _080148B0 @ =gBattlescriptsForUsingItem\n\ - mov r10, r1\n\ - adds r7, r2, 0\n\ - cmp r0, 0x4\n\ - bls _08014896\n\ - b _08014A74\n\ -_08014896:\n\ - lsls r0, 2\n\ - ldr r1, _080148B4 @ =_080148B8\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080148A0: .4byte gSharedMem\n\ -_080148A4: .4byte 0x00016003\n\ -_080148A8: .4byte 0x000160d8\n\ -_080148AC: .4byte gBattlescriptCurrInstr\n\ -_080148B0: .4byte gBattlescriptsForUsingItem\n\ -_080148B4: .4byte _080148B8\n\ - .align 2, 0\n\ -_080148B8:\n\ - .4byte _08014A74\n\ - .4byte _08014A74\n\ - .4byte _080148CC\n\ - .4byte _08014958\n\ - .4byte _08014A30\n\ -_080148CC:\n\ - ldr r2, _08014904 @ =gBattleCommunication\n\ - movs r0, 0\n\ - strb r0, [r2, 0x5]\n\ - ldr r1, _08014908 @ =gBankAttacker\n\ - ldrb r0, [r1]\n\ - lsrs r0, 1\n\ - ldr r6, _0801490C @ =0x000160da\n\ - adds r0, r6\n\ - adds r0, r7\n\ - ldrb r3, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r3\n\ - mov r8, r1\n\ - cmp r0, 0\n\ - beq _08014918\n\ - movs r0, 0x3E\n\ - ands r0, r3\n\ - ldr r3, _08014910 @ =gBattlescriptCurrInstr\n\ - mov r9, r3\n\ - ldr r1, _08014914 @ =gBattlescriptsForUsingItem\n\ - mov r10, r1\n\ - cmp r0, 0\n\ - bne _080148FC\n\ - b _08014A74\n\ -_080148FC:\n\ - movs r0, 0x5\n\ - strb r0, [r2, 0x5]\n\ - b _08014A74\n\ - .align 2, 0\n\ -_08014904: .4byte gBattleCommunication\n\ -_08014908: .4byte gBankAttacker\n\ -_0801490C: .4byte 0x000160da\n\ -_08014910: .4byte gBattlescriptCurrInstr\n\ -_08014914: .4byte gBattlescriptsForUsingItem\n\ -_08014918:\n\ - ldr r3, _08014950 @ =gBattlescriptCurrInstr\n\ - mov r9, r3\n\ - ldr r0, _08014954 @ =gBattlescriptsForUsingItem\n\ - mov r10, r0\n\ - adds r5, r7, 0\n\ - mov r4, r8\n\ - adds r3, r6, 0\n\ -_08014926:\n\ - ldrb r0, [r4]\n\ - lsrs r0, 1\n\ - adds r0, r3\n\ - adds r0, r5\n\ - ldrb r1, [r0]\n\ - lsrs r1, 1\n\ - strb r1, [r0]\n\ - ldrb r0, [r2, 0x5]\n\ - adds r0, 0x1\n\ - strb r0, [r2, 0x5]\n\ - ldrb r0, [r4]\n\ - lsrs r0, 1\n\ - adds r0, r3\n\ - adds r0, r5\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08014926\n\ - b _08014A74\n\ - .align 2, 0\n\ -_08014950: .4byte gBattlescriptCurrInstr\n\ -_08014954: .4byte gBattlescriptsForUsingItem\n\ -_08014958:\n\ - ldr r3, _0801498C @ =gBattleCommunication\n\ - movs r0, 0x4\n\ - strb r0, [r3, 0x5]\n\ - ldr r2, _08014990 @ =gBankAttacker\n\ - ldrb r0, [r2]\n\ - lsrs r0, 1\n\ - ldr r1, _08014994 @ =0x000160da\n\ - mov r12, r1\n\ - add r0, r12\n\ - adds r6, r0, r7\n\ - ldrb r1, [r6]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - mov r8, r2\n\ - cmp r5, 0\n\ - beq _080149A0\n\ - movs r0, 0x5\n\ - strb r0, [r3, 0x5]\n\ - ldr r2, _08014998 @ =gBattlescriptCurrInstr\n\ - mov r9, r2\n\ - ldr r3, _0801499C @ =gBattlescriptsForUsingItem\n\ - mov r10, r3\n\ - b _08014A74\n\ - .align 2, 0\n\ -_0801498C: .4byte gBattleCommunication\n\ -_08014990: .4byte gBankAttacker\n\ -_08014994: .4byte 0x000160da\n\ -_08014998: .4byte gBattlescriptCurrInstr\n\ -_0801499C: .4byte gBattlescriptsForUsingItem\n\ -_080149A0:\n\ - ldr r3, _08014A18 @ =gBattleTextBuff1\n\ - movs r4, 0xFD\n\ - strb r4, [r3]\n\ - movs r0, 0x5\n\ - strb r0, [r3, 0x1]\n\ - movs r2, 0x1\n\ - strb r2, [r3, 0x2]\n\ - movs r0, 0xFF\n\ - strb r0, [r3, 0x3]\n\ - ldr r1, _08014A1C @ =gBattleTextBuff2\n\ - strb r4, [r1]\n\ - strb r5, [r1, 0x1]\n\ - movs r0, 0xD2\n\ - strb r0, [r1, 0x2]\n\ - strb r5, [r1, 0x3]\n\ - subs r0, 0xD3\n\ - strb r0, [r1, 0x4]\n\ - ldrb r0, [r6]\n\ - ands r2, r0\n\ - ldr r0, _08014A20 @ =gBattlescriptCurrInstr\n\ - mov r9, r0\n\ - ldr r1, _08014A24 @ =gBattlescriptsForUsingItem\n\ - mov r10, r1\n\ - adds r6, r3, 0\n\ - cmp r2, 0\n\ - bne _08014A02\n\ - adds r3, r7, 0\n\ - mov r5, r8\n\ - mov r4, r12\n\ - adds r2, r6, 0\n\ -_080149DC:\n\ - ldrb r0, [r5]\n\ - lsrs r0, 1\n\ - adds r0, r4\n\ - adds r0, r3\n\ - ldrb r1, [r0]\n\ - lsrs r1, 1\n\ - strb r1, [r0]\n\ - ldrb r0, [r2, 0x2]\n\ - adds r0, 0x1\n\ - strb r0, [r2, 0x2]\n\ - ldrb r0, [r5]\n\ - lsrs r0, 1\n\ - adds r0, r4\n\ - adds r0, r3\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080149DC\n\ -_08014A02:\n\ - ldrb r0, [r6, 0x2]\n\ - adds r0, 0xE\n\ - ldr r2, _08014A28 @ =0x000160a4\n\ - adds r1, r7, r2\n\ - movs r2, 0\n\ - strb r0, [r1]\n\ - ldr r3, _08014A2C @ =0x000160a5\n\ - adds r0, r7, r3\n\ - strb r2, [r0]\n\ - b _08014A74\n\ - .align 2, 0\n\ -_08014A18: .4byte gBattleTextBuff1\n\ -_08014A1C: .4byte gBattleTextBuff2\n\ -_08014A20: .4byte gBattlescriptCurrInstr\n\ -_08014A24: .4byte gBattlescriptsForUsingItem\n\ -_08014A28: .4byte 0x000160a4\n\ -_08014A2C: .4byte 0x000160a5\n\ -_08014A30:\n\ - ldr r0, _08014A50 @ =gBattleTypeFlags\n\ - ldrh r0, [r0]\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _08014A64\n\ - ldr r1, _08014A54 @ =gBattleCommunication\n\ - movs r0, 0x2\n\ - strb r0, [r1, 0x5]\n\ - ldr r0, _08014A58 @ =gBankAttacker\n\ - mov r8, r0\n\ - ldr r1, _08014A5C @ =gBattlescriptCurrInstr\n\ - mov r9, r1\n\ - ldr r2, _08014A60 @ =gBattlescriptsForUsingItem\n\ - mov r10, r2\n\ - b _08014A74\n\ - .align 2, 0\n\ -_08014A50: .4byte gBattleTypeFlags\n\ -_08014A54: .4byte gBattleCommunication\n\ -_08014A58: .4byte gBankAttacker\n\ -_08014A5C: .4byte gBattlescriptCurrInstr\n\ -_08014A60: .4byte gBattlescriptsForUsingItem\n\ -_08014A64:\n\ - ldr r0, _08014AA0 @ =gBattleCommunication\n\ - strb r1, [r0, 0x5]\n\ - ldr r3, _08014AA4 @ =gBankAttacker\n\ - mov r8, r3\n\ - ldr r0, _08014AA8 @ =gBattlescriptCurrInstr\n\ - mov r9, r0\n\ - ldr r1, _08014AAC @ =gBattlescriptsForUsingItem\n\ - mov r10, r1\n\ -_08014A74:\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - lsrs r0, 1\n\ - ldr r3, _08014AB0 @ =0x000160d8\n\ - adds r0, r3\n\ - adds r0, r7\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - add r0, r10\n\ - ldr r0, [r0]\n\ - mov r1, r9\n\ - str r0, [r1]\n\ -_08014A8C:\n\ - movs r0, 0xA\n\ - ldr r2, _08014AB4 @ =gCurrentActionFuncId\n\ - strb r0, [r2]\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\ -_08014AA0: .4byte gBattleCommunication\n\ -_08014AA4: .4byte gBankAttacker\n\ -_08014AA8: .4byte gBattlescriptCurrInstr\n\ -_08014AAC: .4byte gBattlescriptsForUsingItem\n\ -_08014AB0: .4byte 0x000160d8\n\ -_08014AB4: .4byte gCurrentActionFuncId\n\ - .syntax divided\n"); -} -#endif // NONMATCHING bool8 TryRunFromBattle(u8 bank) { diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index 7cb39acb7..3d1770239 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -27,7 +27,7 @@ extern u8 gUnknown_02023A14_50; extern const u8* gBattlescriptCurrInstr; extern u8 gActiveBattler; extern u8 gBattleBufferB[4][0x200]; -extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to +extern u8* gSelectionBattleScripts[4]; //battlescript location when you try to choose a move you're not allowed to extern u16 gLastUsedMove[4]; extern struct BattlePokemon gBattleMons[4]; extern struct BattleEnigmaBerry gEnigmaBerries[4]; @@ -481,25 +481,25 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move { gBattleStruct->scriptingActive = gActiveBattler; gCurrentMove = move; - gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionDisabledMove; + gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionDisabledMove; limitations++; } if (move == gLastUsedMove[gActiveBattler] && move != MOVE_STRUGGLE && gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT) { CancelMultiTurnMoves(gActiveBattler); - gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionTormented; + gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionTormented; limitations++; } if (gDisableStructs[gActiveBattler].tauntTimer1 && gBattleMoves[move].power == 0) { gCurrentMove = move; - gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionTaunted; + gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionTaunted; limitations++; } if (IsImprisoned(gActiveBattler, move)) { gCurrentMove = move; - gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionImprisoned; + gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionImprisoned; limitations++; } if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY) @@ -511,12 +511,12 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move { gCurrentMove = *choicedMove; gLastUsedItem = gBattleMons[gActiveBattler].item; - gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionChoiceBanded; + gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionChoiceBanded; limitations++; } if (gBattleMons[gActiveBattler].pp[gBattleBufferB[gActiveBattler][2]] == 0) { - gUnknown_02024C1C[gActiveBattler] = BattleScript_MoveSelectionNoPP; + gSelectionBattleScripts[gActiveBattler] = BattleScript_MoveSelectionNoPP; limitations++; } return limitations; @@ -568,7 +568,7 @@ bool8 AreAllMovesUnusable(void) if (unusable == 0xF) //all moves are unusable { gProtectStructs[gActiveBattler].onlyStruggle = 1; - gUnknown_02024C1C[gActiveBattler] = BattleScript_NoMovesLeft; + gSelectionBattleScripts[gActiveBattler] = BattleScript_NoMovesLeft; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) gBattleBufferB[gActiveBattler][3] = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) ^ 1) | (Random() & 2)); else |