summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-10-17 12:26:01 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-10-17 12:26:01 +0800
commit1862f70466d6047d1585fe2487de5aa4fa1e8324 (patch)
tree10a8695853bf02bc692db3f3d3840f8c818aba7d
parentf03807931fa6451c446dc931cd755c697f7177a4 (diff)
thru BattleIntroDrawTrainersOrMonsSprites
-rw-r--r--asm/battle_2.s3017
-rw-r--r--include/battle_anim.h5
-rw-r--r--include/battle_bg.h4
-rw-r--r--include/quest_log.h1
-rw-r--r--src/battle_main.c810
-rw-r--r--src/battle_script_commands.c2
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