diff options
-rw-r--r-- | asm/battle_2.s | 2542 | ||||
-rw-r--r-- | asm/evolution_scene.s | 8 | ||||
-rw-r--r-- | asm/party_menu.s | 8 | ||||
-rw-r--r-- | asm/trade.s | 12 | ||||
-rw-r--r-- | data/battle_scripts_1.s | 4 | ||||
-rw-r--r-- | data/battle_scripts_2.s | 4 | ||||
-rw-r--r-- | include/battle_scripts.h | 6 | ||||
-rw-r--r-- | include/evolution_scene.h | 4 | ||||
-rw-r--r-- | include/pokemon.h | 4 | ||||
-rw-r--r-- | include/quest_log.h | 4 | ||||
-rw-r--r-- | include/vs_seeker.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_main.c | 680 | ||||
-rw-r--r-- | src/pokemon.c | 4 | ||||
-rw-r--r-- | sym_common.txt | 2 |
15 files changed, 705 insertions, 2579 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s deleted file mode 100644 index 2e75b72c8..000000000 --- a/asm/battle_2.s +++ /dev/null @@ -1,2542 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start HandleEndTurn_FinishBattle -HandleEndTurn_FinishBattle: @ 8015910 - push {r4-r7,lr} - ldr r0, _08015974 @ =gCurrentActionFuncId - ldrb r0, [r0] - subs r0, 0xB - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08015A04 - ldr r0, _08015978 @ =gBattleTypeFlags - ldr r1, [r0] - ldr r0, _0801597C @ =0x00080b92 - ands r1, r0 - cmp r1, 0 - bne _080159BC - ldr r2, _08015980 @ =gActiveBattler - strb r1, [r2] - ldr r0, _08015984 @ =gBattlersCount - ldrb r0, [r0] - cmp r1, r0 - bcs _080159BC - adds r4, r2, 0 - ldr r6, _08015988 @ =gBattleMons - movs r5, 0x58 - adds r7, r6, 0 - adds r7, 0x30 -_08015942: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080159AA - ldr r2, _0801598C @ =gBattleResults - ldrh r0, [r2, 0x6] - cmp r0, 0 - bne _08015990 - 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 _080159AA - .align 2, 0 -_08015974: .4byte gCurrentActionFuncId -_08015978: .4byte gBattleTypeFlags -_0801597C: .4byte 0x00080b92 -_08015980: .4byte gActiveBattler -_08015984: .4byte gBattlersCount -_08015988: .4byte gBattleMons -_0801598C: .4byte gBattleResults -_08015990: - 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 -_080159AA: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _080159EC @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08015942 -_080159BC: - bl sub_812BFDC - ldr r0, _080159F0 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080159D0 - bl sub_810CB90 -_080159D0: - movs r0, 0x3 - bl BeginFastPaletteFade - movs r0, 0x5 - bl FadeOutMapMusic - ldr r1, _080159F4 @ =gBattleMainFunc - ldr r0, _080159F8 @ =FreeResetData_ReturnToOvOrDoEvolutions - str r0, [r1] - ldr r1, _080159FC @ =gUnknown_300537C - ldr r0, _08015A00 @ =BattleMainCB2 - str r0, [r1] - b _08015A1E - .align 2, 0 -_080159EC: .4byte gBattlersCount -_080159F0: .4byte gBattleTypeFlags -_080159F4: .4byte gBattleMainFunc -_080159F8: .4byte FreeResetData_ReturnToOvOrDoEvolutions -_080159FC: .4byte gUnknown_300537C -_08015A00: .4byte BattleMainCB2 -_08015A04: - ldr r0, _08015A24 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08015A1E - ldr r1, _08015A28 @ =gBattleScriptingCommandsTable - ldr r0, _08015A2C @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08015A1E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08015A24: .4byte gBattleControllerExecFlags -_08015A28: .4byte gBattleScriptingCommandsTable -_08015A2C: .4byte gBattlescriptCurrInstr - thumb_func_end HandleEndTurn_FinishBattle - - thumb_func_start FreeResetData_ReturnToOvOrDoEvolutions -FreeResetData_ReturnToOvOrDoEvolutions: @ 8015A30 - push {lr} - ldr r0, _08015A58 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08015A8E - bl ResetSpriteData - ldr r0, _08015A5C @ =gLeveledUpInBattle - ldrb r0, [r0] - cmp r0, 0 - beq _08015A52 - ldr r0, _08015A60 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x1 - beq _08015A6C -_08015A52: - ldr r1, _08015A64 @ =gBattleMainFunc - ldr r0, _08015A68 @ =ReturnFromBattleToOverworld - b _08015A70 - .align 2, 0 -_08015A58: .4byte gPaletteFade -_08015A5C: .4byte gLeveledUpInBattle -_08015A60: .4byte gBattleOutcome -_08015A64: .4byte gBattleMainFunc -_08015A68: .4byte ReturnFromBattleToOverworld -_08015A6C: - ldr r1, _08015A94 @ =gBattleMainFunc - ldr r0, _08015A98 @ =TryEvolvePokemon -_08015A70: - str r0, [r1] - bl FreeAllWindowBuffers - ldr r0, _08015A9C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08015A8E - bl FreeMonSpritesGfx - bl FreeBattleSpritesData - bl FreeBattleResources -_08015A8E: - pop {r0} - bx r0 - .align 2, 0 -_08015A94: .4byte gBattleMainFunc -_08015A98: .4byte TryEvolvePokemon -_08015A9C: .4byte gBattleTypeFlags - thumb_func_end FreeResetData_ReturnToOvOrDoEvolutions - - thumb_func_start TryEvolvePokemon -TryEvolvePokemon: @ 8015AA0 - push {r4,r5,lr} - ldr r0, _08015AF4 @ =gLeveledUpInBattle - ldrb r1, [r0] - adds r3, r0, 0 - cmp r1, 0 - beq _08015B16 -_08015AAC: - movs r5, 0 -_08015AAE: - ldrb r2, [r3] - ldr r0, _08015AF8 @ =gBitTable - lsls r1, r5, 2 - adds r1, r0 - ldr r1, [r1] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _08015B08 - bics r2, r1 - strb r2, [r3] - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08015AFC @ =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 _08015B08 - ldr r0, _08015B00 @ =gBattleMainFunc - ldr r1, _08015B04 @ =WaitForEvoSceneToFinish - str r1, [r0] - lsls r3, r5, 24 - lsrs r3, 24 - adds r0, r4, 0 - adds r1, r2, 0 - movs r2, 0x81 - bl EvolutionScene - b _08015B1C - .align 2, 0 -_08015AF4: .4byte gLeveledUpInBattle -_08015AF8: .4byte gBitTable -_08015AFC: .4byte gPlayerParty -_08015B00: .4byte gBattleMainFunc -_08015B04: .4byte WaitForEvoSceneToFinish -_08015B08: - adds r5, 0x1 - ldr r3, _08015B24 @ =gLeveledUpInBattle - cmp r5, 0x5 - ble _08015AAE - ldrb r0, [r3] - cmp r0, 0 - bne _08015AAC -_08015B16: - ldr r1, _08015B28 @ =gBattleMainFunc - ldr r0, _08015B2C @ =ReturnFromBattleToOverworld - str r0, [r1] -_08015B1C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08015B24: .4byte gLeveledUpInBattle -_08015B28: .4byte gBattleMainFunc -_08015B2C: .4byte ReturnFromBattleToOverworld - thumb_func_end TryEvolvePokemon - - thumb_func_start WaitForEvoSceneToFinish -WaitForEvoSceneToFinish: @ 8015B30 - push {lr} - ldr r0, _08015B48 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _08015B4C @ =BattleMainCB2 - cmp r1, r0 - bne _08015B42 - ldr r1, _08015B50 @ =gBattleMainFunc - ldr r0, _08015B54 @ =TryEvolvePokemon - str r0, [r1] -_08015B42: - pop {r0} - bx r0 - .align 2, 0 -_08015B48: .4byte gMain -_08015B4C: .4byte BattleMainCB2 -_08015B50: .4byte gBattleMainFunc -_08015B54: .4byte TryEvolvePokemon - thumb_func_end WaitForEvoSceneToFinish - - thumb_func_start ReturnFromBattleToOverworld -ReturnFromBattleToOverworld: @ 8015B58 - push {r4-r6,lr} - ldr r6, _08015BDC @ =gBattleTypeFlags - ldr r0, [r6] - movs r5, 0x2 - ands r0, r5 - cmp r0, 0 - bne _08015B74 - ldr r4, _08015BE0 @ =gPlayerParty - adds r0, r4, 0 - bl sub_8043A68 - adds r0, r4, 0 - bl sub_8043B40 -_08015B74: - ldr r4, [r6] - adds r0, r4, 0 - ands r0, r5 - cmp r0, 0 - beq _08015B86 - ldr r0, _08015BE4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08015BD4 -_08015B86: - ldr r1, _08015BE8 @ =gSpecialVar_Result - ldr r5, _08015BEC @ =gBattleOutcome - ldrb r0, [r5] - strh r0, [r1] - ldr r3, _08015BF0 @ =gMain - ldr r0, _08015BF4 @ =0x00000439 - adds r2, r3, r0 - ldrb r1, [r2] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r0, _08015BF8 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r3] - movs r0, 0x80 - lsls r0, 3 - ands r4, r0 - cmp r4, 0 - beq _08015BC6 - ldr r0, _08015BFC @ =gEnemyParty - bl UpdateRoamerHPStatus - ldrb r1, [r5] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08015BC2 - cmp r1, 0x7 - bne _08015BC6 -_08015BC2: - bl SetRoamerInactive -_08015BC6: - movs r0, 0x53 - bl m4aSongNumStop - ldr r0, _08015BF0 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_08015BD4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08015BDC: .4byte gBattleTypeFlags -_08015BE0: .4byte gPlayerParty -_08015BE4: .4byte gReceivedRemoteLinkPlayers -_08015BE8: .4byte gSpecialVar_Result -_08015BEC: .4byte gBattleOutcome -_08015BF0: .4byte gMain -_08015BF4: .4byte 0x00000439 -_08015BF8: .4byte gPreBattleCallback1 -_08015BFC: .4byte gEnemyParty - thumb_func_end ReturnFromBattleToOverworld - - thumb_func_start RunBattleScriptCommands_PopCallbacksStack -RunBattleScriptCommands_PopCallbacksStack: @ 8015C00 - push {lr} - ldr r0, _08015C3C @ =gCurrentActionFuncId - ldrb r0, [r0] - subs r0, 0xB - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08015C48 - ldr r3, _08015C40 @ =gBattleResources - ldr r0, [r3] - ldr r0, [r0, 0xC] - adds r1, r0, 0 - adds r1, 0x20 - ldrb r0, [r1] - cmp r0, 0 - beq _08015C24 - subs r0, 0x1 - strb r0, [r1] -_08015C24: - ldr r2, _08015C44 @ =gBattleMainFunc - ldr r0, [r3] - ldr r1, [r0, 0xC] - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2] - b _08015C62 - .align 2, 0 -_08015C3C: .4byte gCurrentActionFuncId -_08015C40: .4byte gBattleResources -_08015C44: .4byte gBattleMainFunc -_08015C48: - ldr r0, _08015C68 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08015C62 - ldr r1, _08015C6C @ =gBattleScriptingCommandsTable - ldr r0, _08015C70 @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08015C62: - pop {r0} - bx r0 - .align 2, 0 -_08015C68: .4byte gBattleControllerExecFlags -_08015C6C: .4byte gBattleScriptingCommandsTable -_08015C70: .4byte gBattlescriptCurrInstr - thumb_func_end RunBattleScriptCommands_PopCallbacksStack - - thumb_func_start RunBattleScriptCommands -RunBattleScriptCommands: @ 8015C74 - push {lr} - ldr r0, _08015C94 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08015C90 - ldr r1, _08015C98 @ =gBattleScriptingCommandsTable - ldr r0, _08015C9C @ =gBattlescriptCurrInstr - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08015C90: - pop {r0} - bx r0 - .align 2, 0 -_08015C94: .4byte gBattleControllerExecFlags -_08015C98: .4byte gBattleScriptingCommandsTable -_08015C9C: .4byte gBattlescriptCurrInstr - thumb_func_end RunBattleScriptCommands - - thumb_func_start HandleAction_UseMove -HandleAction_UseMove: @ 8015CA0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r0, 0x4 - str r0, [sp] - ldr r6, _08015CE0 @ =gBattlerAttacker - ldr r1, _08015CE4 @ =gBattlerByTurnOrder - ldr r0, _08015CE8 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r6] - ldr r1, _08015CEC @ =gBattleStruct - ldr r3, [r1] - adds r0, r3, 0 - adds r0, 0x91 - ldrb r2, [r0] - ldr r1, _08015CF0 @ =gBitTable - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ands r2, r0 - cmp r2, 0 - beq _08015CF8 - ldr r1, _08015CF4 @ =gCurrentActionFuncId - movs r0, 0xC - b _0801634C - .align 2, 0 -_08015CE0: .4byte gBattlerAttacker -_08015CE4: .4byte gBattlerByTurnOrder -_08015CE8: .4byte gCurrentTurnActionNumber -_08015CEC: .4byte gBattleStruct -_08015CF0: .4byte gBitTable -_08015CF4: .4byte gCurrentActionFuncId -_08015CF8: - ldr r1, _08015D6C @ =gCritMultiplier - movs r0, 0x1 - strb r0, [r1] - ldr r1, _08015D70 @ =gBattleScripting - movs r0, 0x1 - strb r0, [r1, 0xE] - adds r0, r3, 0 - adds r0, 0xB7 - strb r2, [r0] - ldr r0, _08015D74 @ =gMoveResultFlags - strb r2, [r0] - ldr r0, _08015D78 @ =gMultiHitCounter - strb r2, [r0] - ldr r0, _08015D7C @ =gBattleCommunication - strb r2, [r0, 0x6] - ldr r2, _08015D80 @ =gCurrMovePos - ldr r3, _08015D84 @ =gChosenMovePos - mov r9, r3 - ldrb r0, [r6] - ldr r4, _08015D88 @ =gBattleStruct - ldr r1, [r4] - adds r0, r1 - adds r0, 0x80 - ldrb r0, [r0] - strb r0, [r3] - strb r0, [r2] - ldr r1, _08015D8C @ =gProtectStructs - ldrb r4, [r6] - lsls r0, r4, 4 - adds r3, r0, r1 - ldrb r1, [r3] - lsls r0, r1, 29 - mov r8, r2 - cmp r0, 0 - bge _08015D9C - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - ldr r2, _08015D90 @ =gCurrentMove - ldr r1, _08015D94 @ =gChosenMove - movs r0, 0xA5 - strh r0, [r1] - strh r0, [r2] - ldr r2, _08015D98 @ =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, [r6] - ldr r3, _08015D88 @ =gBattleStruct - ldr r2, [r3] - b _08015EF6 - .align 2, 0 -_08015D6C: .4byte gCritMultiplier -_08015D70: .4byte gBattleScripting -_08015D74: .4byte gMoveResultFlags -_08015D78: .4byte gMultiHitCounter -_08015D7C: .4byte gBattleCommunication -_08015D80: .4byte gCurrMovePos -_08015D84: .4byte gChosenMovePos -_08015D88: .4byte gBattleStruct -_08015D8C: .4byte gProtectStructs -_08015D90: .4byte gCurrentMove -_08015D94: .4byte gChosenMove -_08015D98: .4byte gHitMarker -_08015D9C: - ldr r0, _08015DD4 @ =gBattleMons - movs r1, 0x58 - adds r5, r4, 0 - muls r5, r1 - adds r1, r0, 0 - adds r1, 0x50 - adds r1, r5, r1 - ldr r2, [r1] - movs r1, 0x80 - lsls r1, 5 - ands r1, r2 - mov r10, r0 - cmp r1, 0 - bne _08015DC2 - movs r7, 0x80 - lsls r7, 15 - ands r7, r2 - cmp r7, 0 - beq _08015DE4 -_08015DC2: - ldr r3, _08015DD8 @ =gCurrentMove - ldr r2, _08015DDC @ =gChosenMove - ldr r1, _08015DE0 @ =gLockedMoves - lsls r0, r4, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - strh r0, [r3] - b _08015F18 - .align 2, 0 -_08015DD4: .4byte gBattleMons -_08015DD8: .4byte gCurrentMove -_08015DDC: .4byte gChosenMove -_08015DE0: .4byte gLockedMoves -_08015DE4: - ldr r3, _08015E38 @ =gDisableStructs - mov r12, r3 - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - add r0, r12 - ldrh r4, [r0, 0x6] - adds r2, r4, 0 - cmp r2, 0 - beq _08015EBC - ldrb r3, [r0, 0xC] - lsls r0, r3, 1 - adds r0, r5 - mov r5, r10 - adds r5, 0xC - adds r0, r5 - ldrh r1, [r0] - cmp r2, r1 - bne _08015E48 - ldr r2, _08015E3C @ =gCurrentMove - ldr r0, _08015E40 @ =gChosenMove - strh r4, [r0] - strh r4, [r2] - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - ldrb r0, [r0, 0xC] - mov r4, r9 - strb r0, [r4] - mov r1, r8 - strb r0, [r1] - ldrh r0, [r2] - movs r1, 0 - bl GetMoveTarget - ldrb r1, [r6] - ldr r3, _08015E44 @ =gBattleStruct - ldr r2, [r3] - b _08015EF6 - .align 2, 0 -_08015E38: .4byte gDisableStructs -_08015E3C: .4byte gCurrentMove -_08015E40: .4byte gChosenMove -_08015E44: .4byte gBattleStruct -_08015E48: - cmp r2, 0 - beq _08015EBC - cmp r2, r1 - beq _08015EBC - mov r4, r9 - strb r3, [r4] - mov r0, r8 - strb r3, [r0] - ldr r3, _08015EB0 @ =gCurrentMove - ldr r2, _08015EB4 @ =gChosenMove - ldrb r0, [r0] - lsls r0, 1 - ldrb r1, [r6] - movs r4, 0x58 - muls r1, r4 - adds r0, r1 - adds r0, r5 - ldrh r0, [r0] - strh r0, [r2] - strh r0, [r3] - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - movs r2, 0 - strh r7, [r0, 0x6] - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r12 - strb r2, [r0, 0xC] - ldrb r0, [r6] - 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, [r6] - ldr r3, _08015EB8 @ =gBattleStruct - ldr r2, [r3] - b _08015EF6 - .align 2, 0 -_08015EB0: .4byte gCurrentMove -_08015EB4: .4byte gChosenMove -_08015EB8: .4byte gBattleStruct -_08015EBC: - mov r4, r8 - ldrb r0, [r4] - lsls r0, 1 - ldr r4, _08015EFC @ =gBattlerAttacker - ldrb r2, [r4] - movs r1, 0x58 - muls r1, r2 - adds r0, r1 - mov r1, r10 - adds r1, 0xC - adds r0, r1 - ldr r1, _08015F00 @ =gChosenMoveByBattler - lsls r2, 1 - adds r2, r1 - ldrh r3, [r0] - ldrh r2, [r2] - cmp r3, r2 - beq _08015F10 - ldr r1, _08015F04 @ =gCurrentMove - ldr r0, _08015F08 @ =gChosenMove - strh r3, [r0] - strh r3, [r1] - ldrh r0, [r1] - movs r1, 0 - bl GetMoveTarget - ldrb r1, [r4] - ldr r2, _08015F0C @ =gBattleStruct - ldr r2, [r2] -_08015EF6: - adds r1, r2 - strb r0, [r1, 0xC] - b _08015F18 - .align 2, 0 -_08015EFC: .4byte gBattlerAttacker -_08015F00: .4byte gChosenMoveByBattler -_08015F04: .4byte gCurrentMove -_08015F08: .4byte gChosenMove -_08015F0C: .4byte gBattleStruct -_08015F10: - ldr r1, _08015F30 @ =gCurrentMove - ldr r0, _08015F34 @ =gChosenMove - strh r3, [r0] - strh r3, [r1] -_08015F18: - ldr r0, _08015F38 @ =gBattlerAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08015F40 - ldr r0, _08015F3C @ =gBattleResults - ldr r1, _08015F30 @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0, 0x22] - b _08015F48 - .align 2, 0 -_08015F30: .4byte gCurrentMove -_08015F34: .4byte gChosenMove -_08015F38: .4byte gBattlerAttacker -_08015F3C: .4byte gBattleResults -_08015F40: - ldr r0, _08015FAC @ =gBattleResults - ldr r1, _08015FB0 @ =gCurrentMove - ldrh r1, [r1] - strh r1, [r0, 0x24] -_08015F48: - ldr r4, _08015FB4 @ =gBattlerAttacker - ldrb r0, [r4] - bl GetBattlerSide - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08015FB8 @ =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 _08015FC8 - ldr r2, _08015FBC @ =gBattleMoves - ldr r0, _08015FB0 @ =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 _08015FC8 - ldrb r0, [r3] - bl GetBattlerSide - adds r4, r0, 0 - ldrb r0, [r5, 0x9] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _08015FC8 - ldr r1, _08015FC0 @ =gBattleMons - ldrb r2, [r5, 0x9] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _08015FC8 - ldr r0, _08015FC4 @ =gBattlerTarget - strb r2, [r0] - b _0801632C - .align 2, 0 -_08015FAC: .4byte gBattleResults -_08015FB0: .4byte gCurrentMove -_08015FB4: .4byte gBattlerAttacker -_08015FB8: .4byte gSideTimers -_08015FBC: .4byte gBattleMoves -_08015FC0: .4byte gBattleMons -_08015FC4: .4byte gBattlerTarget -_08015FC8: - ldr r2, _080160E4 @ =gBattleTypeFlags - ldr r1, [r2] - movs r0, 0x1 - ands r1, r0 - ldr r3, _080160E8 @ =gBattlerAttacker - adds r7, r2, 0 - cmp r1, 0 - bne _08015FDA - b _080162A0 -_08015FDA: - ldr r1, _080160EC @ =gSideTimers - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrb r5, [r0, 0x8] - cmp r5, 0 - beq _08015FEC - b _080161F8 -_08015FEC: - ldr r2, _080160F0 @ =gBattleMoves - ldr r0, _080160F4 @ =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 _08016008 - ldrb r0, [r4, 0x6] - cmp r0, 0x10 - bne _08016008 - b _080161F8 -_08016008: - ldr r3, _080160F8 @ =gBattleMons - ldr r2, _080160E8 @ =gBattlerAttacker - ldrb r6, [r2] - ldr r0, _080160FC @ =gBattleStruct - ldr r0, [r0] - adds r0, r6, r0 - ldrb r1, [r0, 0xC] - movs r0, 0x58 - muls r0, r1 - adds r0, r3 - adds r0, 0x20 - ldrb r0, [r0] - adds r3, r2, 0 - cmp r0, 0x1F - bne _08016028 - b _080161F8 -_08016028: - ldrb r0, [r4, 0x2] - cmp r0, 0xD - beq _08016030 - b _080161F8 -_08016030: - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08016100 @ =gActiveBattler - strb r5, [r1] - ldr r0, _08016104 @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - bcs _080160A8 - adds r4, r1, 0 -_08016048: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - beq _08016096 - ldr r0, _080160E8 @ =gBattlerAttacker - ldrb r1, [r0] - ldr r0, _080160FC @ =gBattleStruct - ldr r0, [r0] - adds r1, r0 - ldrb r0, [r1, 0xC] - ldrb r1, [r4] - cmp r0, r1 - beq _08016096 - ldr r1, _080160F8 @ =gBattleMons - ldrb r2, [r4] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1F - bne _08016096 - adds r0, r2, 0 - bl GetBattlerTurnOrderNum - lsls r0, 24 - lsrs r0, 24 - ldr r3, [sp] - cmp r0, r3 - bcs _08016096 - ldrb r0, [r4] - bl GetBattlerTurnOrderNum - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] -_08016096: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08016104 @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08016048 -_080160A8: - ldr r4, [sp] - cmp r4, 0x4 - beq _080160B0 - b _080161AA -_080160B0: - ldr r2, _080160F0 @ =gBattleMoves - ldr r0, _08016108 @ =gChosenMove - ldrh r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x6] - ands r4, r0 - cmp r4, 0 - beq _08016130 - ldr r0, _080160E8 @ =gBattlerAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08016110 - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0801610C - movs r0, 0x1 - b _08016122 - .align 2, 0 -_080160E4: .4byte gBattleTypeFlags -_080160E8: .4byte gBattlerAttacker -_080160EC: .4byte gSideTimers -_080160F0: .4byte gBattleMoves -_080160F4: .4byte gCurrentMove -_080160F8: .4byte gBattleMons -_080160FC: .4byte gBattleStruct -_08016100: .4byte gActiveBattler -_08016104: .4byte gBattlersCount -_08016108: .4byte gChosenMove -_0801610C: - movs r0, 0x3 - b _08016122 -_08016110: - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08016120 - movs r0, 0 - b _08016122 -_08016120: - movs r0, 0x2 -_08016122: - bl GetBattlerAtPosition - ldr r1, _0801612C @ =gBattlerTarget - strb r0, [r1] - b _08016140 - .align 2, 0 -_0801612C: .4byte gBattlerTarget -_08016130: - ldr r2, _08016178 @ =gBattlerTarget - ldr r0, _0801617C @ =gBattlerAttacker - ldrb r0, [r0] - ldr r1, _08016180 @ =gBattleStruct - ldr r1, [r1] - adds r0, r1 - ldrb r0, [r0, 0xC] - strb r0, [r2] -_08016140: - ldr r7, _08016184 @ =gAbsentBattlerFlags - ldrb r0, [r7] - ldr r1, _08016188 @ =gBitTable - mov r8, r1 - ldr r5, _08016178 @ =gBattlerTarget - ldrb r1, [r5] - lsls r1, 2 - add r1, r8 - ldr r1, [r1] - ands r0, r1 - cmp r0, 0 - bne _0801615A - b _0801632C -_0801615A: - ldr r6, _0801617C @ =gBattlerAttacker - ldrb r0, [r6] - bl GetBattlerSide - adds r4, r0, 0 - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _0801618C - ldrb r0, [r5] - b _0801631A - .align 2, 0 -_08016178: .4byte gBattlerTarget -_0801617C: .4byte gBattlerAttacker -_08016180: .4byte gBattleStruct -_08016184: .4byte gAbsentBattlerFlags -_08016188: .4byte gBitTable -_0801618C: - ldrb r0, [r6] - bl GetBattlerPosition - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerAtPosition - strb r0, [r5] - ldrb r1, [r7] - ldrb r2, [r5] - lsls r0, r2, 2 - add r0, r8 - b _08016310 -_080161AA: - ldr r4, _080161E4 @ =gActiveBattler - ldr r0, _080161E8 @ =gBattlerByTurnOrder - ldr r3, [sp] - adds r0, r3, r0 - ldrb r0, [r0] - strb r0, [r4] - ldrb r0, [r4] - ldr r2, _080161EC @ =gBattleMons - movs r1, 0x58 - muls r1, r0 - adds r1, r2 - adds r1, 0x20 - ldrb r1, [r1] - bl RecordAbilityBattle - ldr r2, _080161F0 @ =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, _080161F4 @ =gBattlerTarget - ldrb r0, [r4] - strb r0, [r1] - b _0801632C - .align 2, 0 -_080161E4: .4byte gActiveBattler -_080161E8: .4byte gBattlerByTurnOrder -_080161EC: .4byte gBattleMons -_080161F0: .4byte gSpecialStatuses -_080161F4: .4byte gBattlerTarget -_080161F8: - ldr r0, [r7] - movs r4, 0x1 - ands r0, r4 - cmp r0, 0 - beq _080162A0 - ldr r2, _08016238 @ =gBattleMoves - ldr r0, _0801623C @ =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 _080162A0 - ldrb r0, [r3] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08016244 - bl Random - adds r1, r4, 0 - ands r1, r0 - cmp r1, 0 - beq _08016240 - movs r0, 0x1 - b _08016256 - .align 2, 0 -_08016238: .4byte gBattleMoves -_0801623C: .4byte gChosenMove -_08016240: - movs r0, 0x3 - b _08016256 -_08016244: - bl Random - adds r1, r4, 0 - ands r1, r0 - cmp r1, 0 - beq _08016254 - movs r0, 0 - b _08016256 -_08016254: - movs r0, 0x2 -_08016256: - bl GetBattlerAtPosition - ldr r1, _08016290 @ =gBattlerTarget - strb r0, [r1] - ldr r0, _08016294 @ =gAbsentBattlerFlags - ldrb r1, [r0] - ldr r2, _08016298 @ =gBitTable - ldr r5, _08016290 @ =gBattlerTarget - ldrb r0, [r5] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0801632C - ldr r0, _0801629C @ =gBattlerAttacker - ldrb r0, [r0] - bl GetBattlerSide - adds r4, r0, 0 - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _0801632C - ldrb r0, [r5] - b _0801631A - .align 2, 0 -_08016290: .4byte gBattlerTarget -_08016294: .4byte gAbsentBattlerFlags -_08016298: .4byte gBitTable -_0801629C: .4byte gBattlerAttacker -_080162A0: - ldr r5, _080162E4 @ =gBattlerTarget - adds r2, r3, 0 - ldrb r0, [r2] - ldr r1, _080162E8 @ =gBattleStruct - ldr r1, [r1] - adds r0, r1 - ldrb r0, [r0, 0xC] - strb r0, [r5] - ldr r6, _080162EC @ =gAbsentBattlerFlags - ldrb r1, [r6] - ldr r7, _080162F0 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0801632C - ldrb r0, [r2] - str r3, [sp, 0x4] - bl GetBattlerSide - adds r4, r0, 0 - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - ldr r3, [sp, 0x4] - cmp r4, r0 - beq _080162F4 - ldrb r0, [r5] - b _0801631A - .align 2, 0 -_080162E4: .4byte gBattlerTarget -_080162E8: .4byte gBattleStruct -_080162EC: .4byte gAbsentBattlerFlags -_080162F0: .4byte gBitTable -_080162F4: - ldrb r0, [r3] - bl GetBattlerPosition - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerAtPosition - strb r0, [r5] - ldrb r1, [r6] - ldrb r2, [r5] - lsls r0, r2, 2 - adds r0, r7 -_08016310: - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _0801632C - adds r0, r2, 0 -_0801631A: - bl GetBattlerPosition - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerAtPosition - strb r0, [r5] -_0801632C: - ldr r4, _08016360 @ =gBattlescriptCurrInstr - ldr r3, _08016364 @ =gBattleScriptsForMoveEffects - ldr r2, _08016368 @ =gBattleMoves - ldr r0, _0801636C @ =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, _08016370 @ =gCurrentActionFuncId - movs r0, 0xA -_0801634C: - strb r0, [r1] - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08016360: .4byte gBattlescriptCurrInstr -_08016364: .4byte gBattleScriptsForMoveEffects -_08016368: .4byte gBattleMoves -_0801636C: .4byte gCurrentMove -_08016370: .4byte gCurrentActionFuncId - thumb_func_end HandleAction_UseMove - - thumb_func_start HandleAction_Switch -HandleAction_Switch: @ 8016374 - push {r4,lr} - ldr r3, _080163E0 @ =gBattlerAttacker - ldr r1, _080163E4 @ =gBattlerByTurnOrder - ldr r0, _080163E8 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r3] - ldr r0, _080163EC @ =gBattle_BG0_X - movs r2, 0 - strh r2, [r0] - ldr r0, _080163F0 @ =gBattle_BG0_Y - strh r2, [r0] - ldr r1, _080163F4 @ =gActionSelectionCursor - ldrb r0, [r3] - adds r0, r1 - strb r2, [r0] - ldr r1, _080163F8 @ =gMoveSelectionCursor - ldrb r0, [r3] - adds r0, r1 - strb r2, [r0] - ldr r2, _080163FC @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r2] - movs r0, 0x7 - strb r0, [r2, 0x1] - ldrb r4, [r3] - strb r4, [r2, 0x2] - ldrb r0, [r3] - ldr r1, _08016400 @ =gBattleStruct - ldr r1, [r1] - adds r0, r1 - adds r0, 0x58 - ldrb r0, [r0] - strb r0, [r2, 0x3] - movs r0, 0xFF - strb r0, [r2, 0x4] - ldr r0, _08016404 @ =gBattleScripting - strb r4, [r0, 0x17] - ldr r1, _08016408 @ =gBattlescriptCurrInstr - ldr r0, _0801640C @ =gUnknown_81D894D - str r0, [r1] - ldr r1, _08016410 @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - ldr r1, _08016414 @ =gBattleResults - ldrb r0, [r1, 0x2] - cmp r0, 0xFE - bhi _080163DA - adds r0, 0x1 - strb r0, [r1, 0x2] -_080163DA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080163E0: .4byte gBattlerAttacker -_080163E4: .4byte gBattlerByTurnOrder -_080163E8: .4byte gCurrentTurnActionNumber -_080163EC: .4byte gBattle_BG0_X -_080163F0: .4byte gBattle_BG0_Y -_080163F4: .4byte gActionSelectionCursor -_080163F8: .4byte gMoveSelectionCursor -_080163FC: .4byte gBattleTextBuff1 -_08016400: .4byte gBattleStruct -_08016404: .4byte gBattleScripting -_08016408: .4byte gBattlescriptCurrInstr -_0801640C: .4byte gUnknown_81D894D -_08016410: .4byte gCurrentActionFuncId -_08016414: .4byte gBattleResults - thumb_func_end HandleAction_Switch - - thumb_func_start HandleAction_UseItem -HandleAction_UseItem: @ 8016418 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _08016474 @ =gBattlerAttacker - ldr r2, _08016478 @ =gBattlerTarget - ldr r1, _0801647C @ =gBattlerByTurnOrder - ldr r0, _08016480 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - strb r0, [r4] - ldr r0, _08016484 @ =gBattle_BG0_X - movs r1, 0 - strh r1, [r0] - ldr r0, _08016488 @ =gBattle_BG0_Y - strh r1, [r0] - ldrb r0, [r4] - bl ClearFuryCutterDestinyBondGrudge - ldr r5, _0801648C @ =gLastUsedItem - ldr r2, _08016490 @ =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] - adds r1, r3, 0 - cmp r1, 0xC - bhi _0801649C - ldr r2, _08016494 @ =gBattlescriptCurrInstr - ldr r1, _08016498 @ =gBattlescriptsForBallThrow - ldrh r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - b _080164FC - .align 2, 0 -_08016474: .4byte gBattlerAttacker -_08016478: .4byte gBattlerTarget -_0801647C: .4byte gBattlerByTurnOrder -_08016480: .4byte gCurrentTurnActionNumber -_08016484: .4byte gBattle_BG0_X -_08016488: .4byte gBattle_BG0_Y -_0801648C: .4byte gLastUsedItem -_08016490: .4byte gBattleBufferB -_08016494: .4byte gBattlescriptCurrInstr -_08016498: .4byte gBattlescriptsForBallThrow -_0801649C: - adds r0, r3, 0 - subs r0, 0x50 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _080164C4 - ldr r0, _080164B8 @ =gBattlescriptCurrInstr - ldr r1, _080164BC @ =gUnknown_81D99FC - ldr r1, [r1] - str r1, [r0] - ldr r1, _080164C0 @ =gCurrentActionFuncId - mov r10, r1 - b _0801671E - .align 2, 0 -_080164B8: .4byte gBattlescriptCurrInstr -_080164BC: .4byte gUnknown_81D99FC -_080164C0: .4byte gCurrentActionFuncId -_080164C4: - movs r0, 0xAF - lsls r0, 1 - cmp r1, r0 - bne _080164E8 - ldr r0, _080164DC @ =gBattlescriptCurrInstr - ldr r1, _080164E0 @ =gUnknown_81D99FC - ldr r1, [r1, 0x4] - str r1, [r0] - ldr r2, _080164E4 @ =gCurrentActionFuncId - mov r10, r2 - b _0801671E - .align 2, 0 -_080164DC: .4byte gBattlescriptCurrInstr -_080164E0: .4byte gUnknown_81D99FC -_080164E4: .4byte gCurrentActionFuncId -_080164E8: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08016510 - ldr r0, _08016504 @ =gBattlescriptCurrInstr - ldr r1, _08016508 @ =gUnknown_81D99E4 - ldr r1, [r1] - str r1, [r0] -_080164FC: - ldr r0, _0801650C @ =gCurrentActionFuncId - mov r10, r0 - b _0801671E - .align 2, 0 -_08016504: .4byte gBattlescriptCurrInstr -_08016508: .4byte gUnknown_81D99E4 -_0801650C: .4byte gCurrentActionFuncId -_08016510: - ldr r3, _08016548 @ =gBattleScripting - ldrb r0, [r4] - strb r0, [r3, 0x17] - lsls r0, 24 - lsrs r0, 25 - ldr r2, _0801654C @ =gBattleStruct - ldr r1, [r2] - adds r0, r1 - adds r0, 0xC4 - ldrb r0, [r0] - subs r0, 0x1 - mov r8, r4 - ldr r1, _08016550 @ =gBattlescriptCurrInstr - mov r9, r1 - ldr r6, _08016554 @ =gUnknown_81D99E4 - mov r12, r3 - adds r7, r2, 0 - ldr r2, _08016558 @ =gCurrentActionFuncId - mov r10, r2 - cmp r0, 0x4 - bls _0801653C - b _08016706 -_0801653C: - lsls r0, 2 - ldr r1, _0801655C @ =_08016560 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08016548: .4byte gBattleScripting -_0801654C: .4byte gBattleStruct -_08016550: .4byte gBattlescriptCurrInstr -_08016554: .4byte gUnknown_81D99E4 -_08016558: .4byte gCurrentActionFuncId -_0801655C: .4byte _08016560 - .align 2, 0 -_08016560: - .4byte _08016706 - .4byte _08016706 - .4byte _08016574 - .4byte _08016608 - .4byte _080166D8 -_08016574: - ldr r5, _080165AC @ =gBattleCommunication - movs r0, 0 - strb r0, [r5, 0x5] - ldr r2, _080165B0 @ =gBattlerAttacker - ldrb r0, [r2] - lsrs r0, 1 - ldr r1, [r7] - adds r0, r1 - adds r0, 0xC6 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - mov r8, r2 - cmp r0, 0 - beq _080165C0 - movs r0, 0x3E - ands r0, r1 - ldr r1, _080165B4 @ =gBattlescriptCurrInstr - mov r9, r1 - ldr r6, _080165B8 @ =gUnknown_81D99E4 - ldr r2, _080165BC @ =gCurrentActionFuncId - mov r10, r2 - cmp r0, 0 - bne _080165A6 - b _08016706 -_080165A6: - movs r0, 0x5 - strb r0, [r5, 0x5] - b _08016706 - .align 2, 0 -_080165AC: .4byte gBattleCommunication -_080165B0: .4byte gBattlerAttacker -_080165B4: .4byte gBattlescriptCurrInstr -_080165B8: .4byte gUnknown_81D99E4 -_080165BC: .4byte gCurrentActionFuncId -_080165C0: - ldr r0, _080165FC @ =gBattlescriptCurrInstr - mov r9, r0 - ldr r6, _08016600 @ =gUnknown_81D99E4 - ldr r1, _08016604 @ =gCurrentActionFuncId - mov r10, r1 - mov r4, r8 - adds r3, r7, 0 - adds r2, r5, 0 -_080165D0: - ldrb r1, [r4] - lsrs r1, 1 - ldr r0, [r3] - adds r1, r0 - adds r1, 0xC6 - ldrb r0, [r1] - lsrs r0, 1 - strb r0, [r1] - ldrb r0, [r2, 0x5] - adds r0, 0x1 - strb r0, [r2, 0x5] - ldrb r0, [r4] - lsrs r0, 1 - ldr r1, [r3] - adds r0, r1 - adds r0, 0xC6 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080165D0 - b _08016706 - .align 2, 0 -_080165FC: .4byte gBattlescriptCurrInstr -_08016600: .4byte gUnknown_81D99E4 -_08016604: .4byte gCurrentActionFuncId -_08016608: - ldr r3, _0801663C @ =gBattleCommunication - movs r0, 0x4 - strb r0, [r3, 0x5] - ldr r2, _08016640 @ =gBattlerAttacker - ldrb r0, [r2] - lsrs r0, 1 - ldr r1, [r7] - adds r0, r1 - adds r6, r0, 0 - adds r6, 0xC6 - ldrb r1, [r6] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r8, r2 - cmp r5, 0 - beq _08016650 - movs r0, 0x5 - strb r0, [r3, 0x5] - ldr r2, _08016644 @ =gBattlescriptCurrInstr - mov r9, r2 - ldr r6, _08016648 @ =gUnknown_81D99E4 - ldr r0, _0801664C @ =gCurrentActionFuncId - mov r10, r0 - b _08016706 - .align 2, 0 -_0801663C: .4byte gBattleCommunication -_08016640: .4byte gBattlerAttacker -_08016644: .4byte gBattlescriptCurrInstr -_08016648: .4byte gUnknown_81D99E4 -_0801664C: .4byte gCurrentActionFuncId -_08016650: - ldr r3, _080166C4 @ =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, _080166C8 @ =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 r1, _080166CC @ =gBattlescriptCurrInstr - mov r9, r1 - ldr r6, _080166D0 @ =gUnknown_81D99E4 - ldr r0, _080166D4 @ =gCurrentActionFuncId - mov r10, r0 - cmp r2, 0 - bne _080166B4 - mov r5, r8 - adds r4, r7, 0 - adds r2, r3, 0 -_0801668A: - ldrb r1, [r5] - lsrs r1, 1 - ldr r0, [r4] - adds r1, r0 - adds r1, 0xC6 - ldrb r0, [r1] - lsrs r0, 1 - strb r0, [r1] - ldrb r0, [r2, 0x2] - adds r0, 0x1 - strb r0, [r2, 0x2] - ldrb r0, [r5] - lsrs r0, 1 - ldr r1, [r4] - adds r0, r1 - adds r0, 0xC6 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0801668A -_080166B4: - ldrb r0, [r3, 0x2] - adds r0, 0xE - movs r1, 0 - mov r2, r12 - strb r0, [r2, 0x10] - strb r1, [r2, 0x11] - b _08016706 - .align 2, 0 -_080166C4: .4byte gBattleTextBuff1 -_080166C8: .4byte gBattleTextBuff2 -_080166CC: .4byte gBattlescriptCurrInstr -_080166D0: .4byte gUnknown_81D99E4 -_080166D4: .4byte gCurrentActionFuncId -_080166D8: - ldr r0, _080166EC @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080166F4 - ldr r1, _080166F0 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - b _080166F8 - .align 2, 0 -_080166EC: .4byte gBattleTypeFlags -_080166F0: .4byte gBattleCommunication -_080166F4: - ldr r0, _08016734 @ =gBattleCommunication - strb r1, [r0, 0x5] -_080166F8: - ldr r0, _08016738 @ =gBattlerAttacker - mov r8, r0 - ldr r1, _0801673C @ =gBattlescriptCurrInstr - mov r9, r1 - ldr r6, _08016740 @ =gUnknown_81D99E4 - ldr r2, _08016744 @ =gCurrentActionFuncId - mov r10, r2 -_08016706: - mov r1, r8 - ldrb r0, [r1] - lsrs r0, 1 - ldr r1, [r7] - adds r0, r1 - adds r0, 0xC4 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - mov r2, r9 - str r0, [r2] -_0801671E: - movs r0, 0xA - mov r1, r10 - strb r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08016734: .4byte gBattleCommunication -_08016738: .4byte gBattlerAttacker -_0801673C: .4byte gBattlescriptCurrInstr -_08016740: .4byte gUnknown_81D99E4 -_08016744: .4byte gCurrentActionFuncId - thumb_func_end HandleAction_UseItem - - thumb_func_start TryRunFromBattle -TryRunFromBattle: @ 8016748 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r6, 0 - ldr r1, _0801676C @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r1, r0, r1 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08016774 - ldr r1, _08016770 @ =gEnigmaBerries - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x7] - b _0801677E - .align 2, 0 -_0801676C: .4byte gBattleMons -_08016770: .4byte gEnigmaBerries -_08016774: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r1, r0, 24 -_0801677E: - ldr r0, _080167AC @ =gPotentialItemEffectBattler - strb r4, [r0] - cmp r1, 0x25 - bne _080167BC - ldr r2, _080167B0 @ =gLastUsedItem - ldr r1, _080167B4 @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r0, r1 - ldrh r0, [r0, 0x2E] - strh r0, [r2] - ldr r0, _080167B8 @ =gProtectStructs - lsls r2, r4, 4 - adds r2, r0 - ldrb r1, [r2, 0x1] - movs r0, 0x19 - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r2, 0x1] - b _08016816 - .align 2, 0 -_080167AC: .4byte gPotentialItemEffectBattler -_080167B0: .4byte gLastUsedItem -_080167B4: .4byte gBattleMons -_080167B8: .4byte gProtectStructs -_080167BC: - ldr r7, _080167EC @ =gBattleMons - movs r2, 0x58 - adds r0, r4, 0 - muls r0, r2 - adds r5, r0, r7 - adds r0, r5, 0 - adds r0, 0x20 - ldrb r1, [r0] - cmp r1, 0x32 - bne _080167F8 - ldr r0, _080167F0 @ =gLastUsedAbility - strb r1, [r0] - ldr r0, _080167F4 @ =gProtectStructs - lsls r2, r4, 4 - adds r2, r0 - ldrb r1, [r2, 0x1] - movs r0, 0x19 - negs r0, r0 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r2, 0x1] - b _08016816 - .align 2, 0 -_080167EC: .4byte gBattleMons -_080167F0: .4byte gLastUsedAbility -_080167F4: .4byte gProtectStructs -_080167F8: - ldr r0, _08016820 @ =gBattleTypeFlags - ldr r3, [r0] - movs r0, 0xA0 - lsls r0, 8 - ands r0, r3 - movs r1, 0x80 - lsls r1, 8 - cmp r0, r1 - bne _08016824 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0801687A -_08016816: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - b _0801687A - .align 2, 0 -_08016820: .4byte gBattleTypeFlags -_08016824: - movs r0, 0x1 - ands r3, r0 - cmp r3, 0 - bne _0801686E - movs r1, 0x1 - adds r0, r4, 0 - eors r0, r1 - muls r0, r2 - adds r2, r0, r7 - ldrh r0, [r5, 0x6] - ldrh r1, [r2, 0x6] - cmp r0, r1 - bcs _08016868 - lsls r0, 7 - ldrh r1, [r2, 0x6] - bl __divsi3 - adds r4, r0, 0 - ldr r0, _08016894 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x6C - 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 _0801686E -_08016868: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_0801686E: - ldr r0, _08016894 @ =gBattleStruct - ldr r1, [r0] - adds r1, 0x6C - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0801687A: - cmp r6, 0 - beq _0801688C - ldr r1, _08016898 @ =gCurrentTurnActionNumber - ldr r0, _0801689C @ =gBattlersCount - ldrb r0, [r0] - strb r0, [r1] - ldr r1, _080168A0 @ =gBattleOutcome - movs r0, 0x4 - strb r0, [r1] -_0801688C: - adds r0, r6, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08016894: .4byte gBattleStruct -_08016898: .4byte gCurrentTurnActionNumber -_0801689C: .4byte gBattlersCount -_080168A0: .4byte gBattleOutcome - thumb_func_end TryRunFromBattle - - thumb_func_start HandleAction_Run -HandleAction_Run: @ 80168A4 - push {r4-r6,lr} - ldr r4, _080168F4 @ =gBattlerAttacker - ldr r1, _080168F8 @ =gBattlerByTurnOrder - ldr r5, _080168FC @ =gCurrentTurnActionNumber - ldrb r0, [r5] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r4] - ldr r0, _08016900 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801694C - ldr r0, _08016904 @ =gBattlersCount - ldrb r1, [r0] - strb r1, [r5] - ldr r2, _08016908 @ =gActiveBattler - movs r0, 0 - strb r0, [r2] - lsls r1, 24 - cmp r1, 0 - beq _08016938 - adds r4, r2, 0 - ldr r6, _0801690C @ =gChosenActionByBattler - ldr r5, _08016910 @ =gBattleOutcome -_080168D8: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08016914 - ldrb r0, [r4] - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x3 - bne _08016926 - ldrb r0, [r5] - movs r1, 0x2 - b _08016922 - .align 2, 0 -_080168F4: .4byte gBattlerAttacker -_080168F8: .4byte gBattlerByTurnOrder -_080168FC: .4byte gCurrentTurnActionNumber -_08016900: .4byte gBattleTypeFlags -_08016904: .4byte gBattlersCount -_08016908: .4byte gActiveBattler -_0801690C: .4byte gChosenActionByBattler -_08016910: .4byte gBattleOutcome -_08016914: - ldrb r0, [r4] - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0x3 - bne _08016926 - ldrb r0, [r5] - movs r1, 0x1 -_08016922: - orrs r0, r1 - strb r0, [r5] -_08016926: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08016944 @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _080168D8 -_08016938: - ldr r0, _08016948 @ =gBattleOutcome - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] - b _080169D8 - .align 2, 0 -_08016944: .4byte gBattlersCount -_08016948: .4byte gBattleOutcome -_0801694C: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0801698C - ldrb r0, [r4] - bl TryRunFromBattle - lsls r0, 24 - cmp r0, 0 - bne _080169D8 - ldrb r0, [r4] - bl ClearFuryCutterDestinyBondGrudge - ldr r1, _0801697C @ =gBattleCommunication - movs r0, 0x3 - strb r0, [r1, 0x5] - ldr r1, _08016980 @ =gBattlescriptCurrInstr - ldr r0, _08016984 @ =gUnknown_81D893A - str r0, [r1] - ldr r1, _08016988 @ =gCurrentActionFuncId - movs r0, 0xA - b _080169D6 - .align 2, 0 -_0801697C: .4byte gBattleCommunication -_08016980: .4byte gBattlescriptCurrInstr -_08016984: .4byte gUnknown_81D893A -_08016988: .4byte gCurrentActionFuncId -_0801698C: - ldr r1, _080169B4 @ =gBattleMons - ldrb r2, [r4] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080169B8 @ =0x0400e000 - ands r0, r1 - cmp r0, 0 - beq _080169CC - ldr r1, _080169BC @ =gBattleCommunication - movs r0, 0x4 - strb r0, [r1, 0x5] - ldr r1, _080169C0 @ =gBattlescriptCurrInstr - ldr r0, _080169C4 @ =gUnknown_81D893A - str r0, [r1] - ldr r1, _080169C8 @ =gCurrentActionFuncId - movs r0, 0xA - b _080169D6 - .align 2, 0 -_080169B4: .4byte gBattleMons -_080169B8: .4byte 0x0400e000 -_080169BC: .4byte gBattleCommunication -_080169C0: .4byte gBattlescriptCurrInstr -_080169C4: .4byte gUnknown_81D893A -_080169C8: .4byte gCurrentActionFuncId -_080169CC: - ldr r0, _080169E0 @ =gBattlersCount - ldrb r0, [r0] - strb r0, [r5] - ldr r1, _080169E4 @ =gBattleOutcome - movs r0, 0x6 -_080169D6: - strb r0, [r1] -_080169D8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080169E0: .4byte gBattlersCount -_080169E4: .4byte gBattleOutcome - thumb_func_end HandleAction_Run - - thumb_func_start HandleAction_WatchesCarefully -HandleAction_WatchesCarefully: @ 80169E8 - push {r4,r5,lr} - ldr r2, _08016A44 @ =gBattlerAttacker - ldr r1, _08016A48 @ =gBattlerByTurnOrder - ldr r0, _08016A4C @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08016A50 @ =gBattle_BG0_X - movs r5, 0 - strh r5, [r0] - ldr r0, _08016A54 @ =gBattle_BG0_Y - strh r5, [r0] - ldr r4, _08016A58 @ =gBattleStruct - ldr r1, [r4] - adds r2, r1, 0 - adds r2, 0x79 - ldrb r0, [r2] - cmp r0, 0 - beq _08016A74 - subs r0, 0x1 - strb r0, [r2] - ldr r0, [r4] - adds r0, 0x79 - ldrb r0, [r0] - cmp r0, 0 - bne _08016A68 - ldr r0, _08016A5C @ =gEnemyParty - movs r1, 0xB - bl GetMonData - ldr r4, [r4] - adds r4, 0x7C - ldr r2, _08016A60 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x8] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08016A64 @ =0x000004fb - bl __divsi3 - strb r0, [r4] - b _08016A98 - .align 2, 0 -_08016A44: .4byte gBattlerAttacker -_08016A48: .4byte gBattlerByTurnOrder -_08016A4C: .4byte gCurrentTurnActionNumber -_08016A50: .4byte gBattle_BG0_X -_08016A54: .4byte gBattle_BG0_Y -_08016A58: .4byte gBattleStruct -_08016A5C: .4byte gEnemyParty -_08016A60: .4byte gBaseStats -_08016A64: .4byte 0x000004fb -_08016A68: - ldr r1, _08016A70 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _08016A9C - .align 2, 0 -_08016A70: .4byte gBattleCommunication -_08016A74: - adds r1, 0x7A - ldrb r0, [r1] - cmp r0, 0 - beq _08016A98 - subs r0, 0x1 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x7A - ldrb r0, [r0] - cmp r0, 0 - beq _08016A98 - ldr r1, _08016A94 @ =gBattleCommunication - movs r0, 0x2 - strb r0, [r1, 0x5] - b _08016A9C - .align 2, 0 -_08016A94: .4byte gBattleCommunication -_08016A98: - ldr r0, _08016AB0 @ =gBattleCommunication - strb r5, [r0, 0x5] -_08016A9C: - ldr r1, _08016AB4 @ =gBattlescriptCurrInstr - ldr r0, _08016AB8 @ =gBattlescriptsForSafariActions - ldr r0, [r0] - str r0, [r1] - ldr r1, _08016ABC @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08016AB0: .4byte gBattleCommunication -_08016AB4: .4byte gBattlescriptCurrInstr -_08016AB8: .4byte gBattlescriptsForSafariActions -_08016ABC: .4byte gCurrentActionFuncId - thumb_func_end HandleAction_WatchesCarefully - - thumb_func_start HandleAction_SafariZoneBallThrow -HandleAction_SafariZoneBallThrow: @ 8016AC0 - ldr r2, _08016AF8 @ =gBattlerAttacker - ldr r1, _08016AFC @ =gBattlerByTurnOrder - ldr r0, _08016B00 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08016B04 @ =gBattle_BG0_X - movs r1, 0 - strh r1, [r0] - ldr r0, _08016B08 @ =gBattle_BG0_Y - strh r1, [r0] - ldr r1, _08016B0C @ =gNumSafariBalls - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - ldr r1, _08016B10 @ =gLastUsedItem - movs r0, 0x5 - strh r0, [r1] - ldr r1, _08016B14 @ =gBattlescriptCurrInstr - ldr r0, _08016B18 @ =gBattlescriptsForBallThrow - ldr r0, [r0, 0x14] - str r0, [r1] - ldr r1, _08016B1C @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - bx lr - .align 2, 0 -_08016AF8: .4byte gBattlerAttacker -_08016AFC: .4byte gBattlerByTurnOrder -_08016B00: .4byte gCurrentTurnActionNumber -_08016B04: .4byte gBattle_BG0_X -_08016B08: .4byte gBattle_BG0_Y -_08016B0C: .4byte gNumSafariBalls -_08016B10: .4byte gLastUsedItem -_08016B14: .4byte gBattlescriptCurrInstr -_08016B18: .4byte gBattlescriptsForBallThrow -_08016B1C: .4byte gCurrentActionFuncId - thumb_func_end HandleAction_SafariZoneBallThrow - - thumb_func_start HandleAction_ThrowPokeblock -HandleAction_ThrowPokeblock: @ 8016B20 - push {r4-r7,lr} - ldr r2, _08016B9C @ =gBattlerAttacker - ldr r1, _08016BA0 @ =gBattlerByTurnOrder - ldr r0, _08016BA4 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08016BA8 @ =gBattle_BG0_X - movs r7, 0 - strh r7, [r0] - ldr r0, _08016BAC @ =gBattle_BG0_Y - strh r7, [r0] - bl Random - ldr r6, _08016BB0 @ =gBattleStruct - ldr r5, [r6] - adds r5, 0x7A - ldrb r4, [r5] - adds r4, 0x2 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - adds r0, r4 - strb r0, [r5] - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x7A - ldrb r0, [r1] - cmp r0, 0x6 - bls _08016B66 - movs r0, 0x6 - strb r0, [r1] -_08016B66: - ldr r0, [r6] - adds r0, 0x79 - strb r7, [r0] - ldr r1, [r6] - adds r1, 0x7C - ldrb r0, [r1] - lsrs r0, 1 - strb r0, [r1] - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x7C - ldrb r0, [r1] - cmp r0, 0x2 - bhi _08016B86 - movs r0, 0x3 - strb r0, [r1] -_08016B86: - ldr r1, _08016BB4 @ =gBattlescriptCurrInstr - ldr r0, _08016BB8 @ =gBattlescriptsForSafariActions - ldr r0, [r0, 0x8] - str r0, [r1] - ldr r1, _08016BBC @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08016B9C: .4byte gBattlerAttacker -_08016BA0: .4byte gBattlerByTurnOrder -_08016BA4: .4byte gCurrentTurnActionNumber -_08016BA8: .4byte gBattle_BG0_X -_08016BAC: .4byte gBattle_BG0_Y -_08016BB0: .4byte gBattleStruct -_08016BB4: .4byte gBattlescriptCurrInstr -_08016BB8: .4byte gBattlescriptsForSafariActions -_08016BBC: .4byte gCurrentActionFuncId - thumb_func_end HandleAction_ThrowPokeblock - - thumb_func_start HandleAction_GoNear -HandleAction_GoNear: @ 8016BC0 - push {r4-r7,lr} - ldr r2, _08016C3C @ =gBattlerAttacker - ldr r1, _08016C40 @ =gBattlerByTurnOrder - ldr r0, _08016C44 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08016C48 @ =gBattle_BG0_X - movs r7, 0 - strh r7, [r0] - ldr r0, _08016C4C @ =gBattle_BG0_Y - strh r7, [r0] - bl Random - ldr r6, _08016C50 @ =gBattleStruct - ldr r5, [r6] - adds r5, 0x79 - ldrb r4, [r5] - adds r4, 0x2 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - adds r0, r4 - strb r0, [r5] - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x79 - ldrb r0, [r1] - cmp r0, 0x6 - bls _08016C06 - movs r0, 0x6 - strb r0, [r1] -_08016C06: - ldr r0, [r6] - adds r0, 0x7A - strb r7, [r0] - ldr r1, [r6] - adds r1, 0x7C - ldrb r0, [r1] - lsls r0, 1 - strb r0, [r1] - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x7C - ldrb r0, [r1] - cmp r0, 0x14 - bls _08016C26 - movs r0, 0x14 - strb r0, [r1] -_08016C26: - ldr r1, _08016C54 @ =gBattlescriptCurrInstr - ldr r0, _08016C58 @ =gBattlescriptsForSafariActions - ldr r0, [r0, 0x4] - str r0, [r1] - ldr r1, _08016C5C @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08016C3C: .4byte gBattlerAttacker -_08016C40: .4byte gBattlerByTurnOrder -_08016C44: .4byte gCurrentTurnActionNumber -_08016C48: .4byte gBattle_BG0_X -_08016C4C: .4byte gBattle_BG0_Y -_08016C50: .4byte gBattleStruct -_08016C54: .4byte gBattlescriptCurrInstr -_08016C58: .4byte gBattlescriptsForSafariActions -_08016C5C: .4byte gCurrentActionFuncId - thumb_func_end HandleAction_GoNear - - thumb_func_start HandleAction_SafariZoneRun -HandleAction_SafariZoneRun: @ 8016C60 - push {r4,lr} - ldr r2, _08016C88 @ =gBattlerAttacker - ldr r1, _08016C8C @ =gBattlerByTurnOrder - ldr r4, _08016C90 @ =gCurrentTurnActionNumber - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0x11 - bl PlaySE - ldr r0, _08016C94 @ =gBattlersCount - ldrb r0, [r0] - strb r0, [r4] - ldr r1, _08016C98 @ =gBattleOutcome - movs r0, 0x4 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08016C88: .4byte gBattlerAttacker -_08016C8C: .4byte gBattlerByTurnOrder -_08016C90: .4byte gCurrentTurnActionNumber -_08016C94: .4byte gBattlersCount -_08016C98: .4byte gBattleOutcome - thumb_func_end HandleAction_SafariZoneRun - - thumb_func_start HandleAction_OldManBallThrow -HandleAction_OldManBallThrow: @ 8016C9C - ldr r3, _08016CE8 @ =gBattlerAttacker - ldr r1, _08016CEC @ =gBattlerByTurnOrder - ldr r0, _08016CF0 @ =gCurrentTurnActionNumber - ldrb r0, [r0] - adds r0, r1 - ldrb r2, [r0] - strb r2, [r3] - ldr r0, _08016CF4 @ =gBattle_BG0_X - movs r1, 0 - strh r1, [r0] - ldr r0, _08016CF8 @ =gBattle_BG0_Y - strh r1, [r0] - ldr r1, _08016CFC @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - strb r2, [r1, 0x2] - ldr r2, _08016D00 @ =gBattlerPartyIndexes - 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, _08016D04 @ =gBattlescriptCurrInstr - ldr r0, _08016D08 @ =gBattlescriptsForSafariActions - ldr r0, [r0, 0xC] - str r0, [r1] - ldr r1, _08016D0C @ =gCurrentActionFuncId - movs r0, 0xA - strb r0, [r1] - ldr r1, _08016D10 @ =gActionsByTurnOrder - movs r0, 0xC - strb r0, [r1, 0x1] - bx lr - .align 2, 0 -_08016CE8: .4byte gBattlerAttacker -_08016CEC: .4byte gBattlerByTurnOrder -_08016CF0: .4byte gCurrentTurnActionNumber -_08016CF4: .4byte gBattle_BG0_X -_08016CF8: .4byte gBattle_BG0_Y -_08016CFC: .4byte gBattleTextBuff1 -_08016D00: .4byte gBattlerPartyIndexes -_08016D04: .4byte gBattlescriptCurrInstr -_08016D08: .4byte gBattlescriptsForSafariActions -_08016D0C: .4byte gCurrentActionFuncId -_08016D10: .4byte gActionsByTurnOrder - thumb_func_end HandleAction_OldManBallThrow - - thumb_func_start HandleAction_TryFinish -HandleAction_TryFinish: @ 8016D14 - push {lr} - bl HandleFaintedMonActions - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08016D30 - ldr r0, _08016D34 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x4D - strb r1, [r0] - ldr r1, _08016D38 @ =gCurrentActionFuncId - movs r0, 0xC - strb r0, [r1] -_08016D30: - pop {r0} - bx r0 - .align 2, 0 -_08016D34: .4byte gBattleStruct -_08016D38: .4byte gCurrentActionFuncId - thumb_func_end HandleAction_TryFinish - - thumb_func_start HandleAction_NothingIsFainted -HandleAction_NothingIsFainted: @ 8016D3C - ldr r1, _08016D5C @ =gCurrentTurnActionNumber - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r3, _08016D60 @ =gCurrentActionFuncId - ldr r2, _08016D64 @ =gActionsByTurnOrder - ldrb r0, [r1] - adds r0, r2 - ldrb r0, [r0] - strb r0, [r3] - ldr r2, _08016D68 @ =gHitMarker - ldr r0, [r2] - ldr r1, _08016D6C @ =0xf1e892af - ands r0, r1 - str r0, [r2] - bx lr - .align 2, 0 -_08016D5C: .4byte gCurrentTurnActionNumber -_08016D60: .4byte gCurrentActionFuncId -_08016D64: .4byte gActionsByTurnOrder -_08016D68: .4byte gHitMarker -_08016D6C: .4byte 0xf1e892af - thumb_func_end HandleAction_NothingIsFainted - - thumb_func_start HandleAction_ActionFinished -HandleAction_ActionFinished: @ 8016D70 - push {r4,r5,lr} - ldr r1, _08016DE4 @ =gCurrentTurnActionNumber - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r3, _08016DE8 @ =gCurrentActionFuncId - ldr r2, _08016DEC @ =gActionsByTurnOrder - ldrb r0, [r1] - adds r0, r2 - ldrb r0, [r0] - strb r0, [r3] - bl SpecialStatusesClear - ldr r2, _08016DF0 @ =gHitMarker - ldr r0, [r2] - ldr r1, _08016DF4 @ =0xf1e892af - ands r0, r1 - str r0, [r2] - ldr r0, _08016DF8 @ =gCurrentMove - movs r1, 0 - strh r1, [r0] - ldr r0, _08016DFC @ =gBattleMoveDamage - movs r4, 0 - str r4, [r0] - ldr r0, _08016E00 @ =gMoveResultFlags - strb r1, [r0] - ldr r5, _08016E04 @ =gBattleScripting - strb r1, [r5, 0x18] - strb r1, [r5, 0x19] - ldr r2, _08016E08 @ =gLastLandedMoves - ldr r3, _08016E0C @ =gBattlerAttacker - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - strh r4, [r0] - ldr r2, _08016E10 @ =gLastHitByType - ldrb r0, [r3] - lsls r0, 1 - adds r0, r2 - strh r4, [r0] - ldr r0, _08016E14 @ =gBattleStruct - ldr r0, [r0] - strb r1, [r0, 0x13] - ldr r0, _08016E18 @ =gDynamicBasePower - strh r4, [r0] - strb r1, [r5, 0x14] - ldr r0, _08016E1C @ =gBattleCommunication - strb r1, [r0, 0x3] - strb r1, [r0, 0x4] - strb r1, [r5, 0x16] - ldr r0, _08016E20 @ =gBattleResources - ldr r0, [r0] - ldr r0, [r0, 0x8] - adds r0, 0x20 - strb r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08016DE4: .4byte gCurrentTurnActionNumber -_08016DE8: .4byte gCurrentActionFuncId -_08016DEC: .4byte gActionsByTurnOrder -_08016DF0: .4byte gHitMarker -_08016DF4: .4byte 0xf1e892af -_08016DF8: .4byte gCurrentMove -_08016DFC: .4byte gBattleMoveDamage -_08016E00: .4byte gMoveResultFlags -_08016E04: .4byte gBattleScripting -_08016E08: .4byte gLastLandedMoves -_08016E0C: .4byte gBattlerAttacker -_08016E10: .4byte gLastHitByType -_08016E14: .4byte gBattleStruct -_08016E18: .4byte gDynamicBasePower -_08016E1C: .4byte gBattleCommunication -_08016E20: .4byte gBattleResources - thumb_func_end HandleAction_ActionFinished - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index e696f42d7..b718deee6 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -1962,14 +1962,14 @@ _080CEEA0: bl Free str r6, [r4] bl FreeAllWindowBuffers - ldr r0, _080CEECC @ =gUnknown_300537C + ldr r0, _080CEECC @ =gCB2_AfterEvolution ldr r0, [r0] bl SetMainCallback2 b _080CF528 .align 2, 0 _080CEEC4: .4byte gPaletteFade _080CEEC8: .4byte gUnknown_2039A20 -_080CEECC: .4byte gUnknown_300537C +_080CEECC: .4byte gCB2_AfterEvolution _080CEED0: ldr r0, _080CEF04 @ =gBattleCommunication ldrb r1, [r0, 0x2] @@ -3252,14 +3252,14 @@ _080CF9E0: negs r0, r0 ands r0, r1 strb r0, [r2] - ldr r0, _080CFA10 @ =gUnknown_300537C + ldr r0, _080CFA10 @ =gCB2_AfterEvolution ldr r0, [r0] bl SetMainCallback2 b _080D003A .align 2, 0 _080CFA08: .4byte gUnknown_2039A20 _080CFA0C: .4byte gTextFlags -_080CFA10: .4byte gUnknown_300537C +_080CFA10: .4byte gCB2_AfterEvolution _080CFA14: ldr r0, _080CFA60 @ =gBattleCommunication ldrb r1, [r0, 0x2] diff --git a/asm/party_menu.s b/asm/party_menu.s index 5ebea0f54..febd6f327 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -15699,7 +15699,7 @@ sub_8126704: @ 8126704 cmp r4, 0 beq _08126754 bl sub_811F070 - ldr r0, _08126750 @ =gUnknown_300537C + ldr r0, _08126750 @ =gCB2_AfterEvolution ldr r1, [r6] str r1, [r0] ldrb r3, [r6, 0x9] @@ -15713,7 +15713,7 @@ sub_8126704: @ 8126704 .align 2, 0 _08126748: .4byte gUnknown_203B0A0 _0812674C: .4byte gPlayerParty -_08126750: .4byte gUnknown_300537C +_08126750: .4byte gCB2_AfterEvolution _08126754: ldr r0, _08126768 @ =gTasks lsls r1, r5, 2 @@ -16248,7 +16248,7 @@ _08126BCE: thumb_func_start sub_8126BD4 sub_8126BD4: @ 8126BD4 push {r4,r5,lr} - ldr r1, _08126C10 @ =gUnknown_300537C + ldr r1, _08126C10 @ =gCB2_AfterEvolution ldr r4, _08126C14 @ =gUnknown_203B0A0 ldr r0, [r4] str r0, [r1] @@ -16274,7 +16274,7 @@ sub_8126BD4: @ 8126BD4 pop {r0} bx r0 .align 2, 0 -_08126C10: .4byte gUnknown_300537C +_08126C10: .4byte gCB2_AfterEvolution _08126C14: .4byte gUnknown_203B0A0 _08126C18: .4byte gSpecialVar_ItemId _08126C1C: .4byte gPlayerParty diff --git a/asm/trade.s b/asm/trade.s index 426bbb112..88c8ce686 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -11052,7 +11052,7 @@ _0805223C: ldrb r0, [r0] movs r1, 0 bl sub_805080C - ldr r1, _08052284 @ =gUnknown_300537C + ldr r1, _08052284 @ =gCB2_AfterEvolution ldr r0, _08052288 @ =sub_8050948 str r0, [r1] ldr r7, _0805228C @ =gUnknown_2031DA4 @@ -11081,7 +11081,7 @@ _0805223C: b _080522A8 .align 2, 0 _08052280: .4byte gSpecialVar_0x8005 -_08052284: .4byte gUnknown_300537C +_08052284: .4byte gCB2_AfterEvolution _08052288: .4byte sub_8050948 _0805228C: .4byte gUnknown_2031DA4 _08052290: .4byte gPlayerParty @@ -13277,7 +13277,7 @@ _08053698: ldrb r0, [r0] movs r1, 0 bl sub_805080C - ldr r1, _080536E0 @ =gUnknown_300537C + ldr r1, _080536E0 @ =gCB2_AfterEvolution ldr r0, _080536E4 @ =sub_8050948 str r0, [r1] ldr r7, _080536E8 @ =gUnknown_2031DA4 @@ -13306,7 +13306,7 @@ _08053698: b _08053704 .align 2, 0 _080536DC: .4byte gSpecialVar_0x8005 -_080536E0: .4byte gUnknown_300537C +_080536E0: .4byte gCB2_AfterEvolution _080536E4: .4byte sub_8050948 _080536E8: .4byte gUnknown_2031DA4 _080536EC: .4byte gPlayerParty @@ -13404,7 +13404,7 @@ _080537A8: .align 2, 0 _080537B4: .4byte gSoftResetDisabled _080537B8: - ldr r0, _080537F4 @ =gUnknown_300537C + ldr r0, _080537F4 @ =gCB2_AfterEvolution ldr r1, _080537F8 @ =sub_8053E8C mov r8, r1 str r1, [r0] @@ -13433,7 +13433,7 @@ _080537B8: bl TradeEvolutionScene b _0805380E .align 2, 0 -_080537F4: .4byte gUnknown_300537C +_080537F4: .4byte gCB2_AfterEvolution _080537F8: .4byte sub_8053E8C _080537FC: .4byte gUnknown_2031DA4 _08053800: .4byte gPlayerParty diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0d389b868..8c049f4e0 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -72,7 +72,7 @@ BattleScript_WildMonFled:: @ 81D891D BattleScript_PrintCantRunFromTrainer:: @ 81D8924 .incbin "baserom.gba", 0x1D8924, 0x16 -gUnknown_81D893A:: @ 81D893A +BattleScript_PrintFailedToRunString:: @ 81D893A .incbin "baserom.gba", 0x1D893A, 0x9 BattleScript_PrintCantEscapeFromBattle:: @ 81D8943 @@ -81,7 +81,7 @@ BattleScript_PrintCantEscapeFromBattle:: @ 81D8943 BattleScript_PrintFullBox:: @ 81D8949 .incbin "baserom.gba", 0x1D8949, 0x4 -gUnknown_81D894D:: @ 81D894D +BattleScript_ActionSwitch:: @ 81D894D .incbin "baserom.gba", 0x1D894D, 0xA4 BattleScript_Pausex20:: @ 81D89F1 diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 3f8ed8f38..199fd0c78 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -3,10 +3,10 @@ gBattlescriptsForBallThrow:: @ 81D99B0 .incbin "baserom.gba", 0x1D99B0, 0x34 -gUnknown_81D99E4:: @ 81D99E4 +gBattlescriptsForUsingItem:: @ 81D99E4 .incbin "baserom.gba", 0x1D99E4, 0x18 -gUnknown_81D99FC:: @ 81D99FC +gBattlescriptsForRunningByItem:: @ 81D99FC .incbin "baserom.gba", 0x1D99FC, 0x8 gBattlescriptsForSafariActions:: @ 81D9A04 diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 870b0524e..184527587 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -230,4 +230,10 @@ extern const u8 gUnknown_81D9A88[]; extern const u8 gUnknown_81D91A1[]; // knizz: silph scope unveil extern const u8 gUnknown_81D88D7[]; +extern const u8 *const gBattleScriptsForMoveEffects[]; +extern const u8 *const gBattlescriptsForBallThrow[]; +extern const u8 *const gBattlescriptsForRunningByItem[]; +extern const u8 *const gBattlescriptsForUsingItem[]; +extern const u8 *const gBattlescriptsForSafariActions[]; + #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/evolution_scene.h b/include/evolution_scene.h index 1d87ceb76..6ceed99c1 100644 --- a/include/evolution_scene.h +++ b/include/evolution_scene.h @@ -3,8 +3,8 @@ #include "global.h" -void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); -void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID); +void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID); +void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID); void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID); extern void (*gCB2_AfterEvolution)(void); diff --git a/include/pokemon.h b/include/pokemon.h index c5ee4eda5..372b2abb6 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -629,10 +629,10 @@ u8 GetTrainerEncounterMusicId(u16 trainer); void AdjustFriendship(struct Pokemon *mon, u8 event); void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies); u16 GetMonEVCount(struct Pokemon *mon); -void sub_8043A68(void); +void RandomlyGivePartyPokerus(struct Pokemon *party); u8 CheckPartyPokerus(struct Pokemon *party, u8 selection); u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection); -void sub_8043B40(void); +void PartySpreadPokerus(struct Pokemon *party); bool8 TryIncrementMonLevel(struct Pokemon *mon); u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm); u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves); diff --git a/include/quest_log.h b/include/quest_log.h index 3d9dfb86d..3a2f31780 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -14,6 +14,7 @@ struct UnkStruct_3005E90 u8 unk_2; }; +extern u8 gUnknown_203ADFA; extern u8 gUnknown_3005E88; extern u16 gUnknown_3005E8C; extern struct UnkStruct_3005E90 gUnknown_3005E90; @@ -41,7 +42,6 @@ void sub_8112364(void); u8 sub_8112CAC(void); void sub_81138F8(void); void sub_812C224(void); - -extern u8 gUnknown_203ADFA; +void sub_812BFDC(void); #endif //GUARD_QUEST_LOG_H diff --git a/include/vs_seeker.h b/include/vs_seeker.h index efc014a4a..a9599d324 100644 --- a/include/vs_seeker.h +++ b/include/vs_seeker.h @@ -10,5 +10,6 @@ int sub_810CE64(u16 a0); bool8 sub_810CF04(u8 a0); u8 sub_810CF54(); void sub_810D0D0(void); +void sub_810CB90(void); #endif //GUARD_VS_SEEKER_H diff --git a/ld_script.txt b/ld_script.txt index 0eabfcb0d..d0f391018 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -67,7 +67,6 @@ SECTIONS { src/decompress.o(.text); asm/battle_1.o(.text); src/battle_main.o(.text); - asm/battle_2.o(.text); src/battle_util.o(.text); src/battle_script_commands.o(.text); src/battle_util2.o(.text); diff --git a/src/battle_main.c b/src/battle_main.c index e7f34ce8a..ba6ce6bbf 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -45,6 +45,7 @@ #include "task.h" #include "text.h" #include "trig.h" +#include "vs_seeker.h" #include "util.h" #include "window.h" #include "cable_club.h" @@ -120,6 +121,10 @@ void RunTurnActionsFunctions(void); void SetActionsAndBattlersTurnOrder(void); void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); void HandleEndTurn_FinishBattle(void); +void FreeResetData_ReturnToOvOrDoEvolutions(void); +void ReturnFromBattleToOverworld(void); +void TryEvolvePokemon(void); +void WaitForEvoSceneToFinish(void); // TODO: put ewram variables here after resolving symbol ref in between extern u32 gUnknown_2022AE8[25]; @@ -191,7 +196,10 @@ const union AnimCmd gUnknown_824F020[] = }; // not used -const union AnimCmd *const gUnknown_824F028 = gUnknown_824F020; +const union AnimCmd *const gUnknown_824F028[] = +{ + gUnknown_824F020, +}; // not used const union AffineAnimCmd gUnknown_824F02C[] = @@ -202,7 +210,10 @@ const union AffineAnimCmd gUnknown_824F02C[] = }; // not used -const union AffineAnimCmd *const gUnknown_824F044 = gUnknown_824F02C; +const union AffineAnimCmd *const gUnknown_824F044[] = +{ + gUnknown_824F02C, +}; const s8 gUnknown_824F048[] ={ -32, -16, -16, -32, -32, 0, 0, 0 }; @@ -503,13 +514,13 @@ const u8 gStatusConditionString_LoveJpn[8] = _("メロメロ$$$"); const u8 *const gStatusConditionStringsTable[7][2] = { - {gStatusConditionString_PoisonJpn, gText_Poison}, - {gStatusConditionString_SleepJpn, gText_Sleep}, - {gStatusConditionString_ParalysisJpn, gText_Paralysis}, - {gStatusConditionString_BurnJpn, gText_Burn}, - {gStatusConditionString_IceJpn, gText_Ice}, - {gStatusConditionString_ConfusionJpn, gText_Confusion}, - {gStatusConditionString_LoveJpn, gText_Love} + { gStatusConditionString_PoisonJpn, gText_Poison }, + { gStatusConditionString_SleepJpn, gText_Sleep }, + { gStatusConditionString_ParalysisJpn, gText_Paralysis }, + { gStatusConditionString_BurnJpn, gText_Burn }, + { gStatusConditionString_IceJpn, gText_Ice }, + { gStatusConditionString_ConfusionJpn, gText_Confusion }, + { gStatusConditionString_LoveJpn, gText_Love } }; void CB2_InitBattle(void) @@ -3648,3 +3659,654 @@ void HandleEndTurn_MonFled(void) gBattlescriptCurrInstr = BattleScript_WildMonFled; gBattleMainFunc = HandleEndTurn_FinishBattle; } + +void HandleEndTurn_FinishBattle(void) +{ + if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED) + { + if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_OLDMAN_TUTORIAL | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_LINK))) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + if (gBattleResults.playerMon1Species == SPECIES_NONE) + { + gBattleResults.playerMon1Species = gBattleMons[gActiveBattler].species; + StringCopy(gBattleResults.playerMon1Name, gBattleMons[gActiveBattler].nickname); + } + else + { + gBattleResults.playerMon2Species = gBattleMons[gActiveBattler].species; + StringCopy(gBattleResults.playerMon2Name, gBattleMons[gActiveBattler].nickname); + } + } + } + } + sub_812BFDC(); + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + sub_810CB90(); + BeginFastPaletteFade(3); + FadeOutMapMusic(5); + gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions; + gCB2_AfterEvolution = BattleMainCB2; + } + else if (!gBattleControllerExecFlags) + { + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +void FreeResetData_ReturnToOvOrDoEvolutions(void) +{ + if (!gPaletteFade.active) + { + ResetSpriteData(); + if (gLeveledUpInBattle == 0 || gBattleOutcome != B_OUTCOME_WON) + gBattleMainFunc = ReturnFromBattleToOverworld; + else + gBattleMainFunc = TryEvolvePokemon; + FreeAllWindowBuffers(); + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + FreeMonSpritesGfx(); + FreeBattleSpritesData(); + FreeBattleResources(); + } + } +} + +void TryEvolvePokemon(void) +{ + s32 i; + + while (gLeveledUpInBattle != 0) + { + for (i = 0; i < PARTY_SIZE; ++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; +} + +void WaitForEvoSceneToFinish(void) +{ + if (gMain.callback2 == BattleMainCB2) + gBattleMainFunc = TryEvolvePokemon; +} + +void ReturnFromBattleToOverworld(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + RandomlyGivePartyPokerus(gPlayerParty); + PartySpreadPokerus(gPlayerParty); + } + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) || gReceivedRemoteLinkPlayers == 0) + { + gSpecialVar_Result = gBattleOutcome; + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) + { + UpdateRoamerHPStatus(&gEnemyParty[0]); + if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT) + SetRoamerInactive(); + } + m4aSongNumStop(SE_HINSI); + SetMainCallback2(gMain.savedCallback); + } +} + +void RunBattleScriptCommands_PopCallbacksStack(void) +{ + if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED) + { + if (gBattleResources->battleCallbackStack->size != 0) + --gBattleResources->battleCallbackStack->size; + gBattleMainFunc = gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size]; + } + else + { + if (!gBattleControllerExecFlags) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +void RunBattleScriptCommands(void) +{ + if (!gBattleControllerExecFlags) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); +} + +void HandleAction_UseMove(void) +{ + u8 side; + u8 var = 4; + + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) + { + gCurrentActionFuncId = B_ACTION_FINISHED; + return; + } + gCritMultiplier = 1; + gBattleScripting.dmgMultiplier = 1; + gBattleStruct->atkCancellerTracker = 0; + gMoveResultFlags = 0; + gMultiHitCounter = 0; + gBattleCommunication[6] = 0; + gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); + // choose move + if (gProtectStructs[gBattlerAttacker].noValidMoves) + { + gProtectStructs[gBattlerAttacker].noValidMoves = 0; + gCurrentMove = gChosenMove = MOVE_STRUGGLE; + gHitMarker |= HITMARKER_NO_PPDEDUCT; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); + } + else if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) + { + gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; + } + // encore forces you to use the same move + else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + { + gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; + gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + // check if the encored move wasn't overwritten + else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + { + gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE; + gDisableStructs[gBattlerAttacker].encoredMovePos = 0; + gDisableStructs[gBattlerAttacker].encoreTimer = 0; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else if (gBattleMons[gBattlerAttacker].moves[gCurrMovePos] != gChosenMoveByBattler[gBattlerAttacker]) + { + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else + { + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + } + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + gBattleResults.lastUsedMovePlayer = gCurrentMove; + else + gBattleResults.lastUsedMoveOpponent = gCurrentMove; + // choose target + side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; + if (gSideTimers[side].followmeTimer != 0 + && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) + && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + { + gBattlerTarget = gSideTimers[side].followmeTarget; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && gSideTimers[side].followmeTimer == 0 + && (gBattleMoves[gCurrentMove].power != 0 + || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER) + && gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD + && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + { + side = GetBattlerSide(gBattlerAttacker); + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + if (side != GetBattlerSide(gActiveBattler) + && *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler + && gBattleMons[gActiveBattler].ability == ABILITY_LIGHTNING_ROD + && GetBattlerTurnOrderNum(gActiveBattler) < var) + var = GetBattlerTurnOrderNum(gActiveBattler); + if (var == 4) + { + if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + else + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + } + else + { + gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); + } + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + { + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + else + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + } + else + { + gActiveBattler = gBattlerByTurnOrder[var]; + RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); + gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1; + gBattlerTarget = gActiveBattler; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + else + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget] + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + else + { + gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + { + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + else + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + } + gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_Switch(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gActionSelectionCursor[gBattlerAttacker] = 0; + gMoveSelectionCursor[gBattlerAttacker] = 0; + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)); + gBattleScripting.battler = gBattlerAttacker; + gBattlescriptCurrInstr = BattleScript_ActionSwitch; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + if (gBattleResults.playerSwitchesCounter < 255) + ++gBattleResults.playerSwitchesCounter; +} + +void HandleAction_UseItem(void) +{ + gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][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 (gLastUsedItem == ITEM_POKE_FLUTE) + { + gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[1]; + } + else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; + } + else + { + gBattleScripting.battler = gBattlerAttacker; + switch (*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))) + { + case AI_ITEM_FULL_RESTORE: + case AI_ITEM_HEAL_HP: + break; + case AI_ITEM_CURE_CONDITION: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1) + { + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)) + { + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; + ++gBattleCommunication[MULTISTRING_CHOOSER]; + } + } + break; + case AI_ITEM_X_STAT: + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x80) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); + PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X); + while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) + { + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; + ++gBattleTextBuff1[2]; + } + gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; + gBattleScripting.animArg2 = 0; + } + break; + case AI_ITEM_GUARD_SPECS: + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + } + + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)]; + } + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +bool8 TryRunFromBattle(u8 battler) +{ + bool8 effect = FALSE; + u8 holdEffect; + u8 pyramidMultiplier; + u8 speedVar; + + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[battler].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item); + gPotentialItemEffectBattler = battler; + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + { + gLastUsedItem = gBattleMons[battler].item; + gProtectStructs[battler].fleeFlag = 1; + ++effect; + } + else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY) + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[battler].fleeFlag = 2; + ++effect; + } + else if ((gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_GHOST)) == BATTLE_TYPE_GHOST) + { + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + ++effect; + } + else + { + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (gBattleMons[battler].speed < gBattleMons[BATTLE_OPPOSITE(battler)].speed) + { + speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + ++effect; + } + else // same speed or faster + { + ++effect; + } + } + + ++gBattleStruct->runTries; + } + if (effect) + { + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_RAN; + } + return effect; +} + +void HandleAction_Run(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gCurrentTurnActionNumber = gBattlersCount; + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) + gBattleOutcome |= B_OUTCOME_LOST; + } + else + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) + gBattleOutcome |= B_OUTCOME_WON; + } + } + gBattleOutcome |= B_OUTCOME_LINK_BATTLE_RAN; + } + else + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (!TryRunFromBattle(gBattlerAttacker)) // failed to run away + { + ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + } + } + else + { + if (gBattleMons[gBattlerAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + } + else + { + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_MON_FLED; + } + } + } +} + +void HandleAction_WatchesCarefully(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + if (gBattleStruct->safariGoNearCounter != 0) + { + --gBattleStruct->safariGoNearCounter; + if (gBattleStruct->safariGoNearCounter == 0) + { + *(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(gEnemyParty, MON_DATA_SPECIES)].catchRate * 100 / 1275; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + } + else + { + if (gBattleStruct->safariPkblThrowCounter != 0) + { + --gBattleStruct->safariPkblThrowCounter; + if (gBattleStruct->safariPkblThrowCounter == 0) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[5] = 2; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + } + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_SafariZoneBallThrow(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + --gNumSafariBalls; + gLastUsedItem = ITEM_SAFARI_BALL; + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_ThrowPokeblock(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattleStruct->safariPkblThrowCounter += Random() % 5 + 2; + if (gBattleStruct->safariPkblThrowCounter > 6) + gBattleStruct->safariPkblThrowCounter = 6; + gBattleStruct->safariGoNearCounter = 0; + gBattleStruct->safariCatchFactor >>= 1; + if (gBattleStruct->safariCatchFactor <= 2) + gBattleStruct->safariCatchFactor = 3; + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_GoNear(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattleStruct->safariGoNearCounter += Random() % 5 + 2; + if (gBattleStruct->safariGoNearCounter > 6) + gBattleStruct->safariGoNearCounter = 6; + gBattleStruct->safariPkblThrowCounter = 0; + gBattleStruct->safariCatchFactor <<= 1; + if (gBattleStruct->safariCatchFactor > 20) + gBattleStruct->safariCatchFactor = 20; + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_SafariZoneRun(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + PlaySE(SE_NIGERU); + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_RAN; +} + +void HandleAction_OldManBallThrow(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + gActionsByTurnOrder[1] = B_ACTION_FINISHED; +} + +void HandleAction_TryFinish(void) +{ + if (!HandleFaintedMonActions()) + { + gBattleStruct->faintedActionsState = 0; + gCurrentActionFuncId = B_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_CHARGING | 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_CHARGING | HITMARKER_x4000000); + gCurrentMove = MOVE_NONE; + gBattleMoveDamage = 0; + gMoveResultFlags = 0; + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; + gLastLandedMoves[gBattlerAttacker] = 0; + gLastHitByType[gBattlerAttacker] = 0; + gBattleStruct->dynamicMoveType = 0; + gDynamicBasePower = 0; + gBattleScripting.atk49_state = 0; + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleCommunication[ACTIONS_CONFIRMED_COUNT] = 0; + gBattleScripting.multihitMoveEffect = 0; + gBattleResources->battleScriptsStack->size = 0; +} diff --git a/src/pokemon.c b/src/pokemon.c index 12e6f032d..a95c0ba75 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5405,7 +5405,7 @@ u16 GetMonEVCount(struct Pokemon *mon) return count; } -void sub_8043A68(void) +void RandomlyGivePartyPokerus(struct Pokemon *party) { u8 foo[4]; // huh? } @@ -5471,7 +5471,7 @@ static void sub_8043B38(void) u8 foo[4]; // huh? } -void sub_8043B40(void) +void PartySpreadPokerus(struct Pokemon *party) { u8 foo[4]; // huh? } diff --git a/sym_common.txt b/sym_common.txt index c61907fe7..577c5423b 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -101,7 +101,7 @@ gUnknown_3005360: @ 3005360 gUnknown_3005378: @ 3005378 .space 0x4 -gUnknown_300537C: @ 300537C +gCB2_AfterEvolution: @ 300537C .space 0x4 .include "save.o" |