diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-10-17 12:26:01 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-10-17 12:26:01 +0800 |
commit | 1862f70466d6047d1585fe2487de5aa4fa1e8324 (patch) | |
tree | 10a8695853bf02bc692db3f3d3840f8c818aba7d | |
parent | f03807931fa6451c446dc931cd755c697f7177a4 (diff) |
thru BattleIntroDrawTrainersOrMonsSprites
-rw-r--r-- | asm/battle_2.s | 3017 | ||||
-rw-r--r-- | include/battle_anim.h | 5 | ||||
-rw-r--r-- | include/battle_bg.h | 4 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | src/battle_main.c | 810 | ||||
-rw-r--r-- | src/battle_script_commands.c | 2 |
6 files changed, 818 insertions, 3021 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s index 39af417fa..0a734e412 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -5,3023 +5,6 @@ .text - 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 @ =gBattleBgTemplates - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 30 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011C90: .4byte gBattleBgTemplates -_08011C94: - ldr r0, _08011CA4 @ =gBattleBgTemplates - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 28 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011CA4: .4byte gBattleBgTemplates -_08011CA8: - ldr r0, _08011CB8 @ =gBattleBgTemplates - lsls r1, r2, 2 - adds r1, r0 - ldrh r0, [r1] - lsls r0, 23 - lsrs r0, 27 - b _08011D04 - .align 2, 0 -_08011CB8: .4byte gBattleBgTemplates -_08011CBC: - ldr r0, _08011CCC @ =gBattleBgTemplates - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - lsls r0, 29 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011CCC: .4byte gBattleBgTemplates -_08011CD0: - ldr r0, _08011CE0 @ =gBattleBgTemplates - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - lsls r0, 28 - lsrs r0, 31 - b _08011D04 - .align 2, 0 -_08011CE0: .4byte gBattleBgTemplates -_08011CE4: - ldr r0, _08011CF4 @ =gBattleBgTemplates - lsls r1, r2, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - lsls r0, 26 - lsrs r0, 30 - b _08011D04 - .align 2, 0 -_08011CF4: .4byte gBattleBgTemplates -_08011CF8: - ldr r0, _08011D08 @ =gBattleBgTemplates - 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 gBattleBgTemplates - thumb_func_end sub_8011C44 - - thumb_func_start TryCorrectShedinjaLanguage -TryCorrectShedinjaLanguage: @ 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 @ =sText_ShedinjaJpnName - 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 sText_ShedinjaJpnName - thumb_func_end TryCorrectShedinjaLanguage - - thumb_func_start SpriteCB_WildMon -SpriteCB_WildMon: @ 8011D64 - push {lr} - sub sp, 0x4 - ldr r1, _08011D8C @ =SpriteCB_MoveWildMonToRight - 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 SpriteCB_MoveWildMonToRight -_08011D90: .4byte 0x00002108 - thumb_func_end SpriteCB_WildMon - - thumb_func_start SpriteCB_MoveWildMonToRight -SpriteCB_MoveWildMonToRight: @ 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 @ =SpriteCB_WildMonShowHealthbox - 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 SpriteCB_WildMonShowHealthbox - thumb_func_end SpriteCB_MoveWildMonToRight - - thumb_func_start SpriteCB_WildMonShowHealthbox -SpriteCB_WildMonShowHealthbox: @ 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 @ =SpriteCallbackDummy2 - 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 SpriteCallbackDummy2 -_08011E20: .4byte 0x00002108 - thumb_func_end SpriteCB_WildMonShowHealthbox - - thumb_func_start SpriteCallbackDummy2 -SpriteCallbackDummy2: @ 8011E24 - bx lr - thumb_func_end SpriteCallbackDummy2 - - 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 @ =SpriteCallbackDummy2 - str r0, [r3, 0x1C] - ldr r0, _08011E9C @ =gUnknown_2022AE8 - str r2, [r0] -_08011E90: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011E98: .4byte SpriteCallbackDummy2 -_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 @ =SpriteCB_AnimFaintOpponent - 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 SpriteCB_AnimFaintOpponent - thumb_func_end SpriteCB_FaintOpponentMon - - thumb_func_start SpriteCB_AnimFaintOpponent -SpriteCB_AnimFaintOpponent: @ 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 SpriteCB_AnimFaintOpponent - - 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 @ =SpriteCallbackDummy2 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080120C0: .4byte SpriteCallbackDummy2 - 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 @ =SpriteCallbackDummy3 - str r0, [r2, 0x1C] - strh r1, [r2, 0x30] -_080120F4: - pop {r0} - bx r0 - .align 2, 0 -_080120F8: .4byte gIntroSlideFlags -_080120FC: .4byte SpriteCallbackDummy3 - thumb_func_end oac_poke_ally_ - - thumb_func_start sub_8012100 -sub_8012100: @ 8012100 - ldr r1, _08012108 @ =SpriteCallbackDummy3 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_08012108: .4byte SpriteCallbackDummy3 - thumb_func_end sub_8012100 - - thumb_func_start SpriteCallbackDummy3 -SpriteCallbackDummy3: @ 801210C - bx lr - thumb_func_end SpriteCallbackDummy3 - - 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_BounceEffect - 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_BounceEffect -_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_BounceEffect -SpriteCB_BounceEffect: @ 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_BounceEffect - - 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 @ =SpriteCallbackDummy3 - str r0, [r4, 0x1C] -_080123B2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080123B8: .4byte SpriteCallbackDummy3 - 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 BattleStartClearSetData - 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 BattleMainCB1 -BattleMainCB1: @ 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 BattleMainCB1 - - thumb_func_start BattleStartClearSetData -BattleStartClearSetData: @ 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 BattleStartClearSetData - - 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 @ =BattleIntroDrawTrainersOrMonsSprites - 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 BattleIntroDrawTrainersOrMonsSprites -_0801306C: .4byte gBattleCommunication - thumb_func_end BattleIntroPrepareBackgroundSlide - - thumb_func_start BattleIntroDrawTrainersOrMonsSprites -BattleIntroDrawTrainersOrMonsSprites: @ 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 BattleIntroDrawTrainersOrMonsSprites - thumb_func_start BattleIntroDrawPartySummaryScreens BattleIntroDrawPartySummaryScreens: @ 801333C push {r4-r7,lr} diff --git a/include/battle_anim.h b/include/battle_anim.h index feaa8816b..aa3b73cea 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); diff --git a/include/battle_bg.h b/include/battle_bg.h index 9449e3f73..a467f34c8 100644 --- a/include/battle_bg.h +++ b/include/battle_bg.h @@ -1,6 +1,10 @@ #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); diff --git a/include/quest_log.h b/include/quest_log.h index d3ccbe3da..3d9dfb86d 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -40,6 +40,7 @@ void sub_8112450(void); void sub_8112364(void); u8 sub_8112CAC(void); void sub_81138F8(void); +void sub_812C224(void); extern u8 gUnknown_203ADFA; diff --git a/src/battle_main.c b/src/battle_main.c index ebf775d7f..02e80919b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -19,6 +19,7 @@ #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" @@ -29,10 +30,10 @@ #include "m4a.h" #include "palette.h" #include "party_menu.h" -#include "help_system.h" #include "pokeball.h" #include "pokedex.h" #include "pokemon.h" +#include "quest_log.h" #include "random.h" #include "roamer.h" #include "safari_zone.h" @@ -52,6 +53,7 @@ #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" @@ -88,8 +90,27 @@ void CB2_QuitPokeDudeBattle(void); void sub_80111FC(struct Sprite *sprite); void sub_8011B94(void); void sub_8011BB0(void); +void SpriteCB_MoveWildMonToRight(struct Sprite *sprite); +void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite); +void SpriteCallbackDummy2(struct Sprite *sprite); +void sub_8011E3C(struct Sprite *sprite); +void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); +void sub_8012060(struct Sprite *sprite); +void oac_poke_ally_(struct Sprite *sprite); +void SpriteCallbackDummy3(struct Sprite *sprite); +void SpriteCB_BounceEffect(struct Sprite *sprite); +void sub_8012398(struct Sprite *sprite); +void BattleStartClearSetData(void); +void BattleIntroGetMonsData(void); +void TurnValuesCleanUp(bool8 var0); +void SpecialStatusesClear(void); +void BattleIntroPrepareBackgroundSlide(void); +void BattleIntroDrawTrainersOrMonsSprites(void); +void BattleIntroDrawPartySummaryScreens(void); // TODO: put ewram variables here after resolving symbol ref in between +extern u32 gUnknown_2022AE8[25]; +extern u8 gUnknown_2023DD4[MAX_BATTLERS_COUNT]; void (*gPreBattleCallback1)(void); void (*gBattleMainFunc)(void); @@ -1608,7 +1629,6 @@ void sub_8011A1C(void) gBattle_WIN0H = WIN_RANGE(0, 0xF0); gBattle_WIN0V = WIN_RANGE(0x50, 0x51); ScanlineEffect_Clear(); - for (i = 0; i < 80; ++i) { gScanlineEffectRegBuffers[0][i] = 0xF0; @@ -1656,3 +1676,789 @@ void sub_8011B94(void) UpdatePaletteFade(); RunTasks(); } + +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; +} + +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)); +} + +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); + } + } +} + +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 +void sub_8011E28(struct Sprite *sprite) +{ + sprite->data[3] = 6; + sprite->data[4] = 1; + sprite->callback = sub_8011E3C; +} + +// not used +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; +} + +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; +} + +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_; +} + +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; +} + +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; +} + +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]; +} + +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; +} + +void BattleMainCB1(void) +{ + gBattleMainFunc(); + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + gBattlerControllerFuncs[gActiveBattler](); +} + +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; +} + +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; + } +} + +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; + } +} + +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; + } +} diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ecc8e3d36..46120085a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -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 |