diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-01-07 14:59:16 -0800 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-01-07 20:07:36 -0800 |
commit | 82ab732d673946af609f896dc51639030eb1bd19 (patch) | |
tree | 573e62362edb0557353160c02909c1efddd28b41 | |
parent | c0e0004ffabfcb9bc9827bdce28e3c18a6e52922 (diff) |
Finish decompiling battle_2
29 files changed, 1534 insertions, 2838 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s index f985f570b..8a1bd902f 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -5,2625 +5,6 @@ .text - thumb_func_start sub_8013B64 -sub_8013B64: @ 8013B64 - push {r4,lr} - ldr r1, _08013B9C @ =gCurrentActionFuncId - movs r0, 0 - strb r0, [r1] - ldr r0, _08013BA0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08013BB8 - ldr r1, _08013BA4 @ =gBattleTextBuff1 - ldr r4, _08013BA8 @ =gBattleOutcome - ldrb r0, [r4] - strb r0, [r1] - movs r0, 0 - bl GetBankByIdentity - ldr r1, _08013BAC @ =gBankAttacker - strb r0, [r1] - ldr r1, _08013BB0 @ =gBattlescriptCurrInstr - ldr r0, _08013BB4 @ =gUnknown_081D8E02 - str r0, [r1] - ldrb r1, [r4] - movs r0, 0x7F - ands r0, r1 - strb r0, [r4] - b _08013BBE - .align 2, 0 -_08013B9C: .4byte gCurrentActionFuncId -_08013BA0: .4byte gBattleTypeFlags -_08013BA4: .4byte gBattleTextBuff1 -_08013BA8: .4byte gBattleOutcome -_08013BAC: .4byte gBankAttacker -_08013BB0: .4byte gBattlescriptCurrInstr -_08013BB4: .4byte gUnknown_081D8E02 -_08013BB8: - ldr r1, _08013BCC @ =gBattlescriptCurrInstr - ldr r0, _08013BD0 @ =BattleScript_LocalBattleLost - str r0, [r1] -_08013BBE: - ldr r1, _08013BD4 @ =gBattleMainFunc - ldr r0, _08013BD8 @ =sub_8013C9C - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08013BCC: .4byte gBattlescriptCurrInstr -_08013BD0: .4byte BattleScript_LocalBattleLost -_08013BD4: .4byte gBattleMainFunc -_08013BD8: .4byte sub_8013C9C - thumb_func_end sub_8013B64 - - thumb_func_start sub_8013BDC -sub_8013BDC: @ 8013BDC - push {lr} - ldr r1, _08013C04 @ =gCurrentActionFuncId - movs r0, 0 - strb r0, [r1] - ldr r1, _08013C08 @ =gProtectStructs - ldr r0, _08013C0C @ =gBankAttacker - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0, 0x1] - lsls r0, 27 - lsrs r0, 30 - cmp r0, 0x1 - beq _08013C18 - cmp r0, 0x2 - beq _08013C28 - ldr r1, _08013C10 @ =gBattlescriptCurrInstr - ldr r0, _08013C14 @ =BattleScript_GotAwaySafely - b _08013C2C - .align 2, 0 -_08013C04: .4byte gCurrentActionFuncId -_08013C08: .4byte gProtectStructs -_08013C0C: .4byte gBankAttacker -_08013C10: .4byte gBattlescriptCurrInstr -_08013C14: .4byte BattleScript_GotAwaySafely -_08013C18: - ldr r1, _08013C20 @ =gBattlescriptCurrInstr - ldr r0, _08013C24 @ =BattleScript_SmokeBallEscape - b _08013C2C - .align 2, 0 -_08013C20: .4byte gBattlescriptCurrInstr -_08013C24: .4byte BattleScript_SmokeBallEscape -_08013C28: - ldr r1, _08013C38 @ =gBattlescriptCurrInstr - ldr r0, _08013C3C @ =BattleScript_RanAwayUsingMonAbility -_08013C2C: - str r0, [r1] - ldr r1, _08013C40 @ =gBattleMainFunc - ldr r0, _08013C44 @ =sub_8013C9C - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08013C38: .4byte gBattlescriptCurrInstr -_08013C3C: .4byte BattleScript_RanAwayUsingMonAbility -_08013C40: .4byte gBattleMainFunc -_08013C44: .4byte sub_8013C9C - thumb_func_end sub_8013BDC - - thumb_func_start sub_8013C48 -sub_8013C48: @ 8013C48 - ldr r1, _08013C7C @ =gCurrentActionFuncId - movs r0, 0 - strb r0, [r1] - ldr r1, _08013C80 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - ldr r2, _08013C84 @ =gBankAttacker - ldrb r0, [r2] - strb r0, [r1, 0x2] - ldr r3, _08013C88 @ =gBattlePartyID - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _08013C8C @ =gBattlescriptCurrInstr - ldr r0, _08013C90 @ =BattleScript_WildMonFled - str r0, [r1] - ldr r1, _08013C94 @ =gBattleMainFunc - ldr r0, _08013C98 @ =sub_8013C9C - str r0, [r1] - bx lr - .align 2, 0 -_08013C7C: .4byte gCurrentActionFuncId -_08013C80: .4byte gBattleTextBuff1 -_08013C84: .4byte gBankAttacker -_08013C88: .4byte gBattlePartyID -_08013C8C: .4byte gBattlescriptCurrInstr -_08013C90: .4byte BattleScript_WildMonFled -_08013C94: .4byte gBattleMainFunc -_08013C98: .4byte sub_8013C9C - thumb_func_end sub_8013C48 - - thumb_func_start sub_8013C9C -sub_8013C9C: @ 8013C9C - push {r4-r7,lr} - ldr r0, _08013D00 @ =gCurrentActionFuncId - ldrb r0, [r0] - subs r0, 0xB - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08013D7C - ldr r0, _08013D04 @ =gBattleTypeFlags - ldrh r0, [r0] - ldr r1, _08013D08 @ =0x00000b92 - ands r1, r0 - cmp r1, 0 - bne _08013D4C - ldr r2, _08013D0C @ =gActiveBank - strb r1, [r2] - ldr r0, _08013D10 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r1, r0 - bcs _08013D48 - adds r4, r2, 0 - ldr r6, _08013D14 @ =gBattleMons - movs r5, 0x58 - adds r7, r6, 0 - adds r7, 0x30 -_08013CCE: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08013D36 - ldr r2, _08013D18 @ =gBattleResults - ldrh r0, [r2, 0x6] - cmp r0, 0 - bne _08013D1C - ldrb r0, [r4] - muls r0, r5 - adds r0, r6 - ldrh r0, [r0] - strh r0, [r2, 0x6] - ldrb r0, [r4] - adds r1, r0, 0 - muls r1, r5 - adds r1, r7 - adds r0, r2, 0 - adds r0, 0x8 - bl StringCopy - b _08013D36 - .align 2, 0 -_08013D00: .4byte gCurrentActionFuncId -_08013D04: .4byte gBattleTypeFlags -_08013D08: .4byte 0x00000b92 -_08013D0C: .4byte gActiveBank -_08013D10: .4byte gNoOfAllBanks -_08013D14: .4byte gBattleMons -_08013D18: .4byte gBattleResults -_08013D1C: - ldrb r0, [r4] - muls r0, r5 - adds r0, r6 - ldrh r0, [r0] - strh r0, [r2, 0x26] - ldrb r0, [r4] - adds r1, r0, 0 - muls r1, r5 - adds r1, r7 - adds r0, r2, 0 - adds r0, 0x14 - bl StringCopy -_08013D36: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08013D68 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08013CCE -_08013D48: - bl sub_80BDEC8 -_08013D4C: - movs r0, 0x3 - bl BeginFastPaletteFade - movs r0, 0x5 - bl FadeOutMapMusic - ldr r1, _08013D6C @ =gBattleMainFunc - ldr r0, _08013D70 @ =sub_8013DA8 - str r0, [r1] - ldr r1, _08013D74 @ =gCB2_AfterEvolution - ldr r0, _08013D78 @ =sub_800F808 - str r0, [r1] - b _08013D96 - .align 2, 0 -_08013D68: .4byte gNoOfAllBanks -_08013D6C: .4byte gBattleMainFunc -_08013D70: .4byte sub_8013DA8 -_08013D74: .4byte gCB2_AfterEvolution -_08013D78: .4byte sub_800F808 -_08013D7C: - ldr r0, _08013D9C @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08013D96 - ldr r1, _08013DA0 @ =gBattleScriptingCommandsTable - ldr r0, _08013DA4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08013D96: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08013D9C: .4byte gBattleExecBuffer -_08013DA0: .4byte gBattleScriptingCommandsTable -_08013DA4: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8013C9C - - thumb_func_start sub_8013DA8 -sub_8013DA8: @ 8013DA8 - push {lr} - ldr r0, _08013DD0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08013DEA - bl ResetSpriteData - ldr r0, _08013DD4 @ =gLeveledUpInBattle - ldrb r0, [r0] - cmp r0, 0 - beq _08013DCA - ldr r0, _08013DD8 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x1 - beq _08013DE4 -_08013DCA: - ldr r1, _08013DDC @ =gBattleMainFunc - ldr r0, _08013DE0 @ =c4_overworld - b _08013DE8 - .align 2, 0 -_08013DD0: .4byte gPaletteFade -_08013DD4: .4byte gLeveledUpInBattle -_08013DD8: .4byte gBattleOutcome -_08013DDC: .4byte gBattleMainFunc -_08013DE0: .4byte c4_overworld -_08013DE4: - ldr r1, _08013DF0 @ =gBattleMainFunc - ldr r0, _08013DF4 @ =bc_evolution_cutscene -_08013DE8: - str r0, [r1] -_08013DEA: - pop {r0} - bx r0 - .align 2, 0 -_08013DF0: .4byte gBattleMainFunc -_08013DF4: .4byte bc_evolution_cutscene - thumb_func_end sub_8013DA8 - - thumb_func_start bc_evolution_cutscene -bc_evolution_cutscene: @ 8013DF8 - push {r4,r5,lr} - ldr r0, _08013E4C @ =gLeveledUpInBattle - ldrb r1, [r0] - adds r3, r0, 0 - cmp r1, 0 - beq _08013E6E -_08013E04: - movs r5, 0 -_08013E06: - ldrb r2, [r3] - ldr r0, _08013E50 @ =gBitTable - lsls r1, r5, 2 - adds r1, r0 - ldr r1, [r1] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _08013E60 - bics r2, r1 - strb r2, [r3] - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08013E54 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0 - bl GetEvolutionTargetSpecies - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08013E60 - ldr r0, _08013E58 @ =gBattleMainFunc - ldr r1, _08013E5C @ =sub_8013E88 - str r1, [r0] - lsls r3, r5, 24 - lsrs r3, 24 - adds r0, r4, 0 - adds r1, r2, 0 - movs r2, 0x81 - bl EvolutionScene - b _08013E74 - .align 2, 0 -_08013E4C: .4byte gLeveledUpInBattle -_08013E50: .4byte gBitTable -_08013E54: .4byte gPlayerParty -_08013E58: .4byte gBattleMainFunc -_08013E5C: .4byte sub_8013E88 -_08013E60: - adds r5, 0x1 - ldr r3, _08013E7C @ =gLeveledUpInBattle - cmp r5, 0x5 - ble _08013E06 - ldrb r0, [r3] - cmp r0, 0 - bne _08013E04 -_08013E6E: - ldr r1, _08013E80 @ =gBattleMainFunc - ldr r0, _08013E84 @ =c4_overworld - str r0, [r1] -_08013E74: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08013E7C: .4byte gLeveledUpInBattle -_08013E80: .4byte gBattleMainFunc -_08013E84: .4byte c4_overworld - thumb_func_end bc_evolution_cutscene - - thumb_func_start sub_8013E88 -sub_8013E88: @ 8013E88 - push {lr} - ldr r0, _08013EA0 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _08013EA4 @ =sub_800F808 - cmp r1, r0 - bne _08013E9A - ldr r1, _08013EA8 @ =gBattleMainFunc - ldr r0, _08013EAC @ =bc_evolution_cutscene - str r0, [r1] -_08013E9A: - pop {r0} - bx r0 - .align 2, 0 -_08013EA0: .4byte gMain -_08013EA4: .4byte sub_800F808 -_08013EA8: .4byte gBattleMainFunc -_08013EAC: .4byte bc_evolution_cutscene - thumb_func_end sub_8013E88 - - thumb_func_start c4_overworld -c4_overworld: @ 8013EB0 - push {r4-r6,lr} - ldr r5, _08013F30 @ =gBattleTypeFlags - ldrh r1, [r5] - movs r6, 0x2 - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _08013ECE - ldr r4, _08013F34 @ =gPlayerParty - adds r0, r4, 0 - bl RandomlyGivePartyPokerus - adds r0, r4, 0 - bl PartySpreadPokerus -_08013ECE: - ldrh r4, [r5] - adds r0, r6, 0 - ands r0, r4 - cmp r0, 0 - beq _08013EE0 - ldr r0, _08013F38 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08013F2A -_08013EE0: - ldr r1, _08013F3C @ =gSpecialVar_Result - ldr r5, _08013F40 @ =gBattleOutcome - ldrb r0, [r5] - strh r0, [r1] - ldr r3, _08013F44 @ =gMain - ldr r0, _08013F48 @ =0x0000043d - adds r2, r3, r0 - ldrb r1, [r2] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r0, _08013F4C @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r3] - movs r0, 0x80 - lsls r0, 3 - ands r0, r4 - cmp r0, 0 - beq _08013F1C - ldr r0, _08013F50 @ =gEnemyParty - bl UpdateRoamerHPStatus - ldrb r0, [r5] - cmp r0, 0x1 - beq _08013F18 - cmp r0, 0x7 - bne _08013F1C -_08013F18: - bl SetRoamerInactive -_08013F1C: - movs r0, 0x5A - bl m4aSongNumStop - ldr r0, _08013F44 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_08013F2A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08013F30: .4byte gBattleTypeFlags -_08013F34: .4byte gPlayerParty -_08013F38: .4byte gReceivedRemoteLinkPlayers -_08013F3C: .4byte gSpecialVar_Result -_08013F40: .4byte gBattleOutcome -_08013F44: .4byte gMain -_08013F48: .4byte 0x0000043d -_08013F4C: .4byte gPreBattleCallback1 -_08013F50: .4byte gEnemyParty - thumb_func_end c4_overworld - - thumb_func_start sub_8013F54 -sub_8013F54: @ 8013F54 - push {lr} - ldr r0, _08013F84 @ =gCurrentActionFuncId - ldrb r0, [r0] - subs r0, 0xB - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08013F90 - ldr r2, _08013F88 @ =gSharedMem + 0x17140 - adds r1, r2, 0 - adds r1, 0x20 - ldrb r0, [r1] - cmp r0, 0 - beq _08013F74 - subs r0, 0x1 - strb r0, [r1] -_08013F74: - ldr r0, _08013F8C @ =gBattleMainFunc - ldrb r1, [r1] - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - str r1, [r0] - b _08013FAA - .align 2, 0 -_08013F84: .4byte gCurrentActionFuncId -_08013F88: .4byte gSharedMem + 0x17140 -_08013F8C: .4byte gBattleMainFunc -_08013F90: - ldr r0, _08013FB0 @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08013FAA - ldr r1, _08013FB4 @ =gBattleScriptingCommandsTable - ldr r0, _08013FB8 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08013FAA: - pop {r0} - bx r0 - .align 2, 0 -_08013FB0: .4byte gBattleExecBuffer -_08013FB4: .4byte gBattleScriptingCommandsTable -_08013FB8: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8013F54 - - thumb_func_start sub_8013FBC -sub_8013FBC: @ 8013FBC - push {lr} - ldr r0, _08013FDC @ =gBattleExecBuffer - ldr r0, [r0] - cmp r0, 0 - bne _08013FD8 - ldr r1, _08013FE0 @ =gBattleScriptingCommandsTable - ldr r0, _08013FE4 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08013FD8: - pop {r0} - bx r0 - .align 2, 0 -_08013FDC: .4byte gBattleExecBuffer -_08013FE0: .4byte gBattleScriptingCommandsTable -_08013FE4: .4byte gBattlescriptCurrInstr - thumb_func_end sub_8013FBC - - thumb_func_start sub_8013FE8 -sub_8013FE8: @ 8013FE8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - movs r0, 0x4 - str r0, [sp] - ldr r7, _08014028 @ =gBankAttacker - ldr r1, _0801402C @ =gTurnOrder - ldr r0, _08014030 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r7] - ldr r1, _08014034 @ =gSharedMem - mov r10, r1 - ldr r0, _08014038 @ =0x000160a6 - add r0, r10 - ldrb r2, [r0] - ldr r1, _0801403C @ =gBitTable - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ands r2, r0 - cmp r2, 0 - beq _08014044 - ldr r1, _08014040 @ =gCurrentActionFuncId - movs r0, 0xC - b _080146CC - .align 2, 0 -_08014028: .4byte gBankAttacker -_0801402C: .4byte gTurnOrder -_08014030: .4byte gCurrentTurnActionNumber -_08014034: .4byte gSharedMem -_08014038: .4byte 0x000160a6 -_0801403C: .4byte gBitTable -_08014040: .4byte gCurrentActionFuncId -_08014044: - ldr r1, _080140B8 @ =gCritMultiplier - movs r0, 0x1 - strb r0, [r1] - ldr r1, _080140BC @ =0x0001601f - add r1, r10 - movs r0, 0x1 - strb r0, [r1] - ldr r0, _080140C0 @ =0x000160e7 - add r0, r10 - strb r2, [r0] - ldr r0, _080140C4 @ =gBattleMoveFlags - strb r2, [r0] - ldr r0, _080140C8 @ =gMultiHitCounter - strb r2, [r0] - ldr r0, _080140CC @ =gBattleCommunication - strb r2, [r0, 0x6] - ldr r3, _080140D0 @ =gCurrMovePos - ldrb r0, [r7] - ldr r2, _080140D4 @ =0x0001608c - adds r0, r2 - add r0, r10 - ldrb r0, [r0] - ldr r4, _080140D8 @ =gUnknown_02024BE5 - strb r0, [r4] - strb r0, [r3] - ldr r1, _080140DC @ =gProtectStructs - ldrb r2, [r7] - lsls r0, r2, 4 - adds r5, r0, r1 - ldrb r1, [r5] - lsls r0, r1, 29 - adds r4, r2, 0 - mov r8, r3 - cmp r0, 0 - bge _080140F0 - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r5] - ldr r2, _080140E0 @ =gCurrentMove - ldr r1, _080140E4 @ =gChosenMove - movs r0, 0xA5 - strh r0, [r1] - strh r0, [r2] - ldr r2, _080140E8 @ =gHitMarker - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 4 - orrs r0, r1 - str r0, [r2] - movs r0, 0xA5 - movs r1, 0 - bl GetMoveTarget - ldrb r1, [r7] - ldr r2, _080140EC @ =0x00016010 - adds r1, r2 - b _08014200 - .align 2, 0 -_080140B8: .4byte gCritMultiplier -_080140BC: .4byte 0x0001601f -_080140C0: .4byte 0x000160e7 -_080140C4: .4byte gBattleMoveFlags -_080140C8: .4byte gMultiHitCounter -_080140CC: .4byte gBattleCommunication -_080140D0: .4byte gCurrMovePos -_080140D4: .4byte 0x0001608c -_080140D8: .4byte gUnknown_02024BE5 -_080140DC: .4byte gProtectStructs -_080140E0: .4byte gCurrentMove -_080140E4: .4byte gChosenMove -_080140E8: .4byte gHitMarker -_080140EC: .4byte 0x00016010 -_080140F0: - ldr r1, _08014128 @ =gBattleMons - movs r0, 0x58 - adds r5, r4, 0 - muls r5, r0 - adds r0, r1, 0 - adds r0, 0x50 - adds r0, r5, r0 - ldr r2, [r0] - movs r0, 0x80 - lsls r0, 5 - ands r0, r2 - cmp r0, 0 - bne _08014114 - movs r6, 0x80 - lsls r6, 15 - ands r6, r2 - cmp r6, 0 - beq _08014138 -_08014114: - ldr r3, _0801412C @ =gCurrentMove - ldr r2, _08014130 @ =gChosenMove - ldr r1, _08014134 @ =gLockedMove - lsls r0, r4, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - strh r0, [r3] - b _08014280 - .align 2, 0 -_08014128: .4byte gBattleMons -_0801412C: .4byte gCurrentMove -_08014130: .4byte gChosenMove -_08014134: .4byte gLockedMove -_08014138: - ldr r3, _08014188 @ =gDisableStructs - mov r12, r3 - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r2, r0, r3 - ldrh r4, [r2, 0x6] - adds r1, r4, 0 - cmp r1, 0 - beq _08014218 - ldrb r3, [r2, 0xC] - lsls r0, r3, 1 - adds r0, r5 - str r0, [sp, 0x8] - ldr r0, _0801418C @ =gBattleMons - adds r0, 0xC - mov r9, r0 - ldr r0, [sp, 0x8] - add r0, r9 - ldrh r0, [r0] - cmp r1, r0 - bne _080141A0 - ldr r1, _08014190 @ =gCurrentMove - ldr r0, _08014194 @ =gChosenMove - strh r4, [r0] - strh r4, [r1] - ldrb r0, [r2, 0xC] - ldr r2, _08014198 @ =gUnknown_02024BE5 - strb r0, [r2] - mov r3, r8 - strb r0, [r3] - ldrh r0, [r1] - movs r1, 0 - bl GetMoveTarget - ldrb r1, [r7] - ldr r4, _0801419C @ =0x00016010 - adds r1, r4 - b _08014200 - .align 2, 0 -_08014188: .4byte gDisableStructs -_0801418C: .4byte gBattleMons -_08014190: .4byte gCurrentMove -_08014194: .4byte gChosenMove -_08014198: .4byte gUnknown_02024BE5 -_0801419C: .4byte 0x00016010 -_080141A0: - cmp r1, 0 - beq _08014218 - cmp r1, r0 - beq _08014218 - ldr r0, _08014208 @ =gUnknown_02024BE5 - strb r3, [r0] - mov r1, r8 - strb r3, [r1] - ldr r3, _0801420C @ =gCurrentMove - ldr r1, _08014210 @ =gChosenMove - mov r2, r8 - ldrb r0, [r2] - lsls r0, 1 - adds r0, r5 - add r0, r9 - ldrh r0, [r0] - strh r0, [r1] - strh r0, [r3] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - movs r2, 0 - strh r6, [r0, 0x6] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - strb r2, [r0, 0xC] - ldrb r0, [r7] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r12 - ldrb r2, [r1, 0xE] - movs r0, 0x10 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0xE] - ldrh r0, [r3] - movs r1, 0 - bl GetMoveTarget - ldrb r1, [r7] - ldr r3, _08014214 @ =0x00016010 - adds r1, r3 -_08014200: - add r1, r10 - strb r0, [r1] - b _08014280 - .align 2, 0 -_08014208: .4byte gUnknown_02024BE5 -_0801420C: .4byte gCurrentMove -_08014210: .4byte gChosenMove -_08014214: .4byte 0x00016010 -_08014218: - mov r4, r8 - ldrb r0, [r4] - lsls r0, 1 - ldr r4, _0801425C @ =gBankAttacker - ldrb r2, [r4] - movs r1, 0x58 - muls r1, r2 - adds r0, r1 - ldr r1, _08014260 @ =gBattleMons - adds r1, 0xC - adds r0, r1 - ldr r1, _08014264 @ =gChosenMovesByBanks - lsls r2, 1 - adds r2, r1 - ldrh r3, [r0] - ldrh r2, [r2] - cmp r3, r2 - beq _08014278 - ldr r1, _08014268 @ =gCurrentMove - ldr r0, _0801426C @ =gChosenMove - strh r3, [r0] - strh r3, [r1] - ldrh r0, [r1] - movs r1, 0 - bl GetMoveTarget - ldr r2, _08014270 @ =gSharedMem - ldrb r1, [r4] - ldr r3, _08014274 @ =0x00016010 - adds r1, r3 - adds r1, r2 - strb r0, [r1] - b _08014280 - .align 2, 0 -_0801425C: .4byte gBankAttacker -_08014260: .4byte gBattleMons -_08014264: .4byte gChosenMovesByBanks -_08014268: .4byte gCurrentMove -_0801426C: .4byte gChosenMove -_08014270: .4byte gSharedMem -_08014274: .4byte 0x00016010 -_08014278: - ldr r1, _08014298 @ =gCurrentMove - ldr r0, _0801429C @ =gChosenMove - strh r3, [r0] - strh r3, [r1] -_08014280: - ldr r0, _080142A0 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080142A8 - ldr r0, _080142A4 @ =gBattleResults - ldr r1, _08014298 @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0, 0x22] - b _080142B0 - .align 2, 0 -_08014298: .4byte gCurrentMove -_0801429C: .4byte gChosenMove -_080142A0: .4byte gBankAttacker -_080142A4: .4byte gBattleResults -_080142A8: - ldr r0, _08014314 @ =gBattleResults - ldr r1, _08014318 @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0, 0x24] -_080142B0: - ldr r4, _0801431C @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08014320 @ =gSideTimers - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 2 - adds r5, r0, r1 - ldrb r0, [r5, 0x8] - adds r3, r4, 0 - cmp r0, 0 - beq _08014330 - ldr r2, _08014324 @ =gBattleMoves - ldr r0, _08014318 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x6] - cmp r0, 0 - bne _08014330 - ldrb r0, [r3] - bl GetBankSide - adds r4, r0, 0 - ldrb r0, [r5, 0x9] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _08014330 - ldr r1, _08014328 @ =gBattleMons - ldrb r2, [r5, 0x9] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08014330 - ldr r0, _0801432C @ =gBankTarget - strb r2, [r0] - b _080146AC - .align 2, 0 -_08014314: .4byte gBattleResults -_08014318: .4byte gCurrentMove -_0801431C: .4byte gBankAttacker -_08014320: .4byte gSideTimers -_08014324: .4byte gBattleMoves -_08014328: .4byte gBattleMons -_0801432C: .4byte gBankTarget -_08014330: - ldr r2, _08014454 @ =gBattleTypeFlags - ldrh r1, [r2] - movs r0, 0x1 - ands r0, r1 - ldr r3, _08014458 @ =gBankAttacker - mov r9, r2 - cmp r0, 0 - bne _08014342 - b _0801461C -_08014342: - ldr r1, _0801445C @ =gSideTimers - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrb r7, [r0, 0x8] - cmp r7, 0 - beq _08014354 - b _08014570 -_08014354: - ldr r2, _08014460 @ =gBattleMoves - ldr r0, _08014464 @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r2 - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08014370 - ldrb r0, [r4, 0x6] - cmp r0, 0x10 - bne _08014370 - b _08014570 -_08014370: - ldr r3, _08014468 @ =gBattleMons - ldr r0, _0801446C @ =gSharedMem - mov r8, r0 - ldr r2, _08014458 @ =gBankAttacker - ldrb r5, [r2] - ldr r1, _08014470 @ =0x00016010 - adds r0, r5, r1 - add r0, r8 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r3 - adds r0, 0x20 - ldrb r0, [r0] - adds r3, r2, 0 - cmp r0, 0x1F - bne _08014394 - b _08014570 -_08014394: - ldrb r0, [r4, 0x2] - cmp r0, 0xD - beq _0801439C - b _08014570 -_0801439C: - adds r0, r5, 0 - bl GetBankSide - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08014474 @ =gActiveBank - strb r7, [r1] - ldr r0, _08014478 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r7, r0 - bcs _08014416 - adds r4, r1, 0 - mov r5, r8 -_080143B6: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - beq _08014404 - ldr r0, _08014458 @ =gBankAttacker - ldrb r0, [r0] - ldr r2, _08014470 @ =0x00016010 - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - ldrb r3, [r4] - cmp r0, r3 - beq _08014404 - ldr r1, _08014468 @ =gBattleMons - ldrb r2, [r4] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1F - bne _08014404 - adds r0, r2, 0 - bl BankGetTurnOrder - lsls r0, 24 - lsrs r0, 24 - ldr r1, [sp] - cmp r0, r1 - bcs _08014404 - ldrb r0, [r4] - bl BankGetTurnOrder - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] -_08014404: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08014478 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _080143B6 -_08014416: - ldr r2, [sp] - cmp r2, 0x4 - beq _0801441E - b _08014522 -_0801441E: - ldr r2, _08014460 @ =gBattleMoves - ldr r0, _0801447C @ =gChosenMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x6] - ldr r3, [sp] - ands r3, r0 - cmp r3, 0 - beq _080144A4 - ldr r0, _08014458 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08014484 - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08014480 - movs r0, 0x1 - b _08014496 - .align 2, 0 -_08014454: .4byte gBattleTypeFlags -_08014458: .4byte gBankAttacker -_0801445C: .4byte gSideTimers -_08014460: .4byte gBattleMoves -_08014464: .4byte gCurrentMove -_08014468: .4byte gBattleMons -_0801446C: .4byte gSharedMem -_08014470: .4byte 0x00016010 -_08014474: .4byte gActiveBank -_08014478: .4byte gNoOfAllBanks -_0801447C: .4byte gChosenMove -_08014480: - movs r0, 0x3 - b _08014496 -_08014484: - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08014494 - movs r0, 0 - b _08014496 -_08014494: - movs r0, 0x2 -_08014496: - bl GetBankByIdentity - ldr r1, _080144A0 @ =gBankTarget - strb r0, [r1] - b _080144B6 - .align 2, 0 -_080144A0: .4byte gBankTarget -_080144A4: - ldr r2, _080144EC @ =gBankTarget - ldr r1, _080144F0 @ =gSharedMem - ldr r0, _080144F4 @ =gBankAttacker - ldrb r0, [r0] - ldr r4, _080144F8 @ =0x00016010 - adds r0, r4 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] -_080144B6: - ldr r7, _080144FC @ =gAbsentBankFlags - ldrb r0, [r7] - ldr r1, _08014500 @ =gBitTable - mov r8, r1 - ldr r5, _080144EC @ =gBankTarget - ldrb r1, [r5] - lsls r1, 2 - add r1, r8 - ldr r1, [r1] - ands r0, r1 - cmp r0, 0 - bne _080144D0 - b _080146AC -_080144D0: - ldr r6, _080144F4 @ =gBankAttacker - ldrb r0, [r6] - bl GetBankSide - adds r4, r0, 0 - ldrb r0, [r5] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _08014504 - ldrb r0, [r5] - b _0801469A - .align 2, 0 -_080144EC: .4byte gBankTarget -_080144F0: .4byte gSharedMem -_080144F4: .4byte gBankAttacker -_080144F8: .4byte 0x00016010 -_080144FC: .4byte gAbsentBankFlags -_08014500: .4byte gBitTable -_08014504: - ldrb r0, [r6] - bl GetBankIdentity - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByIdentity - strb r0, [r5] - ldrb r1, [r7] - ldrb r2, [r5] - lsls r0, r2, 2 - add r0, r8 - b _08014690 -_08014522: - ldr r4, _0801455C @ =gActiveBank - ldr r0, _08014560 @ =gTurnOrder - ldr r2, [sp] - adds r0, r2, r0 - ldrb r0, [r0] - strb r0, [r4] - ldrb r0, [r4] - ldr r2, _08014564 @ =gBattleMons - movs r1, 0x58 - muls r1, r0 - adds r1, r2 - adds r1, 0x20 - ldrb r1, [r1] - bl RecordAbilityBattle - ldr r2, _08014568 @ =gSpecialStatuses - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] - ldr r1, _0801456C @ =gBankTarget - ldrb r0, [r4] - strb r0, [r1] - b _080146AC - .align 2, 0 -_0801455C: .4byte gActiveBank -_08014560: .4byte gTurnOrder -_08014564: .4byte gBattleMons -_08014568: .4byte gSpecialStatuses -_0801456C: .4byte gBankTarget -_08014570: - mov r4, r9 - ldrh r1, [r4] - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0801461C - ldr r2, _080145B4 @ =gBattleMoves - ldr r0, _080145B8 @ =gChosenMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x6] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0801461C - ldrb r0, [r3] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080145C0 - bl Random - adds r1, r4, 0 - ands r1, r0 - cmp r1, 0 - beq _080145BC - movs r0, 0x1 - b _080145D2 - .align 2, 0 -_080145B4: .4byte gBattleMoves -_080145B8: .4byte gChosenMove -_080145BC: - movs r0, 0x3 - b _080145D2 -_080145C0: - bl Random - adds r1, r4, 0 - ands r1, r0 - cmp r1, 0 - beq _080145D0 - movs r0, 0 - b _080145D2 -_080145D0: - movs r0, 0x2 -_080145D2: - bl GetBankByIdentity - ldr r1, _0801460C @ =gBankTarget - strb r0, [r1] - ldr r0, _08014610 @ =gAbsentBankFlags - ldrb r1, [r0] - ldr r2, _08014614 @ =gBitTable - ldr r5, _0801460C @ =gBankTarget - ldrb r0, [r5] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _080146AC - ldr r0, _08014618 @ =gBankAttacker - ldrb r0, [r0] - bl GetBankSide - adds r4, r0, 0 - ldrb r0, [r5] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _080146AC - ldrb r0, [r5] - b _0801469A - .align 2, 0 -_0801460C: .4byte gBankTarget -_08014610: .4byte gAbsentBankFlags -_08014614: .4byte gBitTable -_08014618: .4byte gBankAttacker -_0801461C: - ldr r5, _08014660 @ =gBankTarget - ldr r1, _08014664 @ =gSharedMem - adds r2, r3, 0 - ldrb r0, [r2] - ldr r4, _08014668 @ =0x00016010 - adds r0, r4 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r5] - ldr r6, _0801466C @ =gAbsentBankFlags - ldrb r1, [r6] - ldr r7, _08014670 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _080146AC - ldrb r0, [r2] - str r3, [sp, 0x4] - bl GetBankSide - adds r4, r0, 0 - ldrb r0, [r5] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - ldr r3, [sp, 0x4] - cmp r4, r0 - beq _08014674 - ldrb r0, [r5] - b _0801469A - .align 2, 0 -_08014660: .4byte gBankTarget -_08014664: .4byte gSharedMem -_08014668: .4byte 0x00016010 -_0801466C: .4byte gAbsentBankFlags -_08014670: .4byte gBitTable -_08014674: - ldrb r0, [r3] - bl GetBankIdentity - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByIdentity - strb r0, [r5] - ldrb r1, [r6] - ldrb r2, [r5] - lsls r0, r2, 2 - adds r0, r7 -_08014690: - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _080146AC - adds r0, r2, 0 -_0801469A: - bl GetBankIdentity - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBankByIdentity - strb r0, [r5] -_080146AC: - ldr r4, _080146E0 @ =gBattlescriptCurrInstr - ldr r3, _080146E4 @ =gBattleScriptsForMoveEffects - ldr r2, _080146E8 @ =gBattleMoves - ldr r0, _080146EC @ =gCurrentMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - str r0, [r4] - ldr r1, _080146F0 @ =gCurrentActionFuncId - movs r0, 0xA -_080146CC: - strb r0, [r1] - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080146E0: .4byte gBattlescriptCurrInstr -_080146E4: .4byte gBattleScriptsForMoveEffects -_080146E8: .4byte gBattleMoves -_080146EC: .4byte gCurrentMove -_080146F0: .4byte gCurrentActionFuncId - thumb_func_end sub_8013FE8 - - thumb_func_start sub_80146F4 -sub_80146F4: @ 80146F4 - push {r4,lr} - ldr r3, _08014764 @ =gBankAttacker - ldr r1, _08014768 @ =gTurnOrder - ldr r0, _0801476C @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r3] - ldr r0, _08014770 @ =gUnknown_030042A4 - movs r2, 0 - strh r2, [r0] - ldr r0, _08014774 @ =gUnknown_030042A0 - strh r2, [r0] - ldr r1, _08014778 @ =gActionSelectionCursor - ldrb r0, [r3] - adds r0, r1 - strb r2, [r0] - ldr r1, _0801477C @ =gMoveSelectionCursor - ldrb r0, [r3] - adds r0, r1 - strb r2, [r0] - ldr r2, _08014780 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r2] - movs r0, 0x7 - strb r0, [r2, 0x1] - ldrb r4, [r3] - strb r4, [r2, 0x2] - ldr r1, _08014784 @ =gSharedMem - ldrb r0, [r3] - ldr r3, _08014788 @ =0x00016064 - adds r0, r3 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2, 0x3] - movs r0, 0xFF - strb r0, [r2, 0x4] - ldr r0, _0801478C @ =0x00016003 - adds r1, r0 - strb r4, [r1] - ldr r1, _08014790 @ =gBattlescriptCurrInstr - ldr r0, _08014794 @ =BattleScript_ActionSwitch - str r0, [r1] - ldr r1, _08014798 @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - ldr r1, _0801479C @ =gBattleResults - ldrb r0, [r1, 0x2] - cmp r0, 0xFE - bhi _0801475C - adds r0, 0x1 - strb r0, [r1, 0x2] -_0801475C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08014764: .4byte gBankAttacker -_08014768: .4byte gTurnOrder -_0801476C: .4byte gCurrentTurnActionNumber -_08014770: .4byte gUnknown_030042A4 -_08014774: .4byte gUnknown_030042A0 -_08014778: .4byte gActionSelectionCursor -_0801477C: .4byte gMoveSelectionCursor -_08014780: .4byte gBattleTextBuff1 -_08014784: .4byte gSharedMem -_08014788: .4byte 0x00016064 -_0801478C: .4byte 0x00016003 -_08014790: .4byte gBattlescriptCurrInstr -_08014794: .4byte BattleScript_ActionSwitch -_08014798: .4byte gCurrentActionFuncId -_0801479C: .4byte gBattleResults - thumb_func_end sub_80146F4 - - thumb_func_start sub_80147A0 -sub_80147A0: @ 80147A0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _08014804 @ =gBankAttacker - ldr r2, _08014808 @ =gBankTarget - ldr r1, _0801480C @ =gTurnOrder - ldr r0, _08014810 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - strb r0, [r4] - ldr r0, _08014814 @ =gUnknown_030042A4 - movs r2, 0 - strh r2, [r0] - ldr r0, _08014818 @ =gUnknown_030042A0 - strh r2, [r0] - ldr r3, _0801481C @ =gDisableStructs - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r3 - strb r2, [r0, 0x10] - ldr r5, _08014820 @ =gLastUsedItem - ldr r2, _08014824 @ =gBattleBufferB - ldrb r1, [r4] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r3, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r0, [r1] - lsls r0, 8 - orrs r3, r0 - strh r3, [r5] - cmp r3, 0xC - bhi _08014830 - ldr r2, _08014828 @ =gBattlescriptCurrInstr - ldr r1, _0801482C @ =gBattlescriptsForBallThrow - ldrh r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - b _08014A8C - .align 2, 0 -_08014804: .4byte gBankAttacker -_08014808: .4byte gBankTarget -_0801480C: .4byte gTurnOrder -_08014810: .4byte gCurrentTurnActionNumber -_08014814: .4byte gUnknown_030042A4 -_08014818: .4byte gUnknown_030042A0 -_0801481C: .4byte gDisableStructs -_08014820: .4byte gLastUsedItem -_08014824: .4byte gBattleBufferB -_08014828: .4byte gBattlescriptCurrInstr -_0801482C: .4byte gBattlescriptsForBallThrow -_08014830: - adds r0, r3, 0 - subs r0, 0x50 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0801484C - ldr r0, _08014844 @ =gBattlescriptCurrInstr - ldr r1, _08014848 @ =gBattlescriptsForRunningByItem - b _0801485C - .align 2, 0 -_08014844: .4byte gBattlescriptCurrInstr -_08014848: .4byte gBattlescriptsForRunningByItem -_0801484C: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0801486C - ldr r0, _08014864 @ =gBattlescriptCurrInstr - ldr r1, _08014868 @ =gBattlescriptsForUsingItem -_0801485C: - ldr r1, [r1] - str r1, [r0] - b _08014A8C - .align 2, 0 -_08014864: .4byte gBattlescriptCurrInstr -_08014868: .4byte gBattlescriptsForUsingItem -_0801486C: - ldr r2, _080148A0 @ =gSharedMem - ldrb r0, [r4] - ldr r3, _080148A4 @ =0x00016003 - adds r1, r2, r3 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 25 - ldr r1, _080148A8 @ =0x000160d8 - adds r0, r1 - adds r0, r2 - ldrb r0, [r0] - subs r0, 0x1 - mov r8, r4 - ldr r3, _080148AC @ =gBattlescriptCurrInstr - mov r9, r3 - ldr r1, _080148B0 @ =gBattlescriptsForUsingItem - mov r10, r1 - adds r7, r2, 0 - cmp r0, 0x4 - bls _08014896 - b _08014A74 -_08014896: - lsls r0, 2 - ldr r1, _080148B4 @ =_080148B8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080148A0: .4byte gSharedMem -_080148A4: .4byte 0x00016003 -_080148A8: .4byte 0x000160d8 -_080148AC: .4byte gBattlescriptCurrInstr -_080148B0: .4byte gBattlescriptsForUsingItem -_080148B4: .4byte _080148B8 - .align 2, 0 -_080148B8: - .4byte _08014A74 - .4byte _08014A74 - .4byte _080148CC - .4byte _08014958 - .4byte _08014A30 -_080148CC: - ldr r2, _08014904 @ =gBattleCommunication - movs r0, 0 - strb r0, [r2, 0x5] - ldr r1, _08014908 @ =gBankAttacker - ldrb r0, [r1] - lsrs r0, 1 - ldr r6, _0801490C @ =0x000160da - adds r0, r6 - adds r0, r7 - ldrb r3, [r0] - movs r0, 0x1 - ands r0, r3 - mov r8, r1 - cmp r0, 0 - beq _08014918 - movs r0, 0x3E - ands r0, r3 - ldr r3, _08014910 @ =gBattlescriptCurrInstr - mov r9, r3 - ldr r1, _08014914 @ =gBattlescriptsForUsingItem - mov r10, r1 - cmp r0, 0 - bne _080148FC - b _08014A74 -_080148FC: - movs r0, 0x5 - strb r0, [r2, 0x5] - b _08014A74 - .align 2, 0 -_08014904: .4byte gBattleCommunication -_08014908: .4byte gBankAttacker -_0801490C: .4byte 0x000160da -_08014910: .4byte gBattlescriptCurrInstr -_08014914: .4byte gBattlescriptsForUsingItem -_08014918: - ldr r3, _08014950 @ =gBattlescriptCurrInstr - mov r9, r3 - ldr r0, _08014954 @ =gBattlescriptsForUsingItem - mov r10, r0 - adds r5, r7, 0 - mov r4, r8 - adds r3, r6, 0 -_08014926: - ldrb r0, [r4] - lsrs r0, 1 - adds r0, r3 - adds r0, r5 - ldrb r1, [r0] - lsrs r1, 1 - strb r1, [r0] - ldrb r0, [r2, 0x5] - adds r0, 0x1 - strb r0, [r2, 0x5] - ldrb r0, [r4] - lsrs r0, 1 - adds r0, r3 - adds r0, r5 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08014926 - b _08014A74 - .align 2, 0 -_08014950: .4byte gBattlescriptCurrInstr -_08014954: .4byte gBattlescriptsForUsingItem -_08014958: - ldr r3, _0801498C @ =gBattleCommunication - movs r0, 0x4 - strb r0, [r3, 0x5] - ldr r2, _08014990 @ =gBankAttacker - ldrb r0, [r2] - lsrs r0, 1 - ldr r1, _08014994 @ =0x000160da - mov r12, r1 - add r0, r12 - adds r6, r0, r7 - ldrb r1, [r6] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r8, r2 - cmp r5, 0 - beq _080149A0 - movs r0, 0x5 - strb r0, [r3, 0x5] - ldr r2, _08014998 @ =gBattlescriptCurrInstr - mov r9, r2 - ldr r3, _0801499C @ =gBattlescriptsForUsingItem - mov r10, r3 - b _08014A74 - .align 2, 0 -_0801498C: .4byte gBattleCommunication -_08014990: .4byte gBankAttacker -_08014994: .4byte 0x000160da -_08014998: .4byte gBattlescriptCurrInstr -_0801499C: .4byte gBattlescriptsForUsingItem -_080149A0: - ldr r3, _08014A18 @ =gBattleTextBuff1 - movs r4, 0xFD - strb r4, [r3] - movs r0, 0x5 - strb r0, [r3, 0x1] - movs r2, 0x1 - strb r2, [r3, 0x2] - movs r0, 0xFF - strb r0, [r3, 0x3] - ldr r1, _08014A1C @ =gBattleTextBuff2 - strb r4, [r1] - strb r5, [r1, 0x1] - movs r0, 0xD2 - strb r0, [r1, 0x2] - strb r5, [r1, 0x3] - subs r0, 0xD3 - strb r0, [r1, 0x4] - ldrb r0, [r6] - ands r2, r0 - ldr r0, _08014A20 @ =gBattlescriptCurrInstr - mov r9, r0 - ldr r1, _08014A24 @ =gBattlescriptsForUsingItem - mov r10, r1 - adds r6, r3, 0 - cmp r2, 0 - bne _08014A02 - adds r3, r7, 0 - mov r5, r8 - mov r4, r12 - adds r2, r6, 0 -_080149DC: - ldrb r0, [r5] - lsrs r0, 1 - adds r0, r4 - adds r0, r3 - ldrb r1, [r0] - lsrs r1, 1 - strb r1, [r0] - ldrb r0, [r2, 0x2] - adds r0, 0x1 - strb r0, [r2, 0x2] - ldrb r0, [r5] - lsrs r0, 1 - adds r0, r4 - adds r0, r3 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080149DC -_08014A02: - ldrb r0, [r6, 0x2] - adds r0, 0xE - ldr r2, _08014A28 @ =0x000160a4 - adds r1, r7, r2 - movs r2, 0 - strb r0, [r1] - ldr r3, _08014A2C @ =0x000160a5 - adds r0, r7, r3 - strb r2, [r0] - b _08014A74 - .align 2, 0 -_08014A18: .4byte gBattleTextBuff1 -_08014A1C: .4byte gBattleTextBuff2 -_08014A20: .4byte gBattlescriptCurrInstr -_08014A24: .4byte gBattlescriptsForUsingItem -_08014A28: .4byte 0x000160a4 -_08014A2C: .4byte 0x000160a5 -_08014A30: - ldr r0, _08014A50 @ =gBattleTypeFlags - ldrh r0, [r0] - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08014A64 - ldr r1, _08014A54 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - ldr r0, _08014A58 @ =gBankAttacker - mov r8, r0 - ldr r1, _08014A5C @ =gBattlescriptCurrInstr - mov r9, r1 - ldr r2, _08014A60 @ =gBattlescriptsForUsingItem - mov r10, r2 - b _08014A74 - .align 2, 0 -_08014A50: .4byte gBattleTypeFlags -_08014A54: .4byte gBattleCommunication -_08014A58: .4byte gBankAttacker -_08014A5C: .4byte gBattlescriptCurrInstr -_08014A60: .4byte gBattlescriptsForUsingItem -_08014A64: - ldr r0, _08014AA0 @ =gBattleCommunication - strb r1, [r0, 0x5] - ldr r3, _08014AA4 @ =gBankAttacker - mov r8, r3 - ldr r0, _08014AA8 @ =gBattlescriptCurrInstr - mov r9, r0 - ldr r1, _08014AAC @ =gBattlescriptsForUsingItem - mov r10, r1 -_08014A74: - mov r2, r8 - ldrb r0, [r2] - lsrs r0, 1 - ldr r3, _08014AB0 @ =0x000160d8 - adds r0, r3 - adds r0, r7 - ldrb r0, [r0] - lsls r0, 2 - add r0, r10 - ldr r0, [r0] - mov r1, r9 - str r0, [r1] -_08014A8C: - movs r0, 0xA - ldr r2, _08014AB4 @ =gCurrentActionFuncId - strb r0, [r2] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08014AA0: .4byte gBattleCommunication -_08014AA4: .4byte gBankAttacker -_08014AA8: .4byte gBattlescriptCurrInstr -_08014AAC: .4byte gBattlescriptsForUsingItem -_08014AB0: .4byte 0x000160d8 -_08014AB4: .4byte gCurrentActionFuncId - thumb_func_end sub_80147A0 - - thumb_func_start sub_8014AB8 -sub_8014AB8: @ 8014AB8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r5, 0 - ldr r1, _08014ADC @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r1, r0, r1 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08014AE4 - ldr r1, _08014AE0 @ =gEnigmaBerries - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x7] - b _08014AEE - .align 2, 0 -_08014ADC: .4byte gBattleMons -_08014AE0: .4byte gEnigmaBerries -_08014AE4: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r1, r0, 24 -_08014AEE: - ldr r0, _08014B18 @ =gStringBank - strb r4, [r0] - cmp r1, 0x25 - bne _08014B28 - ldr r2, _08014B1C @ =gLastUsedItem - ldr r1, _08014B20 @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r0, r1 - ldrh r0, [r0, 0x2E] - strh r0, [r2] - ldr r0, _08014B24 @ =gProtectStructs - lsls r2, r4, 4 - adds r2, r0 - ldrb r1, [r2, 0x1] - movs r0, 0x19 - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - b _08014B50 - .align 2, 0 -_08014B18: .4byte gStringBank -_08014B1C: .4byte gLastUsedItem -_08014B20: .4byte gBattleMons -_08014B24: .4byte gProtectStructs -_08014B28: - ldr r6, _08014B5C @ =gBattleMons - movs r2, 0x58 - adds r0, r4, 0 - muls r0, r2 - adds r3, r0, r6 - adds r0, r3, 0 - adds r0, 0x20 - ldrb r1, [r0] - cmp r1, 0x32 - bne _08014B68 - ldr r0, _08014B60 @ =gLastUsedAbility - strb r1, [r0] - ldr r0, _08014B64 @ =gProtectStructs - lsls r2, r4, 4 - adds r2, r0 - ldrb r1, [r2, 0x1] - movs r0, 0x19 - negs r0, r0 - ands r0, r1 - movs r1, 0x10 -_08014B50: - orrs r0, r1 - strb r0, [r2, 0x1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - b _08014BC2 - .align 2, 0 -_08014B5C: .4byte gBattleMons -_08014B60: .4byte gLastUsedAbility -_08014B64: .4byte gProtectStructs -_08014B68: - ldr r0, _08014BDC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08014BB6 - movs r1, 0x1 - adds r0, r4, 0 - eors r0, r1 - muls r0, r2 - adds r2, r0, r6 - ldrh r0, [r3, 0x6] - ldrh r1, [r2, 0x6] - cmp r0, r1 - bcs _08014BB0 - lsls r0, 7 - ldrh r1, [r2, 0x6] - bl __divsi3 - adds r4, r0, 0 - ldr r0, _08014BE0 @ =gSharedMem - ldr r1, _08014BE4 @ =0x00016078 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 1 - adds r4, r0 - lsls r4, 24 - lsrs r4, 24 - bl Random - movs r1, 0xFF - ands r1, r0 - cmp r4, r1 - bls _08014BB6 -_08014BB0: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_08014BB6: - ldr r1, _08014BE0 @ =gSharedMem - ldr r0, _08014BE4 @ =0x00016078 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08014BC2: - cmp r5, 0 - beq _08014BD4 - ldr r1, _08014BE8 @ =gCurrentTurnActionNumber - ldr r0, _08014BEC @ =gNoOfAllBanks - ldrb r0, [r0] - strb r0, [r1] - ldr r1, _08014BF0 @ =gBattleOutcome - movs r0, 0x4 - strb r0, [r1] -_08014BD4: - adds r0, r5, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08014BDC: .4byte gBattleTypeFlags -_08014BE0: .4byte gSharedMem -_08014BE4: .4byte 0x00016078 -_08014BE8: .4byte gCurrentTurnActionNumber -_08014BEC: .4byte gNoOfAllBanks -_08014BF0: .4byte gBattleOutcome - thumb_func_end sub_8014AB8 - - thumb_func_start sub_8014BF4 -sub_8014BF4: @ 8014BF4 - push {r4-r6,lr} - ldr r4, _08014C44 @ =gBankAttacker - ldr r1, _08014C48 @ =gTurnOrder - ldr r5, _08014C4C @ =gCurrentTurnActionNumber - ldrb r0, [r5] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r4] - ldr r0, _08014C50 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08014C9C - ldr r0, _08014C54 @ =gNoOfAllBanks - ldrb r1, [r0] - strb r1, [r5] - ldr r2, _08014C58 @ =gActiveBank - movs r0, 0 - strb r0, [r2] - lsls r1, 24 - cmp r1, 0 - beq _08014C88 - adds r4, r2, 0 - ldr r6, _08014C5C @ =gActionForBanks - ldr r5, _08014C60 @ =gBattleOutcome -_08014C28: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08014C64 - ldrb r0, [r4] - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x3 - bne _08014C76 - ldrb r0, [r5] - movs r1, 0x2 - b _08014C72 - .align 2, 0 -_08014C44: .4byte gBankAttacker -_08014C48: .4byte gTurnOrder -_08014C4C: .4byte gCurrentTurnActionNumber -_08014C50: .4byte gBattleTypeFlags -_08014C54: .4byte gNoOfAllBanks -_08014C58: .4byte gActiveBank -_08014C5C: .4byte gActionForBanks -_08014C60: .4byte gBattleOutcome -_08014C64: - ldrb r0, [r4] - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x3 - bne _08014C76 - ldrb r0, [r5] - movs r1, 0x1 -_08014C72: - orrs r0, r1 - strb r0, [r5] -_08014C76: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08014C94 @ =gNoOfAllBanks - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08014C28 -_08014C88: - ldr r0, _08014C98 @ =gBattleOutcome - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] - b _08014D40 - .align 2, 0 -_08014C94: .4byte gNoOfAllBanks -_08014C98: .4byte gBattleOutcome -_08014C9C: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08014CF4 - ldrb r0, [r4] - bl sub_8014AB8 - lsls r0, 24 - cmp r0, 0 - bne _08014D40 - ldr r1, _08014CDC @ =gBattleMons - ldrb r2, [r4] - movs r0, 0x58 - muls r2, r0 - adds r1, 0x50 - adds r2, r1 - ldr r0, [r2] - ldr r1, _08014CE0 @ =0xfdffffff - ands r0, r1 - str r0, [r2] - ldr r1, _08014CE4 @ =gBattleCommunication - movs r0, 0x3 - strb r0, [r1, 0x5] - ldr r1, _08014CE8 @ =gBattlescriptCurrInstr - ldr r0, _08014CEC @ =BattleScript_PrintFailedToRunString - str r0, [r1] - ldr r1, _08014CF0 @ =gCurrentActionFuncId - movs r0, 0xA - b _08014D3E - .align 2, 0 -_08014CDC: .4byte gBattleMons -_08014CE0: .4byte 0xfdffffff -_08014CE4: .4byte gBattleCommunication -_08014CE8: .4byte gBattlescriptCurrInstr -_08014CEC: .4byte BattleScript_PrintFailedToRunString -_08014CF0: .4byte gCurrentActionFuncId -_08014CF4: - ldr r1, _08014D1C @ =gBattleMons - ldrb r2, [r4] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08014D20 @ =0x0400e000 - ands r0, r1 - cmp r0, 0 - beq _08014D34 - ldr r1, _08014D24 @ =gBattleCommunication - movs r0, 0x4 - strb r0, [r1, 0x5] - ldr r1, _08014D28 @ =gBattlescriptCurrInstr - ldr r0, _08014D2C @ =BattleScript_PrintFailedToRunString - str r0, [r1] - ldr r1, _08014D30 @ =gCurrentActionFuncId - movs r0, 0xA - b _08014D3E - .align 2, 0 -_08014D1C: .4byte gBattleMons -_08014D20: .4byte 0x0400e000 -_08014D24: .4byte gBattleCommunication -_08014D28: .4byte gBattlescriptCurrInstr -_08014D2C: .4byte BattleScript_PrintFailedToRunString -_08014D30: .4byte gCurrentActionFuncId -_08014D34: - ldr r0, _08014D48 @ =gNoOfAllBanks - ldrb r0, [r0] - strb r0, [r5] - ldr r1, _08014D4C @ =gBattleOutcome - movs r0, 0x6 -_08014D3E: - strb r0, [r1] -_08014D40: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08014D48: .4byte gNoOfAllBanks -_08014D4C: .4byte gBattleOutcome - thumb_func_end sub_8014BF4 - - thumb_func_start sub_8014D50 -sub_8014D50: @ 8014D50 - ldr r2, _08014D78 @ =gBankAttacker - ldr r1, _08014D7C @ =gTurnOrder - ldr r0, _08014D80 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08014D84 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _08014D88 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r1, _08014D8C @ =gBattlescriptCurrInstr - ldr r0, _08014D90 @ =gBattlescriptsForSafariActions - ldr r0, [r0] - str r0, [r1] - ldr r1, _08014D94 @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - bx lr - .align 2, 0 -_08014D78: .4byte gBankAttacker -_08014D7C: .4byte gTurnOrder -_08014D80: .4byte gCurrentTurnActionNumber -_08014D84: .4byte gUnknown_030042A4 -_08014D88: .4byte gUnknown_030042A0 -_08014D8C: .4byte gBattlescriptCurrInstr -_08014D90: .4byte gBattlescriptsForSafariActions -_08014D94: .4byte gCurrentActionFuncId - thumb_func_end sub_8014D50 - - thumb_func_start sub_8014D98 -sub_8014D98: @ 8014D98 - ldr r2, _08014DD0 @ =gBankAttacker - ldr r1, _08014DD4 @ =gTurnOrder - ldr r0, _08014DD8 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08014DDC @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _08014DE0 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r1, _08014DE4 @ =gNumSafariBalls - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - ldr r1, _08014DE8 @ =gLastUsedItem - movs r0, 0x5 - strh r0, [r1] - ldr r1, _08014DEC @ =gBattlescriptCurrInstr - ldr r0, _08014DF0 @ =gBattlescriptsForBallThrow - ldr r0, [r0, 0x14] - str r0, [r1] - ldr r1, _08014DF4 @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - bx lr - .align 2, 0 -_08014DD0: .4byte gBankAttacker -_08014DD4: .4byte gTurnOrder -_08014DD8: .4byte gCurrentTurnActionNumber -_08014DDC: .4byte gUnknown_030042A4 -_08014DE0: .4byte gUnknown_030042A0 -_08014DE4: .4byte gNumSafariBalls -_08014DE8: .4byte gLastUsedItem -_08014DEC: .4byte gBattlescriptCurrInstr -_08014DF0: .4byte gBattlescriptsForBallThrow -_08014DF4: .4byte gCurrentActionFuncId - thumb_func_end sub_8014D98 - - thumb_func_start sub_8014DF8 -sub_8014DF8: @ 8014DF8 - push {r4-r6,lr} - ldr r3, _08014E68 @ =gBankAttacker - ldr r1, _08014E6C @ =gTurnOrder - ldr r0, _08014E70 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r3] - ldr r0, _08014E74 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _08014E78 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r6, _08014E7C @ =gBattleCommunication - ldr r2, _08014E80 @ =gBattleBufferB - ldrb r0, [r3] - lsls r0, 9 - adds r1, r2, 0x1 - adds r0, r1 - ldrb r0, [r0] - subs r0, 0x1 - strb r0, [r6, 0x5] - ldr r1, _08014E84 @ =gLastUsedItem - ldrb r0, [r3] - lsls r0, 9 - adds r2, 0x2 - adds r0, r2 - ldrb r0, [r0] - strh r0, [r1] - ldr r2, _08014E88 @ =gSharedMem - ldr r0, _08014E8C @ =0x00016087 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0x2 - bhi _08014E42 - adds r0, 0x1 - strb r0, [r1] -_08014E42: - ldr r0, _08014E90 @ =0x00016088 - adds r4, r2, r0 - ldrb r5, [r4] - adds r3, r5, 0 - cmp r3, 0x1 - bls _08014E9C - ldr r2, _08014E94 @ =gUnknown_081FA70C - ldrb r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - ldrb r6, [r6, 0x5] - adds r0, r6 - adds r0, r2 - ldrb r0, [r0] - cmp r3, r0 - bcs _08014E98 - movs r0, 0x1 - b _08014E9A - .align 2, 0 -_08014E68: .4byte gBankAttacker -_08014E6C: .4byte gTurnOrder -_08014E70: .4byte gCurrentTurnActionNumber -_08014E74: .4byte gUnknown_030042A4 -_08014E78: .4byte gUnknown_030042A0 -_08014E7C: .4byte gBattleCommunication -_08014E80: .4byte gBattleBufferB -_08014E84: .4byte gLastUsedItem -_08014E88: .4byte gSharedMem -_08014E8C: .4byte 0x00016087 -_08014E90: .4byte 0x00016088 -_08014E94: .4byte gUnknown_081FA70C -_08014E98: - subs r0, r5, r0 -_08014E9A: - strb r0, [r4] -_08014E9C: - ldr r1, _08014EB0 @ =gBattlescriptCurrInstr - ldr r0, _08014EB4 @ =gBattlescriptsForSafariActions - ldr r0, [r0, 0x8] - str r0, [r1] - ldr r1, _08014EB8 @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08014EB0: .4byte gBattlescriptCurrInstr -_08014EB4: .4byte gBattlescriptsForSafariActions -_08014EB8: .4byte gCurrentActionFuncId - thumb_func_end sub_8014DF8 - - thumb_func_start sub_8014EBC -sub_8014EBC: @ 8014EBC - push {r4,r5,lr} - ldr r2, _08014F28 @ =gBankAttacker - ldr r1, _08014F2C @ =gTurnOrder - ldr r0, _08014F30 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08014F34 @ =gUnknown_030042A4 - movs r5, 0 - strh r5, [r0] - ldr r0, _08014F38 @ =gUnknown_030042A0 - strh r5, [r0] - ldr r3, _08014F3C @ =gSharedMem - ldr r0, _08014F40 @ =0x00016089 - adds r2, r3, r0 - ldr r1, _08014F44 @ =gUnknown_081FA71B - subs r0, 0x3 - adds r4, r3, r0 - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - ldrb r1, [r2] - adds r0, r1 - strb r0, [r2] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x14 - bls _08014EFA - movs r0, 0x14 - strb r0, [r2] -_08014EFA: - ldr r0, _08014F48 @ =0x00016088 - adds r2, r3, r0 - ldr r1, _08014F4C @ =gUnknown_081FA71F - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - ldrb r1, [r2] - adds r0, r1 - strb r0, [r2] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x14 - bls _08014F18 - movs r0, 0x14 - strb r0, [r2] -_08014F18: - ldrb r0, [r4] - cmp r0, 0x2 - bhi _08014F54 - adds r0, 0x1 - strb r0, [r4] - ldr r0, _08014F50 @ =gBattleCommunication - strb r5, [r0, 0x5] - b _08014F5A - .align 2, 0 -_08014F28: .4byte gBankAttacker -_08014F2C: .4byte gTurnOrder -_08014F30: .4byte gCurrentTurnActionNumber -_08014F34: .4byte gUnknown_030042A4 -_08014F38: .4byte gUnknown_030042A0 -_08014F3C: .4byte gSharedMem -_08014F40: .4byte 0x00016089 -_08014F44: .4byte gUnknown_081FA71B -_08014F48: .4byte 0x00016088 -_08014F4C: .4byte gUnknown_081FA71F -_08014F50: .4byte gBattleCommunication -_08014F54: - ldr r1, _08014F70 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] -_08014F5A: - ldr r1, _08014F74 @ =gBattlescriptCurrInstr - ldr r0, _08014F78 @ =gBattlescriptsForSafariActions - ldr r0, [r0, 0x4] - str r0, [r1] - ldr r1, _08014F7C @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08014F70: .4byte gBattleCommunication -_08014F74: .4byte gBattlescriptCurrInstr -_08014F78: .4byte gBattlescriptsForSafariActions -_08014F7C: .4byte gCurrentActionFuncId - thumb_func_end sub_8014EBC - - thumb_func_start bs8_exit_by_flight -bs8_exit_by_flight: @ 8014F80 - push {r4,lr} - ldr r2, _08014FA8 @ =gBankAttacker - ldr r1, _08014FAC @ =gTurnOrder - ldr r4, _08014FB0 @ =gCurrentTurnActionNumber - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0x11 - bl PlaySE - ldr r0, _08014FB4 @ =gNoOfAllBanks - ldrb r0, [r0] - strb r0, [r4] - ldr r1, _08014FB8 @ =gBattleOutcome - movs r0, 0x4 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08014FA8: .4byte gBankAttacker -_08014FAC: .4byte gTurnOrder -_08014FB0: .4byte gCurrentTurnActionNumber -_08014FB4: .4byte gNoOfAllBanks -_08014FB8: .4byte gBattleOutcome - thumb_func_end bs8_exit_by_flight - - thumb_func_start sub_8014FBC -sub_8014FBC: @ 8014FBC - ldr r3, _08015008 @ =gBankAttacker - ldr r1, _0801500C @ =gTurnOrder - ldr r0, _08015010 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r2, [r0] - strb r2, [r3] - ldr r0, _08015014 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _08015018 @ =gUnknown_030042A0 - strh r1, [r0] - ldr r1, _0801501C @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - strb r2, [r1, 0x2] - ldr r2, _08015020 @ =gBattlePartyID - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1, 0x3] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r1, _08015024 @ =gBattlescriptCurrInstr - ldr r0, _08015028 @ =gBattlescriptsForSafariActions - ldr r0, [r0, 0xC] - str r0, [r1] - ldr r1, _0801502C @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - ldr r1, _08015030 @ =gUnknown_02024A76 - movs r0, 0xC - strb r0, [r1, 0x1] - bx lr - .align 2, 0 -_08015008: .4byte gBankAttacker -_0801500C: .4byte gTurnOrder -_08015010: .4byte gCurrentTurnActionNumber -_08015014: .4byte gUnknown_030042A4 -_08015018: .4byte gUnknown_030042A0 -_0801501C: .4byte gBattleTextBuff1 -_08015020: .4byte gBattlePartyID -_08015024: .4byte gBattlescriptCurrInstr -_08015028: .4byte gBattlescriptsForSafariActions -_0801502C: .4byte gCurrentActionFuncId -_08015030: .4byte gUnknown_02024A76 - thumb_func_end sub_8014FBC - - thumb_func_start bsB_exit_by_move -bsB_exit_by_move: @ 8015034 - push {lr} - bl sub_80173A4 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08015050 - ldr r0, _08015054 @ =gSharedMem - ldr r2, _08015058 @ =0x00016059 - adds r0, r2 - strb r1, [r0] - ldr r1, _0801505C @ =gCurrentActionFuncId - movs r0, 0xC - strb r0, [r1] -_08015050: - pop {r0} - bx r0 - .align 2, 0 -_08015054: .4byte gSharedMem -_08015058: .4byte 0x00016059 -_0801505C: .4byte gCurrentActionFuncId - thumb_func_end bsB_exit_by_move - - thumb_func_start sub_8015060 -sub_8015060: @ 8015060 - ldr r1, _08015080 @ =gCurrentTurnActionNumber - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r3, _08015084 @ =gCurrentActionFuncId - ldr r2, _08015088 @ =gUnknown_02024A76 - ldrb r0, [r1] - adds r0, r2 - ldrb r0, [r0] - strb r0, [r3] - ldr r2, _0801508C @ =gHitMarker - ldr r0, [r2] - ldr r1, _08015090 @ =0xf1e892af - ands r0, r1 - str r0, [r2] - bx lr - .align 2, 0 -_08015080: .4byte gCurrentTurnActionNumber -_08015084: .4byte gCurrentActionFuncId -_08015088: .4byte gUnknown_02024A76 -_0801508C: .4byte gHitMarker -_08015090: .4byte 0xf1e892af - thumb_func_end sub_8015060 - - thumb_func_start bsC_8016D70 -bsC_8016D70: @ 8015094 - push {r4,r5,lr} - ldr r1, _0801510C @ =gCurrentTurnActionNumber - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r3, _08015110 @ =gCurrentActionFuncId - ldr r2, _08015114 @ =gUnknown_02024A76 - ldrb r0, [r1] - adds r0, r2 - ldrb r0, [r0] - strb r0, [r3] - bl SpecialStatusesClear - ldr r2, _08015118 @ =gHitMarker - ldr r0, [r2] - ldr r1, _0801511C @ =0xf1e892af - ands r0, r1 - str r0, [r2] - ldr r0, _08015120 @ =gBattleMoveDamage - movs r4, 0 - str r4, [r0] - ldr r1, _08015124 @ =gSharedMem - ldr r2, _08015128 @ =0x00016002 - adds r0, r1, r2 - strb r4, [r0] - ldr r3, _0801512C @ =0x000160a1 - adds r0, r1, r3 - strb r4, [r0] - ldr r2, _08015130 @ =gMoveHitWith - ldr r5, _08015134 @ =gBankAttacker - ldrb r0, [r5] - lsls r0, 1 - adds r0, r2 - movs r2, 0 - strh r4, [r0] - ldr r3, _08015138 @ =gUnknown_02024C44 - ldrb r0, [r5] - lsls r0, 1 - adds r0, r3 - strh r4, [r0] - ldr r3, _0801513C @ =0x0001601c - adds r0, r1, r3 - strb r2, [r0] - ldr r0, _08015140 @ =gDynamicBasePower - strh r4, [r0] - subs r3, 0x10 - adds r0, r1, r3 - strb r2, [r0] - ldr r0, _08015144 @ =gBattleCommunication - strb r2, [r0, 0x3] - strb r2, [r0, 0x4] - ldr r3, _08015148 @ =0x00016112 - adds r0, r1, r3 - strb r2, [r0] - ldr r0, _0801514C @ =0x00017130 - adds r1, r0 - strb r2, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801510C: .4byte gCurrentTurnActionNumber -_08015110: .4byte gCurrentActionFuncId -_08015114: .4byte gUnknown_02024A76 -_08015118: .4byte gHitMarker -_0801511C: .4byte 0xf1e892af -_08015120: .4byte gBattleMoveDamage -_08015124: .4byte gSharedMem -_08015128: .4byte 0x00016002 -_0801512C: .4byte 0x000160a1 -_08015130: .4byte gMoveHitWith -_08015134: .4byte gBankAttacker -_08015138: .4byte gUnknown_02024C44 -_0801513C: .4byte 0x0001601c -_08015140: .4byte gDynamicBasePower -_08015144: .4byte gBattleCommunication -_08015148: .4byte 0x00016112 -_0801514C: .4byte 0x00017130 - thumb_func_end bsC_8016D70 - thumb_func_start GetBattleBank GetBattleBank: @ 8015150 push {lr} diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s index 6bd98cc8a..608daba87 100644 --- a/asm/contest_link_80C2020.s +++ b/asm/contest_link_80C2020.s @@ -82,9 +82,9 @@ sub_80C2020: @ 80C2020 adds r1, r3, 0 orrs r0, r1 strh r0, [r5] - ldr r0, _080C2114 @ =gUnknown_030042A4 + ldr r0, _080C2114 @ =gBattle_BG0_X strh r2, [r0] - ldr r0, _080C2118 @ =gUnknown_030042A0 + ldr r0, _080C2118 @ =gBattle_BG0_Y strh r2, [r0] ldr r0, _080C211C @ =gBattle_BG1_X strh r2, [r0] @@ -119,8 +119,8 @@ _080C2104: .4byte 0x00003a03 _080C2108: .4byte REG_MOSAIC _080C210C: .4byte 0x00003f3f _080C2110: .4byte REG_WIN0H -_080C2114: .4byte gUnknown_030042A4 -_080C2118: .4byte gUnknown_030042A0 +_080C2114: .4byte gBattle_BG0_X +_080C2118: .4byte gBattle_BG0_Y _080C211C: .4byte gBattle_BG1_X _080C2120: .4byte gBattle_BG1_Y _080C2124: .4byte gBattle_BG2_X @@ -482,11 +482,11 @@ sub_80C2430: @ 80C2430 sub_80C2448: @ 80C2448 push {lr} ldr r1, _080C24C0 @ =REG_BG0HOFS - ldr r0, _080C24C4 @ =gUnknown_030042A4 + ldr r0, _080C24C4 @ =gBattle_BG0_X ldrh r0, [r0] strh r0, [r1] adds r1, 0x2 - ldr r0, _080C24C8 @ =gUnknown_030042A0 + ldr r0, _080C24C8 @ =gBattle_BG0_Y ldrh r0, [r0] strh r0, [r1] adds r1, 0x2 @@ -537,8 +537,8 @@ sub_80C2448: @ 80C2448 bx r0 .align 2, 0 _080C24C0: .4byte REG_BG0HOFS -_080C24C4: .4byte gUnknown_030042A4 -_080C24C8: .4byte gUnknown_030042A0 +_080C24C4: .4byte gBattle_BG0_X +_080C24C8: .4byte gBattle_BG0_Y _080C24CC: .4byte gBattle_BG1_X _080C24D0: .4byte gBattle_BG1_Y _080C24D4: .4byte gBattle_BG2_X diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3c255b461..41edcb514 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3065,7 +3065,7 @@ BattleScript_LocalBattleLost:: @ 81D8DD1 BattleScript_LocalBattleLostEnd: @ 81D8E01 end2 -gUnknown_081D8E02:: @ 81D8E02 +BattleScript_LinkBattleWonOrLost:: @ 81D8E02 printstring 5 waitmessage 64 atk57 @@ -3248,7 +3248,7 @@ BattleScript_DamagingWeatherContinues:: @ 81D8F7D setbyte gBattleCommunication, 0 BattleScript_DamagingWeatherLoop: @ 81D8F95 - copyarraywithindex gBankAttacker, gTurnOrder, gBattleCommunication, 1 + copyarraywithindex gBankAttacker, gBanksByTurnOrder, gBattleCommunication, 1 weatherdamage jumpifword EQUAL, gBattleMoveDamage, 0x0, BattleScript_DamagingWeatherLoopIncrement printfromtable gSandStormHailDmgStringIds diff --git a/data/data2a.s b/data/data2a.s index 3bd3f6ebd..bd455ce29 100644 --- a/data/data2a.s +++ b/data/data2a.s @@ -946,32 +946,32 @@ gSpriteAffineAnimTable_81F971C:: @ 81F971C .align 2 gUnknown_081FA640:: @ 81FA640 - .4byte sub_8013FE8 - .4byte sub_80147A0 - .4byte sub_80146F4 - .4byte sub_8014BF4 - .4byte sub_8014D50 - .4byte sub_8014D98 - .4byte sub_8014DF8 - .4byte sub_8014EBC - .4byte bs8_exit_by_flight - .4byte sub_8014FBC + .4byte HandleAction_UseMove + .4byte HandleAction_UseItem + .4byte HandleAction_Switch + .4byte HandleAction_Run + .4byte HandleAction_WatchesCarefully + .4byte HandleAction_SafariZoneBallThrow + .4byte HandleAction_ThrowPokeblock + .4byte HandleAction_GoNear + .4byte HandleAction_SafriZoneRun + .4byte HandleAction_Action9 .4byte sub_801B594 - .4byte bsB_exit_by_move - .4byte bsC_8016D70 - .4byte sub_8015060 + .4byte HandleAction_Action11 + .4byte HandleAction_ActionFinished + .4byte HandleAction_NothingIsFainted .align 2 gUnknown_081FA678:: @ 81FA678 .4byte bc_8013B1C .4byte HandleEndTurn_BattleWon - .4byte sub_8013B64 - .4byte sub_8013B64 - .4byte sub_8013BDC - .4byte sub_8013C9C - .4byte sub_8013C48 - .4byte sub_8013C9C - .4byte sub_8013C9C + .4byte HandleEndTurn_BattleLost + .4byte HandleEndTurn_BattleLost + .4byte HandleEndTurn_RanFromBattle + .4byte HandleEndTurn_FinishBattle + .4byte HandleEndTurn_MonFled + .4byte HandleEndTurn_FinishBattle + .4byte HandleEndTurn_FinishBattle gStatusConditionString_PoisonJpn:: @ 81FA69C .string "どく$$$$$$" diff --git a/include/battle.h b/include/battle.h index dd35cc303..4bcdfa6a9 100644 --- a/include/battle.h +++ b/include/battle.h @@ -227,10 +227,8 @@ struct BattleStruct /* 0x2000000 */ /*0x160D5*/ u8 unk160D5; /*0x160D6*/ u8 unk160D6; /*0x160D7*/ u8 unk160D7; - /*0x160D8*/ u8 unk160D8; - /*0x160D9*/ u8 unk160D9; - /*0x160DA*/ u8 unk160DA; - /*0x160DB*/ u8 unk160DB; + /*0x160D8*/ u8 unk160D8[2]; + /*0x160DA*/ u8 unk160DA[2]; /*0x160DC*/ u8 unk160DC; /*0x160DD*/ u8 intimidateBank; /*0x160DE*/ u8 unk160DE; @@ -606,7 +604,7 @@ void InitBattle(void); void sub_800EC9C(void); void sub_800F104(void); void sub_800F298(void); -void sub_800F808(void); +void BattleMainCB2(void); void sub_800F838(struct Sprite *); u8 CreateNPCTrainerParty(struct Pokemon *, u16); void sub_800FCFC(void); @@ -638,6 +636,9 @@ void sub_8011970(void); void sub_80119B4(void); void BattleBeginFirstTurn(void); void BattleTurnPassed(void); +void RunBattleScriptCommands_PopCallbacksStack(void); +void RunBattleScriptCommands(void); +bool8 TryRunFromBattle(u8 bank); // asm/battle_2.o void sub_8012324(void); @@ -654,14 +655,16 @@ u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check); u8 UpdateTurnCounters(void); u8 TurnBasedEffects(void); u8 sub_80170DC(); -u8 sub_80173A4(); +u8 HandleFaintedMonActions(); u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 move); u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn); void b_clear_atk_up_if_hit_flag_unless_enraged(void); +u8 GetMoveTarget(u16 move, u8 useMoveTarget); // asm/battle_4.o void AI_CalcDmg(u8, u8); u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def); +u8 BankGetTurnOrder(u8 bank); // asm/battle_5.o void nullsub_91(void); diff --git a/include/battle_ai.h b/include/battle_ai.h index 60ca5d000..c22ca8633 100644 --- a/include/battle_ai.h +++ b/include/battle_ai.h @@ -24,5 +24,6 @@ void sub_810745C(void); void AIStackPushVar(u8 *); u8 AIStackPop(void); void BattleAI_HandleItemUseBeforeAISetup(void); +void RecordAbilityBattle(u8 a, u8 b); #endif diff --git a/include/battle_message.h b/include/battle_message.h index 3e37a1ccd..9c27994ee 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -16,6 +16,143 @@ struct StringInfoBattle u8 textBuffs[3][0x10]; }; +// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3 + +#define B_BUFF_STRING 0 +#define B_BUFF_NUMBER 1 +#define B_BUFF_MOVE 2 +#define B_BUFF_TYPE 3 +#define B_BUFF_MON_NICK_WITH_PREFIX 4 +#define B_BUFF_STAT 5 +#define B_BUFF_SPECIES 6 +#define B_BUFF_MON_NICK 7 +#define B_BUFF_NEGATIVE_FLAVOR 8 +#define B_BUFF_ABILITY 9 +#define B_BUFF_ITEM 10 + +#define B_BUFF_PLACEHOLDER_BEGIN 0xFD +#define B_BUFF_EOS 0xFF + +#define PREPARE_FLAVOR_BUFFER(textVar, flavorId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_NEGATIVE_FLAVOR; \ + textVar[2] = flavorId; \ + textVar[3] = B_BUFF_EOS; \ +} + +#define PREPARE_STAT_BUFFER(textVar, statId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_STAT; \ + textVar[2] = statId; \ + textVar[3] = B_BUFF_EOS; \ +} + +#define PREPARE_ABILITY_BUFFER(textVar, abilityId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_ABILITY; \ + textVar[2] = abilityId; \ + textVar[3] = B_BUFF_EOS; \ +} + +#define PREPARE_TYPE_BUFFER(textVar, typeId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_TYPE; \ + textVar[2] = typeId; \ + textVar[3] = B_BUFF_EOS; \ +} + +#define PREPARE_BYTE_NUMBER_BUFFER(textVar, maxDigits, number) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_NUMBER; \ + textVar[2] = 1; \ + textVar[3] = maxDigits; \ + textVar[4] = (number); \ + textVar[5] = B_BUFF_EOS; \ +} + +#define PREPARE_HWORD_NUMBER_BUFFER(textVar, maxDigits, number) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_NUMBER; \ + textVar[2] = 2; \ + textVar[3] = maxDigits; \ + textVar[4] = (number); \ + textVar[5] = (number & 0x0000FF00) >> 8; \ + textVar[6] = B_BUFF_EOS; \ +} + +#define PREPARE_WORD_NUMBER_BUFFER(textVar, maxDigits, number) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_NUMBER; \ + textVar[2] = 4; \ + textVar[3] = maxDigits; \ + textVar[4] = (number); \ + textVar[5] = (number & 0x0000FF00) >> 8; \ + textVar[6] = (number & 0x00FF0000) >> 16; \ + textVar[7] = (number & 0xFF000000) >> 24; \ + textVar[8] = B_BUFF_EOS; \ +} + +#define PREPARE_STRING_BUFFER(textVar, stringId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_STRING; \ + textVar[2] = stringId; \ + textVar[3] = (stringId & 0xFF00) >> 8; \ + textVar[4] = B_BUFF_EOS; \ +} + +#define PREPARE_MOVE_BUFFER(textVar, move) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_MOVE; \ + textVar[2] = move; \ + textVar[3] = (move & 0xFF00) >> 8; \ + textVar[4] = B_BUFF_EOS; \ +} + +#define PREPARE_ITEM_BUFFER(textVar, item) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_ITEM; \ + textVar[2] = item; \ + textVar[3] = (item & 0xFF00) >> 8; \ + textVar[4] = B_BUFF_EOS; \ +} + +#define PREPARE_SPECIES_BUFFER(textVar, species) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_SPECIES; \ + textVar[2] = species; \ + textVar[3] = (species & 0xFF00) >> 8; \ + textVar[4] = B_BUFF_EOS; \ +} + +#define PREPARE_MON_NICK_WITH_PREFIX_BUFFER(textVar, bank, partyId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX; \ + textVar[2] = bank; \ + textVar[3] = partyId; \ + textVar[4] = B_BUFF_EOS; \ +} + +#define PREPARE_MON_NICK_BUFFER(textVar, bank, partyId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_MON_NICK; \ + textVar[2] = bank; \ + textVar[3] = partyId; \ + textVar[4] = B_BUFF_EOS; \ +} + void BufferStringBattle(u16 stringID); u32 StrCpyDecodeToDisplayedStringBattle(const u8* src); u32 StrCpyDecodeBattle(const u8* src, u8* dst); diff --git a/include/constants/battle_constants.h b/include/constants/battle_constants.h index 892b3e7f6..2b973b4d9 100644 --- a/include/constants/battle_constants.h +++ b/include/constants/battle_constants.h @@ -1,6 +1,13 @@ #ifndef GUARD_CONSTANTS_BATTLE_CONSTANTS_H #define GUARD_CONSTANTS_BATTLE_CONSTANTS_H +// Bank sides +#define SIDE_PLAYER 0x0 +#define SIDE_OPPONENT 0x1 + +#define BIT_SIDE 0x1 +#define BIT_MON 0x2 + #define STATUS_SLEEP 0x7 #define STATUS_POISON 0x8 #define STATUS_BURN 0x10 @@ -76,6 +83,7 @@ #define HITMARKER_x800000 0x00800000 #define HITMARKER_GRUDGE 0x01000000 #define HITMARKER_OBEYS 0x02000000 +#define HITMARKER_x4000000 0x04000000 #define HITMARKER_x8000000 0x08000000 #define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C)) #define HITMARKER_UNK(bank) ((0x10000000 << bank)) @@ -216,6 +224,27 @@ #define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)) #define WEATHER_HAIL (1 << 7) +#define MOVE_TARGET_SELECTED 0x0 +#define MOVE_TARGET_DEPENDS 0x1 +#define MOVE_TARGET_USER 0x2 +#define MOVE_TARGET_RANDOM 0x4 +#define MOVE_TARGET_x10 0x10 +#define MOVE_TARGET_BOTH 0x8 +#define MOVE_TARGET_FOES_AND_ALLY 0x20 +#define MOVE_TARGET_OPPONENTS_FIELD 0x40 + +// array entries for battle communication +#define MULTIUSE_STATE 0x0 +#define CURSOR_POSITION 0x1 +#define TASK_ID 0x1 // task Id and cursor position share the same field +#define SPRITES_INIT_STATE1 0x1 // shares the Id as well +#define SPRITES_INIT_STATE2 0x2 +#define MOVE_EFFECT_BYTE 0x3 +#define ACTIONS_CONFIRMED_COUNT 0x4 +#define MULTISTRING_CHOOSER 0x5 +#define MSG_DISPLAY 0x7 +#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8 + // status animation table #define B_ANIM_STATUS_PSN 0x0 #define B_ANIM_STATUS_CONFUSION 0x1 @@ -262,4 +291,12 @@ #define B_ANIM_SUBSTITUTE_TO_MON 0x5 #define B_ANIM_MON_TO_SUBSTITUTE 0x6 +// AI switch items +#define AI_ITEM_FULL_RESTORE 1 +#define AI_ITEM_HEAL_HP 2 +#define AI_ITEM_CURE_CONDITION 3 +#define AI_ITEM_X_STAT 4 +#define AI_ITEM_GUARD_SPECS 5 +#define AI_ITEM_NOT_RECOGNIZABLE 6 + #endif // GUARD_CONSTANTS_BATTLE_CONSTANTS_H diff --git a/include/ewram.h b/include/ewram.h index d5e53393b..17ca3508a 100755 --- a/include/ewram.h +++ b/include/ewram.h @@ -134,6 +134,8 @@ extern u8 gSharedMem[]; #define ewram1608Carr(bank) (gSharedMem[0x1608C + bank]) #define EWRAM_1609D (gSharedMem[0x1609D]) #define ewram160A1 (gSharedMem[0x160A1]) +#define ewram160A4 (gSharedMem[0x160A4]) +#define ewram160A5 (gSharedMem[0x160A5]) #define ewram160A6 (gSharedMem[0x160A6]) #define ewram160A8 (gSharedMem[0x160A8]) #define ewram160A9 (gSharedMem[0x160A9]) @@ -156,9 +158,12 @@ extern u8 gSharedMem[]; #define USED_HELD_ITEM(bank) ((((u16*)(&gSharedMem[0x160CC + bank * 2])))) #define USED_HELD_ITEMS(bank) (*(u16 *)&gSharedMem[0x160CC + 2 * (bank)]) #define ewram160D4(bank) (gSharedMem[0x160D4 + (bank / 2) * 2]) +#define ewram160D8(bank) (gSharedMem[0x160D8 + (bank / 2)]) +#define ewram160DA(bank) (gSharedMem[0x160DA + (bank / 2)]) #define ewram160DD (gSharedMem[0x160DD]) #define ewram160E0(i) (gSharedMem[0x160E0 + i]) #define ewram160E6 (gSharedMem[0x160E6]) +#define ewram160E7 (gSharedMem[0x160E7]) #define CHOICED_MOVE(bank) (((u16*)(&gSharedMem[0x160E8 + bank * 2]))) #define ewram160E8 ((u8 *)(gSharedMem + 0x160E8)) #define ewram160E8arr(i) (gSharedMem[0x160E8 + i]) diff --git a/include/pokemon.h b/include/pokemon.h index b6c6e0030..71b35e65c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -363,6 +363,16 @@ enum STAT_STAGE_EVASION, // 7 }; +enum +{ + STAT_HP, // 0 + STAT_ATK, // 1 + STAT_DEF, // 2 + STAT_SPD, // 3 + STAT_SPATK, // 4 + STAT_SPDEF, // 5 +}; + struct BaseStats { /*0x00*/ u8 baseHP; @@ -613,6 +623,8 @@ bool8 IsPokeSpriteNotFlipped(u16); u8 GetLevelUpMovesBySpecies(u16, u16 *); u8 TryIncrementMonLevel(struct Pokemon *); bool8 IsShiny(struct Pokemon *mon); +void RandomlyGivePartyPokerus(struct Pokemon *party); +void PartySpreadPokerus(struct Pokemon *party); struct Sprite *sub_80F7920(u16, u16, const u16 *); diff --git a/include/roamer.h b/include/roamer.h index 9d5f3c4ed..86908bd00 100644 --- a/include/roamer.h +++ b/include/roamer.h @@ -7,5 +7,7 @@ void UpdateLocationHistoryForRoamer(void); void RoamerMoveToOtherLocationSet(void); void RoamerMove(); u8 TryStartRoamerEncounter(void); +void UpdateRoamerHPStatus(struct Pokemon *mon); +void SetRoamerInactive(void); #endif diff --git a/include/tv.h b/include/tv.h index 91b871f71..2edccb365 100644 --- a/include/tv.h +++ b/include/tv.h @@ -107,5 +107,6 @@ void UpdateTVShowsPerDay(u16); void sub_80C045C(); void sub_80BF088(u8, s32); void sub_80BFD20(void); +void PutPokemonTodayCaughtOnAir(void); #endif // GUARD_TV_H diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 92e9e3e1d..a30245081 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1,13 +1,17 @@ #include "global.h" #include "constants/abilities.h" #include "battle.h" +#include "battle_ai.h" #include "battle_interface.h" +#include "battle_message.h" #include "battle_setup.h" #include "data2.h" #include "event_data.h" +#include "evolution_scene.h" #include "item.h" #include "link.h" #include "main.h" +#include "m4a.h" #include "name_string_util.h" #include "palette.h" #include "party_menu.h" @@ -15,6 +19,7 @@ #include "pokedex.h" #include "pokemon.h" #include "random.h" +#include "roamer.h" #include "rom3.h" #include "rom_8077ABC.h" #include "rom_8094928.h" @@ -22,10 +27,12 @@ #include "sound.h" #include "constants/species.h" #include "sprite.h" +#include "string_util.h" #include "task.h" #include "text.h" #include "trainer.h" #include "trig.h" +#include "tv.h" #include "unknown_task.h" #include "util.h" #include "constants/battle_move_effects.h" @@ -60,7 +67,7 @@ extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; extern u8 gStatStageRatios[][2]; -extern u8 gUnknown_02024A76[4]; +extern u8 gActionsByTurnOrder[4]; extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; extern u8 gBattleBufferB[][0x200]; extern u8 gActiveBank; @@ -68,7 +75,7 @@ extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; extern u8 gCurrentActionFuncId; -extern u8 gTurnOrder[]; +extern u8 gBanksByTurnOrder[]; extern struct UnknownStruct12 gUnknown_02024AD0[]; extern u8 gObjectBankIDs[]; extern u16 gCurrentMove; @@ -82,7 +89,7 @@ extern u16 gLastUsedMove[]; extern u16 gMoveHitWith[]; extern u16 gUnknown_02024C44[]; extern u16 gUnknown_02024C4C[]; -extern u16 gLockedMove[]; +extern u16 gLockedMoves[]; extern u8 gUnknown_02024C5C[]; extern u16 gChosenMovesByBanks[]; extern u32 gHitMarker; @@ -112,8 +119,8 @@ extern u16 gBattle_WIN0V; extern u16 gBattle_BG2_Y; extern u32 gUnknown_03004284; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gBattle_WIN0H; extern MainCallback gPreBattleCallback1; @@ -140,10 +147,33 @@ extern u8 gCurrentTurnActionNumber; extern void (* const gUnknown_081FA640[])(void); extern void (* const gUnknown_081FA678[])(void); extern u8* gBattlescriptCurrInstr; -extern u8 gUnknown_081D8E02[]; +extern u8 BattleScript_LinkBattleWonOrLost[]; extern u8 BattleScript_PayDayMoneyAndPickUpItems[]; extern u8 gUnknown_081D8E0D[]; extern u8 BattleScript_LocalTrainerBattleWon[]; +extern u8 BattleScript_LocalBattleLost[]; +extern u8 BattleScript_GotAwaySafely[]; +extern u8 BattleScript_SmokeBallEscape[]; +extern u8 BattleScript_RanAwayUsingMonAbility[]; +extern u8 BattleScript_WildMonFled[]; +extern u8 BattleScript_ActionSwitch[]; +extern u8 BattleScript_PrintFailedToRunString[]; +extern const BattleCmdFunc gBattleScriptingCommandsTable[]; +extern u8 gCritMultiplier; +extern u8 gCurrMovePos; +extern u8 gUnknown_02024BE5; +extern u16 gChosenMove; +extern u8* gBattleScriptsForMoveEffects[]; +extern u16 gLastUsedItem; +extern u8 * const gBattlescriptsForBallThrow[]; +extern u8 * const gBattlescriptsForRunningByItem[]; +extern u8 * const gBattlescriptsForUsingItem[]; +extern u8 * const gBattlescriptsForSafariActions[]; +extern u8 gBattleTextBuff2[]; +extern u8 gNumSafariBalls; +extern u8 gUnknown_081FA70C[][3]; +extern u8 gUnknown_081FA71B[]; +extern u8 gUnknown_081FA71F[]; void b_call_bc_move_exec(const u8* BS_ptr); @@ -153,7 +183,11 @@ void SetActionsAndBanksTurnOrder(void); static void TurnValuesCleanUp(u8); void SpecialStatusesClear(void); static void RunTurnActionsFunctions(void); -void sub_8013C9C(); +void HandleEndTurn_FinishBattle(); +static void FreeResetData_ReturnToOvOrDoEvolutions(void); +void TryEvolvePokemon(void); +static void ReturnFromBattleToOverworld(void); +static void WaitForEvoSceneToFinish(void); void sub_800E7C4(void) { @@ -202,8 +236,8 @@ void InitBattle(void) sub_80895F8(gUnknown_081F9674); SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -491,7 +525,7 @@ void sub_800EC9C(void) { gPreBattleCallback1 = gMain.callback1; gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { gTrainerBattleOpponent = 0x800; @@ -849,7 +883,7 @@ void sub_800F298(void) { gPreBattleCallback1 = gMain.callback1; gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { gTrainerBattleOpponent = 0x800; @@ -860,7 +894,7 @@ void sub_800F298(void) } } -void sub_800F808(void) +void BattleMainCB2(void) { AnimateSprites(); BuildOamBuffer(); @@ -1024,8 +1058,8 @@ void sub_800FCD4(void) void sub_800FCFC(void) { Random(); // unused return value - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; @@ -1178,8 +1212,8 @@ void c2_8011A1C(void) } SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -1549,7 +1583,7 @@ void sub_8010874(void) gUnknown_02024C44[i] = 0; gUnknown_02024C4C[i] = 0; gUnknown_02024C5C[i] = 0xFF; - gLockedMove[i] = 0; + gLockedMoves[i] = 0; gUnknown_02024C2C[i] = 0; eFlashFireArr.arr[i] = 0; } @@ -2098,12 +2132,12 @@ void BattleBeginFirstTurn(void) if (ewram16058 == 0) { for (i = 0; i < gNoOfAllBanks; i++) - gTurnOrder[i] = i; + gBanksByTurnOrder[i] = i; for (i = 0; i < gNoOfAllBanks - 1; i++) { for (j = i + 1; j < gNoOfAllBanks; j++) { - if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 1) != 0) + if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 1) != 0) SwapTurnOrder(i, j); } } @@ -2115,7 +2149,7 @@ void BattleBeginFirstTurn(void) } while (ewram16058 < gNoOfAllBanks) { - if (AbilityBattleEffects(0, gTurnOrder[ewram16058], 0, 0, 0) != 0) + if (AbilityBattleEffects(0, gBanksByTurnOrder[ewram16058], 0, 0, 0) != 0) r9++; ewram16058++; if (r9 != 0) @@ -2127,7 +2161,7 @@ void BattleBeginFirstTurn(void) return; while (ewram160F9 < gNoOfAllBanks) { - if (ItemBattleEffects(0, gTurnOrder[ewram160F9], 0) != 0) + if (ItemBattleEffects(0, gBanksByTurnOrder[ewram160F9], 0) != 0) r9++; ewram160F9++; if (r9 != 0) @@ -2199,7 +2233,7 @@ void BattleTurnPassed(void) if (TurnBasedEffects() != 0) return; } - if (sub_80173A4() != 0) + if (HandleFaintedMonActions() != 0) return; ewram16059 = 0; if (sub_80170DC() != 0) @@ -3861,13 +3895,13 @@ void SwapTurnOrder(u8 a, u8 b) { int temp; - temp = gUnknown_02024A76[a]; - gUnknown_02024A76[a] = gUnknown_02024A76[b]; - gUnknown_02024A76[b] = temp; + temp = gActionsByTurnOrder[a]; + gActionsByTurnOrder[a] = gActionsByTurnOrder[b]; + gActionsByTurnOrder[b] = temp; - temp = gTurnOrder[a]; - gTurnOrder[a] = gTurnOrder[b]; - gTurnOrder[b] = temp; + temp = gBanksByTurnOrder[a]; + gBanksByTurnOrder[a] = gBanksByTurnOrder[b]; + gBanksByTurnOrder[b] = temp; } // Determines which of the two given mons will strike first in a battle. @@ -4024,8 +4058,8 @@ void SetActionsAndBanksTurnOrder(void) { for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) { - gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; - gTurnOrder[var] = gActiveBank; + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; var++; } } @@ -4053,15 +4087,15 @@ void SetActionsAndBanksTurnOrder(void) if (var == 5) { - gUnknown_02024A76[0] = gActionForBanks[gActiveBank]; - gTurnOrder[0] = gActiveBank; + gActionsByTurnOrder[0] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[0] = gActiveBank; var = 1; for (i = 0; i < gNoOfAllBanks; i++) { if (i != gActiveBank) { - gUnknown_02024A76[var] = gActionForBanks[i]; - gTurnOrder[var] = i; + gActionsByTurnOrder[var] = gActionForBanks[i]; + gBanksByTurnOrder[var] = i; var++; } } @@ -4075,8 +4109,8 @@ void SetActionsAndBanksTurnOrder(void) { if (gActionForBanks[gActiveBank] == ACTION_USE_ITEM || gActionForBanks[gActiveBank] == ACTION_SWITCH) { - gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; - gTurnOrder[var] = gActiveBank; + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; var++; } } @@ -4084,8 +4118,8 @@ void SetActionsAndBanksTurnOrder(void) { if (gActionForBanks[gActiveBank] != ACTION_USE_ITEM && gActionForBanks[gActiveBank] != ACTION_SWITCH) { - gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; - gTurnOrder[var] = gActiveBank; + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; var++; } } @@ -4093,12 +4127,12 @@ void SetActionsAndBanksTurnOrder(void) { for (j = i + 1; j < gNoOfAllBanks; j++) { - u8 bank1 = gTurnOrder[i]; - u8 bank2 = gTurnOrder[j]; - if (gUnknown_02024A76[i] != ACTION_USE_ITEM - && gUnknown_02024A76[j] != ACTION_USE_ITEM - && gUnknown_02024A76[i] != ACTION_SWITCH - && gUnknown_02024A76[j] != ACTION_SWITCH) + u8 bank1 = gBanksByTurnOrder[i]; + u8 bank2 = gBanksByTurnOrder[j]; + if (gActionsByTurnOrder[i] != ACTION_USE_ITEM + && gActionsByTurnOrder[j] != ACTION_USE_ITEM + && gActionsByTurnOrder[i] != ACTION_SWITCH + && gActionsByTurnOrder[j] != ACTION_SWITCH) { if (GetWhoStrikesFirst(bank1, bank2, FALSE)) SwapTurnOrder(i, j); @@ -4184,7 +4218,7 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) { // something stupid needed to match u8 zero; - gCurrentActionFuncId = gUnknown_02024A76[(zero = 0)]; + gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)]; } gDynamicBasePower = 0; @@ -4227,7 +4261,7 @@ void HandleEndTurn_BattleWon(void) { gBattleTextBuff1[0] = gBattleOutcome; gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1); - gBattlescriptCurrInstr = gUnknown_081D8E02; + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; gBattleOutcome &= ~(OUTCOME_LINK_BATTLE_RUN); } else if (gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)) @@ -4266,5 +4300,1091 @@ void HandleEndTurn_BattleWon(void) gBattlescriptCurrInstr = BattleScript_PayDayMoneyAndPickUpItems; } - gBattleMainFunc = sub_8013C9C; + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_BattleLost(void) +{ + gCurrentActionFuncId = 0; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTextBuff1[0] = gBattleOutcome; + gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1); + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; + gBattleOutcome &= ~(OUTCOME_LINK_BATTLE_RUN); + } + else + { + gBattlescriptCurrInstr = BattleScript_LocalBattleLost; + } + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_RanFromBattle(void) +{ + gCurrentActionFuncId = 0; + + switch (gProtectStructs[gBankAttacker].fleeFlag) + { + default: + gBattlescriptCurrInstr = BattleScript_GotAwaySafely; + break; + case 1: + gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; + break; + case 2: + gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; + break; + } + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_MonFled(void) +{ + gCurrentActionFuncId = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, gBattlePartyID[gBankAttacker]); + gBattlescriptCurrInstr = BattleScript_WildMonFled; + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_FinishBattle(void) +{ + if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + { + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_FIRST_BATTLE + | BATTLE_TYPE_SAFARI + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_WALLY_TUTORIAL + | BATTLE_TYPE_BATTLE_TOWER))) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == SIDE_PLAYER) + { + if (gBattleResults.poke1Species == SPECIES_NONE) + { + gBattleResults.poke1Species = gBattleMons[gActiveBank].species; + StringCopy(gBattleResults.pokeString1, gBattleMons[gActiveBank].nickname); + } + else + { + gBattleResults.opponentSpecies = gBattleMons[gActiveBank].species; + StringCopy(gBattleResults.pokeString2, gBattleMons[gActiveBank].nickname); + } + } + } + PutPokemonTodayCaughtOnAir(); + } + + BeginFastPaletteFade(3); + FadeOutMapMusic(5); + gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions; + gCB2_AfterEvolution = BattleMainCB2; + } + else + { + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +static void FreeResetData_ReturnToOvOrDoEvolutions(void) +{ + if (!gPaletteFade.active) + { + ResetSpriteData(); + if (gLeveledUpInBattle == 0 || gBattleOutcome != BATTLE_WON) + { + gBattleMainFunc = ReturnFromBattleToOverworld; + return; + } + else + { + gBattleMainFunc = TryEvolvePokemon; + } + } +} + +void TryEvolvePokemon(void) +{ + s32 i; + + while (gLeveledUpInBattle != 0) + { + for (i = 0; i < 6; i++) + { + if (gLeveledUpInBattle & gBitTable[i]) + { + u16 species; + u8 levelUpBits = gLeveledUpInBattle; + + levelUpBits &= ~(gBitTable[i]); + gLeveledUpInBattle = levelUpBits; + + species = GetEvolutionTargetSpecies(&gPlayerParty[i], 0, levelUpBits); + if (species != SPECIES_NONE) + { + gBattleMainFunc = WaitForEvoSceneToFinish; + EvolutionScene(&gPlayerParty[i], species, 0x81, i); + return; + } + } + } + } + + gBattleMainFunc = ReturnFromBattleToOverworld; +} + +static void WaitForEvoSceneToFinish(void) +{ + if (gMain.callback2 == BattleMainCB2) + gBattleMainFunc = TryEvolvePokemon; +} + +static void ReturnFromBattleToOverworld(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + RandomlyGivePartyPokerus(gPlayerParty); + PartySpreadPokerus(gPlayerParty); + } + + if (gBattleTypeFlags & BATTLE_TYPE_LINK && gReceivedRemoteLinkPlayers != 0) + return; + + gSpecialVar_Result = gBattleOutcome; + gMain.inBattle = 0; + gMain.callback1 = gPreBattleCallback1; + + if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) + { + UpdateRoamerHPStatus(&gEnemyParty[0]); + if (gBattleOutcome == BATTLE_WON || gBattleOutcome == BATTLE_CAUGHT) + SetRoamerInactive(); + } + + m4aSongNumStop(0x5A); + SetMainCallback2(gMain.savedCallback); +} + +void RunBattleScriptCommands_PopCallbacksStack(void) +{ + if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + { + if (B_FUNCTION_STACK->size != 0) + B_FUNCTION_STACK->size--; + gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; + } + else + { + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +void RunBattleScriptCommands(void) +{ + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); +} + +void HandleAction_UseMove(void) +{ + u8 side; + u8 var = 4; + + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + + if (ewram160A6 & gBitTable[gBankAttacker]) + { + gCurrentActionFuncId = ACTION_FINISHED; + return; + } + + gCritMultiplier = 1; + eDmgMultiplier = 1; + ewram160E7 = 0; + gBattleMoveFlags = 0; + gMultiHitCounter = 0; + gBattleCommunication[6] = 0; + gCurrMovePos = gUnknown_02024BE5 = ewram1608Carr(gBankAttacker); + + // choose move + if (gProtectStructs[gBankAttacker].onlyStruggle) + { + gProtectStructs[gBankAttacker].onlyStruggle = 0; + gCurrentMove = gChosenMove = MOVE_STRUGGLE; + gHitMarker |= HITMARKER_NO_PPDEDUCT; + ewram16010arr(gBankAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); + } + else if (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE) + { + gCurrentMove = gChosenMove = gLockedMoves[gBankAttacker]; + } + // encore forces you to use the same move + else if (gDisableStructs[gBankAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBankAttacker].encoredMove == gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos]) + { + gCurrentMove = gChosenMove = gDisableStructs[gBankAttacker].encoredMove; + gCurrMovePos = gUnknown_02024BE5 = gDisableStructs[gBankAttacker].encoredMovePos; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + // check if the encored move wasn't overwritten + else if (gDisableStructs[gBankAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBankAttacker].encoredMove != gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos]) + { + gCurrMovePos = gUnknown_02024BE5 = gDisableStructs[gBankAttacker].encoredMovePos; + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + gDisableStructs[gBankAttacker].encoredMove = MOVE_NONE; + gDisableStructs[gBankAttacker].encoredMovePos = 0; + gDisableStructs[gBankAttacker].encoreTimer1 = 0; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else if (gBattleMons[gBankAttacker].moves[gCurrMovePos] != gChosenMovesByBanks[gBankAttacker]) + { + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else + { + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + } + + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + gBattleResults.lastUsedMove = gCurrentMove; + else + gBattleResults.opponentMove = gCurrentMove; + + // choose target + side = GetBankSide(gBankAttacker) ^ BIT_SIDE; + if (gSideTimers[side].followmeTimer != 0 + && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED + && GetBankSide(gBankAttacker) != GetBankSide(gSideTimers[side].followmeTarget) + && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + { + gBankTarget = gSideTimers[side].followmeTarget; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && gSideTimers[side].followmeTimer == 0 + && (gBattleMoves[gCurrentMove].power != 0 + || gBattleMoves[gCurrentMove].target != MOVE_TARGET_x10) + && gBattleMons[ewram16010arr(gBankAttacker)].ability != ABILITY_LIGHTNING_ROD + && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + { + side = GetBankSide(gBankAttacker); + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (side != GetBankSide(gActiveBank) + && ewram16010arr(gBankAttacker) != gActiveBank + && gBattleMons[gActiveBank].ability == ABILITY_LIGHTNING_ROD + && BankGetTurnOrder(gActiveBank) < var) + { + var = BankGetTurnOrder(gActiveBank); + } + } + if (var == 4) + { + if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON2); + } + else + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON2); + } + } + else + { + gBankTarget = ewram16010arr(gBankAttacker); + } + + if (gAbsentBankFlags & gBitTable[gBankTarget]) + { + if (GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + else + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_SIDE); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + } + else + { + gActiveBank = gBanksByTurnOrder[var]; + RecordAbilityBattle(gActiveBank, gBattleMons[gActiveBank].ability); + gSpecialStatuses[gActiveBank].lightningRodRedirected = 1; + gBankTarget = gActiveBank; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON2); + } + else + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON2); + } + + if (gAbsentBankFlags & gBitTable[gBankTarget] + && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + else + { + gBankTarget = ewram16010arr(gBankAttacker); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + { + if (GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + else + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_SIDE); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + } + + gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_Switch(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gActionSelectionCursor[gBankAttacker] = 0; + gMoveSelectionCursor[gBankAttacker] = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, ewram16064arr(gBankAttacker)) + + ewram16003 = gBankAttacker; + gBattlescriptCurrInstr = BattleScript_ActionSwitch; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + + if (gBattleResults.unk2 < 255) + gBattleResults.unk2++; +} + +#ifdef NONMATCHING +void HandleAction_UseItem(void) +{ + gBankAttacker = gBankTarget = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gDisableStructs[gBankAttacker].furyCutterCounter = 0; + gLastUsedItem = gBattleBufferB[gBankAttacker][1] | (gBattleBufferB[gBankAttacker][2] << 8); + + if (gLastUsedItem <= ITEM_PREMIER_BALL) // is ball + { + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; + } + else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) + { + gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; + } + else if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; + } + else + { + ewram16003 = gBankAttacker; + + switch (ewram160D8(gBankAttacker)) + { + case AI_ITEM_FULL_RESTORE: + case AI_ITEM_HEAL_HP: + break; + case AI_ITEM_CURE_CONDITION: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (ewram160DA(gBankAttacker) & 1) + { + if (ewram160DA(gBankAttacker) & 0x3E) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + while (!(ewram160DA(gBankAttacker) & 1)) + { + ewram160DA(gBankAttacker) /= 2; + gBattleCommunication[MULTISTRING_CHOOSER]++; + } + } + break; + case AI_ITEM_X_STAT: + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + if (ewram160DA(gBankAttacker) & 0x80) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) + PREPARE_STRING_BUFFER(gBattleTextBuff2, 0xD2) + + while (!(ewram160DA(gBankAttacker) & 1)) + { + ewram160DA(gBankAttacker) /= 2; + gBattleTextBuff1[2]++; + } + + ewram160A4 = gBattleTextBuff1[2] + 14; + ewram160A5 = 0; + } + break; + case AI_ITEM_GUARD_SPECS: + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + } + + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[ewram160D8(gBankAttacker)]; + } + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} +#else +__attribute__((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 GetBankSide\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) +{ + bool8 effect = FALSE; + u8 holdEffect; + u8 speedVar; + + if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[bank].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[bank].item); + + gStringBank = bank; + + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + { + gLastUsedItem = gBattleMons[bank].item ; + gProtectStructs[bank].fleeFlag = 1; + effect++; + } + else if (gBattleMons[bank].ability == ABILITY_RUN_AWAY) + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[bank].fleeFlag = 2; + effect++; + } + else + { + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (gBattleMons[bank].speed < gBattleMons[bank ^ BIT_SIDE].speed) + { + speedVar = (gBattleMons[bank].speed * 128) / (gBattleMons[bank ^ BIT_SIDE].speed) + (ewram16078 * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else // same speed or faster + { + effect++; + } + } + + ewram16078++; + } + + if (effect) + { + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_RAN; + } + + return effect; +} + +void HandleAction_Run(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gCurrentTurnActionNumber = gNoOfAllBanks; + + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == SIDE_PLAYER) + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + gBattleOutcome |= BATTLE_LOST; + } + else + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + gBattleOutcome |= BATTLE_WON; + } + } + + gBattleOutcome |= OUTCOME_LINK_BATTLE_RUN; + } + else + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (!TryRunFromBattle(gBankAttacker)) // failed to run away + { + gBattleMons[gBankAttacker].status2 &= ~STATUS2_DESTINY_BOND; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + } + } + else + { + if (gBattleMons[gBankAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + } + else + { + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_POKE_FLED; + } + } + } +} + +void HandleAction_WatchesCarefully(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_SafariZoneBallThrow(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gNumSafariBalls--; + gLastUsedItem = ITEM_SAFARI_BALL; + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_ThrowPokeblock(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBankAttacker][1] - 1; + gLastUsedItem = gBattleBufferB[gBankAttacker][2]; + + if (ewram16087 < 3) + ewram16087++; + if (ewram16088 > 1) + { + if (ewram16088 < gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]) + ewram16088 = 1; + else + ewram16088 -= gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]; + } + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_GoNear(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + ewram16089 += gUnknown_081FA71B[ewram16086]; + if (ewram16089 > 20) + ewram16089 = 20; + + ewram16088 += gUnknown_081FA71F[ewram16086]; + if (ewram16088 > 20) + ewram16088 = 20; + + if (ewram16086 < 3) + { + ewram16086++; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_SafriZoneRun(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + PlaySE(SE_NIGERU); + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_RAN; +} + +void HandleAction_Action9(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, gBattlePartyID[gBankAttacker]) + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + gActionsByTurnOrder[1] = ACTION_FINISHED; +} + +void HandleAction_Action11(void) +{ + if (!HandleFaintedMonActions()) + { + ewram16059 = 0; + gCurrentActionFuncId = ACTION_FINISHED; + } +} + +void HandleAction_NothingIsFainted(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_x8000000 | HITMARKER_x4000000); +} + +void HandleAction_ActionFinished(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + SpecialStatusesClear(); + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_x8000000 | HITMARKER_x4000000); + + gBattleMoveDamage = 0; + ewram16002 = 0; + ewram160A1 = 0; + gMoveHitWith[gBankAttacker] = 0; + gUnknown_02024C44[gBankAttacker] = 0; + eDynamicMoveType = 0; + gDynamicBasePower = 0; + ewram1600C = 0; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + eMultihitMoveEffect = 0; + ewram17130 = 0; } diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index cfa188fa4..92e0404cc 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -33,7 +33,7 @@ extern u8 gNoOfAllBanks; extern u32 gStatuses3[4]; extern u8 gBankAttacker; extern u8 gBankTarget; -extern u8 gTurnOrder[4]; +extern u8 gBanksByTurnOrder[4]; extern u16 gSideAffecting[2]; extern u16 gBattleWeather; extern void (*gBattleMainFunc)(void); @@ -87,8 +87,6 @@ u8 weather_get_current(void); void b_push_move_exec(u8* BS_ptr); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); -void sub_8013F54(void); -void sub_8013FBC(void); s8 GetPokeFlavourRelation(u32 pid, u8 flavor); extern u8 BattleScript_MoveSelectionDisabledMove[]; @@ -372,14 +370,14 @@ u8 UpdateTurnCounters(void) case 0: for (i = 0; i < gNoOfAllBanks; i++) { - gTurnOrder[i] = i; + gBanksByTurnOrder[i] = i; } for (i = 0; i < gNoOfAllBanks - 1; i++) { s32 j; for (j = i + 1; j < gNoOfAllBanks; j++) { - if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 0)) + if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 0)) SwapTurnOrder(i, j); } } @@ -496,7 +494,7 @@ u8 UpdateTurnCounters(void) case 5: while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks) { - gActiveBank = gTurnOrder[BATTLE_STRUCT->turnSideTracker]; + gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker]; if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) { gBankTarget = gActiveBank; @@ -606,7 +604,7 @@ u8 TurnBasedEffects(void) gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE) { - gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->turnEffectsBank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) { BATTLE_STRUCT->turnEffectsBank++; @@ -948,7 +946,7 @@ bool8 sub_80170DC(void) // handle future sight and perish song case 1: // perish song while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) { - gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) BATTLE_STRUCT->sub80170DC_Bank++; else @@ -984,9 +982,9 @@ bool8 sub_80170DC(void) // handle future sight and perish song return 0; } -#define sub_80173A4_MAX_CASE 7 +#define HandleFaintedMonActions_MAX_CASE 7 -bool8 sub_80173A4(void) +bool8 HandleFaintedMonActions(void) { if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) return 0; @@ -1053,7 +1051,7 @@ bool8 sub_80173A4(void) case 7: break; } - } while (BATTLE_STRUCT->sub80173A4_Tracker != sub_80173A4_MAX_CASE); + } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); return 0; } @@ -2255,7 +2253,7 @@ void b_call_bc_move_exec(u8* BS_ptr) { gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = sub_8013F54; + gBattleMainFunc = RunBattleScriptCommands_PopCallbacksStack; gCurrentActionFuncId = 0; } @@ -2264,7 +2262,7 @@ void b_push_move_exec(u8* BS_ptr) b_movescr_stack_push_cursor(); gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = sub_8013FBC; + gBattleMainFunc = RunBattleScriptCommands; } enum diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index d9789f76d..3b1092e45 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -35,8 +35,8 @@ extern u8 gActiveBank; extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[4]; -extern u8 gTurnOrder[4]; -extern u8 gUnknown_02024A76[4]; +extern u8 gBanksByTurnOrder[4]; +extern u8 gActionsByTurnOrder[4]; extern u16 gCurrentMove; extern u8 gLastUsedAbility; extern u16 gBattleWeather; @@ -45,7 +45,7 @@ extern u8 gEffectBank; extern u8 gAbsentBankFlags; extern u8 gMultiHitCounter; extern u16 gLastUsedMove[4]; -extern u16 gLockedMove[4]; +extern u16 gLockedMoves[4]; extern u16 gChosenMovesByBanks[4]; extern u16 gSideAffecting[2]; extern u16 gPauseCounterBattle; @@ -145,10 +145,9 @@ bool32 IsHMMove2(u16 move); void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0); void nullsub_6(void); void ReshowBattleScreenAfterMenu(void); -void sub_800F808(void); +void BattleMainCB2(void); void AddMoney(u32* moneySaveblock, u32 to_give); void sub_80156DC(void); //set sentpokes value -bool8 sub_8014AB8(u8 bank); //can run from battle u8 CountAliveMons(u8 caseID); void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); u8 CanRunFromBattle(void); @@ -1074,11 +1073,11 @@ static void atk00_attackcanceler(void) } for (i = 0; i < gNoOfAllBanks; i++) { - if ((gProtectStructs[gTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) + if ((gProtectStructs[gBanksByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) { - PressurePPLose(gBankAttacker, gTurnOrder[i], MOVE_SNATCH); - gProtectStructs[gTurnOrder[i]].stealMove = 0; - BATTLE_STRUCT->scriptingActive = gTurnOrder[i]; + PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH); + gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0; + BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i]; b_movescr_stack_push_cursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; return; @@ -2253,7 +2252,7 @@ u8 BankGetTurnOrder(u8 bank) int i; for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == bank) + if (gBanksByTurnOrder[i] == bank) break; } return i; @@ -2527,7 +2526,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].status2 & STATUS2_UPROAR) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; b_movescr_stack_push(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; @@ -2551,7 +2550,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) break; case 12: //charging move gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gProtectStructs[gEffectBank].chargingTurn = 1; gBattlescriptCurrInstr++; break; @@ -2619,7 +2618,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) case 29: //recharge gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE; gDisableStructs[gEffectBank].rechargeCounter = 2; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattlescriptCurrInstr++; break; case 30: //rage @@ -2711,7 +2710,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)) { gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA); } else @@ -3909,7 +3908,7 @@ _0801ED7C:\n\ lsls r0, 5\n\ orrs r1, r0\n\ str r1, [r2]\n\ - ldr r1, _0801EDC8 @ =gLockedMove\n\ + ldr r1, _0801EDC8 @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -3941,7 +3940,7 @@ _0801ED7C:\n\ ldr r0, [r0]\n\ bl _0801F5F8\n\ .align 2, 0\n\ -_0801EDC8: .4byte gLockedMove\n\ +_0801EDC8: .4byte gLockedMoves\n\ _0801EDCC: .4byte gCurrentMove\n\ _0801EDD0: .4byte gBattlescriptCurrInstr\n\ _0801EDD4: .4byte gMoveEffectBS_Ptrs\n\ @@ -4035,7 +4034,7 @@ _0801EE84:\n\ lsls r1, 5\n\ orrs r0, r1\n\ str r0, [r2]\n\ - ldr r1, _0801EEC0 @ =gLockedMove\n\ + ldr r1, _0801EEC0 @ =gLockedMoves\n\ mov r2, r8\n\ ldrb r0, [r2]\n\ lsls r0, 1\n\ @@ -4053,7 +4052,7 @@ _0801EE84:\n\ strb r0, [r1, 0x1]\n\ b _0801F5DC\n\ .align 2, 0\n\ -_0801EEC0: .4byte gLockedMove\n\ +_0801EEC0: .4byte gLockedMoves\n\ _0801EEC4: .4byte gCurrentMove\n\ _0801EEC8: .4byte gProtectStructs\n\ _0801EECC:\n\ @@ -4365,7 +4364,7 @@ _0801F13C:\n\ adds r0, r2\n\ movs r1, 0x2\n\ strb r1, [r0, 0x19]\n\ - ldr r1, _0801F17C @ =gLockedMove\n\ + ldr r1, _0801F17C @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -4375,7 +4374,7 @@ _0801F13C:\n\ b _0801F5DC\n\ .align 2, 0\n\ _0801F178: .4byte gDisableStructs\n\ -_0801F17C: .4byte gLockedMove\n\ +_0801F17C: .4byte gLockedMoves\n\ _0801F180: .4byte gCurrentMove\n\ _0801F184:\n\ ldr r0, _0801F1A0 @ =gBankAttacker\n\ @@ -4764,7 +4763,7 @@ _0801F4C4:\n\ lsls r0, 5\n\ orrs r1, r0\n\ str r1, [r2]\n\ - ldr r1, _0801F4F8 @ =gLockedMove\n\ + ldr r1, _0801F4F8 @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -4787,7 +4786,7 @@ _0801F4F2:\n\ str r0, [r2]\n\ b _0801F5FA\n\ .align 2, 0\n\ -_0801F4F8: .4byte gLockedMove\n\ +_0801F4F8: .4byte gLockedMoves\n\ _0801F4FC: .4byte gCurrentMove\n\ _0801F500:\n\ mov r5, r8\n\ @@ -10660,8 +10659,8 @@ static void atk52_switchineffects(void) for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == gActiveBank) - gUnknown_02024A76[i] = 0xC; + if (gBanksByTurnOrder[i] == gActiveBank) + gActionsByTurnOrder[i] = 0xC; } for (i = 0; i < gNoOfAllBanks; i++) @@ -10838,7 +10837,7 @@ static void atk5A_yesnoboxlearnmove(void) } break; case 3: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808) + if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2) { u8 move_pos = sub_809FA30(); if (move_pos == 4) @@ -11404,7 +11403,7 @@ static void atk68_cancelallactions(void) int i; for (i = 0; i < gNoOfAllBanks; i++) { - gUnknown_02024A76[i] = 0xC; + gActionsByTurnOrder[i] = 0xC; } gBattlescriptCurrInstr++; } @@ -11943,7 +11942,7 @@ static void atk71_buffermovetolearn(void) static void atk72_jumpifplayerran(void) { - if (sub_8014AB8(gBank1)) + if (TryRunFromBattle(gBank1)) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; @@ -13251,7 +13250,7 @@ static void atk8A_normalisebuffs(void) //haze static void atk8B_setbide(void) { gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; + gLockedMoves[gBankAttacker] = gCurrentMove; gTakenDmg[gBankAttacker] = 0; gBattleMons[gBankAttacker].status2 |= (STATUS2_BIDE - 0x100); //2 turns gBattlescriptCurrInstr++; @@ -15075,7 +15074,7 @@ static void atkB3_rolloutdamagecalculation(void) gDisableStructs[gBankAttacker].rolloutTimer1 = 5; gDisableStructs[gBankAttacker].rolloutTimer2 = 5; gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; + gLockedMoves[gBankAttacker] = gCurrentMove; } if (--gDisableStructs[gBankAttacker].rolloutTimer1 == 0) gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); @@ -15252,8 +15251,8 @@ static void atkBA_jumpifnopursuitswitchdmg(void) int i; for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == gBankTarget) - gUnknown_02024A76[i] = 11; + if (gBanksByTurnOrder[i] == gBankTarget) + gActionsByTurnOrder[i] = 11; } gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; @@ -17014,7 +17013,7 @@ static void atkEC_pursuitrelated(void) gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT) { - gUnknown_02024A76[gActiveBank] = 11; + gActionsByTurnOrder[gActiveBank] = 11; gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; BATTLE_STRUCT->animTurn = 1; @@ -17230,7 +17229,7 @@ static void atkF2_displaydexinfo(void) } break; case 2: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808 && !gTasks[gBattleCommunication[1]].isActive) + if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2 && !gTasks[gBattleCommunication[1]].isActive) { LZDecompressVram(gBattleTerrainTiles_Building, (void*)(0x06008000)); LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); @@ -17394,12 +17393,12 @@ static void atkF3_trygivecaughtmonnick(void) if (!gPaletteFade.active) { GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), sub_800F808); + DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2); gBattleCommunication[0]++; } break; case 3: - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active ) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active ) { SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 35d8f33c8..54181bc21 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -48,8 +48,8 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern u32 gBattleExecBuffer; extern MainCallback gPreBattleCallback1; @@ -1410,8 +1410,8 @@ void sub_8039B64(void) void LinkOpponentHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_8037C2C; diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index adc3c1c85..2c78d4a82 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -48,8 +48,8 @@ extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern MainCallback gPreBattleCallback1; extern void (*gBattleBankFunc[])(void); extern u8 gHealthboxIDs[]; @@ -1355,8 +1355,8 @@ void sub_811FF30(void) void LinkPartnerHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_811DFA0; diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 477b600ac..ab7b6944b 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -50,8 +50,8 @@ extern u8 gAnimMoveTurn; extern u8 gAnimScriptActive; extern void (*gAnimScriptCallback)(void); extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gDisplayedStringBattle[]; extern u8 gBankTarget; extern u8 gAbsentBankFlags; @@ -1404,8 +1404,8 @@ void sub_8035238(void) void OpponentHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_80331D0; diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 62a38311a..f992e3e51 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -35,8 +35,8 @@ struct MovePpInfo #define SUB_803037C_TILE_DATA_OFFSET 444 #endif -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; extern struct Window gUnknown_03004210; @@ -72,7 +72,7 @@ extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u8 gUnknown_03004344; extern u8 gUnknown_0300434C[]; @@ -148,8 +148,8 @@ extern u8 gAbsentBankFlags; extern u8 gUnknown_03004344; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern struct Window gUnknown_03004210; extern const u8 BattleText_SwitchWhich[]; extern u8 gUnknown_03004348; @@ -679,8 +679,8 @@ void sub_802C68C(void) { DestroyMenuCursor(); PlaySE(SE_SELECT); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 320; Emitcmd33(1, 10, 0xFFFF); PlayerBufferExecCompleted(); } @@ -1495,7 +1495,7 @@ void sub_802DF30(void) void sub_802DF88(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { if (gUnknown_0202E8F4 == 1) Emitcmd34(1, gUnknown_0202E8F5, gUnknown_02038470); @@ -1519,7 +1519,7 @@ void sub_802E004(void) void sub_802E03C(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); PlayerBufferExecCompleted(); @@ -1695,8 +1695,8 @@ void b_link_standby_message(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; sub_8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); } } @@ -2559,8 +2559,8 @@ void sub_8030190(void) void PlayerHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); gBattleBankFunc[gActiveBank] = sub_802DF18; @@ -2578,8 +2578,8 @@ void PlayerHandlecmd18(void) { int r4; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); @@ -2612,8 +2612,8 @@ void PlayerHandlecmd20(void) void sub_80304A8(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 320; sub_802E1B0(); gUnknown_03004344 = 0xFF; sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 37c58f951..0a629ba4d 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -23,8 +23,8 @@ extern u8 gActiveBank; extern const u8 BattleText_MenuOptionsSafari[]; extern void *gBattleBankFunc[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gBattleBufferA[][0x200]; extern bool8 gDoingBattleAnim; extern u8 gObjectBankIDs[]; @@ -313,7 +313,7 @@ void sub_812B724(void) void sub_812B758(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); SafariBufferExecCompleted(); @@ -450,8 +450,8 @@ void SafariHandleMoveAnimation(void) void SafariHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_812B694; @@ -469,8 +469,8 @@ void SafariHandlecmd18(void) { int i; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index be40f968c..bd2b4a45b 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -53,8 +53,8 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern const u8 BattleText_WallyMenu[]; extern const u8 BattleText_MenuOptions[]; @@ -363,7 +363,7 @@ void sub_81374C4(void) void sub_81374FC(void) { - if (gMain.callback2 == sub_800F808 + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); @@ -1240,8 +1240,8 @@ void WallyHandlePrintString(void) { u16 *ptr; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; ptr = (u16 *)&gBattleBufferA[gActiveBank][2]; if (*ptr == 2) DestroyMenuCursor(); @@ -1262,8 +1262,8 @@ void WallyHandlecmd18(void) { s32 i; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index a7646e78b..6a6d7a137 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -13,12 +13,12 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern struct Window gUnknown_03004210; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gUnknown_030041B0; extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_Y; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; extern u8 gBankInMenu; @@ -81,8 +81,8 @@ static void CB2_ReshowBattleScreenAfterMenu(void) SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -190,7 +190,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) sub_807B06C(); BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); gPaletteFade.bufferTransferDisabled = 0; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); break; } gReshowState++; diff --git a/src/contest.c b/src/contest.c index 365f92538..c32719648 100644 --- a/src/contest.c +++ b/src/contest.c @@ -60,8 +60,8 @@ extern u16 gBattle_WIN0V; extern u16 gBattle_WIN1V; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gBattle_WIN0H; extern u32 gUnknown_03005D28; // saved RNG value @@ -324,8 +324,8 @@ void ResetContestGpuRegs(void) REG_WINOUT = 0x3F3F; REG_DISPCNT |= 0x7F00; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -620,8 +620,8 @@ void ContestMainCallback2(void) void ContestVBlankCallback(void) { - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; @@ -640,7 +640,7 @@ void ContestVBlankCallback(void) void sub_80ABB70(u8 taskId) { - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; sub_80B0D7C(); DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18204, 0x400); @@ -684,7 +684,7 @@ void sub_80ABCDC(u8 taskId) u8 i; u8 sp8[32]; - gUnknown_030042A0 = 0xA0; + gBattle_BG0_Y = 0xA0; gBattle_BG2_Y = 0xA0; FillWindowRect_DefaultPalette( &gUnknown_03004210, @@ -772,7 +772,7 @@ void sub_80ABEA0(u8 taskId) sub_80AF138(); StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle); sub_8003460(&gMenuWindow, gStringVar4, 776, 1, 15); - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; gTasks[taskId].func = sub_80ABC70; break; @@ -846,7 +846,7 @@ void sub_80AC15C(u8 taskId) void sub_80AC188(u8 taskId) { sub_80AF138(); - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; sub_80AFFE0(FALSE); DmaCopy32Defvars(3, gPlttBufferFaded, shared18000.unk18604, 0x400); @@ -1804,7 +1804,7 @@ void sub_80ADDA4(u8 taskId) { s32 i; - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; for (i = 0; i < 4; i++) gUnknown_02038680[i] = sContestantStatus[i].unk4; @@ -2950,7 +2950,7 @@ bool8 sub_80AF828(s32 a, s32 b, struct UnknownContestStruct6 *c) void sub_80AF860(void) { - gUnknown_030042A0 = 0; + gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; sub_80AF138(); sub_8003460(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15); diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index bb80de6fe..49fe6864b 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -29,8 +29,8 @@ extern u8 gContestPlayerMonIndex; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; @@ -457,8 +457,8 @@ static void sub_80A9F50(void) REG_BLDY = 0; REG_BG0HOFS = 0; REG_BG0VOFS = 0; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -505,8 +505,8 @@ static void sub_80AA064(void) static void sub_80AA090(void) { - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; diff --git a/src/field/tv.c b/src/field/tv.c index d7a75a709..e88e3c72b 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -811,7 +811,7 @@ u8 sub_80BDEAC(u8 *a0) return lang; } -void sub_80BDEC8(void) +void PutPokemonTodayCaughtOnAir(void) { u8 i; u16 total; diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index f307f5979..4ee601360 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -65,8 +65,8 @@ void nullsub_6(void); bool32 IsHMMove2(u16 move); extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; @@ -200,8 +200,8 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -308,8 +308,8 @@ static void CB2_EvolutionSceneLoadGraphics(void) REG_WINOUT = 0; SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -362,8 +362,8 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) ResetSpriteData(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -3923,8 +3923,8 @@ static void EvoDummyFunc(void) static void VBlankCB_EvolutionScene(void) { REG_BG0CNT = BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256 | BGCNT_AFF512x512 | BGCNT_PRIORITY(3); // 0x9803 - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; @@ -3939,8 +3939,8 @@ static void VBlankCB_EvolutionScene(void) static void VBlankCB_TradeEvolutionScene(void) { - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; diff --git a/src/unknown_task.c b/src/unknown_task.c index 62245502a..2c71bfb08 100644 --- a/src/unknown_task.c +++ b/src/unknown_task.c @@ -12,8 +12,8 @@ extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u8 gUnknown_0202FFA4; @@ -120,10 +120,10 @@ static void task00_for_dp12(u8 taskId) switch (gTasks[taskId].data[6]) { case 0x0: - value = gUnknown_030042A4; + value = gBattle_BG0_X; break; case 0x2: - value = gUnknown_030042A0; + value = gBattle_BG0_Y; break; case 0x4: value = gBattle_BG1_X; diff --git a/sym_common.txt b/sym_common.txt index 87b411ff4..f620e9e49 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -53,10 +53,10 @@ gBattleTerrain: @ 300428C gBattleTextBuff2: @ 3004290 .space 0x10 -gUnknown_030042A0: @ 30042A0 +gBattle_BG0_Y: @ 30042A0 .space 0x4 -gUnknown_030042A4: @ 30042A4 +gBattle_BG0_X: @ 30042A4 .space 0xC gBattleTextBuff3: @ 30042B0 diff --git a/sym_ewram.txt b/sym_ewram.txt index bb5d56686..fc4ea94ef 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -65,10 +65,10 @@ gBattlePartyID: @ 2024A6A gBanksBySide: @ 2024A72 .space 0x4 -gUnknown_02024A76: @ 2024A76 +gActionsByTurnOrder: @ 2024A76 .space 0x4 -gTurnOrder: @ 2024A7A +gBanksByTurnOrder: @ 2024A7A .space 0x4 gCurrentTurnActionNumber: @ 2024A7E @@ -179,7 +179,7 @@ gUnknown_02024C44: @ 2024C44 gUnknown_02024C4C: @ 2024C4C .space 0x8 -gLockedMove: @ 2024C54 +gLockedMoves: @ 2024C54 .space 0x8 gUnknown_02024C5C: @ 2024C5C |