diff options
113 files changed, 6738 insertions, 17502 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s index 0b8ad7365..6db40cb4d 100644 --- a/asm/battle_1.s +++ b/asm/battle_1.s @@ -179,7 +179,7 @@ sub_800F324: @ 800F324 push {lr} movs r0, 0 bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0800F344 @ =gUnknown_8248320 + ldr r1, _0800F344 @ =gBattleBgTemplates movs r0, 0 movs r2, 0x4 bl InitBgsFromTemplates @@ -189,7 +189,7 @@ sub_800F324: @ 800F324 pop {r0} bx r0 .align 2, 0 -_0800F344: .4byte gUnknown_8248320 +_0800F344: .4byte gBattleBgTemplates _0800F348: .4byte gUnknown_8248330 thumb_func_end sub_800F324 @@ -217,8 +217,8 @@ sub_800F34C: @ 800F34C _0800F37C: .4byte 0x0000b040 thumb_func_end sub_800F34C - thumb_func_start sub_800F380 -sub_800F380: @ 800F380 + thumb_func_start LoadBattleMenuWindowGfx +LoadBattleMenuWindowGfx: @ 800F380 push {r4,r5,lr} movs r0, 0x2 movs r1, 0x12 @@ -278,7 +278,7 @@ _0800F3FC: .4byte 0x0000675a _0800F400: .4byte gPlttBufferFaded + 0xB8 _0800F404: .4byte gBattleTypeFlags _0800F408: .4byte 0x00010010 - thumb_func_end sub_800F380 + thumb_func_end LoadBattleMenuWindowGfx thumb_func_start sub_800F40C sub_800F40C: @ 800F40C @@ -309,7 +309,7 @@ LoadBattleTextboxAndBackground: @ 800F420 movs r1, 0 movs r2, 0x40 bl LoadCompressedPalette - bl sub_800F380 + bl LoadBattleMenuWindowGfx bl sub_800F40C pop {r0} bx r0 @@ -1143,8 +1143,8 @@ _0800FAD8: .4byte 0x000003ff _0800FADC: .4byte 0xfffffc00 thumb_func_end sub_800F6FC - thumb_func_start sub_800FAE0 -sub_800FAE0: @ 800FAE0 + thumb_func_start DrawBattleEntryBackground +DrawBattleEntryBackground: @ 800FAE0 push {r4,lr} ldr r0, _0800FB64 @ =gBattleTypeFlags ldr r1, [r0] @@ -1287,7 +1287,7 @@ _0800FC26: pop {r4} pop {r0} bx r0 - thumb_func_end sub_800FAE0 + thumb_func_end DrawBattleEntryBackground thumb_func_start sub_800FC2C sub_800FC2C: @ 800FC2C @@ -1459,7 +1459,7 @@ _0800FD68: .align 2, 0 _0800FD88: .4byte gUnknown_824EE34 _0800FD8C: - bl sub_800F380 + bl LoadBattleMenuWindowGfx b _0800FD94 _0800FD92: movs r4, 0x1 diff --git a/asm/battle_2.s b/asm/battle_2.s deleted file mode 100644 index bb696b4ab..000000000 --- a/asm/battle_2.s +++ /dev/null @@ -1,13887 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_800FD9C -sub_800FD9C: @ 800FD9C - push {r4,lr} - bl MoveSaveBlocks_ResetHeap - bl AllocateBattleResources - bl AllocateBattleSpritesData - bl AllocateMonSpritesGfx - ldr r4, _0800FDCC @ =gBattleTypeFlags - ldr r0, [r4] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800FDD8 - bl HandleLinkBattleSetup - ldr r0, _0800FDD0 @ =sub_80109C8 - bl SetMainCallback2 - ldr r1, _0800FDD4 @ =gBattleCommunication - movs r0, 0 - strb r0, [r1] - b _0800FE1C - .align 2, 0 -_0800FDCC: .4byte gBattleTypeFlags -_0800FDD0: .4byte sub_80109C8 -_0800FDD4: .4byte gBattleCommunication -_0800FDD8: - bl sub_800FE24 - ldr r1, [r4] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0800FE1C - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0800FE06 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0800FDFE - movs r0, 0x19 - bl HelpSystem_SetSomeVariable2 - b _0800FE1C -_0800FDFE: - movs r0, 0x18 - bl HelpSystem_SetSomeVariable2 - b _0800FE1C -_0800FE06: - movs r0, 0x80 - ands r1, r0 - cmp r1, 0 - beq _0800FE16 - movs r0, 0x1A - bl HelpSystem_SetSomeVariable2 - b _0800FE1C -_0800FE16: - movs r0, 0x17 - bl HelpSystem_SetSomeVariable2 -_0800FE1C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_800FD9C - - thumb_func_start sub_800FE24 -sub_800FE24: @ 800FE24 - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - str r0, [sp] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _0800FF28 @ =0x05006000 - mov r0, sp - bl CpuSet - movs r0, 0x4C - movs r1, 0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - ldr r4, _0800FF2C @ =0x00005051 - movs r0, 0x44 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - ldr r1, _0800FF30 @ =gBattle_WIN0H - movs r0, 0xF0 - strh r0, [r1] - ldr r0, _0800FF34 @ =gBattle_WIN0V - strh r4, [r0] - bl ScanlineEffect_Clear - ldr r0, _0800FF38 @ =gScanlineEffectRegBuffers - movs r3, 0xF0 - movs r1, 0xF0 - lsls r1, 3 - adds r2, r0, r1 - movs r1, 0x4F -_0800FE88: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _0800FE88 - movs r1, 0x50 - ldr r4, _0800FF3C @ =gUnknown_824EFE4 - ldr r0, _0800FF38 @ =gScanlineEffectRegBuffers - ldr r3, _0800FF40 @ =0x0000ff10 - movs r5, 0x82 - lsls r5, 4 - adds r2, r0, r5 - adds r0, 0xA0 -_0800FEA6: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - adds r1, 0x1 - cmp r1, 0x9F - ble _0800FEA6 - ldr r0, [r4] - ldr r1, [r4, 0x4] - ldr r2, [r4, 0x8] - bl ScanlineEffect_SetParams - bl ResetPaletteFade - ldr r0, _0800FF44 @ =gBattle_BG0_X - movs r1, 0 - strh r1, [r0] - ldr r0, _0800FF48 @ =gBattle_BG0_Y - strh r1, [r0] - ldr r0, _0800FF4C @ =gBattle_BG1_X - strh r1, [r0] - ldr r0, _0800FF50 @ =gBattle_BG1_Y - strh r1, [r0] - ldr r0, _0800FF54 @ =gBattle_BG2_X - strh r1, [r0] - ldr r0, _0800FF58 @ =gBattle_BG2_Y - strh r1, [r0] - ldr r0, _0800FF5C @ =gBattle_BG3_X - strh r1, [r0] - ldr r0, _0800FF60 @ =gBattle_BG3_Y - strh r1, [r0] - bl sub_807FC5C - ldr r1, _0800FF64 @ =gBattleTerrain - strb r0, [r1] - bl sub_800F34C - bl LoadBattleTextboxAndBackground - bl ResetSpriteData - bl ResetTasks - bl sub_800FAE0 - bl FreeAllSpritePalettes - ldr r1, _0800FF68 @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _0800FF6C @ =VBlankCB_Battle - bl SetVBlankCallback - bl SetUpBattleVars - ldr r0, _0800FF70 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800FF78 - ldr r0, _0800FF74 @ =sub_8010BA0 - bl SetMainCallback2 - b _0800FF7E - .align 2, 0 -_0800FF28: .4byte 0x05006000 -_0800FF2C: .4byte 0x00005051 -_0800FF30: .4byte gBattle_WIN0H -_0800FF34: .4byte gBattle_WIN0V -_0800FF38: .4byte gScanlineEffectRegBuffers -_0800FF3C: .4byte gUnknown_824EFE4 -_0800FF40: .4byte 0x0000ff10 -_0800FF44: .4byte gBattle_BG0_X -_0800FF48: .4byte gBattle_BG0_Y -_0800FF4C: .4byte gBattle_BG1_X -_0800FF50: .4byte gBattle_BG1_Y -_0800FF54: .4byte gBattle_BG2_X -_0800FF58: .4byte gBattle_BG2_Y -_0800FF5C: .4byte gBattle_BG3_X -_0800FF60: .4byte gBattle_BG3_Y -_0800FF64: .4byte gBattleTerrain -_0800FF68: .4byte gReservedSpritePaletteCount -_0800FF6C: .4byte VBlankCB_Battle -_0800FF70: .4byte gBattleTypeFlags -_0800FF74: .4byte sub_8010BA0 -_0800FF78: - ldr r0, _0800FFCC @ =sub_8010508 - bl SetMainCallback2 -_0800FF7E: - ldr r0, _0800FFD0 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0800FF98 - ldr r0, _0800FFD4 @ =gEnemyParty - ldr r1, _0800FFD8 @ =gTrainerBattleOpponent_A - ldrh r1, [r1] - bl sub_80112E0 - bl SetWildMonHeldItem -_0800FF98: - ldr r0, _0800FFDC @ =gMain - ldr r1, _0800FFE0 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] - ldr r4, _0800FFE4 @ =gPlayerParty - movs r0, 0xFA - lsls r0, 1 - adds r5, r4, r0 -_0800FFAE: - adds r0, r4, 0 - movs r1, 0x3 - bl AdjustFriendship - adds r4, 0x64 - cmp r4, r5 - ble _0800FFAE - movs r1, 0 - ldr r0, _0800FFE8 @ =gBattleCommunication - strb r1, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800FFCC: .4byte sub_8010508 -_0800FFD0: .4byte gBattleTypeFlags -_0800FFD4: .4byte gEnemyParty -_0800FFD8: .4byte gTrainerBattleOpponent_A -_0800FFDC: .4byte gMain -_0800FFE0: .4byte 0x00000439 -_0800FFE4: .4byte gPlayerParty -_0800FFE8: .4byte gBattleCommunication - thumb_func_end sub_800FE24 - - thumb_func_start sub_800FFEC -sub_800FFEC: @ 800FFEC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - mov r9, r6 - movs r0, 0xCE - lsls r0, 1 - mov r10, r0 - mov r8, r6 -_08010002: - movs r0, 0x64 - mov r4, r9 - muls r4, r0 - ldr r0, _080100B0 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - adds r1, r0, 0 - cmp r5, 0 - beq _0801007E - cmp r5, r10 - beq _0801004A - cmp r7, 0 - beq _0801004A - cmp r1, 0 - bne _0801004A - movs r0, 0x1 - mov r2, r8 - lsls r0, r2 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_0801004A: - cmp r5, 0 - beq _0801007E - cmp r7, 0 - beq _08010066 - cmp r5, r10 - beq _0801005A - cmp r1, 0 - beq _08010066 -_0801005A: - movs r0, 0x2 - mov r1, r8 - lsls r0, r1 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_08010066: - cmp r5, 0 - beq _0801007E - cmp r5, r10 - beq _0801007E - cmp r7, 0 - bne _0801007E - movs r0, 0x3 - mov r2, r8 - lsls r0, r2 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_0801007E: - movs r0, 0x2 - add r8, r0 - movs r1, 0x1 - add r9, r1 - mov r2, r9 - cmp r2, 0x5 - ble _08010002 - ldr r1, _080100B4 @ =gBattleStruct - ldr r0, [r1] - movs r2, 0xC3 - lsls r2, 1 - adds r0, r2 - strb r6, [r0] - ldr r0, [r1] - adds r2, 0x1 - adds r1, r0, r2 - lsrs r0, r6, 8 - 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 -_080100B0: .4byte gPlayerParty -_080100B4: .4byte gBattleStruct - thumb_func_end sub_800FFEC - - thumb_func_start sub_80100B8 -sub_80100B8: @ 80100B8 - push {r4-r7,lr} - ldr r0, _08010120 @ =gBattleStruct - ldr r5, [r0] - movs r0, 0xC4 - lsls r0, 1 - adds r4, r5, r0 - bl IsEnigmaBerryValid - cmp r0, 0x1 - bne _08010134 - movs r2, 0 - ldr r7, _08010124 @ =gSaveBlock1Ptr - movs r1, 0xC8 - lsls r1, 1 - adds r5, r1 - adds r6, r7, 0 - ldr r3, _08010128 @ =0x000030ec -_080100DA: - adds r0, r4, r2 - ldr r1, [r6] - adds r1, r3 - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x5 - ble _080100DA - adds r1, r4, r2 - movs r0, 0xFF - strb r0, [r1] - movs r2, 0 - adds r3, r5, 0 - ldr r6, _08010124 @ =gSaveBlock1Ptr - ldr r5, _0801012C @ =0x00003108 -_080100FA: - adds r0, r3, r2 - ldr r1, [r6] - adds r1, r5 - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x11 - ble _080100FA - ldr r0, [r7] - ldr r1, _08010130 @ =0x0000311a - adds r0, r1 - ldrb r0, [r0] - strb r0, [r4, 0x7] - ldr r0, [r7] - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - b _08010174 - .align 2, 0 -_08010120: .4byte gBattleStruct -_08010124: .4byte gSaveBlock1Ptr -_08010128: .4byte 0x000030ec -_0801012C: .4byte 0x00003108 -_08010130: .4byte 0x0000311a -_08010134: - movs r0, 0xAF - bl ItemIdToBerryType - lsls r0, 24 - lsrs r0, 24 - bl sub_809C8A0 - adds r3, r0, 0 - movs r2, 0 - movs r0, 0xC8 - lsls r0, 1 - adds r5, r0 -_0801014C: - adds r0, r4, r2 - adds r1, r3, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x5 - ble _0801014C - adds r1, r4, r2 - movs r0, 0xFF - strb r0, [r1] - adds r0, r5, 0 - movs r2, 0 - adds r1, r0, 0 - adds r1, 0x11 -_08010168: - strb r2, [r1] - subs r1, 0x1 - cmp r1, r0 - bge _08010168 - movs r0, 0 - strb r0, [r4, 0x7] -_08010174: - strb r0, [r4, 0x1A] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80100B8 - - thumb_func_start sub_801017C -sub_801017C: @ 801017C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _08010234 @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08010194 - b _080102C0 -_08010194: - bl IsEnigmaBerryValid - cmp r0, 0x1 - bne _08010250 - movs r5, 0 - ldr r3, _08010238 @ =gEnigmaBerries - ldr r0, _0801023C @ =gSaveBlock1Ptr - mov r8, r0 - adds r6, r3, 0 - mov r4, r8 - ldr r2, _08010240 @ =0x000030ec - adds r7, r3, 0 - adds r7, 0x38 -_080101AE: - adds r1, r5, r6 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r5, r7 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r5, 0x1 - cmp r5, 0x5 - ble _080101AE - adds r1, r5, r3 - movs r0, 0xFF - strb r0, [r1] - adds r0, r3, 0 - adds r0, 0x38 - adds r0, r5, r0 - movs r1, 0x1 - negs r1, r1 - strb r1, [r0] - movs r5, 0 - adds r7, r3, 0 - adds r7, 0x8 - ldr r4, _0801023C @ =gSaveBlock1Ptr - ldr r2, _08010244 @ =0x00003108 - adds r6, r3, 0 - adds r6, 0x40 -_080101EC: - adds r1, r5, r7 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r5, r6 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r5, 0x1 - cmp r5, 0x11 - ble _080101EC - mov r1, r8 - ldr r0, [r1] - ldr r2, _08010248 @ =0x0000311a - adds r0, r2 - ldrb r1, [r0] - strb r1, [r3, 0x7] - ldrb r0, [r0] - adds r1, r3, 0 - adds r1, 0x3F - strb r0, [r1] - mov r4, r8 - ldr r0, [r4] - ldr r1, _0801024C @ =0x0000311b - adds r0, r1 - ldrb r1, [r0] - strb r1, [r3, 0x1A] - ldrb r1, [r0] - adds r0, r3, 0 - adds r0, 0x52 - strb r1, [r0] - b _080103FC - .align 2, 0 -_08010234: .4byte gBattleTypeFlags -_08010238: .4byte gEnigmaBerries -_0801023C: .4byte gSaveBlock1Ptr -_08010240: .4byte 0x000030ec -_08010244: .4byte 0x00003108 -_08010248: .4byte 0x0000311a -_0801024C: .4byte 0x0000311b -_08010250: - movs r0, 0xAF - bl ItemIdToBerryType - lsls r0, 24 - lsrs r0, 24 - bl sub_809C8A0 - adds r6, r0, 0 - movs r5, 0 - ldr r4, _080102BC @ =gEnigmaBerries - adds r7, r4, 0 - adds r7, 0x38 - adds r3, r4, 0 -_0801026A: - adds r1, r5, r4 - adds r2, r6, r5 - ldrb r0, [r2] - strb r0, [r1] - adds r1, r5, r7 - ldrb r0, [r2] - strb r0, [r1] - adds r5, 0x1 - cmp r5, 0x5 - ble _0801026A - adds r1, r5, r3 - movs r0, 0xFF - strb r0, [r1] - adds r0, r3, 0 - adds r0, 0x38 - adds r0, r5, r0 - movs r1, 0x1 - negs r1, r1 - strb r1, [r0] - movs r5, 0 - adds r4, r3, 0 - adds r4, 0x8 - movs r1, 0 - adds r2, r3, 0 - adds r2, 0x40 -_0801029C: - adds r0, r5, r4 - strb r1, [r0] - adds r0, r5, r2 - strb r1, [r0] - adds r5, 0x1 - cmp r5, 0x11 - ble _0801029C - movs r1, 0 - strb r1, [r3, 0x7] - adds r0, r3, 0 - adds r0, 0x3F - strb r1, [r0] - strb r1, [r3, 0x1A] - adds r0, 0x13 - strb r1, [r0] - b _080103FC - .align 2, 0 -_080102BC: .4byte gEnigmaBerries -_080102C0: - movs r0, 0x40 - ands r1, r0 - cmp r1, 0 - beq _0801034C - movs r5, 0 - ldr r3, _08010340 @ =gEnigmaBerries - ldr r2, _08010344 @ =gLinkPlayers - mov r9, r2 - adds r6, r3, 0 - movs r4, 0x8 - adds r4, r6 - mov r8, r4 -_080102D8: - lsls r0, r5, 8 - ldr r1, _08010348 @ =gBlockRecvBuffer + 4 - adds r7, r0, r1 - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - add r0, r9 - ldrb r3, [r0, 0x18] - movs r4, 0 - adds r5, 0x1 - mov r10, r5 - lsls r1, r3, 3 - subs r0, r1, r3 - adds r5, r1, 0 - lsls r0, 2 - adds r1, r0, r6 -_080102F8: - adds r0, r7, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r1, 0x1 - adds r4, 0x1 - cmp r4, 0x5 - ble _080102F8 - subs r0, r5, r3 - lsls r0, 2 - adds r1, r4, r0 - adds r1, r6 - movs r2, 0xFF - strb r2, [r1] - movs r4, 0 - mov r2, r8 - adds r1, r0, r2 - adds r2, r7, 0 - adds r2, 0x8 -_0801031C: - adds r0, r2, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r1, 0x1 - adds r4, 0x1 - cmp r4, 0x11 - ble _0801031C - subs r0, r5, r3 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r7, 0x7] - strb r1, [r0, 0x7] - ldrb r1, [r7, 0x1A] - strb r1, [r0, 0x1A] - mov r5, r10 - cmp r5, 0x3 - ble _080102D8 - b _080103FC - .align 2, 0 -_08010340: .4byte gEnigmaBerries -_08010344: .4byte gLinkPlayers -_08010348: .4byte gBlockRecvBuffer + 4 -_0801034C: - movs r5, 0 - ldr r4, _0801040C @ =gEnigmaBerries - mov r9, r4 -_08010352: - lsls r0, r5, 8 - ldr r1, _08010410 @ =gBlockRecvBuffer + 4 - adds r7, r0, r1 - movs r4, 0 - adds r2, r5, 0x1 - mov r10, r2 - lsls r0, r5, 3 - mov r8, r0 - adds r1, r5, 0x2 - mov r12, r1 - subs r1, r0, r5 - mov r2, r12 - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - mov r2, r9 - adds r3, r0, r2 - lsls r1, 2 - adds r2, r1, r2 -_08010378: - adds r0, r7, r4 - ldrb r1, [r0] - strb r1, [r2] - ldrb r0, [r0] - strb r0, [r3] - adds r3, 0x1 - adds r2, 0x1 - adds r4, 0x1 - cmp r4, 0x5 - ble _08010378 - mov r0, r8 - subs r3, r0, r5 - lsls r3, 2 - adds r1, r4, r3 - add r1, r9 - ldrb r0, [r1] - movs r2, 0xFF - orrs r0, r2 - strb r0, [r1] - mov r0, r12 - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 2 - adds r1, r4, r2 - add r1, r9 - ldrb r0, [r1] - movs r4, 0xFF - orrs r0, r4 - strb r0, [r1] - movs r4, 0 - ldr r0, _0801040C @ =gEnigmaBerries - adds r0, 0x8 - adds r2, r0 - adds r3, r0 - adds r6, r7, 0 - adds r6, 0x8 -_080103C0: - adds r0, r6, r4 - ldrb r1, [r0] - strb r1, [r3] - ldrb r0, [r0] - strb r0, [r2] - adds r2, 0x1 - adds r3, 0x1 - adds r4, 0x1 - cmp r4, 0x11 - ble _080103C0 - mov r0, r8 - subs r2, r0, r5 - lsls r2, 2 - add r2, r9 - ldrb r0, [r7, 0x7] - strb r0, [r2, 0x7] - mov r1, r12 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - ldrb r1, [r7, 0x7] - strb r1, [r0, 0x7] - ldrb r1, [r7, 0x1A] - strb r1, [r2, 0x1A] - ldrb r1, [r7, 0x1A] - strb r1, [r0, 0x1A] - mov r5, r10 - cmp r5, 0x1 - ble _08010352 -_080103FC: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801040C: .4byte gEnigmaBerries -_08010410: .4byte gBlockRecvBuffer + 4 - thumb_func_end sub_801017C - - thumb_func_start sub_8010414 -sub_8010414: @ 8010414 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - movs r6, 0 - ldr r0, _08010440 @ =gBlockRecvBuffer - ldrh r2, [r0] - movs r1, 0x80 - lsls r1, 1 - mov r12, r0 - cmp r2, r1 - bne _08010458 - cmp r3, 0 - bne _08010448 - ldr r0, _08010444 @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0xC - b _0801044E - .align 2, 0 -_08010440: .4byte gBlockRecvBuffer -_08010444: .4byte gBattleTypeFlags -_08010448: - ldr r0, _0801048C @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0x8 -_0801044E: - orrs r1, r2 - str r1, [r0] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_08010458: - cmp r6, 0 - bne _080104FC - movs r2, 0 - cmp r2, r4 - bge _0801047C - ldr r1, _08010490 @ =gBlockRecvBuffer - mov r8, r1 - movs r5, 0x80 - lsls r5, 1 -_0801046A: - adds r1, r5 - adds r2, 0x1 - cmp r2, r4 - bge _0801047C - mov r7, r8 - ldrh r0, [r7] - ldrh r7, [r1] - cmp r0, r7 - beq _0801046A -_0801047C: - cmp r2, r4 - bne _080104A4 - cmp r3, 0 - bne _08010494 - ldr r0, _0801048C @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0xC - b _0801049A - .align 2, 0 -_0801048C: .4byte gBattleTypeFlags -_08010490: .4byte gBlockRecvBuffer -_08010494: - ldr r0, _080104EC @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0x8 -_0801049A: - orrs r1, r2 - str r1, [r0] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080104A4: - cmp r6, 0 - bne _080104FC - movs r2, 0 - ldr r5, _080104EC @ =gBattleTypeFlags - cmp r2, r4 - bge _080104E2 - mov r0, r12 - ldrh r1, [r0] - ldr r0, _080104F0 @ =0x00000201 - cmp r1, r0 - beq _080104DA -_080104BA: - lsls r0, r2, 8 - add r0, r12 - ldrh r0, [r0] - ldr r1, _080104F0 @ =0x00000201 - cmp r0, r1 - bls _080104CA - cmp r2, r3 - bne _080104E2 -_080104CA: - adds r2, 0x1 - cmp r2, r4 - bge _080104E2 - lsls r0, r2, 8 - add r0, r12 - ldrh r0, [r0] - cmp r0, r1 - bne _080104BA -_080104DA: - cmp r2, r3 - beq _080104BA - cmp r2, r3 - bge _080104BA -_080104E2: - cmp r2, r4 - bne _080104F4 - ldr r0, [r5] - movs r1, 0xC - b _080104F8 - .align 2, 0 -_080104EC: .4byte gBattleTypeFlags -_080104F0: .4byte 0x00000201 -_080104F4: - ldr r0, [r5] - movs r1, 0x8 -_080104F8: - orrs r0, r1 - str r0, [r5] -_080104FC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8010414 - - thumb_func_start sub_8010508 -sub_8010508: @ 8010508 - push {r4-r6,lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl GetMultiplayerId - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08010540 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xB5 - strb r4, [r0] - movs r0, 0x1 - adds r5, r4, 0 - eors r5, r0 - ldr r0, _08010544 @ =gBattleCommunication - ldrb r0, [r0] - cmp r0, 0x10 - bls _08010536 - b _080108B8 -_08010536: - lsls r0, 2 - ldr r1, _08010548 @ =_0801054C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08010540: .4byte gBattleStruct -_08010544: .4byte gBattleCommunication -_08010548: .4byte _0801054C - .align 2, 0 -_0801054C: - .4byte _08010590 - .4byte _080105D4 - .4byte _08010670 - .4byte _080106F4 - .4byte _0801071C - .4byte _08010898 - .4byte _080108A4 - .4byte _0801074C - .4byte _08010774 - .4byte _08010898 - .4byte _080108A4 - .4byte _080107A4 - .4byte _080107CC - .4byte _08010898 - .4byte _080108A4 - .4byte _08010834 - .4byte _0801084C -_08010590: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _080105BC - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - bl sub_80357C8 - ldr r1, _080105CC @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1] -_080105BC: - ldr r0, _080105D0 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _080105C6 - b _080108B8 -_080105C6: - bl LoadWirelessStatusIndicatorSpriteGfx - b _080108B8 - .align 2, 0 -_080105CC: .4byte gBattleCommunication -_080105D0: .4byte gWirelessCommType -_080105D4: - ldr r2, _08010640 @ =gBattleTypeFlags - ldr r1, [r2] - movs r6, 0x2 - adds r0, r1, 0 - ands r0, r6 - cmp r0, 0 - beq _08010658 - ldr r0, _08010644 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080105EC - b _080108B8 -_080105EC: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0801062A - ldr r4, _08010648 @ =gBattleStruct - ldr r0, [r4] - movs r5, 0xC2 - lsls r5, 1 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _0801064C @ =0x00000185 - adds r0, r1 - strb r6, [r0] - bl sub_800FFEC - bl sub_80100B8 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, r5 - movs r2, 0x20 - bl SendBlock - ldr r0, _08010650 @ =gBattleCommunication - strb r6, [r0] -_0801062A: - ldr r0, _08010654 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _08010634 - b _080108B8 -_08010634: - movs r0, 0 - movs r1, 0 - bl CreateWirelessStatusIndicatorSprite - b _080108B8 - .align 2, 0 -_08010640: .4byte gBattleTypeFlags -_08010644: .4byte gReceivedRemoteLinkPlayers -_08010648: .4byte gBattleStruct -_0801064C: .4byte 0x00000185 -_08010650: .4byte gBattleCommunication -_08010654: .4byte gWirelessCommType -_08010658: - movs r0, 0x4 - orrs r1, r0 - str r1, [r2] - ldr r1, _0801066C @ =gBattleCommunication - movs r0, 0xF - strb r0, [r1] - bl sub_801017C - b _080108B8 - .align 2, 0 -_0801066C: .4byte gBattleCommunication -_08010670: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _0801067E - b _080108B8 -_0801067E: - bl ResetBlockReceivedFlags - movs r0, 0x2 - adds r1, r4, 0 - bl sub_8010414 - bl sub_801017C - ldr r0, _080106E0 @ =sub_800F6FC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080106E4 @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r1 - movs r1, 0 - movs r0, 0x87 - lsls r0, 1 - strh r0, [r2, 0xA] - movs r0, 0x5A - strh r0, [r2, 0xC] - strh r1, [r2, 0x12] - ldr r0, _080106E8 @ =gBattleStruct - ldr r3, [r0] - movs r4, 0xC3 - lsls r4, 1 - adds r0, r3, r4 - ldrb r1, [r0] - adds r4, 0x1 - adds r0, r3, r4 - ldrb r0, [r0] - lsls r0, 8 - orrs r1, r0 - strh r1, [r2, 0xE] - ldr r0, _080106EC @ =gBlockRecvBuffer - lsls r1, r5, 8 - adds r0, 0x2 - adds r1, r0 - ldrh r0, [r1] - strh r0, [r2, 0x10] - bl SetDeoxysStats - ldr r1, _080106F0 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_080106E0: .4byte sub_800F6FC -_080106E4: .4byte gTasks -_080106E8: .4byte gBattleStruct -_080106EC: .4byte gBlockRecvBuffer -_080106F0: .4byte gBattleCommunication -_080106F4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010700 - b _080108B8 -_08010700: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08010714 @ =gPlayerParty - movs r2, 0xC8 - bl SendBlock - ldr r1, _08010718 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010714: .4byte gPlayerParty -_08010718: .4byte gBattleCommunication -_0801071C: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _0801072A - b _080108B8 -_0801072A: - bl ResetBlockReceivedFlags - ldr r0, _08010740 @ =gEnemyParty - lsls r1, r5, 8 - ldr r2, _08010744 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl memcpy - ldr r1, _08010748 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010740: .4byte gEnemyParty -_08010744: .4byte gBlockRecvBuffer -_08010748: .4byte gBattleCommunication -_0801074C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010758 - b _080108B8 -_08010758: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0801076C @ =gUnknown_202434C - movs r2, 0xC8 - bl SendBlock - ldr r1, _08010770 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_0801076C: .4byte gUnknown_202434C -_08010770: .4byte gBattleCommunication -_08010774: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _08010782 - b _080108B8 -_08010782: - bl ResetBlockReceivedFlags - ldr r0, _08010798 @ =gUnknown_20240F4 - lsls r1, r5, 8 - ldr r2, _0801079C @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl memcpy - ldr r1, _080107A0 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010798: .4byte gUnknown_20240F4 -_0801079C: .4byte gBlockRecvBuffer -_080107A0: .4byte gBattleCommunication -_080107A4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _080107B0 - b _080108B8 -_080107B0: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080107C4 @ =gUnknown_2024414 - movs r2, 0xC8 - bl SendBlock - ldr r1, _080107C8 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_080107C4: .4byte gUnknown_2024414 -_080107C8: .4byte gBattleCommunication -_080107CC: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - bne _080108B8 - bl ResetBlockReceivedFlags - ldr r4, _08010820 @ =gUnknown_20241BC - lsls r1, r5, 8 - ldr r0, _08010824 @ =gBlockRecvBuffer - adds r1, r0 - adds r0, r4, 0 - movs r2, 0xC8 - bl memcpy - ldr r1, _08010828 @ =0xfffffe70 - adds r0, r4, r1 - bl sub_8011D0C - ldr r1, _0801082C @ =0xfffffed4 - adds r0, r4, r1 - bl sub_8011D0C - adds r0, r4, 0 - subs r0, 0xC8 - bl sub_8011D0C - adds r0, r4, 0 - subs r0, 0x64 - bl sub_8011D0C - adds r0, r4, 0 - bl sub_8011D0C - adds r0, r4, 0 - adds r0, 0x64 - bl sub_8011D0C - ldr r1, _08010830 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010820: .4byte gUnknown_20241BC -_08010824: .4byte gBlockRecvBuffer -_08010828: .4byte 0xfffffe70 -_0801082C: .4byte 0xfffffed4 -_08010830: .4byte gBattleCommunication -_08010834: - bl sub_800D30C - ldr r0, _08010848 @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - b _080108B8 - .align 2, 0 -_08010848: .4byte gBattleCommunication -_0801084C: - ldr r0, _08010880 @ =gUnknown_2023E83 - adds r1, r0, 0x1 - bl BattleInitAllSprites - lsls r0, 24 - cmp r0, 0 - beq _080108B8 - ldr r2, _08010884 @ =gPreBattleCallback1 - ldr r1, _08010888 @ =gMain - ldr r0, [r1] - str r0, [r2] - ldr r0, _0801088C @ =sub_80123E4 - str r0, [r1] - ldr r0, _08010890 @ =BattleMainCB2 - bl SetMainCallback2 - ldr r2, _08010894 @ =gBattleTypeFlags - ldr r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080108B8 - movs r0, 0x20 - orrs r1, r0 - str r1, [r2] - b _080108B8 - .align 2, 0 -_08010880: .4byte gUnknown_2023E83 -_08010884: .4byte gPreBattleCallback1 -_08010888: .4byte gMain -_0801088C: .4byte sub_80123E4 -_08010890: .4byte BattleMainCB2 -_08010894: .4byte gBattleTypeFlags -_08010898: - ldr r0, _080108C0 @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - movs r1, 0x1 - strb r1, [r0, 0x1] -_080108A4: - ldr r1, _080108C0 @ =gBattleCommunication - ldrb r0, [r1, 0x1] - subs r0, 0x1 - strb r0, [r1, 0x1] - lsls r0, 24 - cmp r0, 0 - bne _080108B8 -_080108B2: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080108B8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080108C0: .4byte gBattleCommunication - thumb_func_end sub_8010508 - - thumb_func_start sub_80108C4 -sub_80108C4: @ 80108C4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - mov r8, r0 - ldr r1, _080109BC @ =gUnknown_2022B58 - mov r9, r1 - movs r0, 0x18 - add r0, r9 - mov r10, r0 -_080108DC: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r0, _080109C0 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - mov r1, r8 - lsls r5, r1, 5 - mov r1, r9 - adds r6, r5, r1 - strh r0, [r6] - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - strh r0, [r6, 0x2] - mov r0, r9 - adds r0, 0x4 - adds r7, r5, r0 - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r7, 0 - bl GetMonData - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - strb r0, [r6, 0xF] - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r6, 0x10] - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - strh r0, [r6, 0x12] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - mov r1, r9 - adds r1, 0x14 - adds r1, r5, r1 - str r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - add r5, r10 - str r0, [r5] - adds r0, r4, 0 - bl GetMonGender - strb r0, [r6, 0x1C] - adds r0, r7, 0 - bl StripExtCtrlCodes - adds r0, r4, 0 - movs r1, 0x3 - bl GetMonData - mov r4, r8 - adds r4, 0x1 - cmp r0, 0x1 - beq _08010994 - adds r2, r7, 0 - movs r1, 0 - ldrb r0, [r2] - cmp r0, 0xFF - beq _0801097E -_08010974: - adds r1, 0x1 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08010974 -_0801097E: - cmp r1, 0x5 - bgt _0801098E - movs r3, 0 -_08010984: - adds r0, r2, r1 - strb r3, [r0] - adds r1, 0x1 - cmp r1, 0x5 - ble _08010984 -_0801098E: - adds r1, r2, r1 - movs r0, 0xFF - strb r0, [r1] -_08010994: - mov r8, r4 - cmp r4, 0x2 - ble _080108DC - ldr r0, _080109C4 @ =gBattleStruct - ldr r0, [r0] - movs r1, 0xC2 - lsls r1, 1 - adds r0, r1 - ldr r1, _080109BC @ =gUnknown_2022B58 - movs r2, 0x60 - bl memcpy - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080109BC: .4byte gUnknown_2022B58 -_080109C0: .4byte gPlayerParty -_080109C4: .4byte gBattleStruct - thumb_func_end sub_80108C4 - - thumb_func_start sub_80109C8 -sub_80109C8: @ 80109C8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - bl GetMultiplayerId - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _08010A0C @ =gBattleStruct - ldr r0, [r4] - adds r0, 0xB5 - strb r6, [r0] - ldr r0, [r4] - movs r1, 0xB0 - adds r1, r0 - mov r9, r1 - adds r0, 0xAE - mov r8, r0 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r5, _08010A10 @ =gBattleCommunication - ldrb r0, [r5] - cmp r0, 0x1 - beq _08010A5C - cmp r0, 0x1 - bgt _08010A14 - cmp r0, 0 - beq _08010A20 - b _08010B82 - .align 2, 0 -_08010A0C: .4byte gBattleStruct -_08010A10: .4byte gBattleCommunication -_08010A14: - cmp r0, 0x2 - beq _08010AFC - cmp r0, 0x3 - bne _08010A1E - b _08010B2A -_08010A1E: - b _08010B82 -_08010A20: - ldr r0, _08010A58 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08010A2A - b _08010B82 -_08010A2A: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010A36 - b _08010B82 -_08010A36: - bl sub_80108C4 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r2, 0xC2 - lsls r2, 1 - adds r1, r2 - movs r2, 0x60 - bl SendBlock - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _08010B82 - .align 2, 0 -_08010A58: .4byte gReceivedRemoteLinkPlayers -_08010A5C: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010A6A - b _08010B82 -_08010A6A: - bl ResetBlockReceivedFlags - movs r4, 0 - lsls r0, r6, 3 - subs r0, r6 - lsls r5, r0, 2 - movs r7, 0 -_08010A78: - cmp r4, r6 - beq _08010ABA - ldr r2, _08010A9C @ =gLinkPlayers - adds r0, r7, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _08010AA0 - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010AAC - b _08010ABA - .align 2, 0 -_08010A9C: .4byte gLinkPlayers -_08010AA0: - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010ABA -_08010AAC: - lsls r1, r4, 8 - ldr r0, _08010AE4 @ =gBlockRecvBuffer - adds r1, r0 - ldr r0, _08010AE8 @ =gUnknown_2022B58 - movs r2, 0x60 - bl memcpy -_08010ABA: - adds r7, 0x1C - adds r4, 0x1 - cmp r4, 0x3 - ble _08010A78 - ldr r1, _08010AEC @ =gBattleCommunication - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r1, _08010AF0 @ =gMain - ldr r0, [r1, 0x8] - mov r2, r9 - str r0, [r2] - ldr r0, _08010AF4 @ =gBattleTypeFlags - ldr r0, [r0] - mov r2, r8 - strh r0, [r2] - ldr r0, _08010AF8 @ =sub_80109C8 - str r0, [r1, 0x8] - bl sub_8128198 - b _08010B82 - .align 2, 0 -_08010AE4: .4byte gBlockRecvBuffer -_08010AE8: .4byte gUnknown_2022B58 -_08010AEC: .4byte gBattleCommunication -_08010AF0: .4byte gMain -_08010AF4: .4byte gBattleTypeFlags -_08010AF8: .4byte sub_80109C8 -_08010AFC: - ldr r0, _08010B1C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08010B82 - movs r0, 0x3 - strb r0, [r5] - ldr r0, _08010B20 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08010B24 - bl sub_800AB9C - b _08010B82 - .align 2, 0 -_08010B1C: .4byte gPaletteFade -_08010B20: .4byte gWirelessCommType -_08010B24: - bl sub_800AAC0 - b _08010B82 -_08010B2A: - ldr r0, _08010B54 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08010B64 - bl IsRfuTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08010B82 - ldr r1, _08010B58 @ =gBattleTypeFlags - mov r2, r8 - ldrh r0, [r2] - str r0, [r1] - ldr r1, _08010B5C @ =gMain - mov r2, r9 - ldr r0, [r2] - str r0, [r1, 0x8] - ldr r0, _08010B60 @ =sub_800FE24 - bl SetMainCallback2 - b _08010B82 - .align 2, 0 -_08010B54: .4byte gWirelessCommType -_08010B58: .4byte gBattleTypeFlags -_08010B5C: .4byte gMain -_08010B60: .4byte sub_800FE24 -_08010B64: - ldr r0, _08010B90 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08010B82 - ldr r1, _08010B94 @ =gBattleTypeFlags - mov r2, r8 - ldrh r0, [r2] - str r0, [r1] - ldr r1, _08010B98 @ =gMain - mov r2, r9 - ldr r0, [r2] - str r0, [r1, 0x8] - ldr r0, _08010B9C @ =sub_800FE24 - bl SetMainCallback2 -_08010B82: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08010B90: .4byte gReceivedRemoteLinkPlayers -_08010B94: .4byte gBattleTypeFlags -_08010B98: .4byte gMain -_08010B9C: .4byte sub_800FE24 - thumb_func_end sub_80109C8 - - thumb_func_start sub_8010BA0 -sub_8010BA0: @ 8010BA0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - bl GetMultiplayerId - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08010BD8 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xB5 - strb r7, [r0] - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _08010BDC @ =gBattleCommunication - ldrb r0, [r0] - cmp r0, 0xC - bls _08010BCC - b _080110F0 -_08010BCC: - lsls r0, 2 - ldr r1, _08010BE0 @ =_08010BE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08010BD8: .4byte gBattleStruct -_08010BDC: .4byte gBattleCommunication -_08010BE0: .4byte _08010BE4 - .align 2, 0 -_08010BE4: - .4byte _08010C18 - .4byte _08010C5C - .4byte _08010CD4 - .4byte _08010DB6 - .4byte _08010DE0 - .4byte _080110D0 - .4byte _080110DC - .4byte _08010ED8 - .4byte _08010F00 - .4byte _080110D0 - .4byte _080110DC - .4byte _0801106C - .4byte _08011084 -_08010C18: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08010C44 - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - bl sub_80357C8 - ldr r1, _08010C54 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1] -_08010C44: - ldr r0, _08010C58 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _08010C4E - b _080110F0 -_08010C4E: - bl LoadWirelessStatusIndicatorSpriteGfx - b _080110F0 - .align 2, 0 -_08010C54: .4byte gBattleCommunication -_08010C58: .4byte gWirelessCommType -_08010C5C: - ldr r0, _08010CC0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08010C66 - b _080110F0 -_08010C66: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08010CAA - ldr r4, _08010CC4 @ =gBattleStruct - ldr r0, [r4] - movs r5, 0xC2 - lsls r5, 1 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - ldr r2, _08010CC8 @ =0x00000185 - adds r1, r0, r2 - movs r0, 0x2 - strb r0, [r1] - bl sub_800FFEC - bl sub_80100B8 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, r5 - movs r2, 0x20 - bl SendBlock - ldr r1, _08010CCC @ =gBattleCommunication - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08010CAA: - ldr r0, _08010CD0 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _08010CB4 - b _080110F0 -_08010CB4: - movs r0, 0 - movs r1, 0 - bl CreateWirelessStatusIndicatorSprite - b _080110F0 - .align 2, 0 -_08010CC0: .4byte gReceivedRemoteLinkPlayers -_08010CC4: .4byte gBattleStruct -_08010CC8: .4byte 0x00000185 -_08010CCC: .4byte gBattleCommunication -_08010CD0: .4byte gWirelessCommType -_08010CD4: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010CE2 - b _080110F0 -_08010CE2: - bl ResetBlockReceivedFlags - movs r0, 0x4 - adds r1, r7, 0 - bl sub_8010414 - bl sub_801017C - bl SetDeoxysStats - ldr r0, _08010D4C @ =gDecompressionBuffer - ldr r1, _08010D50 @ =gPlayerParty - movs r2, 0x96 - lsls r2, 1 - bl memcpy - ldr r0, _08010D54 @ =sub_800F6FC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08010D58 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - movs r0, 0x87 - lsls r0, 1 - strh r0, [r1, 0xA] - movs r0, 0x5A - strh r0, [r1, 0xC] - strh r2, [r1, 0x12] - strh r2, [r1, 0xE] - strh r2, [r1, 0x10] - adds r2, r1, 0 - ldr r0, _08010D5C @ =gBlockRecvBuffer - adds r3, r0, 0x2 - ldr r5, _08010D60 @ =gLinkPlayers - movs r4, 0x3F - movs r7, 0x80 - lsls r7, 1 - movs r6, 0x3 -_08010D3A: - ldrh r0, [r5, 0x18] - cmp r0, 0x1 - beq _08010D76 - cmp r0, 0x1 - bgt _08010D64 - cmp r0, 0 - beq _08010D6E - b _08010D9C - .align 2, 0 -_08010D4C: .4byte gDecompressionBuffer -_08010D50: .4byte gPlayerParty -_08010D54: .4byte sub_800F6FC -_08010D58: .4byte gTasks -_08010D5C: .4byte gBlockRecvBuffer -_08010D60: .4byte gLinkPlayers -_08010D64: - cmp r0, 0x2 - beq _08010D7E - cmp r0, 0x3 - beq _08010D8E - b _08010D9C -_08010D6E: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - b _08010D86 -_08010D76: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - b _08010D96 -_08010D7E: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - lsls r1, 6 -_08010D86: - ldrh r0, [r2, 0xE] - orrs r1, r0 - strh r1, [r2, 0xE] - b _08010D9C -_08010D8E: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - lsls r1, 6 -_08010D96: - ldrh r0, [r2, 0x10] - orrs r1, r0 - strh r1, [r2, 0x10] -_08010D9C: - adds r3, r7 - adds r5, 0x1C - subs r6, 0x1 - cmp r6, 0 - bge _08010D3A - bl ZeroPlayerPartyMons - bl ZeroEnemyPartyMons - ldr r1, _08010DD8 @ =gBattleCommunication - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08010DB6: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010DC2 - b _080110F0 -_08010DC2: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08010DDC @ =gDecompressionBuffer - movs r2, 0xC8 - bl SendBlock - ldr r1, _08010DD8 @ =gBattleCommunication - b _080110EA - .align 2, 0 -_08010DD8: .4byte gBattleCommunication -_08010DDC: .4byte gDecompressionBuffer -_08010DE0: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010DEE - b _080110F0 -_08010DEE: - bl ResetBlockReceivedFlags - movs r6, 0 - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - mov r8, r0 - ldr r4, _08010E18 @ =gBlockRecvBuffer - movs r5, 0 -_08010E00: - cmp r6, r7 - bne _08010E34 - ldr r0, _08010E1C @ =gLinkPlayers - adds r0, r5, r0 - ldrh r0, [r0, 0x18] - cmp r0, 0x2 - bgt _08010E20 - cmp r0, 0x1 - bge _08010E2C - cmp r0, 0 - beq _08010E24 - b _08010EBE - .align 2, 0 -_08010E18: .4byte gBlockRecvBuffer -_08010E1C: .4byte gLinkPlayers -_08010E20: - cmp r0, 0x3 - bne _08010EBE -_08010E24: - ldr r0, _08010E28 @ =gPlayerParty - b _08010EA4 - .align 2, 0 -_08010E28: .4byte gPlayerParty -_08010E2C: - ldr r0, _08010E30 @ =gUnknown_20243B0 - b _08010EA4 - .align 2, 0 -_08010E30: .4byte gUnknown_20243B0 -_08010E34: - ldr r2, _08010E54 @ =gLinkPlayers - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _08010E58 - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010E66 - b _08010E8C - .align 2, 0 -_08010E54: .4byte gLinkPlayers -_08010E58: - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010E8C -_08010E66: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010E78 - cmp r2, 0x1 - bge _08010E84 - cmp r2, 0 - beq _08010E7C - b _08010EBE -_08010E78: - cmp r2, 0x3 - bne _08010EBE -_08010E7C: - ldr r0, _08010E80 @ =gPlayerParty - b _08010EA4 - .align 2, 0 -_08010E80: .4byte gPlayerParty -_08010E84: - ldr r0, _08010E88 @ =gUnknown_20243B0 - b _08010EA4 - .align 2, 0 -_08010E88: .4byte gUnknown_20243B0 -_08010E8C: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010E9E - cmp r2, 0x1 - bge _08010EB4 - cmp r2, 0 - beq _08010EA2 - b _08010EBE -_08010E9E: - cmp r2, 0x3 - bne _08010EBE -_08010EA2: - ldr r0, _08010EB0 @ =gEnemyParty -_08010EA4: - adds r1, r4, 0 - movs r2, 0xC8 - bl memcpy - b _08010EBE - .align 2, 0 -_08010EB0: .4byte gEnemyParty -_08010EB4: - ldr r0, _08010ED0 @ =gUnknown_2024158 - adds r1, r4, 0 - movs r2, 0xC8 - bl memcpy -_08010EBE: - movs r2, 0x80 - lsls r2, 1 - adds r4, r2 - adds r5, 0x1C - adds r6, 0x1 - cmp r6, 0x3 - ble _08010E00 - ldr r1, _08010ED4 @ =gBattleCommunication - b _080110EA - .align 2, 0 -_08010ED0: .4byte gUnknown_2024158 -_08010ED4: .4byte gBattleCommunication -_08010ED8: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010EE4 - b _080110F0 -_08010EE4: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08010EF8 @ =gDecompressionBuffer + 0x0C8 - movs r2, 0x64 - bl SendBlock - ldr r1, _08010EFC @ =gBattleCommunication - b _080110EA - .align 2, 0 -_08010EF8: .4byte gDecompressionBuffer + 0x0C8 -_08010EFC: .4byte gBattleCommunication -_08010F00: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010F0E - b _080110F0 -_08010F0E: - bl ResetBlockReceivedFlags - movs r6, 0 - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - mov r8, r0 - ldr r4, _08010F38 @ =gBlockRecvBuffer - movs r5, 0 -_08010F20: - cmp r6, r7 - bne _08010F54 - ldr r0, _08010F3C @ =gLinkPlayers - adds r0, r5, r0 - ldrh r0, [r0, 0x18] - cmp r0, 0x2 - bgt _08010F40 - cmp r0, 0x1 - bge _08010F4C - cmp r0, 0 - beq _08010F44 - b _08010FDE - .align 2, 0 -_08010F38: .4byte gBlockRecvBuffer -_08010F3C: .4byte gLinkPlayers -_08010F40: - cmp r0, 0x3 - bne _08010FDE -_08010F44: - ldr r0, _08010F48 @ =gUnknown_202434C - b _08010FC4 - .align 2, 0 -_08010F48: .4byte gUnknown_202434C -_08010F4C: - ldr r0, _08010F50 @ =gUnknown_2024478 - b _08010FC4 - .align 2, 0 -_08010F50: .4byte gUnknown_2024478 -_08010F54: - ldr r2, _08010F74 @ =gLinkPlayers - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _08010F78 - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010F86 - b _08010FAC - .align 2, 0 -_08010F74: .4byte gLinkPlayers -_08010F78: - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010FAC -_08010F86: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010F98 - cmp r2, 0x1 - bge _08010FA4 - cmp r2, 0 - beq _08010F9C - b _08010FDE -_08010F98: - cmp r2, 0x3 - bne _08010FDE -_08010F9C: - ldr r0, _08010FA0 @ =gUnknown_202434C - b _08010FC4 - .align 2, 0 -_08010FA0: .4byte gUnknown_202434C -_08010FA4: - ldr r0, _08010FA8 @ =gUnknown_2024478 - b _08010FC4 - .align 2, 0 -_08010FA8: .4byte gUnknown_2024478 -_08010FAC: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010FBE - cmp r2, 0x1 - bge _08010FD4 - cmp r2, 0 - beq _08010FC2 - b _08010FDE -_08010FBE: - cmp r2, 0x3 - bne _08010FDE -_08010FC2: - ldr r0, _08010FD0 @ =gUnknown_20240F4 -_08010FC4: - adds r1, r4, 0 - movs r2, 0x64 - bl memcpy - b _08010FDE - .align 2, 0 -_08010FD0: .4byte gUnknown_20240F4 -_08010FD4: - ldr r0, _0801105C @ =gUnknown_2024220 - adds r1, r4, 0 - movs r2, 0x64 - bl memcpy -_08010FDE: - movs r2, 0x80 - lsls r2, 1 - adds r4, r2 - adds r5, 0x1C - adds r6, 0x1 - cmp r6, 0x3 - ble _08010F20 - ldr r4, _08011060 @ =gPlayerParty - adds r0, r4, 0 - bl sub_8011D0C - adds r0, r4, 0 - adds r0, 0x64 - bl sub_8011D0C - adds r0, r4, 0 - adds r0, 0xC8 - bl sub_8011D0C - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, r1 - bl sub_8011D0C - movs r2, 0xC8 - lsls r2, 1 - adds r0, r4, r2 - bl sub_8011D0C - movs r1, 0xFA - lsls r1, 1 - adds r0, r4, r1 - bl sub_8011D0C - ldr r4, _08011064 @ =gEnemyParty - adds r0, r4, 0 - bl sub_8011D0C - adds r0, r4, 0 - adds r0, 0x64 - bl sub_8011D0C - adds r0, r4, 0 - adds r0, 0xC8 - bl sub_8011D0C - movs r2, 0x96 - lsls r2, 1 - adds r0, r4, r2 - bl sub_8011D0C - movs r1, 0xC8 - lsls r1, 1 - adds r0, r4, r1 - bl sub_8011D0C - movs r2, 0xFA - lsls r2, 1 - adds r0, r4, r2 - bl sub_8011D0C - ldr r1, _08011068 @ =gBattleCommunication - b _080110EA - .align 2, 0 -_0801105C: .4byte gUnknown_2024220 -_08011060: .4byte gPlayerParty -_08011064: .4byte gEnemyParty -_08011068: .4byte gBattleCommunication -_0801106C: - bl sub_800D30C - ldr r0, _08011080 @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - b _080110F0 - .align 2, 0 -_08011080: .4byte gBattleCommunication -_08011084: - ldr r0, _080110B8 @ =gUnknown_2023E83 - adds r1, r0, 0x1 - bl BattleInitAllSprites - lsls r0, 24 - cmp r0, 0 - beq _080110F0 - ldr r2, _080110BC @ =gPreBattleCallback1 - ldr r1, _080110C0 @ =gMain - ldr r0, [r1] - str r0, [r2] - ldr r0, _080110C4 @ =sub_80123E4 - str r0, [r1] - ldr r0, _080110C8 @ =BattleMainCB2 - bl SetMainCallback2 - ldr r2, _080110CC @ =gBattleTypeFlags - ldr r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080110F0 - movs r0, 0x20 - orrs r1, r0 - str r1, [r2] - b _080110F0 - .align 2, 0 -_080110B8: .4byte gUnknown_2023E83 -_080110BC: .4byte gPreBattleCallback1 -_080110C0: .4byte gMain -_080110C4: .4byte sub_80123E4 -_080110C8: .4byte BattleMainCB2 -_080110CC: .4byte gBattleTypeFlags -_080110D0: - ldr r0, _080110FC @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - movs r1, 0x1 - strb r1, [r0, 0x1] -_080110DC: - ldr r1, _080110FC @ =gBattleCommunication - ldrb r0, [r1, 0x1] - subs r0, 0x1 - strb r0, [r1, 0x1] - lsls r0, 24 - cmp r0, 0 - bne _080110F0 -_080110EA: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080110F0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080110FC: .4byte gBattleCommunication - thumb_func_end sub_8010BA0 - - thumb_func_start BattleMainCB2 -BattleMainCB2: @ 8011100 - push {lr} - sub sp, 0x4 - bl AnimateSprites - bl BuildOamBuffer - bl RunTextPrinters - bl UpdatePaletteFade - bl RunTasks - ldr r0, _08011160 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08011158 - ldr r0, _08011164 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 9 - ands r0, r1 - cmp r0, 0 - beq _08011158 - ldr r2, _08011168 @ =gSpecialVar_Result - ldr r1, _0801116C @ =gBattleOutcome - movs r0, 0x3 - strb r0, [r1] - movs r0, 0x3 - strh r0, [r2] - bl ResetPaletteFadeControl - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08011170 @ =CB2_QuitRecordedBattle - bl SetMainCallback2 -_08011158: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08011160: .4byte gMain -_08011164: .4byte gBattleTypeFlags -_08011168: .4byte gSpecialVar_Result -_0801116C: .4byte gBattleOutcome -_08011170: .4byte CB2_QuitRecordedBattle - thumb_func_end BattleMainCB2 - - thumb_func_start FreeRestoreBattleData -FreeRestoreBattleData: @ 8011174 - push {lr} - ldr r1, _080111AC @ =gMain - ldr r0, _080111B0 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r1] - ldr r2, _080111B4 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r2, 0x15] - ldr r0, _080111B8 @ =0x00000439 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - bl ZeroEnemyPartyMons - movs r0, 0x53 - bl m4aSongNumStop - bl FreeMonSpritesGfx - bl FreeBattleSpritesData - bl FreeBattleResources - pop {r0} - bx r0 - .align 2, 0 -_080111AC: .4byte gMain -_080111B0: .4byte gPreBattleCallback1 -_080111B4: .4byte gScanlineEffect -_080111B8: .4byte 0x00000439 - thumb_func_end FreeRestoreBattleData - - thumb_func_start CB2_QuitRecordedBattle -CB2_QuitRecordedBattle: @ 80111BC - push {lr} - bl UpdatePaletteFade - ldr r0, _080111E4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080111DE - bl FreeRestoreBattleData - bl FreeAllWindowBuffers - ldr r0, _080111E8 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_080111DE: - pop {r0} - bx r0 - .align 2, 0 -_080111E4: .4byte gPaletteFade -_080111E8: .4byte gMain - thumb_func_end CB2_QuitRecordedBattle - - thumb_func_start sub_80111EC -sub_80111EC: @ 80111EC - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r1, _080111F8 @ =sub_80111FC - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080111F8: .4byte sub_80111FC - thumb_func_end sub_80111EC - - thumb_func_start sub_80111FC -sub_80111FC: @ 80111FC - push {r4-r7,lr} - adds r5, r0, 0 - movs r0, 0x2E - ldrsh r6, [r5, r0] - cmp r6, 0x1 - beq _08011236 - cmp r6, 0x1 - bgt _08011212 - cmp r6, 0 - beq _08011218 - b _080112D0 -_08011212: - cmp r6, 0x2 - beq _080112A0 - b _080112D0 -_08011218: - ldr r4, _08011298 @ =gUnknown_2022BC0 - movs r0, 0x80 - lsls r0, 5 - bl AllocZeroed - str r0, [r4] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - strh r6, [r5, 0x30] - ldr r0, _0801129C @ =0x00000281 - strh r0, [r5, 0x32] - strh r6, [r5, 0x34] - movs r0, 0x1 - strh r0, [r5, 0x36] -_08011236: - ldrh r0, [r5, 0x36] - subs r0, 0x1 - strh r0, [r5, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _080112D0 - movs r0, 0x2 - strh r0, [r5, 0x36] - movs r1, 0x30 - ldrsh r2, [r5, r1] - movs r3, 0x34 - ldrsh r0, [r5, r3] - lsls r0, 5 - adds r2, r0 - movs r3, 0x32 - ldrsh r1, [r5, r3] - subs r1, r0 - movs r3, 0 - ldr r0, _08011298 @ =gUnknown_2022BC0 - mov r12, r0 - lsls r7, r2, 1 - movs r4, 0x3D - lsls r6, r1, 1 -_08011264: - mov r1, r12 - ldr r0, [r1] - lsls r2, r3, 1 - adds r1, r7, r0 - adds r1, r2, r1 - strh r4, [r1] - adds r0, r6, r0 - adds r2, r0 - strh r4, [r2] - adds r3, 0x2 - cmp r3, 0x1D - ble _08011264 - ldrh r0, [r5, 0x34] - adds r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _080112D0 - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - movs r0, 0x20 - strh r0, [r5, 0x30] - b _080112D0 - .align 2, 0 -_08011298: .4byte gUnknown_2022BC0 -_0801129C: .4byte 0x00000281 -_080112A0: - ldrh r0, [r5, 0x30] - subs r0, 0x1 - strh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080112D0 - ldr r4, _080112D8 @ =gUnknown_2022BC0 - ldr r0, [r4] - cmp r0, 0 - beq _080112CA - movs r2, 0x80 - lsls r2, 5 - movs r1, 0 - bl memset - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] -_080112CA: - ldr r0, _080112DC @ =sub_800FD9C - bl SetMainCallback2 -_080112D0: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080112D8: .4byte gUnknown_2022BC0 -_080112DC: .4byte sub_800FD9C - thumb_func_end sub_80111FC - - thumb_func_start sub_80112E0 -sub_80112E0: @ 80112E0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - str r0, [sp, 0x10] - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x14] - movs r0, 0 - mov r9, r0 - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08011304 - movs r0, 0 - b _080116AC -_08011304: - ldr r0, _08011334 @ =gBattleTypeFlags - ldr r0, [r0] - ldr r1, _08011338 @ =0x00080908 - ands r0, r1 - ldr r1, [sp, 0x14] - lsls r1, 2 - str r1, [sp, 0x20] - cmp r0, 0x8 - beq _08011318 - b _0801169C -_08011318: - bl ZeroEnemyPartyMons - movs r2, 0 - str r2, [sp, 0x18] - ldr r2, _0801133C @ =gTrainers - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r0, r2 - adds r0, 0x20 - ldr r4, [sp, 0x18] - b _0801167E - .align 2, 0 -_08011334: .4byte gBattleTypeFlags -_08011338: .4byte 0x00080908 -_0801133C: .4byte gTrainers -_08011340: - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r1, r0, r2 - ldrb r0, [r1, 0x18] - cmp r0, 0x1 - bne _08011354 - movs r4, 0x80 - mov r10, r4 - b _08011366 -_08011354: - ldrb r1, [r1, 0x2] - movs r0, 0x80 - ands r0, r1 - movs r1, 0x88 - mov r10, r1 - cmp r0, 0 - beq _08011366 - movs r2, 0x78 - mov r10, r2 -_08011366: - movs r6, 0 - ldr r0, _080113BC @ =gTrainers - ldr r2, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r1, r2, r3 - lsls r1, 3 - adds r3, r0, 0x4 - adds r1, r3 - ldrb r1, [r1] - adds r4, r0, 0 - ldr r0, [sp, 0x18] - adds r0, 0x1 - str r0, [sp, 0x1C] - cmp r1, 0xFF - beq _0801139E -_08011384: - ldr r0, [sp, 0x14] - adds r1, r2, r0 - lsls r1, 3 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _08011384 -_0801139E: - adds r2, r4, 0 - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r1, r0, 3 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08011454 - cmp r0, 0x1 - bgt _080113C0 - cmp r0, 0 - beq _080113CE - b _0801166C - .align 2, 0 -_080113BC: .4byte gTrainers -_080113C0: - cmp r0, 0x2 - bne _080113C6 - b _08011514 -_080113C6: - cmp r0, 0x3 - bne _080113CC - b _080115A8 -_080113CC: - b _0801166C -_080113CE: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r4, [r0] - movs r6, 0 - ldr r0, [sp, 0x18] - lsls r2, r0, 3 - adds r0, r2, r4 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _08011450 @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - adds r5, r2, 0 - cmp r0, 0xFF - beq _08011410 - adds r3, r1, 0 - movs r7, 0xB -_080113F4: - adds r0, r2, r4 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r7 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _080113F4 -_08011410: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - adds r4, r5, r4 - ldrh r1, [r4] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, [sp, 0x18] - movs r1, 0x64 - adds r0, r3, 0 - muls r0, r1 - ldr r2, [sp, 0x10] - adds r0, r2, r0 - ldrh r1, [r4, 0x4] - ldrb r2, [r4, 0x2] - movs r3, 0x1 - str r3, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r3, 0x2 - str r3, [sp, 0x8] - movs r3, 0 - str r3, [sp, 0xC] - adds r3, r6, 0 - bl CreateMon - b _0801166C - .align 2, 0 -_08011450: .4byte gSpeciesNames -_08011454: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r7, [r0] - movs r6, 0 - ldr r4, [sp, 0x18] - lsls r2, r4, 4 - adds r0, r2, r7 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _0801150C @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - mov r8, r2 - cmp r0, 0xFF - beq _08011496 - adds r3, r1, 0 - movs r4, 0xB -_0801147A: - adds r0, r2, r7 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r4 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0801147A -_08011496: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - mov r3, r8 - adds r4, r3, r7 - ldrh r1, [r4] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [sp, 0x18] - movs r1, 0x64 - adds r5, r0, 0 - muls r5, r1 - ldr r2, [sp, 0x10] - adds r5, r2, r5 - ldrh r1, [r4, 0x4] - ldrb r2, [r4, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r5, 0 - adds r3, r6, 0 - bl CreateMon - movs r6, 0 - mov r0, r8 - adds r0, 0x6 - adds r4, r7, r0 -_080114E0: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r5, 0 - adds r2, r4, 0 - bl SetMonData - adds r1, r6, 0 - adds r1, 0x11 - ldrh r0, [r4] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - ldr r0, _08011510 @ =gBattleMoves+0x4 - adds r2, r0 - adds r0, r5, 0 - bl SetMonData - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _080114E0 - b _0801166C - .align 2, 0 -_0801150C: .4byte gSpeciesNames -_08011510: .4byte gBattleMoves+0x4 -_08011514: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r4, [r0] - movs r6, 0 - ldr r0, [sp, 0x18] - lsls r2, r0, 3 - adds r0, r2, r4 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _080115A4 @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - adds r5, r2, 0 - cmp r0, 0xFF - beq _08011556 - adds r3, r1, 0 - movs r7, 0xB -_0801153A: - adds r0, r2, r4 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r7 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0801153A -_08011556: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - adds r5, r4 - ldrh r1, [r5] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, [sp, 0x18] - movs r0, 0x64 - adds r4, r3, 0 - muls r4, r0 - ldr r1, [sp, 0x10] - adds r4, r1, r4 - ldrh r1, [r5, 0x4] - ldrb r2, [r5, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r4, 0 - adds r3, r6, 0 - bl CreateMon - adds r5, 0x6 - adds r0, r4, 0 - movs r1, 0xC - adds r2, r5, 0 - bl SetMonData - b _0801166C - .align 2, 0 -_080115A4: .4byte gSpeciesNames -_080115A8: - adds r0, r4, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r7, [r0] - movs r6, 0 - ldr r4, [sp, 0x18] - lsls r2, r4, 4 - adds r0, r2, r7 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _080116BC @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - mov r8, r2 - cmp r0, 0xFF - beq _080115EA - adds r3, r1, 0 - movs r4, 0xB -_080115CE: - adds r0, r2, r7 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r4 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _080115CE -_080115EA: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - mov r3, r8 - adds r5, r3, r7 - ldrh r1, [r5] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [sp, 0x18] - movs r1, 0x64 - adds r4, r0, 0 - muls r4, r1 - ldr r2, [sp, 0x10] - adds r4, r2, r4 - ldrh r1, [r5, 0x4] - ldrb r2, [r5, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r4, 0 - adds r3, r6, 0 - bl CreateMon - adds r5, 0x6 - adds r0, r4, 0 - movs r1, 0xC - adds r2, r5, 0 - bl SetMonData - movs r6, 0 - adds r5, r4, 0 - mov r0, r8 - adds r0, 0x8 - adds r4, r7, r0 -_08011642: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r5, 0 - adds r2, r4, 0 - bl SetMonData - adds r1, r6, 0 - adds r1, 0x11 - ldrh r0, [r4] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - ldr r0, _080116C0 @ =gBattleMoves+0x4 - adds r2, r0 - adds r0, r5, 0 - bl SetMonData - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _08011642 -_0801166C: - ldr r4, [sp, 0x1C] - str r4, [sp, 0x18] - ldr r2, _080116C4 @ =gTrainers - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r0, r2 - adds r0, 0x20 -_0801167E: - ldrb r0, [r0] - cmp r4, r0 - bge _08011686 - b _08011340 -_08011686: - ldr r2, _080116C8 @ =gBattleTypeFlags - ldr r1, _080116C4 @ =gTrainers - ldr r4, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r4, r3 - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x18] - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] -_0801169C: - ldr r0, _080116C4 @ =gTrainers - ldr r4, [sp, 0x20] - ldr r2, [sp, 0x14] - adds r1, r4, r2 - lsls r1, 3 - adds r1, r0 - adds r1, 0x20 - ldrb r0, [r1] -_080116AC: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080116BC: .4byte gSpeciesNames -_080116C0: .4byte gBattleMoves+0x4 -_080116C4: .4byte gTrainers -_080116C8: .4byte gBattleTypeFlags - thumb_func_end sub_80112E0 - - thumb_func_start sub_80116CC -sub_80116CC: @ 80116CC - push {lr} - ldr r0, _080116EC @ =0x04000006 - ldrh r0, [r0] - subs r0, 0x6F - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x30 - bhi _080116E6 - ldr r1, _080116F0 @ =0x04000008 - movs r2, 0x98 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] -_080116E6: - pop {r0} - bx r0 - .align 2, 0 -_080116EC: .4byte 0x04000006 -_080116F0: .4byte 0x04000008 - thumb_func_end sub_80116CC - - thumb_func_start VBlankCB_Battle -VBlankCB_Battle: @ 80116F4 - push {lr} - bl Random - ldr r0, _08011788 @ =gBattle_BG0_X - ldrh r1, [r0] - movs r0, 0x10 - bl SetGpuReg - ldr r0, _0801178C @ =gBattle_BG0_Y - ldrh r1, [r0] - movs r0, 0x12 - bl SetGpuReg - ldr r0, _08011790 @ =gBattle_BG1_X - ldrh r1, [r0] - movs r0, 0x14 - bl SetGpuReg - ldr r0, _08011794 @ =gBattle_BG1_Y - ldrh r1, [r0] - movs r0, 0x16 - bl SetGpuReg - ldr r0, _08011798 @ =gBattle_BG2_X - ldrh r1, [r0] - movs r0, 0x18 - bl SetGpuReg - ldr r0, _0801179C @ =gBattle_BG2_Y - ldrh r1, [r0] - movs r0, 0x1A - bl SetGpuReg - ldr r0, _080117A0 @ =gBattle_BG3_X - ldrh r1, [r0] - movs r0, 0x1C - bl SetGpuReg - ldr r0, _080117A4 @ =gBattle_BG3_Y - ldrh r1, [r0] - movs r0, 0x1E - bl SetGpuReg - ldr r0, _080117A8 @ =gBattle_WIN0H - ldrh r1, [r0] - movs r0, 0x40 - bl SetGpuReg - ldr r0, _080117AC @ =gBattle_WIN0V - ldrh r1, [r0] - movs r0, 0x44 - bl SetGpuReg - ldr r0, _080117B0 @ =gUnknown_2022988 - ldrh r1, [r0] - movs r0, 0x42 - bl SetGpuReg - ldr r0, _080117B4 @ =gUnknown_202298A - ldrh r1, [r0] - movs r0, 0x46 - bl SetGpuReg - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl ScanlineEffect_InitHBlankDmaTransfer - pop {r0} - bx r0 - .align 2, 0 -_08011788: .4byte gBattle_BG0_X -_0801178C: .4byte gBattle_BG0_Y -_08011790: .4byte gBattle_BG1_X -_08011794: .4byte gBattle_BG1_Y -_08011798: .4byte gBattle_BG2_X -_0801179C: .4byte gBattle_BG2_Y -_080117A0: .4byte gBattle_BG3_X -_080117A4: .4byte gBattle_BG3_Y -_080117A8: .4byte gBattle_WIN0H -_080117AC: .4byte gBattle_WIN0V -_080117B0: .4byte gUnknown_2022988 -_080117B4: .4byte gUnknown_202298A - thumb_func_end VBlankCB_Battle - - thumb_func_start nullsub_9 -nullsub_9: @ 80117B8 - bx lr - thumb_func_end nullsub_9 - - thumb_func_start sub_80117BC -sub_80117BC: @ 80117BC - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080117DC - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - lsrs r0, 8 - ldrh r1, [r5, 0x30] - adds r0, r1 - strh r0, [r5, 0x20] - b _080117EE -_080117DC: - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - asrs r0, 8 - ldrh r1, [r5, 0x30] - subs r1, r0 - strh r1, [r5, 0x20] -_080117EE: - movs r1, 0xC0 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r5, 0x32] - adds r0, r1 - strh r0, [r5, 0x32] - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08011822 - ldr r4, _08011828 @ =0x00002710 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - adds r0, r5, 0 - bl FreeSpriteOamMatrix - adds r0, r5, 0 - bl DestroySprite -_08011822: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08011828: .4byte 0x00002710 - thumb_func_end sub_80117BC - - thumb_func_start sub_801182C -sub_801182C: @ 801182C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _08011848 @ =sub_80117BC - str r0, [r4, 0x1C] - movs r0, 0x61 - bl PlaySE - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011848: .4byte sub_80117BC - thumb_func_end sub_801182C - - thumb_func_start sub_801184C -sub_801184C: @ 801184C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - ldr r0, _08011894 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xB5 - ldrb r2, [r0] - ldr r0, _08011898 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080118BC - ldr r1, _0801189C @ =gLinkPlayers - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x18] - cmp r0, 0x1 - beq _080118A8 - cmp r0, 0x1 - bgt _080118A0 - cmp r0, 0 - beq _080118BC - b _080118C4 - .align 2, 0 -_08011894: .4byte gBattleStruct -_08011898: .4byte gBattleTypeFlags -_0801189C: .4byte gLinkPlayers -_080118A0: - cmp r0, 0x2 - beq _080118BC - cmp r0, 0x3 - bne _080118C4 -_080118A8: - ldr r0, _080118B4 @ =gEnemyParty - str r0, [sp, 0x4] - ldr r1, _080118B8 @ =gPlayerParty - str r1, [sp, 0x8] - b _080118C4 - .align 2, 0 -_080118B4: .4byte gEnemyParty -_080118B8: .4byte gPlayerParty -_080118BC: - ldr r2, _08011A10 @ =gPlayerParty - str r2, [sp, 0x4] - ldr r3, _08011A14 @ =gEnemyParty - str r3, [sp, 0x8] -_080118C4: - movs r7, 0 - movs r0, 0 - mov r8, r0 - ldr r1, [sp] - lsls r1, 2 - str r1, [sp, 0xC] - movs r2, 0xCE - lsls r2, 1 - mov r10, r2 - mov r9, r0 -_080118D8: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r3, [sp, 0x4] - adds r4, r3, r4 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - adds r1, r0, 0 - cmp r5, 0 - beq _08011948 - cmp r5, r10 - beq _0801191C - cmp r6, 0 - beq _0801191C - cmp r1, 0 - bne _0801191C - movs r0, 0x1 - mov r2, r9 - lsls r0, r2 - orrs r7, r0 -_0801191C: - cmp r5, 0 - beq _08011948 - cmp r6, 0 - beq _08011934 - cmp r5, r10 - beq _0801192C - cmp r1, 0 - beq _08011934 -_0801192C: - movs r0, 0x2 - mov r3, r9 - lsls r0, r3 - orrs r7, r0 -_08011934: - cmp r5, 0 - beq _08011948 - cmp r5, r10 - beq _08011948 - cmp r6, 0 - bne _08011948 - movs r0, 0x3 - mov r1, r9 - lsls r0, r1 - orrs r7, r0 -_08011948: - movs r2, 0x2 - add r9, r2 - movs r3, 0x1 - add r8, r3 - mov r0, r8 - cmp r0, 0x5 - ble _080118D8 - ldr r1, _08011A18 @ =gTasks - ldr r2, [sp, 0xC] - ldr r3, [sp] - adds r0, r2, r3 - lsls r0, 3 - adds r0, r1 - strh r7, [r0, 0xE] - movs r7, 0 - movs r0, 0 - mov r8, r0 - movs r1, 0xCE - lsls r1, 1 - mov r10, r1 - mov r9, r0 -_08011972: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r2, [sp, 0x8] - adds r4, r2, r4 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - adds r1, r0, 0 - cmp r5, 0 - beq _080119E2 - cmp r5, r10 - beq _080119B6 - cmp r6, 0 - beq _080119B6 - cmp r1, 0 - bne _080119B6 - movs r0, 0x1 - mov r3, r9 - lsls r0, r3 - orrs r7, r0 -_080119B6: - cmp r5, 0 - beq _080119E2 - cmp r6, 0 - beq _080119CE - cmp r5, r10 - beq _080119C6 - cmp r1, 0 - beq _080119CE -_080119C6: - movs r0, 0x2 - mov r1, r9 - lsls r0, r1 - orrs r7, r0 -_080119CE: - cmp r5, 0 - beq _080119E2 - cmp r5, r10 - beq _080119E2 - cmp r6, 0 - bne _080119E2 - movs r0, 0x3 - mov r2, r9 - lsls r0, r2 - orrs r7, r0 -_080119E2: - movs r3, 0x2 - add r9, r3 - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0x5 - ble _08011972 - ldr r1, _08011A18 @ =gTasks - ldr r2, [sp, 0xC] - ldr r3, [sp] - adds r0, r2, r3 - lsls r0, 3 - adds r0, r1 - strh r7, [r0, 0x10] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08011A10: .4byte gPlayerParty -_08011A14: .4byte gEnemyParty -_08011A18: .4byte gTasks - thumb_func_end sub_801184C - - thumb_func_start sub_8011A1C -sub_8011A1C: @ 8011A1C - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - str r0, [sp] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _08011B40 @ =0x05006000 - mov r0, sp - bl CpuSet - movs r0, 0x4C - movs r1, 0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - ldr r4, _08011B44 @ =0x00005051 - movs r0, 0x44 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - ldr r1, _08011B48 @ =gBattle_WIN0H - movs r0, 0xF0 - strh r0, [r1] - ldr r0, _08011B4C @ =gBattle_WIN0V - strh r4, [r0] - bl ScanlineEffect_Clear - ldr r0, _08011B50 @ =gScanlineEffectRegBuffers - movs r3, 0xF0 - movs r1, 0xF0 - lsls r1, 3 - adds r2, r0, r1 - movs r1, 0x4F -_08011A80: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _08011A80 - movs r1, 0x50 - ldr r0, _08011B50 @ =gScanlineEffectRegBuffers - ldr r3, _08011B54 @ =0x0000ff10 - movs r4, 0x82 - lsls r4, 4 - adds r2, r0, r4 - adds r0, 0xA0 -_08011A9C: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - adds r1, 0x1 - cmp r1, 0x9F - ble _08011A9C - bl ResetPaletteFade - ldr r0, _08011B58 @ =gBattle_BG0_X - movs r4, 0 - strh r4, [r0] - ldr r0, _08011B5C @ =gBattle_BG0_Y - strh r4, [r0] - ldr r0, _08011B60 @ =gBattle_BG1_X - strh r4, [r0] - ldr r0, _08011B64 @ =gBattle_BG1_Y - strh r4, [r0] - ldr r0, _08011B68 @ =gBattle_BG2_X - strh r4, [r0] - ldr r0, _08011B6C @ =gBattle_BG2_Y - strh r4, [r0] - ldr r0, _08011B70 @ =gBattle_BG3_X - strh r4, [r0] - ldr r0, _08011B74 @ =gBattle_BG3_Y - strh r4, [r0] - bl sub_800F34C - ldr r0, _08011B78 @ =gBattleTextboxPalette - movs r1, 0 - movs r2, 0x40 - bl LoadCompressedPalette - bl sub_800F380 - bl ResetSpriteData - bl ResetTasks - bl sub_800FAE0 - movs r0, 0x4A - movs r1, 0x37 - bl SetGpuReg - bl FreeAllSpritePalettes - ldr r1, _08011B7C @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _08011B80 @ =VBlankCB_Battle - bl SetVBlankCallback - ldr r0, _08011B84 @ =sub_800F6FC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08011B88 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x87 - lsls r2, 1 - strh r2, [r1, 0xA] - movs r2, 0x5A - strh r2, [r1, 0xC] - movs r2, 0x1 - strh r2, [r1, 0x12] - bl sub_801184C - ldr r0, _08011B8C @ =sub_8011B94 - bl SetMainCallback2 - ldr r0, _08011B90 @ =gBattleCommunication - strb r4, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011B40: .4byte 0x05006000 -_08011B44: .4byte 0x00005051 -_08011B48: .4byte gBattle_WIN0H -_08011B4C: .4byte gBattle_WIN0V -_08011B50: .4byte gScanlineEffectRegBuffers -_08011B54: .4byte 0x0000ff10 -_08011B58: .4byte gBattle_BG0_X -_08011B5C: .4byte gBattle_BG0_Y -_08011B60: .4byte gBattle_BG1_X -_08011B64: .4byte gBattle_BG1_Y -_08011B68: .4byte gBattle_BG2_X -_08011B6C: .4byte gBattle_BG2_Y -_08011B70: .4byte gBattle_BG3_X -_08011B74: .4byte gBattle_BG3_Y -_08011B78: .4byte gBattleTextboxPalette -_08011B7C: .4byte gReservedSpritePaletteCount -_08011B80: .4byte VBlankCB_Battle -_08011B84: .4byte sub_800F6FC -_08011B88: .4byte gTasks -_08011B8C: .4byte sub_8011B94 -_08011B90: .4byte gBattleCommunication - thumb_func_end sub_8011A1C - - thumb_func_start sub_8011B94 -sub_8011B94: @ 8011B94 - push {lr} - bl sub_8011BB0 - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - bl RunTasks - pop {r0} - bx r0 - thumb_func_end sub_8011B94 - - thumb_func_start sub_8011BB0 -sub_8011BB0: @ 8011BB0 - push {r4,lr} - sub sp, 0x4 - ldr r4, _08011BC8 @ =gBattleCommunication - ldrb r0, [r4] - cmp r0, 0x1 - beq _08011BEA - cmp r0, 0x1 - bgt _08011BCC - cmp r0, 0 - beq _08011BD2 - b _08011C34 - .align 2, 0 -_08011BC8: .4byte gBattleCommunication -_08011BCC: - cmp r0, 0x2 - beq _08011C10 - b _08011C34 -_08011BD2: - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0xFF - strb r0, [r4, 0x1] - b _08011C08 -_08011BEA: - ldrb r0, [r4, 0x1] - subs r0, 0x1 - strb r0, [r4, 0x1] - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08011C34 - movs r0, 0x1 - negs r0, r0 - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_08011C08: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08011C34 -_08011C10: - ldr r0, _08011C3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08011C34 - ldr r0, _08011C40 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - bl sub_812C224 - bl FreeMonSpritesGfx - bl FreeBattleSpritesData - bl FreeBattleResources -_08011C34: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011C3C: .4byte gPaletteFade -_08011C40: .4byte gMain - thumb_func_end sub_8011BB0 - - thumb_func_start sub_8011C44 -sub_8011C44: @ 8011C44 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0 - cmp r1, 0x6 - bhi _08011D04 - lsls r0, r1, 2 - ldr r1, _08011C60 @ =_08011C64 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08011C60: .4byte _08011C64 - .align 2, 0 -_08011C64: - .4byte _08011C80 - .4byte _08011C94 - .4byte _08011CA8 - .4byte _08011CBC - .4byte _08011CD0 - .4byte _08011CE4 - .4byte _08011CF8 -_08011C80: - ldr r0, _08011C90 @ =gUnknown_8248320 - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 30 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011C90: .4byte gUnknown_8248320 -_08011C94: - ldr r0, _08011CA4 @ =gUnknown_8248320 - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 28 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011CA4: .4byte gUnknown_8248320 -_08011CA8: - ldr r0, _08011CB8 @ =gUnknown_8248320 - lsls r1, r2, 2 - adds r1, r0 - ldrh r0, [r1] - lsls r0, 23 - lsrs r0, 27 - b _08011D04 - .align 2, 0 -_08011CB8: .4byte gUnknown_8248320 -_08011CBC: - ldr r0, _08011CCC @ =gUnknown_8248320 - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - lsls r0, 29 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011CCC: .4byte gUnknown_8248320 -_08011CD0: - ldr r0, _08011CE0 @ =gUnknown_8248320 - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - lsls r0, 28 - lsrs r0, 31 - b _08011D04 - .align 2, 0 -_08011CE0: .4byte gUnknown_8248320 -_08011CE4: - ldr r0, _08011CF4 @ =gUnknown_8248320 - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - lsls r0, 26 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011CF4: .4byte gUnknown_8248320 -_08011CF8: - ldr r0, _08011D08 @ =gUnknown_8248320 - lsls r1, r2, 2 - adds r1, r0 - ldr r0, [r1] - lsls r0, 8 - lsrs r0, 22 -_08011D04: - pop {r1} - bx r1 - .align 2, 0 -_08011D08: .4byte gUnknown_8248320 - thumb_func_end sub_8011C44 - - thumb_func_start sub_8011D0C -sub_8011D0C: @ 8011D0C - push {r4,r5,lr} - sub sp, 0x10 - adds r4, r0, 0 - add r5, sp, 0xC - movs r0, 0x1 - strb r0, [r5] - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - ldr r1, _08011D5C @ =0x0000012f - cmp r0, r1 - bne _08011D54 - adds r0, r4, 0 - movs r1, 0x3 - bl GetMonData - ldrb r1, [r5] - cmp r0, r1 - beq _08011D54 - adds r0, r4, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r1, _08011D60 @ =gUnknown_824F008 - mov r0, sp - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - bne _08011D54 - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl SetMonData -_08011D54: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08011D5C: .4byte 0x0000012f -_08011D60: .4byte gUnknown_824F008 - thumb_func_end sub_8011D0C - - thumb_func_start oac_poke_opponent -oac_poke_opponent: @ 8011D64 - push {lr} - sub sp, 0x4 - ldr r1, _08011D8C @ =sub_8011D94 - str r1, [r0, 0x1C] - movs r1, 0 - bl StartSpriteAnimIfDifferent - movs r0, 0x80 - lsls r0, 10 - ldr r1, _08011D90 @ =0x00002108 - str r1, [sp] - movs r1, 0 - movs r2, 0xA - movs r3, 0xA - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08011D8C: .4byte sub_8011D94 -_08011D90: .4byte 0x00002108 - thumb_func_end oac_poke_opponent - - thumb_func_start sub_8011D94 -sub_8011D94: @ 8011D94 - push {lr} - adds r2, r0, 0 - ldr r0, _08011DC0 @ =gIntroSlideFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08011DBC - ldrh r0, [r2, 0x24] - adds r0, 0x2 - strh r0, [r2, 0x24] - lsls r0, 16 - cmp r0, 0 - bne _08011DBC - ldr r0, _08011DC4 @ =sub_8011DC8 - str r0, [r2, 0x1C] - ldrh r0, [r2, 0x32] - movs r1, 0x19 - bl PlayCry1 -_08011DBC: - pop {r0} - bx r0 - .align 2, 0 -_08011DC0: .4byte gIntroSlideFlags -_08011DC4: .4byte sub_8011DC8 - thumb_func_end sub_8011D94 - - thumb_func_start sub_8011DC8 -sub_8011DC8: @ 8011DC8 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08011E10 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - bl sub_804BD94 - ldr r1, _08011E18 @ =gHealthboxSpriteIds - movs r2, 0x2E - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r0, [r0] - bl SetHealthboxSpriteVisible - ldr r0, _08011E1C @ =nullsub_10 - str r0, [r4, 0x1C] - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent - movs r0, 0x80 - lsls r0, 10 - ldr r1, _08011E20 @ =0x00002108 - str r1, [sp] - movs r1, 0 - movs r2, 0xA - movs r3, 0 - bl BeginNormalPaletteFade -_08011E10: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011E18: .4byte gHealthboxSpriteIds -_08011E1C: .4byte nullsub_10 -_08011E20: .4byte 0x00002108 - thumb_func_end sub_8011DC8 - - thumb_func_start nullsub_10 -nullsub_10: @ 8011E24 - bx lr - thumb_func_end nullsub_10 - - thumb_func_start sub_8011E28 -sub_8011E28: @ 8011E28 - movs r1, 0x6 - strh r1, [r0, 0x34] - movs r1, 0x1 - strh r1, [r0, 0x36] - ldr r1, _08011E38 @ =sub_8011E3C - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_08011E38: .4byte sub_8011E3C - thumb_func_end sub_8011E28 - - thumb_func_start sub_8011E3C -sub_8011E3C: @ 8011E3C - push {r4,lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x36] - subs r0, 0x1 - strh r0, [r3, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _08011E90 - movs r0, 0x8 - strh r0, [r3, 0x36] - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r4, 0x5 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x34] - subs r0, 0x1 - strh r0, [r3, 0x34] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _08011E90 - ldrb r1, [r1] - adds r0, r4, 0 - ands r0, r1 - mov r1, r12 - strb r0, [r1] - ldr r0, _08011E98 @ =nullsub_10 - str r0, [r3, 0x1C] - ldr r0, _08011E9C @ =gUnknown_2022AE8 - str r2, [r0] -_08011E90: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011E98: .4byte nullsub_10 -_08011E9C: .4byte gUnknown_2022AE8 - thumb_func_end sub_8011E3C - - thumb_func_start SpriteCB_FaintOpponentMon -SpriteCB_FaintOpponentMon: @ 8011EA0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r9, r0 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _08011EC4 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r6, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - beq _08011EC8 - adds r4, r0, 0 - b _08011ECC - .align 2, 0 -_08011EC4: .4byte gBattleSpritesDataPtr -_08011EC8: - mov r0, r9 - ldrh r4, [r0, 0x32] -_08011ECC: - ldr r1, _08011F34 @ =gBattlerPartyIndexes - lsls r0, r6, 1 - adds r5, r0, r1 - ldrh r0, [r5] - movs r1, 0x64 - mov r8, r1 - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - ldr r7, _08011F38 @ =gEnemyParty - adds r0, r7 - movs r1, 0 - bl GetMonData - cmp r4, 0xC9 - bne _08011F50 - ldrh r0, [r5] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _08011F3C - movs r0, 0xC9 - b _08011F46 - .align 2, 0 -_08011F34: .4byte gBattlerPartyIndexes -_08011F38: .4byte gEnemyParty -_08011F3C: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_08011F46: - ldr r1, _08011F4C @ =gMonFrontPicCoords - lsls r0, 2 - b _08011F88 - .align 2, 0 -_08011F4C: .4byte gMonFrontPicCoords -_08011F50: - ldr r0, _08011F68 @ =0x00000181 @ SPECIES_CASTFORM - cmp r4, r0 - bne _08011F74 - ldr r0, _08011F6C @ =gCastformFrontSpriteCoords - ldr r1, _08011F70 @ =gBattleMonForms - adds r1, r6, r1 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - b _08011F8C - .align 2, 0 -_08011F68: .4byte 0x00000181 -_08011F6C: .4byte gCastformFrontSpriteCoords -_08011F70: .4byte gBattleMonForms -_08011F74: - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08011F84 - ldr r0, _08011F80 @ =gMonFrontPicCoords - b _08011F8A - .align 2, 0 -_08011F80: .4byte gMonFrontPicCoords -_08011F84: - ldr r1, _08011FAC @ =gMonFrontPicCoords - lsls r0, r4, 2 -_08011F88: - adds r0, r1 -_08011F8A: - ldrb r0, [r0, 0x1] -_08011F8C: - lsrs r1, r0, 3 - movs r0, 0x8 - subs r0, r1 - mov r1, r9 - strh r0, [r1, 0x34] - movs r0, 0x1 - strh r0, [r1, 0x36] - ldr r0, _08011FB0 @ =sub_8011FB4 - str r0, [r1, 0x1C] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08011FAC: .4byte gMonFrontPicCoords -_08011FB0: .4byte sub_8011FB4 - thumb_func_end SpriteCB_FaintOpponentMon - - thumb_func_start sub_8011FB4 -sub_8011FB4: @ 8011FB4 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x36] - subs r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _08012034 - movs r0, 0x2 - strh r0, [r4, 0x36] - ldrh r0, [r4, 0x26] - adds r0, 0x8 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - cmp r0, 0 - bge _08011FE8 - adds r0, r4, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl DestroySprite - b _08012034 -_08011FE8: - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerPosition - ldr r1, _0801203C @ =gMonSpritesGfxPtr - ldr r1, [r1] - lsls r0, 24 - lsrs r0, 22 - adds r1, 0x4 - adds r1, r0 - ldr r2, _08012040 @ =gBattleMonForms - movs r3, 0x2E - ldrsh r0, [r4, r3] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 11 - ldr r1, [r1] - adds r1, r0 - movs r2, 0x34 - ldrsh r0, [r4, r2] - lsls r0, 8 - adds r1, r0 - movs r2, 0 - movs r0, 0xFF -_0801201A: - strb r2, [r1] - adds r1, 0x1 - subs r0, 0x1 - cmp r0, 0 - bge _0801201A - ldr r0, _08012040 @ =gBattleMonForms - movs r3, 0x2E - ldrsh r1, [r4, r3] - adds r1, r0 - ldrb r1, [r1] - adds r0, r4, 0 - bl StartSpriteAnim -_08012034: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801203C: .4byte gMonSpritesGfxPtr -_08012040: .4byte gBattleMonForms - thumb_func_end sub_8011FB4 - - thumb_func_start sub_8012044 -sub_8012044: @ 8012044 - movs r1, 0x8 - strh r1, [r0, 0x34] - adds r1, r0, 0 - adds r1, 0x3E - ldrb r1, [r1] - lsls r1, 29 - lsrs r1, 31 - strh r1, [r0, 0x36] - ldr r1, _0801205C @ =sub_8012060 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_0801205C: .4byte sub_8012060 - thumb_func_end sub_8012044 - - thumb_func_start sub_8012060 -sub_8012060: @ 8012060 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x34] - subs r0, 0x1 - strh r0, [r3, 0x34] - lsls r0, 16 - cmp r0, 0 - bne _08012092 - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - movs r0, 0x8 - strh r0, [r3, 0x34] -_08012092: - pop {r0} - bx r0 - thumb_func_end sub_8012060 - - thumb_func_start sub_8012098 -sub_8012098: @ 8012098 - movs r1, 0x3E - adds r1, r0 - mov r12, r1 - movs r1, 0x1 - ldrh r2, [r0, 0x36] - ands r2, r1 - lsls r2, 2 - mov r1, r12 - ldrb r3, [r1] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r2 - mov r2, r12 - strb r1, [r2] - movs r1, 0 - strh r1, [r0, 0x36] - ldr r1, _080120C0 @ =nullsub_10 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080120C0: .4byte nullsub_10 - thumb_func_end sub_8012098 - - thumb_func_start sub_80120C4 -sub_80120C4: @ 80120C4 - ldr r1, _080120CC @ =oac_poke_ally_ - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080120CC: .4byte oac_poke_ally_ - thumb_func_end sub_80120C4 - - thumb_func_start oac_poke_ally_ -oac_poke_ally_: @ 80120D0 - push {lr} - adds r2, r0, 0 - ldr r0, _080120F8 @ =gIntroSlideFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080120F4 - ldrh r0, [r2, 0x24] - subs r0, 0x2 - strh r0, [r2, 0x24] - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0 - bne _080120F4 - ldr r0, _080120FC @ =nullsub_11 - str r0, [r2, 0x1C] - strh r1, [r2, 0x30] -_080120F4: - pop {r0} - bx r0 - .align 2, 0 -_080120F8: .4byte gIntroSlideFlags -_080120FC: .4byte nullsub_11 - thumb_func_end oac_poke_ally_ - - thumb_func_start sub_8012100 -sub_8012100: @ 8012100 - ldr r1, _08012108 @ =nullsub_11 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_08012108: .4byte nullsub_11 - thumb_func_end sub_8012100 - - thumb_func_start nullsub_11 -nullsub_11: @ 801210C - bx lr - thumb_func_end nullsub_11 - - thumb_func_start sub_8012110 -sub_8012110: @ 8012110 - push {lr} - adds r2, r0, 0 - ldr r0, _08012134 @ =gIntroSlideFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08012130 - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x26] - adds r0, r1 - strh r0, [r2, 0x26] -_08012130: - pop {r0} - bx r0 - .align 2, 0 -_08012134: .4byte gIntroSlideFlags - thumb_func_end sub_8012110 - - thumb_func_start DoBounceEffect -DoBounceEffect: @ 8012138 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - cmp r1, 0 - beq _08012174 - ldr r0, _08012170 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0x4] - lsls r2, r4, 1 - adds r0, r2, r4 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - b _08012186 - .align 2, 0 -_08012170: .4byte gBattleSpritesDataPtr -_08012174: - ldr r0, _080121D0 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0x4] - lsls r2, r4, 1 - adds r0, r2, r4 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 -_08012186: - ands r0, r1 - adds r6, r2, 0 - cmp r0, 0 - bne _0801223C - ldr r0, _080121D4 @ =SpriteCB_HealthBoxBounce - bl CreateInvisibleSpriteWithCallback - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r8 - cmp r0, 0x1 - bne _080121E0 - ldr r0, _080121D8 @ =gHealthboxSpriteIds - adds r0, r4, r0 - ldrb r7, [r0] - ldr r2, _080121D0 @ =gBattleSpritesDataPtr - ldr r0, [r2] - ldr r0, [r0, 0x4] - adds r1, r6, r4 - lsls r1, 2 - adds r0, r1, r0 - strb r5, [r0, 0x2] - ldr r0, [r2] - ldr r0, [r0, 0x4] - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1] - ldr r2, _080121DC @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0x80 - b _0801220E - .align 2, 0 -_080121D0: .4byte gBattleSpritesDataPtr -_080121D4: .4byte SpriteCB_HealthBoxBounce -_080121D8: .4byte gHealthboxSpriteIds -_080121DC: .4byte gSprites -_080121E0: - ldr r0, _0801224C @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r7, [r0] - ldr r2, _08012250 @ =gBattleSpritesDataPtr - ldr r0, [r2] - ldr r0, [r0, 0x4] - adds r1, r6, r4 - lsls r1, 2 - adds r0, r1, r0 - strb r5, [r0, 0x3] - ldr r0, [r2] - ldr r0, [r0, 0x4] - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldr r2, _08012254 @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0xC0 -_0801220E: - strh r1, [r0, 0x2E] - adds r4, r2, 0 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r4 - mov r2, r9 - lsls r0, r2, 24 - asrs r0, 24 - movs r2, 0 - strh r0, [r1, 0x30] - mov r3, r10 - lsls r0, r3, 24 - asrs r0, 24 - strh r0, [r1, 0x32] - strh r7, [r1, 0x34] - mov r0, r8 - strh r0, [r1, 0x36] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r0, r4 - strh r2, [r0, 0x24] - strh r2, [r0, 0x26] -_0801223C: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801224C: .4byte gBattlerSpriteIds -_08012250: .4byte gBattleSpritesDataPtr -_08012254: .4byte gSprites - thumb_func_end DoBounceEffect - - thumb_func_start EndBounceEffect -EndBounceEffect: @ 8012258 - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - bne _080122AC - ldr r6, _080122A4 @ =gBattleSpritesDataPtr - ldr r0, [r6] - ldr r1, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r5, r0, 2 - adds r3, r5, r1 - ldrb r1, [r3] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080122FA - ldr r2, _080122A8 @ =gSprites - ldrb r1, [r3, 0x2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x34] - lsls r1, 24 - lsrs r4, r1, 24 - bl DestroySprite - ldr r0, [r6] - ldr r1, [r0, 0x4] - adds r1, r5, r1 - ldrb r2, [r1] - movs r0, 0x3 - negs r0, r0 - b _080122E6 - .align 2, 0 -_080122A4: .4byte gBattleSpritesDataPtr -_080122A8: .4byte gSprites -_080122AC: - ldr r6, _08012300 @ =gBattleSpritesDataPtr - ldr r0, [r6] - ldr r1, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r5, r0, 2 - adds r3, r5, r1 - ldrb r1, [r3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080122FA - ldr r2, _08012304 @ =gSprites - ldrb r1, [r3, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x34] - lsls r1, 24 - lsrs r4, r1, 24 - bl DestroySprite - ldr r0, [r6] - ldr r1, [r0, 0x4] - adds r1, r5, r1 - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 -_080122E6: - ands r0, r2 - strb r0, [r1] - ldr r0, _08012304 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x24] - strh r0, [r1, 0x26] -_080122FA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08012300: .4byte gBattleSpritesDataPtr -_08012304: .4byte gSprites - thumb_func_end EndBounceEffect - - thumb_func_start SpriteCB_HealthBoxBounce -SpriteCB_HealthBoxBounce: @ 8012308 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x34] - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x36 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _08012320 - movs r2, 0x2E - ldrsh r0, [r4, r2] - b _08012324 -_08012320: - movs r1, 0x2E - ldrsh r0, [r4, r1] -_08012324: - movs r2, 0x32 - ldrsh r1, [r4, r2] - bl Sin - ldr r2, _08012350 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r2 - ldrh r2, [r4, 0x32] - adds r0, r2 - strh r0, [r1, 0x26] - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x2E] - adds r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08012350: .4byte gSprites - thumb_func_end SpriteCB_HealthBoxBounce - - thumb_func_start sub_8012354 -sub_8012354: @ 8012354 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, _08012368 @ =sub_8012398 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08012368: .4byte sub_8012398 - thumb_func_end sub_8012354 - - thumb_func_start sub_801236C -sub_801236C: @ 801236C - push {lr} - adds r2, r0, 0 - adds r0, 0x2C - ldrb r1, [r0] - movs r0, 0x3F - ands r0, r1 - cmp r0, 0 - bne _0801238E - ldr r1, _08012394 @ =gUnknown_824F048 - adds r0, r2, 0 - adds r0, 0x2B - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - adds r0, r2, 0 - adds r0, 0x28 - strb r1, [r0] -_0801238E: - pop {r0} - bx r0 - .align 2, 0 -_08012394: .4byte gUnknown_824F048 - thumb_func_end sub_801236C - - thumb_func_start sub_8012398 -sub_8012398: @ 8012398 - push {r4,lr} - adds r4, r0, 0 - bl sub_801236C - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080123B2 - ldr r0, _080123B8 @ =nullsub_11 - str r0, [r4, 0x1C] -_080123B2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080123B8: .4byte nullsub_11 - thumb_func_end sub_8012398 - - thumb_func_start nullsub_12 -nullsub_12: @ 80123BC - bx lr - thumb_func_end nullsub_12 - - thumb_func_start BeginBattleIntro -BeginBattleIntro: @ 80123C0 - push {lr} - bl sub_8012434 - ldr r1, _080123D8 @ =gBattleCommunication - movs r0, 0 - strb r0, [r1, 0x1] - ldr r1, _080123DC @ =gBattleMainFunc - ldr r0, _080123E0 @ =BattleIntroGetMonsData - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080123D8: .4byte gBattleCommunication -_080123DC: .4byte gBattleMainFunc -_080123E0: .4byte BattleIntroGetMonsData - thumb_func_end BeginBattleIntro - - thumb_func_start sub_80123E4 -sub_80123E4: @ 80123E4 - push {r4,r5,lr} - ldr r0, _08012424 @ =gBattleMainFunc - ldr r0, [r0] - bl _call_via_r0 - ldr r1, _08012428 @ =gActiveBattler - movs r0, 0 - strb r0, [r1] - ldr r0, _0801242C @ =gBattlersCount - ldrb r0, [r0] - cmp r0, 0 - beq _0801241E - ldr r5, _08012430 @ =gBattlerControllerFuncs - adds r4, r1, 0 -_08012400: - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - ldr r0, [r0] - bl _call_via_r0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _0801242C @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08012400 -_0801241E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08012424: .4byte gBattleMainFunc -_08012428: .4byte gActiveBattler -_0801242C: .4byte gBattlersCount -_08012430: .4byte gBattlerControllerFuncs - thumb_func_end sub_80123E4 - - thumb_func_start sub_8012434 -sub_8012434: @ 8012434 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - bl TurnValuesCleanUp - bl SpecialStatusesClear - movs r2, 0 - movs r3, 0 - ldr r0, _080126CC @ =gLastResultingMoves - mov r10, r0 - ldr r1, _080126D0 @ =gLastHitByType - mov r12, r1 - ldr r0, _080126D4 @ =gLastLandedMoves - mov r9, r0 - ldr r1, _080126D8 @ =gLastMoves - mov r8, r1 - ldr r4, _080126DC @ =gDisableStructs - movs r5, 0 - ldr r7, _080126E0 @ =gLastPrintedMoves - ldr r6, _080126E4 @ =gLockedMoves -_08012464: - ldr r0, _080126E8 @ =gStatuses3 - adds r0, r5, r0 - str r3, [r0] - movs r1, 0 -_0801246C: - adds r0, r4, r1 - strb r3, [r0] - adds r1, 0x1 - cmp r1, 0x1B - bls _0801246C - movs r0, 0x2 - strb r0, [r4, 0x16] - ldr r1, _080126EC @ =gUnknown_2023DD4 - adds r0, r2, r1 - strb r3, [r0] - mov r0, r8 - strh r3, [r0] - mov r1, r9 - strh r3, [r1] - mov r0, r12 - strh r3, [r0] - mov r1, r10 - strh r3, [r1] - ldr r0, _080126F0 @ =gLastHitBy - adds r1, r2, r0 - movs r0, 0xFF - strb r0, [r1] - strh r3, [r6] - strh r3, [r7] - ldr r1, _080126F4 @ =gBattleResources - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r0, r5 - str r3, [r0] - movs r0, 0x2 - add r10, r0 - add r12, r0 - add r9, r0 - add r8, r0 - adds r4, 0x1C - adds r5, 0x4 - adds r7, 0x2 - adds r6, 0x2 - adds r2, 0x1 - cmp r2, 0x3 - ble _08012464 - movs r5, 0 - ldr r3, _080126F8 @ =gSideTimers - ldr r4, _080126FC @ =gSideStatuses - movs r2, 0x1 -_080124C6: - strh r5, [r4] - movs r1, 0 -_080124CA: - adds r0, r3, r1 - strb r5, [r0] - adds r1, 0x1 - cmp r1, 0xB - bls _080124CA - adds r3, 0xC - adds r4, 0x2 - subs r2, 0x1 - cmp r2, 0 - bge _080124C6 - movs r1, 0 - ldr r2, _08012700 @ =gBattlerAttacker - strb r1, [r2] - ldr r0, _08012704 @ =gBattlerTarget - strb r1, [r0] - ldr r2, _08012708 @ =gBattleWeather - strh r1, [r2] - ldr r1, _0801270C @ =gWishFutureKnock - movs r2, 0 - movs r3, 0 -_080124F2: - adds r0, r1, r2 - strb r3, [r0] - adds r2, 0x1 - cmp r2, 0x2B - bls _080124F2 - movs r0, 0 - ldr r1, _08012710 @ =gHitMarker - str r0, [r1] - ldr r2, _08012714 @ =gBattleTypeFlags - ldr r0, [r2] - ldr r1, _08012718 @ =0x00010002 - ands r0, r1 - cmp r0, 0 - bne _08012522 - ldr r1, _0801271C @ =gSaveBlock2Ptr - ldr r0, [r1] - ldrb r1, [r0, 0x15] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08012522 - movs r0, 0x80 - ldr r2, _08012710 @ =gHitMarker - str r0, [r2] -_08012522: - ldr r1, _0801271C @ =gSaveBlock2Ptr - ldr r0, [r1] - ldrb r0, [r0, 0x15] - lsls r0, 30 - lsrs r0, 31 - movs r1, 0 - ldr r2, _08012720 @ =gBattleScripting - strb r0, [r2, 0x1D] - ldr r0, _08012724 @ =gMultiHitCounter - strb r1, [r0] - ldr r2, _08012728 @ =gBattleOutcome - strb r1, [r2] - ldr r0, _0801272C @ =gBattleControllerExecFlags - str r1, [r0] - movs r2, 0 - ldr r0, _08012730 @ =gPaydayMoney - strh r1, [r0] - ldr r1, _080126F4 @ =gBattleResources - ldr r0, [r1] - ldr r0, [r0, 0x8] - adds r0, 0x20 - strb r2, [r0] - ldr r0, [r1] - ldr r0, [r0, 0xC] - adds r0, 0x20 - strb r2, [r0] - ldr r1, _08012734 @ =gBattleCommunication - movs r2, 0 - adds r0, r1, 0x7 -_0801255C: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _0801255C - movs r2, 0 - mov r9, r2 - ldr r0, _08012738 @ =gPauseCounterBattle - strh r2, [r0] - movs r0, 0 - ldr r1, _0801273C @ =gBattleMoveDamage - str r0, [r1] - ldr r2, _08012740 @ =gIntroSlideFlags - strh r0, [r2] - mov r1, r9 - ldr r0, _08012720 @ =gBattleScripting - strb r1, [r0, 0x18] - strb r1, [r0, 0x19] - ldr r2, _08012744 @ =gLeveledUpInBattle - strb r1, [r2] - ldr r0, _08012748 @ =gAbsentBattlerFlags - strb r1, [r0] - ldr r7, _0801274C @ =gBattleStruct - ldr r0, [r7] - adds r0, 0x6C - strb r1, [r0] - ldr r0, [r7] - adds r0, 0x79 - strb r1, [r0] - ldr r0, [r7] - adds r0, 0x7A - strb r1, [r0] - ldr r0, _08012750 @ =gEnemyParty - movs r1, 0xB - bl GetMonData - ldr r4, [r7] - adds r4, 0x7C - ldr r1, _08012754 @ =gBaseStats - mov r8, r1 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r8 - ldrb r0, [r1, 0x8] - movs r5, 0x64 - muls r0, r5 - ldr r6, _08012758 @ =0x000004fb - adds r1, r6, 0 - bl __divsi3 - strb r0, [r4] - ldr r0, _08012750 @ =gEnemyParty - movs r1, 0xB - bl GetMonData - ldr r4, [r7] - adds r4, 0x7B - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r8 - ldrb r0, [r1, 0x18] - muls r0, r5 - adds r1, r6, 0 - bl __divsi3 - strb r0, [r4] - ldr r0, [r7] - adds r1, r0, 0 - adds r1, 0x7B - ldrb r0, [r1] - cmp r0, 0x1 - bhi _080125F2 - movs r0, 0x2 - strb r0, [r1] -_080125F2: - ldr r0, [r7] - mov r2, r9 - strb r2, [r0, 0x12] - ldr r0, [r7] - adds r0, 0x4A - movs r1, 0x1 - strb r1, [r0] - movs r2, 0 - adds r4, r7, 0 - ldr r5, _0801275C @ =gBattleResults - adds r3, r4, 0 - movs r1, 0 -_0801260A: - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0x98 - strb r1, [r0] - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0xB8 - strb r1, [r0] - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0xC8 - strb r1, [r0] - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0xD0 - strb r1, [r0] - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0xE0 - strb r1, [r0] - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0xE8 - strb r1, [r0] - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0xF0 - strb r1, [r0] - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0xF8 - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x7 - ble _0801260A - ldr r0, [r4] - adds r0, 0x92 - movs r1, 0x6 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0x93 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xDF - movs r1, 0 - strb r1, [r0] - ldr r0, _0801275C @ =gBattleResults - movs r1, 0 - movs r2, 0xA - adds r0, 0x40 -_0801266E: - strb r1, [r0] - subs r0, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _0801266E - movs r1, 0 - strb r1, [r5, 0x13] - strb r1, [r5] - strb r1, [r5, 0x1] - strb r1, [r5, 0x2] - strb r1, [r5, 0x3] - strb r1, [r5, 0x4] - ldrb r2, [r5, 0x5] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - movs r2, 0x3 - negs r2, r2 - ands r0, r2 - strb r0, [r5, 0x5] - strh r1, [r5, 0x20] - strh r1, [r5, 0x22] - strh r1, [r5, 0x24] - strh r1, [r5, 0x6] - strh r1, [r5, 0x26] - strh r1, [r5, 0x28] - movs r2, 0 - adds r4, r5, 0 - adds r4, 0x8 - movs r3, 0 - adds r1, r5, 0 - adds r1, 0x14 -_080126AE: - adds r0, r2, r4 - strb r3, [r0] - strb r3, [r1] - strb r3, [r1, 0x16] - adds r1, 0x1 - adds r2, 0x1 - cmp r2, 0x9 - ble _080126AE - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080126CC: .4byte gLastResultingMoves -_080126D0: .4byte gLastHitByType -_080126D4: .4byte gLastLandedMoves -_080126D8: .4byte gLastMoves -_080126DC: .4byte gDisableStructs -_080126E0: .4byte gLastPrintedMoves -_080126E4: .4byte gLockedMoves -_080126E8: .4byte gStatuses3 -_080126EC: .4byte gUnknown_2023DD4 -_080126F0: .4byte gLastHitBy -_080126F4: .4byte gBattleResources -_080126F8: .4byte gSideTimers -_080126FC: .4byte gSideStatuses -_08012700: .4byte gBattlerAttacker -_08012704: .4byte gBattlerTarget -_08012708: .4byte gBattleWeather -_0801270C: .4byte gWishFutureKnock -_08012710: .4byte gHitMarker -_08012714: .4byte gBattleTypeFlags -_08012718: .4byte 0x00010002 -_0801271C: .4byte gSaveBlock2Ptr -_08012720: .4byte gBattleScripting -_08012724: .4byte gMultiHitCounter -_08012728: .4byte gBattleOutcome -_0801272C: .4byte gBattleControllerExecFlags -_08012730: .4byte gPaydayMoney -_08012734: .4byte gBattleCommunication -_08012738: .4byte gPauseCounterBattle -_0801273C: .4byte gBattleMoveDamage -_08012740: .4byte gIntroSlideFlags -_08012744: .4byte gLeveledUpInBattle -_08012748: .4byte gAbsentBattlerFlags -_0801274C: .4byte gBattleStruct -_08012750: .4byte gEnemyParty -_08012754: .4byte gBaseStats -_08012758: .4byte 0x000004fb -_0801275C: .4byte gBattleResults - thumb_func_end sub_8012434 - - thumb_func_start SwitchInClearSetData -SwitchInClearSetData: @ 8012760 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - ldr r4, _080128C4 @ =gDisableStructs - ldr r5, _080128C8 @ =gActiveBattler - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r1, sp - adds r0, r4 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldr r0, [r0] - str r0, [r1] - ldr r2, _080128CC @ =gBattleMoves - ldr r3, _080128D0 @ =gCurrentMove - ldrh r1, [r3] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - mov r9, r4 - mov r12, r5 - ldr r6, _080128D4 @ =gStatuses3 - mov r10, r6 - cmp r0, 0x7F - beq _08012838 - movs r5, 0 - mov r4, r12 - movs r3, 0x58 - ldr r2, _080128D8 @ =gBattleMons - adds r2, 0x18 - movs r1, 0x6 -_080127B0: - ldrb r0, [r4] - muls r0, r3 - adds r0, r5, r0 - adds r0, r2 - strb r1, [r0] - adds r5, 0x1 - cmp r5, 0x7 - ble _080127B0 - movs r5, 0 - ldr r7, _080128DC @ =gBattlersCount - ldrb r7, [r7] - cmp r5, r7 - bge _08012824 - ldr r0, _080128E0 @ =gUnknown_2023C34 - mov r8, r0 - ldr r3, _080128C4 @ =gDisableStructs - ldr r4, _080128D4 @ =gStatuses3 -_080127D2: - movs r0, 0x58 - muls r0, r5 - mov r1, r8 - adds r2, r0, r1 - ldr r1, [r2] - movs r0, 0x80 - lsls r0, 19 - ands r0, r1 - cmp r0, 0 - beq _080127F6 - ldrb r0, [r3, 0x14] - ldr r6, _080128C8 @ =gActiveBattler - ldrb r6, [r6] - cmp r0, r6 - bne _080127F6 - ldr r0, _080128E4 @ =0xfbffffff - ands r1, r0 - str r1, [r2] -_080127F6: - ldr r1, [r4] - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - beq _08012816 - ldrb r0, [r3, 0x15] - ldr r7, _080128C8 @ =gActiveBattler - ldrb r7, [r7] - cmp r0, r7 - bne _08012816 - movs r0, 0x19 - negs r0, r0 - ands r1, r0 - str r1, [r4] - movs r0, 0 - strb r0, [r3, 0x15] -_08012816: - adds r3, 0x1C - adds r4, 0x4 - adds r5, 0x1 - ldr r0, _080128DC @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - blt _080127D2 -_08012824: - ldr r1, _080128D0 @ =gCurrentMove - ldrh r0, [r1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r2, _080128CC @ =gBattleMoves - adds r1, r2 - ldrb r0, [r1] - cmp r0, 0x7F - bne _080128F0 -_08012838: - mov r3, r12 - ldrb r1, [r3] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - ldr r0, _080128D8 @ =gBattleMons - adds r0, 0x50 - adds r2, r0 - ldr r0, [r2] - ldr r1, _080128E8 @ =0x15100007 - ands r0, r1 - str r0, [r2] - ldrb r1, [r3] - lsls r1, 2 - add r1, r10 - ldr r0, [r1] - ldr r2, _080128EC @ =0x0003043f - ands r0, r2 - str r0, [r1] - movs r5, 0 - ldr r6, _080128DC @ =gBattlersCount - ldrb r6, [r6] - cmp r5, r6 - bge _0801290C - mov r7, r12 - movs r6, 0 -_0801286C: - ldrb r0, [r7] - bl GetBattlerSide - adds r4, r0, 0 - lsls r0, r5, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _080128AC - ldr r1, _080128D4 @ =gStatuses3 - lsls r0, r5, 2 - adds r2, r0, r1 - ldr r1, [r2] - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - beq _080128AC - ldr r0, _080128C4 @ =gDisableStructs - adds r0, r6, r0 - ldrb r0, [r0, 0x15] - ldrb r3, [r7] - cmp r0, r3 - bne _080128AC - movs r0, 0x19 - negs r0, r0 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - str r1, [r2] -_080128AC: - adds r6, 0x1C - adds r5, 0x1 - ldr r0, _080128DC @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - blt _0801286C - ldr r6, _080128C4 @ =gDisableStructs - mov r9, r6 - ldr r7, _080128C8 @ =gActiveBattler - mov r12, r7 - b _0801290C - .align 2, 0 -_080128C4: .4byte gDisableStructs -_080128C8: .4byte gActiveBattler -_080128CC: .4byte gBattleMoves -_080128D0: .4byte gCurrentMove -_080128D4: .4byte gStatuses3 -_080128D8: .4byte gBattleMons -_080128DC: .4byte gBattlersCount -_080128E0: .4byte gUnknown_2023C34 -_080128E4: .4byte 0xfbffffff -_080128E8: .4byte 0x15100007 -_080128EC: .4byte 0x0003043f -_080128F0: - mov r0, r12 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - ldr r1, _08012B7C @ =gBattleMons - adds r1, 0x50 - adds r0, r1 - movs r1, 0 - str r1, [r0] - mov r2, r12 - ldrb r0, [r2] - lsls r0, 2 - add r0, r10 - str r1, [r0] -_0801290C: - movs r5, 0 - ldr r7, _08012B80 @ =gBattleStruct - ldr r3, _08012B84 @ =gActionSelectionCursor - mov r10, r3 - ldr r6, _08012B88 @ =gBattlersCount - ldrb r6, [r6] - cmp r5, r6 - bge _0801296C - ldr r0, _08012B8C @ =gUnknown_2023C34 - mov r8, r0 - ldr r6, _08012B90 @ =gBitTable - ldr r4, _08012B94 @ =gActiveBattler -_08012924: - movs r0, 0x58 - muls r0, r5 - mov r1, r8 - adds r3, r0, r1 - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - lsls r2, r0, 16 - ldr r1, [r3] - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _08012944 - bics r1, r2 - str r1, [r3] -_08012944: - ldr r1, [r3] - movs r0, 0xE0 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08012962 - ldr r0, [r7] - adds r0, r5, r0 - ldrb r0, [r0, 0x14] - ldrb r2, [r4] - cmp r0, r2 - bne _08012962 - ldr r0, _08012B98 @ =0xffff1fff - ands r1, r0 - str r1, [r3] -_08012962: - adds r5, 0x1 - ldr r3, _08012B88 @ =gBattlersCount - ldrb r3, [r3] - cmp r5, r3 - blt _08012924 -_0801296C: - mov r6, r12 - ldrb r0, [r6] - add r0, r10 - movs r1, 0 - strb r1, [r0] - ldrb r0, [r6] - ldr r2, _08012B9C @ =gMoveSelectionCursor - adds r0, r2 - strb r1, [r0] - ldrb r1, [r6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r3, r9 - adds r1, r0, r3 - movs r5, 0 - movs r2, 0 -_0801298E: - adds r0, r1, r5 - strb r2, [r0] - adds r5, 0x1 - cmp r5, 0x1B - bls _0801298E - ldr r6, _08012BA0 @ =gCurrentMove - ldrh r0, [r6] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r0, _08012BA4 @ =gBattleMoves - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x7F - bne _08012A1A - mov r2, r12 - ldrb r1, [r2] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - mov r1, sp - ldrb r1, [r1, 0xA] - strb r1, [r0, 0xA] - ldrb r1, [r2] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - mov r1, sp - ldrb r1, [r1, 0x15] - strb r1, [r0, 0x15] - ldrb r0, [r2] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r9 - mov r0, sp - ldrb r2, [r0, 0xF] - lsls r2, 28 - movs r4, 0xF - lsrs r2, 28 - ldrb r3, [r1, 0xF] - movs r0, 0x10 - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0xF] - mov r3, r12 - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - mov r1, sp - ldrb r1, [r1, 0xF] - lsrs r1, 4 - lsls r1, 4 - ldrb r2, [r0, 0xF] - ands r4, r2 - orrs r4, r1 - strb r4, [r0, 0xF] - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - mov r1, sp - ldrb r1, [r1, 0x14] - strb r1, [r0, 0x14] -_08012A1A: - movs r0, 0 - ldr r6, _08012BA8 @ =gMoveResultFlags - strb r0, [r6] - mov r0, r12 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - movs r2, 0 - movs r1, 0x2 - strb r1, [r0, 0x16] - mov r1, r12 - ldrb r0, [r1] - lsls r0, 1 - ldr r3, _08012BAC @ =gLastMoves - adds r0, r3 - movs r3, 0 - strh r2, [r0] - ldrb r0, [r1] - lsls r0, 1 - ldr r6, _08012BB0 @ =gLastLandedMoves - adds r0, r6 - strh r2, [r0] - ldrb r0, [r1] - lsls r0, 1 - ldr r1, _08012BB4 @ =gLastHitByType - adds r0, r1 - strh r2, [r0] - mov r6, r12 - ldrb r0, [r6] - lsls r0, 1 - ldr r1, _08012BB8 @ =gLastResultingMoves - adds r0, r1 - strh r2, [r0] - ldrb r0, [r6] - lsls r0, 1 - ldr r6, _08012BBC @ =gLastPrintedMoves - adds r0, r6 - strh r2, [r0] - mov r1, r12 - ldrb r0, [r1] - ldr r2, _08012BC0 @ =gLastHitBy - adds r0, r2 - movs r1, 0xFF - strb r1, [r0] - mov r6, r12 - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 1 - adds r0, r1 - adds r0, 0x98 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 1 - adds r0, r1 - adds r0, 0x99 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE0 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE1 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE2 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE3 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE4 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE5 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE6 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r7] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE7 - strb r3, [r0] - movs r5, 0 - ldr r0, _08012B88 @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - bge _08012B3C - adds r4, r7, 0 -_08012AFC: - ldrb r1, [r6] - cmp r5, r1 - beq _08012B14 - ldr r0, [r4] - lsls r1, r5, 1 - adds r0, r1, r0 - adds r0, 0x98 - strb r3, [r0] - ldr r0, [r4] - adds r1, r0 - adds r1, 0x99 - strb r3, [r1] -_08012B14: - ldrb r0, [r6] - ldr r1, [r4] - lsls r0, 1 - lsls r2, r5, 3 - adds r0, r2 - adds r0, r1 - adds r0, 0xE0 - strb r3, [r0] - ldrb r0, [r6] - ldr r1, [r4] - lsls r0, 1 - adds r0, r2 - adds r0, r1 - adds r0, 0xE1 - strb r3, [r0] - adds r5, 0x1 - ldr r2, _08012B88 @ =gBattlersCount - ldrb r2, [r2] - cmp r5, r2 - blt _08012AFC -_08012B3C: - mov r3, r12 - ldrb r0, [r3] - ldr r1, [r7] - lsls r0, 1 - adds r0, r1 - adds r0, 0xC8 - movs r2, 0 - strb r2, [r0] - ldrb r0, [r3] - ldr r1, [r7] - lsls r0, 1 - adds r0, r1 - adds r0, 0xC9 - strb r2, [r0] - ldr r6, _08012BC4 @ =gBattleResources - ldr r0, [r6] - ldr r1, [r0, 0x4] - ldrb r0, [r3] - lsls r0, 2 - adds r1, r0 - movs r0, 0 - str r0, [r1] - ldr r7, _08012BA0 @ =gCurrentMove - strh r0, [r7] - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08012B7C: .4byte gBattleMons -_08012B80: .4byte gBattleStruct -_08012B84: .4byte gActionSelectionCursor -_08012B88: .4byte gBattlersCount -_08012B8C: .4byte gUnknown_2023C34 -_08012B90: .4byte gBitTable -_08012B94: .4byte gActiveBattler -_08012B98: .4byte 0xffff1fff -_08012B9C: .4byte gMoveSelectionCursor -_08012BA0: .4byte gCurrentMove -_08012BA4: .4byte gBattleMoves -_08012BA8: .4byte gMoveResultFlags -_08012BAC: .4byte gLastMoves -_08012BB0: .4byte gLastLandedMoves -_08012BB4: .4byte gLastHitByType -_08012BB8: .4byte gLastResultingMoves -_08012BBC: .4byte gLastPrintedMoves -_08012BC0: .4byte gLastHitBy -_08012BC4: .4byte gBattleResources - thumb_func_end SwitchInClearSetData - - thumb_func_start FaintClearSetData -FaintClearSetData: @ 8012BC8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r3, 0 - ldr r7, _08012F5C @ =gActiveBattler - ldr r6, _08012F60 @ =gStatuses3 - ldr r0, _08012F64 @ =gActionSelectionCursor - mov r8, r0 - ldr r1, _08012F68 @ =gMoveSelectionCursor - mov r9, r1 - ldr r2, _08012F6C @ =gProtectStructs - mov r12, r2 - adds r5, r7, 0 - movs r4, 0x58 - ldr r2, _08012F70 @ =gBattleMons - adds r2, 0x18 - movs r1, 0x6 -_08012BEE: - ldrb r0, [r5] - muls r0, r4 - adds r0, r3, r0 - adds r0, r2 - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x7 - ble _08012BEE - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - ldr r2, _08012F70 @ =gBattleMons - adds r2, 0x50 - adds r0, r2 - movs r1, 0 - str r1, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r0, r6 - str r1, [r0] - movs r3, 0 - ldr r0, _08012F74 @ =gBattlersCount - ldrb r0, [r0] - cmp r3, r0 - bge _08012C8A - adds r4, r2, 0 - movs r5, 0 - ldr r6, _08012F78 @ =gBitTable -_08012C26: - ldr r1, [r4] - movs r0, 0x80 - lsls r0, 19 - ands r0, r1 - cmp r0, 0 - beq _08012C44 - ldr r2, _08012F7C @ =gDisableStructs - adds r0, r5, r2 - ldrb r0, [r0, 0x14] - ldrb r2, [r7] - cmp r0, r2 - bne _08012C44 - ldr r0, _08012F80 @ =0xfbffffff - ands r1, r0 - str r1, [r4] -_08012C44: - ldrb r0, [r7] - lsls r0, 2 - adds r0, r6 - ldr r0, [r0] - lsls r2, r0, 16 - ldr r1, [r4] - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _08012C5C - bics r1, r2 - str r1, [r4] -_08012C5C: - ldr r1, [r4] - movs r0, 0xE0 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08012C7C - ldr r2, _08012F84 @ =gBattleStruct - ldr r0, [r2] - adds r0, r3, r0 - ldrb r0, [r0, 0x14] - ldrb r2, [r7] - cmp r0, r2 - bne _08012C7C - ldr r0, _08012F88 @ =0xffff1fff - ands r1, r0 - str r1, [r4] -_08012C7C: - adds r4, 0x58 - adds r5, 0x1C - adds r3, 0x1 - ldr r0, _08012F74 @ =gBattlersCount - ldrb r0, [r0] - cmp r3, r0 - blt _08012C26 -_08012C8A: - ldrb r0, [r7] - add r0, r8 - movs r1, 0 - strb r1, [r0] - ldrb r0, [r7] - add r0, r9 - strb r1, [r0] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r2, _08012F7C @ =gDisableStructs - adds r1, r0, r2 - movs r3, 0 - movs r2, 0 -_08012CA8: - adds r0, r1, r3 - strb r2, [r0] - adds r3, 0x1 - cmp r3, 0x1B - bls _08012CA8 - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r0, 0x2 - negs r0, r0 - mov r9, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r0, 0x3 - negs r0, r0 - mov r8, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r6, 0x5 - negs r6, r6 - adds r0, r6, 0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r0, 0x9 - negs r0, r0 - mov r10, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r0, 0x11 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r5, 0x21 - negs r5, r5 - adds r0, r5, 0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r4, 0x41 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1] - movs r3, 0x7F - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1, 0x1] - mov r0, r9 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1, 0x1] - mov r0, r8 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1, 0x1] - adds r0, r6, 0 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r1, [r7] - lsls r1, 4 - add r1, r12 - ldrb r2, [r1, 0x1] - movs r0, 0x19 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r0, [r7] - lsls r0, 4 - add r0, r12 - ldrb r1, [r0, 0x1] - ands r5, r1 - strb r5, [r0, 0x1] - ldrb r0, [r7] - lsls r0, 4 - add r0, r12 - ldrb r1, [r0, 0x1] - ands r4, r1 - strb r4, [r0, 0x1] - ldrb r0, [r7] - lsls r0, 4 - add r0, r12 - ldrb r1, [r0, 0x1] - ands r3, r1 - strb r3, [r0, 0x1] - ldrb r0, [r7] - lsls r0, 4 - add r0, r12 - ldrb r1, [r0, 0x2] - mov r2, r9 - ands r2, r1 - strb r2, [r0, 0x2] - ldrb r0, [r7] - lsls r0, 4 - add r0, r12 - ldrb r1, [r0, 0x2] - mov r2, r8 - ands r2, r1 - strb r2, [r0, 0x2] - ldrb r0, [r7] - lsls r0, 4 - add r0, r12 - ldrb r1, [r0, 0x2] - ands r6, r1 - strb r6, [r0, 0x2] - ldrb r0, [r7] - lsls r0, 4 - add r0, r12 - ldrb r1, [r0, 0x2] - mov r2, r10 - ands r2, r1 - strb r2, [r0, 0x2] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _08012F7C @ =gDisableStructs - adds r0, r1 - movs r2, 0 - movs r1, 0x2 - strb r1, [r0, 0x16] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08012F8C @ =gLastMoves - adds r0, r1 - movs r3, 0 - strh r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08012F90 @ =gLastLandedMoves - adds r0, r1 - strh r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08012F94 @ =gLastHitByType - adds r0, r1 - strh r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08012F98 @ =gLastResultingMoves - adds r0, r1 - strh r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08012F9C @ =gLastPrintedMoves - adds r0, r1 - strh r2, [r0] - ldrb r0, [r7] - ldr r2, _08012FA0 @ =gLastHitBy - adds r0, r2 - movs r1, 0xFF - strb r1, [r0] - ldrb r0, [r7] - ldr r2, _08012F84 @ =gBattleStruct - ldr r1, [r2] - lsls r0, 1 - adds r0, r1 - adds r0, 0xC8 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 1 - adds r0, r1 - adds r0, 0xC9 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 1 - adds r0, r1 - adds r0, 0x98 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 1 - adds r0, r1 - adds r0, 0x99 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE0 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE1 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE2 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE3 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE4 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE5 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE6 - strb r3, [r0] - ldrb r0, [r7] - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - adds r0, 0xE7 - strb r3, [r0] - movs r3, 0 - ldr r0, _08012F74 @ =gBattlersCount - ldrb r0, [r0] - cmp r3, r0 - bge _08012F04 - adds r6, r7, 0 - adds r5, r2, 0 - movs r4, 0 -_08012EC4: - ldrb r1, [r6] - cmp r3, r1 - beq _08012EDC - ldr r0, [r5] - lsls r1, r3, 1 - adds r0, r1, r0 - adds r0, 0x98 - strb r4, [r0] - ldr r0, [r5] - adds r1, r0 - adds r1, 0x99 - strb r4, [r1] -_08012EDC: - ldrb r0, [r6] - ldr r1, [r5] - lsls r0, 1 - lsls r2, r3, 3 - adds r0, r2 - adds r0, r1 - adds r0, 0xE0 - strb r4, [r0] - ldrb r0, [r6] - ldr r1, [r5] - lsls r0, 1 - adds r0, r2 - adds r0, r1 - adds r0, 0xE1 - strb r4, [r0] - adds r3, 0x1 - ldr r2, _08012F74 @ =gBattlersCount - ldrb r2, [r2] - cmp r3, r2 - blt _08012EC4 -_08012F04: - ldr r1, _08012FA4 @ =gBattleResources - ldr r0, [r1] - ldr r1, [r0, 0x4] - ldrb r0, [r7] - lsls r0, 2 - adds r1, r0 - movs r0, 0 - str r0, [r1] - ldrb r0, [r7] - movs r3, 0x58 - adds r1, r0, 0 - muls r1, r3 - ldr r2, _08012F70 @ =gBattleMons - adds r1, r2 - ldrh r2, [r1] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - ldr r2, _08012FA8 @ =gBaseStats - adds r0, r2 - ldrb r0, [r0, 0x6] - adds r1, 0x21 - strb r0, [r1] - ldrb r0, [r7] - adds r1, r0, 0 - muls r1, r3 - ldr r0, _08012F70 @ =gBattleMons - adds r1, r0 - ldrh r2, [r1] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - ldr r2, _08012FA8 @ =gBaseStats - adds r0, r2 - ldrb r0, [r0, 0x7] - adds r1, 0x22 - 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 -_08012F5C: .4byte gActiveBattler -_08012F60: .4byte gStatuses3 -_08012F64: .4byte gActionSelectionCursor -_08012F68: .4byte gMoveSelectionCursor -_08012F6C: .4byte gProtectStructs -_08012F70: .4byte gBattleMons -_08012F74: .4byte gBattlersCount -_08012F78: .4byte gBitTable -_08012F7C: .4byte gDisableStructs -_08012F80: .4byte 0xfbffffff -_08012F84: .4byte gBattleStruct -_08012F88: .4byte 0xffff1fff -_08012F8C: .4byte gLastMoves -_08012F90: .4byte gLastLandedMoves -_08012F94: .4byte gLastHitByType -_08012F98: .4byte gLastResultingMoves -_08012F9C: .4byte gLastPrintedMoves -_08012FA0: .4byte gLastHitBy -_08012FA4: .4byte gBattleResources -_08012FA8: .4byte gBaseStats - thumb_func_end FaintClearSetData - - thumb_func_start BattleIntroGetMonsData -BattleIntroGetMonsData: @ 8012FAC - push {r4,r5,lr} - ldr r5, _08012FBC @ =gBattleCommunication - ldrb r0, [r5] - cmp r0, 0 - beq _08012FC0 - cmp r0, 0x1 - beq _08012FE4 - b _0801301A - .align 2, 0 -_08012FBC: .4byte gBattleCommunication -_08012FC0: - ldr r4, _08012FE0 @ =gActiveBattler - ldrb r0, [r5, 0x1] - strb r0, [r4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl BtlController_EmitGetMonData - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _0801301A - .align 2, 0 -_08012FE0: .4byte gActiveBattler -_08012FE4: - ldr r0, _08013008 @ =gBattleControllerExecFlags - ldr r2, [r0] - cmp r2, 0 - bne _0801301A - ldrb r0, [r5, 0x1] - adds r0, 0x1 - strb r0, [r5, 0x1] - ldr r1, _0801300C @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bne _08013018 - ldr r1, _08013010 @ =gBattleMainFunc - ldr r0, _08013014 @ =BattleIntroPrepareBackgroundSlide - str r0, [r1] - b _0801301A - .align 2, 0 -_08013008: .4byte gBattleControllerExecFlags -_0801300C: .4byte gBattlersCount -_08013010: .4byte gBattleMainFunc -_08013014: .4byte BattleIntroPrepareBackgroundSlide -_08013018: - strb r2, [r5] -_0801301A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end BattleIntroGetMonsData - - thumb_func_start BattleIntroPrepareBackgroundSlide -BattleIntroPrepareBackgroundSlide: @ 8013020 - push {r4,r5,lr} - ldr r0, _08013058 @ =gBattleControllerExecFlags - ldr r5, [r0] - cmp r5, 0 - bne _08013050 - movs r0, 0 - bl GetBattlerAtPosition - ldr r4, _0801305C @ =gActiveBattler - strb r0, [r4] - ldr r0, _08013060 @ =gBattleTerrain - ldrb r1, [r0] - movs r0, 0 - bl BtlController_EmitIntroSlide - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r1, _08013064 @ =gBattleMainFunc - ldr r0, _08013068 @ =sub_8013070 - str r0, [r1] - ldr r0, _0801306C @ =gBattleCommunication - strb r5, [r0] - strb r5, [r0, 0x1] -_08013050: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08013058: .4byte gBattleControllerExecFlags -_0801305C: .4byte gActiveBattler -_08013060: .4byte gBattleTerrain -_08013064: .4byte gBattleMainFunc -_08013068: .4byte sub_8013070 -_0801306C: .4byte gBattleCommunication - thumb_func_end BattleIntroPrepareBackgroundSlide - - thumb_func_start sub_8013070 -sub_8013070: @ 8013070 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _080130D4 @ =gBattleControllerExecFlags - ldr r1, [r0] - cmp r1, 0 - beq _08013084 - b _08013314 -_08013084: - ldr r2, _080130D8 @ =gActiveBattler - strb r1, [r2] - ldr r0, _080130DC @ =gBattlersCount - ldrb r0, [r0] - cmp r1, r0 - bcc _08013092 - b _0801330E -_08013092: - movs r7, 0x58 - ldr r0, _080130E0 @ =gBattleMons - mov r8, r0 - mov r9, r2 - movs r1, 0x48 - add r1, r8 - mov r10, r1 -_080130A0: - ldr r0, _080130E4 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080130E8 - ldr r4, _080130D8 @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080130E8 - ldrb r0, [r4] - muls r0, r7 - mov r2, r8 - adds r3, r0, r2 - movs r2, 0 - movs r1, 0 -_080130C6: - adds r0, r3, r2 - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x57 - bls _080130C6 - b _080131B6 - .align 2, 0 -_080130D4: .4byte gBattleControllerExecFlags -_080130D8: .4byte gActiveBattler -_080130DC: .4byte gBattlersCount -_080130E0: .4byte gBattleMons -_080130E4: .4byte gBattleTypeFlags -_080130E8: - mov r1, r9 - ldrb r0, [r1] - muls r0, r7 - mov r2, r8 - adds r3, r0, r2 - movs r2, 0 - ldr r6, _08013230 @ =gBaseStats - ldr r5, _08013234 @ =gBattleBufferB - ldr r4, _08013238 @ =gActiveBattler -_080130FA: - adds r0, r3, r2 - ldrb r1, [r4] - lsls r1, 9 - adds r1, 0x4 - adds r1, r2, r1 - adds r1, r5 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x57 - bls _080130FA - mov r1, r9 - ldrb r0, [r1] - adds r2, r0, 0 - muls r2, r7 - add r2, r8 - ldrh r1, [r2] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r0, [r0, 0x6] - adds r2, 0x21 - strb r0, [r2] - mov r2, r9 - ldrb r0, [r2] - adds r2, r0, 0 - muls r2, r7 - add r2, r8 - ldrh r1, [r2] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r0, [r0, 0x7] - adds r2, 0x22 - strb r0, [r2] - mov r1, r9 - ldrb r0, [r1] - adds r1, r0, 0 - muls r1, r7 - add r1, r8 - ldrh r0, [r1] - ldrb r1, [r1, 0x17] - lsrs r1, 7 - bl GetAbilityBySpecies - mov r2, r9 - ldrb r1, [r2] - muls r1, r7 - add r1, r8 - adds r1, 0x20 - strb r0, [r1] - ldrb r0, [r2] - bl GetBattlerSide - ldr r1, _0801323C @ =gBattleStruct - lsls r0, 24 - lsrs r0, 23 - adds r0, 0xA8 - ldr r1, [r1] - adds r1, r0 - mov r2, r9 - ldrb r0, [r2] - muls r0, r7 - add r0, r8 - ldrh r0, [r0, 0x28] - strh r0, [r1] - movs r2, 0 - ldr r4, _08013238 @ =gActiveBattler - movs r5, 0x58 - ldr r1, _08013240 @ =gUnknown_2023BFC - adds r6, r4, 0 - movs r0, 0x18 - negs r0, r0 - adds r0, r1 - mov r12, r0 - movs r3, 0x6 -_08013196: - ldrb r0, [r4] - muls r0, r5 - adds r0, r2, r0 - adds r0, r1 - strb r3, [r0] - adds r2, 0x1 - cmp r2, 0x7 - ble _08013196 - ldrb r0, [r6] - adds r1, r0, 0 - muls r1, r7 - mov r0, r12 - adds r0, 0x50 - adds r1, r0 - movs r0, 0 - str r0, [r1] -_080131B6: - ldr r4, _08013238 @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _080131D0 - movs r0, 0 - bl BtlController_EmitDrawTrainerPic - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_080131D0: - ldr r5, _08013244 @ =gBattleTypeFlags - ldr r0, [r5] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801324C - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080131F6 - movs r0, 0 - bl BtlController_EmitDrawTrainerPic - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_080131F6: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080132C2 - ldr r0, [r5] - ldr r1, _08013248 @ =0x0001aa02 - ands r0, r1 - cmp r0, 0 - bne _080132C2 - ldrb r0, [r4] - muls r0, r7 - add r0, r8 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r4] - muls r1, r7 - add r1, r10 - ldr r2, [r1] - movs r1, 0x2 - bl HandleSetPokedexFlag - b _080132C2 - .align 2, 0 -_08013230: .4byte gBaseStats -_08013234: .4byte gBattleBufferB -_08013238: .4byte gActiveBattler -_0801323C: .4byte gBattleStruct -_08013240: .4byte gUnknown_2023BFC -_08013244: .4byte gBattleTypeFlags -_08013248: .4byte 0x0001aa02 -_0801324C: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080132C2 - ldr r1, [r5] - movs r2, 0xA0 - lsls r2, 8 - ands r2, r1 - cmp r2, 0 - beq _0801328E - movs r0, 0x80 - lsls r0, 8 - cmp r2, r0 - beq _080132B4 - ldrb r0, [r4] - muls r0, r7 - add r0, r8 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r4] - muls r1, r7 - add r1, r10 - ldr r2, [r1] - movs r1, 0x2 - bl HandleSetPokedexFlag - b _080132B4 -_0801328E: - ldr r0, _08013324 @ =0x0001aa02 - ands r1, r0 - cmp r1, 0 - bne _080132B4 - ldrb r0, [r4] - muls r0, r7 - add r0, r8 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r4] - muls r1, r7 - add r1, r10 - ldr r2, [r1] - movs r1, 0x2 - bl HandleSetPokedexFlag -_080132B4: - movs r0, 0 - bl BtlController_EmitLoadMonSprite - mov r1, r9 - ldrb r0, [r1] - bl MarkBattlerForControllerExec -_080132C2: - ldr r0, _08013328 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080132F8 - ldr r4, _0801332C @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080132EC - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _080132F8 -_080132EC: - movs r0, 0 - bl BtlController_EmitDrawTrainerPic - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_080132F8: - mov r2, r9 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - ldr r1, _08013330 @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcs _0801330E - b _080130A0 -_0801330E: - ldr r1, _08013334 @ =gBattleMainFunc - ldr r0, _08013338 @ =BattleIntroDrawPartySummaryScreens - str r0, [r1] -_08013314: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08013324: .4byte 0x0001aa02 -_08013328: .4byte gBattleTypeFlags -_0801332C: .4byte gActiveBattler -_08013330: .4byte gBattlersCount -_08013334: .4byte gBattleMainFunc -_08013338: .4byte BattleIntroDrawPartySummaryScreens - thumb_func_end sub_8013070 - - thumb_func_start BattleIntroDrawPartySummaryScreens -BattleIntroDrawPartySummaryScreens: @ 801333C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x30 - ldr r0, _08013394 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - beq _0801334E - b _080134C8 -_0801334E: - ldr r0, _08013398 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0801335C - b _08013468 -_0801335C: - movs r7, 0 - add r0, sp, 0x4 - mov r8, r0 - mov r6, r8 - mov r5, sp -_08013366: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0801339C @ =gEnemyParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _0801338C - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _080133A4 -_0801338C: - ldr r0, _080133A0 @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _080133B6 - .align 2, 0 -_08013394: .4byte gBattleControllerExecFlags -_08013398: .4byte gBattleTypeFlags -_0801339C: .4byte gEnemyParty -_080133A0: .4byte 0x0000ffff -_080133A4: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_080133B6: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _08013366 - movs r0, 0x1 - bl GetBattlerAtPosition - ldr r4, _08013410 @ =gActiveBattler - strb r0, [r4] - movs r0, 0 - mov r1, sp - movs r2, 0x80 - bl BtlController_EmitDrawPartyStatusSummary - ldrb r0, [r4] - bl MarkBattlerForControllerExec - movs r7, 0 - mov r6, r8 - mov r5, sp -_080133E2: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _08013414 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _08013408 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _0801341C -_08013408: - ldr r0, _08013418 @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _0801342E - .align 2, 0 -_08013410: .4byte gActiveBattler -_08013414: .4byte gPlayerParty -_08013418: .4byte 0x0000ffff -_0801341C: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_0801342E: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _080133E2 - movs r0, 0 - bl GetBattlerAtPosition - ldr r4, _0801345C @ =gActiveBattler - strb r0, [r4] - movs r0, 0 - mov r1, sp - movs r2, 0x80 - bl BtlController_EmitDrawPartyStatusSummary - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r1, _08013460 @ =gBattleMainFunc - ldr r0, _08013464 @ =BattleIntroPrintTrainerWantsToBattle - b _080134C6 - .align 2, 0 -_0801345C: .4byte gActiveBattler -_08013460: .4byte gBattleMainFunc -_08013464: .4byte BattleIntroPrintTrainerWantsToBattle -_08013468: - movs r7, 0 - add r6, sp, 0x4 - mov r5, sp -_0801346E: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0801349C @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _08013494 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _080134A4 -_08013494: - ldr r0, _080134A0 @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _080134B6 - .align 2, 0 -_0801349C: .4byte gPlayerParty -_080134A0: .4byte 0x0000ffff -_080134A4: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_080134B6: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _0801346E - ldr r1, _080134D4 @ =gBattleMainFunc - ldr r0, _080134D8 @ =sub_8013514 -_080134C6: - str r0, [r1] -_080134C8: - add sp, 0x30 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080134D4: .4byte gBattleMainFunc -_080134D8: .4byte sub_8013514 - thumb_func_end BattleIntroDrawPartySummaryScreens - - thumb_func_start BattleIntroPrintTrainerWantsToBattle -BattleIntroPrintTrainerWantsToBattle: @ 80134DC - push {lr} - ldr r0, _08013504 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _080134FE - movs r0, 0x1 - bl GetBattlerAtPosition - ldr r1, _08013508 @ =gActiveBattler - strb r0, [r1] - ldrb r1, [r1] - movs r0, 0 - bl PrepareStringBattle - ldr r1, _0801350C @ =gBattleMainFunc - ldr r0, _08013510 @ =sub_8013568 - str r0, [r1] -_080134FE: - pop {r0} - bx r0 - .align 2, 0 -_08013504: .4byte gBattleControllerExecFlags -_08013508: .4byte gActiveBattler -_0801350C: .4byte gBattleMainFunc -_08013510: .4byte sub_8013568 - thumb_func_end BattleIntroPrintTrainerWantsToBattle - - thumb_func_start sub_8013514 -sub_8013514: @ 8013514 - push {lr} - ldr r0, _08013550 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _0801354A - ldr r1, _08013554 @ =gBattleMainFunc - ldr r0, _08013558 @ =sub_80136E4 - str r0, [r1] - movs r0, 0 - movs r1, 0 - bl PrepareStringBattle - ldr r0, _0801355C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0xA0 - lsls r1, 8 - ands r0, r1 - cmp r0, r1 - bne _0801354A - movs r0, 0x1 - bl GetBattlerAtPosition - ldr r1, _08013560 @ =gBattleScripting - strb r0, [r1, 0x17] - ldr r0, _08013564 @ =gUnknown_81D91A1 - bl BattleScriptExecute -_0801354A: - pop {r0} - bx r0 - .align 2, 0 -_08013550: .4byte gBattleControllerExecFlags -_08013554: .4byte gBattleMainFunc -_08013558: .4byte sub_80136E4 -_0801355C: .4byte gBattleTypeFlags -_08013560: .4byte gBattleScripting -_08013564: .4byte gUnknown_81D91A1 - thumb_func_end sub_8013514 - - thumb_func_start sub_8013568 -sub_8013568: @ 8013568 - push {lr} - ldr r0, _08013590 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _0801358A - movs r0, 0x1 - bl GetBattlerAtPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x1 - bl PrepareStringBattle - ldr r1, _08013594 @ =gBattleMainFunc - ldr r0, _08013598 @ =sub_801359C - str r0, [r1] -_0801358A: - pop {r0} - bx r0 - .align 2, 0 -_08013590: .4byte gBattleControllerExecFlags -_08013594: .4byte gBattleMainFunc -_08013598: .4byte sub_801359C - thumb_func_end sub_8013568 - - thumb_func_start sub_801359C -sub_801359C: @ 801359C - push {r4,lr} - ldr r0, _08013614 @ =gBattleControllerExecFlags - ldr r1, [r0] - cmp r1, 0 - bne _0801360C - ldr r2, _08013618 @ =gActiveBattler - strb r1, [r2] - ldr r0, _0801361C @ =gBattlersCount - ldrb r0, [r0] - cmp r1, r0 - bcs _08013606 - adds r4, r2, 0 -_080135B4: - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080135CE - movs r0, 0 - bl BtlController_EmitIntroTrainerBallThrow - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_080135CE: - ldr r0, _08013620 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080135F4 - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _080135F4 - movs r0, 0 - bl BtlController_EmitIntroTrainerBallThrow - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_080135F4: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _0801361C @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _080135B4 -_08013606: - ldr r1, _08013624 @ =gBattleMainFunc - ldr r0, _08013628 @ =sub_801362C - str r0, [r1] -_0801360C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08013614: .4byte gBattleControllerExecFlags -_08013618: .4byte gActiveBattler -_0801361C: .4byte gBattlersCount -_08013620: .4byte gBattleTypeFlags -_08013624: .4byte gBattleMainFunc -_08013628: .4byte sub_801362C - thumb_func_end sub_801359C - - thumb_func_start sub_801362C -sub_801362C: @ 801362C - push {r4-r7,lr} - ldr r0, _080136A4 @ =gBattleControllerExecFlags - ldr r1, [r0] - cmp r1, 0 - bne _0801369C - ldr r2, _080136A8 @ =gActiveBattler - strb r1, [r2] - ldr r0, _080136AC @ =gBattlersCount - ldrb r0, [r0] - cmp r1, r0 - bcs _08013696 - adds r4, r2, 0 - ldr r6, _080136B0 @ =gBattleMons - movs r5, 0x58 - adds r7, r6, 0 - adds r7, 0x48 -_0801364C: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08013684 - ldr r0, _080136B4 @ =gBattleTypeFlags - ldr r0, [r0] - ldr r1, _080136B8 @ =0x0001aa02 - ands r0, r1 - cmp r0, 0 - bne _08013684 - ldrb r0, [r4] - muls r0, r5 - adds r0, r6 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r4] - muls r1, r5 - adds r1, r7 - ldr r2, [r1] - movs r1, 0x2 - bl HandleSetPokedexFlag -_08013684: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _080136AC @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _0801364C -_08013696: - ldr r1, _080136BC @ =gBattleMainFunc - ldr r0, _080136C0 @ =sub_80136E4 - str r0, [r1] -_0801369C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080136A4: .4byte gBattleControllerExecFlags -_080136A8: .4byte gActiveBattler -_080136AC: .4byte gBattlersCount -_080136B0: .4byte gBattleMons -_080136B4: .4byte gBattleTypeFlags -_080136B8: .4byte 0x0001aa02 -_080136BC: .4byte gBattleMainFunc -_080136C0: .4byte sub_80136E4 - thumb_func_end sub_801362C - - thumb_func_start sub_80136C4 -sub_80136C4: @ 80136C4 - push {lr} - ldr r0, _080136D8 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _080136D4 - ldr r1, _080136DC @ =gBattleMainFunc - ldr r0, _080136E0 @ =sub_80136E4 - str r0, [r1] -_080136D4: - pop {r0} - bx r0 - .align 2, 0 -_080136D8: .4byte gBattleControllerExecFlags -_080136DC: .4byte gBattleMainFunc -_080136E0: .4byte sub_80136E4 - thumb_func_end sub_80136C4 - - thumb_func_start sub_80136E4 -sub_80136E4: @ 80136E4 - push {lr} - ldr r0, _08013718 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08013712 - ldr r0, _0801371C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0801370C - movs r0, 0 - bl GetBattlerAtPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x1 - bl PrepareStringBattle -_0801370C: - ldr r1, _08013720 @ =gBattleMainFunc - ldr r0, _08013724 @ =sub_8013728 - str r0, [r1] -_08013712: - pop {r0} - bx r0 - .align 2, 0 -_08013718: .4byte gBattleControllerExecFlags -_0801371C: .4byte gBattleTypeFlags -_08013720: .4byte gBattleMainFunc -_08013724: .4byte sub_8013728 - thumb_func_end sub_80136E4 - - thumb_func_start sub_8013728 -sub_8013728: @ 8013728 - push {r4,lr} - ldr r0, _080137B4 @ =gBattleControllerExecFlags - ldr r1, [r0] - cmp r1, 0 - bne _080137AC - ldr r2, _080137B8 @ =gActiveBattler - strb r1, [r2] - ldr r0, _080137BC @ =gBattlersCount - ldrb r0, [r0] - cmp r1, r0 - bcs _08013790 - adds r4, r2, 0 -_08013740: - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _08013758 - movs r0, 0 - bl BtlController_EmitIntroTrainerBallThrow - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_08013758: - ldr r0, _080137C0 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0801377E - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0801377E - movs r0, 0 - bl BtlController_EmitIntroTrainerBallThrow - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_0801377E: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _080137BC @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08013740 -_08013790: - ldr r2, _080137C4 @ =gBattleStruct - ldr r0, [r2] - adds r0, 0x4C - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xD9 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xB6 - strb r1, [r0] - ldr r1, _080137C8 @ =gBattleMainFunc - ldr r0, _080137CC @ =sub_801385C - str r0, [r1] -_080137AC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080137B4: .4byte gBattleControllerExecFlags -_080137B8: .4byte gActiveBattler -_080137BC: .4byte gBattlersCount -_080137C0: .4byte gBattleTypeFlags -_080137C4: .4byte gBattleStruct -_080137C8: .4byte gBattleMainFunc -_080137CC: .4byte sub_801385C - thumb_func_end sub_8013728 - - thumb_func_start sub_80137D0 -sub_80137D0: @ 80137D0 - push {r4,r5,lr} - ldr r0, _08013840 @ =gBattleControllerExecFlags - ldr r1, [r0] - cmp r1, 0 - bne _0801383A - ldr r2, _08013844 @ =gActiveBattler - strb r1, [r2] - ldr r0, _08013848 @ =gBattlersCount - ldrb r0, [r0] - cmp r1, r0 - bcs _0801381E - adds r4, r2, 0 - ldr r5, _0801384C @ =gBattlerPartyIndexes -_080137EA: - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0801380C - ldrb r0, [r4] - lsls r0, 1 - adds r0, r5 - ldrb r1, [r0] - movs r0, 0 - movs r2, 0 - bl BtlController_EmitSwitchInAnim - ldrb r0, [r4] - bl MarkBattlerForControllerExec -_0801380C: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08013848 @ =gBattlersCount - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _080137EA -_0801381E: - ldr r2, _08013850 @ =gBattleStruct - ldr r0, [r2] - adds r0, 0x4C - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xD9 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xB6 - strb r1, [r0] - ldr r1, _08013854 @ =gBattleMainFunc - ldr r0, _08013858 @ =sub_801385C - str r0, [r1] -_0801383A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08013840: .4byte gBattleControllerExecFlags -_08013844: .4byte gActiveBattler -_08013848: .4byte gBattlersCount -_0801384C: .4byte gBattlerPartyIndexes -_08013850: .4byte gBattleStruct -_08013854: .4byte gBattleMainFunc -_08013858: .4byte sub_801385C - thumb_func_end sub_80137D0 - - thumb_func_start sub_801385C -sub_801385C: @ 801385C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - movs r0, 0 - mov r9, r0 - ldr r0, _080138A0 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - beq _08013874 - b _08013ADA -_08013874: - ldr r0, _080138A4 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x4C - ldrb r0, [r0] - cmp r0, 0 - bne _080138FA - movs r5, 0 - ldr r1, _080138A8 @ =gBattlersCount - adds r3, r1, 0 - ldrb r0, [r1] - cmp r5, r0 - bge _0801389A - ldr r2, _080138AC @ =gBattlerByTurnOrder -_0801388E: - adds r0, r5, r2 - strb r5, [r0] - adds r5, 0x1 - ldrb r0, [r1] - cmp r5, r0 - blt _0801388E -_0801389A: - movs r5, 0 - b _080138F0 - .align 2, 0 -_080138A0: .4byte gBattleControllerExecFlags -_080138A4: .4byte gBattleStruct -_080138A8: .4byte gBattlersCount -_080138AC: .4byte gBattlerByTurnOrder -_080138B0: - adds r4, r5, 0x1 - mov r8, r4 - ldrb r1, [r1] - cmp r8, r1 - bge _080138EE - ldr r6, _08013924 @ =gBattlerByTurnOrder - ldr r3, _08013928 @ =gBattlersCount - lsls r7, r5, 24 -_080138C0: - adds r0, r5, r6 - ldrb r0, [r0] - adds r1, r4, r6 - ldrb r1, [r1] - movs r2, 0x1 - str r3, [sp, 0x4] - bl GetWhoStrikesFirst - lsls r0, 24 - ldr r3, [sp, 0x4] - cmp r0, 0 - beq _080138E4 - lsls r1, r4, 24 - lsrs r1, 24 - lsrs r0, r7, 24 - bl SwapTurnOrder - ldr r3, [sp, 0x4] -_080138E4: - adds r4, 0x1 - ldr r0, _08013928 @ =gBattlersCount - ldrb r0, [r0] - cmp r4, r0 - blt _080138C0 -_080138EE: - mov r5, r8 -_080138F0: - adds r1, r3, 0 - ldrb r0, [r3] - subs r0, 0x1 - cmp r5, r0 - blt _080138B0 -_080138FA: - ldr r4, _0801392C @ =gBattleStruct - ldr r0, [r4] - adds r0, 0xB6 - ldrb r0, [r0] - cmp r0, 0 - bne _08013930 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0xFF - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _08013930 - ldr r0, [r4] - adds r0, 0xB6 - movs r1, 0x1 - strb r1, [r0] - b _08013ADA - .align 2, 0 -_08013924: .4byte gBattlerByTurnOrder -_08013928: .4byte gBattlersCount -_0801392C: .4byte gBattleStruct -_08013930: - ldr r2, _08013AE8 @ =gBattleStruct - ldr r0, [r2] - adds r0, 0x4C - ldr r1, _08013AEC @ =gBattlersCount - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bcs _0801398A - ldr r5, _08013AF0 @ =gBattlerByTurnOrder - adds r4, r2, 0 -_08013944: - ldr r0, [r4] - adds r0, 0x4C - ldrb r0, [r0] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _0801396A - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_0801396A: - ldr r1, [r4] - adds r1, 0x4C - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - mov r1, r9 - cmp r1, 0 - beq _0801397C - b _08013ADA -_0801397C: - ldr r0, [r4] - adds r0, 0x4C - ldr r1, _08013AEC @ =gBattlersCount - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bcc _08013944 -_0801398A: - movs r0, 0 - str r0, [sp] - movs r0, 0x9 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080139A4 - b _08013ADA -_080139A4: - str r0, [sp] - movs r0, 0xB - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - beq _080139BA - b _08013ADA -_080139BA: - ldr r2, _08013AE8 @ =gBattleStruct - ldr r0, [r2] - adds r0, 0xD9 - ldr r1, _08013AEC @ =gBattlersCount - ldrb r0, [r0] - adds r3, r1, 0 - ldrb r1, [r3] - cmp r0, r1 - bcs _08013A14 - ldr r5, _08013AF0 @ =gBattlerByTurnOrder - adds r4, r2, 0 -_080139D0: - ldr r0, [r4] - adds r0, 0xD9 - ldrb r0, [r0] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0 - movs r2, 0 - str r3, [sp, 0x4] - bl ItemBattleEffects - lsls r0, 24 - ldr r3, [sp, 0x4] - cmp r0, 0 - beq _080139F6 - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_080139F6: - ldr r1, [r4] - adds r1, 0xD9 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - mov r0, r9 - cmp r0, 0 - bne _08013ADA - ldr r0, [r4] - adds r0, 0xD9 - ldr r1, _08013AEC @ =gBattlersCount - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bcc _080139D0 -_08013A14: - ldrb r0, [r3] - cmp r0, 0 - beq _08013A22 - adds r5, r0, 0 -_08013A1C: - subs r5, 0x1 - cmp r5, 0 - bne _08013A1C -_08013A22: - movs r5, 0 - ldr r1, _08013AE8 @ =gBattleStruct - mov r8, r1 - movs r7, 0x6 - ldr r6, _08013AF4 @ =gChosenActionByBattler - ldr r2, _08013AF8 @ =gChosenMoveByBattler - movs r4, 0xFF - movs r3, 0 -_08013A32: - mov r1, r8 - ldr r0, [r1] - adds r0, r5, r0 - adds r0, 0x5C - strb r7, [r0] - adds r1, r5, r6 - ldrb r0, [r1] - orrs r0, r4 - strb r0, [r1] - strh r3, [r2] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _08013A32 - movs r0, 0 - bl TurnValuesCleanUp - bl SpecialStatusesClear - ldr r0, _08013AE8 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x91 - ldr r1, _08013AFC @ =gAbsentBattlerFlags - ldrb r1, [r1] - strb r1, [r0] - ldr r1, _08013B00 @ =gBattleMainFunc - ldr r0, _08013B04 @ =sub_8014040 - str r0, [r1] - bl ResetSentPokesToOpponentValue - ldr r1, _08013B08 @ =gBattleCommunication - movs r2, 0 - adds r0, r1, 0x7 -_08013A74: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08013A74 - movs r5, 0 - ldr r3, _08013AEC @ =gBattlersCount - ldr r2, _08013AE8 @ =gBattleStruct - ldr r6, _08013B0C @ =gBattleScripting - ldr r7, _08013B10 @ =gMoveResultFlags - ldrb r0, [r3] - cmp r5, r0 - bge _08013AA6 - ldr r0, _08013B14 @ =gBattleMons - movs r4, 0x9 - negs r4, r4 - adds r1, r0, 0 - adds r1, 0x50 -_08013A96: - ldr r0, [r1] - ands r0, r4 - str r0, [r1] - adds r1, 0x58 - adds r5, 0x1 - ldrb r0, [r3] - cmp r5, r0 - blt _08013A96 -_08013AA6: - ldr r0, [r2] - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x1] - ldr r0, [r2] - movs r3, 0xC0 - lsls r3, 1 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r3, 0x1 - adds r0, r3 - strb r1, [r0] - movs r1, 0 - strb r1, [r6, 0x14] - ldr r0, [r2] - adds r0, 0x4D - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x3] - strb r1, [r7] - bl Random - ldr r1, _08013B18 @ =gUnknown_2023E80 - strh r0, [r1] -_08013ADA: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08013AE8: .4byte gBattleStruct -_08013AEC: .4byte gBattlersCount -_08013AF0: .4byte gBattlerByTurnOrder -_08013AF4: .4byte gChosenActionByBattler -_08013AF8: .4byte gChosenMoveByBattler -_08013AFC: .4byte gAbsentBattlerFlags -_08013B00: .4byte gBattleMainFunc -_08013B04: .4byte sub_8014040 -_08013B08: .4byte gBattleCommunication -_08013B0C: .4byte gBattleScripting -_08013B10: .4byte gMoveResultFlags -_08013B14: .4byte gBattleMons -_08013B18: .4byte gUnknown_2023E80 - thumb_func_end sub_801385C - - thumb_func_start sub_8013B1C -sub_8013B1C: @ 8013B1C - push {r4-r6,lr} - ldr r0, _08013BB4 @ =gBattleControllerExecFlags - ldr r0, [r0] - cmp r0, 0 - bne _08013BAC - ldr r1, _08013BB8 @ =gBattleMainFunc - ldr r0, _08013BBC @ =BattleTurnPassed - str r0, [r1] - ldr r3, _08013BC0 @ =gBattlersCount - ldr r1, _08013BC4 @ =gBattleCommunication - movs r2, 0 - adds r0, r1, 0x7 -_08013B34: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08013B34 - movs r4, 0 - ldrb r3, [r3] - cmp r4, r3 - bge _08013B86 - ldr r5, _08013BC8 @ =gBattleMons - adds r6, r5, 0 - adds r6, 0x4C -_08013B4A: - movs r0, 0x58 - adds r2, r4, 0 - muls r2, r0 - adds r1, r5, 0 - adds r1, 0x50 - adds r1, r2, r1 - ldr r3, [r1] - subs r0, 0x61 - ands r3, r0 - str r3, [r1] - adds r2, r6 - ldr r0, [r2] - movs r1, 0x7 - ands r0, r1 - cmp r0, 0 - beq _08013B7C - movs r0, 0x80 - lsls r0, 5 - ands r3, r0 - cmp r3, 0 - beq _08013B7C - lsls r0, r4, 24 - lsrs r0, 24 - bl CancelMultiTurnMoves -_08013B7C: - adds r4, 0x1 - ldr r0, _08013BC0 @ =gBattlersCount - ldrb r0, [r0] - cmp r4, r0 - blt _08013B4A -_08013B86: - ldr r2, _08013BCC @ =gBattleStruct - ldr r0, [r2] - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x1] - ldr r0, [r2] - movs r3, 0xC0 - lsls r3, 1 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r3, 0x1 - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x3] - ldr r0, _08013BD0 @ =gMoveResultFlags - strb r1, [r0] -_08013BAC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08013BB4: .4byte gBattleControllerExecFlags -_08013BB8: .4byte gBattleMainFunc -_08013BBC: .4byte BattleTurnPassed -_08013BC0: .4byte gBattlersCount -_08013BC4: .4byte gBattleCommunication -_08013BC8: .4byte gBattleMons -_08013BCC: .4byte gBattleStruct -_08013BD0: .4byte gMoveResultFlags - thumb_func_end sub_8013B1C - - thumb_func_start BattleTurnPassed -BattleTurnPassed: @ 8013BD4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0x1 - bl TurnValuesCleanUp - ldr r0, _08013C78 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0 - bne _08013C04 - bl DoFieldEndTurnEffects - lsls r0, 24 - cmp r0, 0 - beq _08013BF8 - b _08013D20 -_08013BF8: - bl DoBattlerEndTurnEffects - lsls r0, 24 - cmp r0, 0 - beq _08013C04 - b _08013D20 -_08013C04: - bl HandleFaintedMonActions - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08013C12 - b _08013D20 -_08013C12: - ldr r0, _08013C7C @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x4D - strb r1, [r0] - bl HandleWishPerishSongOnTurnEnd - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08013D20 - movs r0, 0 - bl TurnValuesCleanUp - ldr r2, _08013C80 @ =gHitMarker - ldr r0, [r2] - ldr r1, _08013C84 @ =0xfffffdff - ands r0, r1 - ldr r1, _08013C88 @ =0xfff7ffff - ands r0, r1 - ldr r1, _08013C8C @ =0xffbfffff - ands r0, r1 - ldr r1, _08013C90 @ =0xffefffff - ands r0, r1 - str r0, [r2] - ldr r0, _08013C94 @ =gBattleScripting - strb r4, [r0, 0x18] - strb r4, [r0, 0x19] - strb r4, [r0, 0x14] - ldr r0, _08013C98 @ =gBattleMoveDamage - str r4, [r0] - ldr r0, _08013C9C @ =gMoveResultFlags - strb r4, [r0] - ldr r1, _08013CA0 @ =gBattleCommunication - movs r2, 0 - adds r0, r1, 0x4 -_08013C58: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08013C58 - ldr r0, _08013C78 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0 - beq _08013CB0 - ldr r1, _08013CA4 @ =gCurrentActionFuncId - movs r0, 0xC - strb r0, [r1] - ldr r1, _08013CA8 @ =gBattleMainFunc - ldr r0, _08013CAC @ =RunTurnActionsFunctions - str r0, [r1] - b _08013D20 - .align 2, 0 -_08013C78: .4byte gBattleOutcome -_08013C7C: .4byte gBattleStruct -_08013C80: .4byte gHitMarker -_08013C84: .4byte 0xfffffdff -_08013C88: .4byte 0xfff7ffff -_08013C8C: .4byte 0xffbfffff -_08013C90: .4byte 0xffefffff -_08013C94: .4byte gBattleScripting -_08013C98: .4byte gBattleMoveDamage -_08013C9C: .4byte gMoveResultFlags -_08013CA0: .4byte gBattleCommunication -_08013CA4: .4byte gCurrentActionFuncId -_08013CA8: .4byte gBattleMainFunc -_08013CAC: .4byte RunTurnActionsFunctions -_08013CB0: - ldr r1, _08013D30 @ =gBattleResults - ldrb r0, [r1, 0x13] - cmp r0, 0xFE - bhi _08013CBC - adds r0, 0x1 - strb r0, [r1, 0x13] -_08013CBC: - movs r2, 0 - ldr r4, _08013D34 @ =gBattlersCount - ldr r0, _08013D38 @ =gBattleStruct - mov r8, r0 - ldr r1, _08013D3C @ =gBattleMainFunc - mov r10, r1 - ldr r0, _08013D40 @ =gAbsentBattlerFlags - mov r12, r0 - ldr r1, _08013D44 @ =sub_8014040 - mov r9, r1 - ldrb r0, [r4] - cmp r2, r0 - bge _08013CF2 - ldr r7, _08013D48 @ =gChosenActionByBattler - movs r6, 0xFF - movs r5, 0 - ldr r3, _08013D4C @ =gChosenMoveByBattler -_08013CDE: - adds r1, r2, r7 - ldrb r0, [r1] - orrs r0, r6 - strb r0, [r1] - strh r5, [r3] - adds r3, 0x2 - adds r2, 0x1 - ldrb r1, [r4] - cmp r2, r1 - blt _08013CDE -_08013CF2: - movs r2, 0 - ldr r3, _08013D38 @ =gBattleStruct - movs r1, 0x6 -_08013CF8: - ldr r0, [r3] - adds r0, r2, r0 - adds r0, 0x5C - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x3 - ble _08013CF8 - mov r2, r8 - ldr r0, [r2] - adds r0, 0x91 - mov r2, r12 - ldrb r1, [r2] - strb r1, [r0] - mov r0, r9 - mov r1, r10 - str r0, [r1] - bl Random - ldr r1, _08013D50 @ =gUnknown_2023E80 - strh r0, [r1] -_08013D20: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08013D30: .4byte gBattleResults -_08013D34: .4byte gBattlersCount -_08013D38: .4byte gBattleStruct -_08013D3C: .4byte gBattleMainFunc -_08013D40: .4byte gAbsentBattlerFlags -_08013D44: .4byte sub_8014040 -_08013D48: .4byte gChosenActionByBattler -_08013D4C: .4byte gChosenMoveByBattler -_08013D50: .4byte gUnknown_2023E80 - thumb_func_end BattleTurnPassed - - thumb_func_start IsRunningFromBattleImpossible -IsRunningFromBattleImpossible: @ 8013D54 - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, _08013D78 @ =gBattleMons - ldr r0, _08013D7C @ =gActiveBattler - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08013D84 - ldr r1, _08013D80 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x7] - b _08013D8E - .align 2, 0 -_08013D78: .4byte gBattleMons -_08013D7C: .4byte gActiveBattler -_08013D80: .4byte gEnigmaBerries -_08013D84: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r2, r0, 24 -_08013D8E: - ldr r1, _08013EA4 @ =gPotentialItemEffectBattler - ldr r3, _08013EA8 @ =gActiveBattler - ldrb r0, [r3] - strb r0, [r1] - cmp r2, 0x25 - bne _08013D9C - b _08013F18 -_08013D9C: - ldr r0, _08013EAC @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08013DAA - b _08013F18 -_08013DAA: - ldr r1, _08013EB0 @ =gBattleMons - ldrb r2, [r3] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x32 - bne _08013DBE - b _08013F18 -_08013DBE: - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - ldr r0, _08013EB4 @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - bge _08013E52 - movs r7, 0 -_08013DD4: - lsrs r4, r7, 24 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - beq _08013DF8 - ldr r1, _08013EB0 @ =gBattleMons - movs r0, 0x58 - muls r0, r5 - adds r0, r1 - adds r2, r0, 0 - adds r2, 0x20 - ldrb r0, [r2] - cmp r0, 0x17 - bne _08013DF8 - b _08013F20 -_08013DF8: - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - beq _08013E42 - ldr r3, _08013EB0 @ =gBattleMons - ldr r0, _08013EA8 @ =gActiveBattler - ldrb r0, [r0] - movs r2, 0x58 - muls r0, r2 - adds r1, r0, r3 - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1A - beq _08013E42 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08013E42 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08013E42 - adds r0, r5, 0 - muls r0, r2 - adds r0, r3 - adds r2, r0, 0 - adds r2, 0x20 - ldrb r0, [r2] - cmp r0, 0x47 - bne _08013E42 - b _08013F3C -_08013E42: - movs r0, 0x80 - lsls r0, 17 - adds r7, r0 - adds r5, 0x1 - ldr r0, _08013EB4 @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - blt _08013DD4 -_08013E52: - ldr r4, _08013EA8 @ =gActiveBattler - ldrb r1, [r4] - movs r0, 0 - str r0, [sp] - movs r0, 0xF - movs r2, 0x2A - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _08013EC4 - ldr r6, _08013EB0 @ =gBattleMons - ldrb r0, [r4] - movs r3, 0x58 - muls r0, r3 - adds r1, r0, r6 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x8 - beq _08013E8A - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x8 - bne _08013EC4 -_08013E8A: - ldr r0, _08013EB8 @ =gBattleScripting - subs r1, r5, 0x1 - strb r1, [r0, 0x17] - ldr r2, _08013EBC @ =gLastUsedAbility - adds r0, r1, 0 - muls r0, r3 - adds r0, r6 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r2] - ldr r1, _08013EC0 @ =gBattleCommunication - movs r0, 0x2 - b _08013F5C - .align 2, 0 -_08013EA4: .4byte gPotentialItemEffectBattler -_08013EA8: .4byte gActiveBattler -_08013EAC: .4byte gBattleTypeFlags -_08013EB0: .4byte gBattleMons -_08013EB4: .4byte gBattlersCount -_08013EB8: .4byte gBattleScripting -_08013EBC: .4byte gLastUsedAbility -_08013EC0: .4byte gBattleCommunication -_08013EC4: - ldr r1, _08013EF8 @ =gBattleMons - ldr r0, _08013EFC @ =gActiveBattler - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08013F00 @ =0x0400e000 - ands r0, r1 - cmp r0, 0 - bne _08013EEE - ldr r1, _08013F04 @ =gStatuses3 - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 3 - ands r0, r1 - cmp r0, 0 - beq _08013F0C -_08013EEE: - ldr r1, _08013F08 @ =gBattleCommunication - movs r0, 0 - strb r0, [r1, 0x5] - movs r0, 0x1 - b _08013F5E - .align 2, 0 -_08013EF8: .4byte gBattleMons -_08013EFC: .4byte gActiveBattler -_08013F00: .4byte 0x0400e000 -_08013F04: .4byte gStatuses3 -_08013F08: .4byte gBattleCommunication -_08013F0C: - ldr r0, _08013F1C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08013F58 -_08013F18: - movs r0, 0 - b _08013F5E - .align 2, 0 -_08013F1C: .4byte gBattleTypeFlags -_08013F20: - ldr r0, _08013F30 @ =gBattleScripting - strb r5, [r0, 0x17] - ldr r1, _08013F34 @ =gLastUsedAbility - ldrb r0, [r2] - strb r0, [r1] - ldr r1, _08013F38 @ =gBattleCommunication - movs r0, 0x2 - b _08013F5C - .align 2, 0 -_08013F30: .4byte gBattleScripting -_08013F34: .4byte gLastUsedAbility -_08013F38: .4byte gBattleCommunication -_08013F3C: - ldr r0, _08013F4C @ =gBattleScripting - strb r5, [r0, 0x17] - ldr r1, _08013F50 @ =gLastUsedAbility - ldrb r0, [r2] - strb r0, [r1] - ldr r1, _08013F54 @ =gBattleCommunication - movs r0, 0x2 - b _08013F5C - .align 2, 0 -_08013F4C: .4byte gBattleScripting -_08013F50: .4byte gLastUsedAbility -_08013F54: .4byte gBattleCommunication -_08013F58: - ldr r1, _08013F68 @ =gBattleCommunication - movs r0, 0x1 -_08013F5C: - strb r0, [r1, 0x5] -_08013F5E: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08013F68: .4byte gBattleCommunication - thumb_func_end IsRunningFromBattleImpossible - - thumb_func_start sub_8013F6C -sub_8013F6C: @ 8013F6C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - movs r3, 0 - ldr r0, _08014008 @ =gBattlerPartyIndexes - mov r8, r0 - ldr r1, _0801400C @ =gUnknown_203B0DC - mov r12, r1 - ldr r7, _08014010 @ =gBattleStruct - lsls r0, r5, 1 - adds r4, r0, r5 - adds r6, r0, 0 -_08013F88: - mov r0, r12 - adds r2, r3, r0 - ldr r1, [r7] - adds r0, r4, r3 - adds r0, r1 - adds r0, 0x60 - ldrb r0, [r0] - strb r0, [r2] - adds r3, 0x1 - cmp r3, 0x2 - ble _08013F88 - mov r1, r8 - adds r0, r6, r1 - ldrb r0, [r0] - bl pokemon_order_func - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r7, _08014010 @ =gBattleStruct - ldr r0, [r7] - adds r0, r5, r0 - adds r0, 0x5C - ldrb r0, [r0] - bl pokemon_order_func - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_8127FF4 - ldr r0, _08014014 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08014018 - movs r3, 0 - adds r4, r7, 0 - adds r6, r5 - movs r0, 0x2 - adds r1, r5, 0 - eors r1, r0 - ldr r7, _0801400C @ =gUnknown_203B0DC - lsls r0, r1, 1 - adds r5, r0, r1 -_08013FE6: - ldr r0, [r4] - adds r1, r6, r3 - adds r1, r0 - adds r1, 0x60 - adds r2, r3, r7 - ldrb r0, [r2] - strb r0, [r1] - ldr r1, [r4] - adds r0, r5, r3 - adds r0, r1 - adds r0, 0x60 - ldrb r1, [r2] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x2 - ble _08013FE6 - b _08014032 - .align 2, 0 -_08014008: .4byte gBattlerPartyIndexes -_0801400C: .4byte gUnknown_203B0DC -_08014010: .4byte gBattleStruct -_08014014: .4byte gBattleTypeFlags -_08014018: - movs r3, 0 - adds r2, r6, r5 - ldr r4, _0801403C @ =gUnknown_203B0DC -_0801401E: - ldr r0, [r7] - adds r1, r2, r3 - adds r1, r0 - adds r1, 0x60 - adds r0, r3, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r3, 0x1 - cmp r3, 0x2 - ble _0801401E -_08014032: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801403C: .4byte gUnknown_203B0DC - thumb_func_end sub_8013F6C - - thumb_func_start sub_8014040 -sub_8014040: @ 8014040 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - ldr r0, _0801408C @ =gBattleCommunication - movs r1, 0 - strb r1, [r0, 0x4] - ldr r0, _08014090 @ =gActiveBattler - strb r1, [r0] - ldr r0, _08014094 @ =gBattlersCount - adds r2, r0, 0 - ldrb r0, [r2] - cmp r1, r0 - bcc _08014064 - bl _08014C68 -_08014064: - ldr r4, _08014090 @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0801408C @ =gBattleCommunication - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x6 - bls _08014080 - bl _08014C4E -_08014080: - lsls r0, 2 - ldr r1, _08014098 @ =_0801409C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801408C: .4byte gBattleCommunication -_08014090: .4byte gActiveBattler -_08014094: .4byte gBattlersCount -_08014098: .4byte _0801409C - .align 2, 0 -_0801409C: - .4byte _080140B8 - .4byte _080141DC - .4byte _08014764 - .4byte _08014AA0 - .4byte _08014B44 - .4byte _08014B88 - .4byte _08014C20 -_080140B8: - ldr r0, _08014150 @ =gActiveBattler - ldrb r1, [r0] - ldr r4, _08014154 @ =gBattleStruct - ldr r0, [r4] - adds r1, r0 - adds r1, 0x5C - movs r0, 0x6 - strb r0, [r1] - ldr r0, _08014158 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08014114 - movs r1, 0x2 - movs r0, 0x2 - ands r0, r5 - cmp r0, 0 - beq _08014114 - eors r5, r1 - adds r0, r5, 0 - bl GetBattlerAtPosition - ldr r1, [r4] - adds r1, 0x91 - ldrb r1, [r1] - ldr r2, _0801415C @ =gBitTable - lsls r0, 24 - lsrs r0, 22 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _08014114 - ldr r4, _08014160 @ =gBattleCommunication - adds r0, r5, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x4 - beq _08014114 - bl _08014C4E -_08014114: - ldr r0, _08014154 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x91 - ldrb r3, [r0] - ldr r1, _0801415C @ =gBitTable - ldr r4, _08014150 @ =gActiveBattler - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ands r3, r0 - cmp r3, 0 - beq _0801417C - ldr r0, _08014164 @ =gChosenActionByBattler - adds r0, r2, r0 - movs r1, 0xD - strb r1, [r0] - ldr r0, _08014158 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08014168 - ldr r0, _08014160 @ =gBattleCommunication - ldrb r1, [r4] - adds r1, r0 - movs r0, 0x4 - strb r0, [r1] - bl _08014C4E - .align 2, 0 -_08014150: .4byte gActiveBattler -_08014154: .4byte gBattleStruct -_08014158: .4byte gBattleTypeFlags -_0801415C: .4byte gBitTable -_08014160: .4byte gBattleCommunication -_08014164: .4byte gChosenActionByBattler -_08014168: - ldr r0, _08014178 @ =gBattleCommunication - ldrb r1, [r4] - adds r1, r0 - movs r0, 0x3 - strb r0, [r1] - bl _08014C4E - .align 2, 0 -_08014178: .4byte gBattleCommunication -_0801417C: - ldr r1, _080141B0 @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - bne _0801419C - movs r0, 0x80 - lsls r0, 15 - ands r1, r0 - cmp r1, 0 - beq _080141BC -_0801419C: - ldr r0, _080141B4 @ =gChosenActionByBattler - adds r0, r2, r0 - strb r3, [r0] - ldr r1, _080141B8 @ =gBattleCommunication - ldrb r0, [r4] - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] - bl _08014C4E - .align 2, 0 -_080141B0: .4byte gBattleMons -_080141B4: .4byte gChosenActionByBattler -_080141B8: .4byte gBattleCommunication -_080141BC: - ldr r0, _080141D4 @ =gChosenActionByBattler - ldrb r1, [r0] - ldr r0, _080141D8 @ =gBattleBufferB - ldrb r2, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r2, r0 - movs r0, 0 - bl BtlController_EmitChooseAction - bl _08014B26 - .align 2, 0 -_080141D4: .4byte gChosenActionByBattler -_080141D8: .4byte gBattleBufferB -_080141DC: - ldr r4, _08014234 @ =gBattleControllerExecFlags - ldr r1, _08014238 @ =gBitTable - ldr r3, _0801423C @ =gActiveBattler - ldrb r5, [r3] - lsls r0, r5, 2 - adds r0, r1 - ldr r2, [r0] - lsls r0, r2, 4 - movs r1, 0xF0 - lsls r1, 24 - orrs r0, r1 - orrs r0, r2 - lsls r1, r2, 8 - orrs r0, r1 - lsls r2, 12 - orrs r0, r2 - ldr r1, [r4] - ands r1, r0 - mov r8, r3 - cmp r1, 0 - beq _0801420A - bl _08014C4E -_0801420A: - ldr r2, _08014240 @ =gChosenActionByBattler - adds r2, r5, r2 - ldr r1, _08014244 @ =gBattleBufferB - lsls r0, r5, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldrb r0, [r3] - lsls r0, 9 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xC - bls _08014228 - b _080146AC -_08014228: - lsls r0, 2 - ldr r1, _08014248 @ =_0801424C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08014234: .4byte gBattleControllerExecFlags -_08014238: .4byte gBitTable -_0801423C: .4byte gActiveBattler -_08014240: .4byte gChosenActionByBattler -_08014244: .4byte gBattleBufferB -_08014248: .4byte _0801424C - .align 2, 0 -_0801424C: - .4byte _08014280 - .4byte _080143D4 - .4byte _08014450 - .4byte _080146AC - .4byte _080146AC - .4byte _08014620 - .4byte _080146AC - .4byte _080146AC - .4byte _080146AC - .4byte _080146AC - .4byte _080146AC - .4byte _080146AC - .4byte _08014670 -_08014280: - bl AreAllMovesUnusable - lsls r0, 24 - cmp r0, 0 - beq _080142D8 - ldr r0, _080142C8 @ =gBattleCommunication - ldr r3, _080142CC @ =gActiveBattler - ldrb r1, [r3] - adds r1, r0 - movs r4, 0 - movs r0, 0x5 - strb r0, [r1] - ldrb r1, [r3] - ldr r2, _080142D0 @ =gBattleStruct - ldr r0, [r2] - adds r1, r0 - adds r1, 0x54 - strb r4, [r1] - ldrb r1, [r3] - ldr r0, [r2] - adds r1, r0 - adds r1, 0x84 - movs r0, 0x3 - strb r0, [r1] - ldrb r1, [r3] - ldr r2, [r2] - adds r2, r1, r2 - ldr r0, _080142D4 @ =gBattleBufferB - lsls r1, 9 - adds r0, 0x3 - adds r1, r0 - ldrb r0, [r1] - strb r0, [r2, 0xC] - bl _08014C78 - .align 2, 0 -_080142C8: .4byte gBattleCommunication -_080142CC: .4byte gActiveBattler -_080142D0: .4byte gBattleStruct -_080142D4: .4byte gBattleBufferB -_080142D8: - ldr r3, _08014318 @ =gDisableStructs - ldr r5, _0801431C @ =gActiveBattler - ldrb r4, [r5] - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r0, r3 - ldrh r2, [r0, 0x6] - cmp r2, 0 - beq _0801432C - ldr r1, _08014320 @ =gChosenMoveByBattler - lsls r0, r4, 1 - adds r0, r1 - strh r2, [r0] - ldrb r2, [r5] - ldr r0, _08014324 @ =gBattleStruct - ldr r1, [r0] - adds r1, r2, r1 - adds r1, 0x80 - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0xC] - strb r0, [r1] - ldr r1, _08014328 @ =gBattleCommunication - ldrb r0, [r5] - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] - bl _08014C78 - .align 2, 0 -_08014318: .4byte gDisableStructs -_0801431C: .4byte gActiveBattler -_08014320: .4byte gChosenMoveByBattler -_08014324: .4byte gBattleStruct -_08014328: .4byte gBattleCommunication -_0801432C: - add r2, sp, 0x4 - ldr r3, _080143CC @ =gBattleMons - movs r1, 0x58 - adds r0, r4, 0 - muls r0, r1 - adds r0, r3 - ldrh r0, [r0] - strh r0, [r2, 0x10] - ldrb r0, [r5] - muls r0, r1 - adds r0, r3 - adds r0, 0x21 - ldrb r0, [r0] - strb r0, [r2, 0x12] - ldrb r0, [r5] - muls r0, r1 - adds r0, r3 - adds r0, 0x22 - ldrb r0, [r0] - strb r0, [r2, 0x13] - movs r4, 0 - mov r1, sp - adds r1, 0xC - str r1, [sp, 0x18] - add r2, sp, 0x10 - mov r10, r2 - mov r8, r3 - adds r7, r5, 0 - movs r6, 0x58 - movs r3, 0xC - add r3, r8 - mov r9, r3 - add r5, sp, 0x4 -_0801436E: - lsls r2, r4, 1 - ldrb r0, [r7] - muls r0, r6 - adds r0, r2, r0 - add r0, r9 - ldrh r0, [r0] - strh r0, [r5] - ldr r0, [sp, 0x18] - adds r3, r0, r4 - ldrb r0, [r7] - muls r0, r6 - adds r0, r4, r0 - mov r1, r8 - adds r1, 0x24 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r3] - ldrb r0, [r7] - adds r1, r0, 0 - muls r1, r6 - adds r2, r1 - add r2, r9 - ldrh r0, [r2] - add r1, r8 - adds r1, 0x3B - ldrb r1, [r1] - lsls r2, r4, 24 - lsrs r2, 24 - bl CalculatePPWithBonus - mov r2, r10 - adds r1, r2, r4 - strb r0, [r1] - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _0801436E - ldr r0, _080143D0 @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x1 - ands r1, r0 - movs r0, 0 - movs r2, 0 - add r3, sp, 0x4 - bl BtlController_EmitChooseMove - b _0801460E - .align 2, 0 -_080143CC: .4byte gBattleMons -_080143D0: .4byte gBattleTypeFlags -_080143D4: - ldr r0, _08014410 @ =gBattleTypeFlags - ldr r0, [r0] - ldr r1, _08014414 @ =0x00000902 - ands r0, r1 - cmp r0, 0 - beq _08014428 - ldr r1, _08014418 @ =gSelectionBattleScripts - mov r3, r8 - ldrb r0, [r3] - lsls r0, 2 - adds r0, r1 - ldr r1, _0801441C @ =gUnknown_81D96A4 - str r1, [r0] - ldr r0, _08014420 @ =gBattleCommunication - ldrb r1, [r3] - adds r1, r0 - movs r3, 0 - movs r0, 0x5 - strb r0, [r1] - mov r0, r8 - ldrb r1, [r0] - ldr r2, _08014424 @ =gBattleStruct - ldr r0, [r2] - adds r1, r0 - adds r1, 0x54 - strb r3, [r1] - mov r1, r8 - ldrb r0, [r1] - b _0801472C - .align 2, 0 -_08014410: .4byte gBattleTypeFlags -_08014414: .4byte 0x00000902 -_08014418: .4byte gSelectionBattleScripts -_0801441C: .4byte gUnknown_81D96A4 -_08014420: .4byte gBattleCommunication -_08014424: .4byte gBattleStruct -_08014428: - ldr r2, _08014448 @ =gBattleStruct - ldr r4, _0801444C @ =gActiveBattler - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - adds r0, 0x60 - ldr r1, [r2] - adds r1, r0 - movs r0, 0 - bl BtlController_EmitChooseItem - ldrb r0, [r4] - bl MarkBattlerForControllerExec - b _080146AC - .align 2, 0 -_08014448: .4byte gBattleStruct -_0801444C: .4byte gActiveBattler -_08014450: - ldr r5, _080144A8 @ =gActiveBattler - ldrb r0, [r5] - ldr r3, _080144AC @ =gBattleStruct - ldr r1, [r3] - adds r1, r0, r1 - adds r1, 0x58 - ldr r2, _080144B0 @ =gBattlerPartyIndexes - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1] - ldr r7, _080144B4 @ =gBattleMons - ldrb r2, [r5] - movs r6, 0x58 - adds r0, r2, 0 - muls r0, r6 - adds r1, r7, 0 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080144B8 @ =0x0400e000 - ands r0, r1 - cmp r0, 0 - bne _08014492 - ldr r0, _080144BC @ =gStatuses3 - lsls r1, r2, 2 - adds r1, r0 - ldr r1, [r1] - movs r0, 0x80 - lsls r0, 3 - ands r1, r0 - cmp r1, 0 - beq _080144C0 -_08014492: - lsls r1, r2, 1 - adds r1, r2 - adds r1, 0x60 - ldr r0, [r3] - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x6 - b _080145DE - .align 2, 0 -_080144A8: .4byte gActiveBattler -_080144AC: .4byte gBattleStruct -_080144B0: .4byte gBattlerPartyIndexes -_080144B4: .4byte gBattleMons -_080144B8: .4byte 0x0400e000 -_080144BC: .4byte gStatuses3 -_080144C0: - str r1, [sp] - movs r0, 0xC - adds r1, r2, 0 - movs r2, 0x17 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08014548 - ldrb r1, [r5] - str r4, [sp] - movs r0, 0xC - movs r2, 0x47 - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _08014510 - ldrb r0, [r5] - muls r0, r6 - adds r1, r0, r7 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08014510 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08014510 - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1A - bne _08014548 -_08014510: - ldr r5, _08014574 @ =gActiveBattler - ldrb r1, [r5] - movs r0, 0 - str r0, [sp] - movs r0, 0xF - movs r2, 0x2A - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _08014584 - ldr r2, _08014578 @ =gBattleMons - ldrb r1, [r5] - movs r0, 0x58 - muls r0, r1 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x8 - beq _08014548 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x8 - bne _08014584 -_08014548: - subs r1, r4, 0x1 - lsls r1, 4 - movs r0, 0x4 - orrs r1, r0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _0801457C @ =gLastUsedAbility - ldrb r3, [r0] - ldr r4, _08014580 @ =gBattleStruct - ldr r0, _08014574 @ =gActiveBattler - ldrb r0, [r0] - lsls r2, r0, 1 - adds r2, r0 - adds r2, 0x60 - ldr r0, [r4] - adds r0, r2 - str r0, [sp] - movs r0, 0 - movs r2, 0x6 - bl BtlController_EmitChoosePokemon - b _0801460E - .align 2, 0 -_08014574: .4byte gActiveBattler -_08014578: .4byte gBattleMons -_0801457C: .4byte gLastUsedAbility -_08014580: .4byte gBattleStruct -_08014584: - ldr r0, _080145A8 @ =gActiveBattler - ldrb r1, [r0] - mov r8, r0 - cmp r1, 0x2 - bne _080145B4 - ldr r0, _080145AC @ =gChosenActionByBattler - ldrb r0, [r0] - cmp r0, 0x2 - bne _080145B4 - ldr r0, _080145B0 @ =gBattleStruct - ldr r3, [r0] - adds r0, r3, 0 - adds r0, 0x5C - ldrb r2, [r0] - mov r0, r8 - ldrb r1, [r0] - b _080145D0 - .align 2, 0 -_080145A8: .4byte gActiveBattler -_080145AC: .4byte gChosenActionByBattler -_080145B0: .4byte gBattleStruct -_080145B4: - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0x3 - bne _080145F0 - ldr r0, _080145E8 @ =gChosenActionByBattler - ldrb r0, [r0, 0x1] - cmp r0, 0x2 - bne _080145F0 - ldr r0, _080145EC @ =gBattleStruct - ldr r3, [r0] - adds r0, r3, 0 - adds r0, 0x5D - ldrb r2, [r0] - ldrb r1, [r1] -_080145D0: - lsls r0, r1, 1 - adds r0, r1 - adds r0, 0x60 - adds r3, r0 - str r3, [sp] - movs r0, 0 - movs r1, 0 -_080145DE: - movs r3, 0 - bl BtlController_EmitChoosePokemon - b _0801460E - .align 2, 0 -_080145E8: .4byte gChosenActionByBattler -_080145EC: .4byte gBattleStruct -_080145F0: - ldr r2, _08014618 @ =gBattleStruct - ldr r0, _0801461C @ =gActiveBattler - ldrb r0, [r0] - lsls r1, r0, 1 - adds r1, r0 - adds r1, 0x60 - ldr r0, [r2] - adds r0, r1 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0x6 - movs r3, 0 - bl BtlController_EmitChoosePokemon -_0801460E: - ldr r0, _0801461C @ =gActiveBattler - ldrb r0, [r0] - bl MarkBattlerForControllerExec - b _080146AC - .align 2, 0 -_08014618: .4byte gBattleStruct -_0801461C: .4byte gActiveBattler -_08014620: - bl IsPlayerPartyAndPokemonStorageFull - lsls r0, 24 - cmp r0, 0 - beq _080146AC - ldr r1, _0801465C @ =gSelectionBattleScripts - ldr r3, _08014660 @ =gActiveBattler - ldrb r0, [r3] - lsls r0, 2 - adds r0, r1 - ldr r1, _08014664 @ =gUnknown_81D8949 - str r1, [r0] - ldr r0, _08014668 @ =gBattleCommunication - ldrb r1, [r3] - adds r1, r0 - movs r4, 0 - movs r0, 0x5 - strb r0, [r1] - ldrb r1, [r3] - ldr r2, _0801466C @ =gBattleStruct - ldr r0, [r2] - adds r1, r0 - adds r1, 0x54 - strb r4, [r1] - ldrb r0, [r3] - ldr r1, [r2] - adds r0, r1 - adds r0, 0x84 - strb r4, [r0] - b _08014C78 - .align 2, 0 -_0801465C: .4byte gSelectionBattleScripts -_08014660: .4byte gActiveBattler -_08014664: .4byte gUnknown_81D8949 -_08014668: .4byte gBattleCommunication -_0801466C: .4byte gBattleStruct -_08014670: - ldr r4, _080146A8 @ =gBattleCommunication - mov r2, r8 - ldrb r1, [r2] - adds r1, r4 - movs r5, 0 - movs r0, 0x6 - strb r0, [r1] - ldrb r0, [r2] - bl GetBattlerPosition - movs r1, 0x2 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - adds r0, r4 - strb r5, [r0] - movs r0, 0 - bl BtlController_EmitEndBounceEffect - mov r3, r8 - ldrb r0, [r3] - bl MarkBattlerForControllerExec - b _08014C78 - .align 2, 0 -_080146A8: .4byte gBattleCommunication -_080146AC: - ldr r0, _080146D8 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0xA - ands r0, r1 - cmp r0, 0x8 - bne _080146EC - ldr r0, _080146DC @ =gBattleBufferB - ldr r4, _080146E0 @ =gActiveBattler - ldrb r1, [r4] - lsls r1, 9 - adds r0, 0x1 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x3 - bne _080146EC - ldr r0, _080146E4 @ =gUnknown_81D8924 - bl BattleScriptExecute - ldr r1, _080146E8 @ =gBattleCommunication - ldrb r0, [r4] - adds r0, r1 - b _08014926 - .align 2, 0 -_080146D8: .4byte gBattleTypeFlags -_080146DC: .4byte gBattleBufferB -_080146E0: .4byte gActiveBattler -_080146E4: .4byte gUnknown_81D8924 -_080146E8: .4byte gBattleCommunication -_080146EC: - bl IsRunningFromBattleImpossible - lsls r0, 24 - cmp r0, 0 - beq _08014750 - ldr r0, _08014738 @ =gBattleBufferB - ldr r4, _0801473C @ =gActiveBattler - ldrb r2, [r4] - lsls r1, r2, 9 - adds r0, 0x1 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x3 - bne _08014750 - ldr r1, _08014740 @ =gSelectionBattleScripts - lsls r0, r2, 2 - adds r0, r1 - ldr r1, _08014744 @ =gUnknown_81D8943 - str r1, [r0] - ldr r0, _08014748 @ =gBattleCommunication - ldrb r1, [r4] - adds r1, r0 - movs r3, 0 - movs r0, 0x5 - strb r0, [r1] - ldrb r1, [r4] - ldr r2, _0801474C @ =gBattleStruct - ldr r0, [r2] - adds r1, r0 - adds r1, 0x54 - strb r3, [r1] - ldrb r0, [r4] -_0801472C: - ldr r1, [r2] - adds r0, r1 - adds r0, 0x84 - strb r3, [r0] - b _08014C78 - .align 2, 0 -_08014738: .4byte gBattleBufferB -_0801473C: .4byte gActiveBattler -_08014740: .4byte gSelectionBattleScripts -_08014744: .4byte gUnknown_81D8943 -_08014748: .4byte gBattleCommunication -_0801474C: .4byte gBattleStruct -_08014750: - ldr r2, _0801475C @ =gBattleCommunication - ldr r0, _08014760 @ =gActiveBattler - ldrb r1, [r0] - adds r1, r2 - b _08014B32 - .align 2, 0 -_0801475C: .4byte gBattleCommunication -_08014760: .4byte gActiveBattler -_08014764: - ldr r4, _080147A8 @ =gBattleControllerExecFlags - ldr r1, _080147AC @ =gBitTable - ldr r3, _080147B0 @ =gActiveBattler - ldrb r5, [r3] - lsls r0, r5, 2 - adds r0, r1 - ldr r2, [r0] - lsls r0, r2, 4 - movs r1, 0xF0 - lsls r1, 24 - orrs r0, r1 - orrs r0, r2 - lsls r1, r2, 8 - orrs r0, r1 - lsls r2, 12 - orrs r0, r2 - ldr r1, [r4] - ands r1, r0 - mov r8, r3 - cmp r1, 0 - beq _08014790 - b _08014C4E -_08014790: - ldr r1, _080147B4 @ =gChosenActionByBattler - adds r0, r5, r1 - ldrb r0, [r0] - adds r3, r1, 0 - cmp r0, 0x9 - bls _0801479E - b _08014C4E -_0801479E: - lsls r0, 2 - ldr r1, _080147B8 @ =_080147BC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080147A8: .4byte gBattleControllerExecFlags -_080147AC: .4byte gBitTable -_080147B0: .4byte gActiveBattler -_080147B4: .4byte gChosenActionByBattler -_080147B8: .4byte _080147BC - .align 2, 0 -_080147BC: - .4byte _080147E4 - .4byte _080148D8 - .4byte _08014910 - .4byte _08014A08 - .4byte _08014A2C - .4byte _08014A40 - .4byte _08014A54 - .4byte _08014A54 - .4byte _08014A68 - .4byte _08014A8C -_080147E4: - ldr r0, _08014804 @ =gBattleBufferB - mov r1, r8 - ldrb r4, [r1] - lsls r1, r4, 9 - adds r2, r0, 0x1 - adds r1, r2 - ldrb r1, [r1] - adds r7, r0, 0 - cmp r1, 0x9 - bgt _08014808 - cmp r1, 0x3 - blt _08014808 - adds r0, r4, r3 - strb r1, [r0] - b _08014C78 - .align 2, 0 -_08014804: .4byte gBattleBufferB -_08014808: - adds r3, r7, 0 - mov r5, r8 - ldrb r4, [r5] - lsls r1, r4, 9 - adds r6, r3, 0x2 - adds r0, r1, r6 - ldrb r2, [r0] - adds r3, 0x3 - mov r9, r3 - add r1, r9 - ldrb r0, [r1] - lsls r0, 8 - orrs r2, r0 - ldr r0, _08014830 @ =0x0000ffff - cmp r2, r0 - bne _08014838 - ldr r0, _08014834 @ =gBattleCommunication - adds r0, r4, r0 - b _08014926 - .align 2, 0 -_08014830: .4byte 0x0000ffff -_08014834: .4byte gBattleCommunication -_08014838: - bl TrySetCantSelectMoveBattleScript - lsls r0, 24 - cmp r0, 0 - beq _0801487C - ldr r0, _08014874 @ =gBattleCommunication - ldrb r1, [r5] - adds r1, r0 - movs r3, 0 - movs r0, 0x5 - strb r0, [r1] - ldrb r1, [r5] - ldr r2, _08014878 @ =gBattleStruct - ldr r0, [r2] - adds r1, r0 - adds r1, 0x54 - strb r3, [r1] - ldrb r0, [r5] - lsls r0, 9 - adds r1, r7, 0x1 - adds r0, r1 - strb r3, [r0] - ldrb r1, [r5] - ldr r0, [r2] - adds r1, r0 - adds r1, 0x84 - movs r0, 0x1 - strb r0, [r1] - b _08014C78 - .align 2, 0 -_08014874: .4byte gBattleCommunication -_08014878: .4byte gBattleStruct -_0801487C: - mov r2, r8 - ldrb r0, [r2] - ldr r4, _080148C8 @ =gBattleStruct - ldr r1, [r4] - adds r1, r0, r1 - adds r1, 0x80 - lsls r0, 9 - adds r0, r6 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _080148CC @ =gChosenMoveByBattler - ldrb r2, [r2] - lsls r5, r2, 1 - adds r5, r0 - ldr r3, _080148D0 @ =gBattleMons - ldr r4, [r4] - adds r0, r2, r4 - adds r0, 0x80 - ldrb r0, [r0] - lsls r0, 1 - movs r1, 0x58 - muls r1, r2 - adds r0, r1 - adds r3, 0xC - adds r0, r3 - ldrh r0, [r0] - strh r0, [r5] - mov r3, r8 - ldrb r0, [r3] - adds r4, r0, r4 - lsls r0, 9 - add r0, r9 - ldrb r0, [r0] - strb r0, [r4, 0xC] - ldr r0, _080148D4 @ =gBattleCommunication - ldrb r1, [r3] - b _08014B30 - .align 2, 0 -_080148C8: .4byte gBattleStruct -_080148CC: .4byte gChosenMoveByBattler -_080148D0: .4byte gBattleMons -_080148D4: .4byte gBattleCommunication -_080148D8: - ldr r2, _08014900 @ =gBattleBufferB - ldr r5, _08014904 @ =gActiveBattler - ldrb r4, [r5] - lsls r1, r4, 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 - cmp r3, 0 - bne _080148F6 - b _08014C48 -_080148F6: - ldr r0, _08014908 @ =gLastUsedItem - strh r3, [r0] - ldr r0, _0801490C @ =gBattleCommunication - ldrb r1, [r5] - b _08014B30 - .align 2, 0 -_08014900: .4byte gBattleBufferB -_08014904: .4byte gActiveBattler -_08014908: .4byte gLastUsedItem -_0801490C: .4byte gBattleCommunication -_08014910: - ldr r6, _0801492C @ =gBattleBufferB - ldr r7, _08014930 @ =gActiveBattler - ldrb r2, [r7] - lsls r0, r2, 9 - adds r1, r6, 0x1 - adds r0, r1 - ldrb r1, [r0] - cmp r1, 0x6 - bne _08014938 - ldr r0, _08014934 @ =gBattleCommunication - adds r0, r2, r0 -_08014926: - movs r1, 0 - strb r1, [r0] - b _08014C4E - .align 2, 0 -_0801492C: .4byte gBattleBufferB -_08014930: .4byte gActiveBattler -_08014934: .4byte gBattleCommunication -_08014938: - ldr r0, _080149FC @ =gBattleStruct - mov r12, r0 - ldr r0, [r0] - adds r0, r2, r0 - adds r0, 0x5C - strb r1, [r0] - ldr r0, _08014A00 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080149F6 - ldrb r0, [r7] - mov r1, r12 - ldr r2, [r1] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0x60 - ldrb r2, [r1] - movs r0, 0xF - ands r0, r2 - strb r0, [r1] - ldrb r0, [r7] - mov r2, r12 - ldr r1, [r2] - lsls r2, r0, 1 - adds r2, r0 - adds r2, r1 - adds r2, 0x60 - lsls r0, 9 - adds r5, r6, 0x2 - adds r0, r5 - ldrb r1, [r0] - movs r3, 0xF0 - adds r0, r3, 0 - ands r0, r1 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r7] - mov r0, r12 - ldr r2, [r0] - lsls r0, r1, 1 - adds r0, r1 - adds r0, r2 - adds r0, 0x61 - lsls r1, 9 - adds r6, 0x3 - adds r1, r6 - ldrb r1, [r1] - strb r1, [r0] - ldrb r0, [r7] - movs r4, 0x2 - eors r0, r4 - mov r1, r12 - ldr r2, [r1] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0x60 - ldrb r2, [r1] - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1] - ldrb r0, [r7] - eors r0, r4 - mov r1, r12 - ldr r2, [r1] - lsls r1, r0, 1 - adds r1, r0 - adds r1, r2 - adds r1, 0x60 - ldrb r0, [r7] - lsls r0, 9 - adds r0, r5 - ldrb r0, [r0] - ands r3, r0 - lsrs r3, 4 - ldrb r0, [r1] - orrs r3, r0 - strb r3, [r1] - ldrb r0, [r7] - eors r4, r0 - mov r2, r12 - ldr r0, [r2] - lsls r1, r4, 1 - adds r1, r4 - adds r1, r0 - adds r1, 0x62 - ldrb r0, [r7] - lsls r0, 9 - adds r0, r6 - ldrb r0, [r0] - strb r0, [r1] -_080149F6: - ldr r0, _08014A04 @ =gBattleCommunication - ldrb r1, [r7] - b _08014B30 - .align 2, 0 -_080149FC: .4byte gBattleStruct -_08014A00: .4byte gBattleTypeFlags -_08014A04: .4byte gBattleCommunication -_08014A08: - ldr r2, _08014A20 @ =gHitMarker - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 8 - orrs r0, r1 - str r0, [r2] - ldr r2, _08014A24 @ =gBattleCommunication - ldr r0, _08014A28 @ =gActiveBattler - ldrb r1, [r0] - adds r1, r2 - b _08014B32 - .align 2, 0 -_08014A20: .4byte gHitMarker -_08014A24: .4byte gBattleCommunication -_08014A28: .4byte gActiveBattler -_08014A2C: - ldr r2, _08014A38 @ =gBattleCommunication - ldr r0, _08014A3C @ =gActiveBattler - ldrb r1, [r0] - adds r1, r2 - b _08014B32 - .align 2, 0 -_08014A38: .4byte gBattleCommunication -_08014A3C: .4byte gActiveBattler -_08014A40: - ldr r2, _08014A4C @ =gBattleCommunication - ldr r0, _08014A50 @ =gActiveBattler - ldrb r1, [r0] - adds r1, r2 - b _08014B32 - .align 2, 0 -_08014A4C: .4byte gBattleCommunication -_08014A50: .4byte gActiveBattler -_08014A54: - ldr r2, _08014A60 @ =gBattleCommunication - ldr r0, _08014A64 @ =gActiveBattler - ldrb r1, [r0] - adds r1, r2 - b _08014B32 - .align 2, 0 -_08014A60: .4byte gBattleCommunication -_08014A64: .4byte gActiveBattler -_08014A68: - ldr r2, _08014A80 @ =gHitMarker - ldr r0, [r2] - movs r1, 0x80 - lsls r1, 8 - orrs r0, r1 - str r0, [r2] - ldr r2, _08014A84 @ =gBattleCommunication - ldr r0, _08014A88 @ =gActiveBattler - ldrb r1, [r0] - adds r1, r2 - b _08014B32 - .align 2, 0 -_08014A80: .4byte gHitMarker -_08014A84: .4byte gBattleCommunication -_08014A88: .4byte gActiveBattler -_08014A8C: - ldr r2, _08014A98 @ =gBattleCommunication - ldr r0, _08014A9C @ =gActiveBattler - ldrb r1, [r0] - adds r1, r2 - b _08014B32 - .align 2, 0 -_08014A98: .4byte gBattleCommunication -_08014A9C: .4byte gActiveBattler -_08014AA0: - ldr r3, _08014B08 @ =gBattleControllerExecFlags - ldr r4, _08014B0C @ =gBitTable - ldr r0, _08014B10 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldr r2, [r0] - lsls r1, r2, 4 - movs r0, 0xF0 - lsls r0, 24 - orrs r1, r0 - orrs r1, r2 - lsls r0, r2, 8 - orrs r1, r0 - lsls r2, 12 - orrs r1, r2 - ldr r0, [r3] - ands r0, r1 - cmp r0, 0 - beq _08014ACA - b _08014C4E -_08014ACA: - ldr r0, _08014B14 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x41 - ands r0, r1 - cmp r0, 0x1 - bne _08014AFE - movs r1, 0x2 - movs r0, 0x2 - ands r0, r5 - cmp r0, 0 - bne _08014AFE - adds r0, r5, 0 - eors r0, r1 - bl GetBattlerAtPosition - ldr r1, _08014B18 @ =gBattleStruct - ldr r1, [r1] - adds r1, 0x91 - ldrb r1, [r1] - lsls r0, 24 - lsrs r0, 22 - adds r0, r4 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08014B1C -_08014AFE: - movs r0, 0 - movs r1, 0 - bl BtlController_EmitLinkStandbyMsg - b _08014B24 - .align 2, 0 -_08014B08: .4byte gBattleControllerExecFlags -_08014B0C: .4byte gBitTable -_08014B10: .4byte gActiveBattler -_08014B14: .4byte gBattleTypeFlags -_08014B18: .4byte gBattleStruct -_08014B1C: - movs r0, 0 - movs r1, 0x1 - bl BtlController_EmitLinkStandbyMsg -_08014B24: - ldr r4, _08014B3C @ =gActiveBattler -_08014B26: - ldrb r0, [r4] - bl MarkBattlerForControllerExec - ldr r0, _08014B40 @ =gBattleCommunication - ldrb r1, [r4] -_08014B30: - adds r1, r0 -_08014B32: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08014C4E - .align 2, 0 -_08014B3C: .4byte gActiveBattler -_08014B40: .4byte gBattleCommunication -_08014B44: - ldr r3, _08014B78 @ =gBattleControllerExecFlags - ldr r1, _08014B7C @ =gBitTable - ldr r0, _08014B80 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - lsls r1, r2, 4 - movs r0, 0xF0 - lsls r0, 24 - orrs r1, r0 - orrs r1, r2 - lsls r0, r2, 8 - orrs r1, r0 - lsls r2, 12 - orrs r1, r2 - ldr r0, [r3] - ands r0, r1 - cmp r0, 0 - bne _08014C4E - ldr r1, _08014B84 @ =gBattleCommunication - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _08014C4E - .align 2, 0 -_08014B78: .4byte gBattleControllerExecFlags -_08014B7C: .4byte gBitTable -_08014B80: .4byte gActiveBattler -_08014B84: .4byte gBattleCommunication -_08014B88: - ldr r5, _08014BA8 @ =gActiveBattler - ldrb r2, [r5] - ldr r0, _08014BAC @ =gBattleStruct - ldr r0, [r0] - adds r1, r2, r0 - adds r0, r1, 0 - adds r0, 0x54 - ldrb r0, [r0] - cmp r0, 0 - beq _08014BB4 - ldr r0, _08014BB0 @ =gBattleCommunication - adds r0, r2, r0 - adds r1, 0x84 - ldrb r1, [r1] - strb r1, [r0] - b _08014C4E - .align 2, 0 -_08014BA8: .4byte gActiveBattler -_08014BAC: .4byte gBattleStruct -_08014BB0: .4byte gBattleCommunication -_08014BB4: - ldr r0, _08014C08 @ =gBattlerAttacker - strb r2, [r0] - ldr r7, _08014C0C @ =gBattlescriptCurrInstr - ldr r6, _08014C10 @ =gSelectionBattleScripts - ldrb r0, [r5] - lsls r0, 2 - adds r0, r6 - ldr r4, [r0] - str r4, [r7] - ldr r3, _08014C14 @ =gBattleControllerExecFlags - ldr r1, _08014C18 @ =gBitTable - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - lsls r1, r2, 4 - movs r0, 0xF0 - lsls r0, 24 - orrs r1, r0 - orrs r1, r2 - lsls r0, r2, 8 - orrs r1, r0 - lsls r2, 12 - orrs r1, r2 - ldr r0, [r3] - ands r0, r1 - cmp r0, 0 - bne _08014BFA - ldr r0, _08014C1C @ =gBattleScriptingCommandsTable - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - bl _call_via_r0 -_08014BFA: - ldrb r0, [r5] - lsls r0, 2 - adds r0, r6 - ldr r1, [r7] - str r1, [r0] - b _08014C4E - .align 2, 0 -_08014C08: .4byte gBattlerAttacker -_08014C0C: .4byte gBattlescriptCurrInstr -_08014C10: .4byte gSelectionBattleScripts -_08014C14: .4byte gBattleControllerExecFlags -_08014C18: .4byte gBitTable -_08014C1C: .4byte gBattleScriptingCommandsTable -_08014C20: - ldr r3, _08014C88 @ =gBattleControllerExecFlags - ldr r1, _08014C8C @ =gBitTable - ldr r0, _08014C90 @ =gActiveBattler - ldrb r4, [r0] - lsls r0, r4, 2 - adds r0, r1 - ldr r2, [r0] - lsls r0, r2, 4 - movs r1, 0xF0 - lsls r1, 24 - orrs r0, r1 - orrs r0, r2 - lsls r1, r2, 8 - orrs r0, r1 - lsls r2, 12 - orrs r0, r2 - ldr r3, [r3] - ands r3, r0 - cmp r3, 0 - bne _08014C4E -_08014C48: - ldr r0, _08014C94 @ =gBattleCommunication - adds r0, r4, r0 - strb r3, [r0] -_08014C4E: - ldr r0, _08014C90 @ =gActiveBattler - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - ldr r0, _08014C98 @ =gBattlersCount - lsls r1, 24 - lsrs r1, 24 - adds r2, r0, 0 - ldrb r3, [r2] - cmp r1, r3 - bcs _08014C68 - bl _08014064 -_08014C68: - ldr r0, _08014C94 @ =gBattleCommunication - ldrb r0, [r0, 0x4] - ldrb r2, [r2] - cmp r0, r2 - bne _08014C78 - ldr r1, _08014C9C @ =gBattleMainFunc - ldr r0, _08014CA0 @ =sub_80150A8 - str r0, [r1] -_08014C78: - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08014C88: .4byte gBattleControllerExecFlags -_08014C8C: .4byte gBitTable -_08014C90: .4byte gActiveBattler -_08014C94: .4byte gBattleCommunication -_08014C98: .4byte gBattlersCount -_08014C9C: .4byte gBattleMainFunc -_08014CA0: .4byte sub_80150A8 - thumb_func_end sub_8014040 - - thumb_func_start SwapTurnOrder -SwapTurnOrder: @ 8014CA4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08014CD0 @ =gActionsByTurnOrder - adds r4, r0, r2 - ldrb r5, [r4] - adds r2, r1, r2 - ldrb r3, [r2] - strb r3, [r4] - strb r5, [r2] - ldr r2, _08014CD4 @ =gBattlerByTurnOrder - adds r0, r2 - ldrb r5, [r0] - adds r1, r2 - ldrb r2, [r1] - strb r2, [r0] - strb r5, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08014CD0: .4byte gActionsByTurnOrder -_08014CD4: .4byte gBattlerByTurnOrder - thumb_func_end SwapTurnOrder - - thumb_func_start GetWhoStrikesFirst -GetWhoStrikesFirst: @ 8014CD8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0xD - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _08014DA0 - ldr r1, [sp, 0x8] - str r1, [sp] - movs r0, 0x13 - movs r1, 0 - movs r2, 0x4D - movs r3, 0 - bl AbilityBattleEffects - lsls r0, 24 - cmp r0, 0 - bne _08014DA0 - ldr r1, _08014D58 @ =gBattleMons - movs r0, 0x58 - mov r2, r9 - muls r2, r0 - adds r0, r2, 0 - adds r0, r1 - adds r0, 0x20 - ldrb r3, [r0] - cmp r3, 0x21 - bne _08014D44 - ldr r0, _08014D5C @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - bne _08014D54 -_08014D44: - cmp r3, 0x22 - bne _08014D60 - ldr r0, _08014D5C @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - beq _08014D60 -_08014D54: - movs r3, 0x2 - b _08014D62 - .align 2, 0 -_08014D58: .4byte gBattleMons -_08014D5C: .4byte gBattleWeather -_08014D60: - movs r3, 0x1 -_08014D62: - movs r0, 0x58 - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - ldr r2, _08014D98 @ =gBattleMons - adds r0, r2 - adds r0, 0x20 - ldrb r2, [r0] - cmp r2, 0x21 - bne _08014D82 - ldr r0, _08014D9C @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - bne _08014D92 -_08014D82: - cmp r2, 0x22 - bne _08014DA2 - ldr r0, _08014D9C @ =gBattleWeather - ldrh r1, [r0] - movs r0, 0x60 - ands r0, r1 - cmp r0, 0 - beq _08014DA2 -_08014D92: - movs r7, 0x2 - b _08014DA4 - .align 2, 0 -_08014D98: .4byte gBattleMons -_08014D9C: .4byte gBattleWeather -_08014DA0: - movs r3, 0x1 -_08014DA2: - movs r7, 0x1 -_08014DA4: - ldr r1, _08014DE8 @ =gBattleMons - movs r0, 0x58 - mov r2, r9 - muls r2, r0 - adds r0, r2, 0 - adds r4, r0, r1 - ldrh r0, [r4, 0x6] - muls r3, r0 - ldr r2, _08014DEC @ =gStatStageRatios - movs r1, 0x1B - ldrsb r1, [r4, r1] - lsls r1, 1 - adds r0, r1, r2 - ldrb r0, [r0] - muls r0, r3 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - bl __divsi3 - mov r8, r0 - ldrh r0, [r4, 0x2E] - cmp r0, 0xAF - bne _08014DF4 - ldr r1, _08014DF0 @ =gEnigmaBerries - mov r3, r9 - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r6, [r0, 0x7] - ldrb r5, [r0, 0x1A] - b _08014E08 - .align 2, 0 -_08014DE8: .4byte gBattleMons -_08014DEC: .4byte gStatStageRatios -_08014DF0: .4byte gEnigmaBerries -_08014DF4: - ldrh r0, [r4, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r6, r0, 24 - ldrh r0, [r4, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r5, r0, 24 -_08014E08: - ldr r0, _08014EC4 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08014E3C - ldr r0, _08014EC8 @ =0x00000822 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _08014E3C - mov r0, r9 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08014E3C - movs r0, 0x6E - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - movs r1, 0x64 - bl __udivsi3 - mov r8, r0 -_08014E3C: - cmp r6, 0x18 - bne _08014E46 - mov r2, r8 - lsrs r2, 1 - mov r8, r2 -_08014E46: - ldr r1, _08014ECC @ =gBattleMons - movs r0, 0x58 - mov r3, r9 - muls r3, r0 - adds r0, r3, 0 - adds r1, 0x4C - adds r0, r1 - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08014E64 - mov r0, r8 - lsrs r0, 2 - mov r8, r0 -_08014E64: - cmp r6, 0x1A - bne _08014E80 - ldr r0, _08014ED0 @ =gUnknown_2023E80 - ldrh r4, [r0] - lsls r0, r5, 16 - subs r0, r5 - movs r1, 0x64 - bl __divsi3 - cmp r4, r0 - bge _08014E80 - movs r1, 0x1 - negs r1, r1 - mov r8, r1 -_08014E80: - ldr r1, _08014ECC @ =gBattleMons - movs r0, 0x58 - mov r2, r10 - muls r2, r0 - adds r0, r2, 0 - adds r4, r0, r1 - ldrh r0, [r4, 0x6] - adds r3, r0, 0 - muls r3, r7 - ldr r2, _08014ED4 @ =gStatStageRatios - movs r1, 0x1B - ldrsb r1, [r4, r1] - lsls r1, 1 - adds r0, r1, r2 - ldrb r0, [r0] - muls r0, r3 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - bl __divsi3 - adds r7, r0, 0 - ldrh r0, [r4, 0x2E] - cmp r0, 0xAF - bne _08014EDC - ldr r1, _08014ED8 @ =gEnigmaBerries - mov r3, r10 - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r6, [r0, 0x7] - ldrb r5, [r0, 0x1A] - b _08014EF0 - .align 2, 0 -_08014EC4: .4byte gBattleTypeFlags -_08014EC8: .4byte 0x00000822 -_08014ECC: .4byte gBattleMons -_08014ED0: .4byte gUnknown_2023E80 -_08014ED4: .4byte gStatStageRatios -_08014ED8: .4byte gEnigmaBerries -_08014EDC: - ldrh r0, [r4, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r6, r0, 24 - ldrh r0, [r4, 0x2E] - bl ItemId_GetHoldEffectParam - lsls r0, 24 - lsrs r5, r0, 24 -_08014EF0: - ldr r0, _08014F68 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08014F20 - ldr r0, _08014F6C @ =0x00000822 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _08014F20 - mov r0, r10 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08014F20 - movs r0, 0x6E - muls r0, r7 - movs r1, 0x64 - bl __udivsi3 - adds r7, r0, 0 -_08014F20: - cmp r6, 0x18 - bne _08014F26 - lsrs r7, 1 -_08014F26: - ldr r2, _08014F70 @ =gBattleMons - movs r0, 0x58 - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - adds r1, r2, 0 - adds r1, 0x4C - adds r0, r1 - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08014F42 - lsrs r7, 2 -_08014F42: - cmp r6, 0x1A - bne _08014F5C - ldr r0, _08014F74 @ =gUnknown_2023E80 - ldrh r4, [r0] - lsls r0, r5, 16 - subs r0, r5 - movs r1, 0x64 - bl __divsi3 - cmp r4, r0 - bge _08014F5C - movs r7, 0x1 - negs r7, r7 -_08014F5C: - ldr r2, [sp, 0x4] - cmp r2, 0 - beq _08014F78 - movs r3, 0 - b _08015014 - .align 2, 0 -_08014F68: .4byte gBattleTypeFlags -_08014F6C: .4byte 0x00000822 -_08014F70: .4byte gBattleMons -_08014F74: .4byte gUnknown_2023E80 -_08014F78: - ldr r0, _08014F98 @ =gChosenActionByBattler - mov r3, r9 - adds r1, r3, r0 - ldrb r1, [r1] - adds r2, r0, 0 - cmp r1, 0 - bne _08014FC8 - ldr r0, _08014F9C @ =gProtectStructs - lsls r1, r3, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 29 - cmp r0, 0 - bge _08014FA0 - movs r3, 0xA5 - b _08014FCA - .align 2, 0 -_08014F98: .4byte gChosenActionByBattler -_08014F9C: .4byte gProtectStructs -_08014FA0: - ldr r0, _08014FC0 @ =gBattleStruct - ldr r0, [r0] - add r0, r9 - adds r0, 0x80 - ldrb r0, [r0] - lsls r0, 1 - movs r1, 0x58 - mov r3, r9 - muls r3, r1 - adds r1, r3, 0 - adds r0, r1 - ldr r1, _08014FC4 @ =gBattleMons - adds r1, 0xC - adds r0, r1 - ldrh r3, [r0] - b _08014FCA - .align 2, 0 -_08014FC0: .4byte gBattleStruct -_08014FC4: .4byte gBattleMons -_08014FC8: - movs r3, 0 -_08014FCA: - mov r1, r10 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _08015014 - ldr r0, _08014FE8 @ =gProtectStructs - lsls r1, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 29 - cmp r0, 0 - bge _08014FEC - movs r2, 0xA5 - b _08015016 - .align 2, 0 -_08014FE8: .4byte gProtectStructs -_08014FEC: - ldr r0, _0801500C @ =gBattleStruct - ldr r0, [r0] - add r0, r10 - adds r0, 0x80 - ldrb r0, [r0] - lsls r0, 1 - movs r1, 0x58 - mov r2, r10 - muls r2, r1 - adds r1, r2, 0 - adds r0, r1 - ldr r1, _08015010 @ =gBattleMons - adds r1, 0xC - adds r0, r1 - ldrh r2, [r0] - b _08015016 - .align 2, 0 -_0801500C: .4byte gBattleStruct -_08015010: .4byte gBattleMons -_08015014: - movs r2, 0 -_08015016: - ldr r4, _08015060 @ =gBattleMoves - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r0, r4 - movs r1, 0x7 - ldrsb r1, [r0, r1] - lsls r3, r2, 1 - cmp r1, 0 - bne _0801503A - adds r0, r3, r2 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x7] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _08015078 -_0801503A: - adds r0, r3, r2 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x7] - lsls r0, 24 - asrs r0, 24 - cmp r1, r0 - bne _0801506E - cmp r8, r7 - bne _08015064 - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08015064 - movs r3, 0x2 - b _08015094 - .align 2, 0 -_08015060: .4byte gBattleMoves -_08015064: - cmp r8, r7 - bcs _08015096 - movs r0, 0x1 - str r0, [sp, 0x8] - b _08015096 -_0801506E: - cmp r1, r0 - bge _08015096 - movs r1, 0x1 - str r1, [sp, 0x8] - b _08015096 -_08015078: - cmp r8, r7 - bne _0801508E - bl Random - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0801508E - movs r2, 0x2 - str r2, [sp, 0x8] - b _08015096 -_0801508E: - cmp r8, r7 - bcs _08015096 - movs r3, 0x1 -_08015094: - str r3, [sp, 0x8] -_08015096: - ldr r0, [sp, 0x8] - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GetWhoStrikesFirst - - thumb_func_start sub_80150A8 -sub_80150A8: @ 80150A8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r3, 0 - ldr r0, _080150FC @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08015114 - ldr r0, _08015100 @ =gActiveBattler - strb r3, [r0] - ldr r4, _08015104 @ =gBattlersCount - mov r8, r0 - ldrb r0, [r4] - cmp r3, r0 - bcc _080150D0 - b _080152FA -_080150D0: - ldr r7, _08015108 @ =gActionsByTurnOrder - ldr r6, _0801510C @ =gChosenActionByBattler - mov r2, r8 - ldr r5, _08015110 @ =gBattlerByTurnOrder -_080150D8: - adds r1, r3, r7 - ldrb r0, [r2] - adds r0, r6 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r3, r5 - ldrb r0, [r2] - strb r0, [r1] - adds r3, 0x1 - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4] - cmp r0, r1 - bcc _080150D8 - b _080152FA - .align 2, 0 -_080150FC: .4byte gBattleTypeFlags -_08015100: .4byte gActiveBattler -_08015104: .4byte gBattlersCount -_08015108: .4byte gActionsByTurnOrder -_0801510C: .4byte gChosenActionByBattler -_08015110: .4byte gBattlerByTurnOrder -_08015114: - movs r0, 0x2 - ands r1, r0 - cmp r1, 0 - beq _08015164 - ldr r0, _08015158 @ =gActiveBattler - strb r3, [r0] - ldr r1, _0801515C @ =gBattlersCount - mov r8, r0 - adds r2, r1, 0 - ldrb r2, [r2] - cmp r3, r2 - bcs _08015174 - ldr r0, _08015160 @ =gChosenActionByBattler - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x3 - beq _08015172 -_08015136: - mov r7, r8 - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0801515C @ =gBattlersCount - ldrb r1, [r1] - cmp r0, r1 - bcs _08015174 - ldrb r0, [r7] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x3 - bne _08015136 - b _08015172 - .align 2, 0 -_08015158: .4byte gActiveBattler -_0801515C: .4byte gBattlersCount -_08015160: .4byte gChosenActionByBattler -_08015164: - ldr r0, _080151D8 @ =gChosenActionByBattler - ldrb r0, [r0] - ldr r2, _080151DC @ =gActiveBattler - mov r8, r2 - cmp r0, 0x3 - bne _08015174 - strb r3, [r2] -_08015172: - movs r3, 0x5 -_08015174: - cmp r3, 0x5 - bne _080151F8 - ldr r6, _080151E0 @ =gActionsByTurnOrder - ldr r1, _080151D8 @ =gChosenActionByBattler - mov r3, r8 - ldrb r0, [r3] - adds r0, r1 - ldrb r0, [r0] - strb r0, [r6] - ldr r2, _080151E4 @ =gBattlerByTurnOrder - ldrb r0, [r3] - strb r0, [r2] - movs r3, 0x1 - movs r5, 0 - adds r4, r1, 0 - ldr r7, _080151E8 @ =gBattleMainFunc - mov r10, r7 - ldr r0, _080151EC @ =CheckFocusPunch_ClearVarsBeforeTurnStarts - mov r12, r0 - ldr r1, _080151F0 @ =gBattleStruct - mov r9, r1 - ldr r7, _080151F4 @ =gBattlersCount - ldrb r7, [r7] - cmp r5, r7 - bge _080151CC - adds r7, r6, 0 - adds r6, r4, 0 - adds r4, r2, 0 - ldr r2, _080151F4 @ =gBattlersCount -_080151AE: - mov r0, r8 - ldrb r0, [r0] - cmp r5, r0 - beq _080151C4 - adds r1, r3, r7 - adds r0, r5, r6 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r3, r4 - strb r5, [r0] - adds r3, 0x1 -_080151C4: - adds r5, 0x1 - ldrb r1, [r2] - cmp r5, r1 - blt _080151AE -_080151CC: - mov r2, r12 - mov r3, r10 - str r2, [r3] - mov r7, r9 - ldr r0, [r7] - b _08015304 - .align 2, 0 -_080151D8: .4byte gChosenActionByBattler -_080151DC: .4byte gActiveBattler -_080151E0: .4byte gActionsByTurnOrder -_080151E4: .4byte gBattlerByTurnOrder -_080151E8: .4byte gBattleMainFunc -_080151EC: .4byte CheckFocusPunch_ClearVarsBeforeTurnStarts -_080151F0: .4byte gBattleStruct -_080151F4: .4byte gBattlersCount -_080151F8: - movs r0, 0 - mov r1, r8 - strb r0, [r1] - ldr r2, _08015288 @ =gBattlersCount - ldrb r0, [r2] - cmp r0, 0 - beq _0801523E - ldr r6, _0801528C @ =gChosenActionByBattler - mov r2, r8 - ldr r5, _08015290 @ =gActionsByTurnOrder - ldr r4, _08015294 @ =gBattlerByTurnOrder -_0801520E: - ldrb r0, [r2] - adds r0, r6 - ldrb r1, [r0] - subs r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0801522C - adds r0, r3, r5 - strb r1, [r0] - adds r1, r3, r4 - mov r7, r8 - ldrb r0, [r7] - strb r0, [r1] - adds r3, 0x1 -_0801522C: - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08015288 @ =gBattlersCount - ldrb r1, [r1] - cmp r0, r1 - bcc _0801520E -_0801523E: - movs r0, 0 - mov r2, r8 - strb r0, [r2] - ldr r7, _08015288 @ =gBattlersCount - ldrb r0, [r7] - cmp r0, 0 - beq _08015282 - ldr r6, _0801528C @ =gChosenActionByBattler - ldr r5, _08015290 @ =gActionsByTurnOrder - ldr r4, _08015294 @ =gBattlerByTurnOrder -_08015252: - ldrb r0, [r2] - adds r0, r6 - ldrb r1, [r0] - subs r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _08015270 - adds r0, r3, r5 - strb r1, [r0] - adds r1, r3, r4 - mov r7, r8 - ldrb r0, [r7] - strb r0, [r1] - adds r3, 0x1 -_08015270: - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08015288 @ =gBattlersCount - ldrb r1, [r1] - cmp r0, r1 - bcc _08015252 -_08015282: - movs r5, 0 - b _080152F0 - .align 2, 0 -_08015288: .4byte gBattlersCount -_0801528C: .4byte gChosenActionByBattler -_08015290: .4byte gActionsByTurnOrder -_08015294: .4byte gBattlerByTurnOrder -_08015298: - adds r4, r5, 0x1 - adds r7, r4, 0 - ldrb r1, [r1] - cmp r7, r1 - bge _080152EE - ldr r6, _08015318 @ =gActionsByTurnOrder - lsls r2, r5, 24 - mov r8, r2 -_080152A8: - ldr r0, _0801531C @ =gBattlerByTurnOrder - adds r1, r5, r0 - ldrb r3, [r1] - adds r0, r4, r0 - ldrb r1, [r0] - adds r0, r5, r6 - ldrb r2, [r0] - cmp r2, 0x1 - beq _080152E4 - adds r0, r4, r6 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080152E4 - cmp r2, 0x2 - beq _080152E4 - cmp r0, 0x2 - beq _080152E4 - adds r0, r3, 0 - movs r2, 0 - bl GetWhoStrikesFirst - lsls r0, 24 - cmp r0, 0 - beq _080152E4 - lsls r1, r4, 24 - lsrs r1, 24 - mov r3, r8 - lsrs r0, r3, 24 - bl SwapTurnOrder -_080152E4: - adds r4, 0x1 - ldr r0, _08015320 @ =gBattlersCount - ldrb r0, [r0] - cmp r4, r0 - blt _080152A8 -_080152EE: - adds r5, r7, 0 -_080152F0: - ldr r1, _08015320 @ =gBattlersCount - ldrb r0, [r1] - subs r0, 0x1 - cmp r5, r0 - blt _08015298 -_080152FA: - ldr r1, _08015324 @ =gBattleMainFunc - ldr r0, _08015328 @ =CheckFocusPunch_ClearVarsBeforeTurnStarts - str r0, [r1] - ldr r0, _0801532C @ =gBattleStruct - ldr r0, [r0] -_08015304: - adds r0, 0x48 - movs r1, 0 - strb r1, [r0] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08015318: .4byte gActionsByTurnOrder -_0801531C: .4byte gBattlerByTurnOrder -_08015320: .4byte gBattlersCount -_08015324: .4byte gBattleMainFunc -_08015328: .4byte CheckFocusPunch_ClearVarsBeforeTurnStarts -_0801532C: .4byte gBattleStruct - thumb_func_end sub_80150A8 - - thumb_func_start TurnValuesCleanUp -TurnValuesCleanUp: @ 8015330 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r1, _08015388 @ =gActiveBattler - movs r0, 0 - strb r0, [r1] - ldr r0, _0801538C @ =gBattlersCount - ldrb r2, [r0] - adds r5, r1, 0 - cmp r2, 0 - beq _08015428 - ldr r7, _08015390 @ =gProtectStructs - adds r6, r5, 0 - ldr r0, _08015394 @ =gUnknown_2023C34 - mov r12, r0 - ldr r1, _08015398 @ =gDisableStructs - mov r8, r1 - mov r10, r8 -_0801535E: - mov r2, r9 - cmp r2, 0 - beq _0801539C - ldrb r1, [r6] - lsls r1, 4 - adds r1, r7 - ldrb r2, [r1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r6] - lsls r1, 4 - adds r1, r7 - ldrb r2, [r1] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - b _080153F8 - .align 2, 0 -_08015388: .4byte gActiveBattler -_0801538C: .4byte gBattlersCount -_08015390: .4byte gProtectStructs -_08015394: .4byte gUnknown_2023C34 -_08015398: .4byte gDisableStructs -_0801539C: - ldrb r0, [r6] - lsls r0, 4 - adds r2, r0, r7 - movs r1, 0 - mov r4, r10 - movs r3, 0 -_080153A8: - adds r0, r2, r1 - strb r3, [r0] - adds r1, 0x1 - cmp r1, 0xF - bls _080153A8 - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r1, r0, r4 - ldrb r0, [r1, 0x16] - cmp r0, 0 - beq _080153C6 - subs r0, 0x1 - strb r0, [r1, 0x16] -_080153C6: - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r1, r0, r4 - ldrb r0, [r1, 0x19] - cmp r0, 0 - beq _080153F8 - subs r0, 0x1 - strb r0, [r1, 0x19] - ldrb r2, [r5] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x19] - cmp r0, 0 - bne _080153F8 - movs r0, 0x58 - muls r2, r0 - add r2, r12 - ldr r0, [r2] - ldr r1, _08015440 @ =0xffbfffff - ands r0, r1 - str r0, [r2] -_080153F8: - ldrb r2, [r5] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - add r0, r8 - ldrb r0, [r0, 0xA] - cmp r0, 0 - bne _08015416 - movs r0, 0x58 - muls r2, r0 - add r2, r12 - ldr r0, [r2] - ldr r1, _08015444 @ =0xfeffffff - ands r0, r1 - str r0, [r2] -_08015416: - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08015448 @ =gBattlersCount - ldrb r1, [r1] - cmp r0, r1 - bcc _0801535E -_08015428: - movs r0, 0 - ldr r2, _0801544C @ =gSideTimers - strb r0, [r2, 0x8] - strb r0, [r2, 0x14] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08015440: .4byte 0xffbfffff -_08015444: .4byte 0xfeffffff -_08015448: .4byte gBattlersCount -_0801544C: .4byte gSideTimers - thumb_func_end TurnValuesCleanUp - - thumb_func_start SpecialStatusesClear -SpecialStatusesClear: @ 8015450 - push {r4-r6,lr} - ldr r2, _08015494 @ =gActiveBattler - movs r0, 0 - strb r0, [r2] - ldr r0, _08015498 @ =gBattlersCount - ldrb r1, [r0] - adds r6, r0, 0 - cmp r1, 0 - beq _0801548E - adds r3, r2, 0 - movs r4, 0 - ldr r5, _0801549C @ =gSpecialStatuses -_08015468: - ldrb r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, r0, r5 - movs r1, 0 -_08015474: - adds r0, r2, r1 - strb r4, [r0] - adds r1, 0x1 - cmp r1, 0x13 - bls _08015474 - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r6] - cmp r0, r1 - bcc _08015468 -_0801548E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08015494: .4byte gActiveBattler -_08015498: .4byte gBattlersCount -_0801549C: .4byte gSpecialStatuses - thumb_func_end SpecialStatusesClear - - thumb_func_start CheckFocusPunch_ClearVarsBeforeTurnStarts -CheckFocusPunch_ClearVarsBeforeTurnStarts: @ 80154A0 - push {r4-r7,lr} - ldr r0, _08015528 @ =gHitMarker - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - bne _0801555E - ldr r2, _0801552C @ =gBattleStruct - ldr r0, [r2] - adds r0, 0x48 - ldr r1, _08015530 @ =gBattlersCount - ldrb r0, [r0] - mov r12, r2 - adds r6, r1, 0 - ldrb r1, [r6] - cmp r0, r1 - bcs _0801555E - ldr r5, _08015534 @ =gActiveBattler - ldr r4, _08015538 @ =gBattlerAttacker - movs r7, 0x84 - lsls r7, 1 -_080154CC: - ldr r1, [r2] - adds r1, 0x48 - ldrb r0, [r1] - strb r0, [r4] - strb r0, [r5] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r1, _0801553C @ =gChosenMoveByBattler - ldrb r3, [r5] - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r7 - bne _08015550 - ldr r1, _08015540 @ =gBattleMons - movs r0, 0x58 - muls r0, r3 - adds r1, 0x4C - adds r0, r1 - ldr r0, [r0] - movs r1, 0x7 - ands r0, r1 - cmp r0, 0 - bne _08015550 - ldr r2, _08015544 @ =gDisableStructs - ldrb r1, [r4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x18] - lsls r0, 31 - cmp r0, 0 - bne _08015550 - ldr r0, _08015548 @ =gProtectStructs - lsls r1, r3, 4 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 29 - cmp r0, 0 - blt _08015550 - ldr r0, _0801554C @ =gUnknown_81D9015 - bl BattleScriptExecute - b _08015598 - .align 2, 0 -_08015528: .4byte gHitMarker -_0801552C: .4byte gBattleStruct -_08015530: .4byte gBattlersCount -_08015534: .4byte gActiveBattler -_08015538: .4byte gBattlerAttacker -_0801553C: .4byte gChosenMoveByBattler -_08015540: .4byte gBattleMons -_08015544: .4byte gDisableStructs -_08015548: .4byte gProtectStructs -_0801554C: .4byte gUnknown_81D9015 -_08015550: - mov r2, r12 - ldr r0, [r2] - adds r0, 0x48 - ldrb r0, [r0] - ldrb r1, [r6] - cmp r0, r1 - bcc _080154CC -_0801555E: - bl TryClearRageStatuses - ldr r1, _080155A0 @ =gCurrentTurnActionNumber - movs r0, 0 - strb r0, [r1] - ldr r1, _080155A4 @ =gCurrentActionFuncId - ldr r0, _080155A8 @ =gActionsByTurnOrder - movs r3, 0 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _080155AC @ =gDynamicBasePower - movs r2, 0 - strh r3, [r0] - ldr r0, _080155B0 @ =gBattleStruct - ldr r0, [r0] - strb r2, [r0, 0x13] - ldr r1, _080155B4 @ =gBattleMainFunc - ldr r0, _080155B8 @ =RunTurnActionsFunctions - str r0, [r1] - ldr r0, _080155BC @ =gBattleCommunication - strb r2, [r0, 0x3] - strb r2, [r0, 0x4] - ldr r0, _080155C0 @ =gBattleScripting - strb r2, [r0, 0x16] - ldr r0, _080155C4 @ =gBattleResources - ldr r0, [r0] - ldr r0, [r0, 0x8] - adds r0, 0x20 - strb r2, [r0] -_08015598: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080155A0: .4byte gCurrentTurnActionNumber -_080155A4: .4byte gCurrentActionFuncId -_080155A8: .4byte gActionsByTurnOrder -_080155AC: .4byte gDynamicBasePower -_080155B0: .4byte gBattleStruct -_080155B4: .4byte gBattleMainFunc -_080155B8: .4byte RunTurnActionsFunctions -_080155BC: .4byte gBattleCommunication -_080155C0: .4byte gBattleScripting -_080155C4: .4byte gBattleResources - thumb_func_end CheckFocusPunch_ClearVarsBeforeTurnStarts - - thumb_func_start RunTurnActionsFunctions -RunTurnActionsFunctions: @ 80155C8 - push {r4-r6,lr} - ldr r6, _0801561C @ =gBattleOutcome - ldrb r0, [r6] - ldr r2, _08015620 @ =gCurrentActionFuncId - cmp r0, 0 - beq _080155D8 - movs r0, 0xC - strb r0, [r2] -_080155D8: - ldr r5, _08015624 @ =gBattleStruct - ldr r0, [r5] - adds r0, 0x4B - ldr r4, _08015628 @ =gCurrentTurnActionNumber - ldrb r1, [r4] - strb r1, [r0] - ldr r1, _0801562C @ =gUnknown_8250038 - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _08015630 @ =gBattlersCount - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bcc _08015644 - ldr r2, _08015634 @ =gHitMarker - ldr r0, [r2] - ldr r1, _08015638 @ =0xffefffff - ands r0, r1 - str r0, [r2] - ldr r3, _0801563C @ =gBattleMainFunc - ldr r2, _08015640 @ =gUnknown_8250070 - ldrb r1, [r6] - movs r0, 0x7F - ands r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - str r0, [r3] - b _0801565C - .align 2, 0 -_0801561C: .4byte gBattleOutcome -_08015620: .4byte gCurrentActionFuncId -_08015624: .4byte gBattleStruct -_08015628: .4byte gCurrentTurnActionNumber -_0801562C: .4byte gUnknown_8250038 -_08015630: .4byte gBattlersCount -_08015634: .4byte gHitMarker -_08015638: .4byte 0xffefffff -_0801563C: .4byte gBattleMainFunc -_08015640: .4byte gUnknown_8250070 -_08015644: - ldr r0, [r5] - adds r0, 0x4B - ldrb r0, [r0] - cmp r0, r1 - beq _0801565C - ldr r2, _08015664 @ =gHitMarker - ldr r0, [r2] - ldr r1, _08015668 @ =0xfffffdff - ands r0, r1 - ldr r1, _0801566C @ =0xfff7ffff - ands r0, r1 - str r0, [r2] -_0801565C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08015664: .4byte gHitMarker -_08015668: .4byte 0xfffffdff -_0801566C: .4byte 0xfff7ffff - thumb_func_end RunTurnActionsFunctions - - thumb_func_start sub_8015670 -sub_8015670: @ 8015670 - push {r4,lr} - ldr r1, _080156A8 @ =gCurrentActionFuncId - movs r0, 0 - strb r0, [r1] - ldr r0, _080156AC @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080156C4 - ldr r1, _080156B0 @ =gBattleTextBuff1 - ldr r4, _080156B4 @ =gBattleOutcome - ldrb r0, [r4] - strb r0, [r1] - movs r0, 0 - bl GetBattlerAtPosition - ldr r1, _080156B8 @ =gBattlerAttacker - strb r0, [r1] - ldr r1, _080156BC @ =gBattlescriptCurrInstr - ldr r0, _080156C0 @ =gUnknown_81D88CC - str r0, [r1] - ldrb r1, [r4] - movs r0, 0x7F - ands r0, r1 - strb r0, [r4] - b _0801576E - .align 2, 0 -_080156A8: .4byte gCurrentActionFuncId -_080156AC: .4byte gBattleTypeFlags -_080156B0: .4byte gBattleTextBuff1 -_080156B4: .4byte gBattleOutcome -_080156B8: .4byte gBattlerAttacker -_080156BC: .4byte gBattlescriptCurrInstr -_080156C0: .4byte gUnknown_81D88CC -_080156C4: - ldr r0, _080156E0 @ =0x00080900 - ands r0, r1 - cmp r0, 0 - beq _080156EC - bl BattleStopLowHpSound - movs r0, 0x9B - lsls r0, 1 - bl PlayBGM - ldr r1, _080156E4 @ =gBattlescriptCurrInstr - ldr r0, _080156E8 @ =gUnknown_81D88D7 - b _0801576C - .align 2, 0 -_080156E0: .4byte 0x00080900 -_080156E4: .4byte gBattlescriptCurrInstr -_080156E8: .4byte gUnknown_81D88D7 -_080156EC: - movs r0, 0xA - ands r1, r0 - cmp r1, 0x8 - bne _08015768 - bl BattleStopLowHpSound - ldr r1, _08015720 @ =gBattlescriptCurrInstr - ldr r0, _08015724 @ =gUnknown_81D87EF - str r0, [r1] - ldr r2, _08015728 @ =gTrainers - ldr r0, _0801572C @ =gTrainerBattleOpponent_A - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] - subs r0, 0x53 - cmp r0, 0x7 - bhi _0801575E - lsls r0, 2 - ldr r1, _08015730 @ =_08015734 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08015720: .4byte gBattlescriptCurrInstr -_08015724: .4byte gUnknown_81D87EF -_08015728: .4byte gTrainers -_0801572C: .4byte gTrainerBattleOpponent_A -_08015730: .4byte _08015734 - .align 2, 0 -_08015734: - .4byte _0801575E - .4byte _08015754 - .4byte _0801575E - .4byte _0801575E - .4byte _0801575E - .4byte _0801575E - .4byte _0801575E - .4byte _08015754 -_08015754: - movs r0, 0x9C - lsls r0, 1 - bl PlayBGM - b _0801576E -_0801575E: - movs r0, 0x9B - lsls r0, 1 - bl PlayBGM - b _0801576E -_08015768: - ldr r1, _0801577C @ =gBattlescriptCurrInstr - ldr r0, _08015780 @ =gUnknown_81D8803 -_0801576C: - str r0, [r1] -_0801576E: - ldr r1, _08015784 @ =gBattleMainFunc - ldr r0, _08015788 @ =sub_8015910 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801577C: .4byte gBattlescriptCurrInstr -_08015780: .4byte gUnknown_81D8803 -_08015784: .4byte gBattleMainFunc -_08015788: .4byte sub_8015910 - thumb_func_end sub_8015670 - - thumb_func_start sub_801578C -sub_801578C: @ 801578C - push {r4,lr} - ldr r1, _080157C4 @ =gCurrentActionFuncId - movs r0, 0 - strb r0, [r1] - ldr r0, _080157C8 @ =gBattleTypeFlags - ldr r1, [r0] - movs r4, 0x2 - adds r0, r1, 0 - ands r0, r4 - cmp r0, 0 - beq _080157E0 - ldr r1, _080157CC @ =gBattleTextBuff1 - ldr r4, _080157D0 @ =gBattleOutcome - ldrb r0, [r4] - strb r0, [r1] - movs r0, 0 - bl GetBattlerAtPosition - ldr r1, _080157D4 @ =gBattlerAttacker - strb r0, [r1] - ldr r1, _080157D8 @ =gBattlescriptCurrInstr - ldr r0, _080157DC @ =gUnknown_81D88CC - str r0, [r1] - ldrb r1, [r4] - movs r0, 0x7F - ands r0, r1 - strb r0, [r4] - b _08015830 - .align 2, 0 -_080157C4: .4byte gCurrentActionFuncId -_080157C8: .4byte gBattleTypeFlags -_080157CC: .4byte gBattleTextBuff1 -_080157D0: .4byte gBattleOutcome -_080157D4: .4byte gBattlerAttacker -_080157D8: .4byte gBattlescriptCurrInstr -_080157DC: .4byte gUnknown_81D88CC -_080157E0: - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - beq _08015824 - bl sub_80803CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x9 - bne _08015824 - bl sub_80803D8 - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0801580C - ldr r1, _08015808 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1, 0x5] - b _08015810 - .align 2, 0 -_08015808: .4byte gBattleCommunication -_0801580C: - ldr r0, _0801581C @ =gBattleCommunication - strb r4, [r0, 0x5] -_08015810: - movs r0, 0x1 - bl GetBattlerAtPosition - ldr r1, _08015820 @ =gBattlerAttacker - strb r0, [r1] - b _0801582A - .align 2, 0 -_0801581C: .4byte gBattleCommunication -_08015820: .4byte gBattlerAttacker -_08015824: - ldr r1, _0801583C @ =gBattleCommunication - movs r0, 0 - strb r0, [r1, 0x5] -_0801582A: - ldr r1, _08015840 @ =gBattlescriptCurrInstr - ldr r0, _08015844 @ =gUnknown_81D8806 - str r0, [r1] -_08015830: - ldr r1, _08015848 @ =gBattleMainFunc - ldr r0, _0801584C @ =sub_8015910 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801583C: .4byte gBattleCommunication -_08015840: .4byte gBattlescriptCurrInstr -_08015844: .4byte gUnknown_81D8806 -_08015848: .4byte gBattleMainFunc -_0801584C: .4byte sub_8015910 - thumb_func_end sub_801578C - - thumb_func_start sub_8015850 -sub_8015850: @ 8015850 - push {lr} - ldr r1, _08015878 @ =gCurrentActionFuncId - movs r0, 0 - strb r0, [r1] - ldr r1, _0801587C @ =gProtectStructs - ldr r0, _08015880 @ =gBattlerAttacker - ldrb r0, [r0] - lsls r0, 4 - adds r0, r1 - ldrb r0, [r0, 0x1] - lsls r0, 27 - lsrs r0, 30 - cmp r0, 0x1 - beq _0801588C - cmp r0, 0x2 - beq _0801589C - ldr r1, _08015884 @ =gBattlescriptCurrInstr - ldr r0, _08015888 @ =gUnknown_81D8916 - b _080158A0 - .align 2, 0 -_08015878: .4byte gCurrentActionFuncId -_0801587C: .4byte gProtectStructs -_08015880: .4byte gBattlerAttacker -_08015884: .4byte gBattlescriptCurrInstr -_08015888: .4byte gUnknown_81D8916 -_0801588C: - ldr r1, _08015894 @ =gBattlescriptCurrInstr - ldr r0, _08015898 @ =gUnknown_81D8901 - b _080158A0 - .align 2, 0 -_08015894: .4byte gBattlescriptCurrInstr -_08015898: .4byte gUnknown_81D8901 -_0801589C: - ldr r1, _080158AC @ =gBattlescriptCurrInstr - ldr r0, _080158B0 @ =gUnknown_81D890F -_080158A0: - str r0, [r1] - ldr r1, _080158B4 @ =gBattleMainFunc - ldr r0, _080158B8 @ =sub_8015910 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080158AC: .4byte gBattlescriptCurrInstr -_080158B0: .4byte gUnknown_81D890F -_080158B4: .4byte gBattleMainFunc -_080158B8: .4byte sub_8015910 - thumb_func_end sub_8015850 - - thumb_func_start sub_80158BC -sub_80158BC: @ 80158BC - ldr r1, _080158F0 @ =gCurrentActionFuncId - movs r0, 0 - strb r0, [r1] - ldr r1, _080158F4 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r1] - movs r0, 0x7 - strb r0, [r1, 0x1] - ldr r2, _080158F8 @ =gBattlerAttacker - ldrb r0, [r2] - strb r0, [r1, 0x2] - ldr r3, _080158FC @ =gBattlerPartyIndexes - 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, _08015900 @ =gBattlescriptCurrInstr - ldr r0, _08015904 @ =gUnknown_81D891D - str r0, [r1] - ldr r1, _08015908 @ =gBattleMainFunc - ldr r0, _0801590C @ =sub_8015910 - str r0, [r1] - bx lr - .align 2, 0 -_080158F0: .4byte gCurrentActionFuncId -_080158F4: .4byte gBattleTextBuff1 -_080158F8: .4byte gBattlerAttacker -_080158FC: .4byte gBattlerPartyIndexes -_08015900: .4byte gBattlescriptCurrInstr -_08015904: .4byte gUnknown_81D891D -_08015908: .4byte gBattleMainFunc -_0801590C: .4byte sub_8015910 - thumb_func_end sub_80158BC - - thumb_func_start sub_8015910 -sub_8015910: @ 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 @ =sub_8015A30 - 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 sub_8015A30 -_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 sub_8015910 - - thumb_func_start sub_8015A30 -sub_8015A30: @ 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 @ =sub_8015AA0 -_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 sub_8015AA0 -_08015A9C: .4byte gBattleTypeFlags - thumb_func_end sub_8015A30 - - thumb_func_start sub_8015AA0 -sub_8015AA0: @ 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 @ =sub_8015B30 - 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 sub_8015B30 -_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 sub_8015AA0 - - thumb_func_start sub_8015B30 -sub_8015B30: @ 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 @ =sub_8015AA0 - str r0, [r1] -_08015B42: - pop {r0} - bx r0 - .align 2, 0 -_08015B48: .4byte gMain -_08015B4C: .4byte BattleMainCB2 -_08015B50: .4byte gBattleMainFunc -_08015B54: .4byte sub_8015AA0 - thumb_func_end sub_8015B30 - - 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 sub_8015CA0 -sub_8015CA0: @ 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 sub_8015CA0 - - thumb_func_start sub_8016374 -sub_8016374: @ 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 sub_8016374 - - thumb_func_start sub_8016418 -sub_8016418: @ 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 @ =gUnknown_81D99B0 - 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 gUnknown_81D99B0 -_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 sub_8016418 - - 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 sub_80168A4 -sub_80168A4: @ 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 sub_80168A4 - - thumb_func_start sub_80169E8 -sub_80169E8: @ 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 @ =gUnknown_81D9A04 - 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 gUnknown_81D9A04 -_08016ABC: .4byte gCurrentActionFuncId - thumb_func_end sub_80169E8 - - thumb_func_start sub_8016AC0 -sub_8016AC0: @ 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 @ =gUnknown_81D99B0 - 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 gUnknown_81D99B0 -_08016B1C: .4byte gCurrentActionFuncId - thumb_func_end sub_8016AC0 - - thumb_func_start sub_8016B20 -sub_8016B20: @ 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 @ =gUnknown_81D9A04 - 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 gUnknown_81D9A04 -_08016BBC: .4byte gCurrentActionFuncId - thumb_func_end sub_8016B20 - - thumb_func_start sub_8016BC0 -sub_8016BC0: @ 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 @ =gUnknown_81D9A04 - 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 gUnknown_81D9A04 -_08016C5C: .4byte gCurrentActionFuncId - thumb_func_end sub_8016BC0 - - thumb_func_start HandleAction_SafriZoneRun -HandleAction_SafriZoneRun: @ 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_SafriZoneRun - - thumb_func_start HandleAction_Action9 -HandleAction_Action9: @ 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 @ =gUnknown_81D9A04 - 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 gUnknown_81D9A04 -_08016D0C: .4byte gCurrentActionFuncId -_08016D10: .4byte gActionsByTurnOrder - thumb_func_end HandleAction_Action9 - - thumb_func_start HandleAction_Action11 -HandleAction_Action11: @ 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_Action11 - - 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/battle_anim.s b/asm/battle_anim.s index d5e389807..d9471c9dd 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -281,9 +281,9 @@ _08072706: strh r1, [r0] ldr r0, _08072734 @ =gBattle_WIN0V strh r1, [r0] - ldr r0, _08072738 @ =gUnknown_2022988 + ldr r0, _08072738 @ =gBattle_WIN1H strh r1, [r0] - ldr r0, _0807273C @ =gUnknown_202298A + ldr r0, _0807273C @ =gBattle_WIN1V strh r1, [r0] add sp, 0x4 pop {r3-r5} @@ -298,8 +298,8 @@ _08072728: .4byte 0x0000ffff _0807272C: .4byte gMPlayInfo_BGM _08072730: .4byte gBattle_WIN0H _08072734: .4byte gBattle_WIN0V -_08072738: .4byte gUnknown_2022988 -_0807273C: .4byte gUnknown_202298A +_08072738: .4byte gBattle_WIN1H +_0807273C: .4byte gBattle_WIN1V thumb_func_end LaunchBattleAnimation thumb_func_start DestroyAnimSprite diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s index 67ac6a13e..24921239f 100644 --- a/asm/battle_anim_effects_2.s +++ b/asm/battle_anim_effects_2.s @@ -3902,7 +3902,7 @@ _080A8C60: subs r0, r4 strh r0, [r1] _080A8C6A: - ldr r1, _080A8C80 @ =sub_8075D9C + ldr r1, _080A8C80 @ =AnimSpriteOnMonPos str r1, [r6, 0x1C] adds r0, r6, 0 bl _call_via_r1 @@ -3912,7 +3912,7 @@ _080A8C6A: bx r0 .align 2, 0 _080A8C7C: .4byte gBattleAnimArgs -_080A8C80: .4byte sub_8075D9C +_080A8C80: .4byte AnimSpriteOnMonPos thumb_func_end sub_80A8BC4 thumb_func_start sub_80A8C84 @@ -4233,7 +4233,7 @@ _080A8F0E: adds r0, r4, 0 movs r1, 0x1 bl StartSpriteAffineAnim - ldr r1, _080A8F34 @ =sub_8075D9C + ldr r1, _080A8F34 @ =AnimSpriteOnMonPos str r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -4244,7 +4244,7 @@ _080A8F0E: _080A8F28: .4byte 0x000027db _080A8F2C: .4byte 0x01010000 _080A8F30: .4byte gBattleAnimArgs -_080A8F34: .4byte sub_8075D9C +_080A8F34: .4byte AnimSpriteOnMonPos thumb_func_end sub_80A8EE8 thumb_func_start sub_80A8F38 diff --git a/asm/battle_anim_effects_3.s b/asm/battle_anim_effects_3.s index 004ad8786..9c98d7f36 100644 --- a/asm/battle_anim_effects_3.s +++ b/asm/battle_anim_effects_3.s @@ -1481,11 +1481,11 @@ sub_80DEDD8: @ 80DEDD8 ldr r1, _080DEE14 @ =0x00001f3f movs r0, 0x48 bl SetGpuReg - ldr r1, _080DEE18 @ =gUnknown_2022988 + ldr r1, _080DEE18 @ =gBattle_WIN1H ldr r2, _080DEE1C @ =0x000098f0 adds r0, r2, 0 strh r0, [r1] - ldr r1, _080DEE20 @ =gUnknown_202298A + ldr r1, _080DEE20 @ =gBattle_WIN1V movs r0, 0xA0 strh r0, [r1] ldr r0, _080DEE24 @ =gBattle_WIN0H @@ -1499,19 +1499,19 @@ sub_80DEDD8: @ 80DEDD8 b _080DEE5C .align 2, 0 _080DEE14: .4byte 0x00001f3f -_080DEE18: .4byte gUnknown_2022988 +_080DEE18: .4byte gBattle_WIN1H _080DEE1C: .4byte 0x000098f0 -_080DEE20: .4byte gUnknown_202298A +_080DEE20: .4byte gBattle_WIN1V _080DEE24: .4byte gBattle_WIN0H _080DEE28: .4byte gBattle_WIN0V _080DEE2C: ldr r1, _080DEE68 @ =0x00001f3f movs r0, 0x48 bl SetGpuReg - ldr r1, _080DEE6C @ =gUnknown_2022988 + ldr r1, _080DEE6C @ =gBattle_WIN1H movs r0, 0xF0 strh r0, [r1] - ldr r4, _080DEE70 @ =gUnknown_202298A + ldr r4, _080DEE70 @ =gBattle_WIN1V ldr r1, _080DEE74 @ =0x000078a0 adds r0, r1, 0 strh r0, [r4] @@ -1533,8 +1533,8 @@ _080DEE5C: bx r0 .align 2, 0 _080DEE68: .4byte 0x00001f3f -_080DEE6C: .4byte gUnknown_2022988 -_080DEE70: .4byte gUnknown_202298A +_080DEE6C: .4byte gBattle_WIN1H +_080DEE70: .4byte gBattle_WIN1V _080DEE74: .4byte 0x000078a0 thumb_func_end sub_80DEDD8 @@ -1546,10 +1546,10 @@ sub_80DEE78: @ 80DEE78 ldr r1, _080DEEB0 @ =0x00003f3f movs r0, 0x48 bl SetGpuReg - ldr r0, _080DEEB4 @ =gUnknown_2022988 + ldr r0, _080DEEB4 @ =gBattle_WIN1H movs r1, 0 strh r1, [r0] - ldr r0, _080DEEB8 @ =gUnknown_202298A + ldr r0, _080DEEB8 @ =gBattle_WIN1V strh r1, [r0] bl IsContest lsls r0, 24 @@ -1567,8 +1567,8 @@ _080DEEA4: bx r0 .align 2, 0 _080DEEB0: .4byte 0x00003f3f -_080DEEB4: .4byte gUnknown_2022988 -_080DEEB8: .4byte gUnknown_202298A +_080DEEB4: .4byte gBattle_WIN1H +_080DEEB8: .4byte gBattle_WIN1V thumb_func_end sub_80DEE78 thumb_func_start sub_80DEEBC diff --git a/asm/battle_controller_oak.s b/asm/battle_controller_oak.s index 47230be60..1adc98b52 100644 --- a/asm/battle_controller_oak.s +++ b/asm/battle_controller_oak.s @@ -10,14 +10,14 @@ nullsub_81: @ 80E75AC bx lr thumb_func_end nullsub_81 - thumb_func_start SetControllerToOakOrOldman -SetControllerToOakOrOldman: @ 80E75B0 + thumb_func_start SetControllerToOakOrOldMan +SetControllerToOakOrOldMan: @ 80E75B0 ldr r1, _080E75DC @ =gBattlerControllerFuncs ldr r0, _080E75E0 @ =gActiveBattler ldrb r0, [r0] lsls r0, 2 adds r0, r1 - ldr r1, _080E75E4 @ =sub_80E75EC + ldr r1, _080E75E4 @ =OakOldManBufferRunCommand str r1, [r0] ldr r2, _080E75E8 @ =gBattleStruct ldr r0, [r2] @@ -37,12 +37,12 @@ SetControllerToOakOrOldman: @ 80E75B0 .align 2, 0 _080E75DC: .4byte gBattlerControllerFuncs _080E75E0: .4byte gActiveBattler -_080E75E4: .4byte sub_80E75EC +_080E75E4: .4byte OakOldManBufferRunCommand _080E75E8: .4byte gBattleStruct - thumb_func_end SetControllerToOakOrOldman + thumb_func_end SetControllerToOakOrOldMan - thumb_func_start sub_80E75EC -sub_80E75EC: @ 80E75EC + thumb_func_start OakOldManBufferRunCommand +OakOldManBufferRunCommand: @ 80E75EC push {lr} ldr r2, _080E7620 @ =gBattleControllerExecFlags ldr r1, _080E7624 @ =gBitTable @@ -61,7 +61,7 @@ sub_80E75EC: @ 80E75EC ldrb r0, [r1] cmp r0, 0x38 bhi _080E7634 - ldr r0, _080E7630 @ =gUnknown_84020F8 + ldr r0, _080E7630 @ =sOakOldManBufferCommands ldrb r1, [r1] lsls r1, 2 adds r1, r0 @@ -73,16 +73,16 @@ _080E7620: .4byte gBattleControllerExecFlags _080E7624: .4byte gBitTable _080E7628: .4byte gActiveBattler _080E762C: .4byte gBattleBufferA -_080E7630: .4byte gUnknown_84020F8 +_080E7630: .4byte sOakOldManBufferCommands _080E7634: - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E7638: pop {r0} bx r0 - thumb_func_end sub_80E75EC + thumb_func_end OakOldManBufferRunCommand - thumb_func_start sub_80E763C -sub_80E763C: @ 80E763C + thumb_func_start HandleInputChooseAction_tmp +HandleInputChooseAction_tmp: @ 80E763C push {r4-r7,lr} mov r7, r8 push {r7} @@ -318,7 +318,7 @@ _080E7814: movs r2, 0 bl BtlController_EmitTwoReturnValues _080E781A: - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080E7838 .align 2, 0 _080E7820: .4byte gBattleTypeFlags @@ -336,7 +336,7 @@ _080E7838: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_80E763C + thumb_func_end HandleInputChooseAction_tmp thumb_func_start sub_80E7844 sub_80E7844: @ 80E7844 @@ -411,15 +411,15 @@ _080E78B4: movs r1, 0x1 movs r2, 0 bl BtlController_EmitTwoReturnValues - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E78D8: pop {r4} pop {r0} bx r0 thumb_func_end sub_80E7844 - thumb_func_start sub_80E78E0 -sub_80E78E0: @ 80E78E0 + thumb_func_start CompleteOnBattlerSpriteCallbackDummy_tmp +CompleteOnBattlerSpriteCallbackDummy_tmp: @ 80E78E0 push {lr} ldr r2, _080E7908 @ =gSprites ldr r1, _080E790C @ =gBattlerSpriteIds @@ -436,7 +436,7 @@ sub_80E78E0: @ 80E78E0 ldr r0, _080E7914 @ =SpriteCallbackDummy cmp r1, r0 bne _080E7904 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E7904: pop {r0} bx r0 @@ -445,7 +445,7 @@ _080E7908: .4byte gSprites _080E790C: .4byte gBattlerSpriteIds _080E7910: .4byte gActiveBattler _080E7914: .4byte SpriteCallbackDummy - thumb_func_end sub_80E78E0 + thumb_func_end CompleteOnBattlerSpriteCallbackDummy_tmp thumb_func_start sub_80E7918 sub_80E7918: @ 80E7918 @@ -455,7 +455,7 @@ sub_80E7918: @ 80E7918 lsls r0, 16 cmp r0, 0 bne _080E792A - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E792A: pop {r0} bx r0 @@ -493,20 +493,20 @@ _080E7968: .4byte 0x00000439 _080E796C: .4byte gPreBattleCallback1 thumb_func_end sub_80E7930 - thumb_func_start sub_80E7970 -sub_80E7970: @ 80E7970 + thumb_func_start CompleteOnSpecialAnimDone_tmp +CompleteOnSpecialAnimDone_tmp: @ 80E7970 push {lr} ldr r0, _080E7984 @ =gDoingBattleAnim ldrb r0, [r0] cmp r0, 0 bne _080E797E - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E797E: pop {r0} bx r0 .align 2, 0 _080E7984: .4byte gDoingBattleAnim - thumb_func_end sub_80E7970 + thumb_func_end CompleteOnSpecialAnimDone_tmp thumb_func_start sub_80E7988 sub_80E7988: @ 80E7988 @@ -523,7 +523,7 @@ sub_80E7988: @ 80E7988 ands r1, r0 cmp r1, 0 bne _080E79A8 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E79A8: pop {r0} bx r0 @@ -533,8 +533,8 @@ _080E79B0: .4byte gBitTable _080E79B4: .4byte gActiveBattler thumb_func_end sub_80E7988 - thumb_func_start sub_80E79B8 -sub_80E79B8: @ 80E79B8 + thumb_func_start OpenPartyMenuToChooseMon_tmp +OpenPartyMenuToChooseMon_tmp: @ 80E79B8 push {r4,lr} ldr r0, _080E79FC @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -547,7 +547,7 @@ sub_80E79B8: @ 80E79B8 ldrb r0, [r2] lsls r0, 2 adds r0, r1 - ldr r1, _080E7A08 @ =sub_80E7A14 + ldr r1, _080E7A08 @ =WaitForMonSelection_tmp str r1, [r0] ldr r3, _080E7A0C @ =gTasks ldr r1, _080E7A10 @ =gUnknown_3004FFC @@ -571,13 +571,13 @@ _080E79F6: _080E79FC: .4byte gPaletteFade _080E7A00: .4byte gBattlerControllerFuncs _080E7A04: .4byte gActiveBattler -_080E7A08: .4byte sub_80E7A14 +_080E7A08: .4byte WaitForMonSelection_tmp _080E7A0C: .4byte gTasks _080E7A10: .4byte gUnknown_3004FFC - thumb_func_end sub_80E79B8 + thumb_func_end OpenPartyMenuToChooseMon_tmp - thumb_func_start sub_80E7A14 -sub_80E7A14: @ 80E7A14 + thumb_func_start WaitForMonSelection_tmp +WaitForMonSelection_tmp: @ 80E7A14 push {lr} ldr r0, _080E7A44 @ =gMain ldr r1, [r0, 0x4] @@ -613,14 +613,14 @@ _080E7A5C: movs r2, 0 bl BtlController_EmitChosenMonReturnValue _080E7A66: - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E7A6A: pop {r0} bx r0 - thumb_func_end sub_80E7A14 + thumb_func_end WaitForMonSelection_tmp - thumb_func_start sub_80E7A70 -sub_80E7A70: @ 80E7A70 + thumb_func_start OpenBagAndChooseItem_tmp +OpenBagAndChooseItem_tmp: @ 80E7A70 push {lr} ldr r0, _080E7AA8 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -633,7 +633,7 @@ sub_80E7A70: @ 80E7A70 ldrb r0, [r0] lsls r0, 2 adds r0, r1 - ldr r1, _080E7AB4 @ =sub_80E7AC4 + ldr r1, _080E7AB4 @ =CompleteWhenChoseItem_tmp str r1, [r0] bl nullsub_44 bl FreeAllWindowBuffers @@ -649,17 +649,17 @@ sub_80E7A70: @ 80E7A70 _080E7AA8: .4byte gPaletteFade _080E7AAC: .4byte gBattlerControllerFuncs _080E7AB0: .4byte gActiveBattler -_080E7AB4: .4byte sub_80E7AC4 +_080E7AB4: .4byte CompleteWhenChoseItem_tmp _080E7AB8: .4byte gBattleTypeFlags _080E7ABC: bl sub_810AF74 _080E7AC0: pop {r0} bx r0 - thumb_func_end sub_80E7A70 + thumb_func_end OpenBagAndChooseItem_tmp - thumb_func_start sub_80E7AC4 -sub_80E7AC4: @ 80E7AC4 + thumb_func_start CompleteWhenChoseItem_tmp +CompleteWhenChoseItem_tmp: @ 80E7AC4 push {lr} ldr r0, _080E7B14 @ =gMain ldr r1, [r0, 0x4] @@ -711,13 +711,13 @@ _080E7B34: ldrh r1, [r0] movs r0, 0x1 bl BtlController_EmitOneReturnValue - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E7B42: pop {r0} bx r0 .align 2, 0 _080E7B48: .4byte gSpecialVar_ItemId - thumb_func_end sub_80E7AC4 + thumb_func_end CompleteWhenChoseItem_tmp thumb_func_start sub_80E7B4C sub_80E7B4C: @ 80E7B4C @@ -1046,8 +1046,8 @@ _080E7DFC: .4byte gBattlerControllerFuncs _080E7E00: .4byte sub_80E835C thumb_func_end sub_80E7CD8 - thumb_func_start sub_80E7E04 -sub_80E7E04: @ 80E7E04 + thumb_func_start Task_GiveExpToMon_tmp +Task_GiveExpToMon_tmp: @ 80E7E04 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1167,7 +1167,7 @@ _080E7E4A: cmp r1, r0 bne _080E7F20 _080E7EFE: - ldr r0, _080E7F1C @ =sub_80E8190 + ldr r0, _080E7F1C @ =Task_LaunchLvlUpAnim_tmp b _080E7F62 .align 2, 0 _080E7F04: .4byte gTasks @@ -1176,7 +1176,7 @@ _080E7F0C: .4byte gPlayerParty _080E7F10: .4byte gExperienceTables _080E7F14: .4byte gBaseStats _080E7F18: .4byte gActiveBattler -_080E7F1C: .4byte sub_80E8190 +_080E7F1C: .4byte Task_LaunchLvlUpAnim_tmp _080E7F20: ldr r0, _080E7F30 @ =gTasks mov r2, r9 @@ -1184,11 +1184,11 @@ _080E7F20: add r1, r9 lsls r1, 3 adds r1, r0 - ldr r0, _080E7F34 @ =sub_80E82A8 + ldr r0, _080E7F34 @ =DestroyExpTaskAndCompleteOnInactiveTextPrinter_tmp b _080E7F64 .align 2, 0 _080E7F30: .4byte gTasks -_080E7F34: .4byte sub_80E82A8 +_080E7F34: .4byte DestroyExpTaskAndCompleteOnInactiveTextPrinter_tmp _080E7F38: str r0, [sp, 0x4] add r2, sp, 0x4 @@ -1199,16 +1199,16 @@ _080E7F38: ldr r3, [sp, 0x8] lsls r0, r3, 2 adds r0, r1 - ldr r1, _080E7F5C @ =sub_80E8930 + ldr r1, _080E7F5C @ =CompleteOnInactiveTextPrinter_tmp str r1, [r0] mov r0, r9 bl DestroyTask b _080E7F66 .align 2, 0 _080E7F58: .4byte gBattlerControllerFuncs -_080E7F5C: .4byte sub_80E8930 +_080E7F5C: .4byte CompleteOnInactiveTextPrinter_tmp _080E7F60: - ldr r0, _080E7F78 @ =sub_80E7F7C + ldr r0, _080E7F78 @ =Task_PrepareToGiveExpWithExpBar_tmp _080E7F62: mov r1, r8 _080E7F64: @@ -1223,11 +1223,11 @@ _080E7F66: pop {r0} bx r0 .align 2, 0 -_080E7F78: .4byte sub_80E7F7C - thumb_func_end sub_80E7E04 +_080E7F78: .4byte Task_PrepareToGiveExpWithExpBar_tmp + thumb_func_end Task_GiveExpToMon_tmp - thumb_func_start sub_80E7F7C -sub_80E7F7C: @ 80E7F7C + thumb_func_start Task_PrepareToGiveExpWithExpBar_tmp +Task_PrepareToGiveExpWithExpBar_tmp: @ 80E7F7C push {r4-r6,lr} mov r6, r10 mov r5, r9 @@ -1322,7 +1322,7 @@ _080E803C: .4byte gExperienceTables _080E8040: .4byte gBaseStats _080E8044: .4byte gHealthboxSpriteIds _080E8048: .4byte sub_80E804C - thumb_func_end sub_80E7F7C + thumb_func_end Task_PrepareToGiveExpWithExpBar_tmp thumb_func_start sub_80E804C sub_80E804C: @ 80E804C @@ -1439,7 +1439,7 @@ _080E807C: movs r1, 0xB bl BtlController_EmitTwoReturnValues strb r5, [r4] - ldr r0, _080E8158 @ =sub_80E8190 + ldr r0, _080E8158 @ =Task_LaunchLvlUpAnim_tmp str r0, [r6] b _080E8178 .align 2, 0 @@ -1448,7 +1448,7 @@ _080E8148: .4byte gPlayerParty _080E814C: .4byte gExperienceTables _080E8150: .4byte gBaseStats _080E8154: .4byte gActiveBattler -_080E8158: .4byte sub_80E8190 +_080E8158: .4byte Task_LaunchLvlUpAnim_tmp _080E815C: str r0, [sp, 0x4] add r2, sp, 0x4 @@ -1458,7 +1458,7 @@ _080E815C: ldr r1, _080E8188 @ =gBattlerControllerFuncs lsls r0, r7, 2 adds r0, r1 - ldr r1, _080E818C @ =sub_80E8930 + ldr r1, _080E818C @ =CompleteOnInactiveTextPrinter_tmp str r1, [r0] mov r0, r8 bl DestroyTask @@ -1473,11 +1473,11 @@ _080E8178: bx r0 .align 2, 0 _080E8188: .4byte gBattlerControllerFuncs -_080E818C: .4byte sub_80E8930 +_080E818C: .4byte CompleteOnInactiveTextPrinter_tmp thumb_func_end sub_80E804C - thumb_func_start sub_80E8190 -sub_80E8190: @ 80E8190 + thumb_func_start Task_LaunchLvlUpAnim_tmp +Task_LaunchLvlUpAnim_tmp: @ 80E8190 push {r4-r6,lr} lsls r0, 24 lsrs r5, r0, 24 @@ -1514,7 +1514,7 @@ _080E81C4: adds r1, r5 lsls r1, 3 adds r1, r0 - ldr r0, _080E81EC @ =sub_80E81F0 + ldr r0, _080E81EC @ =Task_UpdateLvlInHealthbox_tmp str r0, [r1] pop {r4-r6} pop {r0} @@ -1522,11 +1522,11 @@ _080E81C4: .align 2, 0 _080E81E4: .4byte gTasks _080E81E8: .4byte gBattlerPartyIndexes -_080E81EC: .4byte sub_80E81F0 - thumb_func_end sub_80E8190 +_080E81EC: .4byte Task_UpdateLvlInHealthbox_tmp + thumb_func_end Task_LaunchLvlUpAnim_tmp - thumb_func_start sub_80E81F0 -sub_80E81F0: @ 80E81F0 + thumb_func_start Task_UpdateLvlInHealthbox_tmp +Task_UpdateLvlInHealthbox_tmp: @ 80E81F0 push {r4-r7,lr} lsls r0, 24 lsrs r6, r0, 24 @@ -1600,7 +1600,7 @@ _080E8284: adds r1, r6 lsls r1, 3 adds r1, r0 - ldr r0, _080E82A4 @ =sub_80E82A8 + ldr r0, _080E82A4 @ =DestroyExpTaskAndCompleteOnInactiveTextPrinter_tmp str r0, [r1] _080E8292: pop {r4-r7} @@ -1610,11 +1610,11 @@ _080E8292: _080E8298: .4byte gHealthboxSpriteIds _080E829C: .4byte gPlayerParty _080E82A0: .4byte gTasks -_080E82A4: .4byte sub_80E82A8 - thumb_func_end sub_80E81F0 +_080E82A4: .4byte DestroyExpTaskAndCompleteOnInactiveTextPrinter_tmp + thumb_func_end Task_UpdateLvlInHealthbox_tmp - thumb_func_start sub_80E82A8 -sub_80E82A8: @ 80E82A8 + thumb_func_start DestroyExpTaskAndCompleteOnInactiveTextPrinter_tmp +DestroyExpTaskAndCompleteOnInactiveTextPrinter_tmp: @ 80E82A8 push {r4,r5,lr} adds r5, r0, 0 lsls r5, 24 @@ -1635,7 +1635,7 @@ sub_80E82A8: @ 80E82A8 ldr r1, _080E82EC @ =gBattlerControllerFuncs lsls r0, 2 adds r0, r1 - ldr r1, _080E82F0 @ =sub_80E8930 + ldr r1, _080E82F0 @ =CompleteOnInactiveTextPrinter_tmp str r1, [r0] adds r0, r5, 0 bl DestroyTask @@ -1646,8 +1646,8 @@ sub_80E82A8: @ 80E82A8 _080E82E4: .4byte gTasks _080E82E8: .4byte gPlayerParty _080E82EC: .4byte gBattlerControllerFuncs -_080E82F0: .4byte sub_80E8930 - thumb_func_end sub_80E82A8 +_080E82F0: .4byte CompleteOnInactiveTextPrinter_tmp + thumb_func_end DestroyExpTaskAndCompleteOnInactiveTextPrinter_tmp thumb_func_start sub_80E82F4 sub_80E82F4: @ 80E82F4 @@ -1686,7 +1686,7 @@ sub_80E82F4: @ 80E82F4 adds r0, r1 ldrb r0, [r0] bl SetHealthboxSpriteInvisible - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E8344: pop {r4-r6} pop {r0} @@ -1933,7 +1933,7 @@ _080E8530: ldr r0, [r0] adds r0, 0x94 strb r4, [r0] - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E855E: add sp, 0x4 pop {r4-r7} @@ -2128,7 +2128,7 @@ _080E86B4: lsls r0, 24 cmp r0, 0 bne _080E86E0 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080E86E4 .align 2, 0 _080E86D8: .4byte gPaletteFade @@ -2345,7 +2345,7 @@ _080E8880: ldrh r1, [r0] movs r0, 0x1 bl BtlController_EmitOneReturnValue - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted ldr r0, _080E88BC @ =gBattleStruct ldr r0, [r0] adds r0, 0x94 @@ -2405,7 +2405,7 @@ _080E8908: ldr r2, _080E892C @ =gPlayerParty adds r0, r2 bl HandleLowHpMusicChange - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E8922: pop {r4-r6} pop {r0} @@ -2415,22 +2415,22 @@ _080E8928: .4byte gBattlerPartyIndexes _080E892C: .4byte gPlayerParty thumb_func_end sub_80E88C0 - thumb_func_start sub_80E8930 -sub_80E8930: @ 80E8930 + thumb_func_start CompleteOnInactiveTextPrinter_tmp +CompleteOnInactiveTextPrinter_tmp: @ 80E8930 push {lr} movs r0, 0 bl IsTextPrinterActive lsls r0, 16 cmp r0, 0 bne _080E8942 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E8942: pop {r0} bx r0 - thumb_func_end sub_80E8930 + thumb_func_end CompleteOnInactiveTextPrinter_tmp - thumb_func_start DoHitAnimBlinkSpriteEffect_3 -DoHitAnimBlinkSpriteEffect_3: @ 80E8948 + thumb_func_start DoHitAnimBlinkSpriteEffect_tmp +DoHitAnimBlinkSpriteEffect_tmp: @ 80E8948 push {r4,lr} ldr r1, _080E8984 @ =gBattlerSpriteIds ldr r0, _080E8988 @ =gActiveBattler @@ -2457,7 +2457,7 @@ DoHitAnimBlinkSpriteEffect_3: @ 80E8948 strb r0, [r2] ldr r0, _080E8990 @ =gDoingBattleAnim strb r3, [r0] - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080E89BE .align 2, 0 _080E8984: .4byte gBattlerSpriteIds @@ -2491,7 +2491,7 @@ _080E89BE: pop {r4} pop {r0} bx r0 - thumb_func_end DoHitAnimBlinkSpriteEffect_3 + thumb_func_end DoHitAnimBlinkSpriteEffect_tmp thumb_func_start sub_80E89C4 sub_80E89C4: @ 80E89C4 @@ -2532,7 +2532,7 @@ sub_80E89C4: @ 80E89C4 adds r0, r1 ldrb r0, [r0] bl SetHealthboxSpriteInvisible - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E8A18: pop {r4-r6} pop {r0} @@ -2563,7 +2563,7 @@ sub_80E8A34: @ 80E8A34 ldr r0, _080E8A68 @ =SpriteCallbackDummy cmp r1, r0 bne _080E8A58 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E8A58: pop {r0} bx r0 @@ -2574,8 +2574,8 @@ _080E8A64: .4byte gActiveBattler _080E8A68: .4byte SpriteCallbackDummy thumb_func_end sub_80E8A34 - thumb_func_start CompleteOnFinishedBattleAnimation_4 -CompleteOnFinishedBattleAnimation_4: @ 80E8A6C + thumb_func_start CompleteOnFinishedBattleAnimation_tmp +CompleteOnFinishedBattleAnimation_tmp: @ 80E8A6C push {lr} ldr r0, _080E8A94 @ =gBattleSpritesDataPtr ldr r2, [r0] @@ -2591,17 +2591,17 @@ CompleteOnFinishedBattleAnimation_4: @ 80E8A6C ands r0, r1 cmp r0, 0 bne _080E8A8E - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E8A8E: pop {r0} bx r0 .align 2, 0 _080E8A94: .4byte gBattleSpritesDataPtr _080E8A98: .4byte gActiveBattler - thumb_func_end CompleteOnFinishedBattleAnimation_4 + thumb_func_end CompleteOnFinishedBattleAnimation_tmp - thumb_func_start WallyBufferExecCompleted -WallyBufferExecCompleted: @ 80E8A9C + thumb_func_start OakOldManBufferExecCompleted +OakOldManBufferExecCompleted: @ 80E8A9C push {r4,lr} sub sp, 0x4 ldr r1, _080E8ADC @ =gBattlerControllerFuncs @@ -2609,7 +2609,7 @@ WallyBufferExecCompleted: @ 80E8A9C ldrb r0, [r4] lsls r0, 2 adds r0, r1 - ldr r1, _080E8AE4 @ =sub_80E75EC + ldr r1, _080E8AE4 @ =OakOldManBufferRunCommand str r1, [r0] ldr r0, _080E8AE8 @ =gBattleTypeFlags ldr r0, [r0] @@ -2634,7 +2634,7 @@ WallyBufferExecCompleted: @ 80E8A9C .align 2, 0 _080E8ADC: .4byte gBattlerControllerFuncs _080E8AE0: .4byte gActiveBattler -_080E8AE4: .4byte sub_80E75EC +_080E8AE4: .4byte OakOldManBufferRunCommand _080E8AE8: .4byte gBattleTypeFlags _080E8AEC: .4byte gBattleBufferA _080E8AF0: @@ -2655,10 +2655,10 @@ _080E8B02: .align 2, 0 _080E8B0C: .4byte gBattleControllerExecFlags _080E8B10: .4byte gBitTable - thumb_func_end WallyBufferExecCompleted + thumb_func_end OakOldManBufferExecCompleted - thumb_func_start CompleteOnFinishedStatusAnimation_4 -CompleteOnFinishedStatusAnimation_4: @ 80E8B14 + thumb_func_start CompleteOnFinishedStatusAnimation_tmp +CompleteOnFinishedStatusAnimation_tmp: @ 80E8B14 push {lr} ldr r0, _080E8B3C @ =gBattleSpritesDataPtr ldr r2, [r0] @@ -2674,17 +2674,17 @@ CompleteOnFinishedStatusAnimation_4: @ 80E8B14 ands r0, r1 cmp r0, 0 bne _080E8B36 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E8B36: pop {r0} bx r0 .align 2, 0 _080E8B3C: .4byte gBattleSpritesDataPtr _080E8B40: .4byte gActiveBattler - thumb_func_end CompleteOnFinishedStatusAnimation_4 + thumb_func_end CompleteOnFinishedStatusAnimation_tmp - thumb_func_start WallyHandleGetMonData -WallyHandleGetMonData: @ 80E8B44 + thumb_func_start OakOldManHandleGetMonData +OakOldManHandleGetMonData: @ 80E8B44 push {r4-r6,lr} sub sp, 0x100 movs r6, 0 @@ -2702,7 +2702,7 @@ WallyHandleGetMonData: @ 80E8B44 adds r1, r0 ldrb r0, [r1] mov r1, sp - bl CopyWallyMonData + bl CopyOakOldManMonData adds r6, r0, 0 b _080E8B9E .align 2, 0 @@ -2721,7 +2721,7 @@ _080E8B80: lsrs r0, 24 mov r2, sp adds r1, r2, r6 - bl CopyWallyMonData + bl CopyOakOldManMonData adds r6, r0 _080E8B96: lsrs r4, 1 @@ -2734,15 +2734,15 @@ _080E8B9E: movs r0, 0x1 mov r2, sp bl BtlController_EmitDataTransfer - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted add sp, 0x100 pop {r4-r6} pop {r0} bx r0 - thumb_func_end WallyHandleGetMonData + thumb_func_end OakOldManHandleGetMonData - thumb_func_start CopyWallyMonData -CopyWallyMonData: @ 80E8BB8 + thumb_func_start CopyOakOldManMonData +CopyOakOldManMonData: @ 80E8BB8 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -3673,18 +3673,18 @@ _080E934E: bx r1 .align 2, 0 _080E9360: .4byte gPlayerParty - thumb_func_end CopyWallyMonData + thumb_func_end CopyOakOldManMonData - thumb_func_start WallyHandleGetRawMonData -WallyHandleGetRawMonData: @ 80E9364 + thumb_func_start OakOldManHandleGetRawMonData +OakOldManHandleGetRawMonData: @ 80E9364 push {lr} bl PlayerHandleGetRawMonData pop {r0} bx r0 - thumb_func_end WallyHandleGetRawMonData + thumb_func_end OakOldManHandleGetRawMonData - thumb_func_start WallyHandleSetMonData -WallyHandleSetMonData: @ 80E9370 + thumb_func_start OakOldManHandleSetMonData +OakOldManHandleSetMonData: @ 80E9370 push {r4,r5,lr} ldr r1, _080E9394 @ =gBattleBufferA ldr r0, _080E9398 @ =gActiveBattler @@ -3699,7 +3699,7 @@ WallyHandleSetMonData: @ 80E9370 lsls r1, r2, 1 adds r1, r0 ldrb r0, [r1] - bl SetWallyMonData + bl SetOakOldManMonData b _080E93BE .align 2, 0 _080E9394: .4byte gBattleBufferA @@ -3714,7 +3714,7 @@ _080E93A4: cmp r0, 0 beq _080E93B2 adds r0, r5, 0 - bl SetWallyMonData + bl SetOakOldManMonData _080E93B2: lsrs r4, 1 adds r0, r5, 0x1 @@ -3723,14 +3723,14 @@ _080E93B2: cmp r5, 0x5 bls _080E93A4 _080E93BE: - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r4,r5} pop {r0} bx r0 - thumb_func_end WallyHandleSetMonData + thumb_func_end OakOldManHandleSetMonData - thumb_func_start SetWallyMonData -SetWallyMonData: @ 80E93C8 + thumb_func_start SetOakOldManMonData +SetOakOldManMonData: @ 80E93C8 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -3742,7 +3742,7 @@ SetWallyMonData: @ 80E93C8 ldr r0, _080E9400 @ =gActiveBattler ldrb r0, [r0] lsls r0, 9 - ldr r2, _080E9404 @ =gUnknown_2022BC7 + ldr r2, _080E9404 @ =(gBattleBufferA + 3) adds r3, r0, r2 adds r6, r3, 0 subs r1, r2, 0x2 @@ -3760,7 +3760,7 @@ _080E93F4: mov pc, r0 .align 2, 0 _080E9400: .4byte gActiveBattler -_080E9404: .4byte gUnknown_2022BC7 +_080E9404: .4byte (gBattleBufferA + 3) _080E9408: .4byte _080E940C .align 2, 0 _080E940C: @@ -4864,34 +4864,34 @@ _080E9D8E: _080E9DB8: .4byte gPlayerParty _080E9DBC: .4byte gActiveBattler _080E9DC0: .4byte gBattlerPartyIndexes - thumb_func_end SetWallyMonData + thumb_func_end SetOakOldManMonData - thumb_func_start sub_80E9DC4 -sub_80E9DC4: @ 80E9DC4 + thumb_func_start OakOldManHandleSetRawMonData +OakOldManHandleSetRawMonData: @ 80E9DC4 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80E9DC4 + thumb_func_end OakOldManHandleSetRawMonData - thumb_func_start sub_80E9DD0 -sub_80E9DD0: @ 80E9DD0 + thumb_func_start OakOldManHandleLoadMonSprite +OakOldManHandleLoadMonSprite: @ 80E9DD0 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80E9DD0 + thumb_func_end OakOldManHandleLoadMonSprite - thumb_func_start sub_80E9DDC -sub_80E9DDC: @ 80E9DDC + thumb_func_start OakOldManHandleSwitchInAnim +OakOldManHandleSwitchInAnim: @ 80E9DDC push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80E9DDC + thumb_func_end OakOldManHandleSwitchInAnim - thumb_func_start WallyHandleReturnMonToBall -WallyHandleReturnMonToBall: @ 80E9DE8 + thumb_func_start OakOldManHandleReturnMonToBall +OakOldManHandleReturnMonToBall: @ 80E9DE8 push {r4-r6,lr} ldr r0, _080E9E14 @ =gBattleBufferA ldr r6, _080E9E18 @ =gActiveBattler @@ -4941,7 +4941,7 @@ _080E9E24: adds r0, r1 ldrb r0, [r0] bl SetHealthboxSpriteInvisible - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080E9E5A: pop {r4-r6} pop {r0} @@ -4950,10 +4950,10 @@ _080E9E5A: _080E9E60: .4byte gBattlerSpriteIds _080E9E64: .4byte gSprites _080E9E68: .4byte gHealthboxSpriteIds - thumb_func_end WallyHandleReturnMonToBall + thumb_func_end OakOldManHandleReturnMonToBall - thumb_func_start sub_80E9E6C -sub_80E9E6C: @ 80E9E6C + thumb_func_start OakOldManHandleDrawTrainerPic +OakOldManHandleDrawTrainerPic: @ 80E9E6C push {r4-r6,lr} ldr r0, _080E9EC8 @ =gBattleTypeFlags ldr r0, [r0] @@ -5081,7 +5081,7 @@ _080E9F1C: ldrb r0, [r6] lsls r0, 2 adds r0, r1 - ldr r1, _080E9FAC @ =sub_80E78E0 + ldr r1, _080E9FAC @ =CompleteOnBattlerSpriteCallbackDummy_tmp str r1, [r0] pop {r4-r6} pop {r0} @@ -5095,11 +5095,11 @@ _080E9F9C: .4byte gSprites _080E9FA0: .4byte 0x0000fffe _080E9FA4: .4byte sub_8033EEC _080E9FA8: .4byte gBattlerControllerFuncs -_080E9FAC: .4byte sub_80E78E0 - thumb_func_end sub_80E9E6C +_080E9FAC: .4byte CompleteOnBattlerSpriteCallbackDummy_tmp + thumb_func_end OakOldManHandleDrawTrainerPic - thumb_func_start sub_80E9FB0 -sub_80E9FB0: @ 80E9FB0 + thumb_func_start OakOldManHandleTrainerSlide +OakOldManHandleTrainerSlide: @ 80E9FB0 push {r4-r6,lr} ldr r0, _080EA00C @ =gBattleTypeFlags ldr r0, [r0] @@ -5242,18 +5242,18 @@ _080EA0E4: .4byte 0x0000ffa0 _080EA0E8: .4byte sub_8033EEC _080EA0EC: .4byte gBattlerControllerFuncs _080EA0F0: .4byte sub_80E8A34 - thumb_func_end sub_80E9FB0 + thumb_func_end OakOldManHandleTrainerSlide - thumb_func_start sub_80EA0F4 -sub_80EA0F4: @ 80EA0F4 + thumb_func_start OakOldManHandleTrainerSlideBack +OakOldManHandleTrainerSlideBack: @ 80EA0F4 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EA0F4 + thumb_func_end OakOldManHandleTrainerSlideBack - thumb_func_start sub_80EA100 -sub_80EA100: @ 80EA100 + thumb_func_start OakOldManHandleFaintAnimation +OakOldManHandleFaintAnimation: @ 80EA100 push {r4-r6,lr} ldr r6, _080EA14C @ =gBattleSpritesDataPtr ldr r4, [r6] @@ -5364,18 +5364,18 @@ _080EA1DC: .4byte gBattlerSpriteIds _080EA1E0: .4byte sub_8012110 _080EA1E4: .4byte gBattlerControllerFuncs _080EA1E8: .4byte sub_80E82F4 - thumb_func_end sub_80EA100 + thumb_func_end OakOldManHandleFaintAnimation - thumb_func_start sub_80EA1EC -sub_80EA1EC: @ 80EA1EC + thumb_func_start OakOldManHandlePaletteFade +OakOldManHandlePaletteFade: @ 80EA1EC push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EA1EC + thumb_func_end OakOldManHandlePaletteFade - thumb_func_start sub_80EA1F8 -sub_80EA1F8: @ 80EA1F8 + thumb_func_start OakOldManHandleSuccessBallThrowAnim +OakOldManHandleSuccessBallThrowAnim: @ 80EA1F8 push {r4,r5,lr} ldr r0, _080EA238 @ =gBattleSpritesDataPtr ldr r0, [r0] @@ -5400,7 +5400,7 @@ sub_80EA1F8: @ 80EA1F8 ldrb r0, [r5] lsls r0, 2 adds r0, r1 - ldr r1, _080EA248 @ =sub_80E7970 + ldr r1, _080EA248 @ =CompleteOnSpecialAnimDone_tmp str r1, [r0] pop {r4,r5} pop {r0} @@ -5410,11 +5410,11 @@ _080EA238: .4byte gBattleSpritesDataPtr _080EA23C: .4byte gDoingBattleAnim _080EA240: .4byte gActiveBattler _080EA244: .4byte gBattlerControllerFuncs -_080EA248: .4byte sub_80E7970 - thumb_func_end sub_80EA1F8 +_080EA248: .4byte CompleteOnSpecialAnimDone_tmp + thumb_func_end OakOldManHandleSuccessBallThrowAnim - thumb_func_start sub_80EA24C -sub_80EA24C: @ 80EA24C + thumb_func_start OakOldManHandleBallThrow +OakOldManHandleBallThrow: @ 80EA24C push {r4,r5,lr} ldr r1, _080EA294 @ =gBattleBufferA ldr r5, _080EA298 @ =gActiveBattler @@ -5444,7 +5444,7 @@ sub_80EA24C: @ 80EA24C ldrb r0, [r5] lsls r0, 2 adds r0, r1 - ldr r1, _080EA2A8 @ =sub_80E7970 + ldr r1, _080EA2A8 @ =CompleteOnSpecialAnimDone_tmp str r1, [r0] pop {r4,r5} pop {r0} @@ -5455,19 +5455,19 @@ _080EA298: .4byte gActiveBattler _080EA29C: .4byte gBattleSpritesDataPtr _080EA2A0: .4byte gDoingBattleAnim _080EA2A4: .4byte gBattlerControllerFuncs -_080EA2A8: .4byte sub_80E7970 - thumb_func_end sub_80EA24C +_080EA2A8: .4byte CompleteOnSpecialAnimDone_tmp + thumb_func_end OakOldManHandleBallThrow - thumb_func_start sub_80EA2AC -sub_80EA2AC: @ 80EA2AC + thumb_func_start OakOldManHandlePause +OakOldManHandlePause: @ 80EA2AC push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EA2AC + thumb_func_end OakOldManHandlePause - thumb_func_start sub_80EA2B8 -sub_80EA2B8: @ 80EA2B8 + thumb_func_start OakOldManHandleMoveAnimation +OakOldManHandleMoveAnimation: @ 80EA2B8 push {r4-r6,lr} ldr r0, _080EA38C @ =gBattleBufferA mov r12, r0 @@ -5570,7 +5570,7 @@ sub_80EA2B8: @ 80EA2B8 lsrs r3, r0, 24 cmp r3, 0 beq _080EA3B0 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080EA3CE .align 2, 0 _080EA38C: .4byte gBattleBufferA @@ -5596,7 +5596,7 @@ _080EA3B0: ldrb r0, [r6] lsls r0, 2 adds r0, r1 - ldr r1, _080EA3DC @ =sub_80EA3E0 + ldr r1, _080EA3DC @ =OakOldManDoMoveAnimation str r1, [r0] _080EA3CE: pop {r4-r6} @@ -5605,11 +5605,11 @@ _080EA3CE: .align 2, 0 _080EA3D4: .4byte gBattleSpritesDataPtr _080EA3D8: .4byte gBattlerControllerFuncs -_080EA3DC: .4byte sub_80EA3E0 - thumb_func_end sub_80EA2B8 +_080EA3DC: .4byte OakOldManDoMoveAnimation + thumb_func_end OakOldManHandleMoveAnimation - thumb_func_start sub_80EA3E0 -sub_80EA3E0: @ 80EA3E0 + thumb_func_start OakOldManDoMoveAnimation +OakOldManDoMoveAnimation: @ 80EA3E0 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -5763,7 +5763,7 @@ _080EA4E4: lsls r0, 2 adds r0, r2 strb r4, [r0, 0x4] - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080EA520: pop {r3,r4} mov r8, r3 @@ -5771,10 +5771,10 @@ _080EA520: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_80EA3E0 + thumb_func_end OakOldManDoMoveAnimation - thumb_func_start sub_80EA52C -sub_80EA52C: @ 80EA52C + thumb_func_start OakOldManHandlePrintString +OakOldManHandlePrintString: @ 80EA52C push {r4,lr} ldr r0, _080EA55C @ =gBattle_BG0_X movs r1, 0 @@ -5784,7 +5784,7 @@ sub_80EA52C: @ 80EA52C ldr r0, _080EA564 @ =gActiveBattler ldrb r0, [r0] lsls r0, 9 - ldr r1, _080EA568 @ =gUnknown_2022BC6 + ldr r1, _080EA568 @ =(gBattleBufferA + 2) adds r4, r0, r1 ldr r0, _080EA56C @ =gBattleTypeFlags ldr r0, [r0] @@ -5796,13 +5796,13 @@ sub_80EA52C: @ 80EA52C ldrh r0, [r4] cmp r0, 0x1 bne _080EA570 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080EA65A .align 2, 0 _080EA55C: .4byte gBattle_BG0_X _080EA560: .4byte gBattle_BG0_Y _080EA564: .4byte gActiveBattler -_080EA568: .4byte gUnknown_2022BC6 +_080EA568: .4byte (gBattleBufferA + 2) _080EA56C: .4byte gBattleTypeFlags _080EA570: ldrh r0, [r4] @@ -5921,10 +5921,10 @@ _080EA65A: _080EA660: .4byte gBattlerControllerFuncs _080EA664: .4byte gActiveBattler _080EA668: .4byte sub_80E7918 - thumb_func_end sub_80EA52C + thumb_func_end OakOldManHandlePrintString - thumb_func_start sub_80EA66C -sub_80EA66C: @ 80EA66C + thumb_func_start OakOldManHandlePrintSelectionString +OakOldManHandlePrintSelectionString: @ 80EA66C push {lr} ldr r0, _080EA684 @ =gActiveBattler ldrb r0, [r0] @@ -5932,16 +5932,16 @@ sub_80EA66C: @ 80EA66C lsls r0, 24 cmp r0, 0 bne _080EA688 - bl sub_80EA52C + bl OakOldManHandlePrintString b _080EA68C .align 2, 0 _080EA684: .4byte gActiveBattler _080EA688: - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080EA68C: pop {r0} bx r0 - thumb_func_end sub_80EA66C + thumb_func_end OakOldManHandlePrintSelectionString thumb_func_start sub_80EA690 sub_80EA690: @ 80EA690 @@ -5967,7 +5967,7 @@ sub_80EA690: @ 80EA690 ldrb r0, [r0] lsls r0, 2 adds r0, r1 - ldr r1, _080EA6D8 @ =sub_80E763C + ldr r1, _080EA6D8 @ =HandleInputChooseAction_tmp b _080EA6E8 .align 2, 0 _080EA6C4: .4byte gBattle_BG0_X @@ -5975,7 +5975,7 @@ _080EA6C8: .4byte gBattle_BG0_Y _080EA6CC: .4byte gBattleTypeFlags _080EA6D0: .4byte gBattlerControllerFuncs _080EA6D4: .4byte gActiveBattler -_080EA6D8: .4byte sub_80E763C +_080EA6D8: .4byte HandleInputChooseAction_tmp _080EA6DC: ldr r1, _080EA6F0 @ =gBattlerControllerFuncs ldr r0, _080EA6F4 @ =gActiveBattler @@ -5994,8 +5994,8 @@ _080EA6F4: .4byte gActiveBattler _080EA6F8: .4byte sub_80E7844 thumb_func_end sub_80EA690 - thumb_func_start sub_80EA6FC -sub_80EA6FC: @ 80EA6FC + thumb_func_start OakOldManHandleChooseAction +OakOldManHandleChooseAction: @ 80EA6FC push {r4,lr} ldr r1, _080EA750 @ =gBattlerControllerFuncs ldr r0, _080EA754 @ =gActiveBattler @@ -6056,15 +6056,15 @@ _080EA776: .align 2, 0 _080EA784: .4byte gUnknown_83FE6FA _080EA788: .4byte gDisplayedStringBattle - thumb_func_end sub_80EA6FC + thumb_func_end OakOldManHandleChooseAction - thumb_func_start sub_80EA78C -sub_80EA78C: @ 80EA78C + thumb_func_start OakOldManHandleUnknownYesNoBox +OakOldManHandleUnknownYesNoBox: @ 80EA78C push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EA78C + thumb_func_end OakOldManHandleUnknownYesNoBox thumb_func_start sub_80EA798 sub_80EA798: @ 80EA798 @@ -6099,8 +6099,8 @@ _080EA7D4: .4byte gActiveBattler _080EA7D8: .4byte sub_80E7988 thumb_func_end sub_80EA798 - thumb_func_start sub_80EA7DC -sub_80EA7DC: @ 80EA7DC + thumb_func_start OakOldManHandleChooseMove +OakOldManHandleChooseMove: @ 80EA7DC push {r4,lr} ldr r0, _080EA800 @ =gBattleTypeFlags ldr r0, [r0] @@ -6162,17 +6162,17 @@ _080EA83E: movs r0, 0x1 movs r1, 0xA bl BtlController_EmitTwoReturnValues - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080EA866: pop {r4} pop {r0} bx r0 .align 2, 0 _080EA86C: .4byte gBattleStruct - thumb_func_end sub_80EA7DC + thumb_func_end OakOldManHandleChooseMove - thumb_func_start sub_80EA870 -sub_80EA870: @ 80EA870 + thumb_func_start OakOldManHandleChooseItem +OakOldManHandleChooseItem: @ 80EA870 push {r4,r5,lr} sub sp, 0x4 movs r0, 0x1 @@ -6187,7 +6187,7 @@ sub_80EA870: @ 80EA870 ldrb r0, [r2] lsls r0, 2 adds r0, r1 - ldr r1, _080EA8C4 @ =sub_80E7A70 + ldr r1, _080EA8C4 @ =OpenBagAndChooseItem_tmp str r1, [r0] ldr r1, _080EA8C8 @ =gBattlerInMenuId ldrb r0, [r2] @@ -6214,14 +6214,14 @@ _080EA89E: .align 2, 0 _080EA8BC: .4byte gBattlerControllerFuncs _080EA8C0: .4byte gActiveBattler -_080EA8C4: .4byte sub_80E7A70 +_080EA8C4: .4byte OpenBagAndChooseItem_tmp _080EA8C8: .4byte gBattlerInMenuId _080EA8CC: .4byte gUnknown_203B0DC _080EA8D0: .4byte gBattleBufferA - thumb_func_end sub_80EA870 + thumb_func_end OakOldManHandleChooseItem - thumb_func_start sub_80EA8D4 -sub_80EA8D4: @ 80EA8D4 + thumb_func_start OakOldManHandleChoosePokemon +OakOldManHandleChoosePokemon: @ 80EA8D4 push {r4-r6,lr} sub sp, 0x4 ldr r0, _080EA984 @ =TaskDummy @@ -6299,7 +6299,7 @@ _080EA940: ldrb r0, [r2] lsls r0, 2 adds r0, r1 - ldr r1, _080EA9A4 @ =sub_80E79B8 + ldr r1, _080EA9A4 @ =OpenPartyMenuToChooseMon_tmp str r1, [r0] ldr r1, _080EA9A8 @ =gBattlerInMenuId ldrb r0, [r2] @@ -6317,20 +6317,20 @@ _080EA994: .4byte gBattleBufferA _080EA998: .4byte gBattleStruct _080EA99C: .4byte gUnknown_203B0DC _080EA9A0: .4byte gBattlerControllerFuncs -_080EA9A4: .4byte sub_80E79B8 +_080EA9A4: .4byte OpenPartyMenuToChooseMon_tmp _080EA9A8: .4byte gBattlerInMenuId - thumb_func_end sub_80EA8D4 + thumb_func_end OakOldManHandleChoosePokemon - thumb_func_start sub_80EA9AC -sub_80EA9AC: @ 80EA9AC + thumb_func_start OakOldManHandleCmd23 +OakOldManHandleCmd23: @ 80EA9AC push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EA9AC + thumb_func_end OakOldManHandleCmd23 - thumb_func_start sub_80EA9B8 -sub_80EA9B8: @ 80EA9B8 + thumb_func_start OakOldManHandleHealthBarUpdate +OakOldManHandleHealthBarUpdate: @ 80EA9B8 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -6442,10 +6442,10 @@ _080EAAA8: .4byte gHealthboxSpriteIds _080EAAAC: .4byte gBattlerControllerFuncs _080EAAB0: .4byte gActiveBattler _080EAAB4: .4byte sub_80E88C0 - thumb_func_end sub_80EA9B8 + thumb_func_end OakOldManHandleHealthBarUpdate - thumb_func_start sub_80EAAB8 -sub_80EAAB8: @ 80EAAB8 + thumb_func_start OakOldManHandleExpUpdate +OakOldManHandleExpUpdate: @ 80EAAB8 push {r4-r7,lr} ldr r5, _080EAAE4 @ =gBattleBufferA ldr r6, _080EAAE8 @ =gActiveBattler @@ -6464,7 +6464,7 @@ sub_80EAAB8: @ 80EAAB8 bl GetMonData cmp r0, 0x63 bls _080EAAF0 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080EAB3C .align 2, 0 _080EAAE4: .4byte gBattleBufferA @@ -6486,7 +6486,7 @@ _080EAAF0: ldrb r0, [r1] lsls r0, 8 orrs r4, r0 - ldr r0, _080EAB44 @ =sub_80E7E04 + ldr r0, _080EAB44 @ =Task_GiveExpToMon_tmp movs r1, 0xA bl CreateTask lsls r0, 24 @@ -6511,134 +6511,134 @@ _080EAB3C: pop {r0} bx r0 .align 2, 0 -_080EAB44: .4byte sub_80E7E04 +_080EAB44: .4byte Task_GiveExpToMon_tmp _080EAB48: .4byte gTasks _080EAB4C: .4byte gBattlerControllerFuncs _080EAB50: .4byte nullsub_81 - thumb_func_end sub_80EAAB8 + thumb_func_end OakOldManHandleExpUpdate - thumb_func_start sub_80EAB54 -sub_80EAB54: @ 80EAB54 + thumb_func_start OakOldManHandleStatusIconUpdate +OakOldManHandleStatusIconUpdate: @ 80EAB54 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAB54 + thumb_func_end OakOldManHandleStatusIconUpdate - thumb_func_start sub_80EAB60 -sub_80EAB60: @ 80EAB60 + thumb_func_start OakOldManHandleStatusAnimation +OakOldManHandleStatusAnimation: @ 80EAB60 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAB60 + thumb_func_end OakOldManHandleStatusAnimation - thumb_func_start sub_80EAB6C -sub_80EAB6C: @ 80EAB6C + thumb_func_start OakOldManHandleStatusXor +OakOldManHandleStatusXor: @ 80EAB6C push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAB6C + thumb_func_end OakOldManHandleStatusXor - thumb_func_start sub_80EAB78 -sub_80EAB78: @ 80EAB78 + thumb_func_start OakOldManHandleDataTransfer +OakOldManHandleDataTransfer: @ 80EAB78 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAB78 + thumb_func_end OakOldManHandleDataTransfer - thumb_func_start sub_80EAB84 -sub_80EAB84: @ 80EAB84 + thumb_func_start OakOldManHandleDMA3Transfer +OakOldManHandleDMA3Transfer: @ 80EAB84 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAB84 + thumb_func_end OakOldManHandleDMA3Transfer - thumb_func_start sub_80EAB90 -sub_80EAB90: @ 80EAB90 + thumb_func_start OakOldManHandlePlayBGM +OakOldManHandlePlayBGM: @ 80EAB90 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAB90 + thumb_func_end OakOldManHandlePlayBGM - thumb_func_start sub_80EAB9C -sub_80EAB9C: @ 80EAB9C + thumb_func_start OakOldManHandleCmd32 +OakOldManHandleCmd32: @ 80EAB9C push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAB9C + thumb_func_end OakOldManHandleCmd32 - thumb_func_start sub_80EABA8 -sub_80EABA8: @ 80EABA8 + thumb_func_start OakOldManHandleTwoReturnValues +OakOldManHandleTwoReturnValues: @ 80EABA8 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABA8 + thumb_func_end OakOldManHandleTwoReturnValues - thumb_func_start sub_80EABB4 -sub_80EABB4: @ 80EABB4 + thumb_func_start OakOldManHandleChosenMonReturnValue +OakOldManHandleChosenMonReturnValue: @ 80EABB4 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABB4 + thumb_func_end OakOldManHandleChosenMonReturnValue - thumb_func_start sub_80EABC0 -sub_80EABC0: @ 80EABC0 + thumb_func_start OakOldManHandleOneReturnValue +OakOldManHandleOneReturnValue: @ 80EABC0 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABC0 + thumb_func_end OakOldManHandleOneReturnValue - thumb_func_start sub_80EABCC -sub_80EABCC: @ 80EABCC + thumb_func_start OakOldManHandleOneReturnValue_Duplicate +OakOldManHandleOneReturnValue_Duplicate: @ 80EABCC push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABCC + thumb_func_end OakOldManHandleOneReturnValue_Duplicate - thumb_func_start sub_80EABD8 -sub_80EABD8: @ 80EABD8 + thumb_func_start OakOldManHandleCmd37 +OakOldManHandleCmd37: @ 80EABD8 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABD8 + thumb_func_end OakOldManHandleCmd37 - thumb_func_start sub_80EABE4 -sub_80EABE4: @ 80EABE4 + thumb_func_start OakOldManHandleCmd38 +OakOldManHandleCmd38: @ 80EABE4 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABE4 + thumb_func_end OakOldManHandleCmd38 - thumb_func_start sub_80EABF0 -sub_80EABF0: @ 80EABF0 + thumb_func_start OakOldManHandleCmd39 +OakOldManHandleCmd39: @ 80EABF0 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABF0 + thumb_func_end OakOldManHandleCmd39 - thumb_func_start sub_80EABFC -sub_80EABFC: @ 80EABFC + thumb_func_start OakOldManHandleCmd40 +OakOldManHandleCmd40: @ 80EABFC push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EABFC + thumb_func_end OakOldManHandleCmd40 - thumb_func_start sub_80EAC08 -sub_80EAC08: @ 80EAC08 + thumb_func_start OakOldManHandleHitAnimation +OakOldManHandleHitAnimation: @ 80EAC08 push {r4,lr} ldr r3, _080EAC30 @ =gSprites ldr r2, _080EAC34 @ =gBattlerSpriteIds @@ -6655,7 +6655,7 @@ sub_80EAC08: @ 80EAC08 lsls r0, 29 cmp r0, 0 bge _080EAC3C - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080EAC66 .align 2, 0 _080EAC30: .4byte gSprites @@ -6680,7 +6680,7 @@ _080EAC3C: ldrb r0, [r4] lsls r0, 2 adds r0, r1 - ldr r1, _080EAC74 @ =DoHitAnimBlinkSpriteEffect_3 + ldr r1, _080EAC74 @ =DoHitAnimBlinkSpriteEffect_tmp str r1, [r0] _080EAC66: pop {r4} @@ -6689,19 +6689,19 @@ _080EAC66: .align 2, 0 _080EAC6C: .4byte gDoingBattleAnim _080EAC70: .4byte gBattlerControllerFuncs -_080EAC74: .4byte DoHitAnimBlinkSpriteEffect_3 - thumb_func_end sub_80EAC08 +_080EAC74: .4byte DoHitAnimBlinkSpriteEffect_tmp + thumb_func_end OakOldManHandleHitAnimation - thumb_func_start sub_80EAC78 -sub_80EAC78: @ 80EAC78 + thumb_func_start OakOldManHandleCmd42 +OakOldManHandleCmd42: @ 80EAC78 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EAC78 + thumb_func_end OakOldManHandleCmd42 - thumb_func_start sub_80EAC84 -sub_80EAC84: @ 80EAC84 + thumb_func_start OakOldManHandlePlaySE +OakOldManHandlePlaySE: @ 80EAC84 push {lr} ldr r2, _080EACAC @ =gBattleBufferA ldr r0, _080EACB0 @ =gActiveBattler @@ -6716,16 +6716,16 @@ sub_80EAC84: @ 80EAC84 lsls r1, 8 orrs r0, r1 bl PlaySE - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 .align 2, 0 _080EACAC: .4byte gBattleBufferA _080EACB0: .4byte gActiveBattler - thumb_func_end sub_80EAC84 + thumb_func_end OakOldManHandlePlaySE - thumb_func_start sub_80EACB4 -sub_80EACB4: @ 80EACB4 + thumb_func_start OakOldManHandlePlayFanfare +OakOldManHandlePlayFanfare: @ 80EACB4 push {lr} ldr r2, _080EACDC @ =gBattleBufferA ldr r0, _080EACE0 @ =gActiveBattler @@ -6740,16 +6740,16 @@ sub_80EACB4: @ 80EACB4 lsls r1, 8 orrs r0, r1 bl PlayFanfare - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 .align 2, 0 _080EACDC: .4byte gBattleBufferA _080EACE0: .4byte gActiveBattler - thumb_func_end sub_80EACB4 + thumb_func_end OakOldManHandlePlayFanfare - thumb_func_start sub_80EACE4 -sub_80EACE4: @ 80EACE4 + thumb_func_start OakOldManHandleFaintingCry +OakOldManHandleFaintingCry: @ 80EACE4 push {lr} ldr r1, _080EAD14 @ =gBattlerPartyIndexes ldr r0, _080EAD18 @ =gActiveBattler @@ -6767,17 +6767,17 @@ sub_80EACE4: @ 80EACE4 lsrs r0, 16 movs r1, 0x19 bl PlayCry1 - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 .align 2, 0 _080EAD14: .4byte gBattlerPartyIndexes _080EAD18: .4byte gActiveBattler _080EAD1C: .4byte gPlayerParty - thumb_func_end sub_80EACE4 + thumb_func_end OakOldManHandleFaintingCry - thumb_func_start sub_80EAD20 -sub_80EAD20: @ 80EAD20 + thumb_func_start OakOldManHandleIntroSlide +OakOldManHandleIntroSlide: @ 80EAD20 push {lr} ldr r1, _080EAD48 @ =gBattleBufferA ldr r0, _080EAD4C @ =gActiveBattler @@ -6792,17 +6792,17 @@ sub_80EAD20: @ 80EAD20 movs r1, 0x1 orrs r0, r1 strh r0, [r2] - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 .align 2, 0 _080EAD48: .4byte gBattleBufferA _080EAD4C: .4byte gActiveBattler _080EAD50: .4byte gIntroSlideFlags - thumb_func_end sub_80EAD20 + thumb_func_end OakOldManHandleIntroSlide - thumb_func_start sub_80EAD54 -sub_80EAD54: @ 80EAD54 + thumb_func_start OakOldManHandleIntroTrainerBallThrow +OakOldManHandleIntroTrainerBallThrow: @ 80EAD54 push {r4-r7,lr} ldr r0, _080EAEA0 @ =gBattleTypeFlags ldr r0, [r0] @@ -7008,7 +7008,7 @@ _080EAEE4: ldr r1, _080EAF30 @ =Task_HidePartyStatusSummary str r1, [r0] _080EAF14: - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080EAF18: pop {r4-r7} pop {r0} @@ -7019,7 +7019,7 @@ _080EAF24: .4byte gActiveBattler _080EAF28: .4byte gTasks _080EAF2C: .4byte gBattlerStatusSummaryTaskId _080EAF30: .4byte Task_HidePartyStatusSummary - thumb_func_end sub_80EAD54 + thumb_func_end OakOldManHandleIntroTrainerBallThrow thumb_func_start sub_80EAF34 sub_80EAF34: @ 80EAF34 @@ -7249,8 +7249,8 @@ _080EB114: .4byte gBattlerControllerFuncs _080EB118: .4byte sub_80E7B4C thumb_func_end sub_80EB0A8 - thumb_func_start sub_80EB11C -sub_80EB11C: @ 80EB11C + thumb_func_start OakOldManHandleDrawPartyStatusSummary +OakOldManHandleDrawPartyStatusSummary: @ 80EB11C push {r4,r5,lr} ldr r1, _080EB144 @ =gBattleBufferA ldr r0, _080EB148 @ =gActiveBattler @@ -7266,7 +7266,7 @@ sub_80EB11C: @ 80EB11C lsls r0, 24 cmp r0, 0 bne _080EB14C - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080EB18A .align 2, 0 _080EB144: .4byte gBattleBufferA @@ -7287,7 +7287,7 @@ _080EB14C: strb r1, [r0] ldrb r0, [r5] lsls r4, r0, 9 - ldr r3, _080EB198 @ =gUnknown_2022BC8 + ldr r3, _080EB198 @ =(gBattleBufferA + 4) adds r1, r4, r3 subs r2, r3, 0x3 adds r2, r4, r2 @@ -7300,7 +7300,7 @@ _080EB14C: ldrb r1, [r5] adds r1, r2 strb r0, [r1] - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted _080EB18A: pop {r4,r5} pop {r0} @@ -7308,20 +7308,20 @@ _080EB18A: .align 2, 0 _080EB190: .4byte gBattleSpritesDataPtr _080EB194: .4byte gActiveBattler -_080EB198: .4byte gUnknown_2022BC8 +_080EB198: .4byte (gBattleBufferA + 4) _080EB19C: .4byte gBattlerStatusSummaryTaskId - thumb_func_end sub_80EB11C + thumb_func_end OakOldManHandleDrawPartyStatusSummary - thumb_func_start sub_80EB1A0 -sub_80EB1A0: @ 80EB1A0 + thumb_func_start OakOldManHandleHidePartyStatusSummary +OakOldManHandleHidePartyStatusSummary: @ 80EB1A0 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EB1A0 + thumb_func_end OakOldManHandleHidePartyStatusSummary - thumb_func_start sub_80EB1AC -sub_80EB1AC: @ 80EB1AC + thumb_func_start OakOldManHandleEndBounceEffect +OakOldManHandleEndBounceEffect: @ 80EB1AC push {r4,lr} ldr r4, _080EB1CC @ =gActiveBattler ldrb r0, [r4] @@ -7330,24 +7330,24 @@ sub_80EB1AC: @ 80EB1AC ldrb r0, [r4] movs r1, 0 bl EndBounceEffect - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r4} pop {r0} bx r0 .align 2, 0 _080EB1CC: .4byte gActiveBattler - thumb_func_end sub_80EB1AC + thumb_func_end OakOldManHandleEndBounceEffect - thumb_func_start sub_80EB1D0 -sub_80EB1D0: @ 80EB1D0 + thumb_func_start OakOldManHandleSpriteInvisibility +OakOldManHandleSpriteInvisibility: @ 80EB1D0 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EB1D0 + thumb_func_end OakOldManHandleSpriteInvisibility - thumb_func_start sub_80EB1DC -sub_80EB1DC: @ 80EB1DC + thumb_func_start OakOldManHandleBattleAnimation +OakOldManHandleBattleAnimation: @ 80EB1DC push {r4-r6,lr} sub sp, 0x4 ldr r5, _080EB214 @ =gBattleBufferA @@ -7372,7 +7372,7 @@ sub_80EB1DC: @ 80EB1DC lsls r0, 24 cmp r0, 0 beq _080EB21C - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted b _080EB228 .align 2, 0 _080EB214: .4byte gBattleBufferA @@ -7382,7 +7382,7 @@ _080EB21C: ldrb r1, [r6] lsls r1, 2 adds r1, r0 - ldr r0, _080EB234 @ =CompleteOnFinishedBattleAnimation_4 + ldr r0, _080EB234 @ =CompleteOnFinishedBattleAnimation_tmp str r0, [r1] _080EB228: add sp, 0x4 @@ -7391,11 +7391,11 @@ _080EB228: bx r0 .align 2, 0 _080EB230: .4byte gBattlerControllerFuncs -_080EB234: .4byte CompleteOnFinishedBattleAnimation_4 - thumb_func_end sub_80EB1DC +_080EB234: .4byte CompleteOnFinishedBattleAnimation_tmp + thumb_func_end OakOldManHandleBattleAnimation - thumb_func_start sub_80EB238 -sub_80EB238: @ 80EB238 + thumb_func_start OakOldManHandleLinkStandbyMsg +OakOldManHandleLinkStandbyMsg: @ 80EB238 push {r4,lr} ldr r1, _080EB26C @ =gBattleBufferA ldr r4, _080EB270 @ =gActiveBattler @@ -7415,25 +7415,25 @@ sub_80EB238: @ 80EB238 movs r1, 0 bl EndBounceEffect _080EB260: - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r4} pop {r0} bx r0 .align 2, 0 _080EB26C: .4byte gBattleBufferA _080EB270: .4byte gActiveBattler - thumb_func_end sub_80EB238 + thumb_func_end OakOldManHandleLinkStandbyMsg - thumb_func_start sub_80EB274 -sub_80EB274: @ 80EB274 + thumb_func_start OakOldManHandleResetActionMoveSelection +OakOldManHandleResetActionMoveSelection: @ 80EB274 push {lr} - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted pop {r0} bx r0 - thumb_func_end sub_80EB274 + thumb_func_end OakOldManHandleResetActionMoveSelection - thumb_func_start sub_80EB280 -sub_80EB280: @ 80EB280 + thumb_func_start OakOldManHandleCmd55 +OakOldManHandleCmd55: @ 80EB280 push {r4,lr} ldr r2, _080EB2C4 @ =gBattleOutcome ldr r1, _080EB2C8 @ =gBattleBufferA @@ -7448,7 +7448,7 @@ sub_80EB280: @ 80EB280 bl FadeOutMapMusic movs r0, 0x3 bl BeginFastPaletteFade - bl WallyBufferExecCompleted + bl OakOldManBufferExecCompleted ldr r0, _080EB2D0 @ =gBattleTypeFlags ldr r0, [r0] movs r1, 0x6 @@ -7472,12 +7472,12 @@ _080EB2CC: .4byte gActiveBattler _080EB2D0: .4byte gBattleTypeFlags _080EB2D4: .4byte gBattlerControllerFuncs _080EB2D8: .4byte sub_80E7930 - thumb_func_end sub_80EB280 + thumb_func_end OakOldManHandleCmd55 - thumb_func_start nullsub_82 -nullsub_82: @ 80EB2DC + thumb_func_start OakOldManCmdEnd +OakOldManCmdEnd: @ 80EB2DC bx lr - thumb_func_end nullsub_82 + thumb_func_end OakOldManCmdEnd thumb_func_start sub_80EB2E0 sub_80EB2E0: @ 80EB2E0 diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s index 1857d92c8..42daef8de 100644 --- a/asm/battle_controller_pokedude.s +++ b/asm/battle_controller_pokedude.s @@ -10,8 +10,8 @@ nullsub_99: @ 81560A0 bx lr thumb_func_end nullsub_99 - thumb_func_start SetControllerToPokedude -SetControllerToPokedude: @ 81560A4 + thumb_func_start SetControllerToPokeDude +SetControllerToPokeDude: @ 81560A4 ldr r1, _081560C8 @ =gBattlerControllerFuncs ldr r0, _081560CC @ =gActiveBattler ldrb r0, [r0] @@ -36,7 +36,7 @@ _081560CC: .4byte gActiveBattler _081560D0: .4byte sub_81560DC _081560D4: .4byte gBattleStruct _081560D8: .4byte gSpecialVar_0x8004 - thumb_func_end SetControllerToPokedude + thumb_func_end SetControllerToPokeDude thumb_func_start sub_81560DC sub_81560DC: @ 81560DC @@ -2862,7 +2862,7 @@ sub_81577B4: @ 81577B4 ldr r0, _081577E4 @ =gActiveBattler ldrb r0, [r0] lsls r2, r0, 9 - ldr r1, _081577E8 @ =gUnknown_2022BC7 + ldr r1, _081577E8 @ =(gBattleBufferA + 3) adds r5, r2, r1 mov r8, r5 bl GetBattlerSide @@ -2876,7 +2876,7 @@ sub_81577B4: @ 81577B4 b _081577F8 .align 2, 0 _081577E4: .4byte gActiveBattler -_081577E8: .4byte gUnknown_2022BC7 +_081577E8: .4byte (gBattleBufferA + 3) _081577EC: .4byte gPlayerParty _081577F0: movs r0, 0x64 @@ -3148,7 +3148,7 @@ _08157AA4: ldr r0, _08157AB8 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157ABC @ =gUnknown_2022BC7 + ldr r0, _08157ABC @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0xB @@ -3156,12 +3156,12 @@ _08157AA4: b _0815809A .align 2, 0 _08157AB8: .4byte gActiveBattler -_08157ABC: .4byte gUnknown_2022BC7 +_08157ABC: .4byte (gBattleBufferA + 3) _08157AC0: ldr r0, _08157AD4 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157AD8 @ =gUnknown_2022BC7 + ldr r0, _08157AD8 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0xC @@ -3169,7 +3169,7 @@ _08157AC0: b _0815809A .align 2, 0 _08157AD4: .4byte gActiveBattler -_08157AD8: .4byte gUnknown_2022BC7 +_08157AD8: .4byte (gBattleBufferA + 3) _08157ADC: movs r4, 0 movs r0, 0xC @@ -3213,7 +3213,7 @@ _08157B2C: ldr r5, _08157B80 @ =gActiveBattler ldrb r2, [r5] lsls r2, 9 - ldr r4, _08157B84 @ =gUnknown_2022BC7 + ldr r4, _08157B84 @ =(gBattleBufferA + 3) adds r2, r4 adds r0, r6, 0 movs r1, 0x11 @@ -3249,7 +3249,7 @@ _08157B2C: b _0815809A .align 2, 0 _08157B80: .4byte gActiveBattler -_08157B84: .4byte gUnknown_2022BC7 +_08157B84: .4byte (gBattleBufferA + 3) _08157B88: ldr r0, _08157BA4 @ =gActiveBattler ldrb r2, [r0] @@ -3270,7 +3270,7 @@ _08157BA8: ldr r0, _08157BBC @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157BC0 @ =gUnknown_2022BC7 + ldr r0, _08157BC0 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x1 @@ -3278,12 +3278,12 @@ _08157BA8: b _0815809A .align 2, 0 _08157BBC: .4byte gActiveBattler -_08157BC0: .4byte gUnknown_2022BC7 +_08157BC0: .4byte (gBattleBufferA + 3) _08157BC4: ldr r0, _08157BD8 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157BDC @ =gUnknown_2022BC7 + ldr r0, _08157BDC @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x19 @@ -3291,12 +3291,12 @@ _08157BC4: b _0815809A .align 2, 0 _08157BD8: .4byte gActiveBattler -_08157BDC: .4byte gUnknown_2022BC7 +_08157BDC: .4byte (gBattleBufferA + 3) _08157BE0: ldr r0, _08157BF4 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157BF8 @ =gUnknown_2022BC7 + ldr r0, _08157BF8 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x1A @@ -3304,12 +3304,12 @@ _08157BE0: b _0815809A .align 2, 0 _08157BF4: .4byte gActiveBattler -_08157BF8: .4byte gUnknown_2022BC7 +_08157BF8: .4byte (gBattleBufferA + 3) _08157BFC: ldr r0, _08157C10 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157C14 @ =gUnknown_2022BC7 + ldr r0, _08157C14 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x1B @@ -3317,12 +3317,12 @@ _08157BFC: b _0815809A .align 2, 0 _08157C10: .4byte gActiveBattler -_08157C14: .4byte gUnknown_2022BC7 +_08157C14: .4byte (gBattleBufferA + 3) _08157C18: ldr r0, _08157C2C @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157C30 @ =gUnknown_2022BC7 + ldr r0, _08157C30 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x1C @@ -3330,12 +3330,12 @@ _08157C18: b _0815809A .align 2, 0 _08157C2C: .4byte gActiveBattler -_08157C30: .4byte gUnknown_2022BC7 +_08157C30: .4byte (gBattleBufferA + 3) _08157C34: ldr r0, _08157C48 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157C4C @ =gUnknown_2022BC7 + ldr r0, _08157C4C @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x1D @@ -3343,12 +3343,12 @@ _08157C34: b _0815809A .align 2, 0 _08157C48: .4byte gActiveBattler -_08157C4C: .4byte gUnknown_2022BC7 +_08157C4C: .4byte (gBattleBufferA + 3) _08157C50: ldr r0, _08157C64 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157C68 @ =gUnknown_2022BC7 + ldr r0, _08157C68 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x1E @@ -3356,12 +3356,12 @@ _08157C50: b _0815809A .align 2, 0 _08157C64: .4byte gActiveBattler -_08157C68: .4byte gUnknown_2022BC7 +_08157C68: .4byte (gBattleBufferA + 3) _08157C6C: ldr r0, _08157C80 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157C84 @ =gUnknown_2022BC7 + ldr r0, _08157C84 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x1F @@ -3369,12 +3369,12 @@ _08157C6C: b _0815809A .align 2, 0 _08157C80: .4byte gActiveBattler -_08157C84: .4byte gUnknown_2022BC7 +_08157C84: .4byte (gBattleBufferA + 3) _08157C88: ldr r0, _08157C9C @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157CA0 @ =gUnknown_2022BC7 + ldr r0, _08157CA0 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x20 @@ -3382,12 +3382,12 @@ _08157C88: b _0815809A .align 2, 0 _08157C9C: .4byte gActiveBattler -_08157CA0: .4byte gUnknown_2022BC7 +_08157CA0: .4byte (gBattleBufferA + 3) _08157CA4: ldr r0, _08157CB8 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157CBC @ =gUnknown_2022BC7 + ldr r0, _08157CBC @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x22 @@ -3395,12 +3395,12 @@ _08157CA4: b _0815809A .align 2, 0 _08157CB8: .4byte gActiveBattler -_08157CBC: .4byte gUnknown_2022BC7 +_08157CBC: .4byte (gBattleBufferA + 3) _08157CC0: ldr r0, _08157CD4 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157CD8 @ =gUnknown_2022BC7 + ldr r0, _08157CD8 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x23 @@ -3408,12 +3408,12 @@ _08157CC0: b _0815809A .align 2, 0 _08157CD4: .4byte gActiveBattler -_08157CD8: .4byte gUnknown_2022BC7 +_08157CD8: .4byte (gBattleBufferA + 3) _08157CDC: ldr r0, _08157CF0 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157CF4 @ =gUnknown_2022BC7 + ldr r0, _08157CF4 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x24 @@ -3421,12 +3421,12 @@ _08157CDC: b _0815809A .align 2, 0 _08157CF0: .4byte gActiveBattler -_08157CF4: .4byte gUnknown_2022BC7 +_08157CF4: .4byte (gBattleBufferA + 3) _08157CF8: ldr r0, _08157D0C @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157D10 @ =gUnknown_2022BC7 + ldr r0, _08157D10 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x25 @@ -3434,12 +3434,12 @@ _08157CF8: b _0815809A .align 2, 0 _08157D0C: .4byte gActiveBattler -_08157D10: .4byte gUnknown_2022BC7 +_08157D10: .4byte (gBattleBufferA + 3) _08157D14: ldr r0, _08157D28 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157D2C @ =gUnknown_2022BC7 + ldr r0, _08157D2C @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x26 @@ -3447,12 +3447,12 @@ _08157D14: b _0815809A .align 2, 0 _08157D28: .4byte gActiveBattler -_08157D2C: .4byte gUnknown_2022BC7 +_08157D2C: .4byte (gBattleBufferA + 3) _08157D30: ldr r5, _08157D8C @ =gActiveBattler ldrb r2, [r5] lsls r2, 9 - ldr r4, _08157D90 @ =gUnknown_2022BC7 + ldr r4, _08157D90 @ =(gBattleBufferA + 3) adds r2, r4 adds r0, r6, 0 movs r1, 0x27 @@ -3492,12 +3492,12 @@ _08157D30: b _08157E2A .align 2, 0 _08157D8C: .4byte gActiveBattler -_08157D90: .4byte gUnknown_2022BC7 +_08157D90: .4byte (gBattleBufferA + 3) _08157D94: ldr r0, _08157DA8 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157DAC @ =gUnknown_2022BC7 + ldr r0, _08157DAC @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x27 @@ -3505,12 +3505,12 @@ _08157D94: b _0815809A .align 2, 0 _08157DA8: .4byte gActiveBattler -_08157DAC: .4byte gUnknown_2022BC7 +_08157DAC: .4byte (gBattleBufferA + 3) _08157DB0: ldr r0, _08157DC4 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157DC8 @ =gUnknown_2022BC7 + ldr r0, _08157DC8 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x28 @@ -3518,12 +3518,12 @@ _08157DB0: b _0815809A .align 2, 0 _08157DC4: .4byte gActiveBattler -_08157DC8: .4byte gUnknown_2022BC7 +_08157DC8: .4byte (gBattleBufferA + 3) _08157DCC: ldr r0, _08157DE0 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157DE4 @ =gUnknown_2022BC7 + ldr r0, _08157DE4 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x29 @@ -3531,12 +3531,12 @@ _08157DCC: b _0815809A .align 2, 0 _08157DE0: .4byte gActiveBattler -_08157DE4: .4byte gUnknown_2022BC7 +_08157DE4: .4byte (gBattleBufferA + 3) _08157DE8: ldr r0, _08157DFC @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157E00 @ =gUnknown_2022BC7 + ldr r0, _08157E00 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x2A @@ -3544,12 +3544,12 @@ _08157DE8: b _0815809A .align 2, 0 _08157DFC: .4byte gActiveBattler -_08157E00: .4byte gUnknown_2022BC7 +_08157E00: .4byte (gBattleBufferA + 3) _08157E04: ldr r0, _08157E18 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157E1C @ =gUnknown_2022BC7 + ldr r0, _08157E1C @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x2B @@ -3557,12 +3557,12 @@ _08157E04: b _0815809A .align 2, 0 _08157E18: .4byte gActiveBattler -_08157E1C: .4byte gUnknown_2022BC7 +_08157E1C: .4byte (gBattleBufferA + 3) _08157E20: ldr r0, _08157E34 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157E38 @ =gUnknown_2022BC7 + ldr r0, _08157E38 @ =(gBattleBufferA + 3) adds r2, r0 _08157E2A: adds r0, r6, 0 @@ -3571,12 +3571,12 @@ _08157E2A: b _0815809A .align 2, 0 _08157E34: .4byte gActiveBattler -_08157E38: .4byte gUnknown_2022BC7 +_08157E38: .4byte (gBattleBufferA + 3) _08157E3C: ldr r0, _08157E50 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157E54 @ =gUnknown_2022BC7 + ldr r0, _08157E54 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0 @@ -3584,12 +3584,12 @@ _08157E3C: b _0815809A .align 2, 0 _08157E50: .4byte gActiveBattler -_08157E54: .4byte gUnknown_2022BC7 +_08157E54: .4byte (gBattleBufferA + 3) _08157E58: ldr r0, _08157E6C @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157E70 @ =gUnknown_2022BC7 + ldr r0, _08157E70 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x9 @@ -3597,12 +3597,12 @@ _08157E58: b _0815809A .align 2, 0 _08157E6C: .4byte gActiveBattler -_08157E70: .4byte gUnknown_2022BC7 +_08157E70: .4byte (gBattleBufferA + 3) _08157E74: ldr r0, _08157E88 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157E8C @ =gUnknown_2022BC7 + ldr r0, _08157E8C @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x37 @@ -3610,12 +3610,12 @@ _08157E74: b _0815809A .align 2, 0 _08157E88: .4byte gActiveBattler -_08157E8C: .4byte gUnknown_2022BC7 +_08157E8C: .4byte (gBattleBufferA + 3) _08157E90: ldr r0, _08157EA4 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157EA8 @ =gUnknown_2022BC7 + ldr r0, _08157EA8 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x38 @@ -3623,12 +3623,12 @@ _08157E90: b _0815809A .align 2, 0 _08157EA4: .4byte gActiveBattler -_08157EA8: .4byte gUnknown_2022BC7 +_08157EA8: .4byte (gBattleBufferA + 3) _08157EAC: ldr r0, _08157EC0 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157EC4 @ =gUnknown_2022BC7 + ldr r0, _08157EC4 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x39 @@ -3636,12 +3636,12 @@ _08157EAC: b _0815809A .align 2, 0 _08157EC0: .4byte gActiveBattler -_08157EC4: .4byte gUnknown_2022BC7 +_08157EC4: .4byte (gBattleBufferA + 3) _08157EC8: ldr r0, _08157EDC @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157EE0 @ =gUnknown_2022BC7 + ldr r0, _08157EE0 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x3A @@ -3649,12 +3649,12 @@ _08157EC8: b _0815809A .align 2, 0 _08157EDC: .4byte gActiveBattler -_08157EE0: .4byte gUnknown_2022BC7 +_08157EE0: .4byte (gBattleBufferA + 3) _08157EE4: ldr r0, _08157EF8 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157EFC @ =gUnknown_2022BC7 + ldr r0, _08157EFC @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x3B @@ -3662,12 +3662,12 @@ _08157EE4: b _0815809A .align 2, 0 _08157EF8: .4byte gActiveBattler -_08157EFC: .4byte gUnknown_2022BC7 +_08157EFC: .4byte (gBattleBufferA + 3) _08157F00: ldr r0, _08157F14 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157F18 @ =gUnknown_2022BC7 + ldr r0, _08157F18 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x3C @@ -3675,12 +3675,12 @@ _08157F00: b _0815809A .align 2, 0 _08157F14: .4byte gActiveBattler -_08157F18: .4byte gUnknown_2022BC7 +_08157F18: .4byte (gBattleBufferA + 3) _08157F1C: ldr r0, _08157F30 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157F34 @ =gUnknown_2022BC7 + ldr r0, _08157F34 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x3D @@ -3688,12 +3688,12 @@ _08157F1C: b _0815809A .align 2, 0 _08157F30: .4byte gActiveBattler -_08157F34: .4byte gUnknown_2022BC7 +_08157F34: .4byte (gBattleBufferA + 3) _08157F38: ldr r0, _08157F4C @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157F50 @ =gUnknown_2022BC7 + ldr r0, _08157F50 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x3E @@ -3701,12 +3701,12 @@ _08157F38: b _0815809A .align 2, 0 _08157F4C: .4byte gActiveBattler -_08157F50: .4byte gUnknown_2022BC7 +_08157F50: .4byte (gBattleBufferA + 3) _08157F54: ldr r0, _08157F68 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157F6C @ =gUnknown_2022BC7 + ldr r0, _08157F6C @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x3F @@ -3714,12 +3714,12 @@ _08157F54: b _0815809A .align 2, 0 _08157F68: .4byte gActiveBattler -_08157F6C: .4byte gUnknown_2022BC7 +_08157F6C: .4byte (gBattleBufferA + 3) _08157F70: ldr r0, _08157F84 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157F88 @ =gUnknown_2022BC7 + ldr r0, _08157F88 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x16 @@ -3727,12 +3727,12 @@ _08157F70: b _0815809A .align 2, 0 _08157F84: .4byte gActiveBattler -_08157F88: .4byte gUnknown_2022BC7 +_08157F88: .4byte (gBattleBufferA + 3) _08157F8C: ldr r0, _08157FA0 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157FA4 @ =gUnknown_2022BC7 + ldr r0, _08157FA4 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x17 @@ -3740,12 +3740,12 @@ _08157F8C: b _0815809A .align 2, 0 _08157FA0: .4byte gActiveBattler -_08157FA4: .4byte gUnknown_2022BC7 +_08157FA4: .4byte (gBattleBufferA + 3) _08157FA8: ldr r0, _08157FBC @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157FC0 @ =gUnknown_2022BC7 + ldr r0, _08157FC0 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x18 @@ -3753,12 +3753,12 @@ _08157FA8: b _0815809A .align 2, 0 _08157FBC: .4byte gActiveBattler -_08157FC0: .4byte gUnknown_2022BC7 +_08157FC0: .4byte (gBattleBufferA + 3) _08157FC4: ldr r0, _08157FD8 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157FDC @ =gUnknown_2022BC7 + ldr r0, _08157FDC @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x21 @@ -3766,12 +3766,12 @@ _08157FC4: b _0815809A .align 2, 0 _08157FD8: .4byte gActiveBattler -_08157FDC: .4byte gUnknown_2022BC7 +_08157FDC: .4byte (gBattleBufferA + 3) _08157FE0: ldr r0, _08157FF4 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08157FF8 @ =gUnknown_2022BC7 + ldr r0, _08157FF8 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x2F @@ -3779,12 +3779,12 @@ _08157FE0: b _0815809A .align 2, 0 _08157FF4: .4byte gActiveBattler -_08157FF8: .4byte gUnknown_2022BC7 +_08157FF8: .4byte (gBattleBufferA + 3) _08157FFC: ldr r0, _08158010 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08158014 @ =gUnknown_2022BC7 + ldr r0, _08158014 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x30 @@ -3792,12 +3792,12 @@ _08157FFC: b _0815809A .align 2, 0 _08158010: .4byte gActiveBattler -_08158014: .4byte gUnknown_2022BC7 +_08158014: .4byte (gBattleBufferA + 3) _08158018: ldr r0, _0815802C @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08158030 @ =gUnknown_2022BC7 + ldr r0, _08158030 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x32 @@ -3805,12 +3805,12 @@ _08158018: b _0815809A .align 2, 0 _0815802C: .4byte gActiveBattler -_08158030: .4byte gUnknown_2022BC7 +_08158030: .4byte (gBattleBufferA + 3) _08158034: ldr r0, _08158048 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _0815804C @ =gUnknown_2022BC7 + ldr r0, _0815804C @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x33 @@ -3818,12 +3818,12 @@ _08158034: b _0815809A .align 2, 0 _08158048: .4byte gActiveBattler -_0815804C: .4byte gUnknown_2022BC7 +_0815804C: .4byte (gBattleBufferA + 3) _08158050: ldr r0, _08158064 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08158068 @ =gUnknown_2022BC7 + ldr r0, _08158068 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x34 @@ -3831,12 +3831,12 @@ _08158050: b _0815809A .align 2, 0 _08158064: .4byte gActiveBattler -_08158068: .4byte gUnknown_2022BC7 +_08158068: .4byte (gBattleBufferA + 3) _0815806C: ldr r0, _08158080 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _08158084 @ =gUnknown_2022BC7 + ldr r0, _08158084 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x35 @@ -3844,12 +3844,12 @@ _0815806C: b _0815809A .align 2, 0 _08158080: .4byte gActiveBattler -_08158084: .4byte gUnknown_2022BC7 +_08158084: .4byte (gBattleBufferA + 3) _08158088: ldr r0, _081580C4 @ =gActiveBattler ldrb r2, [r0] lsls r2, 9 - ldr r0, _081580C8 @ =gUnknown_2022BC7 + ldr r0, _081580C8 @ =(gBattleBufferA + 3) adds r2, r0 adds r0, r6, 0 movs r1, 0x36 @@ -3876,7 +3876,7 @@ _0815809A: bx r0 .align 2, 0 _081580C4: .4byte gActiveBattler -_081580C8: .4byte gUnknown_2022BC7 +_081580C8: .4byte (gBattleBufferA + 3) _081580CC: .4byte gBattlerPartyIndexes _081580D0: .4byte gPlayerParty thumb_func_end sub_81577B4 @@ -5063,7 +5063,7 @@ sub_8158A88: @ 8158A88 ldr r0, _08158AC4 @ =gActiveBattler ldrb r4, [r0] lsls r4, 9 - ldr r0, _08158AC8 @ =gUnknown_2022BC6 + ldr r0, _08158AC8 @ =(gBattleBufferA + 2) adds r4, r0 ldrh r0, [r4] bl BufferStringBattle @@ -5080,7 +5080,7 @@ sub_8158A88: @ 8158A88 _08158ABC: .4byte gBattle_BG0_X _08158AC0: .4byte gBattle_BG0_Y _08158AC4: .4byte gActiveBattler -_08158AC8: .4byte gUnknown_2022BC6 +_08158AC8: .4byte (gBattleBufferA + 2) _08158ACC: .4byte gDisplayedStringBattle _08158AD0: ldr r0, _08158AEC @ =gDisplayedStringBattle @@ -6552,7 +6552,7 @@ _08159690: strb r1, [r0] ldrb r0, [r5] lsls r4, r0, 9 - ldr r3, _081596DC @ =gUnknown_2022BC8 + ldr r3, _081596DC @ =(gBattleBufferA + 4) adds r1, r4, r3 subs r2, r3, 0x3 adds r2, r4, r2 @@ -6573,7 +6573,7 @@ _081596CE: .align 2, 0 _081596D4: .4byte gBattleSpritesDataPtr _081596D8: .4byte gActiveBattler -_081596DC: .4byte gUnknown_2022BC8 +_081596DC: .4byte (gBattleBufferA + 4) _081596E0: .4byte gBattlerStatusSummaryTaskId thumb_func_end sub_8159660 @@ -7081,7 +7081,7 @@ sub_8159AB8: @ 8159AB8 ldr r3, _08159B5C @ =gActiveBattler ldrb r5, [r3] lsls r1, r5, 9 - ldr r0, _08159B60 @ =gUnknown_2022BC6 + ldr r0, _08159B60 @ =(gBattleBufferA + 2) adds r7, r1, r0 mov r12, r7 subs r0, 0x2 @@ -7150,7 +7150,7 @@ _08159B04: _08159B54: .4byte gUnknown_8479198 _08159B58: .4byte gBattleStruct _08159B5C: .4byte gActiveBattler -_08159B60: .4byte gUnknown_2022BC6 +_08159B60: .4byte (gBattleBufferA + 2) _08159B64: .4byte gBattlerControllerFuncs _08159B68: .4byte gUnknown_3005EE0 _08159B6C: diff --git a/asm/battle_message.s b/asm/battle_message.s index bd1011f9a..388422402 100644 --- a/asm/battle_message.s +++ b/asm/battle_message.s @@ -20,7 +20,7 @@ BufferStringBattle: @ 80D7274 mov r8, r0 ldrb r1, [r0] lsls r1, 9 - ldr r0, _080D7338 @ =gUnknown_2022BC8 + ldr r0, _080D7338 @ =(gBattleBufferA + 4) adds r1, r0 str r1, [r4] ldr r2, _080D733C @ =gLastUsedItem @@ -107,7 +107,7 @@ _080D7326: .align 2, 0 _080D7330: .4byte gUnknown_2039A34 _080D7334: .4byte gActiveBattler -_080D7338: .4byte gUnknown_2022BC8 +_080D7338: .4byte (gBattleBufferA + 4) _080D733C: .4byte gLastUsedItem _080D7340: .4byte gLastUsedAbility _080D7344: .4byte gBattleScripting @@ -744,7 +744,7 @@ _080D7834: ldr r5, [sp] ldr r4, [sp, 0x4] movs r3, 0 - ldr r2, _080D7850 @ =gUnknown_82500CC + ldr r2, _080D7850 @ =gStatusConditionStringsTable _080D783C: ldr r1, [r2] ldr r0, [r1] @@ -756,7 +756,7 @@ _080D783C: ldr r0, [r2, 0x4] b _080D785E .align 2, 0 -_080D7850: .4byte gUnknown_82500CC +_080D7850: .4byte gStatusConditionStringsTable _080D7854: adds r2, 0x8 adds r3, 0x1 @@ -1647,13 +1647,13 @@ _080D7FF0: ldrb r1, [r0] movs r0, 0xD muls r1, r0 - ldr r0, _080D8004 @ =gUnknown_824FC40 + ldr r0, _080D8004 @ =gAbilityNames adds r4, r1, r0 b _080D8382 .align 2, 0 _080D7FFC: .4byte gUnknown_2039A30 _080D8000: .4byte gEffectBattler -_080D8004: .4byte gUnknown_824FC40 +_080D8004: .4byte gAbilityNames _080D8008: ldr r3, _080D8020 @ =gTrainerBattleOpponent_A ldrh r1, [r3] @@ -1917,7 +1917,7 @@ _080D81E8: _080D8204: .4byte gBattleTypeFlags _080D8208: .4byte gStringVar4 _080D820C: - bl sub_80806EC + bl GetTrainerALoseText adds r4, r0, 0 b _080D8382 _080D8214: @@ -1937,7 +1937,7 @@ _080D8214: _080D8230: .4byte gBattleTypeFlags _080D8234: .4byte gStringVar4 _080D8238: - bl sub_8080710 + bl GetTrainerWonSpeech adds r4, r0, 0 b _080D8382 _080D8240: @@ -2430,7 +2430,7 @@ _080D860C: ldrb r1, [r0, 0x1] movs r0, 0xD muls r1, r0 - ldr r0, _080D8624 @ =gUnknown_824FC40 + ldr r0, _080D8624 @ =gAbilityNames _080D8616: adds r1, r0 _080D8618: @@ -2439,7 +2439,7 @@ _080D8618: adds r5, 0x2 b _080D86B0 .align 2, 0 -_080D8624: .4byte gUnknown_824FC40 +_080D8624: .4byte gAbilityNames _080D8628: adds r0, r5, r7 ldrb r2, [r0, 0x1] @@ -2943,7 +2943,7 @@ SetPpNumbersPaletteInMoveSelection: @ 80D89DC ldr r0, _080D8A38 @ =gActiveBattler ldrb r2, [r0] lsls r1, r2, 9 - ldr r0, _080D8A3C @ =gUnknown_2022BC8 + ldr r0, _080D8A3C @ =(gBattleBufferA + 4) adds r1, r0 ldr r4, _080D8A40 @ =gUnknown_8D2FBB4 ldr r0, _080D8A44 @ =gMoveSelectionCursor @@ -2983,7 +2983,7 @@ SetPpNumbersPaletteInMoveSelection: @ 80D89DC bx r0 .align 2, 0 _080D8A38: .4byte gActiveBattler -_080D8A3C: .4byte gUnknown_2022BC8 +_080D8A3C: .4byte (gBattleBufferA + 4) _080D8A40: .4byte gUnknown_8D2FBB4 _080D8A44: .4byte gMoveSelectionCursor _080D8A48: .4byte gPlttBufferUnfaded diff --git a/asm/battle_setup.s b/asm/battle_setup.s deleted file mode 100644 index e8e0071db..000000000 --- a/asm/battle_setup.s +++ /dev/null @@ -1,2183 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_807F620 -sub_807F620: @ 807F620 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0807F640 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0807F644 - cmp r0, 0x1 - beq _0807F65E - b _0807F686 - .align 2, 0 -_0807F640: .4byte gTasks+0x8 -_0807F644: - bl FldEffPoison_IsActive - cmp r0, 0 - bne _0807F686 - bl HelpSystem_Disable - ldrb r0, [r4, 0x2] - bl BT_StartOnField - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0807F686 -_0807F65E: - bl BT_IsDone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807F686 - bl HelpSystem_Enable - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0807F68C @ =sub_800FD9C - bl SetMainCallback2 - bl sub_806D7E8 - bl ClearPoisonStepCounter - adds r0, r5, 0 - bl DestroyTask -_0807F686: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807F68C: .4byte sub_800FD9C - thumb_func_end sub_807F620 - - thumb_func_start sub_807F690 -sub_807F690: @ 807F690 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _0807F6C4 @ =sub_807F620 - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0807F6C8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - adds r0, r5, 0 - bl PlayMapChosenOrBattleBGM - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807F6C4: .4byte sub_807F620 -_0807F6C8: .4byte gTasks - thumb_func_end sub_807F690 - - thumb_func_start sub_807F6CC -sub_807F6CC: @ 807F6CC - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - cmp r0, 0x1 - bne _0807F6FC - adds r0, r1, 0 - subs r0, 0x58 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x6 - bhi _0807F6FC - ldr r0, _0807F6F8 @ =0x00000167 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - bne _0807F6FC - movs r0, 0x1 - b _0807F6FE - .align 2, 0 -_0807F6F8: .4byte 0x00000167 -_0807F6FC: - movs r0, 0 -_0807F6FE: - pop {r1} - bx r1 - thumb_func_end sub_807F6CC - - thumb_func_start sub_807F704 -sub_807F704: @ 807F704 - push {lr} - bl GetSafariZoneFlag - cmp r0, 0 - beq _0807F714 - bl sub_807F7D8 - b _0807F744 -_0807F714: - ldr r0, _0807F73C @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl sub_807F6CC - lsls r0, 24 - cmp r0, 0 - beq _0807F740 - bl sub_807F810 - b _0807F744 - .align 2, 0 -_0807F73C: .4byte gSaveBlock1Ptr -_0807F740: - bl sub_807F748 -_0807F744: - pop {r0} - bx r0 - thumb_func_end sub_807F704 - - thumb_func_start sub_807F748 -sub_807F748: @ 807F748 - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_805C780 - ldr r1, _0807F780 @ =gMain - ldr r0, _0807F784 @ =sub_807FB40 - str r0, [r1, 0x8] - ldr r1, _0807F788 @ =gBattleTypeFlags - movs r0, 0 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F780: .4byte gMain -_0807F784: .4byte sub_807FB40 -_0807F788: .4byte gBattleTypeFlags - thumb_func_end sub_807F748 - - thumb_func_start sub_807F78C -sub_807F78C: @ 807F78C - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_805C780 - ldr r1, _0807F7C8 @ =gMain - ldr r0, _0807F7CC @ =sub_807FB40 - str r0, [r1, 0x8] - ldr r1, _0807F7D0 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 3 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0807F7D4 @ =0x00000155 - bl sub_807F690 - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F7C8: .4byte gMain -_0807F7CC: .4byte sub_807FB40 -_0807F7D0: .4byte gBattleTypeFlags -_0807F7D4: .4byte 0x00000155 - thumb_func_end sub_807F78C - - thumb_func_start sub_807F7D8 -sub_807F7D8: @ 807F7D8 - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_805C780 - ldr r1, _0807F804 @ =gMain - ldr r0, _0807F808 @ =CB2_EndSafariBattle - str r0, [r1, 0x8] - ldr r1, _0807F80C @ =gBattleTypeFlags - movs r0, 0x80 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - pop {r0} - bx r0 - .align 2, 0 -_0807F804: .4byte gMain -_0807F808: .4byte CB2_EndSafariBattle -_0807F80C: .4byte gBattleTypeFlags - thumb_func_end sub_807F7D8 - - thumb_func_start sub_807F810 -sub_807F810: @ 807F810 - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_805C780 - ldr r1, _0807F854 @ =gMain - ldr r0, _0807F858 @ =sub_807FB40 - str r0, [r1, 0x8] - ldr r1, _0807F85C @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 8 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - ldr r0, _0807F860 @ =gEnemyParty - ldr r2, _0807F864 @ =gUnknown_841D148 - movs r1, 0x2 - bl SetMonData - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F854: .4byte gMain -_0807F858: .4byte sub_807FB40 -_0807F85C: .4byte gBattleTypeFlags -_0807F860: .4byte gEnemyParty -_0807F864: .4byte gUnknown_841D148 - thumb_func_end sub_807F810 - - thumb_func_start sub_807F868 -sub_807F868: @ 807F868 - push {lr} - bl sub_807FF80 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x9 - bl IncrementGameStat - pop {r0} - bx r0 - thumb_func_end sub_807F868 - - thumb_func_start sub_807F888 -sub_807F888: @ 807F888 - push {lr} - ldr r0, _0807F8B4 @ =gEnemyParty - movs r1, 0xD - movs r2, 0x5 - bl CreateMaleMon - bl ScriptContext2_Enable - ldr r1, _0807F8B8 @ =gMain - ldr r0, _0807F8BC @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - str r0, [r1, 0x8] - ldr r1, _0807F8C0 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 2 - str r0, [r1] - movs r0, 0x8 - movs r1, 0 - bl sub_807F690 - pop {r0} - bx r0 - .align 2, 0 -_0807F8B4: .4byte gEnemyParty -_0807F8B8: .4byte gMain -_0807F8BC: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_0807F8C0: .4byte gBattleTypeFlags - thumb_func_end sub_807F888 - - thumb_func_start BattleSetup_StartScriptedWildBattle -BattleSetup_StartScriptedWildBattle: @ 807F8C4 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807F8F8 @ =gMain - ldr r0, _0807F8FC @ =sub_807FBA0 - str r0, [r1, 0x8] - ldr r1, _0807F900 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 10 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F8F8: .4byte gMain -_0807F8FC: .4byte sub_807FBA0 -_0807F900: .4byte gBattleTypeFlags - thumb_func_end BattleSetup_StartScriptedWildBattle - - thumb_func_start sub_807F904 -sub_807F904: @ 807F904 - push {lr} - sub sp, 0xC - bl ScriptContext2_Enable - ldr r1, _0807F944 @ =gMain - ldr r0, _0807F948 @ =sub_807FBF0 - str r0, [r1, 0x8] - ldr r0, _0807F94C @ =0x00000167 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - beq _0807F958 - ldr r1, _0807F950 @ =gBattleTypeFlags - movs r0, 0xA0 - lsls r0, 8 - str r0, [r1] - ldr r0, _0807F954 @ =gEnemyParty - movs r1, 0xFE - str r1, [sp] - movs r1, 0xC - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x69 - movs r2, 0x1E - movs r3, 0x1F - bl CreateMonWithGenderNatureLetter - b _0807F960 - .align 2, 0 -_0807F944: .4byte gMain -_0807F948: .4byte sub_807FBF0 -_0807F94C: .4byte 0x00000167 -_0807F950: .4byte gBattleTypeFlags -_0807F954: .4byte gEnemyParty -_0807F958: - ldr r1, _0807F98C @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 8 - str r0, [r1] -_0807F960: - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - ldr r0, _0807F990 @ =gEnemyParty - ldr r2, _0807F994 @ =gUnknown_841D148 - movs r1, 0x2 - bl SetMonData - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_0807F98C: .4byte gBattleTypeFlags -_0807F990: .4byte gEnemyParty -_0807F994: .4byte gUnknown_841D148 - thumb_func_end sub_807F904 - - thumb_func_start sub_807F998 -sub_807F998: @ 807F998 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807F9CC @ =gMain - ldr r0, _0807F9D0 @ =sub_807FBA0 - str r0, [r1, 0x8] - ldr r1, _0807F9D4 @ =gBattleTypeFlags - movs r0, 0x80 - lsls r0, 6 - str r0, [r1] - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807F9CC: .4byte gMain -_0807F9D0: .4byte sub_807FBA0 -_0807F9D4: .4byte gBattleTypeFlags - thumb_func_end sub_807F998 - - thumb_func_start sub_807F9D8 -sub_807F9D8: @ 807F9D8 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807FA0C @ =gMain - ldr r0, _0807FA10 @ =sub_807FBA0 - str r0, [r1, 0x8] - ldr r1, _0807FA14 @ =gBattleTypeFlags - movs r0, 0x84 - lsls r0, 11 - str r0, [r1] - ldr r0, _0807FA18 @ =gEnemyParty - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, 0 - cmp r0, 0x96 - beq _0807FA2E - cmp r0, 0x96 - bgt _0807FA1C - cmp r0, 0x92 - bgt _0807FA4C - cmp r0, 0x90 - blt _0807FA4C - b _0807FA3C - .align 2, 0 -_0807FA0C: .4byte gMain -_0807FA10: .4byte sub_807FBA0 -_0807FA14: .4byte gBattleTypeFlags -_0807FA18: .4byte gEnemyParty -_0807FA1C: - cmp r1, 0xF9 - blt _0807FA4C - cmp r1, 0xFA - ble _0807FA3C - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - beq _0807FA34 - b _0807FA4C -_0807FA2E: - movs r1, 0xAA - lsls r1, 1 - b _0807FA3E -_0807FA34: - ldr r1, _0807FA38 @ =0x00000153 - b _0807FA3E - .align 2, 0 -_0807FA38: .4byte 0x00000153 -_0807FA3C: - ldr r1, _0807FA48 @ =0x00000155 -_0807FA3E: - movs r0, 0 - bl sub_807F690 - b _0807FA56 - .align 2, 0 -_0807FA48: .4byte 0x00000155 -_0807FA4C: - movs r1, 0x85 - lsls r1, 1 - movs r0, 0 - bl sub_807F690 -_0807FA56: - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - thumb_func_end sub_807F9D8 - - thumb_func_start sub_807FA68 -sub_807FA68: @ 807FA68 - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807FA90 @ =gMain - ldr r0, _0807FA94 @ =sub_807FBA0 - str r0, [r1, 0x8] - ldr r1, _0807FA98 @ =gBattleTypeFlags - movs r0, 0xC0 - lsls r0, 6 - str r0, [r1] - ldr r0, _0807FA9C @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x4 - bne _0807FAA0 - movs r1, 0x85 - lsls r1, 1 - movs r0, 0xB - bl sub_807F690 - b _0807FAAA - .align 2, 0 -_0807FA90: .4byte gMain -_0807FA94: .4byte sub_807FBA0 -_0807FA98: .4byte gBattleTypeFlags -_0807FA9C: .4byte gGameVersion -_0807FAA0: - movs r1, 0x85 - lsls r1, 1 - movs r0, 0xB - bl sub_807F690 -_0807FAAA: - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - thumb_func_end sub_807FA68 - - thumb_func_start sub_807FABC -sub_807FABC: @ 807FABC - push {lr} - bl ScriptContext2_Enable - ldr r1, _0807FAEC @ =gMain - ldr r0, _0807FAF0 @ =sub_807FBA0 - str r0, [r1, 0x8] - ldr r1, _0807FAF4 @ =gBattleTypeFlags - movs r0, 0xC0 - lsls r0, 7 - str r0, [r1] - movs r1, 0x85 - lsls r1, 1 - movs r0, 0 - bl sub_807F690 - movs r0, 0x7 - bl IncrementGameStat - movs r0, 0x8 - bl IncrementGameStat - pop {r0} - bx r0 - .align 2, 0 -_0807FAEC: .4byte gMain -_0807FAF0: .4byte sub_807FBA0 -_0807FAF4: .4byte gBattleTypeFlags - thumb_func_end sub_807FABC - - thumb_func_start sub_807FAF8 -sub_807FAF8: @ 807FAF8 - push {lr} - bl LoadPlayerParty - bl sub_807FB40 - pop {r0} - bx r0 - thumb_func_end sub_807FAF8 - - thumb_func_start sub_807FB08 -sub_807FB08: @ 807FB08 - push {lr} - bl ScriptContext2_Enable - bl player_bitmagic - bl sub_805C780 - ldr r1, _0807FB38 @ =gMain - ldr r0, _0807FB3C @ =sub_807FAF8 - str r0, [r1, 0x8] - bl SavePlayerParty - bl InitPokedudePartyAndOpponent - bl GetWildBattleTransition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_807F690 - pop {r0} - bx r0 - .align 2, 0 -_0807FB38: .4byte gMain -_0807FB3C: .4byte sub_807FAF8 - thumb_func_end sub_807FB08 - - thumb_func_start sub_807FB40 -sub_807FB40: @ 807FB40 - push {lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _0807FB74 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r0, _0807FB78 @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _0807FB80 - ldr r0, _0807FB7C @ =c2_whiteout - bl SetMainCallback2 - b _0807FB8C - .align 2, 0 -_0807FB74: .4byte 0x01000100 -_0807FB78: .4byte gBattleOutcome -_0807FB7C: .4byte c2_whiteout -_0807FB80: - ldr r0, _0807FB94 @ =CB2_ReturnToField - bl SetMainCallback2 - ldr r1, _0807FB98 @ =gFieldCallback - ldr r0, _0807FB9C @ =sub_807E3EC - str r0, [r1] -_0807FB8C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0807FB94: .4byte CB2_ReturnToField -_0807FB98: .4byte gFieldCallback -_0807FB9C: .4byte sub_807E3EC - thumb_func_end sub_807FB40 - - thumb_func_start sub_807FBA0 -sub_807FBA0: @ 807FBA0 - push {lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _0807FBD4 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r0, _0807FBD8 @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _0807FBE0 - ldr r0, _0807FBDC @ =c2_whiteout - bl SetMainCallback2 - b _0807FBE6 - .align 2, 0 -_0807FBD4: .4byte 0x01000100 -_0807FBD8: .4byte gBattleOutcome -_0807FBDC: .4byte c2_whiteout -_0807FBE0: - ldr r0, _0807FBEC @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 -_0807FBE6: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0807FBEC: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_807FBA0 - - thumb_func_start sub_807FBF0 -sub_807FBF0: @ 807FBF0 - push {r4,lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - movs r1, 0xA0 - lsls r1, 19 - ldr r2, _0807FC24 @ =0x01000100 - mov r0, sp - bl CpuSet - movs r0, 0 - movs r1, 0x80 - bl ResetOamRange - ldr r4, _0807FC28 @ =gBattleOutcome - ldrb r0, [r4] - bl IsPlayerDefeated - adds r1, r0, 0 - cmp r1, 0 - beq _0807FC30 - ldr r0, _0807FC2C @ =c2_whiteout - bl SetMainCallback2 - b _0807FC4C - .align 2, 0 -_0807FC24: .4byte 0x01000100 -_0807FC28: .4byte gBattleOutcome -_0807FC2C: .4byte c2_whiteout -_0807FC30: - ldrb r0, [r4] - cmp r0, 0x1 - bne _0807FC40 - ldr r0, _0807FC3C @ =gSpecialVar_Result - strh r1, [r0] - b _0807FC46 - .align 2, 0 -_0807FC3C: .4byte gSpecialVar_Result -_0807FC40: - ldr r1, _0807FC54 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_0807FC46: - ldr r0, _0807FC58 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 -_0807FC4C: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807FC54: .4byte gSpecialVar_Result -_0807FC58: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_807FBF0 - - thumb_func_start sub_807FC5C -sub_807FC5C: @ 807FC5C - push {r4,r5,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r5, r0, 16 - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsTallGrass_2 - lsls r0, 24 - cmp r0, 0 - beq _0807FC92 - movs r0, 0 - b _0807FD88 -_0807FC92: - adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_3 - lsls r0, 24 - cmp r0, 0 - beq _0807FCA2 - movs r0, 0x1 - b _0807FD88 -_0807FCA2: - adds r0, r4, 0 - bl MetatileBehavior_IsMB21OrWaterfallBottom - lsls r0, 24 - cmp r0, 0 - beq _0807FCB2 - movs r0, 0x2 - b _0807FD88 -_0807FCB2: - ldr r0, _0807FCC8 @ =gMapHeader - ldrb r0, [r0, 0x17] - subs r0, 0x1 - cmp r0, 0x8 - bhi _0807FD2C - lsls r0, 2 - ldr r1, _0807FCCC @ =_0807FCD0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807FCC8: .4byte gMapHeader -_0807FCCC: .4byte _0807FCD0 - .align 2, 0 -_0807FCD0: - .4byte _0807FD2C - .4byte _0807FD2C - .4byte _0807FD2C - .4byte _0807FCF4 - .4byte _0807FD18 - .4byte _0807FD1C - .4byte _0807FD2C - .4byte _0807FD04 - .4byte _0807FD04 -_0807FCF4: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsMB0B - lsls r0, 24 - cmp r0, 0 - beq _0807FD08 -_0807FD04: - movs r0, 0x8 - b _0807FD88 -_0807FD08: - adds r0, r4, 0 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FD70 - movs r0, 0x7 - b _0807FD88 -_0807FD18: - movs r0, 0x3 - b _0807FD88 -_0807FD1C: - lsls r0, r5, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FD82 - b _0807FD86 -_0807FD2C: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsDeepSemiDeepOrSplashingWater - lsls r0, 24 - cmp r0, 0 - bne _0807FD82 - adds r0, r4, 0 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FD70 - adds r0, r4, 0 - bl MetatileBehavior_IsMB0C - lsls r0, 24 - cmp r0, 0 - beq _0807FD58 - movs r0, 0x6 - b _0807FD88 -_0807FD58: - movs r0, 0x8 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _0807FD86 - adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_7 - lsls r0, 24 - cmp r0, 0 - beq _0807FD74 -_0807FD70: - movs r0, 0x5 - b _0807FD88 -_0807FD74: - adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_6 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807FD86 -_0807FD82: - movs r0, 0x4 - b _0807FD88 -_0807FD86: - movs r0, 0x9 -_0807FD88: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_807FC5C - - thumb_func_start GetBattleTransitionTypeByMap -GetBattleTransitionTypeByMap: @ 807FD90 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r4, r0, 16 - bl sav1_get_flash_used_on_map - lsls r0, 24 - cmp r0, 0 - beq _0807FDC0 - movs r0, 0x2 - b _0807FDEA -_0807FDC0: - lsls r0, r4, 24 - lsrs r0, 24 - bl MetatileBehavior_IsSurfable - lsls r0, 24 - cmp r0, 0 - bne _0807FDE8 - ldr r0, _0807FDE0 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x4 - beq _0807FDE4 - cmp r0, 0x5 - beq _0807FDE8 - movs r0, 0 - b _0807FDEA - .align 2, 0 -_0807FDE0: .4byte gMapHeader -_0807FDE4: - movs r0, 0x1 - b _0807FDEA -_0807FDE8: - movs r0, 0x3 -_0807FDEA: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetBattleTransitionTypeByMap - - thumb_func_start GetSumOfPlayerPartyLevel -GetSumOfPlayerPartyLevel: @ 807FDF4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r7, 0 - movs r6, 0 -_0807FDFE: - movs r0, 0x64 - adds r1, r6, 0 - muls r1, r0 - ldr r0, _0807FE50 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - adds r1, r0, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _0807FE42 - cmp r1, 0 - beq _0807FE42 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0807FE42 - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - adds r0, r7, r0 - lsls r0, 24 - lsrs r7, r0, 24 - subs r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _0807FE48 -_0807FE42: - adds r6, 0x1 - cmp r6, 0x5 - ble _0807FDFE -_0807FE48: - adds r0, r7, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0807FE50: .4byte gPlayerParty - thumb_func_end GetSumOfPlayerPartyLevel - - thumb_func_start reads_trainer_data_byte0 -reads_trainer_data_byte0: @ 807FE54 - push {r4,r5,lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r5, _0807FE88 @ =gTrainers - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r2, r1, r5 - adds r0, r2, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, r4 - bcs _0807FE74 - adds r4, r0, 0 -_0807FE74: - movs r3, 0 - ldrb r0, [r2] - cmp r0, 0x1 - beq _0807FEBC - cmp r0, 0x1 - bgt _0807FE8C - cmp r0, 0 - beq _0807FE96 - b _0807FF2C - .align 2, 0 -_0807FE88: .4byte gTrainers -_0807FE8C: - cmp r0, 0x2 - beq _0807FEE2 - cmp r0, 0x3 - beq _0807FF08 - b _0807FF2C -_0807FE96: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FEA4: - lsls r0, r2, 3 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _0807FEA4 - b _0807FF2C -_0807FEBC: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FECA: - lsls r0, r2, 4 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _0807FECA - b _0807FF2C -_0807FEE2: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FEF0: - lsls r0, r2, 3 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _0807FEF0 - b _0807FF2C -_0807FF08: - adds r0, r5, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r1, [r0] - movs r2, 0 - cmp r3, r4 - bcs _0807FF2C -_0807FF16: - lsls r0, r2, 4 - adds r0, r1 - ldrb r0, [r0, 0x2] - adds r0, r3, r0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r4 - bcc _0807FF16 -_0807FF2C: - adds r0, r3, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end reads_trainer_data_byte0 - - thumb_func_start GetWildBattleTransition -GetWildBattleTransition: @ 807FF34 - push {r4,r5,lr} - bl GetBattleTransitionTypeByMap - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0807FF64 @ =gEnemyParty - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl GetSumOfPlayerPartyLevel - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _0807FF6C - ldr r0, _0807FF68 @ =gUnknown_83C68F0 - lsls r1, r5, 1 - adds r0, 0x1 - b _0807FF70 - .align 2, 0 -_0807FF64: .4byte gEnemyParty -_0807FF68: .4byte gUnknown_83C68F0 -_0807FF6C: - ldr r0, _0807FF7C @ =gUnknown_83C68F0 - lsls r1, r5, 1 -_0807FF70: - adds r1, r0 - ldrb r0, [r1] - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0807FF7C: .4byte gUnknown_83C68F0 - thumb_func_end GetWildBattleTransition - - thumb_func_start sub_807FF80 -sub_807FF80: @ 807FF80 - push {r4-r6,lr} - ldr r4, _0807FFB4 @ =gTrainerBattleOpponent_A - ldrh r1, [r4] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - beq _0808000C - ldr r1, _0807FFB8 @ =gTrainers - ldrh r2, [r4] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x1] - cmp r1, 0x57 - bne _08080008 - adds r1, r2, 0 - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - beq _0807FFB0 - ldr r0, _0807FFBC @ =0x000002df - cmp r1, r0 - bne _0807FFC0 -_0807FFB0: - movs r0, 0xC - b _08080054 - .align 2, 0 -_0807FFB4: .4byte gTrainerBattleOpponent_A -_0807FFB8: .4byte gTrainers -_0807FFBC: .4byte 0x000002df -_0807FFC0: - ldr r0, _0807FFD4 @ =0x0000019b - cmp r1, r0 - beq _0807FFCE - movs r0, 0xB8 - lsls r0, 2 - cmp r1, r0 - bne _0807FFD8 -_0807FFCE: - movs r0, 0xD - b _08080054 - .align 2, 0 -_0807FFD4: .4byte 0x0000019b -_0807FFD8: - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _0807FFE6 - ldr r0, _0807FFEC @ =0x000002e1 - cmp r1, r0 - bne _0807FFF0 -_0807FFE6: - movs r0, 0xE - b _08080054 - .align 2, 0 -_0807FFEC: .4byte 0x000002e1 -_0807FFF0: - ldr r0, _08080000 @ =0x0000019d - cmp r1, r0 - beq _0807FFFC - ldr r0, _08080004 @ =0x000002e2 - cmp r1, r0 - bne _0808000C -_0807FFFC: - movs r0, 0xF - b _08080054 - .align 2, 0 -_08080000: .4byte 0x0000019d -_08080004: .4byte 0x000002e2 -_08080008: - cmp r1, 0x5A - bne _08080010 -_0808000C: - movs r0, 0x10 - b _08080054 -_08080010: - ldrb r0, [r0, 0x18] - movs r5, 0x1 - cmp r0, 0x1 - bne _0808001A - movs r5, 0x2 -_0808001A: - bl GetBattleTransitionTypeByMap - lsls r0, 24 - lsrs r6, r0, 24 - ldrh r0, [r4] - adds r1, r5, 0 - bl reads_trainer_data_byte0 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl GetSumOfPlayerPartyLevel - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _0808004C - ldr r0, _08080048 @ =gUnknown_83C68F8 - lsls r1, r6, 1 - adds r0, 0x1 - b _08080050 - .align 2, 0 -_08080048: .4byte gUnknown_83C68F8 -_0808004C: - ldr r0, _0808005C @ =gUnknown_83C68F8 - lsls r1, r6, 1 -_08080050: - adds r1, r0 - ldrb r0, [r1] -_08080054: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0808005C: .4byte gUnknown_83C68F8 - thumb_func_end sub_807FF80 - - thumb_func_start sub_8080060 -sub_8080060: @ 8080060 - push {r4,lr} - ldr r0, _08080084 @ =gEnemyParty - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl GetSumOfPlayerPartyLevel - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bcc _08080088 - movs r0, 0x3 - b _0808008A - .align 2, 0 -_08080084: .4byte gEnemyParty -_08080088: - movs r0, 0x4 -_0808008A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8080060 - - thumb_func_start TrainerBattleLoadArg32 -TrainerBattleLoadArg32: @ 8080090 - adds r2, r0, 0 - ldrb r0, [r2] - ldrb r1, [r2, 0x1] - lsls r1, 8 - orrs r0, r1 - ldrb r1, [r2, 0x2] - lsls r1, 16 - orrs r0, r1 - ldrb r1, [r2, 0x3] - lsls r1, 24 - orrs r0, r1 - bx lr - thumb_func_end TrainerBattleLoadArg32 - - thumb_func_start TrainerBattleLoadArg16 -TrainerBattleLoadArg16: @ 80800A8 - adds r1, r0, 0 - ldrb r0, [r1] - ldrb r1, [r1, 0x1] - lsls r1, 8 - orrs r0, r1 - bx lr - thumb_func_end TrainerBattleLoadArg16 - - thumb_func_start TrainerBattleLoadArg8 -TrainerBattleLoadArg8: @ 80800B4 - ldrb r0, [r0] - bx lr - thumb_func_end TrainerBattleLoadArg8 - - thumb_func_start trainerflag_opponent -trainerflag_opponent: @ 80800B8 - ldr r1, _080800CC @ =gTrainerBattleOpponent_A - movs r2, 0xA0 - lsls r2, 3 - adds r0, r2, 0 - ldrh r1, [r1] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - bx lr - .align 2, 0 -_080800CC: .4byte gTrainerBattleOpponent_A - thumb_func_end trainerflag_opponent - - thumb_func_start IsPlayerDefeated -IsPlayerDefeated: @ 80800D0 - push {lr} - subs r0, 0x1 - cmp r0, 0x6 - bhi _08080108 - lsls r0, 2 - ldr r1, _080800E4 @ =_080800E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080800E4: .4byte _080800E8 - .align 2, 0 -_080800E8: - .4byte _08080108 - .4byte _08080104 - .4byte _08080104 - .4byte _08080108 - .4byte _08080108 - .4byte _08080108 - .4byte _08080108 -_08080104: - movs r0, 0x1 - b _0808010A -_08080108: - movs r0, 0 -_0808010A: - pop {r1} - bx r1 - thumb_func_end IsPlayerDefeated - - thumb_func_start sub_8080110 -sub_8080110: @ 8080110 - ldr r0, _08080140 @ =gUnknown_20386AC - movs r1, 0 - strh r1, [r0] - ldr r0, _08080144 @ =gTrainerBattleOpponent_A - strh r1, [r0] - ldr r0, _08080148 @ =gUnknown_20386B0 - strh r1, [r0] - ldr r0, _0808014C @ =gUnknown_20386B4 - movs r1, 0 - str r1, [r0] - ldr r0, _08080150 @ =gUnknown_20386B8 - str r1, [r0] - ldr r0, _08080154 @ =gUnknown_20386BC - str r1, [r0] - ldr r0, _08080158 @ =gUnknown_20386C0 - str r1, [r0] - ldr r0, _0808015C @ =gUnknown_20386C4 - str r1, [r0] - ldr r0, _08080160 @ =gUnknown_20386C8 - str r1, [r0] - ldr r0, _08080164 @ =gUnknown_20386CC - strh r1, [r0] - bx lr - .align 2, 0 -_08080140: .4byte gUnknown_20386AC -_08080144: .4byte gTrainerBattleOpponent_A -_08080148: .4byte gUnknown_20386B0 -_0808014C: .4byte gUnknown_20386B4 -_08080150: .4byte gUnknown_20386B8 -_08080154: .4byte gUnknown_20386BC -_08080158: .4byte gUnknown_20386C0 -_0808015C: .4byte gUnknown_20386C4 -_08080160: .4byte gUnknown_20386C8 -_08080164: .4byte gUnknown_20386CC - thumb_func_end sub_8080110 - - thumb_func_start TrainerBattleLoadArgs -TrainerBattleLoadArgs: @ 8080168 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 -_0808016E: - ldrb r0, [r4, 0x4] - cmp r0, 0x6 - bhi _080801E0 - lsls r0, 2 - ldr r1, _08080180 @ =_08080184 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080180: .4byte _08080184 - .align 2, 0 -_08080184: - .4byte _080801A0 - .4byte _080801AE - .4byte _080801BC - .4byte _080801CA - .4byte _080801D2 - .4byte _080801DA - .4byte _080801E4 -_080801A0: - adds r0, r5, 0 - bl TrainerBattleLoadArg8 - ldr r1, [r4] - strb r0, [r1] - adds r5, 0x1 - b _080801E0 -_080801AE: - adds r0, r5, 0 - bl TrainerBattleLoadArg16 - ldr r1, [r4] - strh r0, [r1] - adds r5, 0x2 - b _080801E0 -_080801BC: - adds r0, r5, 0 - bl TrainerBattleLoadArg32 - ldr r1, [r4] - str r0, [r1] - adds r5, 0x4 - b _080801E0 -_080801CA: - ldr r1, [r4] - movs r0, 0 - strb r0, [r1] - b _080801E0 -_080801D2: - ldr r1, [r4] - movs r0, 0 - strh r0, [r1] - b _080801E0 -_080801DA: - ldr r1, [r4] - movs r0, 0 - str r0, [r1] -_080801E0: - adds r4, 0x8 - b _0808016E -_080801E4: - ldr r0, [r4] - str r5, [r0] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end TrainerBattleLoadArgs - - thumb_func_start battle_80801F0 -battle_80801F0: @ 80801F0 - push {lr} - ldr r0, _08080218 @ =gUnknown_20386B0 - ldrh r1, [r0] - cmp r1, 0 - beq _08080212 - ldr r0, _0808021C @ =gSpecialVar_LastTalked - strh r1, [r0] - lsls r0, r1, 24 - lsrs r0, 24 - ldr r1, _08080220 @ =gSaveBlock1Ptr - ldr r2, [r1] - ldrb r1, [r2, 0x5] - ldrb r2, [r2, 0x4] - bl GetFieldObjectIdByLocalIdAndMap - ldr r1, _08080224 @ =gSelectedEventObject - strb r0, [r1] -_08080212: - pop {r0} - bx r0 - .align 2, 0 -_08080218: .4byte gUnknown_20386B0 -_0808021C: .4byte gSpecialVar_LastTalked -_08080220: .4byte gSaveBlock1Ptr -_08080224: .4byte gSelectedEventObject - thumb_func_end battle_80801F0 - - thumb_func_start BattleSetup_ConfigureTrainerBattle -BattleSetup_ConfigureTrainerBattle: @ 8080228 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_8080110 - ldr r4, _08080250 @ =gUnknown_20386AC - adds r0, r5, 0 - bl TrainerBattleLoadArg8 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - ldrh r0, [r4] - subs r0, 0x1 - cmp r0, 0x8 - bhi _08080318 - lsls r0, 2 - ldr r1, _08080254 @ =_08080258 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080250: .4byte gUnknown_20386AC -_08080254: .4byte _08080258 - .align 2, 0 -_08080258: - .4byte _0808028C - .4byte _0808028C - .4byte _0808027C - .4byte _08080284 - .4byte _080802D8 - .4byte _08080294 - .4byte _080802AC - .4byte _08080294 - .4byte _08080304 -_0808027C: - ldr r0, _08080280 @ =gUnknown_83C69D8 - b _08080306 - .align 2, 0 -_08080280: .4byte gUnknown_83C69D8 -_08080284: - ldr r0, _08080288 @ =gUnknown_83C6990 - b _08080296 - .align 2, 0 -_08080288: .4byte gUnknown_83C6990 -_0808028C: - ldr r0, _08080290 @ =gUnknown_83C6948 - b _0808031A - .align 2, 0 -_08080290: .4byte gUnknown_83C6948 -_08080294: - ldr r0, _080802A4 @ =gUnknown_83C6A68 -_08080296: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r0, _080802A8 @ =gUnknown_81A4EE9 - b _08080326 - .align 2, 0 -_080802A4: .4byte gUnknown_83C6A68 -_080802A8: .4byte gUnknown_81A4EE9 -_080802AC: - bl sub_811231C - ldr r0, _080802CC @ =gUnknown_83C6990 - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r4, _080802D0 @ =gTrainerBattleOpponent_A - ldrh r0, [r4] - bl sub_810CE64 - strh r0, [r4] - ldr r0, _080802D4 @ =gUnknown_81A4F73 - b _08080326 - .align 2, 0 -_080802CC: .4byte gUnknown_83C6990 -_080802D0: .4byte gTrainerBattleOpponent_A -_080802D4: .4byte gUnknown_81A4F73 -_080802D8: - bl sub_811231C - ldr r0, _080802F8 @ =gUnknown_83C6900 - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r4, _080802FC @ =gTrainerBattleOpponent_A - ldrh r0, [r4] - bl sub_810CE64 - strh r0, [r4] - ldr r0, _08080300 @ =gUnknown_81A4F3E - b _08080326 - .align 2, 0 -_080802F8: .4byte gUnknown_83C6900 -_080802FC: .4byte gTrainerBattleOpponent_A -_08080300: .4byte gUnknown_81A4F3E -_08080304: - ldr r0, _08080310 @ =gUnknown_83C6A20 -_08080306: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - ldr r0, _08080314 @ =gUnknown_81A4F21 - b _08080326 - .align 2, 0 -_08080310: .4byte gUnknown_83C6A20 -_08080314: .4byte gUnknown_81A4F21 -_08080318: - ldr r0, _0808032C @ =gUnknown_83C6900 -_0808031A: - adds r1, r5, 0 - bl TrainerBattleLoadArgs - bl battle_80801F0 - ldr r0, _08080330 @ =gUnknown_81A4EC1 -_08080326: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0808032C: .4byte gUnknown_83C6900 -_08080330: .4byte gUnknown_81A4EC1 - thumb_func_end BattleSetup_ConfigureTrainerBattle - - thumb_func_start TrainerWantsBattle -TrainerWantsBattle: @ 8080334 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08080368 @ =gSelectedEventObject - strb r0, [r2] - ldr r4, _0808036C @ =gSpecialVar_LastTalked - ldr r3, _08080370 @ =gMapObjects - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrb r0, [r2, 0x8] - strh r0, [r4] - adds r1, 0x1 - adds r0, r1, 0 - bl BattleSetup_ConfigureTrainerBattle - ldr r0, _08080374 @ =gUnknown_81A4EB4 - bl ScriptContext1_SetupScript - bl ScriptContext2_Enable - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08080368: .4byte gSelectedEventObject -_0808036C: .4byte gSpecialVar_LastTalked -_08080370: .4byte gMapObjects -_08080374: .4byte gUnknown_81A4EB4 - thumb_func_end TrainerWantsBattle - - thumb_func_start GetTrainerFlagFromScriptPointer -GetTrainerFlagFromScriptPointer: @ 8080378 - push {lr} - adds r0, 0x2 - bl TrainerBattleLoadArg16 - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end GetTrainerFlagFromScriptPointer - - thumb_func_start sub_8080398 -sub_8080398: @ 8080398 - push {r4,lr} - ldr r0, _080803C4 @ =gSelectedEventObject - ldrb r0, [r0] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _080803C8 @ =gMapObjects - adds r4, r0 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl npc_running_behaviour_by_direction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl npc_set_running_behaviour_etc - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080803C4: .4byte gSelectedEventObject -_080803C8: .4byte gMapObjects - thumb_func_end sub_8080398 - - thumb_func_start sub_80803CC -sub_80803CC: @ 80803CC - ldr r0, _080803D4 @ =gUnknown_20386AC - ldrb r0, [r0] - bx lr - .align 2, 0 -_080803D4: .4byte gUnknown_20386AC - thumb_func_end sub_80803CC - - thumb_func_start sub_80803D8 -sub_80803D8: @ 80803D8 - ldr r0, _080803E0 @ =gUnknown_20386CC - ldrh r0, [r0] - bx lr - .align 2, 0 -_080803E0: .4byte gUnknown_20386CC - thumb_func_end sub_80803D8 - - thumb_func_start ScrSpecial_HasTrainerBeenFought -ScrSpecial_HasTrainerBeenFought: @ 80803E4 - push {lr} - bl trainerflag_opponent - lsls r0, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end ScrSpecial_HasTrainerBeenFought - - thumb_func_start sub_80803FC -sub_80803FC: @ 80803FC - push {lr} - bl trainerflag_opponent - lsls r0, 16 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end sub_80803FC - - thumb_func_start sub_8080410 -sub_8080410: @ 8080410 - push {lr} - bl trainerflag_opponent - lsls r0, 16 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end sub_8080410 - - thumb_func_start HasTrainerAlreadyBeenFought -HasTrainerAlreadyBeenFought: @ 8080424 - push {lr} - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end HasTrainerAlreadyBeenFought - - thumb_func_start SetTrainerFlag -SetTrainerFlag: @ 808043C - push {lr} - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagSet - pop {r0} - bx r0 - thumb_func_end SetTrainerFlag - - thumb_func_start ClearTrainerFlag -ClearTrainerFlag: @ 8080450 - push {lr} - lsls r0, 16 - movs r1, 0xA0 - lsls r1, 19 - adds r0, r1 - lsrs r0, 16 - bl FlagClear - pop {r0} - bx r0 - thumb_func_end ClearTrainerFlag - - thumb_func_start BattleSetup_StartTrainerBattle -BattleSetup_StartTrainerBattle: @ 8080464 - push {r4,lr} - ldr r4, _080804A0 @ =gBattleTypeFlags - movs r0, 0x8 - str r0, [r4] - bl sub_80803CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x9 - bne _0808048C - bl sub_80803D8 - movs r1, 0x3 - ands r1, r0 - cmp r1, 0 - beq _0808048C - ldr r0, [r4] - movs r1, 0x10 - orrs r0, r1 - str r0, [r4] -_0808048C: - ldr r1, _080804A4 @ =gMain - ldr r0, _080804A8 @ =sub_80804AC - str r0, [r1, 0x8] - bl sub_807F868 - bl ScriptContext1_Stop - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080804A0: .4byte gBattleTypeFlags -_080804A4: .4byte gMain -_080804A8: .4byte sub_80804AC - thumb_func_end BattleSetup_StartTrainerBattle - - thumb_func_start sub_80804AC -sub_80804AC: @ 80804AC - push {lr} - ldr r0, _080804D8 @ =gUnknown_20386AC - ldrh r0, [r0] - cmp r0, 0x9 - bne _08080508 - ldr r0, _080804DC @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - adds r1, r0, 0 - cmp r1, 0x1 - bne _080804E8 - ldr r0, _080804E0 @ =gSpecialVar_Result - strh r1, [r0] - ldr r0, _080804E4 @ =gUnknown_20386CC - ldrh r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08080530 - bl sp000_heal_pokemon - b _080804EE - .align 2, 0 -_080804D8: .4byte gUnknown_20386AC -_080804DC: .4byte gBattleOutcome -_080804E0: .4byte gSpecialVar_Result -_080804E4: .4byte gUnknown_20386CC -_080804E8: - ldr r0, _08080500 @ =gSpecialVar_Result - movs r1, 0 - strh r1, [r0] -_080804EE: - ldr r0, _08080504 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - bl sub_80803FC - bl sub_81139BC - b _0808054E - .align 2, 0 -_08080500: .4byte gSpecialVar_Result -_08080504: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_08080508: - ldr r0, _0808051C @ =gTrainerBattleOpponent_A - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08080524 - ldr r0, _08080520 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - b _0808054E - .align 2, 0 -_0808051C: .4byte gTrainerBattleOpponent_A -_08080520: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_08080524: - ldr r0, _08080538 @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _08080540 -_08080530: - ldr r0, _0808053C @ =c2_whiteout - bl SetMainCallback2 - b _0808054E - .align 2, 0 -_08080538: .4byte gBattleOutcome -_0808053C: .4byte c2_whiteout -_08080540: - ldr r0, _08080554 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - bl sub_80803FC - bl sub_81139BC -_0808054E: - pop {r0} - bx r0 - .align 2, 0 -_08080554: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80804AC - - thumb_func_start sub_8080558 -sub_8080558: @ 8080558 - push {lr} - ldr r0, _08080570 @ =gTrainerBattleOpponent_A - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08080578 - ldr r0, _08080574 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - b _080805A6 - .align 2, 0 -_08080570: .4byte gTrainerBattleOpponent_A -_08080574: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic -_08080578: - ldr r0, _0808058C @ =gBattleOutcome - ldrb r0, [r0] - bl IsPlayerDefeated - cmp r0, 0x1 - bne _08080594 - ldr r0, _08080590 @ =c2_whiteout - bl SetMainCallback2 - b _080805A6 - .align 2, 0 -_0808058C: .4byte gBattleOutcome -_08080590: .4byte c2_whiteout -_08080594: - ldr r0, _080805AC @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - bl sub_80803FC - bl sub_810CDE8 - bl sub_81138F8 -_080805A6: - pop {r0} - bx r0 - .align 2, 0 -_080805AC: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_8080558 - - thumb_func_start sub_80805B0 -sub_80805B0: @ 80805B0 - push {lr} - ldr r1, _080805CC @ =gBattleTypeFlags - movs r0, 0x8 - str r0, [r1] - ldr r1, _080805D0 @ =gMain - ldr r0, _080805D4 @ =sub_8080558 - str r0, [r1, 0x8] - bl sub_807F868 - bl ScriptContext1_Stop - pop {r0} - bx r0 - .align 2, 0 -_080805CC: .4byte gBattleTypeFlags -_080805D0: .4byte gMain -_080805D4: .4byte sub_8080558 - thumb_func_end sub_80805B0 - - thumb_func_start sub_80805D8 -sub_80805D8: @ 80805D8 - push {lr} - bl sub_80806D8 - bl ShowFieldMessage - pop {r0} - bx r0 - thumb_func_end sub_80805D8 - - thumb_func_start BattleSetup_GetScriptAddrAfterBattle -BattleSetup_GetScriptAddrAfterBattle: @ 80805E8 - push {lr} - ldr r0, _080805F8 @ =gUnknown_20386C4 - ldr r0, [r0] - cmp r0, 0 - bne _080805F4 - ldr r0, _080805FC @ =EventScript_1C555B -_080805F4: - pop {r1} - bx r1 - .align 2, 0 -_080805F8: .4byte gUnknown_20386C4 -_080805FC: .4byte EventScript_1C555B - thumb_func_end BattleSetup_GetScriptAddrAfterBattle - - thumb_func_start BattleSetup_GetTrainerPostBattleScript -BattleSetup_GetTrainerPostBattleScript: @ 8080600 - push {lr} - ldr r0, _08080610 @ =gUnknown_20386C8 - ldr r0, [r0] - cmp r0, 0 - bne _0808060C - ldr r0, _08080614 @ =EventScript_1C555B -_0808060C: - pop {r1} - bx r1 - .align 2, 0 -_08080610: .4byte gUnknown_20386C8 -_08080614: .4byte EventScript_1C555B - thumb_func_end BattleSetup_GetTrainerPostBattleScript - - thumb_func_start sub_8080618 -sub_8080618: @ 8080618 - push {lr} - bl sub_8080734 - bl ShowFieldMessage - pop {r0} - bx r0 - thumb_func_end sub_8080618 - - thumb_func_start PlayTrainerEncounterMusic -PlayTrainerEncounterMusic: @ 8080628 - push {lr} - ldr r0, _08080660 @ =gUnknown_203ADFA - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080806BE - ldr r0, _08080664 @ =gUnknown_20386AC - ldrh r0, [r0] - cmp r0, 0x1 - beq _080806BE - cmp r0, 0x8 - beq _080806BE - ldr r0, _08080668 @ =gTrainerBattleOpponent_A - ldrh r0, [r0] - bl GetTrainerEncounterMusicId - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xD - bhi _080806B8 - lsls r0, 2 - ldr r1, _0808066C @ =_08080670 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080660: .4byte gUnknown_203ADFA -_08080664: .4byte gUnknown_20386AC -_08080668: .4byte gTrainerBattleOpponent_A -_0808066C: .4byte _08080670 - .align 2, 0 -_08080670: - .4byte _080806AE - .4byte _080806A8 - .4byte _080806A8 - .4byte _080806B8 - .4byte _080806AE - .4byte _080806AE - .4byte _080806B8 - .4byte _080806B8 - .4byte _080806AE - .4byte _080806A8 - .4byte _080806AE - .4byte _080806AE - .4byte _080806AE - .4byte _080806AE -_080806A8: - @ MUS_SHOUJO - movs r0, 0x8E - lsls r0, 1 - b _080806BA -_080806AE: - @ MUS_SHOUNEN - ldr r0, _080806B4 @ =0x0000011d - b _080806BA - .align 2, 0 -_080806B4: .4byte 0x0000011d -_080806B8: - @ MUS_ROCKET - ldr r0, _080806C4 @ =0x0000011b -_080806BA: - bl PlayNewMapMusic -_080806BE: - pop {r0} - bx r0 - .align 2, 0 -_080806C4: .4byte 0x0000011b - thumb_func_end PlayTrainerEncounterMusic - - thumb_func_start sub_80806C8 -sub_80806C8: @ 80806C8 - push {lr} - cmp r0, 0 - bne _080806D0 - ldr r0, _080806D4 @ =gString_Dummy -_080806D0: - pop {r1} - bx r1 - .align 2, 0 -_080806D4: .4byte gString_Dummy - thumb_func_end sub_80806C8 - - thumb_func_start sub_80806D8 -sub_80806D8: @ 80806D8 - push {lr} - ldr r0, _080806E8 @ =gUnknown_20386B4 - ldr r0, [r0] - bl sub_80806C8 - pop {r1} - bx r1 - .align 2, 0 -_080806E8: .4byte gUnknown_20386B4 - thumb_func_end sub_80806D8 - - thumb_func_start sub_80806EC -sub_80806EC: @ 80806EC - push {r4,lr} - ldr r0, _08080708 @ =gUnknown_20386B8 - ldr r0, [r0] - ldr r4, _0808070C @ =gStringVar4 - bl sub_80806C8 - adds r1, r0, 0 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08080708: .4byte gUnknown_20386B8 -_0808070C: .4byte gStringVar4 - thumb_func_end sub_80806EC - - thumb_func_start sub_8080710 -sub_8080710: @ 8080710 - push {r4,lr} - ldr r4, _0808072C @ =gStringVar4 - ldr r0, _08080730 @ =gUnknown_20386BC - ldr r0, [r0] - bl sub_80806C8 - adds r1, r0, 0 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0808072C: .4byte gStringVar4 -_08080730: .4byte gUnknown_20386BC - thumb_func_end sub_8080710 - - thumb_func_start sub_8080734 -sub_8080734: @ 8080734 - push {lr} - ldr r0, _08080744 @ =gUnknown_20386C0 - ldr r0, [r0] - bl sub_80806C8 - pop {r1} - bx r1 - .align 2, 0 -_08080744: .4byte gUnknown_20386C0 - thumb_func_end sub_8080734 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 08fefffbc..837c59cfc 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2034,7 +2034,7 @@ sub_80E68C4: @ 80E68C4 ldr r1, _080E68F8 @ =sub_80E6854 str r1, [r0, 0x8] bl CleanupOverworldWindowsAndTilemaps - ldr r0, _080E68FC @ =sub_800FD9C + ldr r0, _080E68FC @ =CB2_InitBattle bl SetMainCallback2 adds r0, r4, 0 bl DestroyTask @@ -2045,7 +2045,7 @@ _080E68EC: .align 2, 0 _080E68F4: .4byte gMain _080E68F8: .4byte sub_80E6854 -_080E68FC: .4byte sub_800FD9C +_080E68FC: .4byte CB2_InitBattle thumb_func_end sub_80E68C4 thumb_func_start sub_80E6900 diff --git a/asm/cable_club.s b/asm/cable_club.s index 76346a28c..bb430400b 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -1637,7 +1637,7 @@ _0808141A: lsls r2, 4 adds r0, r2, 0 strh r0, [r1] - ldr r0, _08081448 @ =sub_800FD9C + ldr r0, _08081448 @ =CB2_InitBattle bl SetMainCallback2 ldr r1, _0808144C @ =gMain ldr r0, _08081450 @ =sub_8081668 @@ -1651,7 +1651,7 @@ _0808143A: .align 2, 0 _08081440: .4byte gBattleTypeFlags _08081444: .4byte gTrainerBattleOpponent_A -_08081448: .4byte sub_800FD9C +_08081448: .4byte CB2_InitBattle _0808144C: .4byte gMain _08081450: .4byte sub_8081668 thumb_func_end sub_8081318 @@ -1860,7 +1860,7 @@ _080815EA: lsls r3, 4 adds r0, r3, 0 strh r0, [r1] - ldr r0, _08081618 @ =sub_800FD9C + ldr r0, _08081618 @ =CB2_InitBattle bl SetMainCallback2 ldr r1, _0808161C @ =gMain ldr r0, _08081620 @ =sub_8081668 @@ -1874,7 +1874,7 @@ _0808160A: .align 2, 0 _08081610: .4byte gBattleTypeFlags _08081614: .4byte gTrainerBattleOpponent_A -_08081618: .4byte sub_800FD9C +_08081618: .4byte CB2_InitBattle _0808161C: .4byte gMain _08081620: .4byte sub_8081668 thumb_func_end sub_8081454 diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index d8651a24c..b718deee6 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -278,7 +278,7 @@ EvolutionScene: @ 80CDDF4 adds r6, r7, 0 adds r6, 0x1C adds r0, r1, r6 - ldr r2, _080CE0CC @ =nullsub_10 + ldr r2, _080CE0CC @ =SpriteCallbackDummy2 str r2, [r0] adds r1, r7 ldrb r2, [r1, 0x5] @@ -331,7 +331,7 @@ EvolutionScene: @ 80CDDF4 adds r1, r3 lsls r1, 2 adds r6, r1, r6 - ldr r2, _080CE0CC @ =nullsub_10 + ldr r2, _080CE0CC @ =SpriteCallbackDummy2 str r2, [r6] adds r1, r7 ldrb r0, [r1, 0x5] @@ -420,7 +420,7 @@ _080CE0BC: .4byte gMonSpritesGfxPtr _080CE0C0: .4byte gMultiuseSpriteTemplate _080CE0C4: .4byte gDummySpriteAffineAnimTable _080CE0C8: .4byte gSprites -_080CE0CC: .4byte nullsub_10 +_080CE0CC: .4byte SpriteCallbackDummy2 _080CE0D0: .4byte sub_80CE8DC _080CE0D4: .4byte gTasks _080CE0D8: .4byte gPlttBufferUnfaded + 0x40 @@ -562,7 +562,7 @@ CB2_EvolutionSceneLoadGraphics: @ 80CE0E8 adds r0, r3, 0 adds r0, 0x1C adds r0, r1, r0 - ldr r2, _080CE2CC @ =nullsub_10 + ldr r2, _080CE2CC @ =SpriteCallbackDummy2 str r2, [r0] adds r1, r3 ldrb r2, [r1, 0x5] @@ -623,7 +623,7 @@ _080CE2BC: .4byte gMonSpritesGfxPtr _080CE2C0: .4byte gMultiuseSpriteTemplate _080CE2C4: .4byte gDummySpriteAffineAnimTable _080CE2C8: .4byte gSprites -_080CE2CC: .4byte nullsub_10 +_080CE2CC: .4byte SpriteCallbackDummy2 _080CE2D0: .4byte nullsub_76 _080CE2D4: .4byte sub_80D0050 _080CE2D8: .4byte sub_80CE710 @@ -813,7 +813,7 @@ _080CE45C: adds r0, r3, 0 adds r0, 0x1C adds r0, r1, r0 - ldr r2, _080CE4C4 @ =nullsub_10 + ldr r2, _080CE4C4 @ =SpriteCallbackDummy2 str r2, [r0] adds r1, r3 ldrb r2, [r1, 0x5] @@ -836,7 +836,7 @@ _080CE4B4: .4byte gMultiuseSpriteTemplate _080CE4B8: .4byte gDummySpriteAffineAnimTable _080CE4BC: .4byte gUnknown_2039A20 _080CE4C0: .4byte gSprites -_080CE4C4: .4byte nullsub_10 +_080CE4C4: .4byte SpriteCallbackDummy2 _080CE4C8: .4byte gMain _080CE4CC: ldr r0, _080CE4FC @ =gWirelessCommType @@ -989,7 +989,7 @@ TradeEvolutionScene: @ 80CE540 adds r0, r3, 0 adds r0, 0x1C adds r0, r1, r0 - ldr r2, _080CE6D8 @ =nullsub_10 + ldr r2, _080CE6D8 @ =SpriteCallbackDummy2 str r2, [r0] adds r1, r3 ldrb r2, [r1, 0x5] @@ -1074,7 +1074,7 @@ _080CE6C8: .4byte gMonSpritesGfxPtr _080CE6CC: .4byte gMultiuseSpriteTemplate _080CE6D0: .4byte gDummySpriteAffineAnimTable _080CE6D4: .4byte gSprites -_080CE6D8: .4byte nullsub_10 +_080CE6D8: .4byte SpriteCallbackDummy2 _080CE6DC: .4byte sub_80CF53C _080CE6E0: .4byte gTasks _080CE6E4: .4byte gBattle_BG0_X @@ -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/field_control_avatar.s b/asm/field_control_avatar.s index 842c9c33e..a3333aacc 100644 --- a/asm/field_control_avatar.s +++ b/asm/field_control_avatar.s @@ -1953,13 +1953,13 @@ _0806D7E2: bx r1 thumb_func_end DoPoisonFieldEffect_step - thumb_func_start sub_806D7E8 -sub_806D7E8: @ 806D7E8 + thumb_func_start RestartWildEncounterImmunitySteps +RestartWildEncounterImmunitySteps: @ 806D7E8 push {lr} bl sub_80832D4 pop {r0} bx r0 - thumb_func_end sub_806D7E8 + thumb_func_end RestartWildEncounterImmunitySteps thumb_func_start is_it_battle_time_3 is_it_battle_time_3: @ 806D7F4 diff --git a/asm/field_effect.s b/asm/field_effect.s index 9919ccc24..a8542fcc3 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -1989,7 +1989,7 @@ mapldr_080842E8: @ 80842E8 movs r1, 0 bl CreateTask bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r1, _0808430C @ =gFieldCallback movs r0, 0 str r0, [r1] @@ -2092,7 +2092,7 @@ mapldr_08084390: @ 8084390 bl FieldObjectTurn _080843D2: bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r1, _080843F4 @ =gFieldCallback movs r0, 0 str r0, [r1] @@ -2158,7 +2158,7 @@ sub_8084454: @ 8084454 bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r0, _0808447C @ =sub_8084484 movs r1, 0 bl CreateTask @@ -2626,7 +2626,7 @@ _080847F4: .4byte gUnknown_83CC050 sub_80847F8: @ 80847F8 push {r4,lr} adds r4, r0, 0 - bl player_bitmagic + bl FreezeEventObjects bl CameraObjectReset2 ldrb r0, [r4, 0xA] bl sub_809C448 @@ -2889,7 +2889,7 @@ sub_80849F4: @ 80849F4 bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r0, _08084A1C @ =sub_8084A24 movs r1, 0 bl CreateTask @@ -3630,7 +3630,7 @@ sub_8084FA0: @ 8084FA0 push {r4,r5,lr} adds r4, r0, 0 adds r5, r1, 0 - bl player_bitmagic + bl FreezeEventObjects bl CameraObjectReset2 movs r0, 0 bl SetCameraPanningCallback @@ -3977,7 +3977,7 @@ sub_8085244: @ 8085244 adds r5, r0, 0 adds r4, r1, 0 bl CameraObjectReset2 - bl player_bitmagic + bl FreezeEventObjects ldr r1, _08085270 @ =gPlayerAvatar movs r0, 0x1 strb r0, [r1, 0x6] @@ -4239,7 +4239,7 @@ sub_8085440: @ 8085440 push {r4,r5,lr} adds r5, r0, 0 adds r4, r1, 0 - bl player_bitmagic + bl FreezeEventObjects bl CameraObjectReset2 ldr r1, _0808546C @ =gPlayerAvatar movs r0, 0x1 @@ -4482,7 +4482,7 @@ _0808561C: sub_8085620: @ 8085620 push {lr} bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r0, _08085638 @ =sub_808563C movs r1, 0x50 bl CreateTask @@ -4969,7 +4969,7 @@ sub_80859D4: @ 80859D4 bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r1, _08085A14 @ =gFieldCallback movs r0, 0 str r0, [r1] @@ -5198,7 +5198,7 @@ sub_8085BA8: @ 8085BA8 push {r4,lr} adds r4, r0, 0 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects bl CameraObjectReset2 bl GetPlayerFacingDirection lsls r0, 24 @@ -5435,7 +5435,7 @@ mapldr_08085D88: @ 8085D88 bl pal_fill_for_maplights bl sub_8111CF0 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r1, _08085DCC @ =gFieldCallback movs r0, 0 str r0, [r1] @@ -7000,7 +7000,7 @@ sub_80869C0: @ 80869C0 push {r6} adds r4, r0, 0 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r5, _08086A18 @ =gPlayerAvatar movs r0, 0x1 strb r0, [r5, 0x6] @@ -7276,7 +7276,7 @@ sub_8086C00: @ 8086C00 push {r4,lr} adds r4, r0, 0 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r1, _08086C20 @ =gPlayerAvatar movs r0, 0x1 strb r0, [r1, 0x6] diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index be79c3b21..7003a10f2 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -134,13 +134,13 @@ npc_pal_op: @ 80DAE54 cmp r0, 0 bne _080DAEB0 ldrb r0, [r5, 0x1F] - bl MetatileBehavior_ReturnFalse_7 + bl MetatileBehavior_GetBridgeType lsls r0, 24 lsrs r0, 24 cmp r0, 0 bne _080DAE96 ldrb r0, [r5, 0x1E] - bl MetatileBehavior_ReturnFalse_7 + bl MetatileBehavior_GetBridgeType lsls r0, 24 lsrs r0, 24 cmp r0, 0 @@ -1251,7 +1251,7 @@ _080DB6E8: cmp r0, 0 bne _080DB73C adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _080DB73C diff --git a/asm/field_ground_effect.s b/asm/field_ground_effect.s index 56af66346..b5ec3a622 100644 --- a/asm/field_ground_effect.s +++ b/asm/field_ground_effect.s @@ -224,7 +224,7 @@ GetGroundEffectFlags_LongGrassOnSpawn: @ 8067CE8 push {r4,lr} adds r4, r1, 0 ldrb r0, [r0, 0x1E] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _08067D00 @@ -243,7 +243,7 @@ GetGroundEffectFlags_LongGrassOnBeginStep: @ 8067D08 push {r4,lr} adds r4, r1, 0 ldrb r0, [r0, 0x1E] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _08067D20 @@ -838,12 +838,12 @@ FieldObjectSetSpriteOamTableForLongGrass: @ 8068154 cmp r0, 0 blt _080681A8 ldrb r0, [r5, 0x1E] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _080681A8 ldrb r0, [r5, 0x1F] - bl MetatileBehavior_ReturnFalse_3 + bl MetatileBehavior_IsLongGrass lsls r0, 24 cmp r0, 0 beq _080681A8 diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 57f7fbe1c..8787ff647 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -12214,8 +12214,8 @@ _0806360C: bx r1 thumb_func_end sub_80635DC - thumb_func_start npc_set_running_behaviour_etc -npc_set_running_behaviour_etc: @ 8063610 + thumb_func_start SetTrainerMovementType +SetTrainerMovementType: @ 8063610 push {r4,lr} mov r12, r0 lsls r1, 24 @@ -12253,10 +12253,10 @@ npc_set_running_behaviour_etc: @ 8063610 .align 2, 0 _08063654: .4byte gSprites _08063658: .4byte gUnknown_839FBC8 - thumb_func_end npc_set_running_behaviour_etc + thumb_func_end SetTrainerMovementType - thumb_func_start npc_running_behaviour_by_direction -npc_running_behaviour_by_direction: @ 806365C + thumb_func_start GetTrainerFacingDirectionMovementType +GetTrainerFacingDirectionMovementType: @ 806365C lsls r0, 24 lsrs r0, 24 ldr r1, _08063668 @ =gUnknown_83A649C @@ -12265,7 +12265,7 @@ npc_running_behaviour_by_direction: @ 806365C bx lr .align 2, 0 _08063668: .4byte gUnknown_83A649C - thumb_func_end npc_running_behaviour_by_direction + thumb_func_end GetTrainerFacingDirectionMovementType thumb_func_start npc_block_way__next_tile npc_block_way__next_tile: @ 806366C diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index c753fb948..5e7f64670 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -3964,7 +3964,7 @@ sub_805D0F8: @ 805D0F8 lsls r4, 24 lsrs r4, 24 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects bl sav1_reset_battle_music_maybe bl Overworld_ChangeMusicToDefault ldr r2, _0805D148 @ =gPlayerAvatar @@ -4005,7 +4005,7 @@ sub_805D154: @ 805D154 lsls r4, 24 lsrs r4, 24 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects ldr r2, _0805D19C @ =gPlayerAvatar ldrb r1, [r2] movs r0, 0xF7 diff --git a/asm/field_screen_effect.s b/asm/field_screen_effect.s index f8c0970c9..8d07f3779 100644 --- a/asm/field_screen_effect.s +++ b/asm/field_screen_effect.s @@ -306,7 +306,7 @@ sub_807F028: @ 807F028 lsls r0, 24 lsrs r0, 24 adds r4, r0, 0 - bl sav1_get_flash_used_on_map + bl Overworld_GetFlashLevel lsls r0, 24 lsrs r0, 24 movs r5, 0 diff --git a/asm/item_menu.s b/asm/item_menu.s index 9b1ab2492..a143d2776 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5845,7 +5845,7 @@ _0810AD1E: cmp r6, 0x1 bne _0810AD90 bl ScriptContext2_Enable - bl player_bitmagic + bl FreezeEventObjects bl sub_805C270 bl sub_805C780 ldr r2, _0810AD88 @ =gSpecialVar_ItemId diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index fd1cf3dc6..8f896ea7c 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -4012,8 +4012,8 @@ GetRfuPlayerCount: @ 80FA4EC _080FA4F4: .4byte gUnknown_3005450 thumb_func_end GetRfuPlayerCount - thumb_func_start IsRfuTaskFinished -IsRfuTaskFinished: @ 80FA4F8 + thumb_func_start IsLinkRfuTaskFinished +IsLinkRfuTaskFinished: @ 80FA4F8 push {lr} movs r1, 0 ldr r0, _080FA50C @ =gUnknown_3005450 @@ -4027,7 +4027,7 @@ _080FA506: bx r1 .align 2, 0 _080FA50C: .4byte gUnknown_3005450 - thumb_func_end IsRfuTaskFinished + thumb_func_end IsLinkRfuTaskFinished thumb_func_start sub_80FA510 sub_80FA510: @ 80FA510 diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 94a07fdaf..9fc1f72cc 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -12709,7 +12709,7 @@ _0811C096: lsls r2, 4 adds r1, r2, 0 strh r1, [r0] - ldr r0, _0811C0DC @ =sub_800FD9C + ldr r0, _0811C0DC @ =CB2_InitBattle bl SetMainCallback2 pop {r4-r7} pop {r0} @@ -12719,7 +12719,7 @@ _0811C0CC: .4byte gPlayerParty _0811C0D0: .4byte gEnemyParty _0811C0D4: .4byte gUnknown_203B0D4 _0811C0D8: .4byte gTrainerBattleOpponent_A -_0811C0DC: .4byte sub_800FD9C +_0811C0DC: .4byte CB2_InitBattle thumb_func_end sub_811C04C thumb_func_start sub_811C0E0 diff --git a/asm/map_obj_80688E4.s b/asm/map_obj_80688E4.s index bc06896bc..04df8c938 100644 --- a/asm/map_obj_80688E4.s +++ b/asm/map_obj_80688E4.s @@ -82,8 +82,8 @@ _0806896E: bx r1 thumb_func_end FreezeMapObject - thumb_func_start player_bitmagic -player_bitmagic: @ 8068974 + thumb_func_start FreezeEventObjects +FreezeEventObjects: @ 8068974 push {r4,r5,lr} movs r4, 0 ldr r5, _080689A8 @ =gMapObjects @@ -114,7 +114,7 @@ _08068998: .align 2, 0 _080689A8: .4byte gMapObjects _080689AC: .4byte gPlayerAvatar - thumb_func_end player_bitmagic + thumb_func_end FreezeEventObjects thumb_func_start FreezeMapObjectsExceptOne FreezeMapObjectsExceptOne: @ 80689B0 diff --git a/asm/overworld.s b/asm/overworld.s index 3fecdfa5c..2afe349ce 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -1708,7 +1708,7 @@ sub_8055864: @ 8055864 bl TrySetMapSaveWarpStatus bl sub_806E110 bl nullsub_74 - bl sub_806D7E8 + bl RestartWildEncounterImmunitySteps adds r0, r5, 0 adds r1, r4, 0 bl sub_810C578 @@ -1771,7 +1771,7 @@ sub_8055920: @ 8055920 bl TrySetMapSaveWarpStatus bl sub_806E110 bl nullsub_74 - bl sub_806D7E8 + bl RestartWildEncounterImmunitySteps ldr r0, _080559A0 @ =gSaveBlock1Ptr ldr r1, [r0] movs r0, 0x4 @@ -2284,8 +2284,8 @@ _08055D28: .4byte gUnknown_83C68E0 _08055D2C: .4byte gSaveBlock1Ptr thumb_func_end Overworld_SetFlashLevel - thumb_func_start sav1_get_flash_used_on_map -sav1_get_flash_used_on_map: @ 8055D30 + thumb_func_start Overworld_GetFlashLevel +Overworld_GetFlashLevel: @ 8055D30 ldr r0, _08055D3C @ =gSaveBlock1Ptr ldr r0, [r0] adds r0, 0x30 @@ -2293,7 +2293,7 @@ sav1_get_flash_used_on_map: @ 8055D30 bx lr .align 2, 0 _08055D3C: .4byte gSaveBlock1Ptr - thumb_func_end sav1_get_flash_used_on_map + thumb_func_end Overworld_GetFlashLevel thumb_func_start SetCurrentMapLayout SetCurrentMapLayout: @ 8055D40 @@ -3522,8 +3522,8 @@ _0805669C: .4byte sub_8056534 _080566A0: .4byte sub_80565B4 thumb_func_end CB2_NewGame - thumb_func_start c2_whiteout -c2_whiteout: @ 80566A4 + thumb_func_start CB2_WhiteOut +CB2_WhiteOut: @ 80566A4 push {lr} sub sp, 0x4 ldr r1, _08056708 @ =gMain @@ -3569,7 +3569,7 @@ _0805670C: .4byte gFieldCallback _08056710: .4byte sub_807F5F0 _08056714: .4byte sub_8056534 _08056718: .4byte sub_80565B4 - thumb_func_end c2_whiteout + thumb_func_end CB2_WhiteOut thumb_func_start CB2_LoadMap CB2_LoadMap: @ 805671C @@ -3944,7 +3944,7 @@ VBlankCB_Field: @ 8056A14 thumb_func_start sub_8056A34 sub_8056A34: @ 8056A34 push {lr} - bl sav1_get_flash_used_on_map + bl Overworld_GetFlashLevel lsls r0, 24 lsrs r0, 24 cmp r0, 0 diff --git a/asm/party_menu.s b/asm/party_menu.s index 946d184e6..25befd61d 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/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 8a01dcfb6..d0ce9ae61 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -4033,13 +4033,13 @@ _081366B8: adds r0, r1 movs r1, 0xD muls r1, r4 - ldr r2, _081367A0 @ =gUnknown_824FC40 + ldr r2, _081367A0 @ =gAbilityNames adds r1, r2 bl StringCopy ldr r0, [r6] ldr r2, _081367A4 @ =0x000031cc adds r0, r2 - ldr r1, _081367A8 @ =gUnknown_824FB08 + ldr r1, _081367A8 @ =gAbilityDescriptionPointers lsls r4, 2 adds r4, r1 ldr r1, [r4] @@ -4088,9 +4088,9 @@ _08136790: .4byte gExperienceTables _08136794: .4byte gBaseStats _08136798: .4byte 0x000031b0 _0813679C: .4byte 0x000031bc -_081367A0: .4byte gUnknown_824FC40 +_081367A0: .4byte gAbilityNames _081367A4: .4byte 0x000031cc -_081367A8: .4byte gUnknown_824FB08 +_081367A8: .4byte gAbilityDescriptionPointers _081367AC: .4byte 0x0000326c thumb_func_end sub_8136350 diff --git a/asm/post_battle_event_funcs.s b/asm/post_battle_event_funcs.s index 20455093a..4752d13c1 100644 --- a/asm/post_battle_event_funcs.s +++ b/asm/post_battle_event_funcs.s @@ -109,13 +109,13 @@ _080CA3C0: .4byte CB2_DoHallOfFameScreen thumb_func_start sub_80CA3C4 sub_80CA3C4: @ 80CA3C4 push {lr} - ldr r0, _080CA3D4 @ =c2_whiteout + ldr r0, _080CA3D4 @ =CB2_WhiteOut bl SetMainCallback2 movs r0, 0 pop {r1} bx r1 .align 2, 0 -_080CA3D4: .4byte c2_whiteout +_080CA3D4: .4byte CB2_WhiteOut thumb_func_end sub_80CA3C4 .align 2, 0 @ Don't pad with nop. diff --git a/asm/trade.s b/asm/trade.s index b5e8ee022..2beae297b 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -422,7 +422,7 @@ _0804C9B0: ldrb r0, [r0] cmp r0, 0 beq _0804C9E8 - bl IsRfuTaskFinished + bl IsLinkRfuTaskFinished lsls r0, 24 cmp r0, 0 bne _0804C9C4 @@ -1832,7 +1832,7 @@ sub_804D5A4: @ 804D5A4 ldrb r0, [r0] cmp r0, 0 beq _0804D5FC - bl IsRfuTaskFinished + bl IsLinkRfuTaskFinished lsls r0, 24 cmp r0, 0 beq _0804D620 @@ -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 @@ -14745,7 +14745,7 @@ _0805434C: ldr r0, _08054378 @ =sub_804C718 cmp r1, r0 bne _08054384 - bl IsRfuTaskFinished + bl IsLinkRfuTaskFinished lsls r0, 24 cmp r0, 0 beq _08054396 diff --git a/asm/trainer_see.s b/asm/trainer_see.s index c52229215..659e96c32 100644 --- a/asm/trainer_see.s +++ b/asm/trainer_see.s @@ -87,7 +87,7 @@ sub_8081B84: @ 8081B84 _08081BC0: adds r0, r5, 0 adds r1, r6, 0 - bl TrainerWantsBattle + bl ConfigureAndSetUpOneTrainerBattle adds r0, r4, r5 lsls r0, 2 ldr r1, _08081BE0 @ =gMapObjects @@ -718,16 +718,16 @@ _0808204A: ldrb r0, [r4, 0x18] lsls r0, 28 lsrs r0, 28 - bl npc_running_behaviour_by_direction + bl GetTrainerFacingDirectionMovementType adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 adds r0, r4, 0 - bl npc_set_running_behaviour_etc + bl SetTrainerMovementType ldrb r0, [r4, 0x18] lsls r0, 28 lsrs r0, 28 - bl npc_running_behaviour_by_direction + bl GetTrainerFacingDirectionMovementType adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -1277,17 +1277,17 @@ _0808246E: ldrb r0, [r4, 0x18] lsls r0, 28 lsrs r0, 28 - bl npc_running_behaviour_by_direction + bl GetTrainerFacingDirectionMovementType adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 adds r0, r4, 0 - bl npc_set_running_behaviour_etc + bl SetTrainerMovementType ldr r4, [sp] ldrb r0, [r4, 0x18] lsls r0, 28 lsrs r0, 28 - bl npc_running_behaviour_by_direction + bl GetTrainerFacingDirectionMovementType adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 diff --git a/asm/wild_encounter.s b/asm/wild_encounter.s index dedcfa761..86e3d964f 100644 --- a/asm/wild_encounter.s +++ b/asm/wild_encounter.s @@ -878,7 +878,7 @@ _08082D78: bl sub_8058F1C lsls r0, 24 lsrs r0, 24 - bl MetatileBehavior_ReturnFalse_6 + bl MetatileBehavior_IsBridge lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -932,7 +932,7 @@ _08082DFA: lsls r0, 24 cmp r0, 0 beq _08082E46 - bl sub_807F78C + bl BattleSetup_StartRoamerBattle movs r0, 0x1 b _08082E48 .align 2, 0 @@ -950,7 +950,7 @@ _08082E24: cmp r0, 0x1 bne _08082E40 _08082E38: - bl sub_807F704 + bl BattleSetup_StartWildBattle movs r0, 0x1 b _08082E48 _08082E40: @@ -999,7 +999,7 @@ Special_RockSmashEncounter: @ 8082E54 lsrs r4, r0, 24 cmp r4, 0x1 bne _08082EB0 - bl sub_807F704 + bl BattleSetup_StartWildBattle _08082E9C: ldr r0, _08082EAC @ =gSpecialVar_Result strh r4, [r0] @@ -1079,7 +1079,7 @@ _08082F1C: cmp r0, 0x1 bne _08082F44 _08082F3C: - bl sub_807F78C + bl BattleSetup_StartRoamerBattle movs r0, 0x1 b _08082F6E _08082F44: @@ -1096,7 +1096,7 @@ _08082F44: _08082F58: movs r2, 0 bl sub_8082AEC - bl sub_807F704 + bl BattleSetup_StartWildBattle movs r0, 0x1 b _08082F6E .align 2, 0 @@ -1160,7 +1160,7 @@ sub_8082FB0: @ 8082FB0 bl sub_8082B64 movs r0, 0xC bl IncrementGameStat - bl sub_807F704 + bl BattleSetup_StartWildBattle pop {r4,r5} pop {r0} bx r0 diff --git a/common_syms/battle_main.txt b/common_syms/battle_main.txt new file mode 100644 index 000000000..36f7596e2 --- /dev/null +++ b/common_syms/battle_main.txt @@ -0,0 +1,9 @@ +gPreBattleCallback1 +gBattleMainFunc +gBattleResults +gLeveledUpInBattle +gBattlerControllerFuncs +gHealthboxSpriteIds +gMultiUsePlayerCursor +gNumberOfMovesToChoose +gUnknown_3004FFC diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0fd65d2e0..8c049f4e0 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -42,46 +42,46 @@ BattleScript_GiveExp:: @ 81D8694 BattleScript_HandleFaintedMon:: @ 81D869D .incbin "baserom.gba", 0x1D869D, 0x152 -gUnknown_81D87EF:: @ 81D87EF +BattleScript_LocalTrainerBattleWon:: @ 81D87EF .incbin "baserom.gba", 0x1D87EF, 0x14 -gUnknown_81D8803:: @ 81D8803 +BattleScript_PayDayMoneyAndPickUpItems:: @ 81D8803 .incbin "baserom.gba", 0x1D8803, 0x3 -gUnknown_81D8806:: @ 81D8806 +BattleScript_LocalBattleLost:: @ 81D8806 .incbin "baserom.gba", 0x1D8806, 0xC6 -gUnknown_81D88CC:: @ 81D88CC +BattleScript_LinkBattleWonOrLost:: @ 81D88CC .incbin "baserom.gba", 0x1D88CC, 0xB gUnknown_81D88D7:: @ 81D88D7 .incbin "baserom.gba", 0x1D88D7, 0x2A -gUnknown_81D8901:: @ 81D8901 +BattleScript_SmokeBallEscape:: @ 81D8901 .incbin "baserom.gba", 0x1D8901, 0xE -gUnknown_81D890F:: @ 81D890F +BattleScript_RanAwayUsingMonAbility:: @ 81D890F .incbin "baserom.gba", 0x1D890F, 0x7 -gUnknown_81D8916:: @ 81D8916 +BattleScript_GotAwaySafely:: @ 81D8916 .incbin "baserom.gba", 0x1D8916, 0x7 -gUnknown_81D891D:: @ 81D891D +BattleScript_WildMonFled:: @ 81D891D .incbin "baserom.gba", 0x1D891D, 0x7 -gUnknown_81D8924:: @ 81D8924 +BattleScript_PrintCantRunFromTrainer:: @ 81D8924 .incbin "baserom.gba", 0x1D8924, 0x16 -gUnknown_81D893A:: @ 81D893A +BattleScript_PrintFailedToRunString:: @ 81D893A .incbin "baserom.gba", 0x1D893A, 0x9 -gUnknown_81D8943:: @ 81D8943 +BattleScript_PrintCantEscapeFromBattle:: @ 81D8943 .incbin "baserom.gba", 0x1D8943, 0x6 -gUnknown_81D8949:: @ 81D8949 +BattleScript_PrintFullBox:: @ 81D8949 .incbin "baserom.gba", 0x1D8949, 0x4 -gUnknown_81D894D:: @ 81D894D +BattleScript_ActionSwitch:: @ 81D894D .incbin "baserom.gba", 0x1D894D, 0xA4 BattleScript_Pausex20:: @ 81D89F1 @@ -237,7 +237,7 @@ BattleScript_OneHitKOMsg:: @ 81D8FE4 BattleScript_SAtkDown2:: @ 81D8FEB .incbin "baserom.gba", 0x1D8FEB, 0x2A -gUnknown_81D9015:: @ 81D9015 +BattleScript_FocusPunchSetUp:: @ 81D9015 .incbin "baserom.gba", 0x1D9015, 0x14 BattleScript_MoveUsedIsAsleep:: @ 81D9029 @@ -549,7 +549,7 @@ BattleScript_BerryStatRaiseEnd2:: @ 81D9679 BattleScript_BerryFocusEnergyEnd2:: @ 81D9694 .incbin "baserom.gba", 0x1D9694, 0x10 -gUnknown_81D96A4:: @ 81D96A4 +BattleScript_ActionSelectionItemsCantBeUsed:: @ 81D96A4 .incbin "baserom.gba", 0x1D96A4, 0x4 BattleScript_FlushMessageBox:: @ 81D96A8 diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index c3747cd8d..199fd0c78 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -1,15 +1,15 @@ .section script_data, "aw", %progbits -gUnknown_81D99B0:: @ 81D99B0 +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 -gUnknown_81D9A04:: @ 81D9A04 +gBattlescriptsForSafariActions:: @ 81D9A04 .incbin "baserom.gba", 0x1D9A04, 0x3E BattleScript_SuccessBallThrow:: @ 81D9A42 diff --git a/data/data.s b/data/data.s index 366d6bf46..72c9374b9 100644 --- a/data/data.s +++ b/data/data.s @@ -22,7 +22,7 @@ gUnknown_8248300:: @ 8248300 gUnknown_8248318:: @ 8248318 .incbin "baserom.gba", 0x248318, 0x8 -gUnknown_8248320:: @ 8248320 +gBattleBgTemplates:: @ 8248320 .incbin "baserom.gba", 0x248320, 0x10 gUnknown_8248330:: @ 8248330 @@ -33,73 +33,7 @@ gUnknown_824EE34:: @ 824EE34 gUnknown_824EFC4:: @ 824EFC4 .incbin "baserom.gba", 0x24EFC4, 0x20 - -gUnknown_824EFE4:: @ 824EFE4 - .incbin "baserom.gba", 0x24EFE4, 0xC - -gUnknown_824EFF0:: @ 824EFF0 - .incbin "baserom.gba", 0x24EFF0, 0x18 - -gUnknown_824F008:: @ 824F008 - .incbin "baserom.gba", 0x24F008, 0x8 - -gUnknown_824F010:: @ 824F010 - .incbin "baserom.gba", 0x24F010, 0x8 - -gUnknown_824F018:: @ 824F018 - .incbin "baserom.gba", 0x24F018, 0x8 - -gUnknown_824F020:: @ 824F020 - .incbin "baserom.gba", 0x24F020, 0x28 - -gUnknown_824F048:: @ 824F048 - .incbin "baserom.gba", 0x24F048, 0x8 - -gTypeEffectiveness:: @ 824F050 - .incbin "baserom.gba", 0x24F050, 0x150 - -gTypeNames:: @ 824F1A0 - .incbin "baserom.gba", 0x24F1A0, 0x80 - -gTrainerMoneyTable:: @ 824F220 - .incbin "baserom.gba", 0x24F220, 0x8E8 - -gUnknown_824FB08:: @ 824FB08 - .incbin "baserom.gba", 0x24FB08, 0x138 - -gUnknown_824FC40:: @ 824FC40 - .incbin "baserom.gba", 0x24FC40, 0x3F8 - -gUnknown_8250038:: @ 8250038 - .incbin "baserom.gba", 0x250038, 0x38 - -gUnknown_8250070:: @ 8250070 - .incbin "baserom.gba", 0x250070, 0x24 - -gStatusConditionString_PoisonJpn:: @ 8250094 - .incbin "baserom.gba", 0x250094, 0x8 - -gStatusConditionString_SleepJpn:: @ 825009C - .incbin "baserom.gba", 0x25009C, 0x8 - -gStatusConditionString_ParalysisJpn:: @ 82500A4 - .incbin "baserom.gba", 0x2500A4, 0x8 - -gStatusConditionString_BurnJpn:: @ 82500AC - .incbin "baserom.gba", 0x2500AC, 0x8 - -gStatusConditionString_IceJpn:: @ 82500B4 - .incbin "baserom.gba", 0x2500B4, 0x8 - -gStatusConditionString_ConfusionJpn:: @ 82500BC - .incbin "baserom.gba", 0x2500BC, 0x8 - -gStatusConditionString_LoveJpn:: @ 82500C4 - .incbin "baserom.gba", 0x2500C4, 0x8 - -gUnknown_82500CC:: @ 82500CC - .incbin "baserom.gba", 0x2500CC, 0x38 - + .section .rodata.8260270 gUnknown_8260270:: @ 8260270 diff --git a/data/data_835B488.s b/data/data_835B488.s index b2b76476c..f3385b949 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -13,29 +13,7 @@ gUnknown_83C68E4:: @ 83C68E4 gUnknown_83C68EC:: @ 83C68EC .incbin "baserom.gba", 0x3C68EC, 0x4 -gUnknown_83C68F0:: @ 83C68F0 - .incbin "baserom.gba", 0x3C68F0, 0x8 - -gUnknown_83C68F8:: @ 83C68F8 - .incbin "baserom.gba", 0x3C68F8, 0x8 - -gUnknown_83C6900:: @ 83C6900 - .incbin "baserom.gba", 0x3C6900, 0x48 - -gUnknown_83C6948:: @ 83C6948 - .incbin "baserom.gba", 0x3C6948, 0x48 - -gUnknown_83C6990:: @ 83C6990 - .incbin "baserom.gba", 0x3C6990, 0x48 - -gUnknown_83C69D8:: @ 83C69D8 - .incbin "baserom.gba", 0x3C69D8, 0x48 - -gUnknown_83C6A20:: @ 83C6A20 - .incbin "baserom.gba", 0x3C6A20, 0x48 - -gUnknown_83C6A68:: @ 83C6A68 - .incbin "baserom.gba", 0x3C6A68, 0x48 + .section .rodata.83C6AB0 gUnknown_83C6AB0:: @ 83C6AB0 .incbin "baserom.gba", 0x3C6AB0, 0x8 diff --git a/data/data_83F5738.s b/data/data_83F5738.s index 1f9839561..cd73dd0d1 100644 --- a/data/data_83F5738.s +++ b/data/data_83F5738.s @@ -424,7 +424,28 @@ gUnknown_83FE80C:: @ 83FE80C .incbin "baserom.gba", 0x3FE80C, 0x10 gUnknown_83FE81C:: @ 83FE81C - .incbin "baserom.gba", 0x3FE81C, 0x3D + .incbin "baserom.gba", 0x3FE81C, 0xE + +gText_Sleep:: @ 83FE82A + .incbin "baserom.gba", 0x3FE82A, 0x6 + +gText_Poison:: @ 83FE830 + .incbin "baserom.gba", 0x3FE830, 0x7 + +gText_Burn:: @ 83FE837 + .incbin "baserom.gba", 0x3FE837, 0x5 + +gText_Paralysis:: @ 83FE83C + .incbin "baserom.gba", 0x3FE83C, 0xA + +gText_Ice:: @ 83FE846 + .incbin "baserom.gba", 0x3FE846, 0x4 + +gText_Confusion:: @ 83FE84A + .incbin "baserom.gba", 0x3FE84A, 0xA + +gText_Love:: @ 83FE854 + .incbin "baserom.gba", 0x3FE854, 0x5 gUnknown_83FE859:: @ 83FE859 .incbin "baserom.gba", 0x3FE859, 0x3 diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index 43fbd003f..df188dda0 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -137,7 +137,7 @@ gUnknown_84020DA:: @ 84020DA gUnknown_84020E6:: @ 84020E6 .incbin "baserom.gba", 0x4020E6, 0x12 -gUnknown_84020F8:: @ 84020F8 +sOakOldManBufferCommands:: @ 84020F8 .incbin "baserom.gba", 0x4020F8, 0xE4 .section .rodata.battle_anim_special diff --git a/data/event_scripts.s b/data/event_scripts.s index 8f9e8ae26..dbb81864b 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -841,42 +841,42 @@ EventScript_1A4EAF:: @ 81A4EAF gUnknown_81A4EB4:: @ 81A4EB4 lock - special PlayTrainerEncounterMusic + special SetUpTrainerEncounterMusic special ScrSpecial_EndTrainerApproach waitstate goto EventScript_1A4FC7 -gUnknown_81A4EC1:: @ 81A4EC1 +EventScript_TryDoNormalTrainerBattle:: @ 81A4EC1 lock faceplayer applymovement VAR_LAST_TALKED, Movement_1A4FC5 waitmovement 0 - specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought + specialvar VAR_RESULT, GetTrainerFlag compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4EE8 - special PlayTrainerEncounterMusic - special sub_8080398 + special SetUpTrainerEncounterMusic + special SetUpTrainerMovement goto EventScript_1A4FC7 EventScript_1A4EE8:: @ 81A4EE8 ontrainerbattleend -gUnknown_81A4EE9:: @ 81A4EE9 +EventScript_TryDoDoubleTrainerBattle:: @ 81A4EE9 lock faceplayer call EventScript_1A4FBA - specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought + specialvar VAR_RESULT, GetTrainerFlag compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F20 special CheckForAlivePartyMons compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F19 - special PlayTrainerEncounterMusic - special sub_8080398 + special SetUpTrainerEncounterMusic + special SetUpTrainerMovement goto EventScript_1A4FC7 EventScript_1A4F19:: @ 81A4F19 - special sub_8080618 + special ShowTrainerCantBattleSpeech waitmessage waitbuttonpress release @@ -885,30 +885,30 @@ EventScript_1A4F19:: @ 81A4F19 EventScript_1A4F20:: @ 81A4F20 ontrainerbattleend -gUnknown_81A4F21:: @ 81A4F21 +EventScript_DoTrainerBattle:: @ 81A4F21 applymovement VAR_LAST_TALKED, Movement_1A4FC5 waitmovement 0 - special PlayTrainerEncounterMusic + special SetUpTrainerEncounterMusic special sub_8110AB4 compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A501A battlebegin ontrainerbattleend -gUnknown_81A4F3E:: @ 81A4F3E +EventScript_TryDoRematchBattle:: @ 81A4F3E call EventScript_1A4FBA specialvar VAR_RESULT, sub_810CEB4 compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1A4F72 - special PlayTrainerEncounterMusic - special sub_8080398 - special sub_80805D8 + special SetUpTrainerEncounterMusic + special SetUpTrainerMovement + special ShowTrainerIntroSpeech waitmessage waitbuttonpress special sub_8110AB4 compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A4FB8 - special sub_80805B0 + special BattleSetup_StartRematchBattle waitstate releaseall end @@ -916,22 +916,22 @@ gUnknown_81A4F3E:: @ 81A4F3E EventScript_1A4F72:: @ 81A4F72 ontrainerbattleend -gUnknown_81A4F73:: @ 81A4F73 +EventScript_TryDoDoubleRematchBattle:: @ 81A4F73 specialvar VAR_RESULT, sub_810CEB4 compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1A4FB0 special CheckForAlivePartyMons compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4FB1 - special PlayTrainerEncounterMusic - special sub_8080398 - special sub_80805D8 + special SetUpTrainerEncounterMusic + special SetUpTrainerMovement + special ShowTrainerIntroSpeech waitmessage waitbuttonpress special sub_8110AB4 compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A4FB8 - special sub_80805B0 + special BattleSetup_StartRematchBattle waitstate releaseall end @@ -940,7 +940,7 @@ EventScript_1A4FB0:: @ 81A4FB0 ontrainerbattleend EventScript_1A4FB1:: @ 81A4FB1 - special sub_8080618 + special ShowTrainerCantBattleSpeech waitmessage waitbuttonpress release @@ -960,14 +960,14 @@ Movement_1A4FC5:: @ 81A4FC5 step_end EventScript_1A4FC7:: @ 81A4FC7 - special sub_80805D8 + special ShowTrainerIntroSpeech waitmessage waitbuttonpress special sub_8110AB4 compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A501A battlebegin - specialvar VAR_RESULT, sub_80803CC + specialvar VAR_RESULT, GetTrainerBattleMode compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1A5017 compare_var_to_value VAR_RESULT, 2 @@ -987,7 +987,7 @@ EventScript_1A5019:: @ 81A5019 ontrainerbattleendgoto EventScript_1A501A:: @ 81A501A - special sub_80803FC + special SetBattledTrainerFlag releaseall end diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index f23c73615..b51a8ff00 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -92,7 +92,7 @@ EventScript_1652C0:: @ 81652C0 setvar VAR_0x8006, 0 special CreateObedientEnemyMon setflag FLAG_SYS_SPECIAL_WILD_BATTLE - special sub_807F9D8 + special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_SPECIAL_WILD_BATTLE specialvar VAR_RESULT, Special_GetBattleOutcome diff --git a/data/maps/CeruleanCave_B1F/scripts.inc b/data/maps/CeruleanCave_B1F/scripts.inc index ad68f84bc..e477ef3e3 100644 --- a/data/maps/CeruleanCave_B1F/scripts.inc +++ b/data/maps/CeruleanCave_B1F/scripts.inc @@ -41,7 +41,7 @@ CeruleanCave_B1F_EventScript_1624F5:: @ 81624F5 waitbuttonpress setwildbattle SPECIES_MEWTWO, 70, ITEM_NONE setflag FLAG_SYS_SPECIAL_WILD_BATTLE - special sub_807F9D8 + special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_SPECIAL_WILD_BATTLE specialvar VAR_RESULT, Special_GetBattleOutcome diff --git a/data/maps/MtEmber_Summit/scripts.inc b/data/maps/MtEmber_Summit/scripts.inc index 8287d1d93..87b3a6e4a 100644 --- a/data/maps/MtEmber_Summit/scripts.inc +++ b/data/maps/MtEmber_Summit/scripts.inc @@ -41,7 +41,7 @@ MtEmber_Summit_EventScript_163B33:: @ 8163B33 playbgm MUS_EXEYE, 0 waitbuttonpress setflag FLAG_SYS_SPECIAL_WILD_BATTLE - special sub_807F9D8 + special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_SPECIAL_WILD_BATTLE specialvar VAR_RESULT, Special_GetBattleOutcome diff --git a/data/maps/NavelRock_Base/scripts.inc b/data/maps/NavelRock_Base/scripts.inc index 98bb6f920..f86d87888 100644 --- a/data/maps/NavelRock_Base/scripts.inc +++ b/data/maps/NavelRock_Base/scripts.inc @@ -65,7 +65,7 @@ NavelRock_Base_EventScript_165134:: @ 8165134 setvar VAR_0x8006, 0 special CreateObedientEnemyMon setflag FLAG_SYS_SPECIAL_WILD_BATTLE - special sub_807F9D8 + special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_SPECIAL_WILD_BATTLE specialvar VAR_RESULT, Special_GetBattleOutcome diff --git a/data/maps/NavelRock_Summit/scripts.inc b/data/maps/NavelRock_Summit/scripts.inc index f73aaf1ec..46336b536 100644 --- a/data/maps/NavelRock_Summit/scripts.inc +++ b/data/maps/NavelRock_Summit/scripts.inc @@ -69,7 +69,7 @@ NavelRock_Summit_EventScript_164FFB:: @ 8164FFB setvar VAR_0x8006, 0 special CreateObedientEnemyMon setflag FLAG_SYS_SPECIAL_WILD_BATTLE - special sub_807F9D8 + special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_SPECIAL_WILD_BATTLE setvar VAR_LAST_TALKED, 1 diff --git a/data/maps/PokemonTower_6F/scripts.inc b/data/maps/PokemonTower_6F/scripts.inc index ee40d071b..55be7ec1b 100644 --- a/data/maps/PokemonTower_6F/scripts.inc +++ b/data/maps/PokemonTower_6F/scripts.inc @@ -9,7 +9,7 @@ PokemonTower_6F_EventScript_1634B8:: @ 81634B8 compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A7AE0 setwildbattle SPECIES_MAROWAK, 30, ITEM_NONE - special sub_807F904 + special BattleSetup_StartMarowakBattle waitstate special sub_8112364 compare_var_to_value VAR_RESULT, 0 diff --git a/data/maps/PowerPlant/scripts.inc b/data/maps/PowerPlant/scripts.inc index aa6fa42b0..5f7b9ea24 100644 --- a/data/maps/PowerPlant/scripts.inc +++ b/data/maps/PowerPlant/scripts.inc @@ -54,7 +54,7 @@ PowerPlant_EventScript_1637B8:: @ 81637B8 playbgm MUS_EXEYE, 0 waitbuttonpress setflag FLAG_SYS_SPECIAL_WILD_BATTLE - special sub_807F9D8 + special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_SPECIAL_WILD_BATTLE specialvar VAR_RESULT, Special_GetBattleOutcome diff --git a/data/maps/SeafoamIslands_B4F/scripts.inc b/data/maps/SeafoamIslands_B4F/scripts.inc index 3b618448c..a93ecaa50 100644 --- a/data/maps/SeafoamIslands_B4F/scripts.inc +++ b/data/maps/SeafoamIslands_B4F/scripts.inc @@ -179,7 +179,7 @@ SeafoamIslands_B4F_EventScript_1631AC:: @ 81631AC playbgm MUS_EXEYE, 0 waitbuttonpress setflag FLAG_SYS_SPECIAL_WILD_BATTLE - special sub_807F9D8 + special BattleSetup_StartLegendaryBattle waitstate clearflag FLAG_SYS_SPECIAL_WILD_BATTLE specialvar VAR_RESULT, Special_GetBattleOutcome diff --git a/data/maps/ViridianCity/scripts.inc b/data/maps/ViridianCity/scripts.inc index 5c5cebf82..fe3ca4ec4 100644 --- a/data/maps/ViridianCity/scripts.inc +++ b/data/maps/ViridianCity/scripts.inc @@ -151,7 +151,7 @@ EventScript_165A65:: @ 8165A65 compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A7AE0 special sub_8112364 - special sub_807F888 + special BattleSetup_StartOldManTutorialBattle waitstate release end @@ -246,7 +246,7 @@ EventScript_165B4C:: @ 8165B4C compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A7AE0 special sub_8112364 - special sub_807F888 + special BattleSetup_StartOldManTutorialBattle waitstate lock faceplayer diff --git a/data/specials.inc b/data/specials.inc index bfb649961..d2ea38639 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -60,15 +60,15 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special nullsub_75 def_special IsEnigmaBerryValid - def_special sub_80803CC - def_special sub_80805D8 - def_special sub_8080618 - def_special ScrSpecial_HasTrainerBeenFought + def_special GetTrainerBattleMode + def_special ShowTrainerIntroSpeech + def_special ShowTrainerCantBattleSpeech + def_special GetTrainerFlag def_special ScrSpecial_EndTrainerApproach - def_special PlayTrainerEncounterMusic + def_special SetUpTrainerEncounterMusic def_special sub_810CD4C def_special sub_810CEB4 - def_special sub_80805B0 + def_special BattleSetup_StartRematchBattle def_special sub_808C6A8 def_special CheckForAlivePartyMons def_special nullsub_75 @@ -166,7 +166,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 - def_special sub_807F888 + def_special BattleSetup_StartOldManTutorialBattle def_special ChangePokemonNickname def_special Special_ChooseMonFromParty def_special nullsub_75 @@ -320,10 +320,10 @@ gSpecials:: @ 815FD60 def_special sub_80CAC08 def_special sub_806E99C def_special sub_80CAC28 - def_special sub_807FA68 - def_special sub_807F9D8 + def_special BattleSetup_StartIceCaveBattle + def_special BattleSetup_StartLegendaryBattle def_special sub_807FABC - def_special sub_8080398 + def_special SetUpTrainerMovement def_special nullsub_75 def_special nullsub_75 def_special sub_807B6C0 @@ -351,7 +351,7 @@ gSpecials:: @ 815FD60 def_special GetNameOfEnigmaBerryInPlayerParty def_special nullsub_75 def_special sub_810B82C - def_special sub_807F904 + def_special BattleSetup_StartMarowakBattle def_special sub_80CA630 def_special sub_80CB7C4 def_special sub_80CBC5C @@ -408,7 +408,7 @@ gSpecials:: @ 815FD60 def_special sub_809D620 def_special sub_812781C def_special sub_8127888 - def_special sub_80803FC + def_special SetBattledTrainerFlag def_special sub_812B35C def_special Special_SSAnneDepartureCutscene def_special sub_8149A18 diff --git a/include/battle.h b/include/battle.h index 7c1528072..4c28c24a0 100644 --- a/include/battle.h +++ b/include/battle.h @@ -79,7 +79,7 @@ #define B_ACTION_SAFARI_POKEBLOCK 6 #define B_ACTION_SAFARI_GO_NEAR 7 #define B_ACTION_SAFARI_RUN 8 -#define B_ACTION_9 9 +#define B_ACTION_OLDMAN_THROW 9 #define B_ACTION_EXEC_SCRIPT 10 #define B_ACTION_TRY_FINISH 11 #define B_ACTION_FINISHED 12 @@ -101,17 +101,6 @@ #define MAX_TRAINER_ITEMS 4 #define MAX_MON_MOVES 4 -#define BATTLE_TERRAIN_GRASS 0 -#define BATTLE_TERRAIN_LONG_GRASS 1 -#define BATTLE_TERRAIN_SAND 2 -#define BATTLE_TERRAIN_UNDERWATER 3 -#define BATTLE_TERRAIN_WATER 4 -#define BATTLE_TERRAIN_POND 5 -#define BATTLE_TERRAIN_ROCK 6 -#define BATTLE_TERRAIN_CAVE 7 -#define BATTLE_TERRAIN_INSIDE 8 -#define BATTLE_TERRAIN_PLAIN 9 - // array entries for battle communication #define MULTIUSE_STATE 0x0 #define CURSOR_POSITION 0x1 @@ -528,15 +517,11 @@ struct BattleStruct u16 hpOnSwitchout[2]; u8 abilityPreventingSwitchout; u8 hpScale; - u8 field_AE; - u8 field_AF; - u8 field_B0; - u8 field_B1; - u8 field_B2; - u8 field_B3; + u16 savedBattleTypeFlags; // ??? + void (*savedCallback)(void); u8 synchronizeMoveEffect; - u8 field_B5; - u8 field_B6; + u8 multiplayerId; + u8 overworldWeatherDone; u8 atkCancellerTracker; u16 usedHeldItems[MAX_BATTLERS_COUNT]; u8 chosenItem[4]; // why is this an u8? @@ -556,7 +541,12 @@ struct BattleStruct u8 wishPerishSongBattlerId; u8 field_182; u8 field_183; - u8 field_184[124]; // currently unknown + u8 field_184; + u8 field_185; + u8 field_186; + u8 field_187; + struct BattleEnigmaBerry battleEnigmaBerry; + u8 field_1A4[0x5C]; // currently unknown }; // size == 0x200 bytes extern struct BattleStruct *gBattleStruct; @@ -929,5 +919,8 @@ extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT]; extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT]; extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT]; extern u8 gBattleTerrain; +extern struct UnknownPokemonStruct4 gUnknown_2022B58[3]; +extern u16 *gUnknown_2022BC0; +extern u16 gRandomTurnNumber; #endif // GUARD_BATTLE_H diff --git a/include/battle_anim.h b/include/battle_anim.h index feaa8816b..1eb1a7353 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -2,8 +2,9 @@ #define GUARD_BATTLE_ANIM_H #include "battle.h" -#include "constants/battle_anim.h" +#include "data.h" #include "task.h" +#include "constants/battle_anim.h" enum { @@ -168,6 +169,8 @@ u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId); u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId); // battle_anim_mons.c +extern const struct MonCoords gCastformFrontSpriteCoords[]; + u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType); u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType); u8 GetBattlerSpriteDefault_Y(u8 battlerId); @@ -237,9 +240,9 @@ void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor); u32 sub_8075BE8(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7); u32 sub_8075CB8(u8 a1, u8 a2, u8 a3, u8 a4); u8 sub_8075D80(u8 a1); -void sub_8075D9C(struct Sprite *sprite); +void AnimSpriteOnMonPos(struct Sprite *sprite); void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); -void sub_8075E80(struct Sprite *sprite); +void AnimThrowProjectile(struct Sprite *sprite); void sub_8075F0C(struct Sprite *sprite); s16 CloneBattlerSpriteWithBlend(u8 animBattler); void obj_delete_but_dont_free_vram(struct Sprite *sprite); diff --git a/include/battle_bg.h b/include/battle_bg.h index 6bf90a104..a467f34c8 100644 --- a/include/battle_bg.h +++ b/include/battle_bg.h @@ -1,6 +1,13 @@ #ifndef GUARD_BATTLE_BG_H #define GUARD_BATTLE_BG_H +#include "bg.h" + +extern const struct BgTemplate gBattleBgTemplates[]; + void sub_800F34C(void); +void DrawBattleEntryBackground(void); +void sub_800F6FC(u8 taskId); +void LoadBattleMenuWindowGfx(void); #endif // GUARD_BATTLE_BG_H diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 6da4ca240..03755c9b3 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -260,10 +260,10 @@ void SetControllerToPlayerPartner(void); void SetControllerToSafari(void); // pokedude controller -void SetControllerToPokedude(void); +void SetControllerToPokeDude(void); // oak controller -void SetControllerToOakOrOldman(void); +void SetControllerToOakOrOldMan(void); bool8 sub_80EB2E0(u8); void sub_80EB2F4(u8); void sub_80E8570(void); diff --git a/include/battle_main.h b/include/battle_main.h index 757ee3468..613171da9 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_MAIN_H #define GUARD_BATTLE_MAIN_H +#include "constants/abilities.h" + struct TrainerMoney { u8 classId; @@ -43,61 +45,54 @@ struct UnknownPokemonStruct4 #define BOUNCE_MON 0x0 #define BOUNCE_HEALTHBOX 0x1 +extern const struct SpriteTemplate gUnknown_824EFF0; +extern const struct OamData gOamData_824F010; +extern const struct OamData gOamData_824F018; +extern const u8 gTypeNames[][TYPE_NAME_LENGTH + 1]; +extern const u8 gStatusConditionString_PoisonJpn[8]; +extern const u8 gStatusConditionString_SleepJpn[8]; +extern const u8 gStatusConditionString_ParalysisJpn[8]; +extern const u8 gStatusConditionString_BurnJpn[8]; +extern const u8 gStatusConditionString_IceJpn[8]; +extern const u8 gStatusConditionString_ConfusionJpn[8]; +extern const u8 gStatusConditionString_LoveJpn[8]; +extern const u8 *const gStatusConditionStringsTable[7][2]; +extern const u8 gTypeEffectiveness[336]; +extern const struct TrainerMoney gTrainerMoneyTable[]; +extern const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT]; +extern const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1]; + void CB2_InitBattle(void); void BattleMainCB2(void); -void CB2_QuitRecordedBattle(void); -void sub_8038528(struct Sprite* sprite); -void sub_8038A04(void); // unused +void FreeRestoreBattleData(void); void VBlankCB_Battle(void); +void nullsub_9(struct Sprite *sprite); void sub_801182C(struct Sprite *sprite); void sub_8011A1C(void); -u32 sub_80391E0(u8 arrayId, u8 caseId); -u32 sub_80397C4(u32 setId, u32 tableId); -void oac_poke_opponent(struct Sprite *sprite); -void SpriteCallbackDummy_2(struct Sprite *sprite); -void sub_8039934(struct Sprite *sprite); -void sub_8012098(struct Sprite *sprite); +u32 sub_8011C44(u8 arrayId, u8 caseId); +void SpriteCB_WildMon(struct Sprite *sprite); +void SpriteCallbackDummy2(struct Sprite *sprite); +void SpriteCB_FaintOpponentMon(struct Sprite *sprite); void sub_8012044(struct Sprite *sprite); -void sub_8039B58(struct Sprite *sprite); -void sub_8039BB4(struct Sprite *sprite); -void sub_80105DC(struct Sprite *sprite); +void sub_8012098(struct Sprite *sprite); +void sub_80120C4(struct Sprite *sprite); +void sub_8012100(struct Sprite *sprite); void sub_8012110(struct Sprite *sprite); -void DoBounceEffect(u8 bank, u8 b, s8 c, s8 d); -void EndBounceEffect(u8 bank, bool8 b); -void sub_8039E44(struct Sprite *sprite); -void sub_8039E60(struct Sprite *sprite); -void sub_8039E84(struct Sprite *sprite); +void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude); +void EndBounceEffect(u8 battler, u8 which); +void sub_8012354(struct Sprite *sprite); void sub_801236C(struct Sprite *sprite); +void nullsub_12(void); void BeginBattleIntro(void); void SwitchInClearSetData(void); void FaintClearSetData(void); -void sub_803B3AC(void); // unused -void sub_803B598(void); // unused void BattleTurnPassed(void); u8 IsRunningFromBattleImpossible(void); -void sub_8013F6C(u8 battlerId); +void sub_8013F6C(u8 battler); void SwapTurnOrder(u8 id1, u8 id2); -u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves); +u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); -bool8 TryRunFromBattle(u8 bank); -void sub_800FD9C(void); -void sub_80120C4(struct Sprite *); -void sub_8012100(struct Sprite *); -void nullsub_12(void); -void SpriteCB_FaintOpponentMon(struct Sprite *sprite); - -extern const u8 gStatusConditionString_PoisonJpn[8]; -extern const u8 gStatusConditionString_SleepJpn[8]; -extern const u8 gStatusConditionString_ParalysisJpn[8]; -extern const u8 gStatusConditionString_BurnJpn[8]; -extern const u8 gStatusConditionString_IceJpn[8]; -extern const u8 gStatusConditionString_ConfusionJpn[8]; -extern const u8 gStatusConditionString_LoveJpn[8]; - -extern const u8 * const gStatusConditionStringsTable[7][2]; - -extern const u8 gTypeEffectiveness[336]; -extern const struct TrainerMoney gTrainerMoneyTable[]; +bool8 TryRunFromBattle(u8 battler); #endif // GUARD_BATTLE_MAIN_H diff --git a/include/battle_message.h b/include/battle_message.h index ffc9d5bb7..130dc7ce9 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -238,4 +238,12 @@ extern const u8* const gStatNamesTable2[]; extern const u16 gMissStringIds[]; extern const u16 gTrappingMoves[]; +extern const u8 gText_Sleep[]; +extern const u8 gText_Poison[]; +extern const u8 gText_Burn[]; +extern const u8 gText_Paralysis[]; +extern const u8 gText_Ice[]; +extern const u8 gText_Confusion[]; +extern const u8 gText_Love[]; + #endif // GUARD_BATTLE_MESSAGE_H diff --git a/include/battle_scripts.h b/include/battle_scripts.h index a13a8c097..184527587 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -227,5 +227,13 @@ extern const u8 BattleScript_FlushMessageBox[]; extern const u8 BattleScript_SpikesOnFaintedBattler[]; extern const u8 BattleScript_GhostBallDodge[]; 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/battle_setup.h b/include/battle_setup.h index 61395811b..e599acd8a 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -3,20 +3,36 @@ #include "global.h" -void BattleSetup_StartScriptedWildBattle(void); -u8 BattleSetup_GetTerrainId(void); -u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data); -void BattleSetup_StartBattlePikeWildBattle(void); void BattleSetup_StartWildBattle(void); void BattleSetup_StartRoamerBattle(void); - -u8 HasTrainerAlreadyBeenFought(u16); -void SetTrainerFlag(u16); -void ClearTrainerFlag(u16); -void BattleSetup_StartTrainerBattle(void); -u8 *BattleSetup_GetScriptAddrAfterBattle(void); -u8 *BattleSetup_GetTrainerPostBattleScript(void); -void sub_80803FC(void); +void BattleSetup_StartOldManTutorialBattle(void); +void BattleSetup_StartScriptedWildBattle(void); +void BattleSetup_StartMarowakBattle(void); +void sub_807F998(void); +void BattleSetup_StartLegendaryBattle(void); +void BattleSetup_StartIceCaveBattle(void); +void sub_807FABC(void); +u8 BattleSetup_GetTerrainId(void); u8 sub_8080060(void); +const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data); +void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerScript); +bool32 GetTrainerFlagFromScriptPointer(const u8 *data); +void SetUpTrainerMovement(void); +u8 GetTrainerBattleMode(void); +u16 sub_80803D8(void); +u16 GetTrainerFlag(void); +void SetBattledTrainerFlag(void); +bool8 HasTrainerBeenFought(u16 trainerId); +void SetTrainerFlag(u16 trainerId); +void ClearTrainerFlag(u16 trainerId); +void BattleSetup_StartTrainerBattle(void); +void BattleSetup_StartRematchBattle(void); +void ShowTrainerIntroSpeech(void); +const u8 *BattleSetup_GetScriptAddrAfterBattle(void); +const u8 *BattleSetup_GetTrainerPostBattleScript(void); +void ShowTrainerCantBattleSpeech(void); +void SetUpTrainerEncounterMusic(void); +const u8 *GetTrainerALoseText(void); +const u8 *GetTrainerWonSpeech(void); #endif // GUARD_BATTLE_SETUP_H diff --git a/include/berry.h b/include/berry.h index 0e554a789..d55192301 100644 --- a/include/berry.h +++ b/include/berry.h @@ -63,7 +63,7 @@ void FieldObjectInteractionRemoveBerryTree(void); u8 PlayerHasBerries(void); void ResetBerryTreeSparkleFlags(void); void sub_809C794(void); -const struct Berry * sub_809C8A0(u8 berryIdx); +const struct Berry * GetBerryInfo(u8 berryIdx); extern const struct Berry gBerries[]; diff --git a/include/constants/abilities.h b/include/constants/abilities.h index 4e2c4056c..4ad54c86f 100644 --- a/include/constants/abilities.h +++ b/include/constants/abilities.h @@ -80,4 +80,6 @@ #define ABILITY_CACOPHONY 76 #define ABILITY_AIR_LOCK 77 +#define ABILITIES_COUNT 78 + #endif // GUARD_CONSTANTS_ABILITIES_H diff --git a/include/constants/battle.h b/include/constants/battle.h index a0099d23f..bbea92d05 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -56,13 +56,13 @@ #define BATTLE_TYPE_OLDMAN_TUTORIAL 0x0200 #define BATTLE_TYPE_ROAMER 0x0400 #define BATTLE_TYPE_EREADER_TRAINER 0x0800 -#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000 +#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000 // TODO: used, rename later #define BATTLE_TYPE_LEGENDARY 0x2000 -#define BATTLE_TYPE_REGI 0x4000 +#define BATTLE_TYPE_REGI 0x4000 // TODO: used, rename later #define BATTLE_TYPE_GHOST 0x8000 #define BATTLE_TYPE_POKEDUDE 0x10000 -#define BATTLE_TYPE_PALACE 0x20000 -#define BATTLE_TYPE_ARENA 0x40000 +#define BATTLE_TYPE_PALACE 0x20000 // TODO: used, rename later +#define BATTLE_TYPE_ARENA 0x40000 // TODO: used rename later #define BATTLE_TYPE_TRAINER_TOWER 0x80000 #define BATTLE_TYPE_PIKE 0x100000 #define BATTLE_TYPE_PYRAMID 0x200000 diff --git a/include/constants/battle_setup.h b/include/constants/battle_setup.h new file mode 100644 index 000000000..8f700dc04 --- /dev/null +++ b/include/constants/battle_setup.h @@ -0,0 +1,15 @@ +#ifndef GUARD_CONSTANTS_BATTLE_SETUP_H +#define GUARD_CONSTANTS_BATTLE_SETUP_H + +#define TRAINER_BATTLE_SINGLE 0 +#define TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC 1 +#define TRAINER_BATTLE_CONTINUE_SCRIPT 2 +#define TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT 3 +#define TRAINER_BATTLE_DOUBLE 4 +#define TRAINER_BATTLE_REMATCH 5 +#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE 6 +#define TRAINER_BATTLE_REMATCH_DOUBLE 7 +#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC 8 +#define TRAINER_BATTLE_TUTORIAL 9 + +#endif // GUARD_CONSTANTS_BATTLE_SETUP_H diff --git a/include/constants/map_types.h b/include/constants/map_types.h new file mode 100644 index 000000000..94fb99a57 --- /dev/null +++ b/include/constants/map_types.h @@ -0,0 +1,28 @@ +#ifndef GUARD_CONSTANTS_MAP_TYPES_H +#define GUARD_CONSTANTS_MAP_TYPES_H + +#define MAP_TYPE_0 0 +#define MAP_TYPE_TOWN 1 +#define MAP_TYPE_CITY 2 +#define MAP_TYPE_ROUTE 3 +#define MAP_TYPE_UNDERGROUND 4 +#define MAP_TYPE_UNDERWATER 5 +#define MAP_TYPE_OCEAN_ROUTE 6 +#define MAP_TYPE_7 7 +#define MAP_TYPE_INDOOR 8 +#define MAP_TYPE_SECRET_BASE 9 + +enum +{ + MAP_BATTLE_SCENE_NORMAL, // 0 + MAP_BATTLE_SCENE_GYM, // 1 + MAP_BATTLE_SCENE_MAGMA, // 2 + MAP_BATTLE_SCENE_AQUA, // 3 + MAP_BATTLE_SCENE_SIDNEY, // 4 + MAP_BATTLE_SCENE_PHOEBE, // 5 + MAP_BATTLE_SCENE_GLACIA, // 6 + MAP_BATTLE_SCENE_DRAKE, // 7 + MAP_BATTLE_SCENE_BATTLE_TOWER, // 8 +}; + +#endif // GUARD_CONSTANTS_MAP_TYPES_H
\ No newline at end of file diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 7359e9381..d8c429ed5 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -165,6 +165,8 @@ #define TRAINER_PIC_LADY 146 #define TRAINER_PIC_PAINTER 147 +#define TRAINER_SECRET_BASE 1024 + #define F_TRAINER_FEMALE (1 << 7) #define TRAINER_PIC_AQUA_LEADER_ARCHIE 0 diff --git a/include/data.h b/include/data.h index 99594209b..9726b95e5 100644 --- a/include/data.h +++ b/include/data.h @@ -16,8 +16,6 @@ struct MonCoords extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u8 gMoveNames[][13]; -extern const u8 gAbilityNames[][13]; -extern const u8 gTypeNames[][7]; extern const u16 gUnknown_8251CB8[]; extern const u16 gUnknown_8251FEE[]; extern const u16 gUnknown_8252324[]; diff --git a/include/event_scripts.h b/include/event_scripts.h index 99b453c85..500dd8069 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1155,6 +1155,15 @@ extern const u8 EventScript_SafariOutOfBalls[]; extern const u8 EventScript_ItemfinderDigUpUnderfootItem[]; +// battle_setup +extern const u8 EventScript_DoTrainerBattle[]; +extern const u8 EventScript_TryDoDoubleTrainerBattle[]; +extern const u8 EventScript_TryDoNormalTrainerBattle[]; +extern const u8 EventScript_TryDoDoubleRematchBattle[]; +extern const u8 EventScript_TryDoRematchBattle[]; +extern const u8 gUnknown_81A4EB4[]; +extern const u8 EventScript_1C555B[]; + // new_game extern const u8 EventScript_ResetAllMapFlags[]; 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/field_control_avatar.h b/include/field_control_avatar.h index 0a33138b3..ecb622de5 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -5,4 +5,7 @@ extern u32 gUnknown_3005078; +void RestartWildEncounterImmunitySteps(void); +void ClearPoisonStepCounter(void); + #endif //GUARD_FIELD_CONTROL_AVATAR_H diff --git a/include/field_map_obj.h b/include/field_map_obj.h index baed87ac6..2628f5ca5 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -85,7 +85,7 @@ void sub_8063E28(struct MapObject *, struct Sprite *); void FieldObjectSetHeldMovement(struct MapObject *, u8); void npc_coords_shift_still(struct MapObject *); void sub_805FE7C(struct MapObject *, u8); -void npc_set_running_behaviour_etc(struct MapObject *, u8); +void SetTrainerMovementType(struct MapObject *, u8); u8 sub_80634F0(u8 direction); u8 sub_8063500(u8 a0); void EventObjectSetGraphicsId(struct MapObject *mapObject, u8 a1); @@ -94,6 +94,8 @@ void npc_paltag_set_load(u8 mode); bool8 FieldObjectIsMovementOverridden(struct MapObject *mapObject); u8 FieldObjectCheckHeldMovementStatus(struct MapObject *mapObject); u8 sub_8063F84(u8 direction); +u8 GetTrainerFacingDirectionMovementType(u8 direction); + // Exported data declarations diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 2c408afc9..1d431771b 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -13,8 +13,8 @@ u8 player_get_direction_upper_nybble(void); u8 player_get_x22(void); void sub_808D074(u8); -void sub_805C270(); -void sub_805C780(); +void sub_805C270(void); +void sub_805C780(void); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 sub_805C808(u8); void SetPlayerAvatarStateMask(u8 mask); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index bf142d265..9c132db61 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -13,35 +13,6 @@ enum CONNECTION_EMERGE }; -// map types -enum -{ - MAP_TYPE_0, - MAP_TYPE_TOWN, - MAP_TYPE_CITY, - MAP_TYPE_ROUTE, - MAP_TYPE_UNDERGROUND, - MAP_TYPE_UNDERWATER, - MAP_TYPE_6, - MAP_TYPE_7, - MAP_TYPE_INDOOR, - MAP_TYPE_SECRET_BASE -}; - -// map battle scenes -enum -{ - MAP_BATTLE_SCENE_NORMAL, // 0 - MAP_BATTLE_SCENE_GYM, // 1 - MAP_BATTLE_SCENE_MAGMA, // 2 - MAP_BATTLE_SCENE_AQUA, // 3 - MAP_BATTLE_SCENE_SIDNEY, // 4 - MAP_BATTLE_SCENE_PHOEBE, // 5 - MAP_BATTLE_SCENE_GLACIA, // 6 - MAP_BATTLE_SCENE_DRAKE, // 7 - MAP_BATTLE_SCENE_BATTLE_TOWER, // 8 -}; - typedef void (*TilesetCB)(void); struct Tileset @@ -241,7 +212,7 @@ struct MapObject /*0x0C*/ struct Coords16 coords1; /*0x10*/ struct Coords16 coords2; /*0x14*/ struct Coords16 coords3; - /*0x18*/ u8 mapobj_unk_18:4; //current direction? + /*0x18*/ u8 facingDirection:4; //current direction? /*0x18*/ u8 placeholder18:4; /*0x19*/ union MapObjectRange range; /*0x1A*/ u8 mapobj_unk_1A; diff --git a/include/global.h b/include/global.h index 57035ce30..26c5d9570 100644 --- a/include/global.h +++ b/include/global.h @@ -32,6 +32,13 @@ // GF's lingo #define NELEMS ARRAY_COUNT +#define SWAP(a, b, temp) \ +{ \ + temp = a; \ + a = b; \ + b = temp; \ +} + // useful math macros // Converts a number to Q8.8 fixed-point format diff --git a/include/link_rfu.h b/include/link_rfu.h index 2be9dd3c9..f5aa682e6 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -11,7 +11,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src); void sub_80FA190(void); void MG_DrawCheckerboardPattern(void); void task_add_05_task_del_08FA224_when_no_RfuFunc(void); -bool8 IsRfuTaskFinished(void); +bool8 IsLinkRfuTaskFinished(void); void DestroyWirelessStatusIndicatorSprite(void); void MEvent_CreateTask_CardOrNewsWithFriend(u8); void MEvent_CreateTask_CardOrNewsOverWireless(u8); diff --git a/include/map_obj_80688E4.h b/include/map_obj_80688E4.h index bfac00378..bfd5dd3c7 100644 --- a/include/map_obj_80688E4.h +++ b/include/map_obj_80688E4.h @@ -3,7 +3,7 @@ #include "global.h" -void player_bitmagic(void); +void FreezeEventObjects(void); void FreezeMapObject(struct MapObject *); void FreezeMapObjectsExceptOne(u8 mapObjectId); diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 62bcfdd38..df03001bf 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -10,7 +10,7 @@ bool8 MetatileBehavior_IsJumpNorth(u8 metatileBehavior); bool8 MetatileBehavior_IsJumpSouth(u8 metatileBehavior); bool8 MetatileBehavior_IsTallGrass(u8 metatileBehavior); bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior); -bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior); +bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior); bool8 MetatileBehavior_ReturnFalse(u8 metatileBehavior); bool8 MetatileBehavior_IsReflective(u8 metatileBehavior); bool8 MetatileBehavior_IsIce(u8 metatileBehavior); @@ -53,15 +53,15 @@ bool8 MetatileBehavior_IsPC(u8 metatileBehavior); bool8 MetatileBehavior_IsPondWaterOrPuddle(u8 metatileBehavior); bool8 MetatileBehavior_IsPuddle(u8 metatileBehavior); bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior); -bool8 MetatileBehavior_ReturnFalse_3(u8 metatileBehavior); +bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior); bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior); bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior); -bool8 MetatileBehavior_ReturnFalse_6(u8 metatileBehavior); -bool8 MetatileBehavior_ReturnFalse_7(u8 metatileBehavior); +bool8 MetatileBehavior_IsBridge(u8 metatileBehavior); +bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior); bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior); bool8 MetatileBehavior_UnusedIsTallGrass(u8 metatileBehavior); -bool8 MetatileBehavior_IsMB0B(u8 metatileBehavior); -bool8 MetatileBehavior_IsMB0C(u8 metatileBehavior); +bool8 MetatileBehavior_IsIndoorEncounter(u8 metatileBehavior); +bool8 MetatileBehavior_IsMountain(u8 metatileBehavior); bool8 MetatileBehavior_IsDeepOrSemiDeepWater(u8 metatileBehavior); bool8 MetatileBehavior_IsMB19(u8 metatileBehavior); bool8 MetatileBehavior_IsWaterfallBottom(u8 metatileBehavior); diff --git a/include/overworld.h b/include/overworld.h index 65e3fe723..f1da789ac 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -61,7 +61,7 @@ void sub_8084EBC(s16, s16); void player_avatar_init_params_reset(void); void Overworld_SetFlashLevel(s32 a1); -//u8 Overworld_GetFlashLevel(void); +u8 Overworld_GetFlashLevel(void); void sub_8085524(u16); void Overworld_SetSavedMusic(u16); @@ -140,5 +140,6 @@ bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd bool32 sub_8058318(void); void CB2_ReturnToStartMenu(void); +void CB2_WhiteOut(void); #endif //GUARD_OVERWORLD_H diff --git a/include/party_menu.h b/include/party_menu.h index 5b9b6e1c4..53731bee6 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -84,5 +84,7 @@ bool8 IsMultiBattle(void); void sub_8126EDC(void); void PartyMenuInit_FromPlayerPc(void); void CB2_PartyMenuFromStartMenu(void); +void sub_8128198(void); +void sub_8127FF4(u8 slot, u8 slot2); #endif // GUARD_PARTY_MENU_H diff --git a/include/pokemon.h b/include/pokemon.h index c5ee4eda5..24328e44e 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -169,35 +169,6 @@ enum EGG_GROUP_UNDISCOVERED }; -enum -{ - NATURE_HARDY, - NATURE_LONELY, - NATURE_BRAVE, - NATURE_ADAMANT, - NATURE_NAUGHTY, - NATURE_BOLD, - NATURE_DOCILE, - NATURE_RELAXED, - NATURE_IMPISH, - NATURE_LAX, - NATURE_TIMID, - NATURE_HASTY, - NATURE_SERIOUS, - NATURE_JOLLY, - NATURE_NAIVE, - NATURE_MODEST, - NATURE_MILD, - NATURE_QUIET, - NATURE_BASHFUL, - NATURE_RASH, - NATURE_CALM, - NATURE_GENTLE, - NATURE_SASSY, - NATURE_CAREFUL, - NATURE_QUIRKY, -}; - struct PokemonSubstruct0 { u16 species; @@ -629,10 +600,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 f5fd820b0..a5352db1f 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 sNumQuestLogs; extern struct UnkStruct_3005E90 gUnknown_3005E90; @@ -40,6 +41,10 @@ void sub_8112450(void); void sub_8112364(void); u8 sub_8112CAC(void); void sub_81138F8(void); +void sub_812C224(void); +void sub_812BFDC(void); +void sub_811231C(void); +void sub_81139BC(void); void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx); void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value); diff --git a/include/safari_zone.h b/include/safari_zone.h index feaa93ed0..a50351570 100644 --- a/include/safari_zone.h +++ b/include/safari_zone.h @@ -16,4 +16,6 @@ void ExitSafariMode(void); bool8 SafariZoneTakeStep(void); void SafariZoneRetirePrompt(void); +void CB2_EndSafariBattle(void); + #endif // GUARD_SAFARI_ZONE_H diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h index e1d228589..768e838dd 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util_80A0058.h @@ -4,5 +4,6 @@ bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); +void sp000_heal_pokemon(void); #endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/include/vs_seeker.h b/include/vs_seeker.h index efc014a4a..fdd6839df 100644 --- a/include/vs_seeker.h +++ b/include/vs_seeker.h @@ -6,9 +6,10 @@ void Task_VsSeeker_0(u8 taskId); void sub_810CB90(void); void sub_810CDE8(void); -int sub_810CE64(u16 a0); +int GetRematchTrainerId(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 341b1b103..d9694130a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -66,7 +66,7 @@ SECTIONS { src/battle_controllers.o(.text); src/decompress.o(.text); asm/battle_1.o(.text); - asm/battle_2.o(.text); + src/battle_main.o(.text); src/battle_util.o(.text); src/battle_script_commands.o(.text); src/battle_util2.o(.text); @@ -119,9 +119,9 @@ SECTIONS { src/reset_save_heap.o(.text); asm/field_weather.o(.text); asm/field_weather_effects.o(.text); - src/field_fadetransition.o(.text);; + src/field_fadetransition.o(.text); asm/field_screen_effect.o(.text); - asm/battle_setup.o(.text); + src/battle_setup.o(.text); asm/cable_club.o(.text); asm/trainer_see.o(.text); asm/wild_encounter.o(.text); @@ -385,6 +385,7 @@ SECTIONS { src/main_menu.o(.rodata); src/data.o(.rodata); data/data.o(.rodata); + src/battle_main.o(.rodata); src/battle_util.o(.rodata); src/battle_script_commands.o(.rodata); src/battle_controller_player.o(.rodata); @@ -422,6 +423,8 @@ SECTIONS { src/title_screen.o(.rodata); data/field_weather.o(.rodata); data/data_835B488.o(.rodata); + src/battle_setup.o(.rodata); + data/data_835B488.o(.rodata.83C6AB0); src/pokemon_icon.o(.rodata); data/data_835B488.o(.rodata.83D4100); src/item_menu_icons.o(.rodata); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index e871937e7..c19af4cb7 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -28,7 +28,7 @@ static u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3); static void sub_8075658(struct Sprite *sprite); static void sub_80757E8(struct Sprite *sprite); static bool8 sub_80758DC(void); -static void sub_8075EF0(struct Sprite *sprite); +static void AnimThrowProjectile_Step(struct Sprite *sprite); static void sub_80760D0(u8 taskId); static void AnimTask_BlendMonInAndOutSetup(struct Task *task); static void AnimTask_BlendMonInAndOutStep(u8 taskId); @@ -1336,7 +1336,7 @@ static u8 GetBattlerAtPosition_(u8 position) return GetBattlerAtPosition(position); } -void sub_8075D9C(struct Sprite *sprite) +void AnimSpriteOnMonPos(struct Sprite *sprite) { bool8 var; @@ -1390,7 +1390,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void sub_8075E80(struct Sprite *sprite) +void AnimThrowProjectile(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, 1); if (GetBattlerSide(gBattleAnimAttacker)) @@ -1400,10 +1400,10 @@ void sub_8075E80(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; InitAnimArcTranslation(sprite); - sprite->callback = sub_8075EF0; + sprite->callback = AnimThrowProjectile_Step; } -static void sub_8075EF0(struct Sprite *sprite) +static void AnimThrowProjectile_Step(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) DestroyAnimSprite(sprite); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 544af1006..288568fad 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -85,9 +85,9 @@ static void InitSinglePlayerBtlControllers(void) gBattleMainFunc = BeginBattleIntro; if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) { - gBattlerControllerFuncs[0] = SetControllerToPokedude; + gBattlerControllerFuncs[0] = SetControllerToPokeDude; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; - gBattlerControllerFuncs[1] = SetControllerToPokedude; + gBattlerControllerFuncs[1] = SetControllerToPokeDude; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlersCount = 2; } @@ -96,7 +96,7 @@ static void InitSinglePlayerBtlControllers(void) if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) gBattlerControllerFuncs[0] = SetControllerToSafari; else if (gBattleTypeFlags & (BATTLE_TYPE_OLDMAN_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) - gBattlerControllerFuncs[0] = SetControllerToOakOrOldman; + gBattlerControllerFuncs[0] = SetControllerToOakOrOldMan; else gBattlerControllerFuncs[0] = SetControllerToPlayer; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; @@ -110,13 +110,13 @@ static void InitSinglePlayerBtlControllers(void) gBattleMainFunc = BeginBattleIntro; if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) { - gBattlerControllerFuncs[0] = SetControllerToPokedude; + gBattlerControllerFuncs[0] = SetControllerToPokeDude; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; - gBattlerControllerFuncs[1] = SetControllerToPokedude; + gBattlerControllerFuncs[1] = SetControllerToPokeDude; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; - gBattlerControllerFuncs[2] = SetControllerToPokedude; + gBattlerControllerFuncs[2] = SetControllerToPokeDude; gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; - gBattlerControllerFuncs[3] = SetControllerToPokedude; + gBattlerControllerFuncs[3] = SetControllerToPokeDude; gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; gBattlersCount = MAX_BATTLERS_COUNT; } @@ -774,7 +774,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY; sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; - stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]); + stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]); stringInfo->currentMove = gCurrentMove; stringInfo->originallyUsedMove = gChosenMove; stringInfo->lastItem = gLastUsedItem; diff --git a/src/battle_main.c b/src/battle_main.c new file mode 100644 index 000000000..f8d3623a9 --- /dev/null +++ b/src/battle_main.c @@ -0,0 +1,4414 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_ai_script_commands.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "battle_main.h" +#include "battle_message.h" +#include "battle_scripts.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "battle_string_ids.h" +#include "berry.h" +#include "bg.h" +#include "data.h" +#include "decompress.h" +#include "dma3.h" +#include "event_data.h" +#include "evolution_scene.h" +#include "graphics.h" +#include "gpu_regs.h" +#include "help_system.h" +#include "international_string_util.h" +#include "item.h" +#include "link.h" +#include "link_rfu.h" +#include "load_save.h" +#include "main.h" +#include "malloc.h" +#include "m4a.h" +#include "palette.h" +#include "party_menu.h" +#include "pokeball.h" +#include "pokedex.h" +#include "pokemon.h" +#include "quest_log.h" +#include "random.h" +#include "roamer.h" +#include "safari_zone.h" +#include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "trig.h" +#include "vs_seeker.h" +#include "util.h" +#include "window.h" +#include "cable_club.h" +#include "constants/abilities.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/pokemon.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/trainers.h" +#include "constants/trainer_classes.h" + +static void sub_80111EC(struct Sprite *sprite); +static void HandleAction_UseMove(void); +static void HandleAction_Switch(void); +static void HandleAction_UseItem(void); +static void HandleAction_Run(void); +static void HandleAction_WatchesCarefully(void); +static void HandleAction_SafariZoneBallThrow(void); +static void HandleAction_ThrowPokeblock(void); +static void HandleAction_GoNear(void); +static void HandleAction_SafariZoneRun(void); +static void HandleAction_OldManBallThrow(void); +static void HandleAction_TryFinish(void); +static void HandleAction_NothingIsFainted(void); +static void HandleAction_ActionFinished(void); +static void HandleEndTurn_ContinueBattle(void); +static void HandleEndTurn_BattleWon(void); +static void HandleEndTurn_BattleLost(void); +static void HandleEndTurn_RanFromBattle(void); +static void HandleEndTurn_MonFled(void); +static void HandleEndTurn_FinishBattle(void); +static void CB2_InitBattleInternal(void); +static void CB2_PreInitMultiBattle(void); +static void CB2_HandleStartMultiBattle(void); +static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum); +static void CB2_HandleStartBattle(void); +static void TryCorrectShedinjaLanguage(struct Pokemon *mon); +static void BattleMainCB1(void); +static void CB2_QuitPokeDudeBattle(void); +static void sub_80111FC(struct Sprite *sprite); +static void sub_8011B94(void); +static void sub_8011BB0(void); +static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite); +static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite); +static void sub_8011E3C(struct Sprite *sprite); +static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); +static void sub_8012060(struct Sprite *sprite); +static void oac_poke_ally_(struct Sprite *sprite); +static void SpriteCallbackDummy3(struct Sprite *sprite); +static void SpriteCB_BounceEffect(struct Sprite *sprite); +static void sub_8012398(struct Sprite *sprite); +static void BattleStartClearSetData(void); +static void BattleIntroGetMonsData(void); +static void TurnValuesCleanUp(bool8 var0); +static void SpecialStatusesClear(void); +static void BattleIntroPrepareBackgroundSlide(void); +static void BattleIntroDrawTrainersOrMonsSprites(void); +static void BattleIntroDrawPartySummaryScreens(void); +static void BattleIntroPrintTrainerWantsToBattle(void); +static void BattleIntroPrintWildMonAttacked(void); +static void BattleIntroPrintOpponentSendsOut(void); +static void BattleIntroPrintPlayerSendsOut(void); +static void BattleIntroRecordMonsToDex(void); +static void BattleIntroOpponentSendsOutMonAnimation(void); +static void BattleIntroPlayerSendsOutMonAnimation(void); +static void TryDoEventsBeforeFirstTurn(void); +static void HandleTurnActionSelectionState(void); +static void RunTurnActionsFunctions(void); +static void SetActionsAndBattlersTurnOrder(void); +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +static void HandleEndTurn_FinishBattle(void); +static void FreeResetData_ReturnToOvOrDoEvolutions(void); +static void ReturnFromBattleToOverworld(void); +static void TryEvolvePokemon(void); +static void WaitForEvoSceneToFinish(void); + +EWRAM_DATA u16 gBattle_BG0_X = 0; +EWRAM_DATA u16 gBattle_BG0_Y = 0; +EWRAM_DATA u16 gBattle_BG1_X = 0; +EWRAM_DATA u16 gBattle_BG1_Y = 0; +EWRAM_DATA u16 gBattle_BG2_X = 0; +EWRAM_DATA u16 gBattle_BG2_Y = 0; +EWRAM_DATA u16 gBattle_BG3_X = 0; +EWRAM_DATA u16 gBattle_BG3_Y = 0; +EWRAM_DATA u16 gBattle_WIN0H = 0; +EWRAM_DATA u16 gBattle_WIN0V = 0; +EWRAM_DATA u16 gBattle_WIN1H = 0; +EWRAM_DATA u16 gBattle_WIN1V = 0; +EWRAM_DATA u8 gDisplayedStringBattle[300] = {0}; +EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0}; +EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0}; +EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0}; +static EWRAM_DATA u32 gUnknown_2022AE8[25] = {0}; +EWRAM_DATA u32 gBattleTypeFlags = 0; +EWRAM_DATA u8 gBattleTerrain = 0; +EWRAM_DATA u32 gUnknown_2022B54 = 0; +EWRAM_DATA struct UnknownPokemonStruct4 gUnknown_2022B58[3] = {0}; +EWRAM_DATA u8 *gUnknown_2022BB8 = NULL; +EWRAM_DATA u8 *gUnknown_2022BBC = NULL; +EWRAM_DATA u16 *gUnknown_2022BC0 = NULL; +EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0}; +EWRAM_DATA u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200] = {0}; +EWRAM_DATA u8 gActiveBattler = 0; +EWRAM_DATA u32 gBattleControllerExecFlags = 0; +EWRAM_DATA u8 gBattlersCount = 0; +EWRAM_DATA u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gBattlerPositions[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gCurrentTurnActionNumber = 0; +EWRAM_DATA u8 gCurrentActionFuncId = 0; +EWRAM_DATA struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gCurrMovePos = 0; +EWRAM_DATA u8 gChosenMovePos = 0; +EWRAM_DATA u16 gCurrentMove = 0; +EWRAM_DATA u16 gChosenMove = 0; +EWRAM_DATA u16 gCalledMove = 0; +EWRAM_DATA s32 gBattleMoveDamage = 0; +EWRAM_DATA s32 gHpDealt = 0; +EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLastUsedItem = 0; +EWRAM_DATA u8 gLastUsedAbility = 0; +EWRAM_DATA u8 gBattlerAttacker = 0; +EWRAM_DATA u8 gBattlerTarget = 0; +EWRAM_DATA u8 gBattlerFainted = 0; +EWRAM_DATA u8 gEffectBattler = 0; +EWRAM_DATA u8 gPotentialItemEffectBattler = 0; +EWRAM_DATA u8 gAbsentBattlerFlags = 0; +EWRAM_DATA u8 gCritMultiplier = 0; +EWRAM_DATA u8 gMultiHitCounter = 0; +EWRAM_DATA const u8 *gBattlescriptCurrInstr = NULL; +EWRAM_DATA u32 gUnusedBattleMainVar = 0; +EWRAM_DATA u8 gChosenActionByBattler[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL}; +EWRAM_DATA u16 gLastPrintedMoves[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLastMoves[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLastLandedMoves[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLastHitByType[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLastResultingMoves[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLockedMoves[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gLastHitBy[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gMoveResultFlags = 0; +EWRAM_DATA u32 gHitMarker = 0; +static EWRAM_DATA u8 gUnknown_2023DD4[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gUnknown_2023DDC = 0; +EWRAM_DATA u16 gSideStatuses[2] = {0}; +EWRAM_DATA struct SideTimer gSideTimers[2] = {0}; +EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gPauseCounterBattle = 0; +EWRAM_DATA u16 gPaydayMoney = 0; +EWRAM_DATA u16 gRandomTurnNumber = 0; +EWRAM_DATA u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT] = {0}; +EWRAM_DATA u8 gBattleOutcome = 0; +EWRAM_DATA struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gBattleWeather = 0; +EWRAM_DATA struct WishFutureKnock gWishFutureKnock = {0}; +EWRAM_DATA u16 gIntroSlideFlags = 0; +EWRAM_DATA u8 gSentPokesToOpponent[2] = {0}; +EWRAM_DATA u16 gDynamicBasePower = 0; +EWRAM_DATA u16 gExpShareExp = 0; +EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA struct BattleScripting gBattleScripting = {0}; +EWRAM_DATA struct BattleStruct *gBattleStruct = NULL; +EWRAM_DATA u8 *gLinkBattleSendBuffer = NULL; +EWRAM_DATA u8 *gLinkBattleRecvBuffer = NULL; +EWRAM_DATA struct BattleResources *gBattleResources = NULL; +EWRAM_DATA u8 gActionSelectionCursor[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gBattlerInMenuId = 0; +EWRAM_DATA bool8 gDoingBattleAnim = FALSE; +EWRAM_DATA u32 gTransformedPersonalities[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA struct BattleSpriteData *gBattleSpritesDataPtr = NULL; +EWRAM_DATA struct MonSpritesGfx *gMonSpritesGfxPtr = NULL; +EWRAM_DATA u16 gBattleMovePower = 0; +EWRAM_DATA u16 gMoveToLearn = 0; +EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0}; + +void (*gPreBattleCallback1)(void); +void (*gBattleMainFunc)(void); +struct BattleResults gBattleResults; +u8 gLeveledUpInBattle; +void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void); +u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; +u8 gMultiUsePlayerCursor; +u8 gNumberOfMovesToChoose; +u8 gUnknown_3004FFC[MAX_BATTLERS_COUNT]; + +static const struct ScanlineEffectParams sIntroScanlineParams16Bit = +{ + (void *)REG_ADDR_BG3HOFS, SCANLINE_EFFECT_DMACNT_16BIT, 1 +}; + +const struct SpriteTemplate gUnknown_824EFF0 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80111EC, +}; + +static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin + +const struct OamData gOamData_824F010 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_824F018 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 2, + .affineParam = 0, +}; + +// not used +static const union AnimCmd gUnknown_824F020[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0), +}; + +// not used +static const union AnimCmd *const gUnknown_824F028[] = +{ + gUnknown_824F020, +}; + +// not used +static const union AffineAnimCmd gUnknown_824F02C[] = +{ + AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 0x3C), + AFFINEANIMCMD_JUMP(1), +}; + +// not used +static const union AffineAnimCmd *const gUnknown_824F044[] = +{ + gUnknown_824F02C, +}; + +static const s8 gUnknown_824F048[] = { -32, -16, -16, -32, -32, 0, 0, 0 }; + +// format: attacking type, defending type, damage multiplier +// the multiplier is a (decimal) fixed-point number: +// 20 is ×2.0 TYPE_MUL_SUPER_EFFECTIVE +// 10 is ×1.0 TYPE_MUL_NORMAL +// 05 is ×0.5 TYPE_MUL_NOT_EFFECTIVE +// 00 is ×0.0 TYPE_MUL_NO_EFFECT +const u8 gTypeEffectiveness[336] = +{ + TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, + TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, + TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, + TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT, + TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE, + TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, + TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE, + TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT, + TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT, + TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE, + TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT, + TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, + TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE, + TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE, + TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE, + TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE, + TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE, + TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT, + TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE, + TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE, + TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE, + TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE, + TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE, + TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE, + TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE, + TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT, + TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT, + TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT, + TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT +}; + +const u8 gTypeNames[][TYPE_NAME_LENGTH + 1] = +{ + _("NORMAL"), + _("FIGHT"), + _("FLYING"), + _("POISON"), + _("GROUND"), + _("ROCK"), + _("BUG"), + _("GHOST"), + _("STEEL"), + _("???"), + _("FIRE"), + _("WATER"), + _("GRASS"), + _("ELECTR"), + _("PSYCHC"), + _("ICE"), + _("DRAGON"), + _("DARK"), +}; + +// This is a factor in how much money you get for beating a trainer. +const struct TrainerMoney gTrainerMoneyTable[] = +{ + { CLASS_LEADER_2, 25 }, + { CLASS_ELITE_FOUR_2, 25 }, + { CLASS_PKMN_PROF, 25 }, + { CLASS_RIVAL, 4 }, + { CLASS_RIVAL_2, 9 }, + { CLASS_CHAMPION_2, 25 }, + { CLASS_YOUNGSTER_2, 4 }, + { CLASS_BUG_CATCHER_2, 3 }, + { CLASS_HIKER_2, 9 }, + { CLASS_BIRD_KEEPER_2, 6 }, + { CLASS_PICNICKER_2, 5 }, + { CLASS_SUPER_NERD, 6 }, + { CLASS_FISHERMAN_2, 9 }, + { CLASS_TEAM_ROCKET, 8 }, + { CLASS_LASS_2, 4 }, + { CLASS_BEAUTY_2, 18 }, + { CLASS_BLACK_BELT_2, 6 }, + { CLASS_CUE_BALL, 6 }, + { CLASS_CHANNELER, 8 }, + { CLASS_ROCKER, 6 }, + { CLASS_GENTLEMAN_2, 18 }, + { CLASS_BURGLAR, 22 }, + { CLASS_SWIMMER_MALE_2, 1 }, + { CLASS_ENGINEER, 12 }, + { CLASS_JUGGLER, 10 }, + { CLASS_SAILOR_2, 8 }, + { CLASS_COOLTRAINER_2, 9 }, + { CLASS_POKEMANIAC_2, 12 }, + { CLASS_TAMER, 10 }, + { CLASS_CAMPER_2, 5 }, + { CLASS_PSYCHIC_2, 5 }, + { CLASS_BIKER, 5 }, + { CLASS_GAMER, 18 }, + { CLASS_SCIENTIST, 12 }, + { CLASS_CRUSH_GIRL, 6 }, + { CLASS_TUBER_3, 1 }, + { CLASS_PKMN_BREEDER_2, 7 }, + { CLASS_PKMN_RANGER_2, 9 }, + { CLASS_AROMA_LADY_2, 7 }, + { CLASS_RUIN_MANIAC_2, 12 }, + { CLASS_LADY_2, 50 }, + { CLASS_PAINTER, 4 }, + { CLASS_TWINS_2, 3 }, + { CLASS_YOUNG_COUPLE_2, 7 }, + { CLASS_SIS_AND_BRO_2, 1 }, + { CLASS_COOL_COUPLE, 6 }, + { CLASS_CRUSH_KIN, 6 }, + { CLASS_SWIMMER_FEMALE_2, 1 }, + { CLASS_PLAYER, 1 }, + { CLASS_LEADER, 25 }, + { CLASS_ELITE_FOUR, 25 }, + { CLASS_LASS, 4 }, + { CLASS_YOUNGSTER, 4 }, + { CLASS_PKMN_TRAINER_3, 15 }, + { CLASS_HIKER, 10 }, + { CLASS_BEAUTY, 20 }, + { CLASS_FISHERMAN, 10 }, + { CLASS_LADY, 50 }, + { CLASS_TRIATHLETE, 10 }, + { CLASS_TEAM_AQUA, 5 }, + { CLASS_TWINS, 3 }, + { CLASS_SWIMMER_FEMALE, 2 }, + { CLASS_BUG_CATCHER, 4 }, + { CLASS_SCHOOL_KID, 5 }, + { CLASS_RICH_BOY, 50 }, + { CLASS_SR_AND_JR, 4 }, + { CLASS_BLACK_BELT, 8 }, + { CLASS_TUBER, 1 }, + { CLASS_HEX_MANIAC, 6 }, + { CLASS_PKMN_BREEDER, 10 }, + { CLASS_TEAM_MAGMA, 5 }, + { CLASS_INTERVIEWER, 12 }, + { CLASS_TUBER_2, 1 }, + { CLASS_YOUNG_COUPLE, 8 }, + { CLASS_GUITARIST, 8 }, + { CLASS_GENTLEMAN, 20 }, + { CLASS_CHAMPION, 50 }, + { CLASS_MAGMA_LEADER, 20 }, + { CLASS_BATTLE_GIRL, 6 }, + { CLASS_SWIMMER_MALE, 2 }, + { CLASS_POKEFAN, 20 }, + { CLASS_EXPERT, 10 }, + { CLASS_DRAGON_TAMER, 12 }, + { CLASS_BIRD_KEEPER, 8 }, + { CLASS_NINJA_BOY, 3 }, + { CLASS_PARASOL_LADY, 10 }, + { CLASS_BUG_MANIAC, 15 }, + { CLASS_SAILOR, 8 }, + { CLASS_COLLECTOR, 15 }, + { CLASS_PKMN_RANGER, 12 }, + { CLASS_MAGMA_ADMIN, 10 }, + { CLASS_AROMA_LADY, 10 }, + { CLASS_RUIN_MANIAC, 15 }, + { CLASS_COOLTRAINER, 12 }, + { CLASS_POKEMANIAC, 15 }, + { CLASS_KINDLER, 8 }, + { CLASS_CAMPER, 4 }, + { CLASS_PICNICKER, 4 }, + { CLASS_PSYCHIC, 6 }, + { CLASS_SIS_AND_BRO, 3 }, + { CLASS_OLD_COUPLE, 10 }, + { CLASS_AQUA_ADMIN, 10 }, + { CLASS_AQUA_LEADER, 20 }, + { CLASS_BOSS, 25 }, + { 0xFF, 5 }, +}; + +#include "data/text/abilities.h" + +static void (*const sTurnActionsFuncsTable[])(void) = +{ + [B_ACTION_USE_MOVE] = HandleAction_UseMove, + [B_ACTION_USE_ITEM] = HandleAction_UseItem, + [B_ACTION_SWITCH] = HandleAction_Switch, + [B_ACTION_RUN] = HandleAction_Run, + [B_ACTION_SAFARI_WATCH_CAREFULLY] = HandleAction_WatchesCarefully, + [B_ACTION_SAFARI_BALL] = HandleAction_SafariZoneBallThrow, + [B_ACTION_SAFARI_POKEBLOCK] = HandleAction_ThrowPokeblock, + [B_ACTION_SAFARI_GO_NEAR] = HandleAction_GoNear, + [B_ACTION_SAFARI_RUN] = HandleAction_SafariZoneRun, + [B_ACTION_OLDMAN_THROW] = HandleAction_OldManBallThrow, + [B_ACTION_EXEC_SCRIPT] = HandleAction_RunBattleScript, + [B_ACTION_TRY_FINISH] = HandleAction_TryFinish, + [B_ACTION_FINISHED] = HandleAction_ActionFinished, + [B_ACTION_NOTHING_FAINTED] = HandleAction_NothingIsFainted, +}; + +static void (*const sEndTurnFuncsTable[])(void) = +{ + [0] = HandleEndTurn_ContinueBattle, //B_OUTCOME_NONE? + [B_OUTCOME_WON] = HandleEndTurn_BattleWon, + [B_OUTCOME_LOST] = HandleEndTurn_BattleLost, + [B_OUTCOME_DREW] = HandleEndTurn_BattleLost, + [B_OUTCOME_RAN] = HandleEndTurn_RanFromBattle, + [B_OUTCOME_PLAYER_TELEPORTED] = HandleEndTurn_FinishBattle, + [B_OUTCOME_MON_FLED] = HandleEndTurn_MonFled, + [B_OUTCOME_CAUGHT] = HandleEndTurn_FinishBattle, + [B_OUTCOME_NO_SAFARI_BALLS] = HandleEndTurn_FinishBattle, +}; + +const u8 gStatusConditionString_PoisonJpn[8] = _("どく$$$$$"); +const u8 gStatusConditionString_SleepJpn[8] = _("ねむり$$$$"); +const u8 gStatusConditionString_ParalysisJpn[8] = _("まひ$$$$$"); +const u8 gStatusConditionString_BurnJpn[8] = _("やけど$$$$"); +const u8 gStatusConditionString_IceJpn[8] = _("こおり$$$$"); +const u8 gStatusConditionString_ConfusionJpn[8] = _("こんらん$$$"); +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 } +}; + +void CB2_InitBattle(void) +{ + MoveSaveBlocks_ResetHeap(); + AllocateBattleResources(); + AllocateBattleSpritesData(); + AllocateMonSpritesGfx(); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + HandleLinkBattleSetup(); + SetMainCallback2(CB2_PreInitMultiBattle); + gBattleCommunication[MULTIUSE_STATE] = 0; + } + else + { + CB2_InitBattleInternal(); + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + HelpSystem_SetSomeVariable2(0x19); + else + HelpSystem_SetSomeVariable2(0x18); + } + else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + HelpSystem_SetSomeVariable2(0x1A); + } + else + { + HelpSystem_SetSomeVariable2(0x17); + } + } + } +} + +static void CB2_InitBattleInternal(void) +{ + s32 i; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0x50, 0x51)); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gBattle_WIN0H = WIN_RANGE(0, 0xF0); + gBattle_WIN0V = WIN_RANGE(0x50, 0x51); + ScanlineEffect_Clear(); + for (i = 0; i < 80; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; + } + for (; i < 160; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; + } + ScanlineEffect_SetParams(sIntroScanlineParams16Bit); + ResetPaletteFade(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + gBattleTerrain = BattleSetup_GetTerrainId(); + sub_800F34C(); + LoadBattleTextboxAndBackground(); + ResetSpriteData(); + ResetTasks(); + DrawBattleEntryBackground(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(VBlankCB_Battle); + SetUpBattleVars(); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + SetMainCallback2(CB2_HandleStartMultiBattle); + else + SetMainCallback2(CB2_HandleStartBattle); + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + CreateNPCTrainerParty(&gEnemyParty[0], gTrainerBattleOpponent_A); + SetWildMonHeldItem(); + } + gMain.inBattle = TRUE; + for (i = 0; i < PARTY_SIZE; ++i) + AdjustFriendship(&gPlayerParty[i], 3); + gBattleCommunication[MULTIUSE_STATE] = 0; +} + +static void sub_800FFEC(void) +{ + u16 r6 = 0; + u16 species = SPECIES_NONE; + u16 hp = 0; + u32 status = 0; + s32 i; + + for (i = 0; i < PARTY_SIZE; ++i) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r6 |= 1 << i * 2; + if (species == SPECIES_NONE) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r6 |= 2 << i * 2; + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp == 0) + r6 |= 3 << i * 2; + } + gBattleStruct->field_186 = r6; + *(&gBattleStruct->field_187) = r6 >> 8; +} + +static void SetPlayerBerryDataInBattleStruct(void) +{ + s32 i; + struct BattleStruct *battleStruct = gBattleStruct; + struct BattleEnigmaBerry *battleBerry = &battleStruct->battleEnigmaBerry; + + if (IsEnigmaBerryValid() == TRUE) + { + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + battleBerry->name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i]; + battleBerry->name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + battleBerry->itemEffect[i] = gSaveBlock1Ptr->enigmaBerry.itemEffect[i]; + battleBerry->holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + battleBerry->holdEffectParam = gSaveBlock1Ptr->enigmaBerry.holdEffectParam; + } + else + { + const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); + + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + battleBerry->name[i] = berryData->name[i]; + battleBerry->name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + battleBerry->itemEffect[i] = 0; + battleBerry->holdEffect = HOLD_EFFECT_NONE; + battleBerry->holdEffectParam = 0; + } +} + +static void SetAllPlayersBerryData(void) +{ + s32 i, j; + + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + if (IsEnigmaBerryValid() == TRUE) + { + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + { + gEnigmaBerries[0].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i]; + gEnigmaBerries[2].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i]; + } + gEnigmaBerries[0].name[i] = EOS; + gEnigmaBerries[2].name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + { + gEnigmaBerries[0].itemEffect[i] = gSaveBlock1Ptr->enigmaBerry.itemEffect[i]; + gEnigmaBerries[2].itemEffect[i] = gSaveBlock1Ptr->enigmaBerry.itemEffect[i]; + } + gEnigmaBerries[0].holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + gEnigmaBerries[2].holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + gEnigmaBerries[0].holdEffectParam = gSaveBlock1Ptr->enigmaBerry.holdEffectParam; + gEnigmaBerries[2].holdEffectParam = gSaveBlock1Ptr->enigmaBerry.holdEffectParam; + } + else + { + const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); + + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + { + gEnigmaBerries[0].name[i] = berryData->name[i]; + gEnigmaBerries[2].name[i] = berryData->name[i]; + } + gEnigmaBerries[0].name[i] = EOS; + gEnigmaBerries[2].name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + { + gEnigmaBerries[0].itemEffect[i] = 0; + gEnigmaBerries[2].itemEffect[i] = 0; + } + gEnigmaBerries[0].holdEffect = HOLD_EFFECT_NONE; + gEnigmaBerries[2].holdEffect = HOLD_EFFECT_NONE; + gEnigmaBerries[0].holdEffectParam = 0; + gEnigmaBerries[2].holdEffectParam = 0; + } + } + else + { + s32 numPlayers; + struct BattleEnigmaBerry *src; + u8 battlerId; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + for (i = 0; i < 4; ++i) + { + src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); + battlerId = gLinkPlayers[i].id; + for (j = 0; j < BERRY_NAME_LENGTH; ++j) + gEnigmaBerries[battlerId].name[j] = src->name[j]; + gEnigmaBerries[battlerId].name[j] = EOS; + for (j = 0; j < BERRY_ITEM_EFFECT_COUNT; ++j) + gEnigmaBerries[battlerId].itemEffect[j] = src->itemEffect[j]; + gEnigmaBerries[battlerId].holdEffect = src->holdEffect; + gEnigmaBerries[battlerId].holdEffectParam = src->holdEffectParam; + } + } + else + { + for (i = 0; i < 2; ++i) + { + src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); + for (j = 0; j < BERRY_NAME_LENGTH; ++j) + { + gEnigmaBerries[i].name[j] = src->name[j]; + gEnigmaBerries[i + 2].name[j] = src->name[j]; + } + gEnigmaBerries[i].name[j] = EOS; + gEnigmaBerries[i + 2].name[j] = EOS; + for (j = 0; j < BERRY_ITEM_EFFECT_COUNT; ++j) + { + gEnigmaBerries[i].itemEffect[j] = src->itemEffect[j]; + gEnigmaBerries[i + 2].itemEffect[j] = src->itemEffect[j]; + } + gEnigmaBerries[i].holdEffect = src->holdEffect; + gEnigmaBerries[i + 2].holdEffect = src->holdEffect; + gEnigmaBerries[i].holdEffectParam = src->holdEffectParam; + gEnigmaBerries[i + 2].holdEffectParam = src->holdEffectParam; + } + } + } +} + +static void sub_8010414(u8 arg0, u8 arg1) +{ + u8 var = 0; + + if (gBlockRecvBuffer[0][0] == 256) + { + if (arg1 == 0) + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; + else + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + ++var; + } + if (var == 0) + { + s32 i; + + for (i = 0; i < arg0; ++i) + if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) + break; + if (i == arg0) + { + if (arg1 == 0) + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; + else + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + ++var; + } + if (var == 0) + { + for (i = 0; i < arg0; ++i) + { + if (gBlockRecvBuffer[i][0] == 0x201) + if (i != arg1 && i < arg1) + break; + if (gBlockRecvBuffer[i][0] > 0x201 && i != arg1) + break; + } + if (i == arg0) + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; + else + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + } + } +} + +static void CB2_HandleStartBattle(void) +{ + u8 playerMultiplayerId; + u8 enemyMultiplayerId; + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + playerMultiplayerId = GetMultiplayerId(); + gBattleStruct->multiplayerId = playerMultiplayerId; + enemyMultiplayerId = playerMultiplayerId ^ BIT_SIDE; + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + if (!IsDma3ManagerBusyWithBgCopy()) + { + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + sub_80357C8(); + gBattleCommunication[MULTIUSE_STATE] = 1; + } + if (gWirelessCommType) + LoadWirelessStatusIndicatorSpriteGfx(); + break; + case 1: + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gReceivedRemoteLinkPlayers != 0) + { + if (IsLinkTaskFinished()) + { + *(&gBattleStruct->field_184) = 1; + *(&gBattleStruct->field_185) = 2; + sub_800FFEC(); + SetPlayerBerryDataInBattleStruct(); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); + gBattleCommunication[MULTIUSE_STATE] = 2; + } + if (gWirelessCommType != 0) + CreateWirelessStatusIndicatorSprite(0, 0); + } + } + else + { + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER; + gBattleCommunication[MULTIUSE_STATE] = 15; + SetAllPlayersBerryData(); + } + break; + case 2: + if ((GetBlockReceivedStatus() & 3) == 3) + { + u8 taskId; + + ResetBlockReceivedFlags(); + sub_8010414(2, playerMultiplayerId); + SetAllPlayersBerryData(); + taskId = CreateTask(sub_800F6FC, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = gBattleStruct->field_186 | (gBattleStruct->field_187 << 8); + gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1]; + SetDeoxysStats(); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 3: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 4: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 7: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 8: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 11: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 12: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + TryCorrectShedinjaLanguage(&gEnemyParty[0]); + TryCorrectShedinjaLanguage(&gEnemyParty[1]); + TryCorrectShedinjaLanguage(&gEnemyParty[2]); + TryCorrectShedinjaLanguage(&gEnemyParty[3]); + TryCorrectShedinjaLanguage(&gEnemyParty[4]); + TryCorrectShedinjaLanguage(&gEnemyParty[5]); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 15: + sub_800D30C(); + ++gBattleCommunication[MULTIUSE_STATE]; + gBattleCommunication[SPRITES_INIT_STATE1] = 0; + gBattleCommunication[SPRITES_INIT_STATE2] = 0; + break; + case 16: + if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) + { + gPreBattleCallback1 = gMain.callback1; + gMain.callback1 = BattleMainCB1; + SetMainCallback2(BattleMainCB2); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTypeFlags |= BATTLE_TYPE_20; + } + } + break; + case 5: + case 9: + case 13: + ++gBattleCommunication[MULTIUSE_STATE]; + gBattleCommunication[1] = 1; + case 6: + case 10: + case 14: + if (--gBattleCommunication[1] == 0) + ++gBattleCommunication[MULTIUSE_STATE]; + break; + } +} + +static void sub_80108C4(void) +{ + s32 i, j; + u8 *nick, *cur; + + for (i = 0; i < 3; ++i) + { + gUnknown_2022B58[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES); + gUnknown_2022B58[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + nick = gUnknown_2022B58[i].nickname; + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick); + gUnknown_2022B58[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + gUnknown_2022B58[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + gUnknown_2022B58[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_2022B58[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + gUnknown_2022B58[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + gUnknown_2022B58[i].gender = GetMonGender(&gPlayerParty[i]); + StripExtCtrlCodes(nick); + if (GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) + { + for (cur = nick, j = 0; cur[j] != EOS; ++j) + ; + while (j < 6) + cur[j++] = 0; + cur[j] = EOS; + } + } + memcpy(&gBattleStruct->field_184, gUnknown_2022B58, sizeof(gUnknown_2022B58)); +} + +static void CB2_PreInitMultiBattle(void) +{ + s32 i; + u8 playerMultiplierId; + u8 r4 = 0xF; + u16 *savedBattleTypeFlags; // ??? + void (**savedCallback)(void); + + playerMultiplierId = GetMultiplayerId(); + gBattleStruct->multiplayerId = playerMultiplierId; + savedCallback = &gBattleStruct->savedCallback; + savedBattleTypeFlags = &gBattleStruct->savedBattleTypeFlags; + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) + { + sub_80108C4(); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, sizeof(gUnknown_2022B58)); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 1: + if ((GetBlockReceivedStatus() & r4) == r4) + { + ResetBlockReceivedFlags(); + for (i = 0; i < 4; ++i) + { + if (i == playerMultiplierId) + continue; + if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerMultiplierId].id & 1)) + || (gLinkPlayers[i].id & 1 && gLinkPlayers[playerMultiplierId].id & 1)) + memcpy(gUnknown_2022B58, gBlockRecvBuffer[i], sizeof(gUnknown_2022B58)); + } + ++gBattleCommunication[MULTIUSE_STATE]; + *savedCallback = gMain.savedCallback; + *savedBattleTypeFlags = gBattleTypeFlags; + gMain.savedCallback = CB2_PreInitMultiBattle; + sub_8128198(); + } + break; + case 2: + if (!gPaletteFade.active) + { + ++gBattleCommunication[MULTIUSE_STATE]; + if (gWirelessCommType) + sub_800AB9C(); + else + sub_800AAC0(); + } + break; + case 3: + if (gWirelessCommType) + { + if (IsLinkRfuTaskFinished()) + { + gBattleTypeFlags = *savedBattleTypeFlags; + gMain.savedCallback = *savedCallback; + SetMainCallback2(CB2_InitBattleInternal); + } + } + else if (gReceivedRemoteLinkPlayers == 0) + { + gBattleTypeFlags = *savedBattleTypeFlags; + gMain.savedCallback = *savedCallback; + SetMainCallback2(CB2_InitBattleInternal); + } + break; + } +} + +static void CB2_HandleStartMultiBattle(void) +{ + u8 playerMultiplayerId; + s32 id; + u8 taskId; + + playerMultiplayerId = GetMultiplayerId(); + gBattleStruct->multiplayerId = playerMultiplayerId; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + if (!IsDma3ManagerBusyWithBgCopy()) + { + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + sub_80357C8(); + gBattleCommunication[MULTIUSE_STATE] = 1; + } + if (gWirelessCommType) + LoadWirelessStatusIndicatorSpriteGfx(); + break; + case 1: + if (gReceivedRemoteLinkPlayers != 0) + { + if (IsLinkTaskFinished()) + { + *(&gBattleStruct->field_184) = 1; + *(&gBattleStruct->field_185) = 2; + sub_800FFEC(); + SetPlayerBerryDataInBattleStruct(); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); + ++gBattleCommunication[MULTIUSE_STATE]; + } + if (gWirelessCommType) + CreateWirelessStatusIndicatorSprite(0, 0); + } + break; + case 2: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + sub_8010414(4, playerMultiplayerId); + SetAllPlayersBerryData(); + SetDeoxysStats(); + memcpy(gDecompressionBuffer, gPlayerParty, sizeof(struct Pokemon) * 3); + taskId = CreateTask(sub_800F6FC, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + for (id = 0; id < MAX_LINK_PLAYERS; ++id) + { + switch (gLinkPlayers[id].id) + { + case 0: + gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 1: + gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 2: + gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; + case 3: + gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; + } + } + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + ++gBattleCommunication[MULTIUSE_STATE]; + } + else + { + break; + } + // fall through + case 3: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 4: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; ++id) + { + if (id == playerMultiplayerId) + { + switch (gLinkPlayers[id].id) + { + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + else + { + if ((!(gLinkPlayers[id].id & 1) && !(gLinkPlayers[playerMultiplayerId].id & 1)) + || ((gLinkPlayers[id].id & 1) && (gLinkPlayers[playerMultiplayerId].id & 1))) + { + switch (gLinkPlayers[id].id) + { + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + else + { + switch (gLinkPlayers[id].id) + { + case 0: + case 3: + memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + } + } + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 7: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon)); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 8: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; ++id) + { + if (id == playerMultiplayerId) + { + switch (gLinkPlayers[id].id) + { + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + else + { + if ((!(gLinkPlayers[id].id & 1) && !(gLinkPlayers[playerMultiplayerId].id & 1)) + || ((gLinkPlayers[id].id & 1) && (gLinkPlayers[playerMultiplayerId].id & 1))) + { + switch (gLinkPlayers[id].id) + { + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + else + { + switch (gLinkPlayers[id].id) + { + case 0: + case 3: + memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + } + } + TryCorrectShedinjaLanguage(&gPlayerParty[0]); + TryCorrectShedinjaLanguage(&gPlayerParty[1]); + TryCorrectShedinjaLanguage(&gPlayerParty[2]); + TryCorrectShedinjaLanguage(&gPlayerParty[3]); + TryCorrectShedinjaLanguage(&gPlayerParty[4]); + TryCorrectShedinjaLanguage(&gPlayerParty[5]); + TryCorrectShedinjaLanguage(&gEnemyParty[0]); + TryCorrectShedinjaLanguage(&gEnemyParty[1]); + TryCorrectShedinjaLanguage(&gEnemyParty[2]); + TryCorrectShedinjaLanguage(&gEnemyParty[3]); + TryCorrectShedinjaLanguage(&gEnemyParty[4]); + TryCorrectShedinjaLanguage(&gEnemyParty[5]); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 11: + sub_800D30C(); + ++gBattleCommunication[MULTIUSE_STATE]; + gBattleCommunication[SPRITES_INIT_STATE1] = 0; + gBattleCommunication[SPRITES_INIT_STATE2] = 0; + break; + case 12: + if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) + { + gPreBattleCallback1 = gMain.callback1; + gMain.callback1 = BattleMainCB1; + SetMainCallback2(BattleMainCB2); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + gBattleTypeFlags |= BATTLE_TYPE_20; + } + break; + case 5: + case 9: + ++gBattleCommunication[0]; + gBattleCommunication[SPRITES_INIT_STATE1] = 1; + // fall through + case 6: + case 10: + if (--gBattleCommunication[SPRITES_INIT_STATE1] == 0) + ++gBattleCommunication[0]; + break; + } +} + +void BattleMainCB2(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); + if (JOY_HELD(B_BUTTON) && gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) + { + gSpecialVar_Result = gBattleOutcome = B_OUTCOME_DREW; + ResetPaletteFadeControl(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + SetMainCallback2(CB2_QuitPokeDudeBattle); + } +} + +void FreeRestoreBattleData(void) +{ + gMain.callback1 = gPreBattleCallback1; + gScanlineEffect.state = 3; + gMain.inBattle = FALSE; + ZeroEnemyPartyMons(); + m4aSongNumStop(SE_HINSI); + FreeMonSpritesGfx(); + FreeBattleSpritesData(); + FreeBattleResources(); +} + +static void CB2_QuitPokeDudeBattle(void) +{ + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + FreeRestoreBattleData(); + FreeAllWindowBuffers(); + SetMainCallback2(gMain.savedCallback); + } +} + +static void sub_80111EC(struct Sprite *sprite) +{ + sprite->data[0] = 0; + sprite->callback = sub_80111FC; +} + +static void sub_80111FC(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + gUnknown_2022BC0 = AllocZeroed(0x1000); + ++sprite->data[0]; + sprite->data[1] = 0; + sprite->data[2] = 0x281; + sprite->data[3] = 0; + sprite->data[4] = 1; + // fall through + case 1: + if (--sprite->data[4] == 0) + { + s32 i, r2, r0; + + sprite->data[4] = 2; + r2 = sprite->data[1] + sprite->data[3] * 32; + r0 = sprite->data[2] - sprite->data[3] * 32; + for (i = 0; i <= 29; i += 2) + { + *(&gUnknown_2022BC0[r2] + i) = 0x3D; + *(&gUnknown_2022BC0[r0] + i) = 0x3D; + } + if (++sprite->data[3] == 21) + { + ++sprite->data[0]; + sprite->data[1] = 32; + } + } + break; + case 2: + if (--sprite->data[1] == 20) + { + if (gUnknown_2022BC0 != NULL) + { + memset(gUnknown_2022BC0, 0, 0x1000); + FREE_AND_SET_NULL(gUnknown_2022BC0); + } + SetMainCallback2(CB2_InitBattle); + } + break; + } +} + +static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) +{ + u32 nameHash = 0; + u32 personalityValue; + u8 fixedIV; + s32 i, j; + + if (trainerNum == TRAINER_SECRET_BASE) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER + && !(gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_TOWER))) + { + ZeroEnemyPartyMons(); + for (i = 0; i < gTrainers[trainerNum].partySize; ++i) + { + + if (gTrainers[trainerNum].doubleBattle == TRUE) + personalityValue = 0x80; + else if (gTrainers[trainerNum].encounterMusic_gender & 0x80) + personalityValue = 0x78; + else + personalityValue = 0x88; + for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; ++j) + nameHash += gTrainers[trainerNum].trainerName[j]; + switch (gTrainers[trainerNum].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerNum].party.NoItemDefaultMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + break; + } + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerNum].party.NoItemCustomMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerNum].party.ItemDefaultMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + break; + } + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerNum].party.ItemCustomMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + } + } + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + } + return gTrainers[trainerNum].partySize; +} + +// not used +static void sub_80116CC(void) +{ + if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F) + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x512; +} + +void VBlankCB_Battle(void) +{ + // Change gRngSeed every vblank. + Random(); + SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); + SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); + SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); + SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X); + SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y); + SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V); + SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN1H); + SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void nullsub_9(struct Sprite *sprite) +{ +} + +static void sub_80117BC(struct Sprite *sprite) +{ + if (sprite->data[0] != 0) + sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8); + else + sprite->pos1.x = sprite->data[1] - ((sprite->data[2] & 0xFF00) >> 8); + sprite->data[2] += 0x180; + if (sprite->affineAnimEnded) + { + FreeSpriteTilesByTag(ANIM_SPRITES_START); + FreeSpritePaletteByTag(ANIM_SPRITES_START); + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +void sub_801182C(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80117BC; + PlaySE(SE_BT_START); +} + +static void sub_801184C(u8 taskId) +{ + struct Pokemon *party1 = NULL; + struct Pokemon *party2 = NULL; + u8 multiplayerId = gBattleStruct->multiplayerId; + u32 r7; + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + switch (gLinkPlayers[multiplayerId].id) + { + case 0: + case 2: + party1 = gPlayerParty; + party2 = gEnemyParty; + break; + case 1: + case 3: + party1 = gEnemyParty; + party2 = gPlayerParty; + break; + } + } + else + { + party1 = gPlayerParty; + party2 = gEnemyParty; + } + r7 = 0; + for (i = 0; i < PARTY_SIZE; ++i) + { + u16 species = GetMonData(&party1[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&party1[i], MON_DATA_HP); + u32 status = GetMonData(&party1[i], MON_DATA_STATUS); + + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + + if (species == SPECIES_NONE) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[3] = r7; + r7 = 0; + for (i = 0; i < PARTY_SIZE; ++i) + { + u16 species = GetMonData(&party2[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&party2[i], MON_DATA_HP); + u32 status = GetMonData(&party2[i], MON_DATA_STATUS); + + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + if (species == SPECIES_NONE) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[4] = r7; +} + +void sub_8011A1C(void) +{ + s32 i; + u8 taskId; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0x50, 0x51)); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gBattle_WIN0H = WIN_RANGE(0, 0xF0); + gBattle_WIN0V = WIN_RANGE(0x50, 0x51); + ScanlineEffect_Clear(); + for (i = 0; i < 80; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; + } + + for (; i < 160; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; + } + ResetPaletteFade(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + sub_800F34C(); + LoadCompressedPalette(gBattleTextboxPalette, 0, 64); + LoadBattleMenuWindowGfx(); + ResetSpriteData(); + ResetTasks(); + DrawBattleEntryBackground(); + SetGpuReg(REG_OFFSET_WINOUT, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(VBlankCB_Battle); + taskId = CreateTask(sub_800F6FC, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; + gTasks[taskId].data[5] = 1; + sub_801184C(taskId); + SetMainCallback2(sub_8011B94); + gBattleCommunication[MULTIUSE_STATE] = 0; +} + +static void sub_8011B94(void) +{ + sub_8011BB0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + RunTasks(); +} + +static void sub_8011BB0(void) +{ + s32 i; + + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + ShowBg(0); + ShowBg(1); + ShowBg(2); + gBattleCommunication[1] = 0xFF; + ++gBattleCommunication[MULTIUSE_STATE]; + break; + case 1: + if (--gBattleCommunication[1] == 0) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 2: + if (!gPaletteFade.active) + { + SetMainCallback2(gMain.savedCallback); + sub_812C224(); + FreeMonSpritesGfx(); + FreeBattleSpritesData(); + FreeBattleResources(); + } + break; + } +} + +u32 sub_8011C44(u8 arrayId, u8 caseId) +{ + u32 ret = 0; + + switch (caseId) + { + case 0: + ret = gBattleBgTemplates[arrayId].bg; + break; + case 1: + ret = gBattleBgTemplates[arrayId].charBaseIndex; + break; + case 2: + ret = gBattleBgTemplates[arrayId].mapBaseIndex; + break; + case 3: + ret = gBattleBgTemplates[arrayId].screenSize; + break; + case 4: + ret = gBattleBgTemplates[arrayId].paletteMode; + break; + case 5: + ret = gBattleBgTemplates[arrayId].priority; + break; + case 6: + ret = gBattleBgTemplates[arrayId].baseTile; + break; + } + return ret; +} + +static void TryCorrectShedinjaLanguage(struct Pokemon *mon) +{ + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 language = LANGUAGE_JAPANESE; + + if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_SHEDINJA + && GetMonData(mon, MON_DATA_LANGUAGE) != language) + { + GetMonData(mon, MON_DATA_NICKNAME, nickname); + if (StringCompareWithoutExtCtrlCodes(nickname, sText_ShedinjaJpnName) == 0) + SetMonData(mon, MON_DATA_LANGUAGE, &language); + } +} + +#define sBattler data[0] +#define sSpeciesId data[2] + +void SpriteCB_WildMon(struct Sprite *sprite) +{ + sprite->callback = SpriteCB_MoveWildMonToRight; + StartSpriteAnimIfDifferent(sprite, 0); + BeginNormalPaletteFade(0x20000, 0, 10, 10, RGB(8, 8, 8)); +} + +static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite) +{ + if ((gIntroSlideFlags & 1) == 0) + { + sprite->pos2.x += 2; + if (sprite->pos2.x == 0) + { + sprite->callback = SpriteCB_WildMonShowHealthbox; + PlayCry1(sprite->data[2], 25); + } + } +} + +static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + sub_804BD94(sprite->sBattler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[sprite->sBattler]); + sprite->callback = SpriteCallbackDummy2; + StartSpriteAnimIfDifferent(sprite, 0); + BeginNormalPaletteFade(0x20000, 0, 10, 0, RGB(8, 8, 8)); + } +} + +void SpriteCallbackDummy2(struct Sprite *sprite) +{ +} + +// not used +static void sub_8011E28(struct Sprite *sprite) +{ + sprite->data[3] = 6; + sprite->data[4] = 1; + sprite->callback = sub_8011E3C; +} + +// not used +static void sub_8011E3C(struct Sprite *sprite) +{ + --sprite->data[4]; + if (sprite->data[4] == 0) + { + sprite->data[4] = 8; + sprite->invisible ^= 1; + --sprite->data[3]; + if (sprite->data[3] == 0) + { + sprite->invisible = FALSE; + sprite->callback = SpriteCallbackDummy2; + gUnknown_2022AE8[0] = 0; + } + } +} + +void SpriteCB_FaintOpponentMon(struct Sprite *sprite) +{ + u8 battler = sprite->sBattler; + u16 species; + u8 yOffset; + + if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != 0) + species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; + else + species = sprite->sSpeciesId; + GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_PERSONALITY); // Unused return value. + if (species == SPECIES_UNOWN) + { + u32 personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_PERSONALITY); + u16 unownForm = ((((personalityValue & 0x3000000) >> 18) | ((personalityValue & 0x30000) >> 12) | ((personalityValue & 0x300) >> 6) | (personalityValue & 3)) % 0x1C); + u16 unownSpecies; + + if (unownForm == 0) + unownSpecies = SPECIES_UNOWN; // Use the A Unown form. + else + unownSpecies = NUM_SPECIES + unownForm; // Use one of the other Unown letters. + yOffset = gMonFrontPicCoords[unownSpecies].y_offset; + } + else if (species == SPECIES_CASTFORM) + { + yOffset = gCastformFrontSpriteCoords[gBattleMonForms[battler]].y_offset; + } + else if (species > NUM_SPECIES) + { + yOffset = gMonFrontPicCoords[SPECIES_NONE].y_offset; + } + else + { + yOffset = gMonFrontPicCoords[species].y_offset; + } + sprite->data[3] = 8 - yOffset / 8; + sprite->data[4] = 1; + sprite->callback = SpriteCB_AnimFaintOpponent; +} + +static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite) +{ + s32 i; + + if (--sprite->data[4] == 0) + { + sprite->data[4] = 2; + sprite->pos2.y += 8; // Move the sprite down. + if (--sprite->data[3] < 0) + { + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } + else // Erase bottom part of the sprite to create a smooth illusion of mon falling down. + { + u8 *dst = (u8 *)gMonSpritesGfxPtr->sprites[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8); + + for (i = 0; i < 0x100; ++i) + *(dst++) = 0; + StartSpriteAnim(sprite, gBattleMonForms[sprite->sBattler]); + } + } +} + +void sub_8012044(struct Sprite *sprite) +{ + sprite->data[3] = 8; + sprite->data[4] = sprite->invisible; + sprite->callback = sub_8012060; +} + +static void sub_8012060(struct Sprite *sprite) +{ + --sprite->data[3]; + if (sprite->data[3] == 0) + { + sprite->invisible ^= 1; + sprite->data[3] = 8; + } +} + +void sub_8012098(struct Sprite *sprite) +{ + sprite->invisible = sprite->data[4]; + sprite->data[4] = FALSE; + sprite->callback = SpriteCallbackDummy2; +} + +void sub_80120C4(struct Sprite *sprite) +{ + sprite->callback = oac_poke_ally_; +} + +static void oac_poke_ally_(struct Sprite *sprite) +{ + if (!(gIntroSlideFlags & 1)) + { + sprite->pos2.x -= 2; + if (sprite->pos2.x == 0) + { + sprite->callback = SpriteCallbackDummy3; + sprite->data[1] = 0; + } + } +} + +void sub_8012100(struct Sprite *sprite) +{ + sprite->callback = SpriteCallbackDummy3; +} + +static void SpriteCallbackDummy3(struct Sprite *sprite) +{ +} + +void sub_8012110(struct Sprite *sprite) +{ + if (!(gIntroSlideFlags & 1)) + { + sprite->pos2.x += sprite->data[1]; + sprite->pos2.y += sprite->data[2]; + } +} + +#define sSinIndex data[0] +#define sDelta data[1] +#define sAmplitude data[2] +#define sBouncerSpriteId data[3] +#define sWhich data[4] + +void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude) +{ + u8 invisibleSpriteId; + u8 bouncerSpriteId; + + switch (which) + { + case BOUNCE_HEALTHBOX: + default: + if (gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing) + return; + break; + case BOUNCE_MON: + if (gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing) + return; + break; + } + invisibleSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_BounceEffect); + if (which == BOUNCE_HEALTHBOX) + { + bouncerSpriteId = gHealthboxSpriteIds[battler]; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxBounceSpriteId = invisibleSpriteId; + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing = 1; + gSprites[invisibleSpriteId].sSinIndex = 128; // 0 + } + else + { + bouncerSpriteId = gBattlerSpriteIds[battler]; + gBattleSpritesDataPtr->healthBoxesData[battler].battlerBounceSpriteId = invisibleSpriteId; + gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing = 1; + gSprites[invisibleSpriteId].sSinIndex = 192; // -1 + } + gSprites[invisibleSpriteId].sDelta = delta; + gSprites[invisibleSpriteId].sAmplitude = amplitude; + gSprites[invisibleSpriteId].sBouncerSpriteId = bouncerSpriteId; + gSprites[invisibleSpriteId].sWhich = which; + gSprites[bouncerSpriteId].pos2.x = 0; + gSprites[bouncerSpriteId].pos2.y = 0; +} + +void EndBounceEffect(u8 battler, u8 which) +{ + u8 bouncerSpriteId; + + if (which == BOUNCE_HEALTHBOX) + { + if (!gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing) + return; + + bouncerSpriteId = gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].healthboxBounceSpriteId].sBouncerSpriteId; + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].healthboxBounceSpriteId]); + gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing = 0; + } + else + { + if (!gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing) + return; + + bouncerSpriteId = gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].battlerBounceSpriteId].sBouncerSpriteId; + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].battlerBounceSpriteId]); + gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing = 0; + } + gSprites[bouncerSpriteId].pos2.x = 0; + gSprites[bouncerSpriteId].pos2.y = 0; +} + +static void SpriteCB_BounceEffect(struct Sprite *sprite) +{ + u8 bouncerSpriteId = sprite->sBouncerSpriteId; + s32 index; + + if (sprite->sWhich == BOUNCE_HEALTHBOX) + index = sprite->sSinIndex; + else + index = sprite->sSinIndex; + gSprites[bouncerSpriteId].pos2.y = Sin(index, sprite->sAmplitude) + sprite->sAmplitude; + sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF; +} + +void sub_8012354(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, 1); + sprite->callback = sub_8012398; +} + +void sub_801236C(struct Sprite *sprite) +{ + if (sprite->animDelayCounter == 0) + sprite->centerToCornerVecX = gUnknown_824F048[sprite->animCmdIndex]; +} + +static void sub_8012398(struct Sprite *sprite) +{ + sub_801236C(sprite); + if (sprite->animEnded) + sprite->callback = SpriteCallbackDummy3; +} + +void nullsub_12(void) +{ +} + +void BeginBattleIntro(void) +{ + BattleStartClearSetData(); + gBattleCommunication[1] = 0; + gBattleMainFunc = BattleIntroGetMonsData; +} + +static void BattleMainCB1(void) +{ + gBattleMainFunc(); + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + gBattlerControllerFuncs[gActiveBattler](); +} + +static void BattleStartClearSetData(void) +{ + s32 i; + u32 j; + u8 *dataPtr; + + TurnValuesCleanUp(FALSE); + SpecialStatusesClear(); + for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + { + gStatuses3[i] = 0; + dataPtr = (u8 *)&gDisableStructs[i]; + for (j = 0; j < sizeof(struct DisableStruct); ++j) + dataPtr[j] = 0; + gDisableStructs[i].isFirstTurn = 2; + gUnknown_2023DD4[i] = 0; + gLastMoves[i] = MOVE_NONE; + gLastLandedMoves[i] = MOVE_NONE; + gLastHitByType[i] = 0; + gLastResultingMoves[i] = MOVE_NONE; + gLastHitBy[i] = 0xFF; + gLockedMoves[i] = MOVE_NONE; + gLastPrintedMoves[i] = MOVE_NONE; + gBattleResources->flags->flags[i] = 0; + } + for (i = 0; i < 2; ++i) + { + gSideStatuses[i] = 0; + dataPtr = (u8 *)&gSideTimers[i]; + for (j = 0; j < sizeof(struct SideTimer); ++j) + dataPtr[j] = 0; + } + gBattlerAttacker = 0; + gBattlerTarget = 0; + gBattleWeather = 0; + dataPtr = (u8 *)&gWishFutureKnock; + for (i = 0; i < sizeof(struct WishFutureKnock); ++i) + dataPtr[i] = 0; + gHitMarker = 0; + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_POKEDUDE)) && gSaveBlock2Ptr->optionsBattleSceneOff) + gHitMarker |= HITMARKER_NO_ANIMATIONS; + gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle; + gMultiHitCounter = 0; + gBattleOutcome = 0; + gBattleControllerExecFlags = 0; + gPaydayMoney = 0; + gBattleResources->battleScriptsStack->size = 0; + gBattleResources->battleCallbackStack->size = 0; + for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; ++i) + gBattleCommunication[i] = 0; + gPauseCounterBattle = 0; + gBattleMoveDamage = 0; + gIntroSlideFlags = 0; + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; + gLeveledUpInBattle = 0; + gAbsentBattlerFlags = 0; + gBattleStruct->runTries = 0; + gBattleStruct->safariGoNearCounter = 0; + gBattleStruct->safariPkblThrowCounter = 0; + *(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; + *(&gBattleStruct->safariEscapeFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].safariZoneFleeRate * 100 / 1275; + if (gBattleStruct->safariEscapeFactor <= 1) + gBattleStruct->safariEscapeFactor = 2; + gBattleStruct->wildVictorySong = 0; + gBattleStruct->moneyMultiplier = 1; + for (i = 0; i < 8; ++i) + { + *((u8 *)gBattleStruct->lastTakenMove + i) = MOVE_NONE; + *((u8 *)gBattleStruct->usedHeldItems + i) = ITEM_NONE; + *((u8 *)gBattleStruct->choicedMove + i) = MOVE_NONE; + *((u8 *)gBattleStruct->changedItems + i) = ITEM_NONE; + *(i + 0 * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(i + 1 * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(i + 2 * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(i + 3 * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + } + *(gBattleStruct->AI_monToSwitchIntoId + 0) = PARTY_SIZE; + *(gBattleStruct->AI_monToSwitchIntoId + 1) = PARTY_SIZE; + *(&gBattleStruct->givenExpMons) = 0; + for (i = 0; i < 11; ++i) + gBattleResults.catchAttempts[i] = 0; + gBattleResults.battleTurnCounter = 0; + gBattleResults.playerFaintCounter = 0; + gBattleResults.opponentFaintCounter = 0; + gBattleResults.playerSwitchesCounter = 0; + gBattleResults.numHealingItemsUsed = 0; + gBattleResults.numRevivesUsed = 0; + gBattleResults.playerMonWasDamaged = FALSE; + gBattleResults.usedMasterBall = FALSE; + gBattleResults.lastOpponentSpecies = SPECIES_NONE; + gBattleResults.lastUsedMovePlayer = MOVE_NONE; + gBattleResults.lastUsedMoveOpponent = MOVE_NONE; + gBattleResults.playerMon1Species = SPECIES_NONE; + gBattleResults.playerMon2Species = SPECIES_NONE; + gBattleResults.caughtMonSpecies = SPECIES_NONE; + for (i = 0; i < POKEMON_NAME_LENGTH; ++i) + { + gBattleResults.playerMon1Name[i] = 0; + gBattleResults.playerMon2Name[i] = 0; + gBattleResults.caughtMonNick[i] = 0; + } +} + +void SwitchInClearSetData(void) +{ + struct DisableStruct disableStructCopy = gDisableStructs[gActiveBattler]; + s32 i; + u8 *ptr; + + if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS) + { + for (i = 0; i < NUM_BATTLE_STATS; ++i) + gBattleMons[gActiveBattler].statStages[i] = 6; + for (i = 0; i < gBattlersCount; ++i) + { + if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == gActiveBattler) + gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; + if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].battlerWithSureHit == gActiveBattler) + { + gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; + gDisableStructs[i].battlerWithSureHit = 0; + } + } + } + if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) + { + gBattleMons[gActiveBattler].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED); + gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT); + for (i = 0; i < gBattlersCount; ++i) + { + if (GetBattlerSide(gActiveBattler) != GetBattlerSide(i) + && (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0 + && (gDisableStructs[i].battlerWithSureHit == gActiveBattler)) + { + gStatuses3[i] &= ~(STATUS3_ALWAYS_HITS); + gStatuses3[i] |= 0x10; + } + } + } + else + { + gBattleMons[gActiveBattler].status2 = 0; + gStatuses3[gActiveBattler] = 0; + } + for (i = 0; i < gBattlersCount; ++i) + { + if (gBattleMons[i].status2 & STATUS2_INFATUATED_WITH(gActiveBattler)) + gBattleMons[i].status2 &= ~(STATUS2_INFATUATED_WITH(gActiveBattler)); + if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && *(gBattleStruct->wrappedBy + i) == gActiveBattler) + gBattleMons[i].status2 &= ~(STATUS2_WRAPPED); + } + gActionSelectionCursor[gActiveBattler] = 0; + gMoveSelectionCursor[gActiveBattler] = 0; + ptr = (u8 *)&gDisableStructs[gActiveBattler]; + for (i = 0; i < sizeof(struct DisableStruct); ++i) + ptr[i] = 0; + if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) + { + gDisableStructs[gActiveBattler].substituteHP = disableStructCopy.substituteHP; + gDisableStructs[gActiveBattler].battlerWithSureHit = disableStructCopy.battlerWithSureHit; + gDisableStructs[gActiveBattler].perishSongTimer = disableStructCopy.perishSongTimer; + gDisableStructs[gActiveBattler].perishSongTimerStartValue = disableStructCopy.perishSongTimerStartValue; + gDisableStructs[gActiveBattler].battlerPreventingEscape = disableStructCopy.battlerPreventingEscape; + } + gMoveResultFlags = 0; + gDisableStructs[gActiveBattler].isFirstTurn = 2; + gLastMoves[gActiveBattler] = MOVE_NONE; + gLastLandedMoves[gActiveBattler] = MOVE_NONE; + gLastHitByType[gActiveBattler] = 0; + gLastResultingMoves[gActiveBattler] = MOVE_NONE; + gLastPrintedMoves[gActiveBattler] = MOVE_NONE; + gLastHitBy[gActiveBattler] = 0xFF; + *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 0) = MOVE_NONE; + *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 1) = MOVE_NONE; + *(0 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(0 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + *(1 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(1 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + *(2 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(2 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + *(3 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(3 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + for (i = 0; i < gBattlersCount; ++i) + { + if (i != gActiveBattler) + { + *(gBattleStruct->lastTakenMove + i * 2 + 0) = MOVE_NONE; + *(gBattleStruct->lastTakenMove + i * 2 + 1) = MOVE_NONE; + } + *(i * 8 + gActiveBattler * 2 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(i * 8 + gActiveBattler * 2 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + } + *((u8 *)(&gBattleStruct->choicedMove[gActiveBattler]) + 0) = MOVE_NONE; + *((u8 *)(&gBattleStruct->choicedMove[gActiveBattler]) + 1) = MOVE_NONE; + gBattleResources->flags->flags[gActiveBattler] = 0; + gCurrentMove = MOVE_NONE; +} + +void FaintClearSetData(void) +{ + s32 i; + u8 *ptr; + + for (i = 0; i < NUM_BATTLE_STATS; ++i) + gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].status2 = 0; + gStatuses3[gActiveBattler] = 0; + for (i = 0; i < gBattlersCount; ++i) + { + if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == gActiveBattler) + gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; + if (gBattleMons[i].status2 & STATUS2_INFATUATED_WITH(gActiveBattler)) + gBattleMons[i].status2 &= ~(STATUS2_INFATUATED_WITH(gActiveBattler)); + if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && *(gBattleStruct->wrappedBy + i) == gActiveBattler) + gBattleMons[i].status2 &= ~(STATUS2_WRAPPED); + } + gActionSelectionCursor[gActiveBattler] = 0; + gMoveSelectionCursor[gActiveBattler] = 0; + ptr = (u8 *)&gDisableStructs[gActiveBattler]; + for (i = 0; i < sizeof(struct DisableStruct); ++i) + ptr[i] = 0; + gProtectStructs[gActiveBattler].protected = FALSE; + gProtectStructs[gActiveBattler].endured = FALSE; + gProtectStructs[gActiveBattler].noValidMoves = FALSE; + gProtectStructs[gActiveBattler].helpingHand = FALSE; + gProtectStructs[gActiveBattler].bounceMove = FALSE; + gProtectStructs[gActiveBattler].stealMove = FALSE; + gProtectStructs[gActiveBattler].flag0Unknown = FALSE; + gProtectStructs[gActiveBattler].prlzImmobility = FALSE; + gProtectStructs[gActiveBattler].confusionSelfDmg = FALSE; + gProtectStructs[gActiveBattler].targetNotAffected = FALSE; + gProtectStructs[gActiveBattler].chargingTurn = FALSE; + gProtectStructs[gActiveBattler].fleeFlag = 0; + gProtectStructs[gActiveBattler].usedImprisonedMove = FALSE; + gProtectStructs[gActiveBattler].loveImmobility = FALSE; + gProtectStructs[gActiveBattler].usedDisabledMove = FALSE; + gProtectStructs[gActiveBattler].usedTauntedMove = FALSE; + gProtectStructs[gActiveBattler].flag2Unknown = FALSE; + gProtectStructs[gActiveBattler].flinchImmobility = FALSE; + gProtectStructs[gActiveBattler].notFirstStrike = FALSE; + gDisableStructs[gActiveBattler].isFirstTurn = 2; + gLastMoves[gActiveBattler] = MOVE_NONE; + gLastLandedMoves[gActiveBattler] = MOVE_NONE; + gLastHitByType[gActiveBattler] = MOVE_NONE; + gLastResultingMoves[gActiveBattler] = MOVE_NONE; + gLastPrintedMoves[gActiveBattler] = MOVE_NONE; + gLastHitBy[gActiveBattler] = 0xFF; + *((u8 *)(&gBattleStruct->choicedMove[gActiveBattler]) + 0) = MOVE_NONE; + *((u8 *)(&gBattleStruct->choicedMove[gActiveBattler]) + 1) = MOVE_NONE; + *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 0) = MOVE_NONE; + *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 1) = MOVE_NONE; + *(0 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(0 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + *(1 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(1 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + *(2 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(2 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + *(3 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(3 * 2 + gActiveBattler * 8 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + for (i = 0; i < gBattlersCount; ++i) + { + if (i != gActiveBattler) + { + *(gBattleStruct->lastTakenMove + i * 2 + 0) = MOVE_NONE; + *(gBattleStruct->lastTakenMove + i * 2 + 1) = MOVE_NONE; + } + *(i * 8 + gActiveBattler * 2 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 0) = 0; + *(i * 8 + gActiveBattler * 2 + (u8 *)(gBattleStruct->lastTakenMoveFrom) + 1) = 0; + } + gBattleResources->flags->flags[gActiveBattler] = 0; + gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; + gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; +} + +static void BattleIntroGetMonsData(void) +{ + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + gActiveBattler = gBattleCommunication[1]; + BtlController_EmitGetMonData(0, REQUEST_ALL_BATTLE, 0); + MarkBattlerForControllerExec(gActiveBattler); + ++gBattleCommunication[MULTIUSE_STATE]; + break; + case 1: + if (gBattleControllerExecFlags == 0) + { + ++gBattleCommunication[1]; + if (gBattleCommunication[1] == gBattlersCount) + gBattleMainFunc = BattleIntroPrepareBackgroundSlide; + else + gBattleCommunication[MULTIUSE_STATE] = 0; + } + break; + } +} + +static void BattleIntroPrepareBackgroundSlide(void) +{ + if (gBattleControllerExecFlags == 0) + { + gActiveBattler = GetBattlerAtPosition(0); + BtlController_EmitIntroSlide(0, gBattleTerrain); + MarkBattlerForControllerExec(gActiveBattler); + gBattleMainFunc = BattleIntroDrawTrainersOrMonsSprites; + gBattleCommunication[MULTIUSE_STATE] = 0; + gBattleCommunication[SPRITES_INIT_STATE1] = 0; + } +} + +static void BattleIntroDrawTrainersOrMonsSprites(void) +{ + u8 *ptr; + s32 i; + + if (!gBattleControllerExecFlags) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) + && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + ptr = (u8 *)&gBattleMons[gActiveBattler]; + for (i = 0; i < sizeof(struct BattlePokemon); ++i) + ptr[i] = 0; + } + else + { + u16 *hpOnSwitchout; + + ptr = (u8 *)&gBattleMons[gActiveBattler]; + for (i = 0; i < sizeof(struct BattlePokemon); ++i) + ptr[i] = gBattleBufferB[gActiveBattler][4 + i]; + gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; + gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; + gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); + hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)]; + *hpOnSwitchout = gBattleMons[gActiveBattler].hp; + for (i = 0; i < NUM_BATTLE_STATS; ++i) + gBattleMons[gActiveBattler].statStages[i] = 6; + gBattleMons[gActiveBattler].status2 = 0; + } + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT) + { + BtlController_EmitDrawTrainerPic(0); + MarkBattlerForControllerExec(gActiveBattler); + } + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) + { + BtlController_EmitDrawTrainerPic(0); + MarkBattlerForControllerExec(gActiveBattler); + } + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_POKEDUDE + | BATTLE_TYPE_LINK + | BATTLE_TYPE_GHOST + | BATTLE_TYPE_OLDMAN_TUTORIAL + | BATTLE_TYPE_LEGENDARY))) + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); + } + else + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) + { + if (gBattleTypeFlags & (BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY)) + { + if ((gBattleTypeFlags & (BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY)) != BATTLE_TYPE_GHOST) + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); + } + else if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_POKEDUDE + | BATTLE_TYPE_LINK + | BATTLE_TYPE_GHOST + | BATTLE_TYPE_OLDMAN_TUTORIAL + | BATTLE_TYPE_LEGENDARY))) + { + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); + } + BtlController_EmitLoadMonSprite(0); + MarkBattlerForControllerExec(gActiveBattler); + } + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI + && (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)) + { + BtlController_EmitDrawTrainerPic(0); + MarkBattlerForControllerExec(gActiveBattler); + } + } + gBattleMainFunc = BattleIntroDrawPartySummaryScreens; + } +} + +static void BattleIntroDrawPartySummaryScreens(void) +{ + s32 i; + struct HpAndStatus hpStatus[PARTY_SIZE]; + + if (!gBattleControllerExecFlags) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + for (i = 0; i < PARTY_SIZE; ++i) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; + } + else + { + hpStatus[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); + } + } + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + BtlController_EmitDrawPartyStatusSummary(0, hpStatus, 0x80); + MarkBattlerForControllerExec(gActiveBattler); + for (i = 0; i < PARTY_SIZE; ++i) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; + } + else + { + hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + } + } + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + BtlController_EmitDrawPartyStatusSummary(0, hpStatus, 0x80); + MarkBattlerForControllerExec(gActiveBattler); + + gBattleMainFunc = BattleIntroPrintTrainerWantsToBattle; + } + else + { + // The struct gets set here, but nothing is ever done with it since + // wild battles don't show the party summary. + // Still, there's no point in having dead code. + for (i = 0; i < PARTY_SIZE; ++i) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; + } + else + { + hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + } + } + gBattleMainFunc = BattleIntroPrintWildMonAttacked; + } + } +} + +static void BattleIntroPrintTrainerWantsToBattle(void) +{ + if (!gBattleControllerExecFlags) + { + gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + PrepareStringBattle(STRINGID_INTROMSG, gActiveBattler); + gBattleMainFunc = BattleIntroPrintOpponentSendsOut; + } +} + +static void BattleIntroPrintWildMonAttacked(void) +{ + if (!gBattleControllerExecFlags) + { + gBattleMainFunc = BattleIntroPrintPlayerSendsOut; + PrepareStringBattle(STRINGID_INTROMSG, 0); + if ((gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_GHOST)) == (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_GHOST)) + { + gBattleScripting.battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + BattleScriptExecute(gUnknown_81D91A1); + } + } +} + +static void BattleIntroPrintOpponentSendsOut(void) +{ + if (!gBattleControllerExecFlags) + { + PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); + gBattleMainFunc = BattleIntroOpponentSendsOutMonAnimation; + } +} + +static void BattleIntroOpponentSendsOutMonAnimation(void) +{ + if (!gBattleControllerExecFlags) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) + { + BtlController_EmitIntroTrainerBallThrow(0); + MarkBattlerForControllerExec(gActiveBattler); + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) + { + BtlController_EmitIntroTrainerBallThrow(0); + MarkBattlerForControllerExec(gActiveBattler); + } + } + gBattleMainFunc = BattleIntroRecordMonsToDex; + } +} + +static void BattleIntroRecordMonsToDex(void) +{ + if (!gBattleControllerExecFlags) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_POKEDUDE + | BATTLE_TYPE_LINK + | BATTLE_TYPE_GHOST + | BATTLE_TYPE_OLDMAN_TUTORIAL + | BATTLE_TYPE_LEGENDARY))) + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality); + gBattleMainFunc = BattleIntroPrintPlayerSendsOut; + } +} + +// not used +static void sub_80136C4(void) +{ + if (!gBattleControllerExecFlags) + gBattleMainFunc = BattleIntroPrintPlayerSendsOut; +} + +void BattleIntroPrintPlayerSendsOut(void) +{ + if (!gBattleControllerExecFlags) + { + if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) + PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); + gBattleMainFunc = BattleIntroPlayerSendsOutMonAnimation; + } +} + +static void BattleIntroPlayerSendsOutMonAnimation(void) +{ + u32 position; + + if (!gBattleControllerExecFlags) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT) + { + BtlController_EmitIntroTrainerBallThrow(0); + MarkBattlerForControllerExec(gActiveBattler); + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT) + { + BtlController_EmitIntroTrainerBallThrow(0); + MarkBattlerForControllerExec(gActiveBattler); + } + } + gBattleStruct->switchInAbilitiesCounter = 0; + gBattleStruct->switchInItemsCounter = 0; + gBattleStruct->overworldWeatherDone = FALSE; + gBattleMainFunc = TryDoEventsBeforeFirstTurn; + } +} + +// not used +static void sub_80137D0(void) +{ + if (!gBattleControllerExecFlags) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + BtlController_EmitSwitchInAnim(0, gBattlerPartyIndexes[gActiveBattler], FALSE); + MarkBattlerForControllerExec(gActiveBattler); + } + } + gBattleStruct->switchInAbilitiesCounter = 0; + gBattleStruct->switchInItemsCounter = 0; + gBattleStruct->overworldWeatherDone = FALSE; + gBattleMainFunc = TryDoEventsBeforeFirstTurn; + } +} + +static void TryDoEventsBeforeFirstTurn(void) +{ + s32 i, j; + u8 effect = 0; + + if (!gBattleControllerExecFlags) + { + + if (gBattleStruct->switchInAbilitiesCounter == 0) + { + for (i = 0; i < gBattlersCount; ++i) + gBattlerByTurnOrder[i] = i; + for (i = 0; i < gBattlersCount - 1; ++i) + for (j = i + 1; j < gBattlersCount; ++j) + if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], TRUE) != 0) + SwapTurnOrder(i, j); + } + if (!gBattleStruct->overworldWeatherDone + && AbilityBattleEffects(0, 0, 0, ABILITYEFFECT_SWITCH_IN_WEATHER, 0) != 0) + { + gBattleStruct->overworldWeatherDone = TRUE; + return; + } + // Check all switch in abilities happening from the fastest mon to slowest. + while (gBattleStruct->switchInAbilitiesCounter < gBattlersCount) + { + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter], 0, 0, 0) != 0) + ++effect; + ++gBattleStruct->switchInAbilitiesCounter; + if (effect) + return; + } + if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) != 0) + return; + if (AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) != 0) + return; + // Check all switch in items having effect from the fastest mon to slowest. + while (gBattleStruct->switchInItemsCounter < gBattlersCount) + { + if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter], FALSE)) + ++effect; + ++gBattleStruct->switchInItemsCounter; + if (effect) + return; + } + for (i = 0; i < gBattlersCount; ++i) // pointless, ruby leftover + ; + for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + { + *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; + gChosenActionByBattler[i] = B_ACTION_NONE; + gChosenMoveByBattler[i] = MOVE_NONE; + } + TurnValuesCleanUp(FALSE); + SpecialStatusesClear(); + *(&gBattleStruct->field_91) = gAbsentBattlerFlags; + gBattleMainFunc = HandleTurnActionSelectionState; + ResetSentPokesToOpponentValue(); + for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; ++i) + gBattleCommunication[i] = 0; + for (i = 0; i < gBattlersCount; ++i) + gBattleMons[i].status2 &= ~(STATUS2_FLINCHED); + *(&gBattleStruct->turnEffectsTracker) = 0; + *(&gBattleStruct->turnEffectsBattlerId) = 0; + *(&gBattleStruct->wishPerishSongState) = 0; + *(&gBattleStruct->wishPerishSongBattlerId) = 0; + gBattleScripting.atk49_state = 0; + gBattleStruct->faintedActionsState = 0; + gBattleStruct->turnCountersTracker = 0; + gMoveResultFlags = 0; + gRandomTurnNumber = Random(); + } +} + +static void HandleEndTurn_ContinueBattle(void) +{ + s32 i; + + if (!gBattleControllerExecFlags) + { + gBattleMainFunc = BattleTurnPassed; + for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; ++i) + gBattleCommunication[i] = 0; + for (i = 0; i < gBattlersCount; ++i) + { + gBattleMons[i].status2 &= ~(STATUS2_FLINCHED); + if ((gBattleMons[i].status1 & STATUS1_SLEEP) && (gBattleMons[i].status2 & STATUS2_MULTIPLETURNS)) + CancelMultiTurnMoves(i); + } + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBattlerId = 0; + gBattleStruct->wishPerishSongState = 0; + gBattleStruct->wishPerishSongBattlerId = 0; + gBattleStruct->turnCountersTracker = 0; + gMoveResultFlags = 0; + } +} + +void BattleTurnPassed(void) +{ + s32 i; + + TurnValuesCleanUp(TRUE); + if (gBattleOutcome == 0) + { + if (DoFieldEndTurnEffects()) + return; + if (DoBattlerEndTurnEffects()) + return; + } + if (HandleFaintedMonActions()) + return; + gBattleStruct->faintedActionsState = 0; + if (HandleWishPerishSongOnTurnEnd()) + return; + TurnValuesCleanUp(FALSE); + gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); + gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + gHitMarker &= ~(HITMARKER_x400000); + gHitMarker &= ~(HITMARKER_x100000); + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; + gBattleScripting.atk49_state = 0; + gBattleMoveDamage = 0; + gMoveResultFlags = 0; + for (i = 0; i < 5; ++i) + gBattleCommunication[i] = 0; + if (gBattleOutcome != 0) + { + gCurrentActionFuncId = B_ACTION_FINISHED; + gBattleMainFunc = RunTurnActionsFunctions; + return; + } + if (gBattleResults.battleTurnCounter < 0xFF) + ++gBattleResults.battleTurnCounter; + for (i = 0; i < gBattlersCount; ++i) + { + gChosenActionByBattler[i] = B_ACTION_NONE; + gChosenMoveByBattler[i] = MOVE_NONE; + } + for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; + *(&gBattleStruct->field_91) = gAbsentBattlerFlags; + gBattleMainFunc = HandleTurnActionSelectionState; + gRandomTurnNumber = Random(); +} + +u8 IsRunningFromBattleImpossible(void) +{ + u8 holdEffect; + u8 side; + s32 i; + + if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[gActiveBattler].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item); + gPotentialItemEffectBattler = gActiveBattler; + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return 0; + if (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY) + return 0; + side = GetBattlerSide(gActiveBattler); + for (i = 0; i < gBattlersCount; ++i) + { + if (side != GetBattlerSide(i) + && gBattleMons[i].ability == ABILITY_SHADOW_TAG) + { + gBattleScripting.battler = i; + gLastUsedAbility = gBattleMons[i].ability; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + return 2; + } + if (side != GetBattlerSide(i) + && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) + && gBattleMons[i].ability == ABILITY_ARENA_TRAP) + { + gBattleScripting.battler = i; + gLastUsedAbility = gBattleMons[i].ability; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + return 2; + } + } + i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0); + if (i != 0 && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)) + { + gBattleScripting.battler = i - 1; + gLastUsedAbility = gBattleMons[i - 1].ability; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + return 2; + } + if ((gBattleMons[gActiveBattler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) + || (gStatuses3[gActiveBattler] & STATUS3_ROOTED)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + return 1; + } + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + return 1; + } + return 0; +} + +void sub_8013F6C(u8 battler) +{ + s32 i; + u8 r4, r1; + + for (i = 0; i < 3; ++i) + gUnknown_203B0DC[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)); + r4 = pokemon_order_func(gBattlerPartyIndexes[battler]); + r1 = pokemon_order_func(*(gBattleStruct->monToSwitchIntoId + battler)); + sub_8127FF4(r4, r1); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + for (i = 0; i < 3; ++i) + { + *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gUnknown_203B0DC[i]; + *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->field_60)) = gUnknown_203B0DC[i]; + } + } + else + { + for (i = 0; i < 3; ++i) + *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gUnknown_203B0DC[i]; + } +} + +enum +{ + STATE_BEFORE_ACTION_CHOSEN, + STATE_WAIT_ACTION_CHOSEN, + STATE_WAIT_ACTION_CASE_CHOSEN, + STATE_WAIT_ACTION_CONFIRMED_STANDBY, + STATE_WAIT_ACTION_CONFIRMED, + STATE_SELECTION_SCRIPT, + STATE_WAIT_SET_BEFORE_ACTION, +}; + +static void HandleTurnActionSelectionState(void) +{ + s32 i; + + gBattleCommunication[ACTIONS_CONFIRMED_COUNT] = 0; + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + u8 position = GetBattlerPosition(gActiveBattler); + + switch (gBattleCommunication[gActiveBattler]) + { + case STATE_BEFORE_ACTION_CHOSEN: // Choose an action. + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI + || (position & BIT_FLANK) == B_FLANK_LEFT + || gBattleStruct->field_91 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] + || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) + { + if (gBattleStruct->field_91 & gBitTable[gActiveBattler]) + { + gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED; + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED; + else + gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + } + else + { + if (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS + || gBattleMons[gActiveBattler].status2 & STATUS2_RECHARGE) + { + gChosenActionByBattler[gActiveBattler] = B_ACTION_USE_MOVE; + gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + } + else + { + BtlController_EmitChooseAction(0, gChosenActionByBattler[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); + MarkBattlerForControllerExec(gActiveBattler); + ++gBattleCommunication[gActiveBattler]; + } + } + } + break; + case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action. + if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + gChosenActionByBattler[gActiveBattler] = gBattleBufferB[gActiveBattler][1]; + switch (gBattleBufferB[gActiveBattler][1]) + { + case B_ACTION_USE_MOVE: + if (AreAllMovesUnusable()) + { + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; + *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + *(gBattleStruct->moveTarget + gActiveBattler) = gBattleBufferB[gActiveBattler][3]; + return; + } + else if (gDisableStructs[gActiveBattler].encoredMove != MOVE_NONE) + { + gChosenMoveByBattler[gActiveBattler] = gDisableStructs[gActiveBattler].encoredMove; + *(gBattleStruct->chosenMovePositions + gActiveBattler) = gDisableStructs[gActiveBattler].encoredMovePos; + gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + return; + } + else + { + struct ChooseMoveStruct moveInfo; + + moveInfo.species = gBattleMons[gActiveBattler].species; + moveInfo.monType1 = gBattleMons[gActiveBattler].type1; + moveInfo.monType2 = gBattleMons[gActiveBattler].type2; + for (i = 0; i < MAX_MON_MOVES; ++i) + { + moveInfo.moves[i] = gBattleMons[gActiveBattler].moves[i]; + moveInfo.currentPp[i] = gBattleMons[gActiveBattler].pp[i]; + moveInfo.maxPp[i] = CalculatePPWithBonus(gBattleMons[gActiveBattler].moves[i], + gBattleMons[gActiveBattler].ppBonuses, + i); + } + BtlController_EmitChooseMove(0, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, &moveInfo); + MarkBattlerForControllerExec(gActiveBattler); + } + break; + case B_ACTION_USE_ITEM: + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)) + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_ActionSelectionItemsCantBeUsed; + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; + *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN; + return; + } + else + { + BtlController_EmitChooseItem(0, gBattleStruct->field_60[gActiveBattler]); + MarkBattlerForControllerExec(gActiveBattler); + } + break; + case B_ACTION_SWITCH: + *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION) || gStatuses3[gActiveBattler] & STATUS3_ROOTED) + { + BtlController_EmitChoosePokemon(0, PARTY_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + } + else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG)) + || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) + && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE) + || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0)) + && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))) + { + BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]); + } + else + { + if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH) + BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH) + BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + else + BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + } + MarkBattlerForControllerExec(gActiveBattler); + break; + case B_ACTION_SAFARI_BALL: + if (IsPlayerPartyAndPokemonStorageFull()) + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintFullBox; + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; + *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN; + return; + } + break; + case B_ACTION_CANCEL_PARTNER: + gBattleCommunication[gActiveBattler] = STATE_WAIT_SET_BEFORE_ACTION; + gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))] = STATE_BEFORE_ACTION_CHOSEN; + BtlController_EmitEndBounceEffect(0); + MarkBattlerForControllerExec(gActiveBattler); + return; + } + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER + && !(gBattleTypeFlags & BATTLE_TYPE_LINK) + && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN) + { + BattleScriptExecute(BattleScript_PrintCantRunFromTrainer); + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else if (IsRunningFromBattleImpossible() + && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN) + { + gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintCantEscapeFromBattle; + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; + *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN; + return; + } + else + { + ++gBattleCommunication[gActiveBattler]; + } + } + break; + case STATE_WAIT_ACTION_CASE_CHOSEN: + if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + switch (gChosenActionByBattler[gActiveBattler]) + { + case B_ACTION_USE_MOVE: + switch (gBattleBufferB[gActiveBattler][1]) + { + case 3 ... 9: + gChosenActionByBattler[gActiveBattler] = gBattleBufferB[gActiveBattler][1]; + return; + default: + if ((gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)) == 0xFFFF) + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else if (TrySetCantSelectMoveBattleScript()) + { + gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; + *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; + gBattleBufferB[gActiveBattler][1] = 0; + *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CHOSEN; + return; + } + else + { + *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleBufferB[gActiveBattler][2]; + gChosenMoveByBattler[gActiveBattler] = gBattleMons[gActiveBattler].moves[*(gBattleStruct->chosenMovePositions + gActiveBattler)]; + *(gBattleStruct->moveTarget + gActiveBattler) = gBattleBufferB[gActiveBattler][3]; + ++gBattleCommunication[gActiveBattler]; + } + break; + } + break; + case B_ACTION_USE_ITEM: + if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) == 0) + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else + { + gLastUsedItem = (gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)); + ++gBattleCommunication[gActiveBattler]; + } + break; + case B_ACTION_SWITCH: + if (gBattleBufferB[gActiveBattler][1] == PARTY_SIZE) + { + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + } + else + { + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1]; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= 0xF; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= (0xF0); + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; + } + ++gBattleCommunication[gActiveBattler]; + } + break; + case B_ACTION_RUN: + gHitMarker |= HITMARKER_RUN; + ++gBattleCommunication[gActiveBattler]; + break; + case B_ACTION_SAFARI_WATCH_CAREFULLY: + ++gBattleCommunication[gActiveBattler]; + break; + case B_ACTION_SAFARI_BALL: + ++gBattleCommunication[gActiveBattler]; + break; + case B_ACTION_SAFARI_POKEBLOCK: + case B_ACTION_SAFARI_GO_NEAR: + ++gBattleCommunication[gActiveBattler]; + break; + case B_ACTION_SAFARI_RUN: + gHitMarker |= HITMARKER_RUN; + ++gBattleCommunication[gActiveBattler]; + break; + case B_ACTION_OLDMAN_THROW: + ++gBattleCommunication[gActiveBattler]; + break; + } + } + break; + case STATE_WAIT_ACTION_CONFIRMED_STANDBY: + if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + { + if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE) + || (position & BIT_FLANK) != B_FLANK_LEFT + || (*(&gBattleStruct->field_91) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) + BtlController_EmitLinkStandbyMsg(0, 0); + else + BtlController_EmitLinkStandbyMsg(0, 1); + MarkBattlerForControllerExec(gActiveBattler); + ++gBattleCommunication[gActiveBattler]; + } + break; + case STATE_WAIT_ACTION_CONFIRMED: + if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + ++gBattleCommunication[ACTIONS_CONFIRMED_COUNT]; + break; + case STATE_SELECTION_SCRIPT: + if (*(gBattleStruct->selectionScriptFinished + gActiveBattler)) + { + gBattleCommunication[gActiveBattler] = *(gBattleStruct->stateIdAfterSelScript + gActiveBattler); + } + else + { + gBattlerAttacker = gActiveBattler; + gBattlescriptCurrInstr = gSelectionBattleScripts[gActiveBattler]; + if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + gSelectionBattleScripts[gActiveBattler] = gBattlescriptCurrInstr; + } + break; + case STATE_WAIT_SET_BEFORE_ACTION: + if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC)))) + gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN; + break; + } + } + // Check if everyone chose actions. + if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount) + gBattleMainFunc = SetActionsAndBattlersTurnOrder; +} + +void SwapTurnOrder(u8 id1, u8 id2) +{ + u32 temp; + + SWAP(gActionsByTurnOrder[id1], gActionsByTurnOrder[id2], temp); + SWAP(gBattlerByTurnOrder[id1], gBattlerByTurnOrder[id2], temp); +} + +u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) +{ + u8 strikesFirst = 0; + u8 speedMultiplierBattler1 = 0, speedMultiplierBattler2 = 0; + u32 speedBattler1 = 0, speedBattler2 = 0; + u8 holdEffect = 0; + u8 holdEffectParam = 0; + u16 moveBattler1 = 0, moveBattler2 = 0; + + if (WEATHER_HAS_EFFECT) + { + if ((gBattleMons[battler1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY) + || (gBattleMons[battler1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY)) + speedMultiplierBattler1 = 2; + else + speedMultiplierBattler1 = 1; + if ((gBattleMons[battler2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY) + || (gBattleMons[battler2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY)) + speedMultiplierBattler2 = 2; + else + speedMultiplierBattler2 = 1; + } + else + { + speedMultiplierBattler1 = 1; + speedMultiplierBattler2 = 1; + } + speedBattler1 = (gBattleMons[battler1].speed * speedMultiplierBattler1) + * (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][0]) + / (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][1]); + if (gBattleMons[battler1].item == ITEM_ENIGMA_BERRY) + { + holdEffect = gEnigmaBerries[battler1].holdEffect; + holdEffectParam = gEnigmaBerries[battler1].holdEffectParam; + } + else + { + holdEffect = ItemId_GetHoldEffect(gBattleMons[battler1].item); + holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler1].item); + } + // badge boost + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) + && FlagGet(FLAG_BADGE03_GET) + && GetBattlerSide(battler1) == B_SIDE_PLAYER) + speedBattler1 = (speedBattler1 * 110) / 100; + if (holdEffect == HOLD_EFFECT_MACHO_BRACE) + speedBattler1 /= 2; + if (gBattleMons[battler1].status1 & STATUS1_PARALYSIS) + speedBattler1 /= 4; + if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) + speedBattler1 = UINT_MAX; + // check second battlerId's speed + speedBattler2 = (gBattleMons[battler2].speed * speedMultiplierBattler2) + * (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][0]) + / (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][1]); + if (gBattleMons[battler2].item == ITEM_ENIGMA_BERRY) + { + holdEffect = gEnigmaBerries[battler2].holdEffect; + holdEffectParam = gEnigmaBerries[battler2].holdEffectParam; + } + else + { + holdEffect = ItemId_GetHoldEffect(gBattleMons[battler2].item); + holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler2].item); + } + // badge boost + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) + && FlagGet(FLAG_BADGE03_GET) + && GetBattlerSide(battler2) == B_SIDE_PLAYER) + speedBattler2 = (speedBattler2 * 110) / 100; + if (holdEffect == HOLD_EFFECT_MACHO_BRACE) + speedBattler2 /= 2; + if (gBattleMons[battler2].status1 & STATUS1_PARALYSIS) + speedBattler2 /= 4; + if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100) + speedBattler2 = UINT_MAX; + if (ignoreChosenMoves) + { + moveBattler1 = MOVE_NONE; + moveBattler2 = MOVE_NONE; + } + else + { + if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE) + { + if (gProtectStructs[battler1].noValidMoves) + moveBattler1 = MOVE_STRUGGLE; + else + moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)]; + } + else + moveBattler1 = MOVE_NONE; + if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE) + { + if (gProtectStructs[battler2].noValidMoves) + moveBattler2 = MOVE_STRUGGLE; + else + moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)]; + } + else + moveBattler2 = MOVE_NONE; + } + // both move priorities are different than 0 + if (gBattleMoves[moveBattler1].priority != 0 || gBattleMoves[moveBattler2].priority != 0) + { + // both priorities are the same + if (gBattleMoves[moveBattler1].priority == gBattleMoves[moveBattler2].priority) + { + if (speedBattler1 == speedBattler2 && Random() & 1) + strikesFirst = 2; // same speeds, same priorities + else if (speedBattler1 < speedBattler2) + strikesFirst = 1; // battler2 has more speed + // else battler1 has more speed + } + else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority) + strikesFirst = 1; // battler2's move has greater priority + // else battler1's move has greater priority + } + // both priorities are equal to 0 + else + { + if (speedBattler1 == speedBattler2 && Random() & 1) + strikesFirst = 2; // same speeds, same priorities + else if (speedBattler1 < speedBattler2) + strikesFirst = 1; // battler2 has more speed + // else battler1 has more speed + } + return strikesFirst; +} + +static void SetActionsAndBattlersTurnOrder(void) +{ + s32 turnOrderId = 0; + s32 i, j; + + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + ++turnOrderId; + } + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) + { + turnOrderId = 5; + break; + } + } + } + else if (gChosenActionByBattler[0] == B_ACTION_RUN) + { + gActiveBattler = 0; + turnOrderId = 5; + } + if (turnOrderId == 5) // One of battlers wants to run. + { + gActionsByTurnOrder[0] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[0] = gActiveBattler; + turnOrderId = 1; + for (i = 0; i < gBattlersCount; ++i) + { + if (i != gActiveBattler) + { + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[i]; + gBattlerByTurnOrder[turnOrderId] = i; + ++turnOrderId; + } + } + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleStruct->focusPunchBattlerId = 0; + return; + } + else + { + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) + { + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + ++turnOrderId; + } + } + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) + { + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + ++turnOrderId; + } + } + for (i = 0; i < gBattlersCount - 1; ++i) + { + for (j = i + 1; j < gBattlersCount; ++j) + { + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + + if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[i] != B_ACTION_SWITCH + && gActionsByTurnOrder[j] != B_ACTION_SWITCH) + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } + } + } + } + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleStruct->focusPunchBattlerId = 0; +} + +static void TurnValuesCleanUp(bool8 var0) +{ + s32 i; + u8 *dataPtr; + + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + if (var0) + { + gProtectStructs[gActiveBattler].protected = FALSE; + gProtectStructs[gActiveBattler].endured = FALSE; + } + else + { + dataPtr = (u8 *)(&gProtectStructs[gActiveBattler]); + for (i = 0; i < sizeof(struct ProtectStruct); ++i) + dataPtr[i] = 0; + if (gDisableStructs[gActiveBattler].isFirstTurn) + --gDisableStructs[gActiveBattler].isFirstTurn; + if (gDisableStructs[gActiveBattler].rechargeTimer) + { + --gDisableStructs[gActiveBattler].rechargeTimer; + if (gDisableStructs[gActiveBattler].rechargeTimer == 0) + gBattleMons[gActiveBattler].status2 &= ~(STATUS2_RECHARGE); + } + } + + if (gDisableStructs[gActiveBattler].substituteHP == 0) + gBattleMons[gActiveBattler].status2 &= ~(STATUS2_SUBSTITUTE); + } + gSideTimers[0].followmeTimer = 0; + gSideTimers[1].followmeTimer = 0; +} + +static void SpecialStatusesClear(void) +{ + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; ++gActiveBattler) + { + s32 i; + u8 *dataPtr = (u8 *)(&gSpecialStatuses[gActiveBattler]); + + for (i = 0; i < sizeof(struct SpecialStatus); ++i) + dataPtr[i] = 0; + } +} + +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) +{ + if (!(gHitMarker & HITMARKER_RUN)) + { + while (gBattleStruct->focusPunchBattlerId < gBattlersCount) + { + gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId; + ++gBattleStruct->focusPunchBattlerId; + if (gChosenMoveByBattler[gActiveBattler] == MOVE_FOCUS_PUNCH + && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) + && !(gDisableStructs[gBattlerAttacker].truantCounter) + && !(gProtectStructs[gActiveBattler].noValidMoves)) + { + BattleScriptExecute(BattleScript_FocusPunchSetUp); + return; + } + } + } + TryClearRageStatuses(); + gCurrentTurnActionNumber = 0; + { + // something stupid needed to match + u8 zero; + + gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)]; + } + gDynamicBasePower = 0; + gBattleStruct->dynamicMoveType = 0; + gBattleMainFunc = RunTurnActionsFunctions; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + gBattleScripting.multihitMoveEffect = 0; + gBattleResources->battleScriptsStack->size = 0; +} + +static void RunTurnActionsFunctions(void) +{ + if (gBattleOutcome != 0) + gCurrentActionFuncId = B_ACTION_FINISHED; + *(&gBattleStruct->savedTurnActionNumber) = gCurrentTurnActionNumber; + sTurnActionsFuncsTable[gCurrentActionFuncId](); + + if (gCurrentTurnActionNumber >= gBattlersCount) // everyone did their actions, turn finished + { + gHitMarker &= ~(HITMARKER_x100000); + gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; + } + else + { + if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId + { + gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); + gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + } + } +} + +static void HandleEndTurn_BattleWon(void) +{ + gCurrentActionFuncId = 0; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTextBuff1[0] = gBattleOutcome; + gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; + gBattleOutcome &= ~(B_OUTCOME_LINK_BATTLE_RAN); + } + else if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER)) + { + BattleStopLowHpSound(); + PlayBGM(MUS_WIN_TRE); + gBattlescriptCurrInstr = gUnknown_81D88D7; + } + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + BattleStopLowHpSound(); + gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon; + switch (gTrainers[gTrainerBattleOpponent_A].trainerClass) + { + case CLASS_LEADER_2: + case CLASS_CHAMPION_2: + PlayBGM(MUS_WIN_GYM); + break; + case CLASS_BOSS: + case CLASS_TEAM_ROCKET: + case CLASS_COOLTRAINER_2: + case CLASS_ELITE_FOUR_2: + case CLASS_GENTLEMAN_2: + default: + PlayBGM(MUS_WIN_TRE); + break; + } + } + else + { + gBattlescriptCurrInstr = BattleScript_PayDayMoneyAndPickUpItems; + } + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +static void HandleEndTurn_BattleLost(void) +{ + gCurrentActionFuncId = 0; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTextBuff1[0] = gBattleOutcome; + gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; + gBattleOutcome &= ~(B_OUTCOME_LINK_BATTLE_RAN); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && GetTrainerBattleMode() == 9) + { + if (sub_80803D8() & 1) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gBattlerAttacker = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + gBattlescriptCurrInstr = BattleScript_LocalBattleLost; + } + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +static void HandleEndTurn_RanFromBattle(void) +{ + gCurrentActionFuncId = 0; + switch (gProtectStructs[gBattlerAttacker].fleeFlag) + { + default: + gBattlescriptCurrInstr = BattleScript_GotAwaySafely; + break; + case 1: + gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; + break; + case 2: + gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; + break; + } + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +static void HandleEndTurn_MonFled(void) +{ + gCurrentActionFuncId = 0; + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]); + gBattlescriptCurrInstr = BattleScript_WildMonFled; + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +static 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]](); + } +} + +static 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(); + } + } +} + +static 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; +} + +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) + { + 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]](); +} + +static 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; +} + +static 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; +} + +static 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; +} + +static 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; + } + } + } +} + +static 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; +} + +static 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; +} + +static 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; +} + +static 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; +} + +static void HandleAction_SafariZoneRun(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + PlaySE(SE_NIGERU); + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_RAN; +} + +static 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; +} + +static void HandleAction_TryFinish(void) +{ + if (!HandleFaintedMonActions()) + { + gBattleStruct->faintedActionsState = 0; + gCurrentActionFuncId = B_ACTION_FINISHED; + } +} + +static 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); +} + +static 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/battle_script_commands.c b/src/battle_script_commands.c index 3de2a6dea..179a0ee79 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -48,6 +48,7 @@ #include "constants/abilities.h" #include "constants/pokemon.h" #include "constants/trainers.h" +#include "constants/map_types.h" #define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) @@ -9451,7 +9452,6 @@ static void atkEF_handleballthrow(void) catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; else catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; - if (gLastUsedItem > ITEM_SAFARI_BALL) { switch (gLastUsedItem) @@ -9515,7 +9515,7 @@ static void atkEF_handleballthrow(void) else { if (gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL] < 0xFF) - gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL]++; + ++gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL]; } } if (odds > 254) // mon caught diff --git a/src/battle_setup.c b/src/battle_setup.c new file mode 100644 index 000000000..4e2e48f3b --- /dev/null +++ b/src/battle_setup.c @@ -0,0 +1,1059 @@ +#include "global.h" +#include "task.h" +#include "help_system.h" +#include "overworld.h" +#include "item.h" +#include "sound.h" +#include "pokemon.h" +#include "load_save.h" +#include "safari_zone.h" +#include "quest_log.h" +#include "script.h" +#include "script_pokemon_util_80A0058.h" +#include "strings.h" +#include "string_util.h" +#include "event_data.h" +#include "unk_8159F40.h" +#include "map_obj_80688E4.h" +#include "metatile_behavior.h" +#include "event_scripts.h" +#include "fldeff.h" +#include "fieldmap.h" +#include "field_control_avatar.h" +#include "field_player_avatar.h" +#include "field_screen_effect.h" +#include "field_message_box.h" +#include "field_map_obj.h" +#include "vs_seeker.h" +#include "battle.h" +#include "battle_setup.h" +#include "battle_transition.h" +#include "constants/battle_setup.h" +#include "constants/flags.h" +#include "constants/items.h" +#include "constants/maps.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/pokemon.h" +#include "constants/trainers.h" +#include "constants/trainer_classes.h" +#include "constants/map_types.h" + +enum +{ + TRAINER_PARAM_LOAD_VAL_8BIT, + TRAINER_PARAM_LOAD_VAL_16BIT, + TRAINER_PARAM_LOAD_VAL_32BIT, + TRAINER_PARAM_CLEAR_VAL_8BIT, + TRAINER_PARAM_CLEAR_VAL_16BIT, + TRAINER_PARAM_CLEAR_VAL_32BIT, + TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR, +}; + +struct TrainerBattleParameter +{ + void *varPtr; + u8 ptrType; +}; + +static void DoSafariBattle(void); +static void DoGhostBattle(void); +static void DoStandardWildBattle(void); +static void CB2_EndWildBattle(void); +static u8 GetWildBattleTransition(void); +static u8 GetTrainerBattleTransition(void); +static void CB2_EndScriptedWildBattle(void); +static void CB2_EndMarowakBattle(void); +static bool32 IsPlayerDefeated(u32 battleOutcome); +static void CB2_EndTrainerBattle(void); +static const u8 *GetIntroSpeechOfApproachingTrainer(void); +static const u8 *GetTrainerCantBattleSpeech(void); + +static EWRAM_DATA u16 sTrainerBattleMode = 0; +EWRAM_DATA u16 gTrainerBattleOpponent_A = 0; +static EWRAM_DATA u16 sTrainerEventObjectLocalId = 0; +static EWRAM_DATA u8 *sTrainerAIntroSpeech = NULL; +static EWRAM_DATA u8 *sTrainerADefeatSpeech = NULL; +static EWRAM_DATA u8 *sTrainerVictorySpeech = NULL; +static EWRAM_DATA u8 *sTrainerCannotBattleSpeech = NULL; +static EWRAM_DATA u8 *sTrainerBattleEndScript = NULL; +static EWRAM_DATA u8 *sTrainerABattleScriptRetAddr = NULL; +static EWRAM_DATA u16 gUnknown_20386CC = 0; + +static const u8 sBattleTransitionTable_Wild[][2] = +{ + B_TRANSITION_SLICED_SCREEN, B_TRANSITION_WHITEFADE_IN_STRIPES, + B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES, + B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES, + B_TRANSITION_BLACK_WAVE_TO_RIGHT, B_TRANSITION_FULLSCREEN_WAVE, +}; + +static const u8 sBattleTransitionTable_Trainer[][2] = +{ + B_TRANSITION_SLIDING_POKEBALLS, B_TRANSITION_BLACK_DOODLES, + B_TRANSITION_HORIZONTAL_CORRUGATE, B_TRANSITION_BIG_POKEBALL, + B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES, + B_TRANSITION_DISTORTED_WAVE, B_TRANSITION_FULLSCREEN_WAVE, +}; + +static const struct TrainerBattleParameter sOrdinaryBattleParams[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerEventObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, +}; + +static const struct TrainerBattleParameter sContinueScriptBattleParams[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerEventObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, +}; + +static const struct TrainerBattleParameter sDoubleBattleParams[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerEventObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, +}; + +static const struct TrainerBattleParameter sOrdinaryNoIntroBattleParams[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerEventObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, +}; + +static const struct TrainerBattleParameter sTutorialBattleParams[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&gUnknown_20386CC, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, +}; + +static const struct TrainerBattleParameter sContinueScriptDoubleBattleParams[] = +{ + {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, + {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerEventObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sTrainerAIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, + {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerABattleScriptRetAddr, TRAINER_PARAM_LOAD_VAL_32BIT}, + {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, +}; + + +#define tState data[0] +#define tTransition data[1] + +static void Task_BattleStart(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (tState) + { + case 0: + if (!FldEffPoison_IsActive()) + { + HelpSystem_Disable(); + BT_StartOnField(tTransition); + ++tState; + } + break; + case 1: + if (BT_IsDone() == TRUE) + { + HelpSystem_Enable(); + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_InitBattle); + RestartWildEncounterImmunitySteps(); + ClearPoisonStepCounter(); + DestroyTask(taskId); + } + break; + } +} + +static void CreateBattleStartTask(u8 transition, u16 song) // song == 0 means default music for current map +{ + u8 taskId = CreateTask(Task_BattleStart, 1); + + gTasks[taskId].tTransition = transition; + PlayMapChosenOrBattleBGM(song); +} + +static bool8 CheckSilphScopeInPokemonTower(u16 mapGroup, u16 mapNum) +{ + if (mapGroup == MAP_GROUP(POKEMON_TOWER_1F) + && ((u16)(mapNum - MAP_NUM(POKEMON_TOWER_1F)) <= 6) + && !(CheckBagHasItem(ITEM_SILPH_SCOPE, 1))) + return TRUE; + else + return FALSE; +} + +void BattleSetup_StartWildBattle(void) +{ + if (GetSafariZoneFlag()) + DoSafariBattle(); + else if (CheckSilphScopeInPokemonTower(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)) + DoGhostBattle(); + else + DoStandardWildBattle(); +} + +static void DoStandardWildBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndWildBattle; + gBattleTypeFlags = 0; + CreateBattleStartTask(GetWildBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartRoamerBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndWildBattle; + gBattleTypeFlags = BATTLE_TYPE_ROAMER; + CreateBattleStartTask(GetWildBattleTransition(), MUS_VS_DEN); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +static void DoSafariBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndSafariBattle; + gBattleTypeFlags = BATTLE_TYPE_SAFARI; + CreateBattleStartTask(GetWildBattleTransition(), 0); +} + +static void DoGhostBattle(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = CB2_EndWildBattle; + gBattleTypeFlags = BATTLE_TYPE_GHOST; + CreateBattleStartTask(GetWildBattleTransition(), 0); + SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, gUnknown_841D148); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +static void DoTrainerBattle(void) +{ + CreateBattleStartTask(GetTrainerBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_TRAINER_BATTLES); +} + +void BattleSetup_StartOldManTutorialBattle(void) +{ + CreateMaleMon(&gEnemyParty[0], SPECIES_WEEDLE, 5); + ScriptContext2_Enable(); + gMain.savedCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; + gBattleTypeFlags = BATTLE_TYPE_OLDMAN_TUTORIAL; + CreateBattleStartTask(B_TRANSITION_SLICED_SCREEN, 0); +} + +void BattleSetup_StartScriptedWildBattle(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_PALACE; + CreateBattleStartTask(GetWildBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartMarowakBattle(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndMarowakBattle; + if (CheckBagHasItem(ITEM_SILPH_SCOPE, 1)) + { + gBattleTypeFlags = BATTLE_TYPE_GHOST | BATTLE_TYPE_LEGENDARY; + CreateMonWithGenderNatureLetter(gEnemyParty, SPECIES_MAROWAK, 30, 31, MON_FEMALE, NATURE_SERIOUS, 0); + } + else + { + gBattleTypeFlags = BATTLE_TYPE_GHOST; + } + CreateBattleStartTask(GetWildBattleTransition(), 0); + SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, gUnknown_841D148); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void sub_807F998(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; + CreateBattleStartTask(GetWildBattleTransition(), 0); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartLegendaryBattle(void) +{ + u16 species; + + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_ARENA; + species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES); + switch (species) + { + case SPECIES_MEWTWO: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_VS_MYU2); + break; + case SPECIES_DEOXYS: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_VS_DEO); + break; + case SPECIES_MOLTRES: + case SPECIES_ARTICUNO: + case SPECIES_ZAPDOS: + case SPECIES_HO_OH: + case SPECIES_LUGIA: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_VS_DEN); + break; + default: + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_BATTLE20); + break; + } + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void BattleSetup_StartIceCaveBattle(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON; + if (gGameVersion == VERSION_FIRE_RED) + CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_BATTLE20); + else // pointless, exactly the same + CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_BATTLE20); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +void sub_807FABC(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = CB2_EndScriptedWildBattle; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; + CreateBattleStartTask(B_TRANSITION_BLUR, MUS_BATTLE20); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); +} + +// not used +static void sub_807FAF8(void) +{ + LoadPlayerParty(); + CB2_EndWildBattle(); +} + +// not used +static void sub_807FB08(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_805C780(); + gMain.savedCallback = sub_807FAF8; + SavePlayerParty(); + InitPokedudePartyAndOpponent(); + CreateBattleStartTask(GetWildBattleTransition(), 0); +} + +static void CB2_EndWildBattle(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(CB2_ReturnToField); + gFieldCallback = sub_807E3EC; + } +} + +static void CB2_EndScriptedWildBattle(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + if (IsPlayerDefeated(gBattleOutcome) == TRUE) + SetMainCallback2(CB2_WhiteOut); + else + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +static void CB2_EndMarowakBattle(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + if (IsPlayerDefeated(gBattleOutcome)) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + if (gBattleOutcome == B_OUTCOME_WON) + gSpecialVar_Result = 0; + else + gSpecialVar_Result = 1; + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } +} + +u8 BattleSetup_GetTerrainId(void) +{ + u16 tileBehavior; + s16 x, y; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsTallGrass_2(tileBehavior)) + return BATTLE_TERRAIN_GRASS; + if (MetatileBehavior_IsLongGrass(tileBehavior)) + return BATTLE_TERRAIN_LONG_GRASS; + if (MetatileBehavior_IsSandOrDeepSand(tileBehavior)) + return BATTLE_TERRAIN_SAND; + switch (gMapHeader.mapType) + { + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + break; + case MAP_TYPE_UNDERGROUND: + if (MetatileBehavior_IsIndoorEncounter(tileBehavior)) + return BATTLE_TERRAIN_BUILDING; + if (MetatileBehavior_IsSurfable(tileBehavior)) + return BATTLE_TERRAIN_POND; + return BATTLE_TERRAIN_CAVE; + case MAP_TYPE_INDOOR: + case MAP_TYPE_SECRET_BASE: + return BATTLE_TERRAIN_BUILDING; + case MAP_TYPE_UNDERWATER: + return BATTLE_TERRAIN_UNDERWATER; + case MAP_TYPE_OCEAN_ROUTE: + if (MetatileBehavior_IsSurfable(tileBehavior)) + return BATTLE_TERRAIN_WATER; + return BATTLE_TERRAIN_PLAIN; + } + if (MetatileBehavior_IsDeepSemiDeepOrSplashingWater(tileBehavior)) + return BATTLE_TERRAIN_WATER; + if (MetatileBehavior_IsSurfable(tileBehavior)) + return BATTLE_TERRAIN_POND; + if (MetatileBehavior_IsMountain(tileBehavior)) + return BATTLE_TERRAIN_MOUNTAIN; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + if (MetatileBehavior_GetBridgeType(tileBehavior)) + return BATTLE_TERRAIN_POND; + if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) + return BATTLE_TERRAIN_WATER; + } + return BATTLE_TERRAIN_PLAIN; +} + +static u8 GetBattleTransitionTypeByMap(void) +{ + u16 tileBehavior; + s16 x, y; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (Overworld_GetFlashLevel()) + return B_TRANSITION_HORIZONTAL_CORRUGATE; + if (!MetatileBehavior_IsSurfable(tileBehavior)) + { + switch (gMapHeader.mapType) + { + case MAP_TYPE_UNDERGROUND: + return B_TRANSITION_DISTORTED_WAVE; + case MAP_TYPE_UNDERWATER: + return B_TRANSITION_BIG_POKEBALL; + default: + return B_TRANSITION_BLUR; + } + } + return B_TRANSITION_BIG_POKEBALL; +} + +static u16 GetSumOfPlayerPartyLevel(u8 numMons) +{ + u8 sum = 0; + s32 i; + + for (i = 0; i < PARTY_SIZE; ++i) + { + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + + if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0) + { + sum += GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + if (--numMons == 0) + break; + } + } + return sum; +} + +static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) +{ + u8 i; + u8 sum; + u32 count = numMons; + + if (gTrainers[opponentId].partySize < count) + count = gTrainers[opponentId].partySize; + sum = 0; + switch (gTrainers[opponentId].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *party; + + party = gTrainers[opponentId].party.NoItemDefaultMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *party; + + party = gTrainers[opponentId].party.NoItemCustomMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *party; + + party = gTrainers[opponentId].party.ItemDefaultMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *party; + + party = gTrainers[opponentId].party.ItemCustomMoves; + for (i = 0; i < count; ++i) + sum += party[i].lvl; + } + break; + } + return sum; +} + +static u8 GetWildBattleTransition(void) +{ + u8 transitionType = GetBattleTransitionTypeByMap(); + u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 playerLevel = GetSumOfPlayerPartyLevel(1); + + if (enemyLevel < playerLevel) + return sBattleTransitionTable_Wild[transitionType][0]; + else + return sBattleTransitionTable_Wild[transitionType][1]; +} + +static u8 GetTrainerBattleTransition(void) +{ + u8 minPartyCount; + u8 transitionType; + u8 enemyLevel; + u8 playerLevel; + + if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + return B_TRANSITION_BLUE; + if (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_ELITE_FOUR_2) + { + if (gTrainerBattleOpponent_A == 410 || gTrainerBattleOpponent_A == 735) // TODO: replace these with enums + return B_TRANSITION_LORELEI; + if (gTrainerBattleOpponent_A == 411 || gTrainerBattleOpponent_A == 736) + return B_TRANSITION_BRUNO; + if (gTrainerBattleOpponent_A == 412 || gTrainerBattleOpponent_A == 737) + return B_TRANSITION_AGATHA; + if (gTrainerBattleOpponent_A == 413 || gTrainerBattleOpponent_A == 738) + return B_TRANSITION_LANCE; + return B_TRANSITION_BLUE; + } + if (gTrainers[gTrainerBattleOpponent_A].trainerClass == CLASS_CHAMPION_2) + return B_TRANSITION_BLUE; + if (gTrainers[gTrainerBattleOpponent_A].doubleBattle == TRUE) + minPartyCount = 2; // double battles always at least have 2 pokemon. + else + minPartyCount = 1; + transitionType = GetBattleTransitionTypeByMap(); + enemyLevel = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent_A, minPartyCount); + playerLevel = GetSumOfPlayerPartyLevel(minPartyCount); + if (enemyLevel < playerLevel) + return sBattleTransitionTable_Trainer[transitionType][0]; + else + return sBattleTransitionTable_Trainer[transitionType][1]; +} + +u8 sub_8080060(void) +{ + u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + u8 playerLevel = GetSumOfPlayerPartyLevel(1); + + if (enemyLevel < playerLevel) + return 4; + else + return 3; +} + +static u32 TrainerBattleLoadArg32(const u8 *ptr) +{ + return T1_READ_32(ptr); +} + +static u16 TrainerBattleLoadArg16(const u8 *ptr) +{ + return T1_READ_16(ptr); +} + +static u8 TrainerBattleLoadArg8(const u8 *ptr) +{ + return T1_READ_8(ptr); +} + +static u16 GetTrainerAFlag(void) +{ + return FLAG_TRAINER_FLAG_START + gTrainerBattleOpponent_A; +} + +static bool32 IsPlayerDefeated(u32 battleOutcome) +{ + switch (battleOutcome) + { + case B_OUTCOME_LOST: + case B_OUTCOME_DREW: + return TRUE; + case B_OUTCOME_WON: + case B_OUTCOME_RAN: + case B_OUTCOME_PLAYER_TELEPORTED: + case B_OUTCOME_MON_FLED: + case B_OUTCOME_CAUGHT: + return FALSE; + default: + return FALSE; + } +} + +static void InitTrainerBattleVariables(void) +{ + sTrainerBattleMode = 0; + gTrainerBattleOpponent_A = 0; + sTrainerEventObjectLocalId = 0; + sTrainerAIntroSpeech = NULL; + sTrainerADefeatSpeech = NULL; + sTrainerVictorySpeech = NULL; + sTrainerCannotBattleSpeech = NULL; + sTrainerBattleEndScript = NULL; + sTrainerABattleScriptRetAddr = NULL; + gUnknown_20386CC = 0; +} + +static inline void SetU8(void *ptr, u8 value) +{ + *(u8 *)(ptr) = value; +} + +static inline void SetU16(void *ptr, u16 value) +{ + *(u16 *)(ptr) = value; +} + +static inline void SetU32(void *ptr, u32 value) +{ + *(u32 *)(ptr) = value; +} + +static inline void SetPtr(const void *ptr, const void *value) +{ + *(const void **)(ptr) = value; +} + +static void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data) +{ + while (1) + { + switch (specs->ptrType) + { + case TRAINER_PARAM_LOAD_VAL_8BIT: + SetU8(specs->varPtr, TrainerBattleLoadArg8(data)); + data += 1; + break; + case TRAINER_PARAM_LOAD_VAL_16BIT: + SetU16(specs->varPtr, TrainerBattleLoadArg16(data)); + data += 2; + break; + case TRAINER_PARAM_LOAD_VAL_32BIT: + SetU32(specs->varPtr, TrainerBattleLoadArg32(data)); + data += 4; + break; + case TRAINER_PARAM_CLEAR_VAL_8BIT: + SetU8(specs->varPtr, 0); + break; + case TRAINER_PARAM_CLEAR_VAL_16BIT: + SetU16(specs->varPtr, 0); + break; + case TRAINER_PARAM_CLEAR_VAL_32BIT: + SetU32(specs->varPtr, 0); + break; + case TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR: + SetPtr(specs->varPtr, data); + return; + } + ++specs; + } +} + +static void SetMapVarsToTrainer(void) +{ + if (sTrainerEventObjectLocalId != 0) + { + gSpecialVar_LastTalked = sTrainerEventObjectLocalId; + gSelectedEventObject = GetFieldObjectIdByLocalIdAndMap(sTrainerEventObjectLocalId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + } +} + +const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) +{ + InitTrainerBattleVariables(); + sTrainerBattleMode = TrainerBattleLoadArg8(data); + switch (sTrainerBattleMode) + { + case TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT: + TrainerBattleLoadArgs(sOrdinaryNoIntroBattleParams, data); + return EventScript_DoTrainerBattle; + case TRAINER_BATTLE_DOUBLE: + TrainerBattleLoadArgs(sDoubleBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoDoubleTrainerBattle; + case TRAINER_BATTLE_CONTINUE_SCRIPT: + case TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC: + TrainerBattleLoadArgs(sContinueScriptBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoNormalTrainerBattle; + case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE: + case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC: + TrainerBattleLoadArgs(sContinueScriptDoubleBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoDoubleTrainerBattle; + case TRAINER_BATTLE_REMATCH_DOUBLE: + sub_811231C(); + TrainerBattleLoadArgs(sDoubleBattleParams, data); + SetMapVarsToTrainer(); + gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); + return EventScript_TryDoDoubleRematchBattle; + case TRAINER_BATTLE_REMATCH: + sub_811231C(); + TrainerBattleLoadArgs(sOrdinaryBattleParams, data); + SetMapVarsToTrainer(); + gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); + return EventScript_TryDoRematchBattle; + case TRAINER_BATTLE_TUTORIAL: + TrainerBattleLoadArgs(sTutorialBattleParams, data); + return EventScript_DoTrainerBattle; + default: + TrainerBattleLoadArgs(sOrdinaryBattleParams, data); + SetMapVarsToTrainer(); + return EventScript_TryDoNormalTrainerBattle; + } +} + +void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerScript) +{ + gSelectedEventObject = trainerEventObjId; + gSpecialVar_LastTalked = gMapObjects[trainerEventObjId].localId; + BattleSetup_ConfigureTrainerBattle(trainerScript + 1); + ScriptContext1_SetupScript(gUnknown_81A4EB4); + ScriptContext2_Enable(); +} + +bool32 GetTrainerFlagFromScriptPointer(const u8 *data) +{ + u32 flag = TrainerBattleLoadArg16(data + 2); + + return FlagGet(FLAG_TRAINER_FLAG_START + flag); +} + +void SetUpTrainerMovement(void) +{ + struct MapObject *eventObject = &gMapObjects[gSelectedEventObject]; + + SetTrainerMovementType(eventObject, GetTrainerFacingDirectionMovementType(eventObject->facingDirection)); +} + +u8 GetTrainerBattleMode(void) +{ + return sTrainerBattleMode; +} + +u16 sub_80803D8(void) +{ + return gUnknown_20386CC; +} + +u16 GetTrainerFlag(void) +{ + return FlagGet(GetTrainerAFlag()); +} + +void SetBattledTrainerFlag(void) +{ + FlagSet(GetTrainerAFlag()); +} + +// not used +static void SetBattledTrainerFlag2(void) +{ + FlagSet(GetTrainerAFlag()); +} + +bool8 HasTrainerBeenFought(u16 trainerId) +{ + return FlagGet(FLAG_TRAINER_FLAG_START + trainerId); +} + +void SetTrainerFlag(u16 trainerId) +{ + FlagSet(FLAG_TRAINER_FLAG_START + trainerId); +} + +void ClearTrainerFlag(u16 trainerId) +{ + FlagClear(FLAG_TRAINER_FLAG_START + trainerId); +} + +void BattleSetup_StartTrainerBattle(void) +{ + gBattleTypeFlags = BATTLE_TYPE_TRAINER; + if (GetTrainerBattleMode() == TRAINER_BATTLE_TUTORIAL + && sub_80803D8() & 3) + gBattleTypeFlags |= BATTLE_TYPE_FIRST_BATTLE; + gMain.savedCallback = CB2_EndTrainerBattle; + DoTrainerBattle(); + ScriptContext1_Stop(); +} + +static void CB2_EndTrainerBattle(void) +{ + if (sTrainerBattleMode == TRAINER_BATTLE_TUTORIAL) + { + if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + gSpecialVar_Result = 1; + if (gUnknown_20386CC & 1) + { + sp000_heal_pokemon(); + } + else + { + SetMainCallback2(CB2_WhiteOut); + return; + } + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_81139BC(); + } + else + { + gSpecialVar_Result = 0; + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_81139BC(); + } + + } + else + { + if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } + else if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_81139BC(); + } + } +} + +static void CB2_EndRematchBattle(void) +{ + if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } + else if (IsPlayerDefeated(gBattleOutcome) == TRUE) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + SetBattledTrainerFlag(); + sub_810CDE8(); + sub_81138F8(); + } +} + +void BattleSetup_StartRematchBattle(void) +{ + gBattleTypeFlags = BATTLE_TYPE_TRAINER; + gMain.savedCallback = CB2_EndRematchBattle; + DoTrainerBattle(); + ScriptContext1_Stop(); +} + +void ShowTrainerIntroSpeech(void) +{ + ShowFieldMessage(GetIntroSpeechOfApproachingTrainer()); +} + +const u8 *BattleSetup_GetScriptAddrAfterBattle(void) +{ + if (sTrainerBattleEndScript != NULL) + return sTrainerBattleEndScript; + else + return EventScript_1C555B; +} + +const u8 *BattleSetup_GetTrainerPostBattleScript(void) +{ + if (sTrainerABattleScriptRetAddr != NULL) + return sTrainerABattleScriptRetAddr; + else + return EventScript_1C555B; +} + +void ShowTrainerCantBattleSpeech(void) +{ + ShowFieldMessage(GetTrainerCantBattleSpeech()); +} + +void SetUpTrainerEncounterMusic(void) +{ + u16 music; + + if ((u8)(gUnknown_203ADFA - 2) > 1 + && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC + && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC) + { + switch (GetTrainerEncounterMusicId(gTrainerBattleOpponent_A)) + { + case 1: // TODO: replace these with enums + case 2: + case 9: + music = MUS_SHOUJO; + break; + case 0: + case 4: + case 5: + case 8: + case 10: + case 11: + case 12: + case 13: + music = MUS_SHOUNEN; + break; + default: + music = MUS_ROCKET; + break; + } + PlayNewMapMusic(music); + } +} + +static const u8 *ReturnEmptyStringIfNull(const u8 *string) +{ + if (string == NULL) + return gString_Dummy; + else + return string; +} + +static const u8 *GetIntroSpeechOfApproachingTrainer(void) +{ + return ReturnEmptyStringIfNull(sTrainerAIntroSpeech); +} + +const u8 *GetTrainerALoseText(void) +{ + const u8 *string = sTrainerADefeatSpeech; + + StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(string)); + return gStringVar4; +} + +const u8 *GetTrainerWonSpeech(void) +{ + StringExpandPlaceholders(gStringVar4, ReturnEmptyStringIfNull(sTrainerVictorySpeech)); + return gStringVar4; +} + +static const u8 *GetTrainerCantBattleSpeech(void) +{ + return ReturnEmptyStringIfNull(sTrainerCannotBattleSpeech); +} diff --git a/src/battle_transition.c b/src/battle_transition.c index 19d76fed1..9570afdf7 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -27,7 +27,7 @@ struct TransitionData u16 winOut; u16 win0H; u16 win0V; - u16 unused_A; + u16 win1H; // not used u16 win1V; u16 bldCnt; u16 bldAlpha; diff --git a/src/berry.c b/src/berry.c index 91d83f40c..d349109d2 100644 --- a/src/berry.c +++ b/src/berry.c @@ -134,7 +134,7 @@ bool32 IsEnigmaBerryValid(void) return TRUE; } -const struct Berry * sub_809C8A0(u8 berryIdx) +const struct Berry * GetBerryInfo(u8 berryIdx) { if (berryIdx == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid()) return (struct Berry *)&gSaveBlock1Ptr->enigmaBerry.berry; @@ -163,7 +163,7 @@ u16 BerryTypeToItemId(u16 berryType) void GetBerryNameByBerryType(u8 berryType, u8 * dest) { - const struct Berry * berry = sub_809C8A0(berryType); + const struct Berry * berry = GetBerryInfo(berryType); memcpy(dest, berry->name, 6); dest[6] = EOS; } diff --git a/src/dark.c b/src/dark.c index cb34b991e..b6d13afe3 100644 --- a/src/dark.c +++ b/src/dark.c @@ -613,7 +613,7 @@ static void sub_80B82C0(u8 taskId) { case 0: task->data[5] += 8; - if (task->data[5] >= task->data[7]) + if (task->data[5] >= task->data[7]) task->data[5] = task->data[7]; sub_80B843C(task); if (task->data[5] == task->data[7]) diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h new file mode 100644 index 000000000..c2002bed7 --- /dev/null +++ b/src/data/text/abilities.h @@ -0,0 +1,242 @@ +static const u8 sNoneDescription[] = _("No special ability."); +static const u8 sStenchDescription[] = _("Helps repel wild POKéMON."); +static const u8 sDrizzleDescription[] = _("Summons rain in battle."); +static const u8 sSpeedBoostDescription[] = _("Gradually boosts SPEED."); +static const u8 sBattleArmorDescription[] = _("Blocks critical hits."); +static const u8 sSturdyDescription[] = _("Negates 1-hit KO attacks."); +static const u8 sDampDescription[] = _("Prevents self-destruction."); +static const u8 sLimberDescription[] = _("Prevents paralysis."); +static const u8 sSandVeilDescription[] = _("Ups evasion in a sandstorm."); +static const u8 sStaticDescription[] = _("Paralyzes on contact."); +static const u8 sVoltAbsorbDescription[] = _("Turns electricity into HP."); +static const u8 sWaterAbsorbDescription[] = _("Changes water into HP."); +static const u8 sObliviousDescription[] = _("Prevents attraction."); +static const u8 sCloudNineDescription[] = _("Negates weather effects."); +static const u8 sCompoundEyesDescription[] = _("Raises accuracy."); +static const u8 sInsomniaDescription[] = _("Prevents sleep."); +static const u8 sColorChangeDescription[] = _("Changes type to foe's move."); +static const u8 sImmunityDescription[] = _("Prevents poisoning."); +static const u8 sFlashFireDescription[] = _("Powers up if hit by fire."); +static const u8 sShieldDustDescription[] = _("Prevents added effects."); +static const u8 sOwnTempoDescription[] = _("Prevents confusion."); +static const u8 sSuctionCupsDescription[] = _("Firmly anchors the body."); +static const u8 sIntimidateDescription[] = _("Lowers the foe's ATTACK."); +static const u8 sShadowTagDescription[] = _("Prevents the foe's escape."); +static const u8 sRoughSkinDescription[] = _("Hurts to touch."); +static const u8 sWonderGuardDescription[] = _("“Super effective” hits."); +static const u8 sLevitateDescription[] = _("Not hit by GROUND attacks."); +static const u8 sEffectSporeDescription[] = _("Leaves spores on contact."); +static const u8 sSynchronizeDescription[] = _("Passes on status problems."); +static const u8 sClearBodyDescription[] = _("Prevents ability reduction."); +static const u8 sNaturalCureDescription[] = _("Heals upon switching out."); +static const u8 sLightningRodDescription[] = _("Draws electrical moves."); +static const u8 sSereneGraceDescription[] = _("Promotes added effects."); +static const u8 sSwiftSwimDescription[] = _("Raises SPEED in rain."); +static const u8 sChlorophyllDescription[] = _("Raises SPEED in sunshine."); +static const u8 sIlluminateDescription[] = _("Encounter rate increases."); +static const u8 sTraceDescription[] = _("Copies special ability."); +static const u8 sHugePowerDescription[] = _("Raises ATTACK."); +static const u8 sPoisonPointDescription[] = _("Poisons foe on contact."); +static const u8 sInnerFocusDescription[] = _("Prevents flinching."); +static const u8 sMagmaArmorDescription[] = _("Prevents freezing."); +static const u8 sWaterVeilDescription[] = _("Prevents burns."); +static const u8 sMagnetPullDescription[] = _("Traps STEEL-type POKéMON."); +static const u8 sSoundproofDescription[] = _("Avoids sound-based moves."); +static const u8 sRainDishDescription[] = _("Slight HP recovery in rain."); +static const u8 sSandStreamDescription[] = _("Summons a sandstorm."); +static const u8 sPressureDescription[] = _("Raises foe's PP usage."); +static const u8 sThickFatDescription[] = _("Heat-and-cold protection."); +static const u8 sEarlyBirdDescription[] = _("Awakens quickly from sleep."); +static const u8 sFlameBodyDescription[] = _("Burns the foe on contact."); +static const u8 sRunAwayDescription[] = _("Makes escaping easier."); +static const u8 sKeenEyeDescription[] = _("Prevents loss of accuracy."); +static const u8 sHyperCutterDescription[] = _("Prevents ATTACK reduction."); +static const u8 sPickupDescription[] = _("May pick up items."); +static const u8 sTruantDescription[] = _("Moves only every two turns."); +static const u8 sHustleDescription[] = _("Trades accuracy for power."); +static const u8 sCuteCharmDescription[] = _("Infatuates on contact."); +static const u8 sPlusDescription[] = _("Powers up with MINUS."); +static const u8 sMinusDescription[] = _("Powers up with PLUS."); +static const u8 sForecastDescription[] = _("Changes with the weather."); +static const u8 sStickyHoldDescription[] = _("Prevents item theft."); +static const u8 sShedSkinDescription[] = _("Heals the body by shedding."); +static const u8 sGutsDescription[] = _("Ups ATTACK if suffering."); +static const u8 sMarvelScaleDescription[] = _("Ups DEFENSE if suffering."); +static const u8 sLiquidOozeDescription[] = _("Draining causes injury."); +static const u8 sOvergrowDescription[] = _("Ups GRASS moves in a pinch."); +static const u8 sBlazeDescription[] = _("Ups FIRE moves in a pinch."); +static const u8 sTorrentDescription[] = _("Ups WATER moves in a pinch."); +static const u8 sSwarmDescription[] = _("Ups BUG moves in a pinch."); +static const u8 sRockHeadDescription[] = _("Prevents recoil damage."); +static const u8 sDroughtDescription[] = _("Summons sunlight in battle."); +static const u8 sArenaTrapDescription[] = _("Prevents fleeing."); +static const u8 sVitalSpiritDescription[] = _("Prevents sleep."); +static const u8 sWhiteSmokeDescription[] = _("Prevents ability reduction."); +static const u8 sPurePowerDescription[] = _("Raises ATTACK."); +static const u8 sShellArmorDescription[] = _("Blocks critical hits."); +static const u8 sCacophonyDescription[] = _("Avoids sound-based moves."); +static const u8 sAirLockDescription[] = _("Negates weather effects."); + +const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] = +{ + [ABILITY_NONE] = sNoneDescription, + [ABILITY_STENCH] = sStenchDescription, + [ABILITY_DRIZZLE] = sDrizzleDescription, + [ABILITY_SPEED_BOOST] = sSpeedBoostDescription, + [ABILITY_BATTLE_ARMOR] = sBattleArmorDescription, + [ABILITY_STURDY] = sSturdyDescription, + [ABILITY_DAMP] = sDampDescription, + [ABILITY_LIMBER] = sLimberDescription, + [ABILITY_SAND_VEIL] = sSandVeilDescription, + [ABILITY_STATIC] = sStaticDescription, + [ABILITY_VOLT_ABSORB] = sVoltAbsorbDescription, + [ABILITY_WATER_ABSORB] = sWaterAbsorbDescription, + [ABILITY_OBLIVIOUS] = sObliviousDescription, + [ABILITY_CLOUD_NINE] = sCloudNineDescription, + [ABILITY_COMPOUND_EYES] = sCompoundEyesDescription, + [ABILITY_INSOMNIA] = sInsomniaDescription, + [ABILITY_COLOR_CHANGE] = sColorChangeDescription, + [ABILITY_IMMUNITY] = sImmunityDescription, + [ABILITY_FLASH_FIRE] = sFlashFireDescription, + [ABILITY_SHIELD_DUST] = sShieldDustDescription, + [ABILITY_OWN_TEMPO] = sOwnTempoDescription, + [ABILITY_SUCTION_CUPS] = sSuctionCupsDescription, + [ABILITY_INTIMIDATE] = sIntimidateDescription, + [ABILITY_SHADOW_TAG] = sShadowTagDescription, + [ABILITY_ROUGH_SKIN] = sRoughSkinDescription, + [ABILITY_WONDER_GUARD] = sWonderGuardDescription, + [ABILITY_LEVITATE] = sLevitateDescription, + [ABILITY_EFFECT_SPORE] = sEffectSporeDescription, + [ABILITY_SYNCHRONIZE] = sSynchronizeDescription, + [ABILITY_CLEAR_BODY] = sClearBodyDescription, + [ABILITY_NATURAL_CURE] = sNaturalCureDescription, + [ABILITY_LIGHTNING_ROD] = sLightningRodDescription, + [ABILITY_SERENE_GRACE] = sSereneGraceDescription, + [ABILITY_SWIFT_SWIM] = sSwiftSwimDescription, + [ABILITY_CHLOROPHYLL] = sChlorophyllDescription, + [ABILITY_ILLUMINATE] = sIlluminateDescription, + [ABILITY_TRACE] = sTraceDescription, + [ABILITY_HUGE_POWER] = sHugePowerDescription, + [ABILITY_POISON_POINT] = sPoisonPointDescription, + [ABILITY_INNER_FOCUS] = sInnerFocusDescription, + [ABILITY_MAGMA_ARMOR] = sMagmaArmorDescription, + [ABILITY_WATER_VEIL] = sWaterVeilDescription, + [ABILITY_MAGNET_PULL] = sMagnetPullDescription, + [ABILITY_SOUNDPROOF] = sSoundproofDescription, + [ABILITY_RAIN_DISH] = sRainDishDescription, + [ABILITY_SAND_STREAM] = sSandStreamDescription, + [ABILITY_PRESSURE] = sPressureDescription, + [ABILITY_THICK_FAT] = sThickFatDescription, + [ABILITY_EARLY_BIRD] = sEarlyBirdDescription, + [ABILITY_FLAME_BODY] = sFlameBodyDescription, + [ABILITY_RUN_AWAY] = sRunAwayDescription, + [ABILITY_KEEN_EYE] = sKeenEyeDescription, + [ABILITY_HYPER_CUTTER] = sHyperCutterDescription, + [ABILITY_PICKUP] = sPickupDescription, + [ABILITY_TRUANT] = sTruantDescription, + [ABILITY_HUSTLE] = sHustleDescription, + [ABILITY_CUTE_CHARM] = sCuteCharmDescription, + [ABILITY_PLUS] = sPlusDescription, + [ABILITY_MINUS] = sMinusDescription, + [ABILITY_FORECAST] = sForecastDescription, + [ABILITY_STICKY_HOLD] = sStickyHoldDescription, + [ABILITY_SHED_SKIN] = sShedSkinDescription, + [ABILITY_GUTS] = sGutsDescription, + [ABILITY_MARVEL_SCALE] = sMarvelScaleDescription, + [ABILITY_LIQUID_OOZE] = sLiquidOozeDescription, + [ABILITY_OVERGROW] = sOvergrowDescription, + [ABILITY_BLAZE] = sBlazeDescription, + [ABILITY_TORRENT] = sTorrentDescription, + [ABILITY_SWARM] = sSwarmDescription, + [ABILITY_ROCK_HEAD] = sRockHeadDescription, + [ABILITY_DROUGHT] = sDroughtDescription, + [ABILITY_ARENA_TRAP] = sArenaTrapDescription, + [ABILITY_VITAL_SPIRIT] = sVitalSpiritDescription, + [ABILITY_WHITE_SMOKE] = sWhiteSmokeDescription, + [ABILITY_PURE_POWER] = sPurePowerDescription, + [ABILITY_SHELL_ARMOR] = sShellArmorDescription, + [ABILITY_CACOPHONY] = sCacophonyDescription, + [ABILITY_AIR_LOCK] = sAirLockDescription, +}; + +const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] = +{ + [ABILITY_NONE] = _("-------"), + [ABILITY_STENCH] = _("STENCH"), + [ABILITY_DRIZZLE] = _("DRIZZLE"), + [ABILITY_SPEED_BOOST] = _("SPEED BOOST"), + [ABILITY_BATTLE_ARMOR] = _("BATTLE ARMOR"), + [ABILITY_STURDY] = _("STURDY"), + [ABILITY_DAMP] = _("DAMP"), + [ABILITY_LIMBER] = _("LIMBER"), + [ABILITY_SAND_VEIL] = _("SAND VEIL"), + [ABILITY_STATIC] = _("STATIC"), + [ABILITY_VOLT_ABSORB] = _("VOLT ABSORB"), + [ABILITY_WATER_ABSORB] = _("WATER ABSORB"), + [ABILITY_OBLIVIOUS] = _("OBLIVIOUS"), + [ABILITY_CLOUD_NINE] = _("CLOUD NINE"), + [ABILITY_COMPOUND_EYES] = _("COMPOUNDEYES"), + [ABILITY_INSOMNIA] = _("INSOMNIA"), + [ABILITY_COLOR_CHANGE] = _("COLOR CHANGE"), + [ABILITY_IMMUNITY] = _("IMMUNITY"), + [ABILITY_FLASH_FIRE] = _("FLASH FIRE"), + [ABILITY_SHIELD_DUST] = _("SHIELD DUST"), + [ABILITY_OWN_TEMPO] = _("OWN TEMPO"), + [ABILITY_SUCTION_CUPS] = _("SUCTION CUPS"), + [ABILITY_INTIMIDATE] = _("INTIMIDATE"), + [ABILITY_SHADOW_TAG] = _("SHADOW TAG"), + [ABILITY_ROUGH_SKIN] = _("ROUGH SKIN"), + [ABILITY_WONDER_GUARD] = _("WONDER GUARD"), + [ABILITY_LEVITATE] = _("LEVITATE"), + [ABILITY_EFFECT_SPORE] = _("EFFECT SPORE"), + [ABILITY_SYNCHRONIZE] = _("SYNCHRONIZE"), + [ABILITY_CLEAR_BODY] = _("CLEAR BODY"), + [ABILITY_NATURAL_CURE] = _("NATURAL CURE"), + [ABILITY_LIGHTNING_ROD] = _("LIGHTNINGROD"), + [ABILITY_SERENE_GRACE] = _("SERENE GRACE"), + [ABILITY_SWIFT_SWIM] = _("SWIFT SWIM"), + [ABILITY_CHLOROPHYLL] = _("CHLOROPHYLL"), + [ABILITY_ILLUMINATE] = _("ILLUMINATE"), + [ABILITY_TRACE] = _("TRACE"), + [ABILITY_HUGE_POWER] = _("HUGE POWER"), + [ABILITY_POISON_POINT] = _("POISON POINT"), + [ABILITY_INNER_FOCUS] = _("INNER FOCUS"), + [ABILITY_MAGMA_ARMOR] = _("MAGMA ARMOR"), + [ABILITY_WATER_VEIL] = _("WATER VEIL"), + [ABILITY_MAGNET_PULL] = _("MAGNET PULL"), + [ABILITY_SOUNDPROOF] = _("SOUNDPROOF"), + [ABILITY_RAIN_DISH] = _("RAIN DISH"), + [ABILITY_SAND_STREAM] = _("SAND STREAM"), + [ABILITY_PRESSURE] = _("PRESSURE"), + [ABILITY_THICK_FAT] = _("THICK FAT"), + [ABILITY_EARLY_BIRD] = _("EARLY BIRD"), + [ABILITY_FLAME_BODY] = _("FLAME BODY"), + [ABILITY_RUN_AWAY] = _("RUN AWAY"), + [ABILITY_KEEN_EYE] = _("KEEN EYE"), + [ABILITY_HYPER_CUTTER] = _("HYPER CUTTER"), + [ABILITY_PICKUP] = _("PICKUP"), + [ABILITY_TRUANT] = _("TRUANT"), + [ABILITY_HUSTLE] = _("HUSTLE"), + [ABILITY_CUTE_CHARM] = _("CUTE CHARM"), + [ABILITY_PLUS] = _("PLUS"), + [ABILITY_MINUS] = _("MINUS"), + [ABILITY_FORECAST] = _("FORECAST"), + [ABILITY_STICKY_HOLD] = _("STICKY HOLD"), + [ABILITY_SHED_SKIN] = _("SHED SKIN"), + [ABILITY_GUTS] = _("GUTS"), + [ABILITY_MARVEL_SCALE] = _("MARVEL SCALE"), + [ABILITY_LIQUID_OOZE] = _("LIQUID OOZE"), + [ABILITY_OVERGROW] = _("OVERGROW"), + [ABILITY_BLAZE] = _("BLAZE"), + [ABILITY_TORRENT] = _("TORRENT"), + [ABILITY_SWARM] = _("SWARM"), + [ABILITY_ROCK_HEAD] = _("ROCK HEAD"), + [ABILITY_DROUGHT] = _("DROUGHT"), + [ABILITY_ARENA_TRAP] = _("ARENA TRAP"), + [ABILITY_VITAL_SPIRIT] = _("VITAL SPIRIT"), + [ABILITY_WHITE_SMOKE] = _("WHITE SMOKE"), + [ABILITY_PURE_POWER] = _("PURE POWER"), + [ABILITY_SHELL_ARMOR] = _("SHELL ARMOR"), + [ABILITY_CACOPHONY] = _("CACOPHONY"), + [ABILITY_AIR_LOCK] = _("AIR LOCK"), +}; diff --git a/src/fame_checker.c b/src/fame_checker.c index e803a9700..945b5ffe6 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -878,7 +878,7 @@ static void FC_DestroyWindow(u8 windowId) static u8 AdjustGiovanniIndexIfBeatenInGym(u8 a0) { - if (HasTrainerAlreadyBeenFought(0x15e) == TRUE) + if (HasTrainerBeenFought(0x15e) == TRUE) { if (a0 == 9) return FAMECHECKER_GIOVANNI; diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 6a539b60e..87e42bbb1 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -323,14 +323,14 @@ static void sub_807DFBC(u8 taskId) { case 0: // Never reached sub_807DCB0(0); - player_bitmagic(); + FreezeEventObjects(); PlayerGetDestCoords(x, y); FieldSetDoorOpened(*x, *y); task->data[0] = 1; break; case 5: sub_807DCB0(0); - player_bitmagic(); + FreezeEventObjects(); sub_807F114(); sub_807DBAC(); task->data[0] = 6; @@ -408,7 +408,7 @@ static void task_map_chg_seq_0807E20C(u8 taskId) { case 0: sub_807DCB0(0); - player_bitmagic(); + FreezeEventObjects(); PlayerGetDestCoords(x, y); task->data[0] = 1; break; @@ -439,7 +439,7 @@ static void task_map_chg_seq_0807E2CC(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - player_bitmagic(); + FreezeEventObjects(); ScriptContext2_Enable(); gTasks[taskId].data[0]++; break; @@ -459,7 +459,7 @@ static void sub_807E31C(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - player_bitmagic(); + FreezeEventObjects(); ScriptContext2_Enable(); sub_805DC04(); gTasks[taskId].data[0]++; @@ -689,7 +689,7 @@ static void sub_807E718(u8 taskId) switch (task->data[0]) { case 0: - player_bitmagic(); + FreezeEventObjects(); ScriptContext2_Enable(); task->data[0]++; break; @@ -711,7 +711,7 @@ static void sub_807E784(u8 taskId) switch (task->data[0]) { case 0: - player_bitmagic(); + FreezeEventObjects(); ScriptContext2_Enable(); PlaySE(SE_TK_WARPIN); sub_805DAB0(); @@ -744,7 +744,7 @@ static void sub_807E80C(u8 taskId) switch (task->data[0]) { case 0: - player_bitmagic(); + FreezeEventObjects(); PlayerGetDestCoords(xp, yp); PlaySE(GetDoorSoundEffect(*xp, *yp - 1)); task->data[1] = FieldAnimateDoorOpen(*xp, *yp - 1); @@ -798,7 +798,7 @@ static void sub_807E980(u8 taskId) { case 0: ScriptContext2_Enable(); - player_bitmagic(); + FreezeEventObjects(); CameraObjectReset2(); data[0]++; break; diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 56a607fff..90abda81f 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -16,6 +16,7 @@ #include "field_map_obj.h" #include "constants/songs.h" #include "constants/map_objects.h" +#include "constants/map_types.h" static void task08_080C9820(u8 taskId); static void sub_80C98FC(u8 taskId); diff --git a/src/ground.c b/src/ground.c index 4ae4d8370..97f42e5c5 100644 --- a/src/ground.c +++ b/src/ground.c @@ -416,8 +416,7 @@ static void sub_80B91B0(u8 taskId) task->data[12] = gBattle_BG1_X; else task->data[12] = gBattle_BG2_X; - - var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker); + var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker); task->data[14] = var0 - 32; task->data[15] = var0 + 32; ++task->data[0]; diff --git a/src/item.c b/src/item.c index e76cb10d3..f21b3b3d1 100644 --- a/src/item.c +++ b/src/item.c @@ -73,7 +73,7 @@ void CopyItemName(u16 itemId, u8 * dest) { if (itemId == ITEM_ENIGMA_BERRY) { - StringCopy(dest, sub_809C8A0(43)->name); + StringCopy(dest, GetBerryInfo(43)->name); StringAppend(dest, gUnknown_84162BD); } else diff --git a/src/item_use.c b/src/item_use.c index fd247acbb..2a2804510 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -42,6 +42,7 @@ #include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" +#include "constants/map_types.h" EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL; @@ -162,7 +163,7 @@ void sub_80A1184(void) bool8 sub_80A1194(void) { - player_bitmagic(); + FreezeEventObjects(); ScriptContext2_Enable(); sub_807DC00(); CreateTask(sub_80A11C0, 10); @@ -259,7 +260,7 @@ bool8 ItemUseCheckFunc_Rod(void) { if (MetatileBehavior_IsSurfable(behavior) && !MapGridIsImpassableAt(x, y)) return TRUE; - if (MetatileBehavior_ReturnFalse_6(behavior) == TRUE) + if (MetatileBehavior_IsBridge(behavior) == TRUE) return TRUE; } return FALSE; diff --git a/src/link.c b/src/link.c index c8c7932df..ac9cf9cfe 100644 --- a/src/link.c +++ b/src/link.c @@ -1025,7 +1025,7 @@ bool8 IsLinkTaskFinished(void) { if (gWirelessCommType == 1) { - return IsRfuTaskFinished(); + return IsLinkRfuTaskFinished(); } return gLinkCallback == NULL; } diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c index f89819647..e28872fd4 100644 --- a/src/map_obj_lock.c +++ b/src/map_obj_lock.c @@ -38,7 +38,7 @@ bool8 sub_8069590(void) void ScriptFreezeMapObjects(void) { - player_bitmagic(); + FreezeEventObjects(); CreateTask(sub_8069570, 80); } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 62a102a09..bca99d38f 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -69,7 +69,7 @@ bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior) +bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior) { if(metatileBehavior == MB_21 || metatileBehavior == MB_WATERFALL_BOTTOM) return TRUE; @@ -428,11 +428,11 @@ bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_ReturnFalse_3(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_6(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_7(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsBridge(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior) { @@ -450,7 +450,7 @@ bool8 MetatileBehavior_UnusedIsTallGrass(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB0B(u8 metatileBehavior) +bool8 MetatileBehavior_IsIndoorEncounter(u8 metatileBehavior) { if(metatileBehavior == MB_0B) return TRUE; @@ -458,7 +458,7 @@ bool8 MetatileBehavior_IsMB0B(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsMB0C(u8 metatileBehavior) +bool8 MetatileBehavior_IsMountain(u8 metatileBehavior) { if(metatileBehavior == MB_0C) return TRUE; diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index f76d70c04..13a6d37e2 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -1374,7 +1374,7 @@ void task00_mystery_gift(u8 taskId) } break; case 13: - if (IsRfuTaskFinished()) + if (IsLinkRfuTaskFinished()) { DestroyWirelessStatusIndicatorSprite(); data->state = 14; @@ -1650,7 +1650,7 @@ void task00_mystery_gift(u8 taskId) data->state = 34; break; case 34: - if (IsRfuTaskFinished()) + if (IsLinkRfuTaskFinished()) { DestroyWirelessStatusIndicatorSprite(); data->state = 35; diff --git a/src/pokemon.c b/src/pokemon.c index f9fe72007..aaa2b635a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1467,7 +1467,7 @@ const struct SpriteTemplate gUnknown_825DEF0[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gUnknown_8234698, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -1476,16 +1476,16 @@ const struct SpriteTemplate gUnknown_825DEF0[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F010, + .oam = &gOamData_824F010, .anims = NULL, .images = gUnknown_82346B8, .affineAnims = gSpriteAffineAnimTable_8234944, - .callback = oac_poke_opponent, + .callback = SpriteCB_WildMon, }, { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gUnknown_82346D8, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -1494,11 +1494,11 @@ const struct SpriteTemplate gUnknown_825DEF0[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F010, + .oam = &gOamData_824F010, .anims = NULL, .images = gUnknown_82346F8, .affineAnims = gSpriteAffineAnimTable_8234944, - .callback = oac_poke_opponent, + .callback = SpriteCB_WildMon, }, }; @@ -1507,7 +1507,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gTrainerBackPicTable_Red, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -1516,7 +1516,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gTrainerBackPicTable_Leaf, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -1525,7 +1525,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gTrainerBackPicTable_RSBrendan, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -1534,7 +1534,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gTrainerBackPicTable_RSMay, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -1543,7 +1543,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gTrainerBackPicTable_PokeDude, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -1552,7 +1552,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gUnknown_824F018, + .oam = &gOamData_824F018, .anims = NULL, .images = gTrainerBackPicTable_OldMan, .affineAnims = gSpriteAffineAnimTable_82348C8, @@ -4652,8 +4652,7 @@ bool8 PokemonUseItemEffects2(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo sp18 = itemEffect[r10]; r10++; break; - case 7:\ - + case 7: if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == FALSE && sp18 == 0) @@ -5406,7 +5405,7 @@ u16 GetMonEVCount(struct Pokemon *mon) return count; } -void sub_8043A68(void) +void RandomlyGivePartyPokerus(struct Pokemon *party) { u8 foo[4]; // huh? } @@ -5472,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/src/psychic.c b/src/psychic.c index 662320a2b..a8108c55a 100644 --- a/src/psychic.c +++ b/src/psychic.c @@ -47,7 +47,7 @@ const struct SpriteTemplate gUnknown_83E6DF8 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E6DF4, - .callback = sub_8075D9C, + .callback = AnimSpriteOnMonPos, }; const struct SpriteTemplate gUnknown_83E6E10 = @@ -376,7 +376,7 @@ const struct SpriteTemplate gUnknown_83E7148 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E7144, - .callback = sub_8075D9C, + .callback = AnimSpriteOnMonPos, }; static const union AffineAnimCmd gUnknown_83E7160[] = diff --git a/src/quest_log.c b/src/quest_log.c index 1c951867e..75c01defc 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -1513,7 +1513,7 @@ static void sub_8111F8C(u8 taskId) if (ScriptContext2_IsEnabled() != TRUE) { - player_bitmagic(); + FreezeEventObjects(); sub_805C270(); sub_805C780(); ScriptContext2_Enable(); @@ -1536,7 +1536,7 @@ static void sub_8111FCC(u8 taskId) task->data[0] = 0; task->data[1] = 0; task->func = sub_8112044; - player_bitmagic(); + FreezeEventObjects(); ScriptContext2_Enable(); } } diff --git a/src/quest_log_8150454.c b/src/quest_log_8150454.c index 3d61dee72..fbd3b4487 100644 --- a/src/quest_log_8150454.c +++ b/src/quest_log_8150454.c @@ -88,7 +88,7 @@ void sub_8150530(void) else { sub_81507BC(mapObject, sub_805C808(4)); - StartSpriteAnim(sprite, sub_80634F0(mapObject->mapobj_unk_18)); + StartSpriteAnim(sprite, sub_80634F0(mapObject->facingDirection)); } } @@ -103,7 +103,7 @@ void sub_81505C4(u8 taskId) FieldObjectClearAnimIfSpecialAnimActive(mapObject); mapObject->mapobj_bit_11 = TRUE; sub_81507BC(mapObject, sub_805C808(4)); - StartSpriteAnim(sprite, sub_80634F0(mapObject->mapobj_unk_18)); + StartSpriteAnim(sprite, sub_80634F0(mapObject->facingDirection)); gTasks[taskId].data[0]++; gTasks[taskId].data[1] = 0; break; diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c index 2687e4ea5..c7c7d1f53 100644 --- a/src/quest_log_battle.c +++ b/src/quest_log_battle.c @@ -141,7 +141,7 @@ void sub_812C224(void) } for (r3 = 0; r3 < 7; r3++) { - r5->v1[0][r3] = gLinkPlayers[gBattleStruct->field_B5 ^ 1].name[r3]; + r5->v1[0][r3] = gLinkPlayers[gBattleStruct->multiplayerId ^ 1].name[r3]; } } sub_8113550(r8, (const u16 *)r5); @@ -153,12 +153,12 @@ void sub_812C334(s32 * a0, s32 * a1) { s32 r5; s32 _optimized_out = 0; - u8 r2 = gLinkPlayers[gBattleStruct->field_B5].id ^ 2; + u8 r2 = gLinkPlayers[gBattleStruct->multiplayerId].id ^ 2; for (r5 = 0; r5 < 4; r5++) { if (r2 == gLinkPlayers[r5].id) a0[0] = r5; - else if (r5 != gBattleStruct->field_B5) + else if (r5 != gBattleStruct->multiplayerId) a1[_optimized_out++] = r5; } } diff --git a/src/scrcmd.c b/src/scrcmd.c index 7a70d09c7..b59f97420 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1916,7 +1916,7 @@ bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); - ctx->comparisonResult = HasTrainerAlreadyBeenFought(index); + ctx->comparisonResult = HasTrainerBeenFought(index); return FALSE; } diff --git a/src/start_menu.c b/src/start_menu.c index 442884c05..eb40072e6 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -392,7 +392,7 @@ void ShowStartMenu(void) { if (!IsUpdateLinkStateCBActive()) { - player_bitmagic(); + FreezeEventObjects(); sub_805C270(); sub_805C780(); } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c1d6dc6c8..e33cb9d2e 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1214,7 +1214,7 @@ static void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) case 1: if (BT_IsDone()) { - SetMainCallback2(sub_800FD9C); + SetMainCallback2(CB2_InitBattle); DestroyTask(taskId); } break; diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 5acac299f..cd796bf3a 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -940,7 +940,7 @@ static void sub_815E124(u8 taskId) { gMain.savedCallback = sub_815E114; CleanupOverworldWindowsAndTilemaps(); - SetMainCallback2(sub_800FD9C); + SetMainCallback2(CB2_InitBattle); DestroyTask(taskId); } } diff --git a/src/unk_8159F40.c b/src/unk_8159F40.c index f2cb1764f..ef21d19d0 100644 --- a/src/unk_8159F40.c +++ b/src/unk_8159F40.c @@ -177,7 +177,7 @@ void sub_815A008(struct QuestLog * questLog) questLog->unk_008[i].mapobj_bit_24 = gMapObjects[i].mapobj_bit_24; questLog->unk_008[i].mapobj_bit_25 = gMapObjects[i].mapobj_bit_25; questLog->unk_008[i].mapobj_bit_26 = gMapObjects[i].mapobj_bit_26; - questLog->unk_008[i].mapobj_unk_18 = gMapObjects[i].mapobj_unk_18; + questLog->unk_008[i].mapobj_unk_18 = gMapObjects[i].facingDirection; questLog->unk_008[i].mapobj_unk_0B_0 = gMapObjects[i].mapobj_unk_0B_0; questLog->unk_008[i].elevation = gMapObjects[i].elevation; questLog->unk_008[i].graphicsId = gMapObjects[i].graphicsId; @@ -222,7 +222,7 @@ void sub_815A1F8(const struct QuestLog * questLog, const struct MapObjectTemplat gMapObjects[i].mapobj_bit_24 = questLogMapObjects[i].mapobj_bit_24; gMapObjects[i].mapobj_bit_25 = questLogMapObjects[i].mapobj_bit_25; gMapObjects[i].mapobj_bit_26 = questLogMapObjects[i].mapobj_bit_26; - gMapObjects[i].mapobj_unk_18 = questLogMapObjects[i].mapobj_unk_18; + gMapObjects[i].facingDirection = questLogMapObjects[i].mapobj_unk_18; gMapObjects[i].mapobj_unk_0B_0 = questLogMapObjects[i].mapobj_unk_0B_0; gMapObjects[i].elevation = questLogMapObjects[i].elevation; gMapObjects[i].graphicsId = questLogMapObjects[i].graphicsId; diff --git a/src/vs_seeker.c b/src/vs_seeker.c index c0145e22d..8b916410a 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -628,7 +628,7 @@ void sub_810C444(void) mapObject = &gMapObjects[sp0]; if (sub_810CF04(sp0) == TRUE) { - npc_set_running_behaviour_etc(mapObject, r6); + SetTrainerMovementType(mapObject, r6); } templates[i].movementType = r6; } @@ -766,7 +766,7 @@ static void sub_810C594(void) { gSprites[mapObject->spriteId].pos2.x = 0; gSprites[mapObject->spriteId].pos2.y = 0; - npc_set_running_behaviour_etc(mapObject, r3); + SetTrainerMovementType(mapObject, r3); } } } @@ -931,7 +931,7 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[vsSeekerIdx]) == 1) { r8 = sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx; - if (!HasTrainerAlreadyBeenFought(r8)) + if (!HasTrainerBeenFought(r8)) { StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], gUnknown_8453F60); sVsSeeker->trainerHasNotYetBeenFought = 1; @@ -1027,7 +1027,7 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0) "\tadds r0, r5\n" "\tldrh r0, [r0, 0x4]\n" "\tmov r8, r0\n" - "\tbl HasTrainerAlreadyBeenFought\n" + "\tbl HasTrainerBeenFought\n" "\tlsls r0, 24\n" "\tcmp r0, 0\n" "\tbne _0810CA20\n" @@ -1239,10 +1239,10 @@ void sub_810CB90(void) TryGetFieldObjectIdByLocalIdAndMap(r4[r8].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &sp0); r4_2 = &gMapObjects[sp0]; sub_810CF54(&r4[r8]); // You are using this function incorrectly. Please consult the manual. - sub_805FE7C(r4_2, gUnknown_8453F67[r4_2->mapobj_unk_18]); + sub_805FE7C(r4_2, gUnknown_8453F67[r4_2->facingDirection]); gSaveBlock1Ptr->trainerRematches[r4[r8].localId] = 0; if (gSelectedEventObject == sp0) - r4_2->animPattern = gUnknown_8453F67[r4_2->mapobj_unk_18]; + r4_2->animPattern = gUnknown_8453F67[r4_2->facingDirection]; else r4_2->animPattern = 0x08; } @@ -1319,7 +1319,7 @@ static bool8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *vsSeekerData if (rematchIdx == -1) return FALSE; - if (!HasTrainerAlreadyBeenFought(vsSeekerData[rematchIdx].trainerIdxs[0])) + if (!HasTrainerBeenFought(vsSeekerData[rematchIdx].trainerIdxs[0])) return FALSE; return TRUE; } @@ -1327,7 +1327,7 @@ static bool8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *vsSeekerData void sub_810CDE8(void) { gSaveBlock1Ptr->trainerRematches[gSpecialVar_LastTalked] = 0; - sub_80803FC(); + SetBattledTrainerFlag(); } static s32 sub_810CE10(const VsSeekerData * a0, u16 a1) @@ -1353,7 +1353,7 @@ static s32 sub_810CE10(const VsSeekerData * a0, u16 a1) return -1; } -s32 sub_810CE64(u16 a0) +s32 GetRematchTrainerId(u16 a0) { u8 i; u8 j; @@ -1529,7 +1529,7 @@ static u8 GetNextAvailableRematchTrainer(const VsSeekerData * vsSeekerData, u16 return j - 1; if (vsSeekerData[i].trainerIdxs[j] == 0xffff) continue; - if (HasTrainerAlreadyBeenFought(vsSeekerData[i].trainerIdxs[j])) + if (HasTrainerBeenFought(vsSeekerData[i].trainerIdxs[j])) continue; return j; } @@ -1550,7 +1550,7 @@ static u8 GetRematchableTrainerLocalId(void) { if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[i]) == 1) { - if (HasTrainerAlreadyBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[i].trainerIdx, &idx)) + if (HasTrainerBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[i].trainerIdx, &idx)) return sVsSeeker->trainerInfo[i].localId; } } @@ -1599,7 +1599,7 @@ static void StartAllRespondantIdleMovements(void) struct MapObject *r4 = &gMapObjects[sVsSeeker->trainerInfo[j].fieldObjectId]; if (sub_810CF04(sVsSeeker->trainerInfo[j].fieldObjectId) == 1) - npc_set_running_behaviour_etc(r4, sVsSeeker->runningBehaviourEtcArray[i]); + SetTrainerMovementType(r4, sVsSeeker->runningBehaviourEtcArray[i]); sub_805FE7C(r4, sVsSeeker->runningBehaviourEtcArray[i]); gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[j].localId] = GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[j].trainerIdx, &dummy); } diff --git a/sym_common.txt b/sym_common.txt index 7e3d83488..b7d33ab71 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -5,35 +5,8 @@ .include "text.o" .include "sprite.o" .include "link.o" - .align 4 -gPreBattleCallback1: @ 3004F80 - .space 0x4 - -gBattleMainFunc: @ 3004F84 - .space 0xC - -gBattleResults: @ 3004F90 - .space 0x44 - -gLeveledUpInBattle: @ 3004FD4 - .space 0xC - -gBattlerControllerFuncs: @ 3004FE0 - .space 0x10 - -gHealthboxSpriteIds: @ 3004FF0 - .space 0x4 - -gMultiUsePlayerCursor: @ 3004FF4 - .space 0x4 - -gNumberOfMovesToChoose: @ 3004FF8 - .space 0x4 - -gUnknown_3004FFC: @ 3004FFC - .space 0x4 - + .include "battle_main.o" .include "random.o" .include "load_save.o" @@ -126,7 +99,7 @@ gUnknown_3005360: @ 3005360 gUnknown_3005378: @ 3005378 .space 0x4 -gUnknown_300537C: @ 300537C +gCB2_AfterEvolution: @ 300537C .space 0x4 .include "save.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 85ff1bdb2..1d2a08ef8 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -19,357 +19,7 @@ @ .include "src/link_rfu.o" .include "src/battle_controllers.o" - -gBattle_BG0_X: @ 2022974 - .space 0x2 - -gBattle_BG0_Y: @ 2022976 - .space 0x2 - -gBattle_BG1_X: @ 2022978 - .space 0x2 - -gBattle_BG1_Y: @ 202297A - .space 0x2 - -gBattle_BG2_X: @ 202297C - .space 0x2 - -gBattle_BG2_Y: @ 202297E - .space 0x2 - -gBattle_BG3_X: @ 2022980 - .space 0x2 - -gBattle_BG3_Y: @ 2022982 - .space 0x2 - -gBattle_WIN0H: @ 2022984 - .space 0x2 - -gBattle_WIN0V: @ 2022986 - .space 0x2 - -gUnknown_2022988: @ 2022988 - .space 0x2 - -gUnknown_202298A: @ 202298A - .space 0x2 - -gDisplayedStringBattle: @ 202298C - .space 0x12C - -gBattleTextBuff1: @ 2022AB8 - .space 0x10 - -gBattleTextBuff2: @ 2022AC8 - .space 0x10 - -gBattleTextBuff3: @ 2022AD8 - .space 0x10 - -gUnknown_2022AE8: @ 2022AE8 - .space 0x64 - -gBattleTypeFlags: @ 2022B4C - .space 0x4 - -gBattleTerrain: @ 2022B50 - .space 0x4 - -gUnknown_2022B54: @ 2022B54 - .space 0x4 - -gUnknown_2022B58: @ 2022B58 - .space 0x60 - -gUnknown_2022BB8: @ 2022BB8 - .space 0x4 - -gUnknown_2022BBC: @ 2022BBC - .space 0x4 - -gUnknown_2022BC0: @ 2022BC0 - .space 0x4 - -gBattleBufferA: @ 2022BC4 - .space 0x2 - -gUnknown_2022BC6: @ 2022BC6 - .space 0x1 - -gUnknown_2022BC7: @ 2022BC7 - .space 0x1 - -gUnknown_2022BC8: @ 2022BC8 - .space 0x7FC - -gBattleBufferB: @ 20233C4 - .space 0x4 - -gUnknown_20233C8: @ 20233C8 - .space 0x7FC - -gActiveBattler: @ 2023BC4 - .space 0x4 - -gBattleControllerExecFlags: @ 2023BC8 - .space 0x4 - -gBattlersCount: @ 2023BCC - .space 0x2 - -gBattlerPartyIndexes: @ 2023BCE - .space 0x8 - -gBattlerPositions: @ 2023BD6 - .space 0x4 - -gActionsByTurnOrder: @ 2023BDA - .space 0x4 - -gBattlerByTurnOrder: @ 2023BDE - .space 0x4 - -gCurrentTurnActionNumber: @ 2023BE2 - .space 0x1 - -gCurrentActionFuncId: @ 2023BE3 - .space 0x1 - -gBattleMons: @ 2023BE4 - .space 0xC - -gUnknown_2023BF0: @ 2023BF0 - .space 0xC - -gUnknown_2023BFC: @ 2023BFC - .space 0xC - -gUnknown_2023C08: @ 2023C08 - .space 0x4 - -gUnknown_2023C0C: @ 2023C0C - .space 0x24 - -gUnknown_2023C30: @ 2023C30 - .space 0x4 - -gUnknown_2023C34: @ 2023C34 - .space 0x110 - -gBattlerSpriteIds: @ 2023D44 - .space 0x4 - -gCurrMovePos: @ 2023D48 - .space 0x1 - -gChosenMovePos: @ 2023D49 - .space 0x1 - -gCurrentMove: @ 2023D4A - .space 0x2 - -gChosenMove: @ 2023D4C - .space 0x2 - -gCalledMove: @ 2023D4E - .space 0x2 - -gBattleMoveDamage: @ 2023D50 - .space 0x4 - -gHpDealt: @ 2023D54 - .space 0x4 - -gTakenDmg: @ 2023D58 - .space 0x10 - -gLastUsedItem: @ 2023D68 - .space 0x2 - -gLastUsedAbility: @ 2023D6A - .space 0x1 - -gBattlerAttacker: @ 2023D6B - .space 0x1 - -gBattlerTarget: @ 2023D6C - .space 0x1 - -gBattlerFainted: @ 2023D6D - .space 0x1 - -gEffectBattler: @ 2023D6E - .space 0x1 - -gPotentialItemEffectBattler: @ 2023D6F - .space 0x1 - -gAbsentBattlerFlags: @ 2023D70 - .space 0x1 - -gCritMultiplier: @ 2023D71 - .space 0x1 - -gMultiHitCounter: @ 2023D72 - .space 0x2 - -gBattlescriptCurrInstr: @ 2023D74 - .space 0x8 - -gChosenActionByBattler: @ 2023D7C - .space 0x4 - -gSelectionBattleScripts: @ 2023D80 - .space 0x10 - -gLastPrintedMoves: @ 2023D90 - .space 0x8 - -gLastMoves: @ 2023D98 - .space 0x8 - -gLastLandedMoves: @ 2023DA0 - .space 0x8 - -gLastHitByType: @ 2023DA8 - .space 0x8 - -gLastResultingMoves: @ 2023DB0 - .space 0x8 - -gLockedMoves: @ 2023DB8 - .space 0x8 - -gLastHitBy: @ 2023DC0 - .space 0x4 - -gChosenMoveByBattler: @ 2023DC4 - .space 0x8 - -gMoveResultFlags: @ 2023DCC - .space 0x4 - -gHitMarker: @ 2023DD0 - .space 0x4 - -gUnknown_2023DD4: @ 2023DD4 - .space 0x4 - -gTakenDmgByBattler: @ 2023DD8 - .space 0x4 - -gUnknown_2023DDC: @ 2023DDC - .space 0x2 - -gSideStatuses: @ 2023DDE - .space 0x6 - -gSideTimers: @ 2023DE4 - .space 0x18 - -gStatuses3: @ 2023DFC - .space 0x10 - -gDisableStructs: @ 2023E0C - .space 0x70 - -gPauseCounterBattle: @ 2023E7C - .space 0x2 - -gPaydayMoney: @ 2023E7E - .space 0x2 - -gUnknown_2023E80: @ 2023E80 - .space 0x2 - -gBattleCommunication: @ 2023E82 - .space 0x1 - -gUnknown_2023E83: @ 2023E83 - .space 0x7 - -gBattleOutcome: @ 2023E8A - .space 0x2 - -gProtectStructs: @ 2023E8C - .space 0x40 - -gSpecialStatuses: @ 2023ECC - .space 0x50 - -gBattleWeather: @ 2023F1C - .space 0x4 - -gWishFutureKnock: @ 2023F20 - .space 0x2C - -gIntroSlideFlags: @ 2023F4C - .space 0x2 - -gSentPokesToOpponent: @ 2023F4E - .space 0x2 - -gDynamicBasePower: @ 2023F50 - .space 0x2 - -gExpShareExp: @ 2023F52 - .space 0x2 - -gEnigmaBerries: @ 2023F54 - .space 0x70 - -gBattleScripting: @ 2023FC4 - .space 0x4 - -gUnknown_2023FC8: @ 2023FC8 - .space 0x20 - -gBattleStruct: @ 2023FE8 - .space 0x4 - -gLinkBattleSendBuffer: @ 2023FEC - .space 0x4 - -gLinkBattleRecvBuffer: @ 2023FF0 - .space 0x4 - -gBattleResources: @ 2023FF4 - .space 0x4 - -gActionSelectionCursor: @ 2023FF8 - .space 0x4 - -gMoveSelectionCursor: @ 2023FFC - .space 0x4 - -gBattlerStatusSummaryTaskId: @ 2024000 - .space 0x4 - -gBattlerInMenuId: @ 2024004 - .space 0x1 - -gDoingBattleAnim: @ 2024005 - .space 0x3 - -gTransformedPersonalities: @ 2024008 - .space 0x10 - -gBattleSpritesDataPtr: @ 2024018 - .space 0x4 - -gMonSpritesGfxPtr: @ 202401C - .space 0x4 - -gBattleMovePower: @ 2024020 - .space 0x2 - -gMoveToLearn: @ 2024022 - .space 0x2 - -gBattleMonForms: @ 2024024 - .space 0x4 + .include "src/battle_main.o" sLearningMoveTableID: @ 2024028 .space 0x1 @@ -616,35 +266,8 @@ gUnknown_20386A4: @ 20386A4 gUnknown_20386A8: @ 20386A8 .space 0x4 -gUnknown_20386AC: @ 20386AC - .space 0x2 - -gTrainerBattleOpponent_A: @ 20386AE - .space 0x2 - -gUnknown_20386B0: @ 20386B0 - .space 0x4 - -gUnknown_20386B4: @ 20386B4 - .space 0x4 - -gUnknown_20386B8: @ 20386B8 - .space 0x4 - -gUnknown_20386BC: @ 20386BC - .space 0x4 - -gUnknown_20386C0: @ 20386C0 - .space 0x4 - -gUnknown_20386C4: @ 20386C4 - .space 0x4 - -gUnknown_20386C8: @ 20386C8 - .space 0x4 - -gUnknown_20386CC: @ 20386CC - .space 0x4 + .include "src/battle_setup.o" + .align 2 gUnknown_20386D0: @ 20386D0 .space 0xC |