summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm-de/battle_message.s2342
-rw-r--r--asm/battle_2.s10
-rw-r--r--asm/battle_3.s12017
-rw-r--r--asm/battle_anim_807B69C.s960
-rw-r--r--asm/battle_message.s2403
-rw-r--r--asm/egg_hatch.s1630
-rw-r--r--asm/hall_of_fame.s3402
-rw-r--r--asm/intro_credits_graphics.s1166
-rw-r--r--common_syms/egg_hatch.txt1
-rw-r--r--data/battle_anim_807B69C.s23
-rw-r--r--data/battle_scripts_1.s180
-rw-r--r--data/data2a.s2
-rw-r--r--data/data2b.s8
-rw-r--r--data/egg_hatch.s122
-rw-r--r--data/hall_of_fame.s230
-rw-r--r--data/intro_credits_graphics.s4
-rw-r--r--include/battle.h199
-rw-r--r--include/battle_message.h5
-rw-r--r--include/data2.h2
-rw-r--r--include/decompress.h2
-rw-r--r--include/intro_credits_graphics.h17
-rw-r--r--include/item_menu.h11
-rw-r--r--include/pokemon.h2
-rw-r--r--include/sprite.h16
-rw-r--r--ld_script.txt18
-rw-r--r--src/battle_3.c6595
-rw-r--r--src/battle_4.c89
-rw-r--r--src/battle_ai.c2
-rw-r--r--src/battle_anim_807B69C.c353
-rw-r--r--src/battle_message.c974
-rw-r--r--src/berry_tag_screen.c243
-rw-r--r--src/choose_party.c96
-rw-r--r--src/egg_hatch.c814
-rw-r--r--src/hall_of_fame.c1413
-rwxr-xr-xsrc/intro_credits_graphics.c532
-rw-r--r--src/item_menu.c8
-rw-r--r--src/pokemon_3.c2
-rw-r--r--src/pokemon_icon.c81
-rw-r--r--sym_common.txt8
-rw-r--r--sym_ewram.txt8
-rw-r--r--tools/scaninc/asm_file.cpp2
41 files changed, 11129 insertions, 24863 deletions
diff --git a/asm-de/battle_message.s b/asm-de/battle_message.s
deleted file mode 100644
index 2f671a766..000000000
--- a/asm-de/battle_message.s
+++ /dev/null
@@ -1,2342 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BufferStringBattle
-BufferStringBattle: @ 8120AA8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 16
- lsrs r7, r0, 16
- movs r6, 0
- ldr r5, _08120B70 @ =gSelectedOrderFromParty
- ldr r4, _08120B74 @ =gActiveBank
- ldrb r1, [r4]
- lsls r1, 9
- ldr r0, _08120B78 @ =gUnknown_02023A64
- adds r1, r0
- str r1, [r5]
- ldr r2, _08120B7C @ =gLastUsedItem
- ldrh r0, [r1, 0x4]
- strh r0, [r2]
- ldr r2, _08120B80 @ =gLastUsedAbility
- ldrb r0, [r1, 0x6]
- strb r0, [r2]
- ldr r3, _08120B84 @ =0x02000000
- ldrb r0, [r1, 0x7]
- mov r8, r0
- ldr r2, _08120B88 @ =0x00016003
- adds r0, r3, r2
- mov r2, r8
- strb r2, [r0]
- ldrb r0, [r1, 0x8]
- mov r8, r0
- ldr r2, _08120B8C @ =0x0001605e
- adds r0, r3, r2
- mov r2, r8
- strb r2, [r0]
- ldrb r0, [r1, 0x9]
- mov r8, r0
- ldr r2, _08120B90 @ =0x000160c1
- adds r0, r3, r2
- mov r2, r8
- strb r2, [r0]
- ldr r2, _08120B94 @ =gStringBank
- ldrb r0, [r1, 0xA]
- strb r0, [r2]
- ldrb r1, [r1, 0xB]
- ldr r2, _08120B98 @ =0x000160a0
- adds r0, r3, r2
- strb r1, [r0]
- movs r2, 0
- mov r9, r3
- ldr r3, _08120B9C @ =gBattleTextBuff1
- mov r10, r3
- ldr r3, _08120BA0 @ =gAbilitiesPerBank
-_08120B10:
- adds r0, r2, r3
- ldr r1, [r5]
- adds r1, 0xC
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _08120B10
- movs r2, 0
- ldr r0, _08120B9C @ =gBattleTextBuff1
- mov r8, r0
- ldr r3, _08120B70 @ =gSelectedOrderFromParty
- ldr r1, _08120BA4 @ =gBattleTextBuff2
- mov r12, r1
- ldr r5, _08120BA8 @ =gBattleTextBuff3
-_08120B30:
- mov r0, r8
- adds r1, r2, r0
- ldr r0, [r3]
- adds r0, 0x10
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- mov r0, r12
- adds r1, r2, r0
- ldr r0, [r3]
- adds r0, 0x20
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r2, r5
- ldr r0, [r3]
- adds r0, 0x30
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0xF
- ble _08120B30
- cmp r7, 0x5
- bls _08120B64
- b _08120F50
-_08120B64:
- lsls r0, r7, 2
- ldr r1, _08120BAC @ =_08120BB0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08120B70: .4byte gSelectedOrderFromParty
-_08120B74: .4byte gActiveBank
-_08120B78: .4byte gUnknown_02023A64
-_08120B7C: .4byte gLastUsedItem
-_08120B80: .4byte gLastUsedAbility
-_08120B84: .4byte 0x02000000
-_08120B88: .4byte 0x00016003
-_08120B8C: .4byte 0x0001605e
-_08120B90: .4byte 0x000160c1
-_08120B94: .4byte gStringBank
-_08120B98: .4byte 0x000160a0
-_08120B9C: .4byte gBattleTextBuff1
-_08120BA0: .4byte gAbilitiesPerBank
-_08120BA4: .4byte gBattleTextBuff2
-_08120BA8: .4byte gBattleTextBuff3
-_08120BAC: .4byte _08120BB0
- .align 2, 0
-_08120BB0:
- .4byte _08120BC8
- .4byte _08120C40
- .4byte _08120CCC
- .4byte _08120D5C
- .4byte _08120DE8
- .4byte _08120E50
-_08120BC8:
- ldr r0, _08120BEC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08120C00
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08120BF8
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120BF0 @ =gUnknown_084005C7
- cmp r0, 0
- bne _08120BE8
- b _08120F70
-_08120BE8:
- ldr r6, _08120BF4 @ =gUnknown_084005DB
- b _08120F70
- .align 2, 0
-_08120BEC: .4byte gBattleTypeFlags
-_08120BF0: .4byte gUnknown_084005C7
-_08120BF4: .4byte gUnknown_084005DB
-_08120BF8:
- ldr r6, _08120BFC @ =gUnknown_084005AA
- ldr r0, _08120C04 @ =0x0000ffff
- b _08120F9A
- .align 2, 0
-_08120BFC: .4byte gUnknown_084005AA
-_08120C04: .4byte 0x0000ffff
-_08120C00:
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _08120C14
- ldr r6, _08120C10 @ =gUnknown_08400568
- b _08120F70
- .align 2, 0
-_08120C10: .4byte gUnknown_08400568
-_08120C14:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120C24
- ldr r6, _08120C20 @ =gUnknown_08400590
- b _08120F70
- .align 2, 0
-_08120C20: .4byte gUnknown_08400590
-_08120C24:
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- ldr r6, _08120C38 @ =gUnknown_08400555
- cmp r0, 0
- bne _08120C32
- b _08120F70
-_08120C32:
- ldr r6, _08120C3C @ =gUnknown_0840057B
- b _08120F70
- .align 2, 0
-_08120C38: .4byte gUnknown_08400555
-_08120C3C: .4byte gUnknown_0840057B
-_08120C40:
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08120C7C
- ldr r0, _08120C68 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120C74
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120C6C @ =gUnknown_084006A4
- cmp r0, 0
- bne _08120C64
- b _08120F70
-_08120C64:
- ldr r6, _08120C70 @ =gUnknown_084006F1
- b _08120F70
- .align 2, 0
-_08120C68: .4byte gBattleTypeFlags
-_08120C6C: .4byte gUnknown_084006A4
-_08120C70: .4byte gUnknown_084006F1
-_08120C74:
- ldr r6, _08120C78 @ =gUnknown_0840069C
- b _08120F70
- .align 2, 0
-_08120C78: .4byte gUnknown_0840069C
-_08120C7C:
- ldr r0, _08120C94 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120CB4
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08120C9C
- ldr r6, _08120C98 @ =gUnknown_0840065C
- b _08120F70
- .align 2, 0
-_08120C94: .4byte gBattleTypeFlags
-_08120C98: .4byte gUnknown_0840065C
-_08120C9C:
- movs r0, 0x2
- ands r0, r1
- ldr r6, _08120CB8d @ =gUnknown_08400645
- cmp r0, 0
- beq _08120CA8
- b _08120F70
-_08120CA8:
- ldr r6, _08120CBCd @ =gUnknown_08400608
- ldr r0, _08120CC0d @ =0x0000ffff
- b _08120F9A
- .align 2, 0
-_08120CB8d: .4byte gUnknown_08400645
-_08120CBCd: .4byte gUnknown_08400608
-_08120CC0d: .4byte 0x0000ffff
-_08120CB4:
- movs r0, 0x2
- ands r0, r1
- ldr r6, _08120CD8 @ =gUnknown_08400635
- cmp r0, 0
- beq _08120CC0
- b _08120F70
-_08120CC0:
- ldr r6, _08120CDC @ =gUnknown_084005F5
- ldr r0, _08120CE0 @ =0x0000ffff
- b _08120F9A
- .align 2, 0
-_08120CD8: .4byte gUnknown_08400635
-_08120CDC: .4byte gUnknown_084005F5
-_08120CE0: .4byte 0x0000ffff
-_08120CCC:
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08120D24
- ldr r0, _08120CE8 @ =0x02000000
- ldr r1, _08120CEC @ =0x000160c1
- adds r0, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _08120CF4
- ldr r6, _08120CF0 @ =gUnknown_08400709
- b _08120F70
- .align 2, 0
-_08120CE8: .4byte 0x02000000
-_08120CEC: .4byte 0x000160c1
-_08120CF0: .4byte gUnknown_08400709
-_08120CF4:
- cmp r2, 0x1
- beq _08120D04
- ldr r0, _08120D08 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120D10
-_08120D04:
- ldr r6, _08120D0C @ =gUnknown_08400727
- b _08120F70
- .align 2, 0
-_08120D08: .4byte gBattleTypeFlags
-_08120D0C: .4byte gUnknown_08400727
-_08120D10:
- ldr r6, _08120D1C @ =gUnknown_08400749
- cmp r2, 0x2
- beq _08120D18
- b _08120F70
-_08120D18:
- ldr r6, _08120D20 @ =gUnknown_08400736
- b _08120F70
- .align 2, 0
-_08120D1C: .4byte gUnknown_08400749
-_08120D20: .4byte gUnknown_08400736
-_08120D24:
- ldr r0, _08120D44 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 4
- cmp r1, r0
- bne _08120D54
- ldr r0, _08120D48 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120D4C @ =gUnknown_08400771
- cmp r0, 0
- bne _08120D40
- b _08120F70
-_08120D40:
- ldr r6, _08120D50 @ =gUnknown_08400781
- b _08120F70
- .align 2, 0
-_08120D44: .4byte gTrainerBattleOpponent
-_08120D48: .4byte gBattleTypeFlags
-_08120D4C: .4byte gUnknown_08400771
-_08120D50: .4byte gUnknown_08400781
-_08120D54:
- ldr r6, _08120D58 @ =gUnknown_0840075E
- ldr r0, _d08120D78 @ =0x0000ffff
- b _08120F9A
- .align 2, 0
-_08120D58: .4byte gUnknown_0840075E
-_d08120D78: .4byte 0x0000ffff
-_08120D5C:
- ldr r0, _08120D88 @ =0x00016003
- add r0, r9
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08120DB8
- ldr r0, _08120D8C @ =0x000160c1
- add r0, r9
- ldrb r3, [r0]
- cmp r3, 0
- beq _08120D82
- ldr r0, _08120D90 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120D98
-_08120D82:
- ldr r6, _08120D94 @ =gUnknown_084006B3
- b _08120F70
- .align 2, 0
-_08120D88: .4byte 0x00016003
-_08120D8C: .4byte 0x000160c1
-_08120D90: .4byte gBattleTypeFlags
-_08120D94: .4byte gUnknown_084006B3
-_08120D98:
- cmp r3, 0x1
- bne _08120DA4
- ldr r6, _08120DA0 @ =gUnknown_084006BB
- b _08120F70
- .align 2, 0
-_08120DA0: .4byte gUnknown_084006BB
-_08120DA4:
- ldr r6, _08120DB0 @ =gUnknown_084006D5
- cmp r3, 0x2
- beq _08120DAC
- b _08120F70
-_08120DAC:
- ldr r6, _08120DB4 @ =gUnknown_084006C6
- b _08120F70
- .align 2, 0
-_08120DB0: .4byte gUnknown_084006D5
-_08120DB4: .4byte gUnknown_084006C6
-_08120DB8:
- ldr r0, _08120DD4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08120DE0
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120DD8 @ =gUnknown_0840067C
- cmp r0, 0
- bne _08120DD0
- b _08120F70
-_08120DD0:
- ldr r6, _08120DDC @ =gUnknown_0840068C
- b _08120F70
- .align 2, 0
-_08120DD4: .4byte gBattleTypeFlags
-_08120DD8: .4byte gUnknown_0840067C
-_08120DDC: .4byte gUnknown_0840068C
-_08120DE0:
- ldr r6, _08120DE4 @ =gUnknown_08400622
- ldr r0, _d08120E0C @ =0x0000ffff
- b _08120F9A
- .align 2, 0
-_08120DE4: .4byte gUnknown_08400622
-_d08120E0C: .4byte 0x0000ffff
-_08120DE8:
- mov r0, r10
- bl sub_8121D1C
- ldr r0, _08120E14 @ =gSelectedOrderFromParty
- ldr r2, [r0]
- ldrh r1, [r2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _08120E28
- ldr r0, _08120E18 @ =gBattleTextBuff2
- ldr r2, _08120E1C @ =gUnknown_08401674
- ldr r1, _08120E20 @ =0x02000000
- ldr r3, _08120E24 @ =0x000160a0
- adds r1, r3
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- b _08120E38
- .align 2, 0
-_08120E14: .4byte gSelectedOrderFromParty
-_08120E18: .4byte gBattleTextBuff2
-_08120E1C: .4byte gUnknown_08401674
-_08120E20: .4byte 0x02000000
-_08120E24: .4byte 0x000160a0
-_08120E28:
- ldr r0, _08120E44 @ =gBattleTextBuff2
- ldrh r2, [r2]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _08120E48 @ =gMoveNames
- adds r1, r2
- bl StringCopy
-_08120E38:
- ldr r0, _08120E44 @ =gBattleTextBuff2
- bl sub_8121D74
- ldr r6, _08120E4C @ =gUnknown_084007BD
- b _08120F70
- .align 2, 0
-_08120E44: .4byte gBattleTextBuff2
-_08120E48: .4byte gMoveNames
-_08120E4C: .4byte gUnknown_084007BD
-_08120E50:
- ldr r5, _08120E90 @ =gBattleTextBuff1
- ldrb r1, [r5]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08120EB8
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r5]
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08120E7C
- ldrb r1, [r5]
- cmp r1, 0x3
- beq _08120E7C
- movs r0, 0x3
- eors r0, r1
- strb r0, [r5]
-_08120E7C:
- ldr r0, _08120E90 @ =gBattleTextBuff1
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08120E98
- ldr r6, _08120E94 @ =gUnknown_083FFEFC
- b _08120F70
- .align 2, 0
-_08120E90: .4byte gBattleTextBuff1
-_08120E94: .4byte gUnknown_083FFEFC
-_08120E98:
- ldr r0, _08120EAC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120EB0 @ =gUnknown_083FFFEA
- cmp r0, 0
- beq _08120F70
- ldr r6, _08120EB4 @ =gUnknown_083FFFF7
- b _08120F70
- .align 2, 0
-_08120EAC: .4byte gBattleTypeFlags
-_08120EB0: .4byte gUnknown_083FFFEA
-_08120EB4: .4byte gUnknown_083FFFF7
-_08120EB8:
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08120ED2
- ldrb r1, [r5]
- cmp r1, 0x3
- beq _08120ED2
- movs r0, 0x3
- eors r0, r1
- strb r0, [r5]
-_08120ED2:
- ldr r0, _08120EF0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08120F18
- ldr r0, _08120EF4 @ =gBattleTextBuff1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08120F08
- cmp r0, 0x2
- bgt _08120EF8
- cmp r0, 0x1
- beq _08120EFE
- b _08120F70
- .align 2, 0
-_08120EF0: .4byte gBattleTypeFlags
-_08120EF4: .4byte gBattleTextBuff1
-_08120EF8:
- cmp r0, 0x3
- beq _08120F10
- b _08120F70
-_08120EFE:
- ldr r6, _08120F04 @ =gUnknown_083FFF6A
- b _08120F70
- .align 2, 0
-_08120F04: .4byte gUnknown_083FFF6A
-_08120F08:
- ldr r6, _08120F0C @ =gUnknown_083FFF99
- b _08120F70
- .align 2, 0
-_08120F0C: .4byte gUnknown_083FFF99
-_08120F10:
- ldr r6, _08120F14 @ =gUnknown_083FFFCB
- b _08120F70
- .align 2, 0
-_08120F14: .4byte gUnknown_083FFFCB
-_08120F18:
- ldr r0, _08120F2C @ =gBattleTextBuff1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08120F40
- cmp r0, 0x2
- bgt _08120F30
- cmp r0, 0x1
- beq _08120F36
- b _08120F70
- .align 2, 0
-_08120F2C: .4byte gBattleTextBuff1
-_08120F30:
- cmp r0, 0x3
- beq _08120F48
- b _08120F70
-_08120F36:
- ldr r6, _08120F3C @ =gUnknown_083FFF56
- b _08120F70
- .align 2, 0
-_08120F3C: .4byte gUnknown_083FFF56
-_08120F40:
- ldr r6, _08120F44 @ =gUnknown_083FFF81
- b _08120F70
- .align 2, 0
-_08120F44: .4byte gUnknown_083FFF81
-_08120F48:
- ldr r6, _08120F4C @ =gUnknown_083FFFB3
- b _08120F70
- .align 2, 0
-_08120F4C: .4byte gUnknown_083FFFB3
-_08120F50:
- movs r0, 0xB5
- lsls r0, 1
- cmp r7, r0
- bls _08120F64
- ldr r1, _08120F60 @ =gDisplayedStringBattle
- movs r0, 0xFF
- strb r0, [r1]
- b _08120F76
- .align 2, 0
-_08120F60: .4byte gDisplayedStringBattle
-_08120F64:
- ldr r1, _08120F84 @ =gBattleStringsTable
- adds r0, r7, 0
- subs r0, 0xC
- lsls r0, 2
- adds r0, r1
- ldr r6, [r0]
- adds r0, r7, 0
-_08120F9A:
- adds r1, r6, 0
- bl de_sub_804110C
- adds r6, r0, 0
-_08120F70:
- adds r0, r6, 0
- bl StrCpyDecodeToDisplayedStringBattle
-_08120F76:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08120F84: .4byte gBattleStringsTable
- thumb_func_end BufferStringBattle
-
- thumb_func_start StrCpyDecodeToDisplayedStringBattle
-StrCpyDecodeToDisplayedStringBattle: @ 8120F88
- push {lr}
- ldr r1, _08120F94 @ =gDisplayedStringBattle
- bl StrCpyDecodeBattle
- pop {r1}
- bx r1
- .align 2, 0
-_08120F94: .4byte gDisplayedStringBattle
- thumb_func_end StrCpyDecodeToDisplayedStringBattle
-
- thumb_func_start sub_8120F98
-sub_8120F98: @ 8120F98
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08120FB0 @ =gUnknown_084017A8
- mov r0, sp
- movs r2, 0x8
- bl memcpy
- mov r2, sp
- movs r3, 0
- b _08120FC0
- .align 2, 0
-_08120FB0: .4byte gUnknown_084017A8
-_08120FB4:
- strb r1, [r2]
- adds r4, 0x1
- adds r2, 0x1
- adds r3, 0x1
- cmp r3, 0x7
- bhi _08120FC8
-_08120FC0:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08120FB4
-_08120FC8:
- ldr r5, [sp]
- ldr r4, [sp, 0x4]
- movs r3, 0
- ldr r2, _08120FE4 @ =gUnknown_081FA6D4
-_08120FD0:
- ldr r1, [r2]
- ldr r0, [r1]
- cmp r5, r0
- bne _08120FE8
- ldr r0, [r1, 0x4]
- cmp r4, r0
- bne _08120FE8
- ldr r0, [r2, 0x4]
- b _08120FF2
- .align 2, 0
-_08120FE4: .4byte gUnknown_081FA6D4
-_08120FE8:
- adds r2, 0x8
- adds r3, 0x1
- cmp r3, 0x6
- bls _08120FD0
- movs r0, 0
-_08120FF2:
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8120F98
-
- thumb_func_start StrCpyDecodeBattle
-StrCpyDecodeBattle: @ 8120FFC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0xC
- mov r9, r0
- mov r8, r1
- movs r6, 0
- movs r4, 0
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r7, r0, 24
- mov r0, r9
- ldrb r1, [r0]
- bl _08121A40
-_0812101E:
- cmp r1, 0xFD
- beq _08121026
- bl _08121A30
-_08121026:
- movs r1, 0x1
- add r9, r1
- mov r2, r9
- ldrb r0, [r2]
- cmp r0, 0x2A
- bls _08121036
- bl _081219E6
-_08121036:
- lsls r0, 2
- ldr r1, _08121040 @ =_08121044
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121040: .4byte _08121044
- .align 2, 0
-_08121044:
- .4byte _081210F0
- .4byte _0812111E
- .4byte _0812115A
- .4byte _08121180
- .4byte _081211A4
- .4byte _081211C8
- .4byte _081211EC
- .4byte _08121218
- .4byte _08121248
- .4byte _08121278
- .4byte _081212A8
- .4byte _0812133C
- .4byte _081213A8
- .4byte _0812141C
- .4byte _08121490
- .4byte _08121504
- .4byte _08121578
- .4byte _081215F8
- .4byte _08121620
- .4byte _08121660
- .4byte _081216EC
- .4byte _081216F4
- .4byte _08121704
- .4byte _08121714
- .4byte _0812172C
- .4byte _0812174C
- .4byte _081217C0
- .4byte _08121830
- .4byte _08121840
- .4byte _08121854
- .4byte _08121868
- .4byte _0812188C
- .4byte _081218B0
- .4byte _081218B8
- .4byte _081218C0
- .4byte _0812195C
- .4byte _081219A4
- .4byte _081219AC
- .4byte _0812197C
- .4byte _08121984
- .4byte _081219CC
- .4byte _081219D4
- .4byte _08121134
-_081210F0:
- ldr r5, _08121100 @ =gBattleTextBuff1
- ldrb r0, [r5]
- cmp r0, 0xFD
- bne _08121108
- ldr r4, _08121104 @ =gStringVar1
- adds r0, r5, 0
- b _08121140
- .align 2, 0
-_08121100: .4byte gBattleTextBuff1
-_08121104: .4byte gStringVar1
-_08121108:
- adds r0, r5, 0
- bl sub_8120F98
- adds r4, r0, 0
- cmp r4, 0
- beq _08121118
- bl _081219E6
-_08121118:
- adds r4, r5, 0
- bl _081219E6
-_0812111E:
- ldr r1, _0812112C @ =gBattleTextBuff2
- ldrb r0, [r1]
- cmp r0, 0xFD
- bne _08121154
- ldr r4, _08121130 @ =gStringVar2
- b _0812113E
- .align 2, 0
-_0812112C: .4byte gBattleTextBuff2
-_08121130: .4byte gStringVar2
-_08121134:
- ldr r1, _0812114C @ =gBattleTextBuff3
- ldrb r0, [r1]
- cmp r0, 0xFD
- bne _08121154
- ldr r4, _08121150 @ =gStringVar3
-_0812113E:
- adds r0, r1, 0
-_08121140:
- adds r1, r4, 0
- bl sub_8121A68
- bl _081219E6
- .align 2, 0
-_0812114C: .4byte gBattleTextBuff3
-_08121150: .4byte gStringVar3
-_08121154:
- adds r4, r1, 0
- bl _081219E6
-_0812115A:
- movs r0, 0
- bl GetBankByPlayerAI
- ldr r1, _08de12116C @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08de12116C: .4byte gBattlePartyID
-_08121180:
- movs r0, 0x1
- bl GetBankByPlayerAI
- ldr r1, _0812119C @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081211A0 @ =gEnemyParty
- b _08121940
- .align 2, 0
-_0812119C: .4byte gBattlePartyID
-_081211A0: .4byte gEnemyParty
-_081211A4:
- movs r0, 0x2
- bl GetBankByPlayerAI
- ldr r1, _081211C0 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_081211C0: .4byte gBattlePartyID
-_081211C8:
- movs r0, 0x3
- bl GetBankByPlayerAI
- ldr r1, _081211E4 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081211E8 @ =gEnemyParty
- b _08121940
- .align 2, 0
-_081211E4: .4byte gBattlePartyID
-_081211E8: .4byte gEnemyParty
-_081211EC:
- ldr r2, _0812120C @ =gBattlePartyID
- ldr r1, _08121210 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x18]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_0812120C: .4byte gBattlePartyID
-_08121210: .4byte gLinkPlayers
-_08121218:
- ldr r2, _0812123C @ =gBattlePartyID
- ldr r1, _08121240 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x1
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121244 @ =gEnemyParty
- b _08121940
- .align 2, 0
-_0812123C: .4byte gBattlePartyID
-_08121240: .4byte gLinkPlayers
-_08121244: .4byte gEnemyParty
-_08121248:
- ldr r2, _0812126C @ =gBattlePartyID
- ldr r1, _08121270 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x2
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_0812126C: .4byte gBattlePartyID
-_08121270: .4byte gLinkPlayers
-_08121278:
- ldr r2, _0812129C @ =gBattlePartyID
- ldr r1, _081212A0 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x3
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081212A4 @ =gEnemyParty
- b _08121940
- .align 2, 0
-_0812129C: .4byte gBattlePartyID
-_081212A0: .4byte gLinkPlayers
-_081212A4: .4byte gEnemyParty
-_081212A8:
- ldr r4, _081212CC @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _081212E6
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08121314 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121318 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _08de1212BE
- .align 2, 0
-_081212CC: .4byte gBankAttacker
-_08121314: .4byte gBattlePartyID
-_08121318: .4byte gEnemyParty
-_08de1212B4:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_08de1212BE:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08de1212B4
- b _08de12184E
-_081212E6:
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08121338 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08121338: .4byte gBattlePartyID
-_0812133C:
- ldr r4, _08de121314 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08de12131C
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08de121318 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, 0x4
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08de121314: .4byte gBankAttacker
-_08de121318: .4byte gBattlePartyID
-_08de12131C:
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08de12134C @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, 0x4
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de121350 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- b _0812194A
- .align 2, 0
-_08de12134C: .4byte gBattlePartyID
-_08de121350: .4byte gEnemyParty
-_081213A8:
- ldr r4, _08de121388 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08de1213A8
- ldr r1, _08de12138C @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de121390 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _08de12139E
- .align 2, 0
-_08de121388: .4byte gBankAttacker
-_08de12138C: .4byte gBattlePartyID
-_08de121390: .4byte gEnemyParty
-_08de121394:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_08de12139E:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08de121394
- b _08de12184E
-_08de1213A8:
- ldr r1, _08de1213B4 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08de1213B4: .4byte gBattlePartyID
-_0812141C:
- ldr r4, _08de1213EC @ =gBankTarget
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08de12140C
- ldr r1, _08de1213F0 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de1213F4 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _08de121402
- .align 2, 0
-_08de1213EC: .4byte gBankTarget
-_08de1213F0: .4byte gBattlePartyID
-_08de1213F4: .4byte gEnemyParty
-_08de1213F8:
- mov r2, r8
- adds r0, r2, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_08de121402:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08de1213F8
- b _08de12184E
-_08de12140C:
- ldr r1, _08de121418 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08de121418: .4byte gBattlePartyID
-_08121490:
- ldr r4, _08de121450 @ =gEffectBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08de121470
- ldr r1, _08de121454 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de121458 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _08de121466
- .align 2, 0
-_08de121450: .4byte gEffectBank
-_08de121454: .4byte gBattlePartyID
-_08de121458: .4byte gEnemyParty
-_08de12145C:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_08de121466:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08de12145C
- b _08de12184E
-_08de121470:
- ldr r1, _08de12147C @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08de12147C: .4byte gBattlePartyID
-_08121504:
- ldr r4, _08de1214B4 @ =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08de1214D4
- ldr r1, _08de1214B8 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de1214BC @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _08de1214CA
- .align 2, 0
-_08de1214B4: .4byte gActiveBank
-_08de1214B8: .4byte gBattlePartyID
-_08de1214BC: .4byte gEnemyParty
-_08de1214C0:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_08de1214CA:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08de1214C0
- b _08de12184E
-_08de1214D4:
- ldr r1, _08de1214E0 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08de1214E0: .4byte gBattlePartyID
-_08121578:
- ldr r0, _08de12151C @ =0x02000000
- ldr r1, _08de121520 @ =0x00016003
- adds r4, r0, r1
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _081215E8
- ldr r1, _08de121524 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de121528 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _08de121536
- .align 2, 0
-_08de12151C: .4byte 0x02000000
-_08de121520: .4byte 0x00016003
-_08de121524: .4byte gBattlePartyID
-_08de121528: .4byte gEnemyParty
-_08de12152C:
- mov r2, r8
- adds r0, r2, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_08de121536:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08de12152C
- b _08de12184E
-_081215E8:
- ldr r1, _081215F4 @ =gBattlePartyID
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_081215F4: .4byte gBattlePartyID
-_081215F8:
- ldr r0, _08de121568 @ =gSelectedOrderFromParty
- ldr r2, [r0]
- ldrh r1, [r2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _08de121574
- ldr r0, _08de12156C @ =0x02000000
- ldr r3, _08de121570 @ =0x000160a0
- adds r0, r3
- b _08de12158C
- .align 2, 0
-_08de121568: .4byte gSelectedOrderFromParty
-_08de12156C: .4byte 0x02000000
-_08de121570: .4byte 0x000160a0
-_08de121574:
- ldrh r1, [r2]
- b _08de1215AA
-_08121620:
- ldr r0, _08de121598 @ =gSelectedOrderFromParty
- ldr r2, [r0]
- ldrh r1, [r2, 0x2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _08de1215A8
- ldr r0, _08de12159C @ =0x02000000
- ldr r5, _08de1215A0 @ =0x000160a0
- adds r0, r5
-_08de12158C:
- ldrb r0, [r0]
- lsls r0, 2
- ldr r1, _08de1215A4 @ =gUnknown_08401674
- adds r4, r0, r1
- b _081219E6
- .align 2, 0
-_08de121598: .4byte gSelectedOrderFromParty
-_08de12159C: .4byte 0x02000000
-_08de1215A0: .4byte 0x000160a0
-_08de1215A4: .4byte gUnknown_08401674
-_08de1215A8:
- ldrh r1, [r2, 0x2]
-_08de1215AA:
- movs r0, 0xD
- muls r1, r0
- ldr r0, _08de1215B4 @ =gMoveNames
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_08de1215B4: .4byte gMoveNames
-_08121660:
- ldr r0, _08de121604 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08de121630
- ldr r1, _08de121608 @ =gLastUsedItem
- ldrh r0, [r1]
- cmp r0, 0xAF
- bne _08de12162C
- ldr r2, _08de12160C @ =gLinkPlayers
- ldr r0, _08de121610 @ =0x02000000
- ldr r1, _08de121614 @ =0x000160cb
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _08de121618 @ =gStringBank
- ldrb r2, [r1]
- ldrh r0, [r0, 0x18]
- cmp r0, r2
- bne _08de121624
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- ldr r0, _08de12161C @ =gEnigmaBerries
- adds r1, r0
- mov r0, sp
- bl StringCopy
- ldr r1, _08de121620 @ =gUnknown_08400A85
- mov r0, sp
- bl de_sub_8073174
- mov r4, sp
- b _081219E6
- .align 2, 0
-_08de121604: .4byte gBattleTypeFlags
-_08de121608: .4byte gLastUsedItem
-_08de12160C: .4byte gLinkPlayers
-_08de121610: .4byte 0x02000000
-_08de121614: .4byte 0x000160cb
-_08de121618: .4byte gStringBank
-_08de12161C: .4byte gEnigmaBerries
-_08de121620: .4byte gUnknown_08400A85
-_08de121624:
- ldr r4, _08de121628 @ =gUnknown_08400A78
- b _081219E6
- .align 2, 0
-_08de121628: .4byte gUnknown_08400A78
-_08de12162C:
- ldrh r0, [r1]
- b _08de121634
-_08de121630:
- ldr r0, _08de121640 @ =gLastUsedItem
- ldrh r0, [r0]
-_08de121634:
- mov r1, sp
- bl CopyItemName
- mov r4, sp
- b _081219E6
- .align 2, 0
-_08de121640: .4byte gLastUsedItem
-_081216EC:
- ldr r0, _08de121648 @ =gLastUsedAbility
- b _08de12168C
- .align 2, 0
-_08de121648: .4byte gLastUsedAbility
-_081216F4:
- ldr r1, _08de121654 @ =gAbilitiesPerBank
- ldr r0, _08de121658 @ =gBankAttacker
- b _08de121688
- .align 2, 0
-_08de121654: .4byte gAbilitiesPerBank
-_08de121658: .4byte gBankAttacker
-_08121704:
- ldr r1, _08de121664 @ =gAbilitiesPerBank
- ldr r0, _08de121668 @ =gBankTarget
- b _08de121688
- .align 2, 0
-_08de121664: .4byte gAbilitiesPerBank
-_08de121668: .4byte gBankTarget
-_08121714:
- ldr r1, _08de121678 @ =gAbilitiesPerBank
- ldr r0, _08de12167C @ =0x02000000
- ldr r2, _08de121680 @ =0x00016003
- adds r0, r2
- b _08de121688
- .align 2, 0
-_08de121678: .4byte gAbilitiesPerBank
-_08de12167C: .4byte 0x02000000
-_08de121680: .4byte 0x00016003
-_0812172C:
- ldr r1, _08de121698 @ =gAbilitiesPerBank
- ldr r0, _08de12169C @ =gEffectBank
-_08de121688:
- ldrb r0, [r0]
- adds r0, r1
-_08de12168C:
- ldrb r1, [r0]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _08de1216A0 @ =gAbilityNames
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_08de121698: .4byte gAbilitiesPerBank
-_08de12169C: .4byte gEffectBank
-_08de1216A0: .4byte gAbilityNames
-_0812174C:
- ldr r3, _08de1216B8 @ =gTrainerBattleOpponent
- ldrh r1, [r3]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _08de1216BC
- adds r0, r1, 0
- movs r1, 0
- b _08de1216EE
- .align 2, 0
-_08de1216B8: .4byte gTrainerBattleOpponent
-_08de1216BC:
- ldr r0, _08de1216D4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _08de1216D8
- adds r0, r2, 0
- movs r1, 0
- b _08de1216EE
- .align 2, 0
-_08de1216D4: .4byte gBattleTypeFlags
-_08de1216D8:
- movs r2, 0x80
- lsls r2, 4
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _08de1216EA
- adds r0, r2, 0
- movs r1, 0
- b _08de1216EE
-_08de1216EA:
- ldrh r1, [r3]
- movs r0, 0
-_08de1216EE:
- bl de_sub_8041024
- adds r4, r0, 0
- b _081219E6
-_081217C0:
- ldr r2, _08de12171C @ =gTrainerBattleOpponent
- ldrh r1, [r2]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _08de121724
- mov r0, sp
- movs r1, 0xFF
- movs r2, 0x8
- bl memset
- ldr r1, _08de121720 @ =0x02017002
- mov r0, sp
- movs r2, 0x7
- bl memcpy
- mov r4, sp
- b _081219E6
- .align 2, 0
-_08de12171C: .4byte gTrainerBattleOpponent
-_08de121720: .4byte 0x02017002
-_08de121724:
- ldr r0, _08de12173C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08de121740
- mov r0, sp
- bl get_trainer_name
- mov r4, sp
- b _081219E6
- .align 2, 0
-_08de12173C: .4byte gBattleTypeFlags
-_08de121740:
- movs r0, 0x80
- lsls r0, 4
- ands r0, r1
- cmp r0, 0
- beq _08de121754
- mov r0, sp
- bl sub_8135FF4
- mov r4, sp
- b _081219E6
-_08de121754:
- ldrh r0, [r2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08de121764 @ =gTrainers+4
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_08de121764: .4byte gTrainers+4
-_08121830:
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- ldr r1, _08de121774 @ =0x03002988
- adds r4, r0, r1
- b _081219E6
- .align 2, 0
-_08de121774: .4byte 0x03002988
-_08121840:
- ldr r4, _08de121788 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x2
- b _08de1217AE
- .align 2, 0
-_08de121788: .4byte gLinkPlayers
-_08121854:
- ldr r4, _08de12179C @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x1
- b _08de1217AE
- .align 2, 0
-_08de12179C: .4byte gLinkPlayers
-_08121868:
- ldr r4, _08de1217C0 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x3
-_08de1217AE:
- eors r0, r1
- bl sub_803FC34
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r4, 0x8
- adds r4, r1, r4
- b _081219E6
- .align 2, 0
-_08de1217C0: .4byte gLinkPlayers
-_0812188C:
- ldr r0, _08de1217DC @ =0x02000000
- ldr r3, _08de1217E0 @ =0x00016003
- adds r0, r3
- ldrb r0, [r0]
- bl sub_803FC34
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r0, _08de1217E4 @ =0x03002988
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_08de1217DC: .4byte 0x02000000
-_08de1217E0: .4byte 0x00016003
-_08de1217E4: .4byte 0x03002988
-_081218B0:
- ldr r4, _08de1217EC @ =gSaveBlock2
- b _081219E6
- .align 2, 0
-_08de1217EC: .4byte gSaveBlock2
-_081218B8:
- bl sub_8082830
- adds r4, r0, 0
- b _081219E6
-_081218C0:
- ldr r4, _08de12182C @ =0x02000000
- ldr r5, _08de121830 @ =0x00016003
- adds r0, r4, r5
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08121934
- ldr r1, _08de121834 @ =0x0001605e
- adds r0, r4, r1
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de121838 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _08de121846
- .align 2, 0
-_08de12182C: .4byte 0x02000000
-_08de121830: .4byte 0x00016003
-_08de121834: .4byte 0x0001605e
-_08de121838: .4byte gEnemyParty
-_08de12183C:
- mov r2, r8
- adds r0, r2, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_08de121846:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08de12183C
-_08de12184E:
- ldr r0, _08121920 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _08121924 @ =gUnknown_08400791
- cmp r0, 0
- beq _081219E6
- ldr r4, _08121928 @ =gUnknown_08400797
- b _081219E6
- .align 2, 0
-_08121920: .4byte gBattleTypeFlags
-_08121924: .4byte gUnknown_08400791
-_08121928: .4byte gUnknown_08400797
-_08121934:
- ldr r3, _08121954 @ =0x0001605e
- adds r0, r4, r3
- ldrb r1, [r0]
-_0812193A:
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121958 @ =gPlayerParty
-_08121940:
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
-_0812194A:
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _081219E6
- .align 2, 0
-_08121954: .4byte 0x0001605e
-_08121958: .4byte gPlayerParty
-_0812195C:
- ldr r0, _08121970 @ =0x0000084b
- bl FlagGet
- lsls r0, 24
- ldr r4, _08121974 @ =gUnknown_084009ED
- cmp r0, 0
- beq _081219E6
- ldr r4, _08121978 @ =gUnknown_084009F7
- b _081219E6
- .align 2, 0
-_08121970: .4byte 0x0000084b
-_08121974: .4byte gUnknown_084009ED
-_08121978: .4byte gUnknown_084009F7
-_0812197C:
- ldr r0, _08de1218B8 @ =gBankAttacker
- b _08121986
- .align 2, 0
-_08de1218B8: .4byte gBankAttacker
-_08121984:
- ldr r0, _08121998 @ =gBankTarget
-_08121986:
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- ldr r4, _0812199C @ =gUnknown_084007A7
- cmp r0, 0
- bne _081219E6
- ldr r4, _081219A0 @ =gUnknown_084007AC
- b _081219E6
- .align 2, 0
-_08121998: .4byte gBankTarget
-_0812199C: .4byte gUnknown_084007A7
-_081219A0: .4byte gUnknown_084007AC
-_081219A4:
- ldr r0, _081219A8 @ =gBankAttacker
- b _081219AE
- .align 2, 0
-_081219A8: .4byte gBankAttacker
-_081219AC:
- ldr r0, _081219C0 @ =gBankTarget
-_081219AE:
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- ldr r4, _081219C4 @ =gUnknown_0840079C
- cmp r0, 0
- bne _081219E6
- ldr r4, _081219C8 @ =gUnknown_084007A1
- b _081219E6
- .align 2, 0
-_081219C0: .4byte gBankTarget
-_081219C4: .4byte gUnknown_0840079C
-_081219C8: .4byte gUnknown_084007A1
-_081219CC:
- ldr r0, _081219D0 @ =gBankAttacker
- b _081219D6
- .align 2, 0
-_081219D0: .4byte gBankAttacker
-_081219D4:
- ldr r0, _08121A24 @ =gBankTarget
-_081219D6:
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- ldr r4, _08121A28 @ =gUnknown_084007B2
- cmp r0, 0
- bne _081219E6
- ldr r4, _08121A2C @ =gUnknown_084007B7
-_081219E6:
- ldrb r1, [r4]
- adds r0, r1, 0
- mov r5, r9
- ldrb r2, [r5]
- mov r3, r9
- adds r3, 0x1
- cmp r0, 0xFF
- beq _08121A06
-_081219F4:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081219F4
-_08121A06:
- lsls r0, r2, 24
- lsrs r0, 24
- cmp r0, 0x21
- bne _08121A3C
- mov r0, r8
- adds r1, r0, r6
- movs r0, 0xFC
- strb r0, [r1]
- adds r6, 0x1
- mov r2, r8
- adds r1, r2, r6
- movs r0, 0x9
- strb r0, [r1]
- adds r6, 0x1
- b _08121A3C
- .align 2, 0
-_08121A24: .4byte gBankTarget
-_08121A28: .4byte gUnknown_084007B2
-_08121A2C: .4byte gUnknown_084007B7
-_08121A30:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- mov r3, r9
- adds r3, 0x1
-_08121A3C:
- mov r9, r3
- ldrb r1, [r3]
-_08121A40:
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _08121A4A
- bl _0812101E
-_08121A4A:
- mov r5, r8
- adds r1, r5, r6
- mov r2, r9
- ldrb r0, [r2]
- strb r0, [r1]
- adds r6, 0x1
- adds r0, r6, 0
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end StrCpyDecodeBattle
-
- thumb_func_start sub_8121A68
-sub_8121A68: @ 8121A68
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r7, r0, 0
- adds r6, r1, 0
- movs r5, 0x1
- movs r0, 0
- mov r8, r0
- movs r0, 0xFF
- strb r0, [r6]
- ldrb r0, [r7, 0x1]
- cmp r0, 0xFF
- bne _08121A86
- b _08121D0E
-_08121A86:
- adds r0, r7, r5
- ldrb r1, [r0]
- adds r2, r0, 0
- cmp r1, 0xA
- bls _08121A92
- b _08121D04
-_08121A92:
- lsls r0, r1, 2
- ldr r1, _08121A9C @ =_08121AA0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121A9C: .4byte _08121AA0
- .align 2, 0
-_08121AA0:
- .4byte _08121ACC
- .4byte _08121AE8
- .4byte _08121B3C
- .4byte _08121B54
- .4byte _08121B64
- .4byte _08121BDC
- .4byte _08121BF0
- .4byte _08121C02
- .4byte _08121C48
- .4byte _08121C5C
- .4byte _08121C78
-_08121ACC:
- adds r0, r5, r7
- ldrb r2, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r2, r0
- cmp r2, 0xD1
- beq _08de121ADA
- cmp r2, 0xD3
- bne _08de121ADC
-_08de121ADA:
- adds r5, 0x3
-_08de121ADC:
- ldr r0, _08121AE4 @ =gBattleStringsTable
- adds r1, r2, 0
- subs r1, 0xC
- lsls r1, 2
- adds r1, r0
- ldr r1, [r1]
- b _08121CE2
- .align 2, 0
-_08121AE4: .4byte gBattleStringsTable
-_08121AE8:
- adds r1, r2, 0
- ldrb r0, [r1, 0x1]
- cmp r0, 0x2
- beq _08121B04
- cmp r0, 0x2
- bgt _08121AF8
- cmp r0, 0x1
- beq _08121AFE
- b _08121B26
-_08121AF8:
- cmp r0, 0x4
- beq _08121B0C
- b _08121B26
-_08121AFE:
- ldrb r1, [r1, 0x3]
- b _08de121B30
-_08121B04:
- ldrb r0, [r1, 0x3]
- mov r8, r0
- ldrb r0, [r1, 0x4]
- lsls r0, 8
- mov r1, r8
- b _08121B22
-_08121B0C:
- ldrb r0, [r2, 0x3]
- mov r8, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 8
- mov r1, r8
- orrs r1, r0
- ldrb r0, [r2, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x6]
- lsls r0, 24
-_08121B22:
- orrs r1, r0
-_08de121B30:
- mov r8, r1
-_08121B26:
- adds r4, r5, r7
- ldrb r3, [r4, 0x2]
- adds r0, r6, 0
- mov r1, r8
- movs r2, 0
- bl ConvertIntToDecimalStringN
- adds r0, r5, 0x3
- ldrb r4, [r4, 0x1]
- adds r5, r0, r4
- b _08121D04
-_08121B3C:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0xD
- muls r1, r0
- ldr r0, _08de121B5C @ =gMoveNames
- adds r1, r0
- b _08121CE2
- .align 2, 0
-_08de121B5C: .4byte gMoveNames
-_08121B54:
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r1, r0, 3
- subs r1, r0
- ldr r0, _08de121B6C @ =gTypeNames
- b _08121C66
- .align 2, 0
-_08de121B6C: .4byte gTypeNames
-_08121B64:
- adds r4, r5, r7
- ldrb r0, [r4, 0x1]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08121B88
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121B84 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- adds r0, r6, 0
- mov r1, sp
- bl StringAppend
- b _08121D02
- .align 2, 0
-_08121B84: .4byte gPlayerParty
-_08121B88:
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08de121BD4 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- adds r0, r6, 0
- mov r1, sp
- bl StringAppend
- ldr r0, _08121BA0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08121BA8
- ldr r1, _08121BA4 @ =gUnknown_08400797
- b _08121CE2
- .align 2, 0
-_08de121BD4: .4byte gEnemyParty
-_08121BA0: .4byte gBattleTypeFlags
-_08121BA4: .4byte gUnknown_08400797
-_08121BA8:
- ldr r1, _08121BD4 @ =gUnknown_08400791
- adds r0, r6, 0
- bl StringAppend
- b _08121D02
- .align 2, 0
-_08121BD4: .4byte gUnknown_08400791
-_08121BDC:
- ldr r1, _08121BEC @ =gUnknown_08400F58
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- b _08121C68
- .align 2, 0
-_08121BEC: .4byte gUnknown_08400F58
-_08121BF0:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- adds r0, r6, 0
- bl GetSpeciesName
- b _08121D02
-_08121C02:
- adds r4, r5, r7
- ldrb r0, [r4, 0x1]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08121C28
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121C24 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2
- adds r2, r6, 0
- bl GetMonData
- b _08121C3A
- .align 2, 0
-_08121C24: .4byte gPlayerParty
-_08121C28:
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121C44 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- adds r2, r6, 0
- bl GetMonData
-_08121C3A:
- adds r0, r6, 0
- bl StringGetEnd10
- b _08121D02
- .align 2, 0
-_08121C44: .4byte gEnemyParty
-_08121C48:
- ldr r1, _08121C58 @ =gUnknown_08400F78
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- b _08121C68
- .align 2, 0
-_08121C58: .4byte gUnknown_08400F78
-_08121C5C:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _08121C74 @ =gAbilityNames
-_08121C66:
- adds r1, r0
-_08121C68:
- adds r0, r6, 0
- bl StringAppend
- adds r5, 0x2
- b _08121D04
- .align 2, 0
-_08121C74: .4byte gAbilityNames
-_08121C78:
- adds r0, r5, r7
- ldrb r2, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldr r0, _08121CC4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08121CFA
- cmp r2, 0xAF
- bne _08121CF0
- ldr r2, _08121CC8 @ =gLinkPlayers
- ldr r0, _08121CCC @ =0x02000000
- ldr r1, _08121CD0 @ =0x000160cb
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _08121CD4 @ =gStringBank
- ldrb r2, [r1]
- ldrh r0, [r0, 0x18]
- cmp r0, r2
- bne _08121CE0
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- ldr r0, _08121CD8 @ =gEnigmaBerries
- adds r1, r0
- adds r0, r6, 0
- bl StringCopy
- ldr r1, _08121CDC @ =gUnknown_08400A85
- adds r0, r6, 0
- bl de_sub_8073174
- b _08121D02
- .align 2, 0
-_08121CC4: .4byte gBattleTypeFlags
-_08121CC8: .4byte gLinkPlayers
-_08121CCC: .4byte 0x02000000
-_08121CD0: .4byte 0x000160cb
-_08121CD4: .4byte gStringBank
-_08121CD8: .4byte gEnigmaBerries
-_08121CDC: .4byte gUnknown_08400A85
-_08121CE0:
- ldr r1, _08121CEC @ =gUnknown_08400A78
-_08121CE2:
- adds r0, r6, 0
- bl StringAppend
- b _08121D02
- .align 2, 0
-_08121CEC: .4byte gUnknown_08400A78
-_08121CF0:
- adds r0, r2, 0
- adds r1, r6, 0
- bl CopyItemName
- b _08121D02
-_08121CFA:
- adds r0, r2, 0
- adds r1, r6, 0
- bl CopyItemName
-_08121D02:
- adds r5, 0x3
-_08121D04:
- adds r0, r7, r5
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _08121D0E
- b _08121A86
-_08121D0E:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121A68
-
- thumb_func_start sub_8121D1C
-sub_8121D1C: @ 8121D1C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r2, 0
- ldr r5, _08121D50 @ =gSelectedOrderFromParty
- ldr r3, _08121D54 @ =gUnknown_084016BC
-_08121D26:
- cmp r2, 0x4
- beq _08121D3C
- ldrh r1, [r3]
- cmp r1, 0
- bne _08121D32
- adds r2, 0x1
-_08121D32:
- ldr r0, [r5]
- adds r3, 0x2
- ldrh r0, [r0]
- cmp r1, r0
- bne _08121D26
-_08121D3C:
- cmp r2, 0
- blt _08121D68
- cmp r2, 0x2
- bgt _08121D5C
- ldr r1, _08121D58 @ =gUnknown_08400E5E
- adds r0, r4, 0
- bl StringCopy
- b _08121D68
- .align 2, 0
-_08121D50: .4byte gSelectedOrderFromParty
-_08121D54: .4byte gUnknown_084016BC
-_08121D58: .4byte gUnknown_08400E5E
-_08121D5C:
- cmp r2, 0x4
- bgt _08121D68
- ldr r1, _08121D70 @ =gUnknown_08400E62
- adds r0, r4, 0
- bl StringCopy
-_08121D68:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121D70: .4byte gUnknown_08400E62
- thumb_func_end sub_8121D1C
-
- thumb_func_start sub_8121D74
-sub_8121D74: @ 8121D74
- push {r4,r5,lr}
- adds r3, r0, 0
- movs r4, 0
- b _08121D7E
-_08121D7C:
- adds r3, 0x1
-_08121D7E:
- ldrb r0, [r3]
- cmp r0, 0xFF
- bne _08121D7C
- ldr r1, _08121DB4 @ =gUnknown_084016BC
- ldr r5, _08121DB8 @ =gSelectedOrderFromParty
- movs r0, 0
- lsls r0, 1
- adds r2, r0, r1
-_08121D8E:
- cmp r4, 0x4
- beq _08121DA8
- ldrh r1, [r2]
- cmp r1, 0
- bne _08121D9A
- adds r4, 0x1
-_08121D9A:
- ldr r0, [r5]
- adds r2, 0x2
- ldrh r0, [r0]
- cmp r1, r0
- bne _08121D8E
- cmp r4, 0x4
- bhi _08121E04
-_08121DA8:
- lsls r0, r4, 2
- ldr r1, _08121DBC @ =_08121DC0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121DB4: .4byte gUnknown_084016BC
-_08121DB8: .4byte gSelectedOrderFromParty
-_08121DBC: .4byte _08121DC0
- .align 2, 0
-_08121DC0:
- .4byte _08121DD4
- .4byte _08121DDC
- .4byte _08121DE4
- .4byte _08121DEC
- .4byte _08121DFC
-_08121DD4:
- ldr r1, _08121DD8 @ =gUnknown_084007C8
- b _08121DEE
- .align 2, 0
-_08121DD8: .4byte gUnknown_084007C8
-_08121DDC:
- ldr r1, _08121DE0 @ =gUnknown_084007CA
- b _08121DEE
- .align 2, 0
-_08121DE0: .4byte gUnknown_084007CA
-_08121DE4:
- ldr r1, _08121DE8 @ =gUnknown_084007CC
- b _08121DEE
- .align 2, 0
-_08121DE8: .4byte gUnknown_084007CC
-_08121DEC:
- ldr r1, _08121DF8 @ =gUnknown_084007CE
-_08121DEE:
- adds r0, r3, 0
- bl StringCopy
- b _08121E04
- .align 2, 0
-_08121DF8: .4byte gUnknown_084007CE
-_08121DFC:
- ldr r1, _08121E0C @ =gUnknown_084007D0
- adds r0, r3, 0
- bl StringCopy
-_08121E04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121E0C: .4byte gUnknown_084007D0
- thumb_func_end sub_8121D74
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 4e8d16c7e..804cefa76 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -262,7 +262,7 @@ _08012538:
.4byte _08012968
.4byte _0801292C
_0801256C:
- bl sub_8015C90
+ bl AreAllMovesUnusable
lsls r0, 24
cmp r0, 0
beq _080125D0
@@ -3558,7 +3558,7 @@ _08014044:
str r0, [r2]
movs r0, 0xA5
movs r1, 0
- bl sub_801B5C0
+ bl GetMoveTarget
ldrb r1, [r7]
ldr r2, _080140EC @ =0x00016010
adds r1, r2
@@ -3646,7 +3646,7 @@ _08014138:
strb r0, [r3]
ldrh r0, [r1]
movs r1, 0
- bl sub_801B5C0
+ bl GetMoveTarget
ldrb r1, [r7]
ldr r4, _0801419C @ =0x00016010
adds r1, r4
@@ -3702,7 +3702,7 @@ _080141A0:
strb r0, [r1, 0xE]
ldrh r0, [r3]
movs r1, 0
- bl sub_801B5C0
+ bl GetMoveTarget
ldrb r1, [r7]
ldr r3, _08014214 @ =0x00016010
adds r1, r3
@@ -3740,7 +3740,7 @@ _08014218:
strh r3, [r1]
ldrh r0, [r1]
movs r1, 0
- bl sub_801B5C0
+ bl GetMoveTarget
ldr r2, _08014270 @ =0x02000000
ldrb r1, [r4]
ldr r3, _08014274 @ =0x00016010
diff --git a/asm/battle_3.s b/asm/battle_3.s
deleted file mode 100644
index 7fc14545c..000000000
--- a/asm/battle_3.s
+++ /dev/null
@@ -1,12017 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start b_movescr_stack_push
-b_movescr_stack_push: @ 801582C
- push {r4,lr}
- ldr r4, _08015848 @ =0x02017110
- adds r3, r4, 0
- adds r3, 0x20
- ldrb r1, [r3]
- adds r2, r1, 0x1
- strb r2, [r3]
- lsls r1, 24
- lsrs r1, 22
- adds r1, r4
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08015848: .4byte 0x02017110
- thumb_func_end b_movescr_stack_push
-
- thumb_func_start b_movescr_stack_push_cursor
-b_movescr_stack_push_cursor: @ 801584C
- ldr r3, _08015868 @ =0x02017110
- adds r2, r3, 0
- adds r2, 0x20
- ldrb r0, [r2]
- adds r1, r0, 0x1
- strb r1, [r2]
- lsls r0, 24
- lsrs r0, 22
- adds r0, r3
- ldr r1, _0801586C @ =gBattlescriptCurrInstr
- ldr r1, [r1]
- str r1, [r0]
- bx lr
- .align 2, 0
-_08015868: .4byte 0x02017110
-_0801586C: .4byte gBattlescriptCurrInstr
- thumb_func_end b_movescr_stack_push_cursor
-
- thumb_func_start b_movescr_stack_pop_cursor
-b_movescr_stack_pop_cursor: @ 8015870
- ldr r3, _0801588C @ =gBattlescriptCurrInstr
- ldr r2, _08015890 @ =0x02017110
- adds r1, r2, 0
- adds r1, 0x20
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- str r0, [r3]
- bx lr
- .align 2, 0
-_0801588C: .4byte gBattlescriptCurrInstr
-_08015890: .4byte 0x02017110
- thumb_func_end b_movescr_stack_pop_cursor
-
- thumb_func_start sub_8015894
-sub_8015894: @ 8015894
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- ldr r2, _080159AC @ =gBattleMons
- ldr r1, _080159B0 @ =gBattleBufferB
- ldr r5, _080159B4 @ =gActiveBank
- ldrb r3, [r5]
- lsls r0, r3, 9
- adds r1, 0x2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- movs r1, 0x58
- muls r1, r3
- adds r0, r1
- adds r2, 0xC
- adds r0, r2
- ldrh r4, [r0]
- lsls r0, r3, 1
- ldr r2, _080159B8 @ =0x020160e8
- adds r0, r2
- mov r8, r0
- ldr r1, _080159BC @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x4]
- cmp r0, r4
- bne _080158EE
- cmp r4, 0
- beq _080158EE
- adds r0, r2, 0
- subs r0, 0xE5
- strb r3, [r0]
- ldr r0, _080159C0 @ =gCurrentMove
- strh r4, [r0]
- ldr r1, _080159C4 @ =gUnknown_02024C1C
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080159C8 @ =gUnknown_081D9144
- str r1, [r0]
- movs r6, 0x1
-_080158EE:
- ldr r1, _080159CC @ =gLastUsedMove
- ldr r5, _080159B4 @ =gActiveBank
- ldrb r2, [r5]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _0801592A
- cmp r4, 0xA5
- beq _0801592A
- ldr r1, _080159AC @ =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bge _0801592A
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- ldr r1, _080159C4 @ =gUnknown_02024C1C
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080159D0 @ =gUnknown_081D937C
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0801592A:
- ldr r2, _080159BC @ =gDisableStructs
- ldr r3, _080159B4 @ =gActiveBank
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x13]
- lsls r0, 28
- cmp r0, 0
- beq _08015966
- ldr r0, _080159D4 @ =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _08015966
- ldr r0, _080159C0 @ =gCurrentMove
- strh r4, [r0]
- ldr r1, _080159C4 @ =gUnknown_02024C1C
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080159D8 @ =gUnknown_081D938B
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08015966:
- ldr r5, _080159B4 @ =gActiveBank
- ldrb r0, [r5]
- adds r1, r4, 0
- bl sub_8015D5C
- lsls r0, 24
- cmp r0, 0
- beq _0801598C
- ldr r0, _080159C0 @ =gCurrentMove
- strh r4, [r0]
- ldr r1, _080159C4 @ =gUnknown_02024C1C
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _080159DC @ =gUnknown_081D9464
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0801598C:
- ldr r1, _080159AC @ =gBattleMons
- ldrb r2, [r5]
- movs r0, 0x58
- muls r0, r2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _080159E4
- ldr r1, _080159E0 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r3, [r0, 0x7]
- b _080159EE
- .align 2, 0
-_080159AC: .4byte gBattleMons
-_080159B0: .4byte gBattleBufferB
-_080159B4: .4byte gActiveBank
-_080159B8: .4byte 0x020160e8
-_080159BC: .4byte gDisableStructs
-_080159C0: .4byte gCurrentMove
-_080159C4: .4byte gUnknown_02024C1C
-_080159C8: .4byte gUnknown_081D9144
-_080159CC: .4byte gLastUsedMove
-_080159D0: .4byte gUnknown_081D937C
-_080159D4: .4byte gBattleMoves
-_080159D8: .4byte gUnknown_081D938B
-_080159DC: .4byte gUnknown_081D9464
-_080159E0: .4byte gEnigmaBerries
-_080159E4:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r3, r0, 24
-_080159EE:
- ldr r2, _08015A70 @ =gStringBank
- ldr r1, _08015A74 @ =gActiveBank
- ldrb r0, [r1]
- strb r0, [r2]
- ldr r7, _08015A78 @ =gBattleMons
- adds r5, r1, 0
- cmp r3, 0x1D
- bne _08015A36
- mov r0, r8
- ldrh r2, [r0]
- adds r1, r2, 0
- cmp r1, 0
- beq _08015A36
- ldr r0, _08015A7C @ =0x0000ffff
- cmp r1, r0
- beq _08015A36
- cmp r1, r4
- beq _08015A36
- ldr r0, _08015A80 @ =gCurrentMove
- strh r2, [r0]
- ldr r2, _08015A84 @ =gLastUsedItem
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- strh r0, [r2]
- ldr r1, _08015A88 @ =gUnknown_02024C1C
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08015A8C @ =gUnknown_081D9AC2
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08015A36:
- ldr r0, _08015A90 @ =gBattleBufferB
- ldrb r2, [r5]
- lsls r1, r2, 9
- adds r0, 0x2
- adds r1, r0
- movs r0, 0x58
- muls r0, r2
- ldrb r1, [r1]
- adds r0, r1
- adds r1, r7, 0
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08015A64
- ldr r1, _08015A88 @ =gUnknown_02024C1C
- lsls r0, r2, 2
- adds r0, r1
- ldr r1, _08015A94 @ =gUnknown_081D9369
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08015A64:
- adds r0, r6, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08015A70: .4byte gStringBank
-_08015A74: .4byte gActiveBank
-_08015A78: .4byte gBattleMons
-_08015A7C: .4byte 0x0000ffff
-_08015A80: .4byte gCurrentMove
-_08015A84: .4byte gLastUsedItem
-_08015A88: .4byte gUnknown_02024C1C
-_08015A8C: .4byte gUnknown_081D9AC2
-_08015A90: .4byte gBattleBufferB
-_08015A94: .4byte gUnknown_081D9369
- thumb_func_end sub_8015894
-
- thumb_func_start sub_8015A98
-sub_8015A98: @ 8015A98
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 24
- lsrs r3, r2, 24
- lsls r1, r7, 1
- ldr r0, _08015AD8 @ =0x020160e8
- adds r1, r0
- str r1, [sp, 0x4]
- ldr r1, _08015ADC @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _08015AE4
- ldr r2, _08015AE0 @ =gEnigmaBerries
- lsls r1, r7, 3
- subs r0, r1, r7
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x7]
- str r0, [sp]
- b _08015AF6
- .align 2, 0
-_08015AD8: .4byte 0x020160e8
-_08015ADC: .4byte gBattleMons
-_08015AE0: .4byte gEnigmaBerries
-_08015AE4:
- ldrh r0, [r1, 0x2E]
- str r3, [sp, 0x14]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- lsls r1, r7, 3
- ldr r3, [sp, 0x14]
-_08015AF6:
- ldr r0, _08015C70 @ =gStringBank
- strb r7, [r0]
- movs r0, 0
- mov r9, r0
- lsls r2, r7, 1
- str r2, [sp, 0xC]
- ldr r5, _08015C74 @ =gDisableStructs
- mov r12, r5
- ldr r0, _08015C78 @ =gBattleMons
- movs r2, 0x58
- adds r6, r7, 0
- muls r6, r2
- str r6, [sp, 0x8]
- ldr r2, _08015C7C @ =gUnknown_02024A8C
- adds r5, r6, r2
- movs r6, 0
- str r6, [sp, 0x10]
- mov r10, r0
- subs r0, r1, r7
- lsls r0, 2
- mov r8, r0
- ldr r6, _08015C80 @ =gBitTable
-_08015B22:
- ldrh r0, [r5]
- cmp r0, 0
- bne _08015B38
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08015B38
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015B38:
- ldr r0, [sp, 0x8]
- add r0, r9
- mov r1, r10
- adds r1, 0x24
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08015B58
- movs r0, 0x2
- ands r0, r3
- cmp r0, 0
- beq _08015B58
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015B58:
- mov r1, r8
- add r1, r12
- ldrh r0, [r5]
- ldrh r1, [r1, 0x4]
- cmp r0, r1
- bne _08015B74
- movs r0, 0x4
- ands r0, r3
- cmp r0, 0
- beq _08015B74
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015B74:
- movs r0, 0x58
- adds r2, r7, 0
- muls r2, r0
- ldr r1, [sp, 0x10]
- adds r0, r1, r2
- ldr r1, _08015C7C @ =gUnknown_02024A8C
- adds r0, r1
- mov r12, r0
- ldr r1, _08015C84 @ =gLastUsedMove
- ldr r0, [sp, 0xC]
- adds r1, r0, r1
- str r1, [sp, 0x18]
- mov r1, r12
- ldrh r1, [r1]
- mov r12, r1
- ldr r0, [sp, 0x18]
- ldrh r0, [r0]
- cmp r12, r0
- bne _08015BB6
- movs r0, 0x8
- ands r0, r3
- cmp r0, 0
- beq _08015BB6
- mov r0, r10
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bge _08015BB6
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015BB6:
- ldr r0, _08015C74 @ =gDisableStructs
- add r0, r8
- ldrb r0, [r0, 0x13]
- lsls r0, 28
- cmp r0, 0
- beq _08015BE4
- movs r0, 0x10
- ands r0, r3
- cmp r0, 0
- beq _08015BE4
- ldr r2, _08015C88 @ =gBattleMoves
- ldrh r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08015BE4
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015BE4:
- ldrh r1, [r5]
- adds r0, r7, 0
- str r3, [sp, 0x14]
- bl sub_8015D5C
- lsls r0, 24
- ldr r3, [sp, 0x14]
- cmp r0, 0
- beq _08015C06
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _08015C06
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015C06:
- ldr r1, _08015C74 @ =gDisableStructs
- mov r0, r8
- adds r2, r0, r1
- ldrb r0, [r2, 0xE]
- lsls r0, 28
- mov r12, r1
- cmp r0, 0
- beq _08015C26
- ldrh r0, [r2, 0x6]
- ldrh r1, [r5]
- cmp r0, r1
- beq _08015C26
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015C26:
- ldr r2, [sp]
- cmp r2, 0x1D
- bne _08015C48
- ldr r0, [sp, 0x4]
- ldrh r1, [r0]
- cmp r1, 0
- beq _08015C48
- ldr r0, _08015C8C @ =0x0000ffff
- cmp r1, r0
- beq _08015C48
- ldrh r2, [r5]
- cmp r1, r2
- beq _08015C48
- ldr r0, [r6]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_08015C48:
- adds r6, 0x4
- adds r5, 0x2
- ldr r0, [sp, 0x10]
- adds r0, 0x2
- str r0, [sp, 0x10]
- movs r1, 0x1
- add r9, r1
- mov r2, r9
- cmp r2, 0x3
- bgt _08015C5E
- b _08015B22
-_08015C5E:
- adds r0, r4, 0
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08015C70: .4byte gStringBank
-_08015C74: .4byte gDisableStructs
-_08015C78: .4byte gBattleMons
-_08015C7C: .4byte gUnknown_02024A8C
-_08015C80: .4byte gBitTable
-_08015C84: .4byte gLastUsedMove
-_08015C88: .4byte gBattleMoves
-_08015C8C: .4byte 0x0000ffff
- thumb_func_end sub_8015A98
-
- thumb_func_start sub_8015C90
-sub_8015C90: @ 8015C90
- push {r4-r6,lr}
- ldr r5, _08015CFC @ =gActiveBank
- ldrb r0, [r5]
- movs r1, 0
- movs r2, 0xFF
- bl sub_8015A98
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bne _08015D38
- ldr r0, _08015D00 @ =gProtectStructs
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- ldr r1, _08015D04 @ =gUnknown_02024C1C
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08015D08 @ =gUnknown_081D9365
- str r1, [r0]
- ldr r0, _08015D0C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08015D14
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r4, r0, 0
- bl Random
- movs r1, 0x1
- eors r4, r1
- movs r1, 0x2
- ands r1, r0
- orrs r4, r1
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl GetBankByPlayerAI
- ldr r2, _08015D10 @ =gBattleBufferB
- ldrb r1, [r5]
- lsls r1, 9
- adds r2, 0x3
- adds r1, r2
- b _08015D48
- .align 2, 0
-_08015CFC: .4byte gActiveBank
-_08015D00: .4byte gProtectStructs
-_08015D04: .4byte gUnknown_02024C1C
-_08015D08: .4byte gUnknown_081D9365
-_08015D0C: .4byte gBattleTypeFlags
-_08015D10: .4byte gBattleBufferB
-_08015D14:
- ldrb r0, [r5]
- bl GetBankIdentity
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- ldr r2, _08015D34 @ =gBattleBufferB
- ldrb r1, [r5]
- lsls r1, 9
- adds r2, 0x3
- adds r1, r2
- b _08015D48
- .align 2, 0
-_08015D34: .4byte gBattleBufferB
-_08015D38:
- ldr r0, _08015D58 @ =gProtectStructs
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
-_08015D48:
- strb r0, [r1]
- movs r0, 0
- cmp r6, 0xF
- bne _08015D52
- movs r0, 0x1
-_08015D52:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08015D58: .4byte gProtectStructs
- thumb_func_end sub_8015C90
-
- thumb_func_start sub_8015D5C
-sub_8015D5C: @ 8015D5C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- movs r6, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r4, 0
- ldr r0, _08015DF0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r6, r0
- bge _08015DE0
- ldr r7, _08015DF4 @ =gUnknown_02024A8C
- mov r8, r7
-_08015D86:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- adds r3, r4, 0x1
- cmp r9, r0
- beq _08015DD6
- ldr r1, _08015DF8 @ =gStatuses3
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- ands r0, r1
- cmp r0, 0
- beq _08015DD6
- movs r2, 0
- movs r0, 0x58
- adds r1, r4, 0
- muls r1, r0
- adds r0, r1, r7
- ldrh r0, [r0]
- cmp r5, r0
- beq _08015DCC
- mov r4, r8
- adds r0, r1, r4
-_08015DBE:
- adds r0, 0x2
- adds r2, 0x1
- cmp r2, 0x3
- bgt _08015DD6
- ldrh r1, [r0]
- cmp r5, r1
- bne _08015DBE
-_08015DCC:
- cmp r2, 0x3
- bgt _08015DD6
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08015DD6:
- adds r4, r3, 0
- ldr r0, _08015DF0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08015D86
-_08015DE0:
- adds r0, r6, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08015DF0: .4byte gNoOfAllBanks
-_08015DF4: .4byte gUnknown_02024A8C
-_08015DF8: .4byte gStatuses3
- thumb_func_end sub_8015D5C
-
- thumb_func_start UpdateTurnCounters
-UpdateTurnCounters: @ 8015DFC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r9, r0
- ldr r1, _08015EA0 @ =gBankAttacker
- mov r2, r9
- strb r2, [r1]
- ldr r0, _08015EA4 @ =gNoOfAllBanks
- ldrb r4, [r0]
- adds r6, r1, 0
- mov r10, r0
- ldr r7, _08015EA8 @ =gBankTarget
- ldr r3, _08015EAC @ =0x02000000
- mov r12, r3
- cmp r9, r4
- bcs _08015E50
- ldr r2, _08015EB0 @ =gAbsentBankFlags
- ldrb r1, [r2]
- ldr r5, _08015EB4 @ =gBitTable
- ldr r0, [r5]
- ands r1, r0
- cmp r1, 0
- beq _08015E50
- adds r3, r6, 0
-_08015E32:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcs _08015E50
- ldrb r0, [r2]
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r5
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _08015E32
-_08015E50:
- movs r0, 0
- strb r0, [r7]
- mov r0, r10
- ldrb r4, [r0]
- cmp r4, 0
- beq _08015E8A
- ldr r2, _08015EB0 @ =gAbsentBankFlags
- ldrb r1, [r2]
- ldr r5, _08015EB4 @ =gBitTable
- ldr r0, [r5]
- ands r1, r0
- cmp r1, 0
- beq _08015E8A
- adds r3, r7, 0
-_08015E6C:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r4
- bcs _08015E8A
- ldrb r0, [r2]
- ldrb r1, [r7]
- lsls r1, 2
- adds r1, r5
- ldr r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _08015E6C
-_08015E8A:
- ldr r0, _08015EB8 @ =0x0001600e
- add r0, r12
- ldrb r0, [r0]
- cmp r0, 0xA
- bls _08015E96
- b _0801652A
-_08015E96:
- lsls r0, 2
- ldr r1, _08015EBC @ =_08015EC0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08015EA0: .4byte gBankAttacker
-_08015EA4: .4byte gNoOfAllBanks
-_08015EA8: .4byte gBankTarget
-_08015EAC: .4byte 0x02000000
-_08015EB0: .4byte gAbsentBankFlags
-_08015EB4: .4byte gBitTable
-_08015EB8: .4byte 0x0001600e
-_08015EBC: .4byte _08015EC0
- .align 2, 0
-_08015EC0:
- .4byte _08015EEC
- .4byte _08015F74
- .4byte _08016034
- .4byte _080160F4
- .4byte _080161C8
- .4byte _08016274
- .4byte _08016324
- .4byte _080163A8
- .4byte _08016420
- .4byte _08016494
- .4byte _08016520
-_08015EEC:
- movs r5, 0
- ldr r1, _08015F0C @ =gNoOfAllBanks
- mov r10, r1
- ldrb r2, [r1]
- cmp r5, r2
- bge _08015F06
- ldr r2, _08015F10 @ =gTurnOrder
-_08015EFA:
- adds r0, r5, r2
- strb r5, [r0]
- adds r5, 0x1
- ldrb r3, [r1]
- cmp r5, r3
- blt _08015EFA
-_08015F06:
- movs r5, 0
- b _08015F54
- .align 2, 0
-_08015F0C: .4byte gNoOfAllBanks
-_08015F10: .4byte gTurnOrder
-_08015F14:
- adds r4, r5, 0x1
- adds r6, r4, 0
- ldrb r1, [r1]
- cmp r6, r1
- bge _08015F52
- ldr r7, _08016004 @ =gTurnOrder
- ldr r0, _08016008 @ =gNoOfAllBanks
- mov r10, r0
- lsls r1, r5, 24
- mov r8, r1
-_08015F28:
- adds r0, r5, r7
- ldrb r0, [r0]
- adds r1, r4, r7
- ldrb r1, [r1]
- movs r2, 0
- bl b_first_side
- lsls r0, 24
- cmp r0, 0
- beq _08015F48
- lsls r1, r4, 24
- lsrs r1, 24
- mov r2, r8
- lsrs r0, r2, 24
- bl sub_8012FBC
-_08015F48:
- adds r4, 0x1
- ldr r0, _08016008 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08015F28
-_08015F52:
- adds r5, r6, 0
-_08015F54:
- mov r1, r10
- ldrb r0, [r1]
- subs r0, 0x1
- cmp r5, r0
- blt _08015F14
- ldr r1, _0801600C @ =0x02000000
- ldr r3, _08016010 @ =0x0001600e
- adds r2, r1, r3
- ldrb r0, [r2]
- adds r0, 0x1
- movs r3, 0
- strb r0, [r2]
- ldr r2, _08016014 @ =0x000160fc
- adds r0, r1, r2
- strb r3, [r0]
- mov r12, r1
-_08015F74:
- ldr r1, _08016014 @ =0x000160fc
- add r1, r12
- ldrb r0, [r1]
- cmp r0, 0x1
- bls _08015F80
- b _08016236
-_08015F80:
- ldr r3, _08016018 @ =gActiveBank
- mov r8, r3
- adds r6, r1, 0
- movs r7, 0
- ldr r5, _0801601C @ =gBattleTextBuff1
-_08015F8A:
- ldr r0, _08016020 @ =gBankAttacker
- ldrb r4, [r6]
- strb r4, [r0]
- mov r0, r8
- strb r4, [r0]
- ldr r0, _08016024 @ =gSideAffecting
- lsls r2, r4, 1
- adds r3, r2, r0
- ldrh r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08015FE8
- ldr r0, _08016028 @ =gSideTimer
- adds r1, r2, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- movs r4, 0xFF
- lsls r0, 24
- cmp r0, 0
- bne _08015FE8
- ldrh r0, [r3]
- ldr r2, _0801602C @ =0x0000fffe
- adds r1, r2, 0
- ands r0, r1
- strh r0, [r3]
- ldr r0, _08016030 @ =gUnknown_081D9030
- bl b_call_bc_move_exec
- movs r0, 0xFD
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x1]
- movs r0, 0x73
- strb r0, [r5, 0x2]
- strb r7, [r5, 0x3]
- ldrb r0, [r5, 0x4]
- orrs r0, r4
- strb r0, [r5, 0x4]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08015FE8:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- ldr r3, _0801600C @ =0x02000000
- mov r12, r3
- mov r1, r9
- cmp r1, 0
- beq _08015FFA
- b _08016532
-_08015FFA:
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _08015F8A
- b _08016236
- .align 2, 0
-_08016004: .4byte gTurnOrder
-_08016008: .4byte gNoOfAllBanks
-_0801600C: .4byte 0x02000000
-_08016010: .4byte 0x0001600e
-_08016014: .4byte 0x000160fc
-_08016018: .4byte gActiveBank
-_0801601C: .4byte gBattleTextBuff1
-_08016020: .4byte gBankAttacker
-_08016024: .4byte gSideAffecting
-_08016028: .4byte gSideTimer
-_0801602C: .4byte 0x0000fffe
-_08016030: .4byte gUnknown_081D9030
-_08016034:
- ldr r1, _080160CC @ =0x000160fc
- add r1, r12
- ldrb r0, [r1]
- cmp r0, 0x1
- bls _08016040
- b _08016182
-_08016040:
- adds r7, r1, 0
- movs r3, 0x2
- mov r10, r3
- movs r0, 0
- mov r8, r0
- ldr r5, _080160D0 @ =gBattleTextBuff1
-_0801604C:
- ldr r0, _080160D4 @ =gBankAttacker
- ldrb r4, [r7]
- strb r4, [r0]
- ldr r1, _080160D8 @ =gActiveBank
- strb r4, [r1]
- ldr r0, _080160DC @ =gSideAffecting
- lsls r2, r4, 1
- adds r3, r2, r0
- ldrh r1, [r3]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080160B0
- ldr r0, _080160E0 @ =gSideTimer
- adds r1, r2, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- subs r0, 0x1
- strb r0, [r1, 0x1]
- movs r6, 0xFF
- lsls r0, 24
- cmp r0, 0
- bne _080160B0
- ldrh r0, [r3]
- ldr r2, _080160E4 @ =0x0000fffd
- adds r1, r2, 0
- ands r0, r1
- strh r0, [r3]
- ldr r0, _080160E8 @ =gUnknown_081D9030
- bl b_call_bc_move_exec
- ldr r0, _080160EC @ =gBattleCommunication
- strb r4, [r0, 0x5]
- movs r0, 0xFD
- strb r0, [r5]
- mov r3, r10
- strb r3, [r5, 0x1]
- movs r0, 0x71
- strb r0, [r5, 0x2]
- mov r0, r8
- strb r0, [r5, 0x3]
- ldrb r0, [r5, 0x4]
- orrs r0, r6
- strb r0, [r5, 0x4]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080160B0:
- ldrb r0, [r7]
- adds r0, 0x1
- strb r0, [r7]
- ldr r1, _080160F0 @ =0x02000000
- mov r12, r1
- mov r2, r9
- cmp r2, 0
- beq _080160C2
- b _08016532
-_080160C2:
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0801604C
- b _08016182
- .align 2, 0
-_080160CC: .4byte 0x000160fc
-_080160D0: .4byte gBattleTextBuff1
-_080160D4: .4byte gBankAttacker
-_080160D8: .4byte gActiveBank
-_080160DC: .4byte gSideAffecting
-_080160E0: .4byte gSideTimer
-_080160E4: .4byte 0x0000fffd
-_080160E8: .4byte gUnknown_081D9030
-_080160EC: .4byte gBattleCommunication
-_080160F0: .4byte 0x02000000
-_080160F4:
- ldr r1, _0801619C @ =0x000160fc
- add r1, r12
- ldrb r0, [r1]
- cmp r0, 0x1
- bhi _08016182
- ldr r0, _080161A0 @ =gActiveBank
- mov r10, r0
- adds r7, r1, 0
- movs r1, 0
- mov r8, r1
- ldr r5, _080161A4 @ =gBattleTextBuff1
-_0801610A:
- ldr r0, _080161A8 @ =gBankAttacker
- ldrb r4, [r7]
- strb r4, [r0]
- mov r2, r10
- strb r4, [r2]
- ldr r1, _080161AC @ =gSideTimer
- lsls r3, r4, 1
- adds r0, r3, r4
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- beq _08016168
- subs r0, 0x1
- strb r0, [r1, 0x2]
- movs r6, 0xFF
- lsls r0, 24
- cmp r0, 0
- bne _08016168
- ldr r2, _080161B0 @ =gSideAffecting
- adds r2, r3, r2
- ldrh r0, [r2]
- ldr r3, _080161B4 @ =0x0000feff
- adds r1, r3, 0
- ands r0, r1
- strh r0, [r2]
- ldr r0, _080161B8 @ =gUnknown_081D9030
- bl b_call_bc_move_exec
- ldr r0, _080161BC @ =gBattleCommunication
- strb r4, [r0, 0x5]
- movs r0, 0xFD
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x1]
- movs r0, 0x36
- strb r0, [r5, 0x2]
- mov r0, r8
- strb r0, [r5, 0x3]
- ldrb r0, [r5, 0x4]
- orrs r0, r6
- strb r0, [r5, 0x4]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016168:
- ldrb r0, [r7]
- adds r0, 0x1
- strb r0, [r7]
- ldr r1, _080161C0 @ =0x02000000
- mov r12, r1
- mov r2, r9
- cmp r2, 0
- beq _0801617A
- b _08016532
-_0801617A:
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0801610A
-_08016182:
- mov r3, r9
- cmp r3, 0
- beq _0801618A
- b _08016532
-_0801618A:
- ldr r0, _080161C4 @ =0x0001600e
- add r0, r12
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r0, _0801619C @ =0x000160fc
- add r0, r12
- strb r3, [r0]
- b _0801652A
- .align 2, 0
-_0801619C: .4byte 0x000160fc
-_080161A0: .4byte gActiveBank
-_080161A4: .4byte gBattleTextBuff1
-_080161A8: .4byte gBankAttacker
-_080161AC: .4byte gSideTimer
-_080161B0: .4byte gSideAffecting
-_080161B4: .4byte 0x0000feff
-_080161B8: .4byte gUnknown_081D9030
-_080161BC: .4byte gBattleCommunication
-_080161C0: .4byte 0x02000000
-_080161C4: .4byte 0x0001600e
-_080161C8:
- ldr r1, _08016250 @ =0x000160fc
- add r1, r12
- ldrb r0, [r1]
- cmp r0, 0x1
- bhi _08016236
- ldr r7, _08016254 @ =gActiveBank
- adds r5, r1, 0
- ldr r6, _08016258 @ =gBankAttacker
-_080161D8:
- ldrb r4, [r5]
- strb r4, [r6]
- strb r4, [r7]
- ldr r0, _0801625C @ =gSideAffecting
- lsls r2, r4, 1
- adds r3, r2, r0
- ldrh r1, [r3]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801621C
- ldr r0, _08016260 @ =gSideTimer
- adds r1, r2, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x7]
- subs r0, 0x1
- strb r0, [r1, 0x7]
- lsls r0, 24
- cmp r0, 0
- bne _0801621C
- ldrh r0, [r3]
- ldr r2, _08016264 @ =0x0000ffdf
- adds r1, r2, 0
- ands r0, r1
- strh r0, [r3]
- ldr r0, _08016268 @ =gUnknown_081D9041
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801621C:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- ldr r3, _0801626C @ =0x02000000
- mov r12, r3
- mov r1, r9
- cmp r1, 0
- beq _0801622E
- b _08016532
-_0801622E:
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080161D8
-_08016236:
- mov r2, r9
- cmp r2, 0
- beq _0801623E
- b _08016532
-_0801623E:
- ldr r0, _08016270 @ =0x0001600e
- add r0, r12
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r0, _08016250 @ =0x000160fc
- add r0, r12
- strb r2, [r0]
- b _0801652A
- .align 2, 0
-_08016250: .4byte 0x000160fc
-_08016254: .4byte gActiveBank
-_08016258: .4byte gBankAttacker
-_0801625C: .4byte gSideAffecting
-_08016260: .4byte gSideTimer
-_08016264: .4byte 0x0000ffdf
-_08016268: .4byte gUnknown_081D9041
-_0801626C: .4byte 0x02000000
-_08016270: .4byte 0x0001600e
-_08016274:
- ldr r2, _080162FC @ =0x000160fc
- add r2, r12
- ldr r1, _08016300 @ =gNoOfAllBanks
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- bcs _080162E8
- ldr r5, _08016304 @ =gActiveBank
- adds r4, r2, 0
- ldr r6, _08016308 @ =gUnknown_02024DDC
-_08016288:
- ldr r1, _0801630C @ =gTurnOrder
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r5]
- ldrb r0, [r5]
- adds r1, r0, r6
- ldrb r0, [r1]
- cmp r0, 0
- beq _080162CA
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _080162CA
- ldr r1, _08016310 @ =gBattleMons
- ldrb r2, [r5]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _080162CA
- ldr r0, _08016314 @ =gBankTarget
- strb r2, [r0]
- ldr r0, _08016318 @ =gUnknown_081D939A
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080162CA:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r3, _0801631C @ =0x02000000
- mov r12, r3
- mov r1, r9
- cmp r1, 0
- beq _080162DC
- b _08016532
-_080162DC:
- ldr r1, _08016300 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08016288
-_080162E8:
- mov r2, r9
- cmp r2, 0
- beq _080162F0
- b _08016532
-_080162F0:
- ldr r1, _08016320 @ =0x0001600e
- add r1, r12
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0801652A
- .align 2, 0
-_080162FC: .4byte 0x000160fc
-_08016300: .4byte gNoOfAllBanks
-_08016304: .4byte gActiveBank
-_08016308: .4byte gUnknown_02024DDC
-_0801630C: .4byte gTurnOrder
-_08016310: .4byte gBattleMons
-_08016314: .4byte gBankTarget
-_08016318: .4byte gUnknown_081D939A
-_0801631C: .4byte 0x02000000
-_08016320: .4byte 0x0001600e
-_08016324:
- ldr r3, _0801635C @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x7
- ands r0, r2
- cmp r0, 0
- bne _08016332
- b _080164F8
-_08016332:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- bne _0801637E
- ldr r1, _08016360 @ =gWishFutureKnock
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _08016370
- ldr r0, _08016364 @ =0x0000fffe
- ands r0, r2
- ldr r1, _08016368 @ =0x0000fffd
- ands r0, r1
- strh r0, [r3]
- ldr r1, _0801636C @ =gBattleCommunication
- movs r0, 0x2
- strb r0, [r1, 0x5]
- b _0801639C
- .align 2, 0
-_0801635C: .4byte gBattleWeather
-_08016360: .4byte gWishFutureKnock
-_08016364: .4byte 0x0000fffe
-_08016368: .4byte 0x0000fffd
-_0801636C: .4byte gBattleCommunication
-_08016370:
- movs r0, 0x2
- ands r0, r2
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _0801638A
- b _08016398
-_0801637E:
- movs r0, 0x2
- ands r0, r2
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _08016398
-_0801638A:
- ldr r1, _08016394 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _0801639C
- .align 2, 0
-_08016394: .4byte gBattleCommunication
-_08016398:
- ldr r0, _080163A0 @ =gBattleCommunication
- strb r1, [r0, 0x5]
-_0801639C:
- ldr r0, _080163A4 @ =gUnknown_081D8F62
- b _080164EA
- .align 2, 0
-_080163A0: .4byte gBattleCommunication
-_080163A4: .4byte gUnknown_081D8F62
-_080163A8:
- ldr r3, _080163DC @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x18
- ands r0, r2
- cmp r0, 0
- bne _080163B6
- b _080164F8
-_080163B6:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- bne _080163F0
- ldr r1, _080163E0 @ =gWishFutureKnock
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _080163F0
- ldr r0, _080163E4 @ =0x0000fff7
- ands r0, r2
- strh r0, [r3]
- ldr r1, _080163E8 @ =gBattlescriptCurrInstr
- ldr r0, _080163EC @ =gUnknown_081D8FFF
- b _080163F4
- .align 2, 0
-_080163DC: .4byte gBattleWeather
-_080163E0: .4byte gWishFutureKnock
-_080163E4: .4byte 0x0000fff7
-_080163E8: .4byte gBattlescriptCurrInstr
-_080163EC: .4byte gUnknown_081D8FFF
-_080163F0:
- ldr r1, _0801640C @ =gBattlescriptCurrInstr
- ldr r0, _08016410 @ =gUnknown_081D8F7D
-_080163F4:
- str r0, [r1]
- adds r3, r1, 0
- ldr r1, _08016414 @ =0x02000000
- ldr r0, _08016418 @ =0x000160a4
- adds r1, r0
- movs r2, 0
- movs r0, 0xC
- strb r0, [r1]
- ldr r0, _0801641C @ =gBattleCommunication
- strb r2, [r0, 0x5]
- b _080164E8
- .align 2, 0
-_0801640C: .4byte gBattlescriptCurrInstr
-_08016410: .4byte gUnknown_081D8F7D
-_08016414: .4byte 0x02000000
-_08016418: .4byte 0x000160a4
-_0801641C: .4byte gBattleCommunication
-_08016420:
- ldr r3, _08016450 @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x60
- ands r0, r2
- cmp r0, 0
- beq _0801647C
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- bne _08016464
- ldr r1, _08016454 @ =gWishFutureKnock
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _08016464
- ldr r0, _08016458 @ =0x0000ffdf
- ands r0, r2
- strh r0, [r3]
- ldr r1, _0801645C @ =gBattlescriptCurrInstr
- ldr r0, _08016460 @ =gUnknown_081D9016
- b _08016468
- .align 2, 0
-_08016450: .4byte gBattleWeather
-_08016454: .4byte gWishFutureKnock
-_08016458: .4byte 0x0000ffdf
-_0801645C: .4byte gBattlescriptCurrInstr
-_08016460: .4byte gUnknown_081D9016
-_08016464:
- ldr r1, _08016484 @ =gBattlescriptCurrInstr
- ldr r0, _08016488 @ =gUnknown_081D9008
-_08016468:
- str r0, [r1]
- adds r3, r1, 0
- ldr r0, [r3]
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801647C:
- ldr r2, _0801648C @ =0x02000000
- ldr r0, _08016490 @ =0x0001600e
- adds r1, r2, r0
- b _080164FE
- .align 2, 0
-_08016484: .4byte gBattlescriptCurrInstr
-_08016488: .4byte gUnknown_081D9008
-_0801648C: .4byte 0x02000000
-_08016490: .4byte 0x0001600e
-_08016494:
- ldr r3, _080164BC @ =gBattleWeather
- ldrh r2, [r3]
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080164F8
- ldr r1, _080164C0 @ =gWishFutureKnock
- adds r1, 0x28
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _080164D0
- ldr r0, _080164C4 @ =0x0000ff7f
- ands r0, r2
- strh r0, [r3]
- ldr r1, _080164C8 @ =gBattlescriptCurrInstr
- ldr r0, _080164CC @ =gUnknown_081D8FFF
- b _080164D4
- .align 2, 0
-_080164BC: .4byte gBattleWeather
-_080164C0: .4byte gWishFutureKnock
-_080164C4: .4byte 0x0000ff7f
-_080164C8: .4byte gBattlescriptCurrInstr
-_080164CC: .4byte gUnknown_081D8FFF
-_080164D0:
- ldr r1, _08016508 @ =gBattlescriptCurrInstr
- ldr r0, _0801650C @ =gUnknown_081D8F7D
-_080164D4:
- str r0, [r1]
- adds r3, r1, 0
- ldr r0, _08016510 @ =0x02000000
- ldr r1, _08016514 @ =0x000160a4
- adds r0, r1
- movs r1, 0xD
- strb r1, [r0]
- ldr r1, _08016518 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_080164E8:
- ldr r0, [r3]
-_080164EA:
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080164F8:
- ldr r2, _08016510 @ =0x02000000
- ldr r3, _0801651C @ =0x0001600e
- adds r1, r2, r3
-_080164FE:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r12, r2
- b _0801652A
- .align 2, 0
-_08016508: .4byte gBattlescriptCurrInstr
-_0801650C: .4byte gUnknown_081D8F7D
-_08016510: .4byte 0x02000000
-_08016514: .4byte 0x000160a4
-_08016518: .4byte gBattleCommunication
-_0801651C: .4byte 0x0001600e
-_08016520:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801652A:
- mov r0, r9
- cmp r0, 0
- bne _08016532
- b _08015E8A
-_08016532:
- ldr r0, _08016550 @ =gBattleMainFunc
- ldr r1, [r0]
- ldr r0, _08016554 @ =BattleTurnPassed
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08016550: .4byte gBattleMainFunc
-_08016554: .4byte BattleTurnPassed
- thumb_func_end UpdateTurnCounters
-
- thumb_func_start TurnBasedEffects
-TurnBasedEffects: @ 8016558
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r9, r0
- ldr r2, _08016578 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0801657C @ =0x01000020
- orrs r0, r1
- str r0, [r2]
- bl _08017088
- .align 2, 0
-_08016578: .4byte gHitMarker
-_0801657C: .4byte 0x01000020
-_08016580:
- ldr r3, _080165B4 @ =gActiveBank
- ldr r4, _080165B8 @ =gBankAttacker
- ldr r1, _080165BC @ =gTurnOrder
- adds r5, r7, r2
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r4]
- strb r0, [r3]
- ldr r0, _080165C0 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _080165C4 @ =gBitTable
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- adds r6, r3, 0
- cmp r1, 0
- beq _080165C8
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- bl _08017088
- .align 2, 0
-_080165B4: .4byte gActiveBank
-_080165B8: .4byte gBankAttacker
-_080165BC: .4byte gTurnOrder
-_080165C0: .4byte gAbsentBankFlags
-_080165C4: .4byte gBitTable
-_080165C8:
- movs r5, 0xB0
- lsls r5, 9
- adds r0, r7, r5
- ldrb r0, [r0]
- cmp r0, 0x13
- bls _080165D8
- bl _08017078
-_080165D8:
- lsls r0, 2
- ldr r1, _080165E4 @ =_080165E8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080165E4: .4byte _080165E8
- .align 2, 0
-_080165E8:
- .4byte _08016638
- .4byte _080166A8
- .4byte _080166D8
- .4byte _08016730
- .4byte _080167C8
- .4byte _08016828
- .4byte _080168C0
- .4byte _0801691C
- .4byte _0801697C
- .4byte _080169DC
- .4byte _08016B78
- .4byte _08016CA0
- .4byte _08016D58
- .4byte _08016E30
- .4byte _08016EFC
- .4byte _08016F20
- .4byte _08016F6C
- .4byte _08016F9C
- .4byte _08016704
- .4byte _08017064
-_08016638:
- ldr r1, _08016694 @ =gStatuses3
- ldrb r3, [r6]
- lsls r0, r3, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _08016686
- ldr r0, _08016698 @ =gBattleMons
- movs r1, 0x58
- muls r1, r3
- adds r0, r1, r0
- ldrh r2, [r0, 0x28]
- ldrh r7, [r0, 0x2C]
- cmp r2, r7
- beq _08016686
- cmp r2, 0
- beq _08016686
- ldr r1, _0801669C @ =gBattleMoveDamage
- ldrh r0, [r0, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08016670
- movs r0, 0x1
- str r0, [r1]
-_08016670:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- ldr r0, _080166A0 @ =gUnknown_081D93D1
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016686:
- ldr r1, _080166A4 @ =0x02000000
- movs r0, 0xB0
- lsls r0, 9
- adds r1, r0
- bl _08017072
- .align 2, 0
-_08016694: .4byte gStatuses3
-_08016698: .4byte gBattleMons
-_0801669C: .4byte gBattleMoveDamage
-_080166A0: .4byte gUnknown_081D93D1
-_080166A4: .4byte 0x02000000
-_080166A8:
- ldrb r1, [r6]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _080166C8
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080166C8:
- ldr r1, _080166D4 @ =0x02000000
- movs r2, 0xB0
- lsls r2, 9
- adds r1, r2
- bl _08017072
- .align 2, 0
-_080166D4: .4byte 0x02000000
-_080166D8:
- ldrb r1, [r6]
- movs r0, 0x1
- movs r2, 0
- bl ItemBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _080166F2
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080166F2:
- ldr r1, _08016700 @ =0x02000000
- movs r3, 0xB0
- lsls r3, 9
- adds r1, r3
- bl _08017072
- .align 2, 0
-_08016700: .4byte 0x02000000
-_08016704:
- ldrb r1, [r6]
- movs r0, 0x1
- movs r2, 0x1
- bl ItemBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801671E
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801671E:
- ldr r1, _0801672C @ =0x02000000
- movs r5, 0xB0
- lsls r5, 9
- adds r1, r5
- bl _08017072
- .align 2, 0
-_0801672C: .4byte 0x02000000
-_08016730:
- ldr r0, _080167A8 @ =gStatuses3
- ldrb r2, [r6]
- lsls r1, r2, 2
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801679C
- ldr r3, _080167AC @ =gBattleMons
- movs r5, 0x3
- ands r5, r1
- movs r1, 0x58
- adds r0, r5, 0
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801679C
- adds r0, r2, 0
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801679C
- ldr r0, _080167B0 @ =gBankTarget
- strb r5, [r0]
- ldr r2, _080167B4 @ =gBattleMoveDamage
- ldrb r0, [r6]
- muls r0, r1
- adds r0, r3
- ldrh r0, [r0, 0x2C]
- lsrs r0, 3
- str r0, [r2]
- cmp r0, 0
- bne _0801677C
- movs r0, 0x1
- str r0, [r2]
-_0801677C:
- ldr r1, _080167B8 @ =0x02000000
- ldr r7, _080167BC @ =0x000160a4
- adds r0, r1, r7
- strb r5, [r0]
- ldrb r0, [r4]
- ldr r2, _080167C0 @ =0x000160a5
- adds r1, r2
- strb r0, [r1]
- ldr r0, _080167C4 @ =gUnknown_081D904B
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801679C:
- ldr r1, _080167B8 @ =0x02000000
- movs r3, 0xB0
- lsls r3, 9
- adds r1, r3
- bl _08017072
- .align 2, 0
-_080167A8: .4byte gStatuses3
-_080167AC: .4byte gBattleMons
-_080167B0: .4byte gBankTarget
-_080167B4: .4byte gBattleMoveDamage
-_080167B8: .4byte 0x02000000
-_080167BC: .4byte 0x000160a4
-_080167C0: .4byte 0x000160a5
-_080167C4: .4byte gUnknown_081D904B
-_080167C8:
- ldr r2, _08016818 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0801680A
- adds r1, r3, r2
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _0801680A
- ldr r2, _0801681C @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 3
- str r0, [r2]
- cmp r0, 0
- bne _080167FA
- movs r0, 0x1
- str r0, [r2]
-_080167FA:
- ldr r0, _08016820 @ =gUnknown_081D9518
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801680A:
- ldr r1, _08016824 @ =0x02000000
- movs r5, 0xB0
- lsls r5, 9
- adds r1, r5
- bl _08017072
- .align 2, 0
-_08016818: .4byte gBattleMons
-_0801681C: .4byte gBattleMoveDamage
-_08016820: .4byte gUnknown_081D9518
-_08016824: .4byte 0x02000000
-_08016828:
- ldr r4, _080168B0 @ =gBattleMons
- ldrb r0, [r6]
- movs r7, 0x58
- mov r8, r7
- mov r2, r8
- muls r2, r0
- adds r3, r4, 0
- adds r3, 0x4C
- adds r0, r2, r3
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080168A2
- adds r1, r2, r4
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _080168A2
- ldr r5, _080168B4 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 4
- str r0, [r5]
- cmp r0, 0
- bne _0801685C
- movs r0, 0x1
- str r0, [r5]
-_0801685C:
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r2, r0, r3
- ldr r1, [r2]
- movs r4, 0xF0
- lsls r4, 4
- adds r0, r1, 0
- ands r0, r4
- cmp r0, r4
- beq _0801687C
- movs r7, 0x80
- lsls r7, 1
- adds r0, r1, r7
- str r0, [r2]
-_0801687C:
- ldrb r0, [r6]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r3
- ldr r0, [r0]
- ands r0, r4
- lsrs r0, 8
- ldr r1, [r5]
- muls r0, r1
- str r0, [r5]
- ldr r0, _080168B8 @ =gUnknown_081D9518
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080168A2:
- ldr r1, _080168BC @ =0x02000000
- movs r2, 0xB0
- lsls r2, 9
- adds r1, r2
- bl _08017072
- .align 2, 0
-_080168B0: .4byte gBattleMons
-_080168B4: .4byte gBattleMoveDamage
-_080168B8: .4byte gUnknown_081D9518
-_080168BC: .4byte 0x02000000
-_080168C0:
- ldr r2, _0801690C @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08016902
- adds r1, r3, r2
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _08016902
- ldr r2, _08016910 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 3
- str r0, [r2]
- cmp r0, 0
- bne _080168F2
- movs r0, 0x1
- str r0, [r2]
-_080168F2:
- ldr r0, _08016914 @ =gUnknown_081D953A
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016902:
- ldr r1, _08016918 @ =0x02000000
- movs r3, 0xB0
- lsls r3, 9
- adds r1, r3
- b _08017072
- .align 2, 0
-_0801690C: .4byte gBattleMons
-_08016910: .4byte gBattleMoveDamage
-_08016914: .4byte gUnknown_081D953A
-_08016918: .4byte 0x02000000
-_0801691C:
- ldr r2, _0801696C @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 20
- ands r0, r1
- cmp r0, 0
- beq _08016960
- adds r1, r3, r2
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _08016960
- ldr r2, _08016970 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 2
- str r0, [r2]
- cmp r0, 0
- bne _08016950
- movs r0, 0x1
- str r0, [r2]
-_08016950:
- ldr r0, _08016974 @ =gUnknown_081D9613
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016960:
- ldr r1, _08016978 @ =0x02000000
- movs r5, 0xB0
- lsls r5, 9
- adds r1, r5
- b _08017072
- .align 2, 0
-_0801696C: .4byte gBattleMons
-_08016970: .4byte gBattleMoveDamage
-_08016974: .4byte gUnknown_081D9613
-_08016978: .4byte 0x02000000
-_0801697C:
- ldr r2, _080169CC @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- adds r3, r1, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 21
- ands r0, r1
- cmp r0, 0
- beq _080169C0
- adds r1, r3, r2
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _080169C0
- ldr r2, _080169D0 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 2
- str r0, [r2]
- cmp r0, 0
- bne _080169B0
- movs r0, 0x1
- str r0, [r2]
-_080169B0:
- ldr r0, _080169D4 @ =gUnknown_081D9624
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_080169C0:
- ldr r1, _080169D8 @ =0x02000000
- movs r7, 0xB0
- lsls r7, 9
- adds r1, r7
- b _08017072
- .align 2, 0
-_080169CC: .4byte gBattleMons
-_080169D0: .4byte gBattleMoveDamage
-_080169D4: .4byte gUnknown_081D9624
-_080169D8: .4byte 0x02000000
-_080169DC:
- ldr r0, _08016A8C @ =gBattleMons
- mov r8, r0
- ldrb r0, [r6]
- movs r1, 0x58
- mov r10, r1
- mov r1, r10
- muls r1, r0
- mov r5, r8
- adds r5, 0x50
- adds r3, r1, r5
- ldr r2, [r3]
- movs r4, 0xE0
- lsls r4, 8
- adds r0, r2, 0
- ands r0, r4
- cmp r0, 0
- beq _08016AF6
- mov r7, r8
- adds r0, r1, r7
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08016AF6
- ldr r1, _08016A90 @ =0xffffe000
- adds r0, r2, r1
- str r0, [r3]
- ldrb r1, [r6]
- mov r0, r10
- muls r0, r1
- adds r0, r5
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _08016AB4
- ldr r2, _08016A94 @ =0x02000000
- lsls r0, r1, 1
- ldr r4, _08016A98 @ =0x00016004
- adds r0, r4
- adds r0, r2
- ldrb r1, [r0]
- ldr r3, _08016A9C @ =0x000160a4
- adds r0, r2, r3
- strb r1, [r0]
- ldrb r0, [r6]
- lsls r0, 1
- subs r3, 0x9F
- adds r0, r3
- adds r0, r2
- ldrb r1, [r0]
- ldr r5, _08016AA0 @ =0x000160a5
- adds r0, r2, r5
- strb r1, [r0]
- ldr r1, _08016AA4 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r4
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r3
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08016AA8 @ =gBattlescriptCurrInstr
- ldr r0, _08016AAC @ =gUnknown_081D95E2
- str r0, [r1]
- ldr r2, _08016AB0 @ =gBattleMoveDamage
- ldrb r0, [r6]
- mov r7, r10
- muls r7, r0
- adds r0, r7, 0
- add r0, r8
- ldrh r0, [r0, 0x2C]
- lsrs r0, 4
- str r0, [r2]
- cmp r0, 0
- bne _08016AE6
- movs r0, 0x1
- str r0, [r2]
- b _08016AE6
- .align 2, 0
-_08016A8C: .4byte gBattleMons
-_08016A90: .4byte 0xffffe000
-_08016A94: .4byte 0x02000000
-_08016A98: .4byte 0x00016004
-_08016A9C: .4byte 0x000160a4
-_08016AA0: .4byte 0x000160a5
-_08016AA4: .4byte gBattleTextBuff1
-_08016AA8: .4byte gBattlescriptCurrInstr
-_08016AAC: .4byte gUnknown_081D95E2
-_08016AB0: .4byte gBattleMoveDamage
-_08016AB4:
- ldr r1, _08016B00 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- ldr r2, _08016B04 @ =0x02000000
- ldrb r0, [r6]
- lsls r0, 1
- ldr r3, _08016B08 @ =0x00016004
- adds r0, r3
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- ldrb r0, [r6]
- lsls r0, 1
- ldr r5, _08016B0C @ =0x00016005
- adds r0, r5
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08016B10 @ =gBattlescriptCurrInstr
- ldr r0, _08016B14 @ =gUnknown_081D95F4
- str r0, [r1]
-_08016AE6:
- ldr r0, [r1]
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016AF6:
- ldr r1, _08016B04 @ =0x02000000
- movs r7, 0xB0
- lsls r7, 9
- adds r1, r7
- b _08017072
- .align 2, 0
-_08016B00: .4byte gBattleTextBuff1
-_08016B04: .4byte 0x02000000
-_08016B08: .4byte 0x00016004
-_08016B0C: .4byte 0x00016005
-_08016B10: .4byte gBattlescriptCurrInstr
-_08016B14: .4byte gUnknown_081D95F4
-_08016B18:
- movs r0, 0x8
- negs r0, r0
- ands r4, r0
- str r4, [r2]
- ldrb r0, [r6]
- mov r2, r8
- muls r2, r0
- mov r0, r10
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08016B68 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r1, _08016B6C @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- ldr r0, _08016B70 @ =gUnknown_081D950F
- bl b_call_bc_move_exec
- ldr r4, _08016B74 @ =gActiveBank
- ldrb r0, [r6]
- strb r0, [r4]
- ldrb r0, [r4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _08016BE0
- .align 2, 0
-_08016B68: .4byte 0xf7ffffff
-_08016B6C: .4byte gBattleCommunication
-_08016B70: .4byte gUnknown_081D950F
-_08016B74: .4byte gActiveBank
-_08016B78:
- ldr r2, _08016BF4 @ =gBattleMons
- ldrb r1, [r6]
- movs r0, 0x58
- muls r0, r1
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x70
- ands r1, r0
- adds r7, r2, 0
- cmp r1, 0
- beq _08016C82
- movs r0, 0
- strb r0, [r4]
- mov r2, r8
- ldrb r1, [r2]
- cmp r1, 0
- beq _08016BE0
- mov r10, r7
- adds r6, r4, 0
- movs r3, 0x58
- mov r8, r3
- movs r5, 0x4C
- adds r5, r7
- mov r9, r5
- str r1, [sp, 0x4]
- movs r0, 0x7
- mov r12, r0
-_08016BB2:
- ldrb r1, [r6]
- mov r3, r8
- muls r3, r1
- mov r5, r9
- adds r2, r3, r5
- ldr r4, [r2]
- adds r0, r4, 0
- mov r5, r12
- ands r0, r5
- cmp r0, 0
- beq _08016BD2
- adds r0, r3, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2B
- bne _08016B18
-_08016BD2:
- adds r0, r1, 0x1
- strb r0, [r6]
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp, 0x4]
- cmp r0, r1
- bcc _08016BB2
-_08016BE0:
- ldr r2, _08016BF8 @ =gBankAttacker
- ldr r1, _08016BFC @ =gNoOfAllBanks
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- beq _08016C00
- movs r2, 0x2
- mov r9, r2
- b _0801707E
- .align 2, 0
-_08016BF4: .4byte gBattleMons
-_08016BF8: .4byte gBankAttacker
-_08016BFC: .4byte gNoOfAllBanks
-_08016C00:
- ldr r5, _08016C38 @ =gActiveBank
- ldrb r0, [r5]
- strb r0, [r2]
- ldr r2, _08016C3C @ =gBattleMons
- ldrb r0, [r5]
- movs r7, 0x58
- adds r1, r0, 0
- muls r1, r7
- adds r6, r2, 0
- adds r6, 0x50
- adds r1, r6
- ldr r0, [r1]
- subs r0, 0x10
- str r0, [r1]
- ldrb r0, [r5]
- bl sub_8015660
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _08016C44
- ldrb r0, [r5]
- bl CancelMultiTurnMoves
- ldr r1, _08016C40 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- b _08016C78
- .align 2, 0
-_08016C38: .4byte gActiveBank
-_08016C3C: .4byte gBattleMons
-_08016C40: .4byte gBattleCommunication
-_08016C44:
- ldrb r3, [r5]
- adds r0, r3, 0
- muls r0, r7
- adds r2, r0, r6
- ldr r0, [r2]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- beq _08016C6C
- ldr r0, _08016C68 @ =gBattleCommunication
- strb r4, [r0, 0x5]
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 5
- orrs r0, r1
- str r0, [r2]
- b _08016C78
- .align 2, 0
-_08016C68: .4byte gBattleCommunication
-_08016C6C:
- ldr r1, _08016C94 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- adds r0, r3, 0
- bl CancelMultiTurnMoves
-_08016C78:
- ldr r0, _08016C98 @ =gUnknown_081D957E
- bl b_call_bc_move_exec
- movs r3, 0x1
- mov r9, r3
-_08016C82:
- mov r5, r9
- cmp r5, 0x2
- bne _08016C8A
- b _08017078
-_08016C8A:
- ldr r1, _08016C9C @ =0x02000000
- movs r7, 0xB0
- lsls r7, 9
- adds r1, r7
- b _08017072
- .align 2, 0
-_08016C94: .4byte gBattleCommunication
-_08016C98: .4byte gUnknown_081D957E
-_08016C9C: .4byte 0x02000000
-_08016CA0:
- ldr r1, _08016CD8 @ =gBattleMons
- ldrb r0, [r6]
- movs r7, 0x58
- muls r0, r7
- adds r5, r1, 0
- adds r5, 0x50
- adds r2, r0, r5
- ldr r1, [r2]
- movs r4, 0xC0
- lsls r4, 4
- adds r0, r1, 0
- ands r0, r4
- cmp r0, 0
- beq _08016D3C
- ldr r3, _08016CDC @ =0xfffffc00
- adds r0, r1, r3
- str r0, [r2]
- ldrb r0, [r6]
- bl sub_8015660
- lsls r0, 24
- cmp r0, 0
- beq _08016CE0
- ldrb r0, [r6]
- bl CancelMultiTurnMoves
- b _08016D3C
- .align 2, 0
-_08016CD8: .4byte gBattleMons
-_08016CDC: .4byte 0xfffffc00
-_08016CE0:
- ldrb r0, [r6]
- muls r0, r7
- adds r2, r0, r5
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r4
- cmp r0, 0
- bne _08016D3C
- movs r0, 0x80
- lsls r0, 5
- ands r0, r1
- cmp r0, 0
- beq _08016D3C
- ldr r0, _08016D48 @ =0xffffefff
- ands r1, r0
- str r1, [r2]
- ldrb r0, [r6]
- muls r0, r7
- adds r0, r5
- ldr r0, [r0]
- movs r4, 0x7
- ands r0, r4
- cmp r0, 0
- bne _08016D3C
- ldr r1, _08016D4C @ =gBattleCommunication
- movs r0, 0x47
- strb r0, [r1, 0x3]
- movs r0, 0x1
- movs r1, 0
- bl SetMoveEffect
- ldrb r0, [r6]
- muls r0, r7
- adds r0, r5
- ldr r0, [r0]
- ands r0, r4
- cmp r0, 0
- beq _08016D32
- ldr r0, _08016D50 @ =gUnknown_081D9587
- bl b_call_bc_move_exec
-_08016D32:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016D3C:
- ldr r1, _08016D54 @ =0x02000000
- movs r5, 0xB0
- lsls r5, 9
- adds r1, r5
- b _08017072
- .align 2, 0
-_08016D48: .4byte 0xffffefff
-_08016D4C: .4byte gBattleCommunication
-_08016D50: .4byte gUnknown_081D9587
-_08016D54: .4byte 0x02000000
-_08016D58:
- ldr r0, _08016DD4 @ =gDisableStructs
- ldrb r3, [r6]
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r5, r1, r0
- ldrb r1, [r5, 0xB]
- lsls r1, 28
- adds r7, r0, 0
- cmp r1, 0
- beq _08016E1E
- movs r4, 0
- ldr r2, _08016DD8 @ =gBattleMons
- movs r0, 0x58
- adds r1, r3, 0
- muls r1, r0
- adds r2, 0xC
- adds r1, r2
- ldrh r0, [r5, 0x4]
- ldrh r1, [r1]
- cmp r0, r1
- beq _08016DAC
- mov r12, r7
- mov r8, r2
- adds r5, r6, 0
- movs r3, 0x58
-_08016D8C:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08016DAC
- ldrb r2, [r5]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- add r1, r12
- lsls r0, r4, 1
- muls r2, r3
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x4]
- ldrh r0, [r0]
- cmp r1, r0
- bne _08016D8C
-_08016DAC:
- cmp r4, 0x4
- bne _08016DDC
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- movs r1, 0
- strh r1, [r0, 0x4]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r1, 0xB]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0xB]
- b _08016E1E
- .align 2, 0
-_08016DD4: .4byte gDisableStructs
-_08016DD8: .4byte gBattleMons
-_08016DDC:
- ldrb r0, [r6]
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- adds r2, r7
- ldrb r3, [r2, 0xB]
- lsls r1, r3, 28
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0xB]
- adds r2, r1, 0
- cmp r2, 0
- bne _08016E1E
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r7
- strh r2, [r0, 0x4]
- ldr r0, _08016E28 @ =gUnknown_081D9148
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016E1E:
- ldr r1, _08016E2C @ =0x02000000
- movs r7, 0xB0
- lsls r7, 9
- adds r1, r7
- b _08017072
- .align 2, 0
-_08016E28: .4byte gUnknown_081D9148
-_08016E2C: .4byte 0x02000000
-_08016E30:
- ldr r3, _08016E7C @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r2, r0, r3
- ldrb r5, [r2, 0xE]
- lsls r4, r5, 28
- cmp r4, 0
- beq _08016EE8
- ldr r0, _08016E80 @ =gBattleMons
- mov r8, r0
- ldrb r0, [r2, 0xC]
- lsls r0, 1
- movs r7, 0x58
- muls r1, r7
- adds r0, r1
- mov r1, r8
- adds r1, 0xC
- adds r0, r1
- ldrh r0, [r0]
- ldrh r1, [r2, 0x6]
- cmp r0, r1
- beq _08016E84
- movs r0, 0
- strh r0, [r2, 0x6]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0xE]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0xE]
- b _08016EE8
- .align 2, 0
-_08016E7C: .4byte gDisableStructs
-_08016E80: .4byte gBattleMons
-_08016E84:
- lsrs r1, r4, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r4, 0x10
- negs r4, r4
- adds r0, r4, 0
- ands r0, r5
- orrs r0, r1
- strb r0, [r2, 0xE]
- cmp r1, 0
- beq _08016EB8
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- muls r1, r7
- ldrb r0, [r0, 0xC]
- adds r1, r0
- mov r0, r8
- adds r0, 0x24
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- bne _08016EE8
-_08016EB8:
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x6]
- ldrb r0, [r6]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0xE]
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0xE]
- ldr r0, _08016EF4 @ =gUnknown_081D914F
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08016EE8:
- ldr r1, _08016EF8 @ =0x02000000
- movs r2, 0xB0
- lsls r2, 9
- adds r1, r2
- b _08017072
- .align 2, 0
-_08016EF4: .4byte gUnknown_081D914F
-_08016EF8: .4byte 0x02000000
-_08016EFC:
- ldr r0, _08016F1C @ =gStatuses3
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x18
- ands r0, r2
- cmp r0, 0
- beq _08016F14
- adds r0, r2, 0
- subs r0, 0x8
- str r0, [r1]
-_08016F14:
- movs r1, 0xB0
- lsls r1, 9
- b _08017070
- .align 2, 0
-_08016F1C: .4byte gStatuses3
-_08016F20:
- ldr r2, _08016F60 @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r3, r0, r2
- ldrb r2, [r3, 0x12]
- lsls r1, r2, 28
- cmp r1, 0
- beq _08016F5A
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x12]
- cmp r1, 0
- bne _08016F5A
- ldr r0, _08016F64 @ =gStatuses3
- ldrb r2, [r6]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08016F68 @ =0xfffffdff
- ands r0, r1
- str r0, [r2]
-_08016F5A:
- movs r1, 0xB0
- lsls r1, 9
- b _08017070
- .align 2, 0
-_08016F60: .4byte gDisableStructs
-_08016F64: .4byte gStatuses3
-_08016F68: .4byte 0xfffffdff
-_08016F6C:
- ldr r2, _08016F98 @ =gDisableStructs
- ldrb r1, [r6]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r3, r0, r2
- ldrb r2, [r3, 0x13]
- lsls r1, r2, 28
- cmp r1, 0
- beq _08016F92
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x13]
-_08016F92:
- movs r1, 0xB0
- lsls r1, 9
- b _08017070
- .align 2, 0
-_08016F98: .4byte gDisableStructs
-_08016F9C:
- ldr r4, _0801704C @ =gStatuses3
- ldrb r0, [r6]
- lsls r0, 2
- adds r2, r0, r4
- ldr r1, [r2]
- movs r3, 0xC0
- lsls r3, 5
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _08017042
- ldr r5, _08017050 @ =0xfffff800
- adds r0, r1, r5
- str r0, [r2]
- ldrb r2, [r6]
- lsls r0, r2, 2
- adds r0, r4
- ldr r0, [r0]
- ands r0, r3
- cmp r0, 0
- bne _08017042
- ldr r3, _08017054 @ =gBattleMons
- movs r5, 0x58
- adds r1, r2, 0
- muls r1, r5
- adds r4, r3, 0
- adds r4, 0x4C
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08017042
- adds r0, r1, r3
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x48
- beq _08017042
- cmp r0, 0xF
- beq _08017042
- adds r0, r2, 0
- bl sub_8025A44
- lsls r0, 24
- cmp r0, 0
- bne _08017042
- ldrb r0, [r6]
- bl CancelMultiTurnMoves
- bl Random
- ldrb r1, [r6]
- adds r2, r1, 0
- muls r2, r5
- adds r2, r4
- movs r1, 0x3
- ands r1, r0
- adds r1, 0x2
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r6]
- bl MarkBufferBankForExecution
- ldr r1, _08017058 @ =gEffectBank
- ldrb r0, [r6]
- strb r0, [r1]
- ldr r0, _0801705C @ =gUnknown_081D964C
- bl b_call_bc_move_exec
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08017042:
- ldr r1, _08017060 @ =0x02000000
- movs r7, 0xB0
- lsls r7, 9
- adds r1, r7
- b _08017072
- .align 2, 0
-_0801704C: .4byte gStatuses3
-_08017050: .4byte 0xfffff800
-_08017054: .4byte gBattleMons
-_08017058: .4byte gEffectBank
-_0801705C: .4byte gUnknown_081D964C
-_08017060: .4byte 0x02000000
-_08017064:
- movs r1, 0xB0
- lsls r1, 9
- add r1, r10
- movs r0, 0
- strb r0, [r1]
- ldr r1, _08017084 @ =0x00016001
-_08017070:
- add r1, r10
-_08017072:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08017078:
- mov r0, r9
- cmp r0, 0
- beq _08017088
-_0801707E:
- mov r0, r9
- b _080170B8
- .align 2, 0
-_08017084: .4byte 0x00016001
-_08017088:
- ldr r7, _080170C8 @ =0x02000000
- ldr r2, _080170CC @ =0x00016001
- adds r0, r7, r2
- ldr r1, _080170D0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- mov r10, r7
- mov r8, r1
- ldrb r1, [r1]
- cmp r0, r1
- bcs _080170AC
- movs r3, 0xB0
- lsls r3, 9
- adds r0, r7, r3
- ldrb r0, [r0]
- cmp r0, 0x13
- bhi _080170AC
- bl _08016580
-_080170AC:
- ldr r0, _080170D4 @ =gHitMarker
- ldr r1, [r0]
- ldr r2, _080170D8 @ =0xfeffffdf
- ands r1, r2
- str r1, [r0]
- movs r0, 0
-_080170B8:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080170C8: .4byte 0x02000000
-_080170CC: .4byte 0x00016001
-_080170D0: .4byte gNoOfAllBanks
-_080170D4: .4byte gHitMarker
-_080170D8: .4byte 0xfeffffdf
- thumb_func_end TurnBasedEffects
-
- thumb_func_start sub_80170DC
-sub_80170DC: @ 80170DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r2, _08017108 @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0801710C @ =0x01000020
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08017110 @ =0x02000000
- ldr r3, _08017114 @ =0x00016110
- adds r0, r1, r3
- ldrb r0, [r0]
- mov r8, r1
- cmp r0, 0
- beq _08017118
- cmp r0, 0x1
- bne _08017104
- b _08017258
-_08017104:
- b _08017380
- .align 2, 0
-_08017108: .4byte gHitMarker
-_0801710C: .4byte 0x01000020
-_08017110: .4byte 0x02000000
-_08017114: .4byte 0x00016110
-_08017118:
- ldr r2, _0801715C @ =0x00016111
- add r2, r8
- ldr r0, _08017160 @ =gNoOfAllBanks
- ldrb r1, [r2]
- mov r9, r0
- ldrb r0, [r0]
- cmp r1, r0
- bcc _0801712A
- b _08017248
-_0801712A:
- ldr r4, _08017164 @ =gActiveBank
- adds r5, r2, 0
- ldr r1, _08017168 @ =gWishFutureKnock
- mov r12, r1
- movs r2, 0x8
- add r2, r12
- mov r10, r2
- mov r7, r12
- adds r7, 0x18
- ldr r6, _0801716C @ =gBattleTextBuff1
-_0801713E:
- ldrb r3, [r5]
- strb r3, [r4]
- ldr r0, _08017170 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _08017174 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08017178
- adds r0, r3, 0x1
- strb r0, [r5]
- b _0801723C
- .align 2, 0
-_0801715C: .4byte 0x00016111
-_08017160: .4byte gNoOfAllBanks
-_08017164: .4byte gActiveBank
-_08017168: .4byte gWishFutureKnock
-_0801716C: .4byte gBattleTextBuff1
-_08017170: .4byte gAbsentBankFlags
-_08017174: .4byte gBitTable
-_08017178:
- adds r0, r3, 0x1
- strb r0, [r5]
- ldr r1, _080171B4 @ =gWishFutureKnock
- ldrb r0, [r4]
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- beq _0801723C
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- bne _0801723C
- ldr r1, _080171B8 @ =gBattleMons
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801723C
- lsls r0, r2, 1
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, 0xF8
- bne _080171C0
- ldr r0, _080171BC @ =gBattleCommunication
- strb r3, [r0, 0x5]
- b _080171C6
- .align 2, 0
-_080171B4: .4byte gWishFutureKnock
-_080171B8: .4byte gBattleMons
-_080171BC: .4byte gBattleCommunication
-_080171C0:
- ldr r1, _08017220 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_080171C6:
- movs r0, 0xFD
- strb r0, [r6]
- movs r0, 0x2
- strb r0, [r6, 0x1]
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- strb r0, [r6, 0x2]
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- lsrs r0, 8
- strb r0, [r6, 0x3]
- movs r0, 0xFF
- strb r0, [r6, 0x4]
- ldr r3, _08017224 @ =gBankTarget
- ldrb r0, [r4]
- strb r0, [r3]
- ldr r1, _08017228 @ =gBankAttacker
- mov r0, r12
- adds r0, 0x4
- ldrb r2, [r4]
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, _0801722C @ =gBattleMoveDamage
- ldrb r0, [r4]
- lsls r0, 2
- add r0, r10
- ldr r0, [r0]
- str r0, [r1]
- ldr r2, _08017230 @ =gSpecialStatuses
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r0, r2
- ldr r1, _08017234 @ =0x0000ffff
- str r1, [r0]
- ldr r0, _08017238 @ =gUnknown_081D92D7
- b _08017364
- .align 2, 0
-_08017220: .4byte gBattleCommunication
-_08017224: .4byte gBankTarget
-_08017228: .4byte gBankAttacker
-_0801722C: .4byte gBattleMoveDamage
-_08017230: .4byte gSpecialStatuses
-_08017234: .4byte 0x0000ffff
-_08017238: .4byte gUnknown_081D92D7
-_0801723C:
- ldrb r0, [r5]
- mov r3, r9
- ldrb r3, [r3]
- cmp r0, r3
- bcs _08017248
- b _0801713E
-_08017248:
- ldr r1, _0801729C @ =0x00016110
- add r1, r8
- movs r2, 0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _080172A0 @ =0x00016111
- add r0, r8
- strb r2, [r0]
-_08017258:
- ldr r2, _080172A0 @ =0x00016111
- add r2, r8
- ldr r0, _080172A4 @ =gNoOfAllBanks
- ldrb r1, [r2]
- mov r9, r0
- ldrb r0, [r0]
- cmp r1, r0
- bcc _0801726A
- b _08017380
-_0801726A:
- ldr r5, _080172A8 @ =gActiveBank
- adds r3, r2, 0
- ldr r4, _080172AC @ =gBattleTextBuff1
- ldr r7, _080172B0 @ =gDisableStructs
-_08017272:
- ldr r2, _080172B4 @ =gBankAttacker
- ldr r1, _080172B8 @ =gTurnOrder
- ldrb r0, [r3]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- strb r0, [r5]
- ldr r0, _080172BC @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _080172C0 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _080172C4
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- b _08017374
- .align 2, 0
-_0801729C: .4byte 0x00016110
-_080172A0: .4byte 0x00016111
-_080172A4: .4byte gNoOfAllBanks
-_080172A8: .4byte gActiveBank
-_080172AC: .4byte gBattleTextBuff1
-_080172B0: .4byte gDisableStructs
-_080172B4: .4byte gBankAttacker
-_080172B8: .4byte gTurnOrder
-_080172BC: .4byte gAbsentBankFlags
-_080172C0: .4byte gBitTable
-_080172C4:
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- ldr r6, _08017334 @ =gStatuses3
- ldrb r2, [r5]
- lsls r0, r2, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08017374
- movs r0, 0xFD
- strb r0, [r4]
- movs r0, 0x1
- strb r0, [r4, 0x1]
- strb r0, [r4, 0x2]
- strb r0, [r4, 0x3]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0, 0xF]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r4, 0x4]
- movs r0, 0xFF
- strb r0, [r4, 0x5]
- ldrb r2, [r5]
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r4, r0, r7
- ldrb r3, [r4, 0xF]
- lsls r1, r3, 28
- cmp r1, 0
- bne _08017348
- lsls r2, 2
- adds r2, r6
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldr r3, _08017338 @ =gBattleMoveDamage
- ldr r2, _0801733C @ =gBattleMons
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- str r0, [r3]
- ldr r1, _08017340 @ =gBattlescriptCurrInstr
- ldr r0, _08017344 @ =gUnknown_081D9202
- b _08017360
- .align 2, 0
-_08017334: .4byte gStatuses3
-_08017338: .4byte gBattleMoveDamage
-_0801733C: .4byte gBattleMons
-_08017340: .4byte gBattlescriptCurrInstr
-_08017344: .4byte gUnknown_081D9202
-_08017348:
- lsrs r1, 28
- subs r1, 0x1
- movs r0, 0xF
- ands r1, r0
- movs r2, 0x10
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4, 0xF]
- ldr r1, _0801736C @ =gBattlescriptCurrInstr
- ldr r0, _08017370 @ =gUnknown_081D921D
-_08017360:
- str r0, [r1]
- ldr r0, [r1]
-_08017364:
- bl b_call_bc_move_exec
- movs r0, 0x1
- b _0801738C
- .align 2, 0
-_0801736C: .4byte gBattlescriptCurrInstr
-_08017370: .4byte gUnknown_081D921D
-_08017374:
- ldrb r0, [r3]
- mov r1, r9
- ldrb r1, [r1]
- cmp r0, r1
- bcs _08017380
- b _08017272
-_08017380:
- ldr r2, _0801739C @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _080173A0 @ =0xfeffffdf
- ands r0, r1
- str r0, [r2]
- movs r0, 0
-_0801738C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801739C: .4byte gHitMarker
-_080173A0: .4byte 0xfeffffdf
- thumb_func_end sub_80170DC
-
- thumb_func_start sub_80173A4
-sub_80173A4: @ 80173A4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _080173C0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080173F8
- b _080176AC
- .align 2, 0
-_080173C0: .4byte gBattleTypeFlags
-_080173C4:
- ldr r0, _080173D4 @ =gUnknown_081D8C72
- bl b_call_bc_move_exec
- ldr r1, _080173D8 @ =0x00016059
- add r1, r10
- movs r0, 0x2
- b _080173E8
- .align 2, 0
-_080173D4: .4byte gUnknown_081D8C72
-_080173D8: .4byte 0x00016059
-_080173DC:
- ldr r0, _080173F0 @ =gUnknown_081D8C7B
- bl b_call_bc_move_exec
- ldr r1, _080173F4 @ =0x00016059
- add r1, r8
- movs r0, 0x5
-_080173E8:
- strb r0, [r1]
-_080173EA:
- movs r0, 0x1
- b _080176AE
- .align 2, 0
-_080173F0: .4byte gUnknown_081D8C7B
-_080173F4: .4byte 0x00016059
-_080173F8:
- ldr r0, _08017414 @ =0x02000000
- mov r9, r0
-_080173FC:
- ldr r0, _08017418 @ =0x00016059
- add r0, r9
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _08017408
- b _080176A0
-_08017408:
- lsls r0, 2
- ldr r1, _0801741C @ =_08017420
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08017414: .4byte 0x02000000
-_08017418: .4byte 0x00016059
-_0801741C: .4byte _08017420
- .align 2, 0
-_08017420:
- .4byte _08017440
- .4byte _08017490
- .4byte _08017534
- .4byte _0801757C
- .4byte _0801758E
- .4byte _080175FC
- .4byte _08017638
- .4byte _080176A0
-_08017440:
- ldr r1, _08017508 @ =0x0001605a
- add r1, r9
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0801750C @ =0x00016059
- add r1, r9
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r5, 0
- ldr r0, _08017510 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r5, r0
- bge _08017490
- ldr r6, _08017514 @ =gAbsentBankFlags
-_0801745E:
- ldrb r0, [r6]
- ldr r2, _08017518 @ =gBitTable
- lsls r1, r5, 2
- adds r1, r2
- ldr r4, [r1]
- ands r0, r4
- cmp r0, 0
- beq _08017486
- lsls r0, r5, 24
- lsrs r0, 24
- movs r1, 0x6
- movs r2, 0x6
- bl sub_8018018
- lsls r0, 24
- cmp r0, 0
- bne _08017486
- ldrb r0, [r6]
- bics r0, r4
- strb r0, [r6]
-_08017486:
- adds r5, 0x1
- ldr r0, _08017510 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r5, r0
- blt _0801745E
-_08017490:
- ldr r1, _0801751C @ =0x02000000
- mov r9, r1
- ldr r0, _08017520 @ =gBank1
- mov r12, r0
- ldr r1, _08017524 @ =gBankTarget
- mov r8, r1
- mov r10, r9
- ldr r5, _08017508 @ =0x0001605a
- add r5, r9
- ldr r7, _08017528 @ =gBattleMons
- ldr r6, _0801752C @ =0x00016113
- add r6, r9
-_080174A8:
- ldrb r0, [r5]
- mov r1, r8
- strb r0, [r1]
- mov r1, r12
- strb r0, [r1]
- ldrb r3, [r5]
- movs r0, 0x58
- muls r0, r3
- adds r0, r7
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _080174EA
- ldrb r2, [r6]
- ldr r4, _08017518 @ =gBitTable
- ldr r1, _08017530 @ =gBattlePartyID
- lsls r0, r3, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _080174EA
- ldr r0, _08017514 @ =gAbsentBankFlags
- ldrb r1, [r0]
- lsls r0, r3, 2
- adds r0, r4
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080174EA
- b _080173C4
-_080174EA:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- ldr r1, _08017510 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _080174A8
- ldr r1, _0801750C @ =0x00016059
- add r1, r9
- movs r0, 0x3
- strb r0, [r1]
- b _080176A0
- .align 2, 0
-_08017508: .4byte 0x0001605a
-_0801750C: .4byte 0x00016059
-_08017510: .4byte gNoOfAllBanks
-_08017514: .4byte gAbsentBankFlags
-_08017518: .4byte gBitTable
-_0801751C: .4byte 0x02000000
-_08017520: .4byte gBank1
-_08017524: .4byte gBankTarget
-_08017528: .4byte gBattleMons
-_0801752C: .4byte 0x00016113
-_08017530: .4byte gBattlePartyID
-_08017534:
- ldr r0, _0801755C @ =gBank1
- ldrb r0, [r0]
- bl sub_8015740
- ldr r2, _08017560 @ =0x02000000
- ldr r0, _08017564 @ =0x0001605a
- adds r1, r2, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r1, _08017568 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _08017570
- ldr r0, _0801756C @ =0x00016059
- adds r1, r2, r0
- movs r0, 0x3
- b _0801769C
- .align 2, 0
-_0801755C: .4byte gBank1
-_08017560: .4byte 0x02000000
-_08017564: .4byte 0x0001605a
-_08017568: .4byte gNoOfAllBanks
-_0801756C: .4byte 0x00016059
-_08017570:
- ldr r0, _08017578 @ =0x00016059
- adds r1, r2, r0
- movs r0, 0x1
- b _0801769C
- .align 2, 0
-_08017578: .4byte 0x00016059
-_0801757C:
- ldr r1, _080175D8 @ =0x0001605a
- add r1, r9
- movs r0, 0
- strb r0, [r1]
- ldr r1, _080175DC @ =0x00016059
- add r1, r9
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0801758E:
- ldr r7, _080175E0 @ =gBank1
- ldr r6, _080175E4 @ =gBankTarget
- ldr r1, _080175E8 @ =0x02000000
- mov r8, r1
- ldr r3, _080175D8 @ =0x0001605a
- add r3, r8
- ldr r5, _080175EC @ =gBattleMons
- ldr r4, _080175F0 @ =gBitTable
-_0801759E:
- ldrb r0, [r3]
- strb r0, [r6]
- strb r0, [r7]
- ldrb r2, [r3]
- movs r0, 0x58
- muls r0, r2
- adds r0, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _080175C4
- ldr r0, _080175F4 @ =gAbsentBankFlags
- ldrb r1, [r0]
- lsls r0, r2, 2
- adds r0, r4
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080175C4
- b _080173DC
-_080175C4:
- adds r0, r2, 0x1
- strb r0, [r3]
- ldr r1, _080175F8 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bne _0801759E
- b _08017612
- .align 2, 0
-_080175D8: .4byte 0x0001605a
-_080175DC: .4byte 0x00016059
-_080175E0: .4byte gBank1
-_080175E4: .4byte gBankTarget
-_080175E8: .4byte 0x02000000
-_080175EC: .4byte gBattleMons
-_080175F0: .4byte gBitTable
-_080175F4: .4byte gAbsentBankFlags
-_080175F8: .4byte gNoOfAllBanks
-_080175FC:
- ldr r0, _0801761C @ =0x0001605a
- add r0, r9
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r0, _08017620 @ =gNoOfAllBanks
- lsls r1, 24
- lsrs r1, 24
- ldrb r0, [r0]
- cmp r1, r0
- bne _08017628
-_08017612:
- ldr r1, _08017624 @ =0x00016059
- add r1, r9
- movs r0, 0x6
- strb r0, [r1]
- b _080176A0
- .align 2, 0
-_0801761C: .4byte 0x0001605a
-_08017620: .4byte gNoOfAllBanks
-_08017624: .4byte 0x00016059
-_08017628:
- ldr r1, _08017634 @ =0x00016059
- add r1, r9
- movs r0, 0x4
- strb r0, [r1]
- b _080176A0
- .align 2, 0
-_08017634: .4byte 0x00016059
-_08017638:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x9
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08017652
- b _080173EA
-_08017652:
- str r0, [sp]
- movs r0, 0xB
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08017668
- b _080173EA
-_08017668:
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x1
- bl ItemBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0801767C
- b _080173EA
-_0801767C:
- str r0, [sp]
- movs r0, 0x6
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08017692
- b _080173EA
-_08017692:
- ldr r2, _080176C0 @ =0x02000000
- ldr r0, _080176C4 @ =0x00016059
- adds r1, r2, r0
- ldrb r0, [r1]
- adds r0, 0x1
-_0801769C:
- strb r0, [r1]
- mov r9, r2
-_080176A0:
- ldr r0, _080176C4 @ =0x00016059
- add r0, r9
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _080176AC
- b _080173FC
-_080176AC:
- movs r0, 0
-_080176AE:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080176C0: .4byte 0x02000000
-_080176C4: .4byte 0x00016059
- thumb_func_end sub_80173A4
-
- thumb_func_start b_clear_atk_up_if_hit_flag_unless_enraged
-b_clear_atk_up_if_hit_flag_unless_enraged: @ 80176C8
- push {r4-r6,lr}
- movs r3, 0
- ldr r0, _08017708 @ =gNoOfAllBanks
- adds r5, r0, 0
- ldrb r0, [r5]
- cmp r3, r0
- bge _08017700
- ldr r4, _0801770C @ =gChosenMovesByBanks
- movs r6, 0x80
- lsls r6, 16
- ldr r2, _08017710 @ =gUnknown_02024AD0
-_080176DE:
- ldr r1, [r2]
- adds r0, r1, 0
- ands r0, r6
- cmp r0, 0
- beq _080176F4
- ldrh r0, [r4]
- cmp r0, 0x63
- beq _080176F4
- ldr r0, _08017714 @ =0xff7fffff
- ands r1, r0
- str r1, [r2]
-_080176F4:
- adds r4, 0x2
- adds r2, 0x58
- adds r3, 0x1
- ldrb r0, [r5]
- cmp r3, r0
- blt _080176DE
-_08017700:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08017708: .4byte gNoOfAllBanks
-_0801770C: .4byte gChosenMovesByBanks
-_08017710: .4byte gUnknown_02024AD0
-_08017714: .4byte 0xff7fffff
- thumb_func_end b_clear_atk_up_if_hit_flag_unless_enraged
-
- thumb_func_start CantUseMove
-CantUseMove: @ 8017718
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- movs r0, 0
- mov r9, r0
- ldr r1, _08017734 @ =0x02016090
- mov r10, r1
- ldr r2, _08017738 @ =0xfffe9f70
- add r2, r10
- mov r8, r2
- b _08017746
- .align 2, 0
-_08017734: .4byte 0x02016090
-_08017738: .4byte 0xfffe9f70
-_0801773C:
- mov r4, r9
- cmp r4, 0
- beq _08017746
- bl _08017FAC
-_08017746:
- ldr r0, _08017760 @ =0x000160e7
- add r0, r8
- ldrb r0, [r0]
- cmp r0, 0xE
- bls _08017754
- bl _08017F9E
-_08017754:
- lsls r0, 2
- ldr r1, _08017764 @ =_08017768
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08017760: .4byte 0x000160e7
-_08017764: .4byte _08017768
- .align 2, 0
-_08017768:
- .4byte _080177A4
- .4byte _080177E4
- .4byte _08017920
- .4byte _080179D8
- .4byte _08017A50
- .4byte _08017AC8
- .4byte _08017B1C
- .4byte _08017B98
- .4byte _08017C1C
- .4byte _08017C60
- .4byte _08017D3C
- .4byte _08017DC0
- .4byte _08017E5C
- .4byte _08017F48
- .4byte _08017F9E
-_080177A4:
- ldr r1, _080177D0 @ =gBattleMons
- ldr r3, _080177D4 @ =gBankAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, _080177D8 @ =0xfdffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _080177DC @ =gStatuses3
- ldrb r2, [r3]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _080177E0 @ =0xffffbfff
- ands r0, r1
- str r0, [r2]
- bl _08017F94
- .align 2, 0
-_080177D0: .4byte gBattleMons
-_080177D4: .4byte gBankAttacker
-_080177D8: .4byte 0xfdffffff
-_080177DC: .4byte gStatuses3
-_080177E0: .4byte 0xffffbfff
-_080177E4:
- ldr r7, _0801784C @ =gBattleMons
- ldr r4, _08017850 @ =gBankAttacker
- ldrb r1, [r4]
- movs r5, 0x58
- adds r0, r1, 0
- muls r0, r5
- adds r6, r7, 0
- adds r6, 0x4C
- adds r0, r6
- ldr r0, [r0]
- movs r2, 0x7
- mov r8, r2
- ands r0, r2
- cmp r0, 0
- bne _08017804
- b _08017D90
-_08017804:
- adds r0, r1, 0
- bl sub_8025A44
- lsls r0, 24
- cmp r0, 0
- beq _08017864
- ldrb r0, [r4]
- adds r2, r0, 0
- muls r2, r5
- adds r2, r6
- ldr r0, [r2]
- movs r1, 0x8
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldrb r0, [r4]
- adds r2, r0, 0
- muls r2, r5
- adds r0, r7, 0
- adds r0, 0x50
- adds r2, r0
- ldr r0, [r2]
- ldr r1, _08017854 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _08017858 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
- ldr r1, _0801785C @ =gBattlescriptCurrInstr
- ldr r0, _08017860 @ =gUnknown_081D94FB
- str r0, [r1]
- movs r4, 0x2
- mov r9, r4
- b _08017D90
- .align 2, 0
-_0801784C: .4byte gBattleMons
-_08017850: .4byte gBankAttacker
-_08017854: .4byte 0xf7ffffff
-_08017858: .4byte gBattleCommunication
-_0801785C: .4byte gBattlescriptCurrInstr
-_08017860: .4byte gUnknown_081D94FB
-_08017864:
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r5
- adds r0, r1, r7
- adds r0, 0x20
- ldrb r0, [r0]
- movs r3, 0x1
- cmp r0, 0x30
- bne _08017878
- movs r3, 0x2
-_08017878:
- adds r2, r1, r6
- ldr r1, [r2]
- adds r0, r1, 0
- mov r7, r8
- ands r0, r7
- cmp r0, r3
- bcs _08017890
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- b _08017894
-_08017890:
- subs r0, r1, r3
- str r0, [r2]
-_08017894:
- ldr r2, _080178D8 @ =gBattleMons
- ldr r0, _080178DC @ =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r1, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r4, [r0]
- movs r0, 0x7
- ands r4, r0
- cmp r4, 0
- beq _080178F0
- ldr r0, _080178E0 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xAD
- bne _080178B8
- b _08017D90
-_080178B8:
- cmp r0, 0xD6
- bne _080178BE
- b _08017D90
-_080178BE:
- ldr r1, _080178E4 @ =gBattlescriptCurrInstr
- ldr r0, _080178E8 @ =gUnknown_081D94EE
- str r0, [r1]
- ldr r2, _080178EC @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x2
- mov r9, r0
- b _08017D90
- .align 2, 0
-_080178D8: .4byte gBattleMons
-_080178DC: .4byte gBankAttacker
-_080178E0: .4byte gCurrentMove
-_080178E4: .4byte gBattlescriptCurrInstr
-_080178E8: .4byte gUnknown_081D94EE
-_080178EC: .4byte gHitMarker
-_080178F0:
- adds r2, 0x50
- adds r2, r1, r2
- ldr r0, [r2]
- ldr r1, _08017910 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r0, _08017914 @ =gBattleCommunication
- strb r4, [r0, 0x5]
- ldr r1, _08017918 @ =gBattlescriptCurrInstr
- ldr r0, _0801791C @ =gUnknown_081D94FB
- str r0, [r1]
- movs r1, 0x2
- b _08017D8E
- .align 2, 0
-_08017910: .4byte 0xf7ffffff
-_08017914: .4byte gBattleCommunication
-_08017918: .4byte gBattlescriptCurrInstr
-_0801791C: .4byte gUnknown_081D94FB
-_08017920:
- ldr r1, _0801797C @ =gBattleMons
- ldr r7, _08017980 @ =gBankAttacker
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- adds r5, r1, 0
- adds r5, 0x4C
- adds r0, r5
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801793C
- b _08017F94
-_0801793C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _080179A8
- ldr r2, _08017984 @ =gBattleMoves
- ldr r0, _08017988 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7D
- beq _08017998
- ldr r1, _0801798C @ =gBattlescriptCurrInstr
- ldr r0, _08017990 @ =gUnknown_081D9545
- str r0, [r1]
- ldr r2, _08017994 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 2
- orrs r0, r1
- str r0, [r2]
- b _080179C8
- .align 2, 0
-_0801797C: .4byte gBattleMons
-_08017980: .4byte gBankAttacker
-_08017984: .4byte gBattleMoves
-_08017988: .4byte gCurrentMove
-_0801798C: .4byte gBattlescriptCurrInstr
-_08017990: .4byte gUnknown_081D9545
-_08017994: .4byte gHitMarker
-_08017998:
- ldr r2, _080179A0 @ =0x02000000
- ldr r7, _080179A4 @ =0x000160e7
- adds r1, r2, r7
- b _08017D96
- .align 2, 0
-_080179A0: .4byte 0x02000000
-_080179A4: .4byte 0x000160e7
-_080179A8:
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r5
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _080179CC @ =gBattlescriptCurrInstr
- ldr r0, _080179D0 @ =gUnknown_081D9552
- str r0, [r1]
- ldr r0, _080179D4 @ =gBattleCommunication
- strb r4, [r0, 0x5]
-_080179C8:
- movs r0, 0x2
- b _08017E3C
- .align 2, 0
-_080179CC: .4byte gBattlescriptCurrInstr
-_080179D0: .4byte gUnknown_081D9552
-_080179D4: .4byte gBattleCommunication
-_080179D8:
- ldr r1, _08017A30 @ =gBattleMons
- ldr r0, _08017A34 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x36
- beq _080179EE
- b _08017D90
-_080179EE:
- ldr r0, _08017A38 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x18]
- lsls r0, 31
- cmp r0, 0
- bne _08017A02
- b _08017D90
-_08017A02:
- adds r0, r2, 0
- bl CancelMultiTurnMoves
- ldr r2, _08017A3C @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- ldr r1, _08017A40 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- ldr r1, _08017A44 @ =gBattlescriptCurrInstr
- ldr r0, _08017A48 @ =gUnknown_081D9977
- str r0, [r1]
- ldr r2, _08017A4C @ =gBattleMoveFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r2, 0x1
- mov r9, r2
- b _08017D90
- .align 2, 0
-_08017A30: .4byte gBattleMons
-_08017A34: .4byte gBankAttacker
-_08017A38: .4byte gDisableStructs
-_08017A3C: .4byte gHitMarker
-_08017A40: .4byte gBattleCommunication
-_08017A44: .4byte gBattlescriptCurrInstr
-_08017A48: .4byte gUnknown_081D9977
-_08017A4C: .4byte gBattleMoveFlags
-_08017A50:
- ldr r1, _08017AA4 @ =gBattleMons
- ldr r3, _08017AA8 @ =gBankAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 15
- ands r0, r1
- cmp r0, 0
- beq _08017A9C
- ldr r0, _08017AAC @ =0xffbfffff
- ands r1, r0
- str r1, [r2]
- ldr r2, _08017AB0 @ =gDisableStructs
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strb r1, [r0, 0x19]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _08017AB4 @ =gBattlescriptCurrInstr
- ldr r0, _08017AB8 @ =gUnknown_081D7956
- str r0, [r1]
- ldr r2, _08017ABC @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r7, 0x1
- mov r9, r7
-_08017A9C:
- ldr r2, _08017AC0 @ =0x02000000
- ldr r0, _08017AC4 @ =0x000160e7
- adds r1, r2, r0
- b _08017D96
- .align 2, 0
-_08017AA4: .4byte gBattleMons
-_08017AA8: .4byte gBankAttacker
-_08017AAC: .4byte 0xffbfffff
-_08017AB0: .4byte gDisableStructs
-_08017AB4: .4byte gBattlescriptCurrInstr
-_08017AB8: .4byte gUnknown_081D7956
-_08017ABC: .4byte gHitMarker
-_08017AC0: .4byte 0x02000000
-_08017AC4: .4byte 0x000160e7
-_08017AC8:
- ldr r1, _08017B08 @ =gBattleMons
- ldr r3, _08017B0C @ =gBankAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08017AE2
- b _08017D90
-_08017AE2:
- movs r0, 0x9
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- ldr r0, _08017B10 @ =gProtectStructs
- ldrb r2, [r3]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x2]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _08017B14 @ =gBattlescriptCurrInstr
- ldr r0, _08017B18 @ =gUnknown_081D9573
- b _08017D7E
- .align 2, 0
-_08017B08: .4byte gBattleMons
-_08017B0C: .4byte gBankAttacker
-_08017B10: .4byte gProtectStructs
-_08017B14: .4byte gBattlescriptCurrInstr
-_08017B18: .4byte gUnknown_081D9573
-_08017B1C:
- ldr r0, _08017B74 @ =gDisableStructs
- ldr r3, _08017B78 @ =gBankAttacker
- ldrb r2, [r3]
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldr r0, _08017B7C @ =gCurrentMove
- ldrh r1, [r1, 0x4]
- ldrh r0, [r0]
- cmp r1, r0
- beq _08017B36
- b _08017D90
-_08017B36:
- cmp r1, 0
- bne _08017B3C
- b _08017D90
-_08017B3C:
- ldr r0, _08017B80 @ =gProtectStructs
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldr r0, _08017B84 @ =0x02000000
- ldrb r1, [r3]
- ldr r7, _08017B88 @ =0x00016003
- adds r0, r7
- strb r1, [r0]
- ldrb r0, [r3]
- bl CancelMultiTurnMoves
- ldr r1, _08017B8C @ =gBattlescriptCurrInstr
- ldr r0, _08017B90 @ =gUnknown_081D9139
- str r0, [r1]
- ldr r2, _08017B94 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x1
- mov r9, r0
- b _08017D90
- .align 2, 0
-_08017B74: .4byte gDisableStructs
-_08017B78: .4byte gBankAttacker
-_08017B7C: .4byte gCurrentMove
-_08017B80: .4byte gProtectStructs
-_08017B84: .4byte 0x02000000
-_08017B88: .4byte 0x00016003
-_08017B8C: .4byte gBattlescriptCurrInstr
-_08017B90: .4byte gUnknown_081D9139
-_08017B94: .4byte gHitMarker
-_08017B98:
- ldr r0, _08017BF4 @ =gDisableStructs
- ldr r4, _08017BF8 @ =gBankAttacker
- ldrb r3, [r4]
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x13]
- lsls r0, 28
- cmp r0, 0
- beq _08017BEC
- ldr r2, _08017BFC @ =gBattleMoves
- ldr r0, _08017C00 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _08017BEC
- ldr r0, _08017C04 @ =gProtectStructs
- lsls r2, r3, 4
- adds r2, r0
- ldrb r0, [r2, 0x2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x2]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
- ldr r1, _08017C08 @ =gBattlescriptCurrInstr
- ldr r0, _08017C0C @ =gUnknown_081D938F
- str r0, [r1]
- ldr r2, _08017C10 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r7, 0x1
- mov r9, r7
-_08017BEC:
- ldr r2, _08017C14 @ =0x02000000
- ldr r0, _08017C18 @ =0x000160e7
- adds r1, r2, r0
- b _08017D96
- .align 2, 0
-_08017BF4: .4byte gDisableStructs
-_08017BF8: .4byte gBankAttacker
-_08017BFC: .4byte gBattleMoves
-_08017C00: .4byte gCurrentMove
-_08017C04: .4byte gProtectStructs
-_08017C08: .4byte gBattlescriptCurrInstr
-_08017C0C: .4byte gUnknown_081D938F
-_08017C10: .4byte gHitMarker
-_08017C14: .4byte 0x02000000
-_08017C18: .4byte 0x000160e7
-_08017C1C:
- ldr r4, _08017C4C @ =gBankAttacker
- ldrb r0, [r4]
- ldr r1, _08017C50 @ =gCurrentMove
- ldrh r1, [r1]
- bl sub_8015D5C
- lsls r0, 24
- cmp r0, 0
- bne _08017C30
- b _08017D90
-_08017C30:
- ldr r0, _08017C54 @ =gProtectStructs
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
- ldr r1, _08017C58 @ =gBattlescriptCurrInstr
- ldr r0, _08017C5C @ =gUnknown_081D9459
- b _08017D7E
- .align 2, 0
-_08017C4C: .4byte gBankAttacker
-_08017C50: .4byte gCurrentMove
-_08017C54: .4byte gProtectStructs
-_08017C58: .4byte gBattlescriptCurrInstr
-_08017C5C: .4byte gUnknown_081D9459
-_08017C60:
- ldr r7, _08017CAC @ =gBattleMons
- ldr r5, _08017CB0 @ =gBankAttacker
- ldrb r0, [r5]
- movs r6, 0x58
- muls r0, r6
- adds r4, r7, 0
- adds r4, 0x50
- adds r2, r0, r4
- ldr r1, [r2]
- movs r3, 0x7
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- bne _08017C7E
- b _08017F94
-_08017C7E:
- subs r0, r1, 0x1
- str r0, [r2]
- ldrb r0, [r5]
- muls r0, r6
- adds r0, r4
- ldr r0, [r0]
- ands r0, r3
- cmp r0, 0
- beq _08017D24
- bl Random
- movs r1, 0x1
- movs r2, 0x1
- ands r2, r0
- cmp r2, 0
- beq _08017CB8
- ldr r1, _08017CB4 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- bl b_movescr_stack_push_cursor
- b _08017D02
- .align 2, 0
-_08017CAC: .4byte gBattleMons
-_08017CB0: .4byte gBankAttacker
-_08017CB4: .4byte gBattleCommunication
-_08017CB8:
- ldr r0, _08017D08 @ =gBattleCommunication
- movs r4, 0x1
- strb r1, [r0, 0x5]
- ldr r1, _08017D0C @ =gBankTarget
- ldrb r0, [r5]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r7
- movs r0, 0x28
- str r0, [sp]
- str r2, [sp, 0x4]
- ldrb r0, [r5]
- str r0, [sp, 0x8]
- ldrb r0, [r5]
- str r0, [sp, 0xC]
- adds r0, r1, 0
- movs r2, 0x1
- movs r3, 0
- bl CalculateBaseDamage
- ldr r1, _08017D10 @ =gBattleMoveDamage
- str r0, [r1]
- ldr r0, _08017D14 @ =gProtectStructs
- ldrb r1, [r5]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- orrs r0, r4
- strb r0, [r1, 0x1]
- ldr r2, _08017D18 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
-_08017D02:
- ldr r1, _08017D1C @ =gBattlescriptCurrInstr
- ldr r0, _08017D20 @ =gUnknown_081D9595
- b _08017D2C
- .align 2, 0
-_08017D08: .4byte gBattleCommunication
-_08017D0C: .4byte gBankTarget
-_08017D10: .4byte gBattleMoveDamage
-_08017D14: .4byte gProtectStructs
-_08017D18: .4byte gHitMarker
-_08017D1C: .4byte gBattlescriptCurrInstr
-_08017D20: .4byte gUnknown_081D9595
-_08017D24:
- bl b_movescr_stack_push_cursor
- ldr r1, _08017D34 @ =gBattlescriptCurrInstr
- ldr r0, _08017D38 @ =gUnknown_081D95D4
-_08017D2C:
- str r0, [r1]
- movs r7, 0x1
- b _08017F8E
- .align 2, 0
-_08017D34: .4byte gBattlescriptCurrInstr
-_08017D38: .4byte gUnknown_081D95D4
-_08017D3C:
- ldr r1, _08017DA0 @ =gBattleMons
- ldr r4, _08017DA4 @ =gBankAttacker
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08017D90
- bl Random
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- cmp r1, 0
- bne _08017D90
- ldr r0, _08017DA8 @ =gProtectStructs
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
- ldr r1, _08017DAC @ =gBattlescriptCurrInstr
- ldr r0, _08017DB0 @ =gUnknown_081D9566
-_08017D7E:
- str r0, [r1]
- ldr r2, _08017DB4 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- movs r1, 0x1
-_08017D8E:
- mov r9, r1
-_08017D90:
- ldr r2, _08017DB8 @ =0x02000000
- ldr r4, _08017DBC @ =0x000160e7
- adds r1, r2, r4
-_08017D96:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r8, r2
- b _08017F9E
- .align 2, 0
-_08017DA0: .4byte gBattleMons
-_08017DA4: .4byte gBankAttacker
-_08017DA8: .4byte gProtectStructs
-_08017DAC: .4byte gBattlescriptCurrInstr
-_08017DB0: .4byte gUnknown_081D9566
-_08017DB4: .4byte gHitMarker
-_08017DB8: .4byte 0x02000000
-_08017DBC: .4byte 0x000160e7
-_08017DC0:
- ldr r1, _08017DFC @ =gBattleMons
- ldr r4, _08017E00 @ =gBankAttacker
- ldrb r2, [r4]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0xF0
- lsls r0, 12
- ands r1, r0
- cmp r1, 0
- bne _08017DDC
- b _08017F94
-_08017DDC:
- lsrs r0, r1, 16
- bl CountTrailingZeroBits
- ldr r1, _08017E04 @ =0x02000000
- ldr r7, _08017E08 @ =0x00016003
- adds r1, r7
- strb r0, [r1]
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08017E0C
- bl b_movescr_stack_push_cursor
- b _08017E34
- .align 2, 0
-_08017DFC: .4byte gBattleMons
-_08017E00: .4byte gBankAttacker
-_08017E04: .4byte 0x02000000
-_08017E08: .4byte 0x00016003
-_08017E0C:
- ldr r0, _08017E44 @ =gUnknown_081D9608
- bl b_movescr_stack_push
- ldr r2, _08017E48 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r2]
- ldr r0, _08017E4C @ =gProtectStructs
- ldrb r2, [r4]
- lsls r2, 4
- adds r2, r0
- ldrb r0, [r2, 0x1]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r4]
- bl CancelMultiTurnMoves
-_08017E34:
- ldr r1, _08017E50 @ =gBattlescriptCurrInstr
- ldr r0, _08017E54 @ =gUnknown_081D95FB
- str r0, [r1]
- movs r0, 0x1
-_08017E3C:
- mov r9, r0
- ldr r1, _08017E58 @ =0x02000000
- mov r8, r1
- b _08017F94
- .align 2, 0
-_08017E44: .4byte gUnknown_081D9608
-_08017E48: .4byte gHitMarker
-_08017E4C: .4byte gProtectStructs
-_08017E50: .4byte gBattlescriptCurrInstr
-_08017E54: .4byte gUnknown_081D95FB
-_08017E58: .4byte 0x02000000
-_08017E5C:
- ldr r1, _08017E98 @ =gBattleMons
- ldr r6, _08017E9C @ =gBankAttacker
- ldrb r0, [r6]
- movs r5, 0x58
- muls r0, r5
- adds r1, 0x50
- adds r3, r0, r1
- ldr r2, [r3]
- movs r4, 0xC0
- lsls r4, 2
- adds r0, r2, 0
- ands r0, r4
- cmp r0, 0
- bne _08017E7A
- b _08017F94
-_08017E7A:
- ldr r7, _08017EA0 @ =0xffffff00
- adds r0, r2, r7
- str r0, [r3]
- ldrb r0, [r6]
- muls r0, r5
- adds r1, r0, r1
- ldr r2, [r1]
- adds r0, r2, 0
- ands r0, r4
- cmp r0, 0
- beq _08017EAC
- ldr r1, _08017EA4 @ =gBattlescriptCurrInstr
- ldr r0, _08017EA8 @ =gUnknown_081D90A7
- b _08017F38
- .align 2, 0
-_08017E98: .4byte gBattleMons
-_08017E9C: .4byte gBankAttacker
-_08017EA0: .4byte 0xffffff00
-_08017EA4: .4byte gBattlescriptCurrInstr
-_08017EA8: .4byte gUnknown_081D90A7
-_08017EAC:
- ldr r0, _08017F0C @ =0xffffefff
- ands r2, r0
- str r2, [r1]
- ldr r2, _08017F10 @ =gTakenDmg
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, 0
- beq _08017F34
- ldr r1, _08017F14 @ =gCurrentMove
- movs r0, 0x75
- strh r0, [r1]
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- lsls r0, 1
- mov r1, r10
- str r0, [r1]
- ldr r4, _08017F18 @ =gBankTarget
- ldr r1, _08017F1C @ =gTakenDmgBanks
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r0, _08017F20 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _08017F24 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08017EFE
- movs r0, 0x75
- movs r1, 0x1
- bl sub_801B5C0
- strb r0, [r4]
-_08017EFE:
- ldr r1, _08017F28 @ =gBattlescriptCurrInstr
- ldr r0, _08017F2C @ =gUnknown_081D90B2
- str r0, [r1]
- ldr r2, _08017F30 @ =0x02000000
- mov r8, r2
- b _08017F3A
- .align 2, 0
-_08017F0C: .4byte 0xffffefff
-_08017F10: .4byte gTakenDmg
-_08017F14: .4byte gCurrentMove
-_08017F18: .4byte gBankTarget
-_08017F1C: .4byte gTakenDmgBanks
-_08017F20: .4byte gAbsentBankFlags
-_08017F24: .4byte gBitTable
-_08017F28: .4byte gBattlescriptCurrInstr
-_08017F2C: .4byte gUnknown_081D90B2
-_08017F30: .4byte 0x02000000
-_08017F34:
- ldr r1, _08017F40 @ =gBattlescriptCurrInstr
- ldr r0, _08017F44 @ =gUnknown_081D90F1
-_08017F38:
- str r0, [r1]
-_08017F3A:
- movs r4, 0x1
- mov r9, r4
- b _08017F94
- .align 2, 0
-_08017F40: .4byte gBattlescriptCurrInstr
-_08017F44: .4byte gUnknown_081D90F1
-_08017F48:
- ldr r1, _08017FEC @ =gBattleMons
- ldr r0, _08017FF0 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x4C
- adds r4, r0, r1
- ldr r3, [r4]
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _08017F94
- ldr r2, _08017FF4 @ =gBattleMoves
- ldr r0, _08017FF8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7D
- bne _08017F8C
- movs r0, 0x21
- negs r0, r0
- ands r3, r0
- str r3, [r4]
- bl b_movescr_stack_push_cursor
- ldr r1, _08017FFC @ =gBattlescriptCurrInstr
- ldr r0, _08018000 @ =gUnknown_081D9552
- str r0, [r1]
- ldr r1, _08018004 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x5]
-_08017F8C:
- movs r7, 0x2
-_08017F8E:
- mov r9, r7
- ldr r0, _08018008 @ =0x02000000
- mov r8, r0
-_08017F94:
- ldr r1, _0801800C @ =0x000160e7
- add r1, r8
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08017F9E:
- ldr r0, _0801800C @ =0x000160e7
- add r0, r8
- ldrb r0, [r0]
- cmp r0, 0xE
- beq _08017FAC
- bl _0801773C
-_08017FAC:
- mov r1, r9
- cmp r1, 0x2
- bne _08017FD8
- ldr r4, _08018010 @ =gActiveBank
- ldr r0, _08017FF0 @ =gBankAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _08018014 @ =gUnknown_02024ACC
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
-_08017FD8:
- mov r0, r9
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08017FEC: .4byte gBattleMons
-_08017FF0: .4byte gBankAttacker
-_08017FF4: .4byte gBattleMoves
-_08017FF8: .4byte gCurrentMove
-_08017FFC: .4byte gBattlescriptCurrInstr
-_08018000: .4byte gUnknown_081D9552
-_08018004: .4byte gBattleCommunication
-_08018008: .4byte 0x02000000
-_0801800C: .4byte 0x000160e7
-_08018010: .4byte gActiveBank
-_08018014: .4byte gUnknown_02024ACC
- thumb_func_end CantUseMove
-
- thumb_func_start sub_8018018
-sub_8018018: @ 8018018
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r3, r4, 0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- ldr r0, _08018044 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08018048
- movs r0, 0
- b _08018198
- .align 2, 0
-_08018044: .4byte gBattleTypeFlags
-_08018048:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080180D4
- adds r0, r4, 0
- bl sub_803FC34
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0
- bl GetBankSide
- lsls r0, 24
- ldr r1, _080180CC @ =gEnemyParty
- mov r8, r1
- cmp r0, 0
- bne _0801806E
- ldr r2, _080180D0 @ =gPlayerParty
- mov r8, r2
-_0801806E:
- adds r0, r7, 0
- bl sub_803FBFC
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 1
- adds r5, r0, r6
- adds r0, r5, 0x3
- cmp r5, r0
- bge _080180BA
- adds r7, r0, 0
-_08018084:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _080180B4
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _080180B4
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- bne _080180BA
-_080180B4:
- adds r5, 0x1
- cmp r5, r7
- blt _08018084
-_080180BA:
- movs r1, 0
- lsls r0, r6, 1
- adds r0, r6
- adds r0, 0x3
- cmp r5, r0
- bne _080180C8
- movs r1, 0x1
-_080180C8:
- adds r0, r1, 0
- b _08018198
- .align 2, 0
-_080180CC: .4byte gEnemyParty
-_080180D0: .4byte gPlayerParty
-_080180D4:
- adds r0, r3, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08018100
- movs r0, 0x1
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x3
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, _080180FC @ =gEnemyParty
- mov r8, r2
- b _08018118
- .align 2, 0
-_080180FC: .4byte gEnemyParty
-_08018100:
- movs r0, 0
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x2
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _080181A8 @ =gPlayerParty
- mov r8, r0
-_08018118:
- mov r1, r10
- cmp r1, 0x6
- bne _08018128
- ldr r1, _080181AC @ =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrb r0, [r0]
- mov r10, r0
-_08018128:
- mov r2, r9
- cmp r2, 0x6
- bne _08018138
- ldr r1, _080181AC @ =gBattlePartyID
- lsls r0, r6, 1
- adds r0, r1
- ldrb r0, [r0]
- mov r9, r0
-_08018138:
- movs r5, 0
-_0801813A:
- movs r0, 0x64
- muls r0, r5
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0801818A
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _0801818A
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0801818A
- cmp r5, r10
- beq _0801818A
- cmp r5, r9
- beq _0801818A
- ldr r1, _080181B0 @ =0x02000000
- ldr r2, _080181B4 @ =0x00016068
- adds r0, r7, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r5, r0
- beq _0801818A
- adds r0, r6, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r5, r0
- bne _08018190
-_0801818A:
- adds r5, 0x1
- cmp r5, 0x5
- ble _0801813A
-_08018190:
- movs r0, 0
- cmp r5, 0x6
- bne _08018198
- movs r0, 0x1
-_08018198:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080181A8: .4byte gPlayerParty
-_080181AC: .4byte gBattlePartyID
-_080181B0: .4byte 0x02000000
-_080181B4: .4byte 0x00016068
- thumb_func_end sub_8018018
-
- thumb_func_start castform_switch
-castform_switch: @ 80181B8
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r1, _08018228 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r4, r0, r1
- ldrh r1, [r4]
- ldr r0, _0801822C @ =SPECIES_CASTFORM
- cmp r1, r0
- bne _0801825C
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3B
- bne _0801825C
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- beq _0801825C
- str r5, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801820A
- str r5, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08018230
-_0801820A:
- adds r2, r4, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0
- beq _08018230
- adds r1, r4, 0
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0
- beq _08018230
- strb r5, [r2]
- strb r5, [r1]
- movs r0, 0x1
- b _08018314
- .align 2, 0
-_08018228: .4byte gBattleMons
-_0801822C: .4byte SPECIES_CASTFORM
-_08018230:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0801825C
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _08018260
-_0801825C:
- movs r0, 0
- b _08018314
-_08018260:
- ldr r1, _0801831C @ =gBattleWeather
- ldrh r0, [r1]
- movs r2, 0xE7
- ands r2, r0
- adds r4, r1, 0
- cmp r2, 0
- bne _0801828E
- ldr r1, _08018320 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r3, r1, 0
- adds r3, 0x21
- ldrb r0, [r3]
- cmp r0, 0
- beq _0801828E
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0
- beq _0801828E
- strb r2, [r3]
- strb r2, [r1]
- movs r5, 0x1
-_0801828E:
- ldrh r1, [r4]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _080182BA
- ldr r1, _08018320 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xA
- beq _080182BA
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xA
- beq _080182BA
- movs r0, 0xA
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x2
-_080182BA:
- ldrh r1, [r4]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _080182E6
- ldr r1, _08018320 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xB
- beq _080182E6
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xB
- beq _080182E6
- movs r0, 0xB
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x3
-_080182E6:
- ldrh r1, [r4]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08018312
- ldr r1, _08018320 @ =gBattleMons
- movs r0, 0x58
- muls r0, r6
- adds r1, r0, r1
- adds r2, r1, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0xF
- beq _08018312
- adds r1, 0x22
- ldrb r0, [r1]
- cmp r0, 0xF
- beq _08018312
- movs r0, 0xF
- strb r0, [r2]
- strb r0, [r1]
- movs r5, 0x4
-_08018312:
- adds r0, r5, 0
-_08018314:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0801831C: .4byte gBattleWeather
-_08018320: .4byte gBattleMons
- thumb_func_end castform_switch
-
- thumb_func_start AbilityBattleEffects
-AbilityBattleEffects: @ 8018324
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- ldr r4, [sp, 0x48]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r6, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0
- mov r9, r0
- ldr r5, _08018380 @ =gBankAttacker
- ldr r1, _08018384 @ =gNoOfAllBanks
- ldrb r0, [r5]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08018360
- mov r1, r10
- strb r1, [r5]
-_08018360:
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08018390
- ldr r1, _08018388 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0801838C @ =gPlayerParty
- b _080183A0
- .align 2, 0
-_08018380: .4byte gBankAttacker
-_08018384: .4byte gNoOfAllBanks
-_08018388: .4byte gBattlePartyID
-_0801838C: .4byte gPlayerParty
-_08018390:
- ldr r1, _080183D0 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080183D4 @ =gEnemyParty
-_080183A0:
- adds r7, r1, r0
- ldr r5, _080183D8 @ =gBankTarget
- ldr r1, _080183DC @ =gNoOfAllBanks
- ldrb r0, [r5]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _080183B2
- mov r2, r10
- strb r2, [r5]
-_080183B2:
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _080183E4
- ldr r1, _080183D0 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080183E0 @ =gPlayerParty
- b _080183F4
- .align 2, 0
-_080183D0: .4byte gBattlePartyID
-_080183D4: .4byte gEnemyParty
-_080183D8: .4byte gBankTarget
-_080183DC: .4byte gNoOfAllBanks
-_080183E0: .4byte gPlayerParty
-_080183E4:
- ldr r1, _08018444 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08018448 @ =gEnemyParty
-_080183F4:
- adds r5, r1, r0
- adds r0, r7, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- adds r0, r7, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x14]
- ldr r0, _0801844C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08018436
- bl _08019F92
-_08018436:
- mov r3, r8
- cmp r3, 0
- beq _08018454
- ldr r0, _08018450 @ =gLastUsedAbility
- strb r3, [r0]
- mov r8, r0
- b _0801846A
- .align 2, 0
-_08018444: .4byte gBattlePartyID
-_08018448: .4byte gEnemyParty
-_0801844C: .4byte gBattleTypeFlags
-_08018450: .4byte gLastUsedAbility
-_08018454:
- ldr r2, _08018474 @ =gLastUsedAbility
- ldr r1, _08018478 @ =gBattleMons
- movs r0, 0x58
- mov r5, r10
- muls r5, r0
- adds r0, r5, 0
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- strb r0, [r2]
- mov r8, r2
-_0801846A:
- cmp r4, 0
- beq _0801847C
- adds r3, r4, 0
- b _08018480
- .align 2, 0
-_08018474: .4byte gLastUsedAbility
-_08018478: .4byte gBattleMons
-_0801847C:
- ldr r0, _08018494 @ =gCurrentMove
- ldrh r3, [r0]
-_08018480:
- ldr r1, _08018498 @ =0x02000000
- ldr r2, _0801849C @ =0x0001601c
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r7, r1, 0
- cmp r0, 0
- beq _080184A0
- movs r4, 0x3F
- ands r4, r0
- b _080184AC
- .align 2, 0
-_08018494: .4byte gCurrentMove
-_08018498: .4byte 0x02000000
-_0801849C: .4byte 0x0001601c
-_080184A0:
- ldr r1, _080184C0 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x2]
-_080184AC:
- ldr r5, [sp, 0x4]
- cmp r5, 0x13
- bls _080184B6
- bl _08019F76
-_080184B6:
- lsls r0, r5, 2
- ldr r1, _080184C4 @ =_080184C8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080184C0: .4byte gBattleMoves
-_080184C4: .4byte _080184C8
- .align 2, 0
-_080184C8:
- .4byte _08018518
- .4byte _08018814
- .4byte _08018A40
- .4byte _08018AD8
- .4byte _08018CF0
- .4byte _08019448
- .4byte _080197B4
- .4byte _08019804
- .4byte _08019880
- .4byte _080198FC
- .4byte _08019B1C
- .4byte _08019940
- .4byte _08019B60
- .4byte _08019BBC
- .4byte _08019C18
- .4byte _08019D18
- .4byte _08019D5C
- .4byte _08019DB8
- .4byte _08019F44
- .4byte _08019CD4
-_08018518:
- ldr r2, _0801854C @ =gBankAttacker
- ldr r0, _08018550 @ =gNoOfAllBanks
- ldrb r1, [r2]
- adds r5, r0, 0
- ldrb r0, [r5]
- cmp r1, r0
- bcc _0801852A
- mov r1, r10
- strb r1, [r2]
-_0801852A:
- mov r2, r8
- ldrb r0, [r2]
- cmp r0, 0x2D
- bne _08018534
- b _080186B8
-_08018534:
- cmp r0, 0x2D
- bgt _08018564
- cmp r0, 0xD
- bne _0801853E
- b _080187DC
-_0801853E:
- cmp r0, 0xD
- bgt _08018554
- cmp r0, 0x2
- bne _08018548
- b _08018680
-_08018548:
- bl _08019F76
- .align 2, 0
-_0801854C: .4byte gBankAttacker
-_08018550: .4byte gNoOfAllBanks
-_08018554:
- cmp r0, 0x16
- bne _0801855A
- b _08018728
-_0801855A:
- cmp r0, 0x24
- bne _08018560
- b _080187A0
-_08018560:
- bl _08019F76
-_08018564:
- cmp r0, 0x46
- bne _0801856A
- b _080186F0
-_0801856A:
- cmp r0, 0x46
- bgt _08018578
- cmp r0, 0x3B
- bne _08018574
- b _0801875C
-_08018574:
- bl _08019F76
-_08018578:
- cmp r0, 0x4D
- bne _0801857E
- b _080187DC
-_0801857E:
- cmp r0, 0xFF
- beq _08018586
- bl _08019F76
-_08018586:
- bl weather_get_current
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x3
- cmp r0, 0xA
- bhi _0801864C
- lsls r0, 2
- ldr r1, _080185A0 @ =_080185A4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080185A0: .4byte _080185A4
- .align 2, 0
-_080185A4:
- .4byte _080185D0
- .4byte _0801864C
- .4byte _080185D0
- .4byte _0801864C
- .4byte _0801864C
- .4byte _080185F8
- .4byte _0801864C
- .4byte _0801864C
- .4byte _0801864C
- .4byte _08018620
- .4byte _080185D0
-_080185D0:
- ldr r2, _080185EC @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801864C
- movs r0, 0x5
- strh r0, [r2]
- ldr r0, _080185F0 @ =0x02000000
- ldr r3, _080185F4 @ =0x000160a4
- adds r2, r0, r3
- movs r1, 0xA
- b _08018638
- .align 2, 0
-_080185EC: .4byte gBattleWeather
-_080185F0: .4byte 0x02000000
-_080185F4: .4byte 0x000160a4
-_080185F8:
- ldr r3, _08018614 @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x18
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801864C
- strh r2, [r3]
- ldr r0, _08018618 @ =0x02000000
- ldr r3, _0801861C @ =0x000160a4
- adds r2, r0, r3
- movs r1, 0xC
- b _08018638
- .align 2, 0
-_08018614: .4byte gBattleWeather
-_08018618: .4byte 0x02000000
-_0801861C: .4byte 0x000160a4
-_08018620:
- ldr r3, _08018668 @ =gBattleWeather
- ldrh r1, [r3]
- movs r2, 0x60
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0801864C
- strh r2, [r3]
- ldr r0, _0801866C @ =0x02000000
- ldr r3, _08018670 @ =0x000160a4
- adds r2, r0, r3
- movs r1, 0xB
-_08018638:
- strb r1, [r2]
- ldr r5, _08018674 @ =0x00016003
- adds r0, r5
- mov r1, r10
- strb r1, [r0]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0801864C:
- mov r2, r9
- cmp r2, 0
- bne _08018656
- bl _08019F92
-_08018656:
- bl weather_get_current
- ldr r1, _08018678 @ =gBattleCommunication
- strb r0, [r1, 0x5]
- ldr r0, _0801867C @ =gUnknown_081D901D
- bl b_push_move_exec
- bl _08019F76
- .align 2, 0
-_08018668: .4byte gBattleWeather
-_0801866C: .4byte 0x02000000
-_08018670: .4byte 0x000160a4
-_08018674: .4byte 0x00016003
-_08018678: .4byte gBattleCommunication
-_0801867C: .4byte gUnknown_081D901D
-_08018680:
- ldr r2, _080186A8 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08018690
- bl _08019F76
-_08018690:
- movs r0, 0x5
- strh r0, [r2]
- ldr r0, _080186AC @ =gUnknown_081D9704
- bl b_push_move_exec
- ldr r0, _080186B0 @ =0x02000000
- ldr r3, _080186B4 @ =0x00016003
- adds r0, r3
- mov r5, r10
- strb r5, [r0]
- bl _08019F22
- .align 2, 0
-_080186A8: .4byte gBattleWeather
-_080186AC: .4byte gUnknown_081D9704
-_080186B0: .4byte 0x02000000
-_080186B4: .4byte 0x00016003
-_080186B8:
- ldr r2, _080186E0 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080186C8
- bl _08019F76
-_080186C8:
- movs r0, 0x18
- strh r0, [r2]
- ldr r0, _080186E4 @ =gUnknown_081D9744
- bl b_push_move_exec
- ldr r0, _080186E8 @ =0x02000000
- ldr r1, _080186EC @ =0x00016003
- adds r0, r1
- mov r2, r10
- strb r2, [r0]
- bl _08019F22
- .align 2, 0
-_080186E0: .4byte gBattleWeather
-_080186E4: .4byte gUnknown_081D9744
-_080186E8: .4byte 0x02000000
-_080186EC: .4byte 0x00016003
-_080186F0:
- ldr r2, _08018718 @ =gBattleWeather
- ldrh r1, [r2]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08018700
- bl _08019F76
-_08018700:
- movs r0, 0x60
- strh r0, [r2]
- ldr r0, _0801871C @ =gUnknown_081D97FE
- bl b_push_move_exec
- ldr r0, _08018720 @ =0x02000000
- ldr r3, _08018724 @ =0x00016003
- adds r0, r3
- mov r5, r10
- strb r5, [r0]
- bl _08019F22
- .align 2, 0
-_08018718: .4byte gBattleWeather
-_0801871C: .4byte gUnknown_081D97FE
-_08018720: .4byte 0x02000000
-_08018724: .4byte 0x00016003
-_08018728:
- ldr r0, _08018754 @ =gSpecialStatuses
- mov r1, r10
- lsls r2, r1, 2
- adds r1, r2, r1
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3]
- lsls r0, 28
- cmp r0, 0
- bge _08018740
- bl _08019F76
-_08018740:
- ldr r1, _08018758 @ =gStatuses3
- adds r1, r2, r1
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 12
- orrs r0, r2
- str r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x8
- b _080187CA
- .align 2, 0
-_08018754: .4byte gSpecialStatuses
-_08018758: .4byte gStatuses3
-_0801875C:
- mov r0, r10
- bl castform_switch
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- bne _08018770
- bl _08019F92
-_08018770:
- ldr r0, _08018790 @ =gUnknown_081D977D
- bl b_push_move_exec
- ldr r0, _08018794 @ =0x02000000
- ldr r2, _08018798 @ =0x00016003
- adds r1, r0, r2
- mov r3, r10
- strb r3, [r1]
- mov r1, r9
- subs r1, 0x1
- ldr r5, _0801879C @ =0x0001609b
- adds r0, r5
- strb r1, [r0]
- bl _08019F76
- .align 2, 0
-_08018790: .4byte gUnknown_081D977D
-_08018794: .4byte 0x02000000
-_08018798: .4byte 0x00016003
-_0801879C: .4byte 0x0001609b
-_080187A0:
- ldr r0, _080187D4 @ =gSpecialStatuses
- mov r1, r10
- lsls r2, r1, 2
- adds r1, r2, r1
- lsls r1, 2
- adds r3, r1, r0
- ldrb r0, [r3]
- lsls r0, 27
- cmp r0, 0
- bge _080187B8
- bl _08019F76
-_080187B8:
- ldr r1, _080187D8 @ =gStatuses3
- adds r1, r2, r1
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 13
- orrs r0, r2
- str r0, [r1]
- ldrb r0, [r3]
- movs r1, 0x10
-_080187CA:
- orrs r0, r1
- strb r0, [r3]
- bl _08019F76
- .align 2, 0
-_080187D4: .4byte gSpecialStatuses
-_080187D8: .4byte gStatuses3
-_080187DC:
- movs r6, 0
- ldrb r5, [r5]
- cmp r6, r5
- bcc _080187E8
- bl _08019F76
-_080187E8:
- adds r0, r6, 0
- bl castform_switch
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- beq _080187FC
- bl _08019E14
-_080187FC:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08018810 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r6, r0
- bcc _080187E8
- bl _08019F76
- .align 2, 0
-_08018810: .4byte gNoOfAllBanks
-_08018814:
- ldr r2, _08018844 @ =gBattleMons
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r4, r1, r2
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- bne _08018828
- bl _08019F76
-_08018828:
- ldr r0, _08018848 @ =gBankAttacker
- mov r3, r10
- strb r3, [r0]
- mov r3, r8
- ldrb r5, [r3]
- cmp r5, 0x2C
- beq _0801885A
- cmp r5, 0x2C
- bgt _0801884C
- cmp r5, 0x3
- bne _08018840
- b _080189B8
-_08018840:
- bl _08019F76
- .align 2, 0
-_08018844: .4byte gBattleMons
-_08018848: .4byte gBankAttacker
-_0801884C:
- cmp r5, 0x36
- bne _08018852
- b _08018A18
-_08018852:
- cmp r5, 0x3D
- beq _080188DC
- bl _08019F76
-_0801885A:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08018876
- bl _08019F76
-_08018876:
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801888E
- bl _08019F76
-_0801888E:
- ldr r0, _080188D0 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801889E
- bl _08019F76
-_0801889E:
- ldrh r0, [r4, 0x2C]
- ldrh r1, [r4, 0x28]
- cmp r0, r1
- bhi _080188AA
- bl _08019F76
-_080188AA:
- mov r2, r8
- strb r5, [r2]
- ldr r0, _080188D4 @ =gUnknown_081D9730
- bl b_push_move_exec
- ldr r1, _080188D8 @ =gBattleMoveDamage
- ldrh r0, [r4, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _080188C4
- movs r0, 0x1
- str r0, [r1]
-_080188C4:
- ldr r0, [r1]
- negs r0, r0
- str r0, [r1]
- bl _08019F22
- .align 2, 0
-_080188D0: .4byte gBattleWeather
-_080188D4: .4byte gUnknown_081D9730
-_080188D8: .4byte gBattleMoveDamage
-_080188DC:
- adds r0, r2, 0
- adds r0, 0x4C
- adds r5, r1, r0
- ldrb r0, [r5]
- cmp r0, 0
- bne _080188EC
- bl _08019F76
-_080188EC:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _08018906
- bl _08019F76
-_08018906:
- ldr r0, [r5]
- movs r1, 0x88
- ands r0, r1
- cmp r0, 0
- beq _08018918
- ldr r0, _08018990 @ =gBattleTextBuff1
- ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn
- bl StringCopy
-_08018918:
- ldr r0, [r5]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801892A
- ldr r0, _08018990 @ =gBattleTextBuff1
- ldr r1, _08018998 @ =gStatusConditionString_SleepJpn
- bl StringCopy
-_0801892A:
- ldr r0, [r5]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801893C
- ldr r0, _08018990 @ =gBattleTextBuff1
- ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn
- bl StringCopy
-_0801893C:
- ldr r0, [r5]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801894E
- ldr r0, _08018990 @ =gBattleTextBuff1
- ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn
- bl StringCopy
-_0801894E:
- ldr r0, [r5]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08018960
- ldr r0, _08018990 @ =gBattleTextBuff1
- ldr r1, _080189A4 @ =gStatusConditionString_IceJpn
- bl StringCopy
-_08018960:
- str r4, [r5]
- ldr r0, _080189A8 @ =0x02000000
- ldr r4, _080189AC @ =gActiveBank
- mov r3, r10
- strb r3, [r4]
- ldr r1, _080189B0 @ =0x00016003
- adds r0, r1
- strb r3, [r0]
- ldr r0, _080189B4 @ =gUnknown_081D9758
- bl b_push_move_exec
- str r5, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl _08019F22
- .align 2, 0
-_08018990: .4byte gBattleTextBuff1
-_08018994: .4byte gStatusConditionString_PoisonJpn
-_08018998: .4byte gStatusConditionString_SleepJpn
-_0801899C: .4byte gStatusConditionString_ParalysisJpn
-_080189A0: .4byte gStatusConditionString_BurnJpn
-_080189A4: .4byte gStatusConditionString_IceJpn
-_080189A8: .4byte 0x02000000
-_080189AC: .4byte gActiveBank
-_080189B0: .4byte 0x00016003
-_080189B4: .4byte gUnknown_081D9758
-_080189B8:
- ldrb r2, [r4, 0x1B]
- movs r0, 0x1B
- ldrsb r0, [r4, r0]
- cmp r0, 0xB
- ble _080189C6
- bl _08019F76
-_080189C6:
- ldr r0, _08018A04 @ =gDisableStructs
- mov r3, r10
- lsls r1, r3, 3
- subs r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x16]
- cmp r0, 0x2
- bne _080189DC
- bl _08019F76
-_080189DC:
- adds r0, r2, 0x1
- movs r2, 0
- strb r0, [r4, 0x1B]
- ldr r5, _08018A08 @ =0x000160a4
- adds r1, r7, r5
- movs r0, 0x11
- strb r0, [r1]
- ldr r1, _08018A0C @ =0x000160a5
- adds r0, r7, r1
- strb r2, [r0]
- ldr r0, _08018A10 @ =gUnknown_081D9718
- bl b_push_move_exec
- ldr r2, _08018A14 @ =0x00016003
- adds r0, r7, r2
- mov r3, r10
- strb r3, [r0]
- bl _08019F22
- .align 2, 0
-_08018A04: .4byte gDisableStructs
-_08018A08: .4byte 0x000160a4
-_08018A0C: .4byte 0x000160a5
-_08018A10: .4byte gUnknown_081D9718
-_08018A14: .4byte 0x00016003
-_08018A18:
- ldr r2, _08018A3C @ =gDisableStructs
- ldrb r0, [r0]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r3, [r1, 0x18]
- lsls r0, r3, 31
- lsrs r0, 31
- movs r2, 0x1
- eors r2, r0
- movs r0, 0x2
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x18]
- bl _08019F76
- .align 2, 0
-_08018A3C: .4byte gDisableStructs
-_08018A40:
- mov r5, r8
- ldrb r0, [r5]
- cmp r0, 0x2B
- beq _08018A4C
- bl _08019F76
-_08018A4C:
- movs r4, 0
- ldr r0, _08018ABC @ =gUnknown_081FA724
- ldrh r2, [r0]
- ldr r5, _08018AC0 @ =0x0000ffff
- adds r1, r0, 0
- cmp r2, r5
- bne _08018A5E
- bl _08019F76
-_08018A5E:
- cmp r2, r3
- beq _08018A76
- adds r2, r1, 0
-_08018A64:
- adds r2, 0x2
- adds r4, 0x1
- ldrh r0, [r2]
- cmp r0, r5
- bne _08018A72
- bl _08019F76
-_08018A72:
- cmp r0, r3
- bne _08018A64
-_08018A76:
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _08018AC0 @ =0x0000ffff
- cmp r1, r0
- bne _08018A86
- bl _08019F76
-_08018A86:
- ldr r1, _08018AC4 @ =gBattleMons
- ldr r0, _08018AC8 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- beq _08018AAC
- ldr r0, _08018ACC @ =gHitMarker
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 4
- orrs r1, r2
- str r1, [r0]
-_08018AAC:
- ldr r1, _08018AD0 @ =gBattlescriptCurrInstr
- ldr r0, _08018AD4 @ =gUnknown_081D98F3
- str r0, [r1]
- movs r0, 0x1
- mov r9, r0
- bl _08019F7C
- .align 2, 0
-_08018ABC: .4byte gUnknown_081FA724
-_08018AC0: .4byte 0x0000ffff
-_08018AC4: .4byte gBattleMons
-_08018AC8: .4byte gBankAttacker
-_08018ACC: .4byte gHitMarker
-_08018AD0: .4byte gBattlescriptCurrInstr
-_08018AD4: .4byte gUnknown_081D98F3
-_08018AD8:
- cmp r3, 0
- bne _08018AE0
- bl _08019F76
-_08018AE0:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0xB
- beq _08018B50
- cmp r0, 0xB
- bgt _08018AF2
- cmp r0, 0xA
- beq _08018AF8
- b _08018C6A
-_08018AF2:
- cmp r0, 0x12
- beq _08018BA8
- b _08018C6A
-_08018AF8:
- cmp r4, 0xD
- beq _08018AFE
- b _08018C6A
-_08018AFE:
- ldr r0, _08018B28 @ =gBattleMoves
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _08018B10
- b _08018C6A
-_08018B10:
- ldr r1, _08018B2C @ =gProtectStructs
- ldr r0, _08018B30 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _08018B3C
- ldr r1, _08018B34 @ =gBattlescriptCurrInstr
- ldr r0, _08018B38 @ =gUnknown_081D9843
- b _08018B40
- .align 2, 0
-_08018B28: .4byte gBattleMoves
-_08018B2C: .4byte gProtectStructs
-_08018B30: .4byte gBankAttacker
-_08018B34: .4byte gBattlescriptCurrInstr
-_08018B38: .4byte gUnknown_081D9843
-_08018B3C:
- ldr r1, _08018B48 @ =gBattlescriptCurrInstr
- ldr r0, _08018B4C @ =gUnknown_081D9842
-_08018B40:
- str r0, [r1]
- movs r2, 0x1
- b _08018C68
- .align 2, 0
-_08018B48: .4byte gBattlescriptCurrInstr
-_08018B4C: .4byte gUnknown_081D9842
-_08018B50:
- cmp r4, 0xB
- beq _08018B56
- b _08018C6A
-_08018B56:
- ldr r0, _08018B80 @ =gBattleMoves
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _08018B68
- b _08018C6A
-_08018B68:
- ldr r1, _08018B84 @ =gProtectStructs
- ldr r0, _08018B88 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _08018B94
- ldr r1, _08018B8C @ =gBattlescriptCurrInstr
- ldr r0, _08018B90 @ =gUnknown_081D9843
- b _08018B98
- .align 2, 0
-_08018B80: .4byte gBattleMoves
-_08018B84: .4byte gProtectStructs
-_08018B88: .4byte gBankAttacker
-_08018B8C: .4byte gBattlescriptCurrInstr
-_08018B90: .4byte gUnknown_081D9843
-_08018B94:
- ldr r1, _08018BA0 @ =gBattlescriptCurrInstr
- ldr r0, _08018BA4 @ =gUnknown_081D9842
-_08018B98:
- str r0, [r1]
- movs r3, 0x1
- mov r9, r3
- b _08018C6A
- .align 2, 0
-_08018BA0: .4byte gBattlescriptCurrInstr
-_08018BA4: .4byte gUnknown_081D9842
-_08018BA8:
- cmp r4, 0xA
- bne _08018C6A
- ldr r1, _08018BF4 @ =gBattleMons
- movs r0, 0x58
- mov r5, r10
- muls r5, r0
- adds r0, r5, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08018C6A
- ldr r2, _08018BF8 @ =0x02017100
- mov r0, r10
- lsls r1, r0, 2
- adds r0, r1, r2
- ldr r3, [r0]
- movs r4, 0x1
- ands r3, r4
- adds r5, r1, 0
- cmp r3, 0
- bne _08018C30
- ldr r0, _08018BFC @ =gBattleCommunication
- strb r3, [r0, 0x5]
- ldr r1, _08018C00 @ =gProtectStructs
- ldr r0, _08018C04 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _08018C10
- ldr r1, _08018C08 @ =gBattlescriptCurrInstr
- ldr r0, _08018C0C @ =gUnknown_081D987C
- b _08018C14
- .align 2, 0
-_08018BF4: .4byte gBattleMons
-_08018BF8: .4byte 0x02017100
-_08018BFC: .4byte gBattleCommunication
-_08018C00: .4byte gProtectStructs
-_08018C04: .4byte gBankAttacker
-_08018C08: .4byte gBattlescriptCurrInstr
-_08018C0C: .4byte gUnknown_081D987C
-_08018C10:
- ldr r1, _08018C28 @ =gBattlescriptCurrInstr
- ldr r0, _08018C2C @ =gUnknown_081D987B
-_08018C14:
- str r0, [r1]
- adds r0, r5, r2
- ldr r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- str r1, [r0]
- movs r1, 0x2
- mov r9, r1
- b _08018C6A
- .align 2, 0
-_08018C28: .4byte gBattlescriptCurrInstr
-_08018C2C: .4byte gUnknown_081D987B
-_08018C30:
- ldr r0, _08018C4C @ =gBattleCommunication
- strb r4, [r0, 0x5]
- ldr r1, _08018C50 @ =gProtectStructs
- ldr r0, _08018C54 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _08018C60
- ldr r1, _08018C58 @ =gBattlescriptCurrInstr
- ldr r0, _08018C5C @ =gUnknown_081D987C
- b _08018C64
- .align 2, 0
-_08018C4C: .4byte gBattleCommunication
-_08018C50: .4byte gProtectStructs
-_08018C54: .4byte gBankAttacker
-_08018C58: .4byte gBattlescriptCurrInstr
-_08018C5C: .4byte gUnknown_081D987C
-_08018C60:
- ldr r1, _08018CA4 @ =gBattlescriptCurrInstr
- ldr r0, _08018CA8 @ =gUnknown_081D987B
-_08018C64:
- str r0, [r1]
- movs r2, 0x2
-_08018C68:
- mov r9, r2
-_08018C6A:
- mov r3, r9
- cmp r3, 0x1
- beq _08018C74
- bl _08019F76
-_08018C74:
- ldr r1, _08018CAC @ =gBattleMons
- movs r0, 0x58
- mov r5, r10
- muls r5, r0
- adds r0, r5, 0
- adds r1, r0, r1
- ldrh r0, [r1, 0x2C]
- ldrh r2, [r1, 0x28]
- cmp r0, r2
- bne _08018CD0
- ldr r1, _08018CB0 @ =gProtectStructs
- ldr r0, _08018CB4 @ =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 28
- cmp r0, 0
- bge _08018CBC
- ldr r1, _08018CA4 @ =gBattlescriptCurrInstr
- ldr r0, _08018CB8 @ =gUnknown_081D9866
- str r0, [r1]
- bl _08019F76
- .align 2, 0
-_08018CA4: .4byte gBattlescriptCurrInstr
-_08018CA8: .4byte gUnknown_081D987B
-_08018CAC: .4byte gBattleMons
-_08018CB0: .4byte gProtectStructs
-_08018CB4: .4byte gBankAttacker
-_08018CB8: .4byte gUnknown_081D9866
-_08018CBC:
- ldr r1, _08018CC8 @ =gBattlescriptCurrInstr
- ldr r0, _08018CCC @ =gUnknown_081D9865
- str r0, [r1]
- bl _08019F76
- .align 2, 0
-_08018CC8: .4byte gBattlescriptCurrInstr
-_08018CCC: .4byte gUnknown_081D9865
-_08018CD0:
- ldr r2, _08018CEC @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 2
- str r0, [r2]
- cmp r0, 0
- bne _08018CE0
- mov r3, r9
- str r3, [r2]
-_08018CE0:
- ldr r0, [r2]
- negs r0, r0
- str r0, [r2]
- bl _08019F76
- .align 2, 0
-_08018CEC: .4byte gBattleMoveDamage
-_08018CF0:
- mov r5, r8
- ldrb r0, [r5]
- subs r0, 0x9
- cmp r0, 0x2F
- bls _08018CFE
- bl _08019F76
-_08018CFE:
- lsls r0, 2
- ldr r1, _08018D08 @ =_08018D0C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08018D08: .4byte _08018D0C
- .align 2, 0
-_08018D0C:
- .4byte _08019128
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08018DCC
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08018E94
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08018F54
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _0801904C
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019204
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _08019F76
- .4byte _080192E0
-_08018DCC:
- ldr r0, _08018E74 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08018DDC
- bl _08019F76
-_08018DDC:
- cmp r3, 0xA5
- bne _08018DE4
- bl _08019F76
-_08018DE4:
- ldr r0, _08018E78 @ =gBattleMoves
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _08018DF8
- bl _08019F76
-_08018DF8:
- ldr r2, _08018E7C @ =gSpecialStatuses
- ldr r0, _08018E80 @ =gBankTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08018E20
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08018E20
- bl _08019F76
-_08018E20:
- ldr r1, _08018E84 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r1, r0, r1
- adds r3, r1, 0
- adds r3, 0x21
- ldrb r0, [r3]
- cmp r0, r4
- bne _08018E3A
- bl _08019F76
-_08018E3A:
- adds r2, r1, 0
- adds r2, 0x22
- ldrb r0, [r2]
- cmp r0, r4
- bne _08018E48
- bl _08019F76
-_08018E48:
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- bne _08018E52
- bl _08019F76
-_08018E52:
- strb r4, [r3]
- strb r4, [r2]
- ldr r1, _08018E88 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x3
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- bl b_movescr_stack_push_cursor
- ldr r1, _08018E8C @ =gBattlescriptCurrInstr
- ldr r0, _08018E90 @ =gUnknown_081D9921
- str r0, [r1]
- bl _08019F22
- .align 2, 0
-_08018E74: .4byte gBattleMoveFlags
-_08018E78: .4byte gBattleMoves
-_08018E7C: .4byte gSpecialStatuses
-_08018E80: .4byte gBankTarget
-_08018E84: .4byte gBattleMons
-_08018E88: .4byte gBattleTextBuff1
-_08018E8C: .4byte gBattlescriptCurrInstr
-_08018E90: .4byte gUnknown_081D9921
-_08018E94:
- ldr r0, _08018F2C @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08018EA4
- bl _08019F76
-_08018EA4:
- ldr r1, _08018F30 @ =gBattleMons
- ldr r0, _08018F34 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r4, r0, r1
- ldrh r0, [r4, 0x28]
- cmp r0, 0
- bne _08018EBA
- bl _08019F76
-_08018EBA:
- ldr r0, _08018F38 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _08018ECC
- bl _08019F76
-_08018ECC:
- ldr r2, _08018F3C @ =gSpecialStatuses
- ldr r0, _08018F40 @ =gBankTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08018EF4
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08018EF4
- bl _08019F76
-_08018EF4:
- ldr r1, _08018F44 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _08018F0E
- bl _08019F76
-_08018F0E:
- ldr r1, _08018F48 @ =gBattleMoveDamage
- ldrh r0, [r4, 0x2C]
- lsrs r0, 4
- str r0, [r1]
- cmp r0, 0
- bne _08018F1C
- str r2, [r1]
-_08018F1C:
- bl b_movescr_stack_push_cursor
- ldr r1, _08018F4C @ =gBattlescriptCurrInstr
- ldr r0, _08018F50 @ =gUnknown_081D9928
- str r0, [r1]
- bl _08019F22
- .align 2, 0
-_08018F2C: .4byte gBattleMoveFlags
-_08018F30: .4byte gBattleMons
-_08018F34: .4byte gBankAttacker
-_08018F38: .4byte gProtectStructs
-_08018F3C: .4byte gSpecialStatuses
-_08018F40: .4byte gBankTarget
-_08018F44: .4byte gBattleMoves
-_08018F48: .4byte gBattleMoveDamage
-_08018F4C: .4byte gBattlescriptCurrInstr
-_08018F50: .4byte gUnknown_081D9928
-_08018F54:
- ldr r0, _08019020 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08018F64
- bl _08019F76
-_08018F64:
- ldr r1, _08019024 @ =gBattleMons
- ldr r0, _08019028 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08018F7A
- bl _08019F76
-_08018F7A:
- ldr r0, _0801902C @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _08018F8C
- bl _08019F76
-_08018F8C:
- ldr r2, _08019030 @ =gSpecialStatuses
- ldr r0, _08019034 @ =gBankTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08018FB4
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08018FB4
- bl _08019F76
-_08018FB4:
- ldr r1, _08019038 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08018FCC
- bl _08019F76
-_08018FCC:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _08018FE4
- bl _08019F76
-_08018FE4:
- ldr r5, _0801903C @ =gBattleCommunication
- movs r4, 0x3
-_08018FE8:
- bl Random
- ands r0, r4
- strb r0, [r5, 0x3]
- cmp r0, 0
- beq _08018FE8
- ldr r1, _0801903C @ =gBattleCommunication
- ldrb r0, [r1, 0x3]
- cmp r0, 0x3
- bne _08019000
- adds r0, 0x2
- strb r0, [r1, 0x3]
-_08019000:
- ldrb r0, [r1, 0x3]
- adds r0, 0x40
- strb r0, [r1, 0x3]
- bl b_movescr_stack_push_cursor
- ldr r1, _08019040 @ =gBattlescriptCurrInstr
- ldr r0, _08019044 @ =gUnknown_081D9950
- str r0, [r1]
- ldr r2, _08019048 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _08019F22
- .align 2, 0
-_08019020: .4byte gBattleMoveFlags
-_08019024: .4byte gBattleMons
-_08019028: .4byte gBankAttacker
-_0801902C: .4byte gProtectStructs
-_08019030: .4byte gSpecialStatuses
-_08019034: .4byte gBankTarget
-_08019038: .4byte gBattleMoves
-_0801903C: .4byte gBattleCommunication
-_08019040: .4byte gBattlescriptCurrInstr
-_08019044: .4byte gUnknown_081D9950
-_08019048: .4byte gHitMarker
-_0801904C:
- ldr r0, _080190FC @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801905C
- bl _08019F76
-_0801905C:
- ldr r1, _08019100 @ =gBattleMons
- ldr r0, _08019104 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08019072
- bl _08019F76
-_08019072:
- ldr r0, _08019108 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _08019084
- bl _08019F76
-_08019084:
- ldr r2, _0801910C @ =gSpecialStatuses
- ldr r0, _08019110 @ =gBankTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _080190AC
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _080190AC
- bl _08019F76
-_080190AC:
- ldr r1, _08019114 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080190C4
- bl _08019F76
-_080190C4:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _080190DC
- bl _08019F76
-_080190DC:
- ldr r1, _08019118 @ =gBattleCommunication
- movs r0, 0x42
- strb r0, [r1, 0x3]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801911C @ =gBattlescriptCurrInstr
- ldr r0, _08019120 @ =gUnknown_081D9950
- str r0, [r1]
- ldr r2, _08019124 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _08019F22
- .align 2, 0
-_080190FC: .4byte gBattleMoveFlags
-_08019100: .4byte gBattleMons
-_08019104: .4byte gBankAttacker
-_08019108: .4byte gProtectStructs
-_0801910C: .4byte gSpecialStatuses
-_08019110: .4byte gBankTarget
-_08019114: .4byte gBattleMoves
-_08019118: .4byte gBattleCommunication
-_0801911C: .4byte gBattlescriptCurrInstr
-_08019120: .4byte gUnknown_081D9950
-_08019124: .4byte gHitMarker
-_08019128:
- ldr r0, _080191D8 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08019138
- bl _08019F76
-_08019138:
- ldr r1, _080191DC @ =gBattleMons
- ldr r0, _080191E0 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801914E
- bl _08019F76
-_0801914E:
- ldr r0, _080191E4 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _08019160
- bl _08019F76
-_08019160:
- ldr r2, _080191E8 @ =gSpecialStatuses
- ldr r0, _080191EC @ =gBankTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08019188
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _08019188
- bl _08019F76
-_08019188:
- ldr r1, _080191F0 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080191A0
- bl _08019F76
-_080191A0:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _080191B8
- bl _08019F76
-_080191B8:
- ldr r1, _080191F4 @ =gBattleCommunication
- movs r0, 0x45
- strb r0, [r1, 0x3]
- bl b_movescr_stack_push_cursor
- ldr r1, _080191F8 @ =gBattlescriptCurrInstr
- ldr r0, _080191FC @ =gUnknown_081D9950
- str r0, [r1]
- ldr r2, _08019200 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _08019F22
- .align 2, 0
-_080191D8: .4byte gBattleMoveFlags
-_080191DC: .4byte gBattleMons
-_080191E0: .4byte gBankAttacker
-_080191E4: .4byte gProtectStructs
-_080191E8: .4byte gSpecialStatuses
-_080191EC: .4byte gBankTarget
-_080191F0: .4byte gBattleMoves
-_080191F4: .4byte gBattleCommunication
-_080191F8: .4byte gBattlescriptCurrInstr
-_080191FC: .4byte gUnknown_081D9950
-_08019200: .4byte gHitMarker
-_08019204:
- ldr r0, _080192B4 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _08019214
- bl _08019F76
-_08019214:
- ldr r1, _080192B8 @ =gBattleMons
- ldr r0, _080192BC @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801922A
- bl _08019F76
-_0801922A:
- ldr r0, _080192C0 @ =gProtectStructs
- lsls r1, r2, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801923C
- bl _08019F76
-_0801923C:
- ldr r1, _080192C4 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08019254
- bl _08019F76
-_08019254:
- ldr r2, _080192C8 @ =gSpecialStatuses
- ldr r0, _080192CC @ =gBankTarget
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801927C
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801927C
- bl _08019F76
-_0801927C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _08019294
- bl _08019F76
-_08019294:
- ldr r1, _080192D0 @ =gBattleCommunication
- movs r0, 0x43
- strb r0, [r1, 0x3]
- bl b_movescr_stack_push_cursor
- ldr r1, _080192D4 @ =gBattlescriptCurrInstr
- ldr r0, _080192D8 @ =gUnknown_081D9950
- str r0, [r1]
- ldr r2, _080192DC @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r2]
- bl _08019F22
- .align 2, 0
-_080192B4: .4byte gBattleMoveFlags
-_080192B8: .4byte gBattleMons
-_080192BC: .4byte gBankAttacker
-_080192C0: .4byte gProtectStructs
-_080192C4: .4byte gBattleMoves
-_080192C8: .4byte gSpecialStatuses
-_080192CC: .4byte gBankTarget
-_080192D0: .4byte gBattleCommunication
-_080192D4: .4byte gBattlescriptCurrInstr
-_080192D8: .4byte gUnknown_081D9950
-_080192DC: .4byte gHitMarker
-_080192E0:
- ldr r0, _08019420 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _080192F0
- bl _08019F76
-_080192F0:
- ldr r5, _08019424 @ =gBattleMons
- ldr r7, _08019428 @ =gBankAttacker
- ldrb r1, [r7]
- movs r6, 0x58
- adds r0, r1, 0
- muls r0, r6
- adds r0, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _08019308
- bl _08019F76
-_08019308:
- ldr r0, _0801942C @ =gProtectStructs
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 31
- cmp r0, 0
- beq _0801931A
- bl _08019F76
-_0801931A:
- ldr r1, _08019430 @ =gBattleMoves
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08019332
- bl _08019F76
-_08019332:
- ldr r3, _08019434 @ =gSpecialStatuses
- ldr r0, _08019438 @ =gBankTarget
- mov r8, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r3, 0
- adds r0, 0x8
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801935C
- adds r0, r3, 0
- adds r0, 0xC
- adds r0, r2, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801935C
- bl _08019F76
-_0801935C:
- adds r0, r1, 0
- muls r0, r6
- adds r0, r5
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801936C
- bl _08019F76
-_0801936C:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- beq _08019384
- bl _08019F76
-_08019384:
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0xC
- bne _08019396
- bl _08019F76
-_08019396:
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0x10]
- bl GetGenderFromSpeciesAndPersonality
- adds r4, r0, 0
- ldr r0, [sp, 0xC]
- ldr r1, [sp, 0x14]
- bl GetGenderFromSpeciesAndPersonality
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _080193B4
- bl _08019F76
-_080193B4:
- ldrb r0, [r7]
- muls r0, r6
- adds r4, r5, 0
- adds r4, 0x50
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _080193CE
- bl _08019F76
-_080193CE:
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0x10]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080193E2
- bl _08019F76
-_080193E2:
- ldr r0, [sp, 0xC]
- ldr r1, [sp, 0x14]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080193F6
- bl _08019F76
-_080193F6:
- ldrb r0, [r7]
- adds r2, r0, 0
- muls r2, r6
- adds r2, r4
- ldr r1, _0801943C @ =gBitTable
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r1, 16
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _08019440 @ =gBattlescriptCurrInstr
- ldr r0, _08019444 @ =gUnknown_081D9943
- str r0, [r1]
- bl _08019F22
- .align 2, 0
-_08019420: .4byte gBattleMoveFlags
-_08019424: .4byte gBattleMons
-_08019428: .4byte gBankAttacker
-_0801942C: .4byte gProtectStructs
-_08019430: .4byte gBattleMoves
-_08019434: .4byte gSpecialStatuses
-_08019438: .4byte gBankTarget
-_0801943C: .4byte gBitTable
-_08019440: .4byte gBattlescriptCurrInstr
-_08019444: .4byte gUnknown_081D9943
-_08019448:
- movs r5, 0
- mov r10, r5
- ldr r0, _0801947C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r10, r0
- bcc _08019458
- bl _08019F76
-_08019458:
- ldr r1, _08019480 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r0, r2, 0
- adds r0, r1
- adds r0, 0x20
- ldrb r0, [r0]
- subs r0, 0x7
- adds r2, r1, 0
- cmp r0, 0x41
- bls _08019472
- b _080196D6
-_08019472:
- lsls r0, 2
- ldr r1, _08019484 @ =_08019488
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801947C: .4byte gNoOfAllBanks
-_08019480: .4byte gBattleMons
-_08019484: .4byte _08019488
- .align 2, 0
-_08019488:
- .4byte _080195EC
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196B0
- .4byte _080196D6
- .4byte _080196D6
- .4byte _08019614
- .4byte _080196D6
- .4byte _08019590
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080195BC
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _08019680
- .4byte _08019650
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _080196D6
- .4byte _08019614
-_08019590:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080195B0 @ =0x00000f88
- ands r0, r1
- cmp r0, 0
- bne _080195AA
- b _080196D6
-_080195AA:
- ldr r0, _080195B4 @ =gBattleTextBuff1
- ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn
- b _0801969C
- .align 2, 0
-_080195B0: .4byte 0x00000f88
-_080195B4: .4byte gBattleTextBuff1
-_080195B8: .4byte gStatusConditionString_PoisonJpn
-_080195BC:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _080195D6
- b _080196D6
-_080195D6:
- ldr r0, _080195E4 @ =gBattleTextBuff1
- ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn
- bl StringCopy
- movs r2, 0x2
- mov r9, r2
- b _080196DC
- .align 2, 0
-_080195E4: .4byte gBattleTextBuff1
-_080195E8: .4byte gStatusConditionString_ConfusionJpn
-_080195EC:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080196D6
- ldr r0, _0801960C @ =gBattleTextBuff1
- ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn
- b _0801969C
- .align 2, 0
-_0801960C: .4byte gBattleTextBuff1
-_08019610: .4byte gStatusConditionString_ParalysisJpn
-_08019614:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _080196D6
- adds r2, 0x50
- adds r2, r3, r2
- ldr r0, [r2]
- ldr r1, _08019644 @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _08019648 @ =gBattleTextBuff1
- ldr r1, _0801964C @ =gStatusConditionString_SleepJpn
- bl StringCopy
- movs r0, 0x1
- mov r9, r0
- b _080196DC
- .align 2, 0
-_08019644: .4byte 0xf7ffffff
-_08019648: .4byte gBattleTextBuff1
-_0801964C: .4byte gStatusConditionString_SleepJpn
-_08019650:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080196D6
- ldr r0, _08019678 @ =gBattleTextBuff1
- ldr r1, _0801967C @ =gStatusConditionString_BurnJpn
- bl StringCopy
- movs r2, 0x1
- mov r9, r2
- b _080196DC
- .align 2, 0
-_08019678: .4byte gBattleTextBuff1
-_0801967C: .4byte gStatusConditionString_BurnJpn
-_08019680:
- movs r0, 0x58
- mov r3, r10
- muls r3, r0
- adds r0, r3, 0
- adds r1, r2, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080196D6
- ldr r0, _080196A8 @ =gBattleTextBuff1
- ldr r1, _080196AC @ =gStatusConditionString_IceJpn
-_0801969C:
- bl StringCopy
- movs r5, 0x1
- mov r9, r5
- b _080196DC
- .align 2, 0
-_080196A8: .4byte gBattleTextBuff1
-_080196AC: .4byte gStatusConditionString_IceJpn
-_080196B0:
- movs r0, 0x58
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0xF0
- lsls r1, 12
- ands r0, r1
- cmp r0, 0
- beq _080196D6
- ldr r0, _080196EC @ =gBattleTextBuff1
- ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn
- bl StringCopy
- movs r2, 0x3
- mov r9, r2
-_080196D6:
- mov r3, r9
- cmp r3, 0
- beq _08019798
-_080196DC:
- mov r5, r9
- cmp r5, 0x2
- beq _08019710
- cmp r5, 0x2
- bgt _080196F4
- cmp r5, 0x1
- beq _080196FC
- b _0801973C
- .align 2, 0
-_080196EC: .4byte gBattleTextBuff1
-_080196F0: .4byte gStatusConditionString_LoveJpn
-_080196F4:
- mov r0, r9
- cmp r0, 0x3
- beq _08019728
- b _0801973C
-_080196FC:
- ldr r1, _0801970C @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x4C
- adds r2, r1
- movs r0, 0
- b _0801973A
- .align 2, 0
-_0801970C: .4byte gBattleMons
-_08019710:
- ldr r1, _08019724 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- movs r1, 0x8
- negs r1, r1
- b _08019738
- .align 2, 0
-_08019724: .4byte gBattleMons
-_08019728:
- ldr r1, _08019778 @ =gBattleMons
- movs r0, 0x58
- mov r2, r10
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, _0801977C @ =0xfff0ffff
-_08019738:
- ands r0, r1
-_0801973A:
- str r0, [r2]
-_0801973C:
- bl b_movescr_stack_push_cursor
- ldr r1, _08019780 @ =gBattlescriptCurrInstr
- ldr r0, _08019784 @ =gUnknown_081D9956
- str r0, [r1]
- ldr r0, _08019788 @ =0x02000000
- ldr r1, _0801978C @ =0x00016003
- adds r0, r1
- mov r2, r10
- strb r2, [r0]
- ldr r4, _08019790 @ =gActiveBank
- strb r2, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _08019794 @ =gUnknown_02024ACC
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl _08019F92
- .align 2, 0
-_08019778: .4byte gBattleMons
-_0801977C: .4byte 0xfff0ffff
-_08019780: .4byte gBattlescriptCurrInstr
-_08019784: .4byte gUnknown_081D9956
-_08019788: .4byte 0x02000000
-_0801978C: .4byte 0x00016003
-_08019790: .4byte gActiveBank
-_08019794: .4byte gUnknown_02024ACC
-_08019798:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _080197B0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r10, r0
- bcs _080197AC
- b _08019458
-_080197AC:
- bl _08019F76
- .align 2, 0
-_080197B0: .4byte gNoOfAllBanks
-_080197B4:
- movs r3, 0
- mov r10, r3
- ldr r0, _080197FC @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r10, r0
- bcc _080197C2
- b _08019F76
-_080197C2:
- ldr r4, _08019800 @ =gBattleMons
-_080197C4:
- movs r0, 0x58
- mov r5, r10
- muls r5, r0
- adds r0, r5, 0
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x3B
- bne _080197E8
- mov r0, r10
- bl castform_switch
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0
- beq _080197E8
- b _08019E40
-_080197E8:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _080197FC @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r10, r0
- bcc _080197C4
- b _08019F76
- .align 2, 0
-_080197FC: .4byte gNoOfAllBanks
-_08019800: .4byte gBattleMons
-_08019804:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x1C
- beq _0801980E
- b _08019F76
-_0801980E:
- ldr r4, _08019860 @ =gHitMarker
- ldr r1, [r4]
- movs r0, 0x80
- lsls r0, 7
- ands r0, r1
- cmp r0, 0
- bne _0801981E
- b _08019F76
-_0801981E:
- ldr r0, _08019864 @ =0xffffbfff
- ands r1, r0
- str r1, [r4]
- ldr r3, _08019868 @ =0x000160ca
- adds r2, r7, r3
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
- cmp r0, 0x6
- bne _08019838
- movs r0, 0x2
- strb r0, [r2]
-_08019838:
- ldr r1, _0801986C @ =gBattleCommunication
- ldrb r0, [r2]
- adds r0, 0x40
- strb r0, [r1, 0x3]
- ldr r0, _08019870 @ =gBankTarget
- ldrb r1, [r0]
- ldr r5, _08019874 @ =0x00016003
- adds r0, r7, r5
- strb r1, [r0]
- bl b_movescr_stack_push_cursor
- ldr r1, _08019878 @ =gBattlescriptCurrInstr
- ldr r0, _0801987C @ =gUnknown_081D9953
- str r0, [r1]
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r4]
- b _08019F22
- .align 2, 0
-_08019860: .4byte gHitMarker
-_08019864: .4byte 0xffffbfff
-_08019868: .4byte 0x000160ca
-_0801986C: .4byte gBattleCommunication
-_08019870: .4byte gBankTarget
-_08019874: .4byte 0x00016003
-_08019878: .4byte gBattlescriptCurrInstr
-_0801987C: .4byte gUnknown_081D9953
-_08019880:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0x1C
- beq _0801988A
- b _08019F76
-_0801988A:
- ldr r4, _080198DC @ =gHitMarker
- ldr r1, [r4]
- movs r0, 0x80
- lsls r0, 7
- ands r0, r1
- cmp r0, 0
- bne _0801989A
- b _08019F76
-_0801989A:
- ldr r0, _080198E0 @ =0xffffbfff
- ands r1, r0
- str r1, [r4]
- ldr r3, _080198E4 @ =0x000160ca
- adds r2, r7, r3
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
- cmp r0, 0x6
- bne _080198B4
- movs r0, 0x2
- strb r0, [r2]
-_080198B4:
- ldr r1, _080198E8 @ =gBattleCommunication
- ldrb r0, [r2]
- strb r0, [r1, 0x3]
- ldr r0, _080198EC @ =gBankAttacker
- ldrb r1, [r0]
- ldr r5, _080198F0 @ =0x00016003
- adds r0, r7, r5
- strb r1, [r0]
- bl b_movescr_stack_push_cursor
- ldr r1, _080198F4 @ =gBattlescriptCurrInstr
- ldr r0, _080198F8 @ =gUnknown_081D9953
- str r0, [r1]
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 6
- orrs r0, r1
- str r0, [r4]
- b _08019F22
- .align 2, 0
-_080198DC: .4byte gHitMarker
-_080198E0: .4byte 0xffffbfff
-_080198E4: .4byte 0x000160ca
-_080198E8: .4byte gBattleCommunication
-_080198EC: .4byte gBankAttacker
-_080198F0: .4byte 0x00016003
-_080198F4: .4byte gBattlescriptCurrInstr
-_080198F8: .4byte gUnknown_081D9953
-_080198FC:
- movs r4, 0
- ldr r0, _08019934 @ =gNoOfAllBanks
- ldrb r1, [r0]
- cmp r4, r1
- blt _08019908
- b _08019F76
-_08019908:
- ldr r0, _08019938 @ =gBattleMons
- adds r5, r1, 0
- ldr r2, _0801993C @ =gStatuses3
- adds r3, r0, 0
- adds r3, 0x20
- movs r6, 0x80
- lsls r6, 12
-_08019916:
- ldrb r1, [r3]
- cmp r1, 0x16
- bne _08019926
- ldr r0, [r2]
- ands r0, r6
- cmp r0, 0
- beq _08019926
- b _08019E6C
-_08019926:
- adds r2, 0x4
- adds r3, 0x58
- adds r4, 0x1
- cmp r4, r5
- blt _08019916
- b _08019F76
- .align 2, 0
-_08019934: .4byte gNoOfAllBanks
-_08019938: .4byte gBattleMons
-_0801993C: .4byte gStatuses3
-_08019940:
- movs r4, 0
- ldr r0, _08019A1C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _0801994C
- b _08019F76
-_0801994C:
- ldr r0, _08019A20 @ =gActiveBank
- mov r8, r0
- ldr r1, _08019A24 @ =gBattleMons
- adds r1, 0x20
- str r1, [sp, 0x1C]
- movs r2, 0
- str r2, [sp, 0x20]
-_0801995A:
- ldr r3, [sp, 0x1C]
- ldrb r0, [r3]
- cmp r0, 0x24
- beq _08019964
- b _08019AF6
-_08019964:
- ldr r0, _08019A28 @ =gStatuses3
- ldr r5, [sp, 0x20]
- adds r0, r5, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 13
- ands r1, r0
- str r5, [sp, 0x18]
- cmp r1, 0
- bne _0801997A
- b _08019AF6
-_0801997A:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBankIdentity
- movs r1, 0x1
- adds r5, r0, 0
- eors r5, r1
- ands r5, r1
- adds r0, r5, 0
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r5, 0x2
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08019A2C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080199AE
- b _08019ABC
-_080199AE:
- movs r1, 0x58
- adds r0, r6, 0
- muls r0, r1
- ldr r3, _08019A24 @ =gBattleMons
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _08019A78
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _08019A34
- movs r1, 0x58
- adds r0, r7, 0
- muls r0, r1
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _08019A34
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _08019A34
- str r2, [sp, 0x24]
- bl Random
- ldr r2, [sp, 0x24]
- adds r1, r2, 0
- ands r1, r0
- lsls r1, 1
- orrs r5, r1
- adds r0, r5, 0
- bl GetBankByPlayerAI
- mov r2, r8
- strb r0, [r2]
- ldrb r0, [r2]
- movs r3, 0x58
- muls r0, r3
- ldr r5, _08019A24 @ =gBattleMons
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r1, [sp, 0x1C]
- strb r0, [r1]
- ldrb r0, [r2]
- muls r0, r3
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- ldr r2, _08019A30 @ =gLastUsedAbility
- strb r0, [r2]
- b _08019AE4
- .align 2, 0
-_08019A1C: .4byte gNoOfAllBanks
-_08019A20: .4byte gActiveBank
-_08019A24: .4byte gBattleMons
-_08019A28: .4byte gStatuses3
-_08019A2C: .4byte gBattleTypeFlags
-_08019A30: .4byte gLastUsedAbility
-_08019A34:
- ldr r3, _08019A74 @ =gBattleMons
- movs r2, 0x58
- adds r0, r6, 0
- muls r0, r2
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _08019A78
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _08019A78
- mov r5, r8
- strb r6, [r5]
- adds r1, r4, 0
- muls r1, r2
- adds r1, r3
- ldrb r0, [r5]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, 0x20
- strb r0, [r1]
- ldrb r0, [r5]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- b _08019AE0
- .align 2, 0
-_08019A74: .4byte gBattleMons
-_08019A78:
- ldr r3, _08019AB8 @ =gBattleMons
- movs r2, 0x58
- adds r0, r7, 0
- muls r0, r2
- adds r1, r0, r3
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0
- beq _08019AEE
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _08019AEE
- mov r5, r8
- strb r7, [r5]
- adds r1, r4, 0
- muls r1, r2
- adds r1, r3
- ldrb r0, [r5]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- adds r1, 0x20
- strb r0, [r1]
- ldrb r0, [r5]
- muls r0, r2
- adds r0, r3
- adds r0, 0x20
- ldrb r0, [r0]
- b _08019AE0
- .align 2, 0
-_08019AB8: .4byte gBattleMons
-_08019ABC:
- mov r2, r8
- strb r6, [r2]
- movs r3, 0x58
- adds r0, r6, 0
- muls r0, r3
- ldr r5, _08019B10 @ =gBattleMons
- adds r0, r5
- adds r2, r0, 0
- adds r2, 0x20
- ldrb r1, [r2]
- cmp r1, 0
- beq _08019AEE
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _08019AEE
- ldr r0, [sp, 0x1C]
- strb r1, [r0]
- ldrb r0, [r2]
-_08019AE0:
- ldr r1, _08019B14 @ =gLastUsedAbility
- strb r0, [r1]
-_08019AE4:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08019AEE:
- mov r2, r9
- cmp r2, 0
- beq _08019AF6
- b _08019E88
-_08019AF6:
- ldr r3, [sp, 0x1C]
- adds r3, 0x58
- str r3, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- adds r5, 0x4
- str r5, [sp, 0x20]
- adds r4, 0x1
- ldr r0, _08019B18 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- bge _08019B0E
- b _0801995A
-_08019B0E:
- b _08019F76
- .align 2, 0
-_08019B10: .4byte gBattleMons
-_08019B14: .4byte gLastUsedAbility
-_08019B18: .4byte gNoOfAllBanks
-_08019B1C:
- movs r4, 0
- ldr r0, _08019B54 @ =gNoOfAllBanks
- ldrb r1, [r0]
- cmp r4, r1
- blt _08019B28
- b _08019F76
-_08019B28:
- ldr r0, _08019B58 @ =gBattleMons
- adds r5, r1, 0
- ldr r2, _08019B5C @ =gStatuses3
- adds r3, r0, 0
- adds r3, 0x20
- movs r6, 0x80
- lsls r6, 12
-_08019B36:
- ldrb r1, [r3]
- cmp r1, 0x16
- bne _08019B46
- ldr r0, [r2]
- ands r0, r6
- cmp r0, 0
- beq _08019B46
- b _08019F04
-_08019B46:
- adds r2, 0x4
- adds r3, 0x58
- adds r4, 0x1
- cmp r4, r5
- blt _08019B36
- b _08019F76
- .align 2, 0
-_08019B54: .4byte gNoOfAllBanks
-_08019B58: .4byte gBattleMons
-_08019B5C: .4byte gStatuses3
-_08019B60:
- mov r0, r10
- bl GetBankSide
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r0, _08019BB0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019B76
- b _08019F76
-_08019B76:
- ldr r7, _08019BB4 @ =gBattleMons
-_08019B78:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- adds r3, r4, 0x1
- cmp r0, r5
- beq _08019BA2
- movs r0, 0x58
- muls r0, r4
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r6
- bne _08019BA2
- ldr r0, _08019BB8 @ =gLastUsedAbility
- strb r6, [r0]
- lsls r0, r3, 24
- lsrs r0, 24
- mov r9, r0
-_08019BA2:
- adds r4, r3, 0
- ldr r0, _08019BB0 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019B78
- b _08019F76
- .align 2, 0
-_08019BB0: .4byte gNoOfAllBanks
-_08019BB4: .4byte gBattleMons
-_08019BB8: .4byte gLastUsedAbility
-_08019BBC:
- mov r0, r10
- bl GetBankSide
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r0, _08019C0C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019BD2
- b _08019F76
-_08019BD2:
- ldr r7, _08019C10 @ =gBattleMons
-_08019BD4:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- adds r3, r4, 0x1
- cmp r0, r5
- bne _08019BFE
- movs r0, 0x58
- muls r0, r4
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r6
- bne _08019BFE
- ldr r0, _08019C14 @ =gLastUsedAbility
- strb r6, [r0]
- lsls r0, r3, 24
- lsrs r0, 24
- mov r9, r0
-_08019BFE:
- adds r4, r3, 0
- ldr r0, _08019C0C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019BD4
- b _08019F76
- .align 2, 0
-_08019C0C: .4byte gNoOfAllBanks
-_08019C10: .4byte gBattleMons
-_08019C14: .4byte gLastUsedAbility
-_08019C18:
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0xFD
- beq _08019C40
- cmp r0, 0xFE
- beq _08019C78
- movs r4, 0
- ldr r0, _08019C38 @ =gNoOfAllBanks
- adds r5, r0, 0
- ldrb r2, [r5]
- cmp r4, r2
- blt _08019C32
- b _08019F76
-_08019C32:
- ldr r2, _08019C3C @ =gBattleMons
- b _08019CB0
- .align 2, 0
-_08019C38: .4byte gNoOfAllBanks
-_08019C3C: .4byte gBattleMons
-_08019C40:
- movs r4, 0
- ldr r0, _08019C70 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019C4C
- b _08019F76
-_08019C4C:
- ldr r5, _08019C74 @ =gStatuses3
- movs r2, 0x80
- lsls r2, 9
- adds r1, r0, 0
-_08019C54:
- lsls r0, r4, 2
- adds r0, r5
- ldr r0, [r0]
- ands r0, r2
- adds r3, r4, 0x1
- cmp r0, 0
- beq _08019C68
- lsls r0, r3, 24
- lsrs r0, 24
- mov r9, r0
-_08019C68:
- adds r4, r3, 0
- cmp r4, r1
- blt _08019C54
- b _08019F76
- .align 2, 0
-_08019C70: .4byte gNoOfAllBanks
-_08019C74: .4byte gStatuses3
-_08019C78:
- movs r4, 0
- ldr r0, _08019CA8 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019C84
- b _08019F76
-_08019C84:
- ldr r5, _08019CAC @ =gStatuses3
- movs r2, 0x80
- lsls r2, 10
- adds r1, r0, 0
-_08019C8C:
- lsls r0, r4, 2
- adds r0, r5
- ldr r0, [r0]
- ands r0, r2
- adds r3, r4, 0x1
- cmp r0, 0
- beq _08019CA0
- lsls r0, r3, 24
- lsrs r0, 24
- mov r9, r0
-_08019CA0:
- adds r4, r3, 0
- cmp r4, r1
- blt _08019C8C
- b _08019F76
- .align 2, 0
-_08019CA8: .4byte gNoOfAllBanks
-_08019CAC: .4byte gStatuses3
-_08019CB0:
- movs r0, 0x58
- muls r0, r4
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- adds r3, r4, 0x1
- cmp r0, r6
- bne _08019CCA
- mov r0, r8
- strb r6, [r0]
- lsls r0, r3, 24
- lsrs r0, 24
- mov r9, r0
-_08019CCA:
- adds r4, r3, 0
- ldrb r1, [r5]
- cmp r4, r1
- blt _08019CB0
- b _08019F76
-_08019CD4:
- movs r4, 0
- ldr r0, _08019D10 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019CE0
- b _08019F76
-_08019CE0:
- ldr r7, _08019D14 @ =gBattleMons
- adds r2, r0, 0
- movs r5, 0x58
-_08019CE6:
- adds r0, r4, 0
- muls r0, r5
- adds r1, r0, r7
- adds r0, r1, 0
- adds r0, 0x20
- ldrb r0, [r0]
- adds r3, r4, 0x1
- cmp r0, r6
- bne _08019D08
- ldrh r0, [r1, 0x28]
- cmp r0, 0
- beq _08019D08
- mov r0, r8
- strb r6, [r0]
- lsls r0, r3, 24
- lsrs r0, 24
- mov r9, r0
-_08019D08:
- adds r4, r3, 0
- cmp r4, r2
- blt _08019CE6
- b _08019F76
- .align 2, 0
-_08019D10: .4byte gNoOfAllBanks
-_08019D14: .4byte gBattleMons
-_08019D18:
- movs r4, 0
- ldr r0, _08019D50 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019D24
- b _08019F76
-_08019D24:
- ldr r7, _08019D54 @ =gBattleMons
- adds r1, r0, 0
- movs r5, 0x58
- ldr r2, _08019D58 @ =gLastUsedAbility
-_08019D2C:
- adds r0, r4, 0
- muls r0, r5
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- adds r3, r4, 0x1
- cmp r0, r6
- bne _08019D48
- cmp r4, r10
- beq _08019D48
- strb r6, [r2]
- lsls r0, r3, 24
- lsrs r0, 24
- mov r9, r0
-_08019D48:
- adds r4, r3, 0
- cmp r4, r1
- blt _08019D2C
- b _08019F76
- .align 2, 0
-_08019D50: .4byte gNoOfAllBanks
-_08019D54: .4byte gBattleMons
-_08019D58: .4byte gLastUsedAbility
-_08019D5C:
- mov r0, r10
- bl GetBankSide
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r0, _08019DAC @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019D72
- b _08019F76
-_08019D72:
- ldr r7, _08019DB0 @ =gBattleMons
-_08019D74:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r5
- beq _08019DA0
- movs r0, 0x58
- muls r0, r4
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r6
- bne _08019DA0
- ldr r0, _08019DB4 @ =gLastUsedAbility
- strb r6, [r0]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08019DA0:
- adds r4, 0x1
- ldr r0, _08019DAC @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019D74
- b _08019F76
- .align 2, 0
-_08019DAC: .4byte gNoOfAllBanks
-_08019DB0: .4byte gBattleMons
-_08019DB4: .4byte gLastUsedAbility
-_08019DB8:
- mov r0, r10
- bl GetBankSide
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r0, _08019E08 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019DCE
- b _08019F76
-_08019DCE:
- ldr r7, _08019E0C @ =gBattleMons
-_08019DD0:
- lsls r0, r4, 24
- lsrs r0, 24
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r5
- bne _08019DFC
- movs r0, 0x58
- muls r0, r4
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, r6
- bne _08019DFC
- ldr r0, _08019E10 @ =gLastUsedAbility
- strb r6, [r0]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08019DFC:
- adds r4, 0x1
- ldr r0, _08019E08 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _08019DD0
- b _08019F76
- .align 2, 0
-_08019E08: .4byte gNoOfAllBanks
-_08019E0C: .4byte gBattleMons
-_08019E10: .4byte gLastUsedAbility
-_08019E14:
- ldr r0, _08019E30 @ =gUnknown_081D977D
- bl b_push_move_exec
- ldr r0, _08019E34 @ =0x02000000
- ldr r2, _08019E38 @ =0x00016003
- adds r1, r0, r2
- strb r6, [r1]
- mov r1, r9
- subs r1, 0x1
- ldr r3, _08019E3C @ =0x0001609b
- adds r0, r3
- strb r1, [r0]
- b _08019F76
- .align 2, 0
-_08019E30: .4byte gUnknown_081D977D
-_08019E34: .4byte 0x02000000
-_08019E38: .4byte 0x00016003
-_08019E3C: .4byte 0x0001609b
-_08019E40:
- ldr r0, _08019E5C @ =gUnknown_081D977D
- bl b_push_move_exec
- ldr r0, _08019E60 @ =0x02000000
- ldr r5, _08019E64 @ =0x00016003
- adds r1, r0, r5
- mov r2, r10
- strb r2, [r1]
- mov r1, r9
- subs r1, 0x1
- ldr r3, _08019E68 @ =0x0001609b
- adds r0, r3
- strb r1, [r0]
- b _08019F92
- .align 2, 0
-_08019E5C: .4byte gUnknown_081D977D
-_08019E60: .4byte 0x02000000
-_08019E64: .4byte 0x00016003
-_08019E68: .4byte 0x0001609b
-_08019E6C:
- mov r5, r8
- strb r1, [r5]
- ldr r0, [r2]
- ldr r1, _08019E80 @ =0xfff7ffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _08019E84 @ =gUnknown_081D978C
- bl b_push_move_exec
- b _08019F1A
- .align 2, 0
-_08019E80: .4byte 0xfff7ffff
-_08019E84: .4byte gUnknown_081D978C
-_08019E88:
- ldr r0, _08019EDC @ =gUnknown_081D9726
- bl b_push_move_exec
- ldr r1, _08019EE0 @ =gStatuses3
- ldr r2, [sp, 0x18]
- adds r1, r2, r1
- ldr r0, [r1]
- ldr r2, _08019EE4 @ =0xffefffff
- ands r0, r2
- str r0, [r1]
- ldr r0, _08019EE8 @ =0x02000000
- ldr r3, _08019EEC @ =0x00016003
- adds r0, r3
- strb r4, [r0]
- ldr r1, _08019EF0 @ =gBattleTextBuff1
- movs r4, 0xFD
- strb r4, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- ldr r2, _08019EF4 @ =gActiveBank
- ldrb r0, [r2]
- strb r0, [r1, 0x2]
- ldr r3, _08019EF8 @ =gBattlePartyID
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r1, _08019EFC @ =gBattleTextBuff2
- strb r4, [r1]
- movs r0, 0x9
- strb r0, [r1, 0x1]
- ldr r0, _08019F00 @ =gLastUsedAbility
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r1, 0x3]
- b _08019F76
- .align 2, 0
-_08019EDC: .4byte gUnknown_081D9726
-_08019EE0: .4byte gStatuses3
-_08019EE4: .4byte 0xffefffff
-_08019EE8: .4byte 0x02000000
-_08019EEC: .4byte 0x00016003
-_08019EF0: .4byte gBattleTextBuff1
-_08019EF4: .4byte gActiveBank
-_08019EF8: .4byte gBattlePartyID
-_08019EFC: .4byte gBattleTextBuff2
-_08019F00: .4byte gLastUsedAbility
-_08019F04:
- mov r5, r8
- strb r1, [r5]
- ldr r0, [r2]
- ldr r1, _08019F30 @ =0xfff7ffff
- ands r0, r1
- str r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _08019F34 @ =gBattlescriptCurrInstr
- ldr r0, _08019F38 @ =gUnknown_081D9795
- str r0, [r1]
-_08019F1A:
- ldr r0, _08019F3C @ =0x02000000
- ldr r1, _08019F40 @ =0x000160dd
- adds r0, r1
- strb r4, [r0]
-_08019F22:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- b _08019F76
- .align 2, 0
-_08019F30: .4byte 0xfff7ffff
-_08019F34: .4byte gBattlescriptCurrInstr
-_08019F38: .4byte gUnknown_081D9795
-_08019F3C: .4byte 0x02000000
-_08019F40: .4byte 0x000160dd
-_08019F44:
- movs r4, 0
- ldr r0, _08019FA4 @ =gNoOfAllBanks
- ldrb r1, [r0]
- cmp r4, r1
- bge _08019F76
- ldr r0, _08019FA8 @ =gBattleMons
- adds r2, r1, 0
- adds r1, r0, 0
- adds r1, 0x20
- ldr r3, _08019FAC @ =gLastUsedAbility
-_08019F58:
- ldrb r0, [r1]
- cmp r0, r6
- bne _08019F6E
- cmp r4, r10
- beq _08019F6E
- strb r6, [r3]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08019F6E:
- adds r1, 0x58
- adds r4, 0x1
- cmp r4, r2
- blt _08019F58
-_08019F76:
- mov r2, r9
- cmp r2, 0
- beq _08019F92
-_08019F7C:
- ldr r3, [sp, 0x4]
- cmp r3, 0xB
- bhi _08019F92
- ldr r1, _08019FAC @ =gLastUsedAbility
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _08019F92
- adds r1, r0, 0
- mov r0, r10
- bl RecordAbilityBattle
-_08019F92:
- mov r0, r9
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08019FA4: .4byte gNoOfAllBanks
-_08019FA8: .4byte gBattleMons
-_08019FAC: .4byte gLastUsedAbility
- thumb_func_end AbilityBattleEffects
-
- thumb_func_start b_call_bc_move_exec
-b_call_bc_move_exec: @ 8019FB0
- ldr r1, _08019FD8 @ =gBattlescriptCurrInstr
- str r0, [r1]
- ldr r3, _08019FDC @ =0x02017140
- adds r2, r3, 0
- adds r2, 0x20
- ldrb r0, [r2]
- adds r1, r0, 0x1
- strb r1, [r2]
- lsls r0, 24
- lsrs r0, 22
- adds r0, r3
- ldr r2, _08019FE0 @ =gBattleMainFunc
- ldr r1, [r2]
- str r1, [r0]
- ldr r0, _08019FE4 @ =sub_8013F54
- str r0, [r2]
- ldr r1, _08019FE8 @ =gFightStateTracker
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08019FD8: .4byte gBattlescriptCurrInstr
-_08019FDC: .4byte 0x02017140
-_08019FE0: .4byte gBattleMainFunc
-_08019FE4: .4byte sub_8013F54
-_08019FE8: .4byte gFightStateTracker
- thumb_func_end b_call_bc_move_exec
-
- thumb_func_start b_push_move_exec
-b_push_move_exec: @ 8019FEC
- push {r4,lr}
- adds r4, r0, 0
- bl b_movescr_stack_push_cursor
- ldr r0, _0801A01C @ =gBattlescriptCurrInstr
- str r4, [r0]
- ldr r3, _0801A020 @ =0x02017140
- adds r2, r3, 0
- adds r2, 0x20
- ldrb r0, [r2]
- adds r1, r0, 0x1
- strb r1, [r2]
- lsls r0, 24
- lsrs r0, 22
- adds r0, r3
- ldr r2, _0801A024 @ =gBattleMainFunc
- ldr r1, [r2]
- str r1, [r0]
- ldr r0, _0801A028 @ =sub_8013FBC
- str r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801A01C: .4byte gBattlescriptCurrInstr
-_0801A020: .4byte 0x02017140
-_0801A024: .4byte gBattleMainFunc
-_0801A028: .4byte sub_8013FBC
- thumb_func_end b_push_move_exec
-
- thumb_func_start ItemBattleEffects
-ItemBattleEffects: @ 801A02C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- movs r0, 0
- mov r10, r0
- movs r1, 0
- str r1, [sp, 0xC]
- add r0, sp, 0x4
- strb r1, [r0]
- ldr r4, _0801A078 @ =gLastUsedItem
- ldr r1, _0801A07C @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0801A084
- ldr r1, _0801A080 @ =gEnigmaBerries
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x7]
- ldrb r0, [r0, 0x1A]
- b _0801A098
- .align 2, 0
-_0801A078: .4byte gLastUsedItem
-_0801A07C: .4byte gBattleMons
-_0801A080: .4byte gEnigmaBerries
-_0801A084:
- ldrh r0, [r4]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r4]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r0, 24
-_0801A098:
- mov r9, r0
- ldr r1, _0801A0C0 @ =gBattleMons
- ldr r0, _0801A0C4 @ =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- str r0, [sp, 0x14]
- cmp r0, 0xAF
- bne _0801A0CC
- ldr r1, _0801A0C8 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r3, [r0, 0x7]
- mov r8, r3
- ldrb r0, [r0, 0x1A]
- b _0801A0E2
- .align 2, 0
-_0801A0C0: .4byte gBattleMons
-_0801A0C4: .4byte gBankAttacker
-_0801A0C8: .4byte gEnigmaBerries
-_0801A0CC:
- ldr r0, [sp, 0x14]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, [sp, 0x14]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r0, 24
-_0801A0E2:
- str r0, [sp, 0x10]
- ldr r2, _0801A118 @ =gBattleMons
- ldr r0, _0801A11C @ =gBankTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r4, [r0, 0x2E]
- cmp r4, 0xAF
- beq _0801A102
- adds r0, r4, 0
- bl ItemId_GetHoldEffect
- adds r0, r4, 0
- bl ItemId_GetHoldEffectParam
-_0801A102:
- ldr r4, [sp, 0x8]
- cmp r4, 0x4
- bls _0801A10C
- bl _0801B3CA
-_0801A10C:
- lsls r0, r4, 2
- ldr r1, _0801A120 @ =_0801A124
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A118: .4byte gBattleMons
-_0801A11C: .4byte gBankTarget
-_0801A120: .4byte _0801A124
- .align 2, 0
-_0801A124:
- .4byte _0801A138
- .4byte _0801A1D4
- .4byte _0801B3CA
- .4byte _0801AE0C
- .4byte _0801B26C
-_0801A138:
- cmp r5, 0x17
- beq _0801A15C
- cmp r5, 0x20
- beq _0801A144
- bl _0801B3CA
-_0801A144:
- ldr r0, _0801A154 @ =0x02000000
- ldr r5, _0801A158 @ =0x00016056
- adds r0, r5
- movs r1, 0x2
- strb r1, [r0]
- bl _0801B3CA
- .align 2, 0
-_0801A154: .4byte 0x02000000
-_0801A158: .4byte 0x00016056
-_0801A15C:
- ldr r0, _0801A1B8 @ =gBattleMons
- mov r8, r0
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x18
- adds r1, r0
- movs r2, 0x6
- movs r3, 0x7
- mov r10, r3
-_0801A172:
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0801A180
- strb r2, [r1]
- movs r4, 0x5
- str r4, [sp, 0xC]
-_0801A180:
- adds r1, 0x1
- movs r5, 0x1
- negs r5, r5
- add r10, r5
- mov r0, r10
- cmp r0, 0
- bge _0801A172
- ldr r1, [sp, 0xC]
- cmp r1, 0
- bne _0801A198
- bl _0801B3CA
-_0801A198:
- ldr r0, _0801A1BC @ =0x02000000
- ldr r2, _0801A1C0 @ =0x00016003
- adds r0, r2
- strb r7, [r0]
- ldr r0, _0801A1C4 @ =gStringBank
- strb r7, [r0]
- ldr r1, _0801A1C8 @ =gActiveBank
- ldr r0, _0801A1CC @ =gBankAttacker
- strb r7, [r0]
- strb r7, [r1]
- ldr r0, _0801A1D0 @ =gUnknown_081D9A5E
- bl b_call_bc_move_exec
- bl _0801B3CA
- .align 2, 0
-_0801A1B8: .4byte gBattleMons
-_0801A1BC: .4byte 0x02000000
-_0801A1C0: .4byte 0x00016003
-_0801A1C4: .4byte gStringBank
-_0801A1C8: .4byte gActiveBank
-_0801A1CC: .4byte gBankAttacker
-_0801A1D0: .4byte gUnknown_081D9A5E
-_0801A1D4:
- ldr r1, _0801A1FC @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r0, r1
- ldrh r0, [r0, 0x28]
- mov r8, r1
- cmp r0, 0
- bne _0801A1E8
- bl _0801B3CA
-_0801A1E8:
- subs r0, r5, 0x1
- cmp r0, 0x2A
- bls _0801A1F2
- bl _0801AD5A
-_0801A1F2:
- lsls r0, 2
- ldr r1, _0801A200 @ =_0801A204
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801A1FC: .4byte gBattleMons
-_0801A200: .4byte _0801A204
- .align 2, 0
-_0801A204:
- .4byte _0801A2B0
- .4byte _0801AAC8
- .4byte _0801AB84
- .4byte _0801AAF8
- .4byte _0801AB2C
- .4byte _0801AB5C
- .4byte _0801A2F8
- .4byte _0801ABC8
- .4byte _0801ABF8
- .4byte _0801A4CC
- .4byte _0801A548
- .4byte _0801A5C4
- .4byte _0801A634
- .4byte _0801A6C8
- .4byte _0801A75C
- .4byte _0801A7D4
- .4byte _0801A838
- .4byte _0801A89C
- .4byte _0801A900
- .4byte _0801A97C
- .4byte _0801A9C8
- .4byte _0801AD5A
- .4byte _0801A3F8
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD24
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801AD5A
- .4byte _0801A46C
-_0801A2B0:
- movs r0, 0x58
- muls r0, r7
- mov r3, r8
- adds r2, r0, r3
- ldrh r0, [r2, 0x2C]
- ldrh r1, [r2, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801A2C6
- bl _0801AD5A
-_0801A2C6:
- cmp r6, 0
- beq _0801A2CE
- bl _0801AD5A
-_0801A2CE:
- ldr r4, _0801A2F0 @ =gBattleMoveDamage
- mov r5, r9
- str r5, [r4]
- ldrh r3, [r2, 0x28]
- adds r0, r3, r5
- ldrh r1, [r2, 0x2C]
- cmp r0, r1
- ble _0801A2E2
- subs r0, r1, r3
- str r0, [r4]
-_0801A2E2:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- ldr r0, _0801A2F4 @ =gUnknown_081D9A74
- bl b_call_bc_move_exec
- b _0801A752
- .align 2, 0
-_0801A2F0: .4byte gBattleMoveDamage
-_0801A2F4: .4byte gUnknown_081D9A74
-_0801A2F8:
- cmp r6, 0
- beq _0801A300
- bl _0801AD5A
-_0801A300:
- adds r0, r7, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0801A324
- ldr r1, _0801A31C @ =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0801A320 @ =gPlayerParty
- b _0801A332
- .align 2, 0
-_0801A31C: .4byte gBattlePartyID
-_0801A320: .4byte gPlayerParty
-_0801A324:
- ldr r1, _0801A3A0 @ =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0801A3A4 @ =gEnemyParty
-_0801A332:
- adds r4, r1, r0
- movs r1, 0
- mov r10, r1
- add r5, sp, 0x4
-_0801A33A:
- mov r1, r10
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- mov r1, r10
- adds r1, 0x11
- adds r0, r4, 0
- bl GetMonData
- strb r0, [r5]
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r6, 0
- beq _0801A36A
- ldrb r0, [r5]
- cmp r0, 0
- beq _0801A374
-_0801A36A:
- movs r2, 0x1
- add r10, r2
- mov r3, r10
- cmp r3, 0x3
- ble _0801A33A
-_0801A374:
- mov r4, r10
- cmp r4, 0x4
- bne _0801A37E
- bl _0801AD5A
-_0801A37E:
- lsls r2, r4, 24
- lsrs r2, 24
- adds r0, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r2, r0, 24
- add r0, sp, 0x4
- ldrb r0, [r0]
- mov r5, r9
- adds r1, r0, r5
- cmp r1, r2
- ble _0801A3A8
- add r0, sp, 0x4
- strb r2, [r0]
- b _0801A3AC
- .align 2, 0
-_0801A3A0: .4byte gBattlePartyID
-_0801A3A4: .4byte gEnemyParty
-_0801A3A8:
- add r0, sp, 0x4
- strb r1, [r0]
-_0801A3AC:
- ldr r1, _0801A3EC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r6, [r1, 0x2]
- lsrs r0, r6, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- ldr r0, _0801A3F0 @ =gUnknown_081D9A91
- bl b_call_bc_move_exec
- mov r1, r10
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- add r0, sp, 0x4
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl EmitSetAttributes
- ldr r0, _0801A3F4 @ =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- movs r1, 0x3
- str r1, [sp, 0xC]
- bl _0801AD62
- .align 2, 0
-_0801A3EC: .4byte gBattleTextBuff1
-_0801A3F0: .4byte gUnknown_081D9A91
-_0801A3F4: .4byte gActiveBank
-_0801A3F8:
- ldr r0, _0801A450 @ =gBattleMons
- movs r1, 0x58
- muls r1, r7
- adds r0, 0x18
- adds r1, r0
- movs r2, 0x6
- movs r3, 0x7
- mov r10, r3
-_0801A408:
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0801A416
- strb r2, [r1]
- movs r4, 0x5
- str r4, [sp, 0xC]
-_0801A416:
- adds r1, 0x1
- movs r5, 0x1
- negs r5, r5
- add r10, r5
- mov r0, r10
- cmp r0, 0
- bge _0801A408
- movs r1, 0x8
- mov r10, r1
- ldr r2, [sp, 0xC]
- cmp r2, 0
- bne _0801A432
- bl _0801B3CA
-_0801A432:
- ldr r0, _0801A454 @ =0x02000000
- ldr r3, _0801A458 @ =0x00016003
- adds r0, r3
- strb r7, [r0]
- ldr r0, _0801A45C @ =gStringBank
- strb r7, [r0]
- ldr r1, _0801A460 @ =gActiveBank
- ldr r0, _0801A464 @ =gBankAttacker
- strb r7, [r0]
- strb r7, [r1]
- ldr r0, _0801A468 @ =gUnknown_081D9A5E
- bl b_call_bc_move_exec
- bl _0801AD5A
- .align 2, 0
-_0801A450: .4byte gBattleMons
-_0801A454: .4byte 0x02000000
-_0801A458: .4byte 0x00016003
-_0801A45C: .4byte gStringBank
-_0801A460: .4byte gActiveBank
-_0801A464: .4byte gBankAttacker
-_0801A468: .4byte gUnknown_081D9A5E
-_0801A46C:
- movs r0, 0x58
- muls r0, r7
- mov r4, r8
- adds r1, r0, r4
- ldrh r0, [r1, 0x28]
- ldrh r2, [r1, 0x2C]
- cmp r0, r2
- bcc _0801A480
- bl _0801AD5A
-_0801A480:
- cmp r6, 0
- beq _0801A488
- bl _0801AD5A
-_0801A488:
- ldr r3, _0801A4C4 @ =gBattleMoveDamage
- ldrh r0, [r1, 0x2C]
- lsrs r0, 4
- str r0, [r3]
- cmp r0, 0
- bne _0801A498
- movs r0, 0x1
- str r0, [r3]
-_0801A498:
- ldrh r2, [r1, 0x28]
- ldr r0, [r3]
- adds r0, r2, r0
- ldrh r1, [r1, 0x2C]
- cmp r0, r1
- ble _0801A4A8
- subs r0, r1, r2
- str r0, [r3]
-_0801A4A8:
- ldr r0, [r3]
- negs r0, r0
- str r0, [r3]
- ldr r0, _0801A4C8 @ =gUnknown_081D9AA1
- bl b_call_bc_move_exec
- movs r3, 0x4
- str r3, [sp, 0xC]
- adds r0, r7, 0
- adds r1, r5, 0
- bl RecordItemBattle
- bl _0801AD5A
- .align 2, 0
-_0801A4C4: .4byte gBattleMoveDamage
-_0801A4C8: .4byte gUnknown_081D9AA1
-_0801A4CC:
- movs r0, 0x58
- adds r4, r7, 0
- muls r4, r0
- str r4, [sp, 0x18]
- add r4, r8
- ldrh r0, [r4, 0x2C]
- ldrh r1, [r4, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801A4E4
- bl _0801AD5A
-_0801A4E4:
- cmp r6, 0
- beq _0801A4EC
- bl _0801AD5A
-_0801A4EC:
- ldr r1, _0801A540 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- strb r6, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r5, _0801A544 @ =gBattleMoveDamage
- ldrh r0, [r4, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _0801A510
- movs r0, 0x1
- str r0, [r5]
-_0801A510:
- ldrh r2, [r4, 0x28]
- ldr r0, [r5]
- adds r0, r2, r0
- ldrh r1, [r4, 0x2C]
- cmp r0, r1
- ble _0801A520
- subs r0, r1, r2
- str r0, [r5]
-_0801A520:
- ldr r0, [r5]
- negs r0, r0
- str r0, [r5]
- mov r0, r8
- adds r0, 0x48
- ldr r5, [sp, 0x18]
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0
-_0801A532:
- bl sub_8040A7C
- lsls r0, 24
- cmp r0, 0
- bge _0801A53E
- b _0801A738
-_0801A53E:
- b _0801A74C
- .align 2, 0
-_0801A540: .4byte gBattleTextBuff1
-_0801A544: .4byte gBattleMoveDamage
-_0801A548:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- str r1, [sp, 0x1C]
- adds r5, r1, 0
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801A562
- bl _0801AD5A
-_0801A562:
- cmp r6, 0
- beq _0801A56A
- bl _0801AD5A
-_0801A56A:
- ldr r1, _0801A5BC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r6, 0x1
- strb r6, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801A5C0 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801A58E
- str r6, [r4]
-_0801A58E:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801A59E
- subs r0, r1, r2
- str r0, [r4]
-_0801A59E:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r2, [sp, 0x1C]
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x1
- bl sub_8040A7C
- lsls r0, 24
- cmp r0, 0
- blt _0801A6A4
- b _0801A6B8
- .align 2, 0
-_0801A5BC: .4byte gBattleTextBuff1
-_0801A5C0: .4byte gBattleMoveDamage
-_0801A5C4:
- movs r0, 0x58
- adds r4, r7, 0
- muls r4, r0
- str r4, [sp, 0x20]
- adds r5, r4, 0
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801A5DC
- b _0801AD5A
-_0801A5DC:
- cmp r6, 0
- beq _0801A5E2
- b _0801AD5A
-_0801A5E2:
- ldr r1, _0801A62C @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801A630 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801A608
- movs r0, 0x1
- str r0, [r4]
-_0801A608:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801A618
- subs r0, r1, r2
- str r0, [r4]
-_0801A618:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r5, [sp, 0x20]
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0x2
- b _0801A532
- .align 2, 0
-_0801A62C: .4byte gBattleTextBuff1
-_0801A630: .4byte gBattleMoveDamage
-_0801A634:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- str r1, [sp, 0x24]
- adds r5, r1, 0
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801A64C
- b _0801AD5A
-_0801A64C:
- cmp r6, 0
- beq _0801A652
- b _0801AD5A
-_0801A652:
- ldr r1, _0801A6AC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r0, 0x3
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801A6B0 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801A678
- movs r0, 0x1
- str r0, [r4]
-_0801A678:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801A688
- subs r0, r1, r2
- str r0, [r4]
-_0801A688:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r2, [sp, 0x24]
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x3
- bl sub_8040A7C
- lsls r0, 24
- cmp r0, 0
- bge _0801A6B8
-_0801A6A4:
- ldr r0, _0801A6B4 @ =gUnknown_081D9AD4
- bl b_call_bc_move_exec
- b _0801A6BE
- .align 2, 0
-_0801A6AC: .4byte gBattleTextBuff1
-_0801A6B0: .4byte gBattleMoveDamage
-_0801A6B4: .4byte gUnknown_081D9AD4
-_0801A6B8:
- ldr r0, _0801A6C4 @ =gUnknown_081D9A74
- bl b_call_bc_move_exec
-_0801A6BE:
- movs r3, 0x4
- str r3, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801A6C4: .4byte gUnknown_081D9A74
-_0801A6C8:
- movs r0, 0x58
- adds r4, r7, 0
- muls r4, r0
- str r4, [sp, 0x28]
- adds r5, r4, 0
- add r5, r8
- ldrh r0, [r5, 0x2C]
- ldrh r1, [r5, 0x28]
- lsrs r0, 1
- cmp r1, r0
- bls _0801A6E0
- b _0801AD5A
-_0801A6E0:
- cmp r6, 0
- beq _0801A6E6
- b _0801AD5A
-_0801A6E6:
- ldr r1, _0801A740 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x8
- strb r0, [r1, 0x1]
- movs r0, 0x4
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r4, _0801A744 @ =gBattleMoveDamage
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801A70C
- movs r0, 0x1
- str r0, [r4]
-_0801A70C:
- ldrh r2, [r5, 0x28]
- ldr r0, [r4]
- adds r0, r2, r0
- ldrh r1, [r5, 0x2C]
- cmp r0, r1
- ble _0801A71C
- subs r0, r1, r2
- str r0, [r4]
-_0801A71C:
- ldr r0, [r4]
- negs r0, r0
- str r0, [r4]
- mov r0, r8
- adds r0, 0x48
- ldr r5, [sp, 0x28]
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0x4
- bl sub_8040A7C
- lsls r0, 24
- cmp r0, 0
- bge _0801A74C
-_0801A738:
- ldr r0, _0801A748 @ =gUnknown_081D9AD4
- bl b_call_bc_move_exec
- b _0801A752
- .align 2, 0
-_0801A740: .4byte gBattleTextBuff1
-_0801A744: .4byte gBattleMoveDamage
-_0801A748: .4byte gUnknown_081D9AD4
-_0801A74C:
- ldr r0, _0801A758 @ =gUnknown_081D9A74
- bl b_call_bc_move_exec
-_0801A752:
- movs r0, 0x4
- str r0, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801A758: .4byte gUnknown_081D9A74
-_0801A75C:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801A774
- b _0801AD5A
-_0801A774:
- cmp r6, 0
- beq _0801A77A
- b _0801AD5A
-_0801A77A:
- movs r0, 0x19
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801A784
- b _0801AD5A
-_0801A784:
- ldr r1, _0801A7BC @ =gBattleTextBuff1
- movs r2, 0xFD
- strb r2, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x1
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r1, _0801A7C0 @ =gBattleTextBuff2
- strb r2, [r1]
- strb r6, [r1, 0x1]
- movs r0, 0xD2
- strb r0, [r1, 0x2]
- strb r6, [r1, 0x3]
- subs r0, 0xD3
- strb r0, [r1, 0x4]
- ldr r0, _0801A7C4 @ =gEffectBank
- strb r7, [r0]
- ldr r1, _0801A7C8 @ =0x02000000
- ldr r3, _0801A7CC @ =0x0001601e
- adds r2, r1, r3
- movs r0, 0x11
- strb r0, [r2]
- ldr r4, _0801A7D0 @ =0x000160a4
- adds r2, r1, r4
- movs r0, 0xF
- b _0801A94C
- .align 2, 0
-_0801A7BC: .4byte gBattleTextBuff1
-_0801A7C0: .4byte gBattleTextBuff2
-_0801A7C4: .4byte gEffectBank
-_0801A7C8: .4byte 0x02000000
-_0801A7CC: .4byte 0x0001601e
-_0801A7D0: .4byte 0x000160a4
-_0801A7D4:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801A7EC
- b _0801AD5A
-_0801A7EC:
- cmp r6, 0
- beq _0801A7F2
- b _0801AD5A
-_0801A7F2:
- movs r0, 0x1A
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801A7FC
- b _0801AD5A
-_0801A7FC:
- ldr r1, _0801A824 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801A828 @ =gEffectBank
- strb r7, [r0]
- ldr r1, _0801A82C @ =0x02000000
- ldr r3, _0801A830 @ =0x0001601e
- adds r2, r1, r3
- movs r0, 0x12
- strb r0, [r2]
- ldr r4, _0801A834 @ =0x000160a4
- adds r2, r1, r4
- movs r0, 0x10
- b _0801A94C
- .align 2, 0
-_0801A824: .4byte gBattleTextBuff1
-_0801A828: .4byte gEffectBank
-_0801A82C: .4byte 0x02000000
-_0801A830: .4byte 0x0001601e
-_0801A834: .4byte 0x000160a4
-_0801A838:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801A850
- b _0801AD5A
-_0801A850:
- cmp r6, 0
- beq _0801A856
- b _0801AD5A
-_0801A856:
- movs r0, 0x1B
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801A860
- b _0801AD5A
-_0801A860:
- ldr r1, _0801A888 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x3
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801A88C @ =gEffectBank
- strb r7, [r0]
- ldr r1, _0801A890 @ =0x02000000
- ldr r3, _0801A894 @ =0x0001601e
- adds r2, r1, r3
- movs r0, 0x13
- strb r0, [r2]
- ldr r4, _0801A898 @ =0x000160a4
- adds r2, r1, r4
- movs r0, 0x11
- b _0801A94C
- .align 2, 0
-_0801A888: .4byte gBattleTextBuff1
-_0801A88C: .4byte gEffectBank
-_0801A890: .4byte 0x02000000
-_0801A894: .4byte 0x0001601e
-_0801A898: .4byte 0x000160a4
-_0801A89C:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801A8B4
- b _0801AD5A
-_0801A8B4:
- cmp r6, 0
- beq _0801A8BA
- b _0801AD5A
-_0801A8BA:
- movs r0, 0x1C
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801A8C4
- b _0801AD5A
-_0801A8C4:
- ldr r1, _0801A8EC @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- movs r0, 0x4
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801A8F0 @ =gEffectBank
- strb r7, [r0]
- ldr r1, _0801A8F4 @ =0x02000000
- ldr r3, _0801A8F8 @ =0x0001601e
- adds r2, r1, r3
- movs r0, 0x14
- strb r0, [r2]
- ldr r4, _0801A8FC @ =0x000160a4
- adds r2, r1, r4
- movs r0, 0x12
- b _0801A94C
- .align 2, 0
-_0801A8EC: .4byte gBattleTextBuff1
-_0801A8F0: .4byte gEffectBank
-_0801A8F4: .4byte 0x02000000
-_0801A8F8: .4byte 0x0001601e
-_0801A8FC: .4byte 0x000160a4
-_0801A900:
- movs r0, 0x58
- muls r0, r7
- mov r1, r8
- adds r5, r0, r1
- ldrh r4, [r5, 0x28]
- ldrh r0, [r5, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801A918
- b _0801AD5A
-_0801A918:
- cmp r6, 0
- beq _0801A91E
- b _0801AD5A
-_0801A91E:
- movs r0, 0x1D
- ldrsb r0, [r5, r0]
- cmp r0, 0xB
- ble _0801A928
- b _0801AD5A
-_0801A928:
- ldr r1, _0801A960 @ =gBattleTextBuff1
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801A964 @ =gEffectBank
- strb r7, [r0]
- ldr r1, _0801A968 @ =0x02000000
- ldr r3, _0801A96C @ =0x0001601e
- adds r2, r1, r3
- movs r0, 0x15
- strb r0, [r2]
- ldr r4, _0801A970 @ =0x000160a4
- adds r2, r1, r4
- movs r0, 0x13
-_0801A94C:
- strb r0, [r2]
- ldr r5, _0801A974 @ =0x000160a5
- adds r1, r5
- strb r6, [r1]
- ldr r0, _0801A978 @ =gUnknown_081D9AFE
- bl b_call_bc_move_exec
- movs r0, 0x5
- str r0, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801A960: .4byte gBattleTextBuff1
-_0801A964: .4byte gEffectBank
-_0801A968: .4byte 0x02000000
-_0801A96C: .4byte 0x0001601e
-_0801A970: .4byte 0x000160a4
-_0801A974: .4byte 0x000160a5
-_0801A978: .4byte gUnknown_081D9AFE
-_0801A97C:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- mov r1, r8
- adds r0, r5, r1
- ldrh r4, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801A996
- b _0801AD5A
-_0801A996:
- cmp r6, 0
- beq _0801A99C
- b _0801AD5A
-_0801A99C:
- mov r0, r8
- adds r0, 0x50
- adds r1, r5, r0
- ldr r2, [r1]
- movs r3, 0x80
- lsls r3, 13
- adds r0, r2, 0
- ands r0, r3
- cmp r0, 0
- beq _0801A9B2
- b _0801AD5A
-_0801A9B2:
- orrs r2, r3
- str r2, [r1]
- ldr r0, _0801A9C4 @ =gUnknown_081D9B19
- bl b_call_bc_move_exec
- movs r2, 0x2
- str r2, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801A9C4: .4byte gUnknown_081D9B19
-_0801A9C8:
- cmp r6, 0
- beq _0801A9CE
- b _0801AD5A
-_0801A9CE:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- mov r3, r8
- adds r0, r5, r3
- ldrh r4, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- mov r1, r9
- bl __divsi3
- cmp r4, r0
- ble _0801A9E8
- b _0801AD5A
-_0801A9E8:
- movs r4, 0
- mov r10, r4
- adds r0, r5, 0x1
- mov r1, r8
- adds r1, 0x18
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xB
- ble _0801AA18
- mov r0, r8
- adds r0, 0x19
- adds r1, r5, r0
-_0801AA04:
- adds r1, 0x1
- movs r5, 0x1
- add r10, r5
- mov r0, r10
- cmp r0, 0x4
- bgt _0801AA18
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- bgt _0801AA04
-_0801AA18:
- mov r1, r10
- cmp r1, 0x5
- bne _0801AA20
- b _0801AD5A
-_0801AA20:
- movs r0, 0x58
- muls r0, r7
- adds r4, r0, 0x1
- ldr r5, _0801AAA4 @ =gUnknown_02024A98
-_0801AA28:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- adds r0, r4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xC
- beq _0801AA28
- ldr r1, _0801AAA8 @ =gBattleTextBuff1
- movs r3, 0
- movs r2, 0xFD
- strb r2, [r1]
- movs r0, 0x5
- strb r0, [r1, 0x1]
- mov r0, r10
- adds r0, 0x1
- strb r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x3]
- ldr r0, _0801AAAC @ =gBattleTextBuff2
- strb r2, [r0]
- strb r3, [r0, 0x1]
- movs r1, 0xD1
- strb r1, [r0, 0x2]
- strb r3, [r0, 0x3]
- strb r3, [r0, 0x4]
- movs r1, 0xD2
- strb r1, [r0, 0x5]
- strb r3, [r0, 0x6]
- subs r1, 0xD3
- strb r1, [r0, 0x7]
- ldr r0, _0801AAB0 @ =gEffectBank
- strb r7, [r0]
- ldr r1, _0801AAB4 @ =0x02000000
- mov r2, r10
- adds r2, 0x21
- ldr r4, _0801AAB8 @ =0x0001601e
- adds r0, r1, r4
- strb r2, [r0]
- adds r2, 0x6
- ldr r5, _0801AABC @ =0x000160a4
- adds r0, r1, r5
- strb r2, [r0]
- ldr r0, _0801AAC0 @ =0x000160a5
- adds r1, r0
- strb r3, [r1]
- ldr r0, _0801AAC4 @ =gUnknown_081D9AFE
- bl b_call_bc_move_exec
- movs r1, 0x5
- str r1, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801AAA4: .4byte gUnknown_02024A98
-_0801AAA8: .4byte gBattleTextBuff1
-_0801AAAC: .4byte gBattleTextBuff2
-_0801AAB0: .4byte gEffectBank
-_0801AAB4: .4byte 0x02000000
-_0801AAB8: .4byte 0x0001601e
-_0801AABC: .4byte 0x000160a4
-_0801AAC0: .4byte 0x000160a5
-_0801AAC4: .4byte gUnknown_081D9AFE
-_0801AAC8:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- bne _0801AAE0
- b _0801AD5A
-_0801AAE0:
- movs r0, 0x41
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801AAF4 @ =gUnknown_081D99B6
- bl b_call_bc_move_exec
- movs r2, 0x1
- str r2, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801AAF4: .4byte gUnknown_081D99B6
-_0801AAF8:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x88
- ands r0, r2
- cmp r0, 0
- bne _0801AB10
- b _0801AD5A
-_0801AB10:
- ldr r0, _0801AB24 @ =0xfffff077
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801AB28 @ =gUnknown_081D99CE
- bl b_call_bc_move_exec
- movs r3, 0x1
- str r3, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801AB24: .4byte 0xfffff077
-_0801AB28: .4byte gUnknown_081D99CE
-_0801AB2C:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- bne _0801AB44
- b _0801AD5A
-_0801AB44:
- movs r0, 0x11
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801AB58 @ =gUnknown_081D99E6
- bl b_call_bc_move_exec
- movs r4, 0x1
- str r4, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801AB58: .4byte gUnknown_081D99E6
-_0801AB5C:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x4C
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- bne _0801AB74
- b _0801AD5A
-_0801AB74:
- movs r0, 0x21
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801AB80 @ =gUnknown_081D99FE
- b _0801AD0E
- .align 2, 0
-_0801AB80: .4byte gUnknown_081D99FE
-_0801AB84:
- movs r0, 0x58
- adds r3, r7, 0
- muls r3, r0
- mov r0, r8
- adds r0, 0x4C
- adds r2, r3, r0
- ldr r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801AB9C
- b _0801AD5A
-_0801AB9C:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- mov r1, r8
- adds r1, 0x50
- adds r1, r3, r1
- ldr r0, [r1]
- ldr r2, _0801ABC0 @ =0xf7ffffff
- ands r0, r2
- str r0, [r1]
- ldr r0, _0801ABC4 @ =gUnknown_081D9A16
- bl b_call_bc_move_exec
- movs r0, 0x1
- str r0, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801ABC0: .4byte 0xf7ffffff
-_0801ABC4: .4byte gUnknown_081D9A16
-_0801ABC8:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x50
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x7
- ands r0, r2
- cmp r0, 0
- bne _0801ABE0
- b _0801AD5A
-_0801ABE0:
- movs r0, 0x8
- negs r0, r0
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801ABF4 @ =gUnknown_081D9A2E
- bl b_call_bc_move_exec
- movs r1, 0x2
- str r1, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801ABF4: .4byte gUnknown_081D9A2E
-_0801ABF8:
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- mov r0, r8
- adds r0, 0x4C
- adds r4, r5, r0
- ldr r2, [r4]
- ldrb r0, [r4]
- cmp r0, 0
- bne _0801AC1E
- mov r0, r8
- adds r0, 0x50
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801AC1E
- b _0801AD5A
-_0801AC1E:
- movs r3, 0
- mov r10, r3
- movs r0, 0x88
- ands r2, r0
- cmp r2, 0
- beq _0801AC36
- ldr r0, _0801ACC4 @ =gBattleTextBuff1
- ldr r1, _0801ACC8 @ =gStatusConditionString_PoisonJpn
- bl StringCopy
- movs r0, 0x1
- mov r10, r0
-_0801AC36:
- ldr r0, [r4]
- movs r1, 0x7
- mov r9, r1
- ands r0, r1
- mov r6, r8
- adds r6, 0x50
- cmp r0, 0
- beq _0801AC5C
- adds r2, r5, r6
- ldr r0, [r2]
- ldr r1, _0801ACCC @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801ACC4 @ =gBattleTextBuff1
- ldr r1, _0801ACD0 @ =gStatusConditionString_SleepJpn
- bl StringCopy
- movs r2, 0x1
- add r10, r2
-_0801AC5C:
- ldr r0, [r4]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801AC72
- ldr r0, _0801ACC4 @ =gBattleTextBuff1
- ldr r1, _0801ACD4 @ =gStatusConditionString_ParalysisJpn
- bl StringCopy
- movs r3, 0x1
- add r10, r3
-_0801AC72:
- ldr r0, [r4]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801AC88
- ldr r0, _0801ACC4 @ =gBattleTextBuff1
- ldr r1, _0801ACD8 @ =gStatusConditionString_BurnJpn
- bl StringCopy
- movs r0, 0x1
- add r10, r0
-_0801AC88:
- ldr r0, [r4]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801AC9E
- ldr r0, _0801ACC4 @ =gBattleTextBuff1
- ldr r1, _0801ACDC @ =gStatusConditionString_IceJpn
- bl StringCopy
- movs r1, 0x1
- add r10, r1
-_0801AC9E:
- adds r0, r5, r6
- ldr r0, [r0]
- mov r2, r9
- ands r0, r2
- cmp r0, 0
- beq _0801ACB6
- ldr r0, _0801ACC4 @ =gBattleTextBuff1
- ldr r1, _0801ACE0 @ =gStatusConditionString_ConfusionJpn
- bl StringCopy
- movs r3, 0x1
- add r10, r3
-_0801ACB6:
- mov r4, r10
- cmp r4, 0x1
- bgt _0801ACE8
- ldr r1, _0801ACE4 @ =gBattleCommunication
- movs r0, 0
- b _0801ACEC
- .align 2, 0
-_0801ACC4: .4byte gBattleTextBuff1
-_0801ACC8: .4byte gStatusConditionString_PoisonJpn
-_0801ACCC: .4byte 0xf7ffffff
-_0801ACD0: .4byte gStatusConditionString_SleepJpn
-_0801ACD4: .4byte gStatusConditionString_ParalysisJpn
-_0801ACD8: .4byte gStatusConditionString_BurnJpn
-_0801ACDC: .4byte gStatusConditionString_IceJpn
-_0801ACE0: .4byte gStatusConditionString_ConfusionJpn
-_0801ACE4: .4byte gBattleCommunication
-_0801ACE8:
- ldr r1, _0801AD18 @ =gBattleCommunication
- movs r0, 0x1
-_0801ACEC:
- strb r0, [r1, 0x5]
- ldr r2, _0801AD1C @ =gBattleMons
- movs r0, 0x58
- adds r3, r7, 0
- muls r3, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r0, r3, r0
- movs r1, 0
- str r1, [r0]
- adds r2, 0x50
- adds r3, r2
- ldr r0, [r3]
- subs r1, 0x8
- ands r0, r1
- str r0, [r3]
- ldr r0, _0801AD20 @ =gUnknown_081D9A44
-_0801AD0E:
- bl b_call_bc_move_exec
- movs r5, 0x1
- str r5, [sp, 0xC]
- b _0801AD62
- .align 2, 0
-_0801AD18: .4byte gBattleCommunication
-_0801AD1C: .4byte gBattleMons
-_0801AD20: .4byte gUnknown_081D9A44
-_0801AD24:
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x50
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r2
- cmp r0, 0
- beq _0801AD5A
- ldr r0, _0801AD84 @ =0xfff0ffff
- ands r2, r0
- str r2, [r1]
- ldr r0, _0801AD88 @ =gBattleTextBuff1
- ldr r1, _0801AD8C @ =gStatusConditionString_LoveJpn
- bl StringCopy
- ldr r0, _0801AD90 @ =gUnknown_081D9A44
- bl b_call_bc_move_exec
- ldr r1, _0801AD94 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- movs r0, 0x2
- str r0, [sp, 0xC]
-_0801AD5A:
- ldr r1, [sp, 0xC]
- cmp r1, 0
- bne _0801AD62
- b _0801B3CA
-_0801AD62:
- ldr r0, _0801AD98 @ =0x02000000
- ldr r2, _0801AD9C @ =0x00016003
- adds r0, r2
- strb r7, [r0]
- ldr r0, _0801ADA0 @ =gStringBank
- strb r7, [r0]
- ldr r4, _0801ADA4 @ =gActiveBank
- ldr r0, _0801ADA8 @ =gBankAttacker
- strb r7, [r0]
- strb r7, [r4]
- ldr r3, [sp, 0xC]
- cmp r3, 0x1
- beq _0801ADAC
- cmp r3, 0x3
- beq _0801ADB2
- b _0801B3CA
- .align 2, 0
-_0801AD84: .4byte 0xfff0ffff
-_0801AD88: .4byte gBattleTextBuff1
-_0801AD8C: .4byte gStatusConditionString_LoveJpn
-_0801AD90: .4byte gUnknown_081D9A44
-_0801AD94: .4byte gBattleCommunication
-_0801AD98: .4byte 0x02000000
-_0801AD9C: .4byte 0x00016003
-_0801ADA0: .4byte gStringBank
-_0801ADA4: .4byte gActiveBank
-_0801ADA8: .4byte gBankAttacker
-_0801ADAC:
- movs r0, 0x58
- muls r0, r7
- b _0801B224
-_0801ADB2:
- ldr r4, _0801AE00 @ =gBattleMons
- movs r0, 0x58
- adds r3, r7, 0
- muls r3, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0801ADCE
- b _0801B3CA
-_0801ADCE:
- ldr r1, _0801AE04 @ =gDisableStructs
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0801AE08 @ =gBitTable
- mov r5, r10
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0801ADEE
- b _0801B3CA
-_0801ADEE:
- adds r1, r5, r3
- adds r0, r4, 0
- adds r0, 0x24
- adds r1, r0
- add r0, sp, 0x4
- ldrb r0, [r0]
- strb r0, [r1]
- b _0801B3CA
- .align 2, 0
-_0801AE00: .4byte gBattleMons
-_0801AE04: .4byte gDisableStructs
-_0801AE08: .4byte gBitTable
-_0801AE0C:
- movs r7, 0
- ldr r0, _0801AE3C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r7, r0
- bcc _0801AE18
- b _0801B3CA
-_0801AE18:
- ldr r4, _0801AE40 @ =gLastUsedItem
- ldr r1, _0801AE44 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0801AE4C
- ldr r1, _0801AE48 @ =gEnigmaBerries
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x7]
- b _0801AE5C
- .align 2, 0
-_0801AE3C: .4byte gNoOfAllBanks
-_0801AE40: .4byte gLastUsedItem
-_0801AE44: .4byte gBattleMons
-_0801AE48: .4byte gEnigmaBerries
-_0801AE4C:
- ldrh r0, [r4]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r4]
- bl ItemId_GetHoldEffectParam
-_0801AE5C:
- subs r0, r5, 0x2
- cmp r0, 0x1A
- bls _0801AE64
- b _0801B208
-_0801AE64:
- lsls r0, 2
- ldr r1, _0801AE70 @ =_0801AE74
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801AE70: .4byte _0801AE74
- .align 2, 0
-_0801AE74:
- .4byte _0801AEE0
- .4byte _0801AFC8
- .4byte _0801AF1C
- .4byte _0801AF58
- .4byte _0801AF94
- .4byte _0801B208
- .4byte _0801B018
- .4byte _0801B0AC
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B1A0
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B208
- .4byte _0801B054
-_0801AEE0:
- ldr r1, _0801AF10 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0801AEF6
- b _0801B208
-_0801AEF6:
- movs r0, 0x41
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801AF14 @ =gBattlescriptCurrInstr
- ldr r0, _0801AF18 @ =gUnknown_081D99BC
- str r0, [r1]
- movs r0, 0x1
- str r0, [sp, 0xC]
- b _0801B20E
- .align 2, 0
-_0801AF10: .4byte gBattleMons
-_0801AF14: .4byte gBattlescriptCurrInstr
-_0801AF18: .4byte gUnknown_081D99BC
-_0801AF1C:
- ldr r1, _0801AF48 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _0801AF32
- b _0801B208
-_0801AF32:
- ldr r0, _0801AF4C @ =0xfffff077
- ands r1, r0
- str r1, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801AF50 @ =gBattlescriptCurrInstr
- ldr r0, _0801AF54 @ =gUnknown_081D99D4
- str r0, [r1]
- movs r1, 0x1
- str r1, [sp, 0xC]
- b _0801B20E
- .align 2, 0
-_0801AF48: .4byte gBattleMons
-_0801AF4C: .4byte 0xfffff077
-_0801AF50: .4byte gBattlescriptCurrInstr
-_0801AF54: .4byte gUnknown_081D99D4
-_0801AF58:
- ldr r1, _0801AF88 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0801AF6E
- b _0801B208
-_0801AF6E:
- movs r0, 0x11
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801AF8C @ =gBattlescriptCurrInstr
- ldr r0, _0801AF90 @ =gUnknown_081D99EC
- str r0, [r1]
- movs r2, 0x1
- str r2, [sp, 0xC]
- b _0801B20E
- .align 2, 0
-_0801AF88: .4byte gBattleMons
-_0801AF8C: .4byte gBattlescriptCurrInstr
-_0801AF90: .4byte gUnknown_081D99EC
-_0801AF94:
- ldr r1, _0801AFBC @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x4C
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801AFAA
- b _0801B208
-_0801AFAA:
- movs r0, 0x21
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801AFC0 @ =gBattlescriptCurrInstr
- ldr r0, _0801AFC4 @ =gUnknown_081D9A04
- b _0801B168
- .align 2, 0
-_0801AFBC: .4byte gBattleMons
-_0801AFC0: .4byte gBattlescriptCurrInstr
-_0801AFC4: .4byte gUnknown_081D9A04
-_0801AFC8:
- ldr r2, _0801B008 @ =gBattleMons
- movs r0, 0x58
- adds r4, r7, 0
- muls r4, r0
- adds r0, r2, 0
- adds r0, 0x4C
- adds r3, r4, r0
- ldr r1, [r3]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801AFE2
- b _0801B208
-_0801AFE2:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r3]
- adds r2, 0x50
- adds r2, r4, r2
- ldr r0, [r2]
- ldr r1, _0801B00C @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801B010 @ =gBattlescriptCurrInstr
- ldr r0, _0801B014 @ =gUnknown_081D9A1C
- str r0, [r1]
- movs r4, 0x1
- str r4, [sp, 0xC]
- b _0801B20E
- .align 2, 0
-_0801B008: .4byte gBattleMons
-_0801B00C: .4byte 0xf7ffffff
-_0801B010: .4byte gBattlescriptCurrInstr
-_0801B014: .4byte gUnknown_081D9A1C
-_0801B018:
- ldr r1, _0801B048 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801B02E
- b _0801B208
-_0801B02E:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801B04C @ =gBattlescriptCurrInstr
- ldr r0, _0801B050 @ =gUnknown_081D9A34
- str r0, [r1]
- movs r5, 0x2
- str r5, [sp, 0xC]
- b _0801B20E
- .align 2, 0
-_0801B048: .4byte gBattleMons
-_0801B04C: .4byte gBattlescriptCurrInstr
-_0801B050: .4byte gUnknown_081D9A34
-_0801B054:
- ldr r1, _0801B090 @ =gBattleMons
- movs r0, 0x58
- muls r0, r7
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- bne _0801B06C
- b _0801B208
-_0801B06C:
- ldr r0, _0801B094 @ =0xfff0ffff
- ands r1, r0
- str r1, [r2]
- ldr r0, _0801B098 @ =gBattleTextBuff1
- ldr r1, _0801B09C @ =gStatusConditionString_LoveJpn
- bl StringCopy
- bl b_movescr_stack_push_cursor
- ldr r1, _0801B0A0 @ =gBattleCommunication
- movs r0, 0
- strb r0, [r1, 0x5]
- ldr r1, _0801B0A4 @ =gBattlescriptCurrInstr
- ldr r0, _0801B0A8 @ =gUnknown_081D9A4A
- str r0, [r1]
- movs r0, 0x2
- str r0, [sp, 0xC]
- b _0801B20E
- .align 2, 0
-_0801B090: .4byte gBattleMons
-_0801B094: .4byte 0xfff0ffff
-_0801B098: .4byte gBattleTextBuff1
-_0801B09C: .4byte gStatusConditionString_LoveJpn
-_0801B0A0: .4byte gBattleCommunication
-_0801B0A4: .4byte gBattlescriptCurrInstr
-_0801B0A8: .4byte gUnknown_081D9A4A
-_0801B0AC:
- ldr r4, _0801B170 @ =gBattleMons
- movs r0, 0x58
- adds r5, r7, 0
- muls r5, r0
- adds r0, r4, 0
- adds r0, 0x4C
- adds r6, r5, r0
- ldr r2, [r6]
- ldrb r0, [r6]
- cmp r0, 0
- bne _0801B0D4
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r5, r0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0801B0D4
- b _0801B208
-_0801B0D4:
- movs r0, 0x88
- ands r2, r0
- cmp r2, 0
- beq _0801B0E4
- ldr r0, _0801B174 @ =gBattleTextBuff1
- ldr r1, _0801B178 @ =gStatusConditionString_PoisonJpn
- bl StringCopy
-_0801B0E4:
- ldr r0, [r6]
- movs r1, 0x7
- mov r8, r1
- ands r0, r1
- adds r4, 0x50
- cmp r0, 0
- beq _0801B104
- adds r2, r5, r4
- ldr r0, [r2]
- ldr r1, _0801B17C @ =0xf7ffffff
- ands r0, r1
- str r0, [r2]
- ldr r0, _0801B174 @ =gBattleTextBuff1
- ldr r1, _0801B180 @ =gStatusConditionString_SleepJpn
- bl StringCopy
-_0801B104:
- ldr r0, [r6]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801B116
- ldr r0, _0801B174 @ =gBattleTextBuff1
- ldr r1, _0801B184 @ =gStatusConditionString_ParalysisJpn
- bl StringCopy
-_0801B116:
- ldr r0, [r6]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801B128
- ldr r0, _0801B174 @ =gBattleTextBuff1
- ldr r1, _0801B188 @ =gStatusConditionString_BurnJpn
- bl StringCopy
-_0801B128:
- ldr r0, [r6]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801B13A
- ldr r0, _0801B174 @ =gBattleTextBuff1
- ldr r1, _0801B18C @ =gStatusConditionString_IceJpn
- bl StringCopy
-_0801B13A:
- adds r5, r4
- ldr r0, [r5]
- mov r2, r8
- ands r0, r2
- cmp r0, 0
- beq _0801B14E
- ldr r0, _0801B174 @ =gBattleTextBuff1
- ldr r1, _0801B190 @ =gStatusConditionString_ConfusionJpn
- bl StringCopy
-_0801B14E:
- movs r4, 0
- str r4, [r6]
- ldr r0, [r5]
- movs r1, 0x8
- negs r1, r1
- ands r0, r1
- str r0, [r5]
- bl b_movescr_stack_push_cursor
- ldr r0, _0801B194 @ =gBattleCommunication
- strb r4, [r0, 0x5]
- ldr r1, _0801B198 @ =gBattlescriptCurrInstr
- ldr r0, _0801B19C @ =gUnknown_081D9A4A
-_0801B168:
- str r0, [r1]
- movs r3, 0x1
- str r3, [sp, 0xC]
- b _0801B20E
- .align 2, 0
-_0801B170: .4byte gBattleMons
-_0801B174: .4byte gBattleTextBuff1
-_0801B178: .4byte gStatusConditionString_PoisonJpn
-_0801B17C: .4byte 0xf7ffffff
-_0801B180: .4byte gStatusConditionString_SleepJpn
-_0801B184: .4byte gStatusConditionString_ParalysisJpn
-_0801B188: .4byte gStatusConditionString_BurnJpn
-_0801B18C: .4byte gStatusConditionString_IceJpn
-_0801B190: .4byte gStatusConditionString_ConfusionJpn
-_0801B194: .4byte gBattleCommunication
-_0801B198: .4byte gBattlescriptCurrInstr
-_0801B19C: .4byte gUnknown_081D9A4A
-_0801B1A0:
- ldr r4, _0801B1F0 @ =gBattleMons
- mov r8, r4
- movs r0, 0x58
- adds r1, r7, 0
- muls r1, r0
- mov r0, r8
- adds r0, 0x18
- adds r1, r0
- movs r2, 0x6
- movs r5, 0x7
- mov r10, r5
-_0801B1B6:
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0801B1C4
- strb r2, [r1]
- movs r0, 0x5
- str r0, [sp, 0xC]
-_0801B1C4:
- adds r1, 0x1
- movs r3, 0x1
- negs r3, r3
- add r10, r3
- mov r4, r10
- cmp r4, 0
- bge _0801B1B6
- ldr r5, [sp, 0xC]
- cmp r5, 0
- beq _0801B254
- ldr r0, _0801B1F4 @ =0x02000000
- ldr r1, _0801B1F8 @ =0x00016003
- adds r0, r1
- strb r7, [r0]
- ldr r0, _0801B1FC @ =gStringBank
- strb r7, [r0]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801B200 @ =gBattlescriptCurrInstr
- ldr r0, _0801B204 @ =gUnknown_081D9A64
- str r0, [r1]
- b _0801B3CA
- .align 2, 0
-_0801B1F0: .4byte gBattleMons
-_0801B1F4: .4byte 0x02000000
-_0801B1F8: .4byte 0x00016003
-_0801B1FC: .4byte gStringBank
-_0801B200: .4byte gBattlescriptCurrInstr
-_0801B204: .4byte gUnknown_081D9A64
-_0801B208:
- ldr r2, [sp, 0xC]
- cmp r2, 0
- beq _0801B254
-_0801B20E:
- ldr r0, _0801B240 @ =0x02000000
- ldr r3, _0801B244 @ =0x00016003
- adds r0, r3
- strb r7, [r0]
- ldr r0, _0801B248 @ =gStringBank
- strb r7, [r0]
- ldr r4, _0801B24C @ =gActiveBank
- strb r7, [r4]
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
-_0801B224:
- ldr r1, _0801B250 @ =gUnknown_02024ACC
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0801B3CA
- .align 2, 0
-_0801B240: .4byte 0x02000000
-_0801B244: .4byte 0x00016003
-_0801B248: .4byte gStringBank
-_0801B24C: .4byte gActiveBank
-_0801B250: .4byte gUnknown_02024ACC
-_0801B254:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0801B268 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r7, r0
- bcs _0801B264
- b _0801AE18
-_0801B264:
- b _0801B3CA
- .align 2, 0
-_0801B268: .4byte gNoOfAllBanks
-_0801B26C:
- ldr r7, _0801B284 @ =gBattleMoveDamage
- ldr r0, [r7]
- cmp r0, 0
- bne _0801B276
- b _0801B3CA
-_0801B276:
- mov r4, r8
- cmp r4, 0x1E
- beq _0801B288
- cmp r4, 0x3E
- beq _0801B330
- b _0801B3CA
- .align 2, 0
-_0801B284: .4byte gBattleMoveDamage
-_0801B288:
- ldr r0, _0801B314 @ =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801B296
- b _0801B3CA
-_0801B296:
- ldr r2, _0801B318 @ =gSpecialStatuses
- ldr r4, _0801B31C @ =gBankTarget
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801B2BC
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0801B2BC
- b _0801B3CA
-_0801B2BC:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r9
- bcs _0801B3CA
- ldr r2, _0801B320 @ =gBattleMoves
- ldr r0, _0801B324 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0801B3CA
- ldr r2, _0801B328 @ =gBattleMons
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801B3CA
- ldr r1, _0801B32C @ =gBattleCommunication
- movs r0, 0x8
- strb r0, [r1, 0x3]
- bl b_movescr_stack_push_cursor
- movs r0, 0
- movs r1, 0
- bl SetMoveEffect
- bl b_movescr_stack_pop_cursor
- b _0801B3CA
- .align 2, 0
-_0801B314: .4byte gBattleMoveFlags
-_0801B318: .4byte gSpecialStatuses
-_0801B31C: .4byte gBankTarget
-_0801B320: .4byte gBattleMoves
-_0801B324: .4byte gCurrentMove
-_0801B328: .4byte gBattleMons
-_0801B32C: .4byte gBattleCommunication
-_0801B330:
- ldr r0, _0801B3DC @ =gBattleMoveFlags
- ldrb r0, [r0]
- movs r4, 0x29
- ands r4, r0
- cmp r4, 0
- bne _0801B3CA
- ldr r1, _0801B3E0 @ =gSpecialStatuses
- ldr r5, _0801B3E4 @ =gBankTarget
- ldrb r2, [r5]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- adds r6, r1, 0x4
- adds r0, r6
- ldr r1, [r0]
- cmp r1, 0
- beq _0801B3CA
- ldr r0, _0801B3E8 @ =0x0000ffff
- cmp r1, r0
- beq _0801B3CA
- ldr r0, _0801B3EC @ =gBankAttacker
- ldrb r3, [r0]
- cmp r3, r2
- beq _0801B3CA
- ldr r2, _0801B3F0 @ =gBattleMons
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r1, [r0, 0x28]
- ldrh r0, [r0, 0x2C]
- cmp r1, r0
- beq _0801B3CA
- cmp r1, 0
- beq _0801B3CA
- ldr r0, _0801B3F4 @ =gLastUsedItem
- mov r1, sp
- ldrh r1, [r1, 0x14]
- strh r1, [r0]
- ldr r0, _0801B3F8 @ =gStringBank
- strb r3, [r0]
- ldr r0, _0801B3FC @ =0x02000000
- ldr r2, _0801B400 @ =0x00016003
- adds r0, r2
- strb r3, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ldr r1, [sp, 0x10]
- bl __divsi3
- negs r0, r0
- str r0, [r7]
- ldrb r1, [r5]
- cmp r0, 0
- bne _0801B3AC
- movs r0, 0x1
- negs r0, r0
- str r0, [r7]
-_0801B3AC:
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- str r4, [r0]
- bl b_movescr_stack_push_cursor
- ldr r1, _0801B404 @ =gBattlescriptCurrInstr
- ldr r0, _0801B408 @ =gUnknown_081D9AA7
- str r0, [r1]
- ldr r0, [sp, 0xC]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0xC]
-_0801B3CA:
- ldr r0, [sp, 0xC]
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801B3DC: .4byte gBattleMoveFlags
-_0801B3E0: .4byte gSpecialStatuses
-_0801B3E4: .4byte gBankTarget
-_0801B3E8: .4byte 0x0000ffff
-_0801B3EC: .4byte gBankAttacker
-_0801B3F0: .4byte gBattleMons
-_0801B3F4: .4byte gLastUsedItem
-_0801B3F8: .4byte gStringBank
-_0801B3FC: .4byte 0x02000000
-_0801B400: .4byte 0x00016003
-_0801B404: .4byte gBattlescriptCurrInstr
-_0801B408: .4byte gUnknown_081D9AA7
- thumb_func_end ItemBattleEffects
-
- thumb_func_start unref_sub_801B40C
-unref_sub_801B40C: @ 801B40C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- str r0, [sp]
- ldr r0, _0801B464 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801B42A
- b _0801B56E
-_0801B42A:
- movs r1, 0x1
- mov r9, r1
-_0801B42E:
- movs r5, 0
- ldr r4, _0801B468 @ =gUnknown_081FC1D0
- ldr r2, [sp]
- adds r2, 0x1
- str r2, [sp, 0x4]
-_0801B438:
- ldr r0, _0801B46C @ =gAbsentBankFlags
- ldrb r2, [r0]
- ldr r3, _0801B470 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r3
- ldr r0, [r0]
- ands r0, r2
- cmp r0, 0
- bne _0801B45A
- adds r0, r5, 0x2
- lsls r1, r0, 2
- adds r1, r3
- ldr r1, [r1]
- ands r2, r1
- adds r7, r0, 0
- cmp r2, 0
- beq _0801B474
-_0801B45A:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- b _0801B556
- .align 2, 0
-_0801B464: .4byte gBattleTypeFlags
-_0801B468: .4byte gUnknown_081FC1D0
-_0801B46C: .4byte gAbsentBankFlags
-_0801B470: .4byte gBitTable
-_0801B474:
- ldr r0, _0801B580 @ =gUnknown_081FC1D0
- ldr r2, [sp]
- lsls r1, r2, 3
- adds r6, r1, r0
- ldr r4, _0801B584 @ =gChosenMovesByBanks
- lsls r0, r5, 1
- adds r3, r0, r4
- ldrh r2, [r6]
- mov r8, r1
- mov r10, r0
- ldrh r3, [r3]
- cmp r2, r3
- bne _0801B4E4
- lsls r0, r7, 1
- adds r0, r4
- ldrh r1, [r6, 0x2]
- ldrh r0, [r0]
- cmp r1, r0
- bne _0801B4E4
- adds r0, r5, 0
- bl GetBankIdentity
- mov r2, r9
- ands r2, r0
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- ldr r0, _0801B588 @ =gSideTimer
- adds r1, r0
- lsls r0, r7, 4
- orrs r0, r5
- strb r0, [r1, 0x3]
- adds r0, r5, 0
- bl GetBankIdentity
- mov r1, r9
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0801B588 @ =gSideTimer
- adds r0, r1
- ldrh r1, [r6, 0x4]
- strh r1, [r0, 0x4]
- adds r0, r5, 0
- bl GetBankIdentity
- mov r1, r9
- ands r1, r0
- lsls r1, 1
- ldr r2, _0801B58C @ =gSideAffecting
- adds r1, r2
- ldrh r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strh r0, [r1]
-_0801B4E4:
- ldr r0, _0801B580 @ =gUnknown_081FC1D0
- mov r1, r8
- adds r4, r1, r0
- ldr r2, _0801B584 @ =gChosenMovesByBanks
- lsls r0, r7, 1
- adds r0, r2
- ldrh r1, [r4]
- ldrh r0, [r0]
- cmp r1, r0
- bne _0801B54E
- mov r0, r10
- adds r1, r0, r2
- ldrh r0, [r4, 0x2]
- ldrh r1, [r1]
- cmp r0, r1
- bne _0801B54E
- adds r0, r5, 0
- bl GetBankIdentity
- mov r2, r9
- ands r2, r0
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- ldr r2, _0801B588 @ =gSideTimer
- adds r1, r2
- lsls r0, r5, 4
- orrs r0, r7
- strb r0, [r1, 0x3]
- adds r0, r5, 0
- bl GetBankIdentity
- mov r1, r9
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0801B588 @ =gSideTimer
- adds r0, r1
- ldrh r1, [r4, 0x4]
- strh r1, [r0, 0x4]
- adds r0, r5, 0
- bl GetBankIdentity
- mov r1, r9
- ands r1, r0
- lsls r1, 1
- ldr r2, _0801B58C @ =gSideAffecting
- adds r1, r2
- ldrh r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strh r0, [r1]
-_0801B54E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _0801B580 @ =gUnknown_081FC1D0
-_0801B556:
- cmp r5, 0x1
- bhi _0801B55C
- b _0801B438
-_0801B55C:
- ldr r0, [sp, 0x4]
- str r0, [sp]
- lsls r0, 3
- adds r0, r4
- ldrh r1, [r0]
- ldr r0, _0801B590 @ =0x0000ffff
- cmp r1, r0
- beq _0801B56E
- b _0801B42E
-_0801B56E:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801B580: .4byte gUnknown_081FC1D0
-_0801B584: .4byte gChosenMovesByBanks
-_0801B588: .4byte gSideTimer
-_0801B58C: .4byte gSideAffecting
-_0801B590: .4byte 0x0000ffff
- thumb_func_end unref_sub_801B40C
-
- thumb_func_start sub_801B594
-sub_801B594: @ 801B594
- push {lr}
- ldr r0, _0801B5B4 @ =gBattleExecBuffer
- ldr r0, [r0]
- cmp r0, 0
- bne _0801B5B0
- ldr r1, _0801B5B8 @ =gBattleScriptingCommandsTable
- ldr r0, _0801B5BC @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
-_0801B5B0:
- pop {r0}
- bx r0
- .align 2, 0
-_0801B5B4: .4byte gBattleExecBuffer
-_0801B5B8: .4byte gBattleScriptingCommandsTable
-_0801B5BC: .4byte gBattlescriptCurrInstr
- thumb_func_end sub_801B594
-
- thumb_func_start sub_801B5C0
-sub_801B5C0: @ 801B5C0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 24
- lsrs r0, r1, 24
- movs r5, 0
- cmp r0, 0
- beq _0801B5DE
- subs r0, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- b _0801B5EA
-_0801B5DE:
- ldr r1, _0801B5FC @ =gBattleMoves
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r0, r1
- ldrb r6, [r0, 0x6]
-_0801B5EA:
- cmp r6, 0x40
- bls _0801B5F0
- b _0801B900
-_0801B5F0:
- lsls r0, r6, 2
- ldr r1, _0801B600 @ =_0801B604
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801B5FC: .4byte gBattleMoves
-_0801B600: .4byte _0801B604
- .align 2, 0
-_0801B604:
- .4byte _0801B708
- .4byte _0801B808
- .4byte _0801B8FC
- .4byte _0801B900
- .4byte _0801B820
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B808
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B8FC
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B808
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B900
- .4byte _0801B808
-_0801B708:
- ldr r0, _0801B7E8 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0801B7EC @ =gSideTimer
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r2, r0, r1
- ldrb r0, [r2, 0x8]
- cmp r0, 0
- beq _0801B73A
- ldr r1, _0801B7F0 @ =gBattleMons
- ldrb r4, [r2, 0x9]
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801B73A
- b _0801B850
-_0801B73A:
- ldr r0, _0801B7E8 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r7, 1
- mov r8, r0
-_0801B74A:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0801B7F4 @ =gNoOfAllBanks
- ldrb r1, [r1]
- bl __modsi3
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _0801B7E8 @ =gBankAttacker
- ldrb r2, [r6]
- cmp r5, r2
- beq _0801B74A
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- beq _0801B74A
- ldr r0, _0801B7F8 @ =gAbsentBankFlags
- ldrb r2, [r0]
- ldr r1, _0801B7FC @ =gBitTable
- lsls r0, r5, 2
- adds r0, r1
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- bne _0801B74A
- ldr r0, _0801B800 @ =gBattleMoves
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x2]
- cmp r0, 0xD
- beq _0801B798
- b _0801B900
-_0801B798:
- ldrb r1, [r6]
- str r2, [sp]
- movs r0, 0x10
- movs r2, 0x1F
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801B7AE
- b _0801B900
-_0801B7AE:
- ldr r2, _0801B7F0 @ =gBattleMons
- movs r1, 0x58
- adds r0, r5, 0
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1F
- bne _0801B7C2
- b _0801B900
-_0801B7C2:
- movs r4, 0x2
- eors r5, r4
- adds r0, r5, 0
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r1, [r0]
- adds r0, r5, 0
- bl RecordAbilityBattle
- ldr r1, _0801B804 @ =gSpecialStatuses
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0]
- orrs r1, r4
- strb r1, [r0]
- b _0801B900
- .align 2, 0
-_0801B7E8: .4byte gBankAttacker
-_0801B7EC: .4byte gSideTimer
-_0801B7F0: .4byte gBattleMons
-_0801B7F4: .4byte gNoOfAllBanks
-_0801B7F8: .4byte gAbsentBankFlags
-_0801B7FC: .4byte gBitTable
-_0801B800: .4byte gBattleMoves
-_0801B804: .4byte gSpecialStatuses
-_0801B808:
- ldr r0, _0801B81C @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- b _0801B8B2
- .align 2, 0
-_0801B81C: .4byte gBankAttacker
-_0801B820:
- ldr r0, _0801B854 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0801B858 @ =gSideTimer
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r2, r0, r1
- ldrb r0, [r2, 0x8]
- cmp r0, 0
- beq _0801B860
- ldr r1, _0801B85C @ =gBattleMons
- ldrb r4, [r2, 0x9]
- movs r0, 0x58
- muls r0, r4
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0801B860
-_0801B850:
- adds r5, r4, 0
- b _0801B900
- .align 2, 0
-_0801B854: .4byte gBankAttacker
-_0801B858: .4byte gSideTimer
-_0801B85C: .4byte gBattleMons
-_0801B860:
- ldr r0, _0801B894 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _0801B8DC
- movs r0, 0x4
- ands r6, r0
- cmp r6, 0
- beq _0801B8DC
- ldr r0, _0801B898 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0801B8A0
- bl Random
- adds r1, r4, 0
- ands r1, r0
- cmp r1, 0
- beq _0801B89C
- movs r0, 0x1
- b _0801B8B2
- .align 2, 0
-_0801B894: .4byte gBattleTypeFlags
-_0801B898: .4byte gBankAttacker
-_0801B89C:
- movs r0, 0x3
- b _0801B8B2
-_0801B8A0:
- bl Random
- adds r1, r4, 0
- ands r1, r0
- cmp r1, 0
- beq _0801B8B0
- movs r0, 0
- b _0801B8B2
-_0801B8B0:
- movs r0, 0x2
-_0801B8B2:
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0801B8D4 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _0801B8D8 @ =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0801B900
- movs r0, 0x2
- eors r5, r0
- b _0801B900
- .align 2, 0
-_0801B8D4: .4byte gAbsentBankFlags
-_0801B8D8: .4byte gBitTable
-_0801B8DC:
- ldr r0, _0801B8F8 @ =gBankAttacker
- ldrb r0, [r0]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r5, r0, 24
- b _0801B900
- .align 2, 0
-_0801B8F8: .4byte gBankAttacker
-_0801B8FC:
- ldr r0, _0801B91C @ =gBankAttacker
- ldrb r5, [r0]
-_0801B900:
- ldr r1, _0801B920 @ =0x02000000
- ldr r0, _0801B91C @ =gBankAttacker
- ldrb r0, [r0]
- ldr r2, _0801B924 @ =0x00016010
- adds r0, r2
- adds r0, r1
- strb r5, [r0]
- adds r0, r5, 0
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801B91C: .4byte gBankAttacker
-_0801B920: .4byte 0x02000000
-_0801B924: .4byte 0x00016010
- thumb_func_end sub_801B5C0
-
- thumb_func_start IsPokeDisobedient
-IsPokeDisobedient: @ 801B928
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- ldr r0, _0801B9E0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0801B9DA
- ldr r7, _0801B9E4 @ =gBankAttacker
- ldrb r0, [r7]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0801B9DA
- ldr r5, _0801B9E8 @ =gBattleMons
- ldrb r0, [r7]
- movs r1, 0x58
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r5, 0
- adds r0, 0x54
- adds r0, r1, r0
- ldr r0, [r0]
- adds r2, r5, 0
- adds r2, 0x3C
- adds r1, r2
- bl IsOtherTrainer
- lsls r0, 24
- cmp r0, 0
- beq _0801B9DA
- ldr r0, _0801B9EC @ =0x0000080e
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _0801B9DA
- movs r6, 0xA
- ldr r0, _0801B9F0 @ =0x00000808
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0801B98E
- movs r6, 0x1E
-_0801B98E:
- ldr r0, _0801B9F4 @ =0x0000080a
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0801B99C
- movs r6, 0x32
-_0801B99C:
- ldr r0, _0801B9F8 @ =0x0000080c
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0801B9AA
- movs r6, 0x46
-_0801B9AA:
- ldrb r0, [r7]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r5
- adds r0, 0x2A
- ldrb r0, [r0]
- cmp r0, r6
- bls _0801B9DA
- bl Random
- movs r1, 0xFF
- ands r1, r0
- ldrb r0, [r7]
- mov r2, r8
- muls r2, r0
- adds r0, r2, r5
- adds r0, 0x2A
- ldrb r0, [r0]
- adds r0, r6
- muls r0, r1
- asrs r4, r0, 8
- cmp r4, r6
- bge _0801B9FC
-_0801B9DA:
- movs r0, 0
- b _0801BC24
- .align 2, 0
-_0801B9E0: .4byte gBattleTypeFlags
-_0801B9E4: .4byte gBankAttacker
-_0801B9E8: .4byte gBattleMons
-_0801B9EC: .4byte 0x0000080e
-_0801B9F0: .4byte 0x00000808
-_0801B9F4: .4byte 0x0000080a
-_0801B9F8: .4byte 0x0000080c
-_0801B9FC:
- ldr r3, _0801BA3C @ =gCurrentMove
- ldrh r0, [r3]
- cmp r0, 0x63
- bne _0801BA12
- adds r0, r5, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r2, _0801BA40 @ =0xff7fffff
- ands r1, r2
- str r1, [r0]
-_0801BA12:
- ldrb r0, [r7]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r1, r5, 0
- adds r1, 0x4C
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801BA4C
- ldrh r0, [r3]
- cmp r0, 0xAD
- beq _0801BA34
- cmp r0, 0xD6
- bne _0801BA4C
-_0801BA34:
- ldr r1, _0801BA44 @ =gBattlescriptCurrInstr
- ldr r0, _0801BA48 @ =gUnknown_081D995F
- b _0801BBCE
- .align 2, 0
-_0801BA3C: .4byte gCurrentMove
-_0801BA40: .4byte 0xff7fffff
-_0801BA44: .4byte gBattlescriptCurrInstr
-_0801BA48: .4byte gUnknown_081D995F
-_0801BA4C:
- bl Random
- movs r5, 0xFF
- adds r1, r5, 0
- ands r1, r0
- ldr r7, _0801BB04 @ =gBattleMons
- ldr r2, _0801BB08 @ =gBankAttacker
- mov r9, r2
- ldrb r3, [r2]
- movs r0, 0x58
- mov r8, r0
- mov r0, r8
- muls r0, r3
- adds r0, r7
- adds r0, 0x2A
- ldrb r2, [r0]
- adds r0, r2, r6
- muls r0, r1
- asrs r4, r0, 8
- cmp r4, r6
- bge _0801BB3C
- ldr r7, _0801BB0C @ =gBitTable
- ldr r5, _0801BB10 @ =gCurrMovePos
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r7
- ldrb r1, [r0]
- adds r0, r3, 0
- movs r2, 0xFF
- bl sub_8015A98
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bne _0801BA94
- b _0801BBBE
-_0801BA94:
- adds r6, r5, 0
- ldr r1, _0801BB14 @ =gUnknown_02024BE5
- mov r9, r1
- movs r2, 0x3
- mov r8, r2
-_0801BA9E:
- bl Random
- mov r1, r8
- ands r0, r1
- mov r2, r9
- strb r0, [r2]
- strb r0, [r6]
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r7
- ldr r5, [r0]
- ands r5, r4
- cmp r5, 0
- bne _0801BA9E
- ldr r4, _0801BB18 @ =gRandomMove
- ldr r3, _0801BB04 @ =gBattleMons
- ldr r0, _0801BB10 @ =gCurrMovePos
- ldrb r0, [r0]
- lsls r0, 1
- ldr r1, _0801BB08 @ =gBankAttacker
- ldrb r2, [r1]
- movs r1, 0x58
- muls r1, r2
- adds r0, r1
- adds r3, 0xC
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r4]
- ldr r0, _0801BB1C @ =gBattleCommunication
- strb r5, [r0, 0x3]
- ldr r0, _0801BB20 @ =gDynamicBasePower
- movs r1, 0
- strh r5, [r0]
- ldr r0, _0801BB24 @ =0x02000000
- ldr r2, _0801BB28 @ =0x0001601c
- adds r0, r2
- strb r1, [r0]
- ldr r1, _0801BB2C @ =gBattlescriptCurrInstr
- ldr r0, _0801BB30 @ =gUnknown_081D996F
- str r0, [r1]
- ldrh r0, [r4]
- movs r1, 0
- bl sub_801B5C0
- ldr r1, _0801BB34 @ =gBankTarget
- strb r0, [r1]
- ldr r2, _0801BB38 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 14
- b _0801BC1E
- .align 2, 0
-_0801BB04: .4byte gBattleMons
-_0801BB08: .4byte gBankAttacker
-_0801BB0C: .4byte gBitTable
-_0801BB10: .4byte gCurrMovePos
-_0801BB14: .4byte gUnknown_02024BE5
-_0801BB18: .4byte gRandomMove
-_0801BB1C: .4byte gBattleCommunication
-_0801BB20: .4byte gDynamicBasePower
-_0801BB24: .4byte 0x02000000
-_0801BB28: .4byte 0x0001601c
-_0801BB2C: .4byte gBattlescriptCurrInstr
-_0801BB30: .4byte gUnknown_081D996F
-_0801BB34: .4byte gBankTarget
-_0801BB38: .4byte gHitMarker
-_0801BB3C:
- subs r0, r2, r6
- lsls r0, 24
- lsrs r6, r0, 24
- bl Random
- adds r4, r5, 0
- ands r4, r0
- cmp r4, r6
- bge _0801BBB8
- mov r1, r9
- ldrb r0, [r1]
- mov r1, r8
- muls r1, r0
- adds r0, r7, 0
- adds r0, 0x4C
- adds r0, r1, r0
- ldr r0, [r0]
- ands r0, r5
- cmp r0, 0
- bne _0801BBB8
- adds r0, r1, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x48
- beq _0801BBB8
- cmp r0, 0xF
- beq _0801BBB8
- movs r2, 0
- ldr r0, _0801BBAC @ =gNoOfAllBanks
- ldrb r3, [r0]
- mov r8, r0
- cmp r2, r3
- bge _0801BB9E
- ldr r0, [r7, 0x50]
- movs r1, 0x70
- ands r0, r1
- cmp r0, 0
- bne _0801BB9E
- adds r1, r7, 0
- adds r1, 0x50
- movs r5, 0x70
-_0801BB8E:
- adds r1, 0x58
- adds r2, 0x1
- cmp r2, r3
- bge _0801BB9E
- ldr r0, [r1]
- ands r0, r5
- cmp r0, 0
- beq _0801BB8E
-_0801BB9E:
- mov r0, r8
- ldrb r0, [r0]
- cmp r2, r0
- bne _0801BBB8
- ldr r1, _0801BBB0 @ =gBattlescriptCurrInstr
- ldr r0, _0801BBB4 @ =gUnknown_081D9989
- b _0801BBCE
- .align 2, 0
-_0801BBAC: .4byte gNoOfAllBanks
-_0801BBB0: .4byte gBattlescriptCurrInstr
-_0801BBB4: .4byte gUnknown_081D9989
-_0801BBB8:
- subs r4, r6
- cmp r4, r6
- blt _0801BBE0
-_0801BBBE:
- bl Random
- ldr r2, _0801BBD4 @ =gBattleCommunication
- movs r1, 0x3
- ands r1, r0
- strb r1, [r2, 0x5]
- ldr r1, _0801BBD8 @ =gBattlescriptCurrInstr
- ldr r0, _0801BBDC @ =gUnknown_081D9977
-_0801BBCE:
- str r0, [r1]
- movs r0, 0x1
- b _0801BC24
- .align 2, 0
-_0801BBD4: .4byte gBattleCommunication
-_0801BBD8: .4byte gBattlescriptCurrInstr
-_0801BBDC: .4byte gUnknown_081D9977
-_0801BBE0:
- ldr r4, _0801BC34 @ =gBankAttacker
- ldrb r1, [r4]
- movs r0, 0x58
- muls r1, r0
- ldr r0, _0801BC38 @ =gBattleMons
- adds r1, r0
- movs r0, 0x28
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- ldrb r0, [r4]
- str r0, [sp, 0x8]
- ldrb r0, [r4]
- str r0, [sp, 0xC]
- adds r0, r1, 0
- movs r2, 0x1
- movs r3, 0
- bl CalculateBaseDamage
- ldr r1, _0801BC3C @ =gBattleMoveDamage
- str r0, [r1]
- ldr r1, _0801BC40 @ =gBankTarget
- ldrb r0, [r4]
- strb r0, [r1]
- ldr r1, _0801BC44 @ =gBattlescriptCurrInstr
- ldr r0, _0801BC48 @ =gUnknown_081D99A0
- str r0, [r1]
- ldr r2, _0801BC4C @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 12
-_0801BC1E:
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x2
-_0801BC24:
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801BC34: .4byte gBankAttacker
-_0801BC38: .4byte gBattleMons
-_0801BC3C: .4byte gBattleMoveDamage
-_0801BC40: .4byte gBankTarget
-_0801BC44: .4byte gBattlescriptCurrInstr
-_0801BC48: .4byte gUnknown_081D99A0
-_0801BC4C: .4byte gHitMarker
- thumb_func_end IsPokeDisobedient
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_anim_807B69C.s b/asm/battle_anim_807B69C.s
deleted file mode 100644
index e34f47f1c..000000000
--- a/asm/battle_anim_807B69C.s
+++ /dev/null
@@ -1,960 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start unref_sub_807B69C
-unref_sub_807B69C: @ 807B69C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _0807B740 @ =gObjectBankIDs
- adds r0, r4, r0
- ldrb r6, [r0]
- ldr r0, _0807B744 @ =sub_807B7E0
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _0807B748 @ =gBattleAnimPicTable + (136 * 8)
- bl LoadCompressedObjectPic
- ldr r0, _0807B74C @ =gBattleAnimPaletteTable + (136 * 8)
- bl LoadCompressedObjectPalette
- ldr r1, _0807B750 @ =gTasks
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r1, r0, r1
- strh r4, [r1, 0x8]
- cmp r5, 0
- beq _0807B75C
- movs r0, 0x1F
- strh r0, [r1, 0xA]
- movs r5, 0
- lsls r0, r6, 4
- ldr r7, _0807B754 @ =gSprites
- adds r0, r6
- lsls r0, 2
- adds r6, r0, r7
-_0807B6F0:
- movs r0, 0x20
- ldrsh r1, [r6, r0]
- ldrh r2, [r6, 0x22]
- adds r2, 0x20
- lsls r2, 16
- asrs r2, 16
- ldr r0, _0807B758 @ =gSpriteTemplate_83931F8
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r3, r0, r7
- lsls r0, r5, 1
- adds r0, r5
- lsls r1, r0, 4
- adds r0, r1
- strh r0, [r3, 0x2E]
- movs r0, 0xFF
- lsls r0, 8
- strh r0, [r3, 0x30]
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- cmp r5, 0x4
- bls _0807B734
- movs r0, 0x15
- strh r0, [r3, 0x3A]
-_0807B734:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x9
- bls _0807B6F0
- b _0807B7BC
- .align 2, 0
-_0807B740: .4byte gObjectBankIDs
-_0807B744: .4byte sub_807B7E0
-_0807B748: .4byte gBattleAnimPicTable + (136 * 8)
-_0807B74C: .4byte gBattleAnimPaletteTable + (136 * 8)
-_0807B750: .4byte gTasks
-_0807B754: .4byte gSprites
-_0807B758: .4byte gSpriteTemplate_83931F8
-_0807B75C:
- movs r0, 0xF8
- lsls r0, 7
- strh r0, [r1, 0xA]
- movs r5, 0
- lsls r0, r6, 4
- ldr r7, _0807B7D8 @ =gSprites
- adds r0, r6
- lsls r0, 2
- adds r6, r0, r7
-_0807B76E:
- movs r2, 0x20
- ldrsh r1, [r6, r2]
- ldrh r2, [r6, 0x22]
- subs r2, 0x20
- lsls r2, 16
- asrs r2, 16
- ldr r0, _0807B7DC @ =gSpriteTemplate_83931F8
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r3, r0, r7
- lsls r0, r5, 1
- adds r0, r5
- lsls r1, r0, 4
- adds r0, r1
- strh r0, [r3, 0x2E]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r3, 0x30]
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- cmp r5, 0x4
- bls _0807B7B2
- movs r0, 0x15
- strh r0, [r3, 0x3A]
-_0807B7B2:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x9
- bls _0807B76E
-_0807B7BC:
- ldr r0, _0807B7D8 @ =gSprites
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x3C]
- mov r0, r8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0807B7D8: .4byte gSprites
-_0807B7DC: .4byte gSpriteTemplate_83931F8
- thumb_func_end unref_sub_807B69C
-
- thumb_func_start sub_807B7E0
-sub_807B7E0: @ 807B7E0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0807B838 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r1, [r4, 0xC]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r0, 0x2
- bne _0807B866
- movs r0, 0
- strh r0, [r4, 0xC]
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 20
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r0, 16
- ldrb r2, [r4, 0x10]
- ldrh r3, [r4, 0xA]
- movs r1, 0x10
- bl BlendPalette
- ldrh r2, [r4, 0x12]
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0807B83C
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _0807B86A
- movs r0, 0x1
- eors r0, r2
- strh r0, [r4, 0x12]
- b _0807B86A
- .align 2, 0
-_0807B838: .4byte gTasks
-_0807B83C:
- ldrh r1, [r4, 0x10]
- subs r0, r1, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- cmp r0, 0
- bge _0807B86A
- strh r1, [r4, 0x10]
- movs r0, 0x1
- eors r0, r2
- strh r0, [r4, 0x12]
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- bne _0807B86A
- adds r0, r5, 0
- bl DestroyTask
- b _0807B86A
-_0807B866:
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
-_0807B86A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_807B7E0
-
- thumb_func_start sub_807B870
-sub_807B870: @ 807B870
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x3A]
- movs r3, 0x3A
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bne _0807B89C
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r3]
- ldr r1, _0807B898 @ =sub_807B8A4
- str r1, [r2, 0x1C]
- adds r0, r2, 0
- bl _call_via_r1
- b _0807B8A0
- .align 2, 0
-_0807B898: .4byte sub_807B8A4
-_0807B89C:
- subs r0, r1, 0x1
- strh r0, [r2, 0x3A]
-_0807B8A0:
- pop {r0}
- bx r0
- thumb_func_end sub_807B870
-
- thumb_func_start sub_807B8A4
-sub_807B8A4: @ 807B8A4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0x20
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0x8
- bl Sin
- strh r0, [r4, 0x26]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- bgt _0807B8D0
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1D
- b _0807B8D6
-_0807B8D0:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1F
-_0807B8D6:
- strb r0, [r1]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x8
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x38]
- adds r0, r1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x34
- bne _0807B918
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0807B912
- adds r0, r4, 0
- bl DestroySpriteAndFreeResources
- b _0807B918
-_0807B912:
- adds r0, r4, 0
- bl DestroySprite
-_0807B918:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_807B8A4
-
- thumb_func_start sub_807B920
-sub_807B920: @ 807B920
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r4, _0807B9B0 @ =gBattleAnimEnemyMonIndex
- ldrb r0, [r4]
- movs r1, 0x2
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 8
- ldr r1, _0807B9B4 @ =0xffe00000
- adds r0, r1
- lsrs r5, r0, 16
- ldrb r0, [r4]
- movs r1, 0x3
- bl sub_8077ABC
- lsls r0, 24
- lsrs r0, 8
- ldr r2, _0807B9B8 @ =0xffdc0000
- adds r0, r2
- lsrs r4, r0, 16
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _0807B95E
- lsls r0, r5, 16
- ldr r1, _0807B9BC @ =0xfffa0000
- adds r0, r1
- lsrs r5, r0, 16
-_0807B95E:
- ldr r1, _0807B9C0 @ =REG_BLDCNT
- movs r2, 0xFD
- lsls r2, 6
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r2, 0x80
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _0807B9C4 @ =gSpriteTemplate_83931E0
- lsls r1, r5, 16
- asrs r1, 16
- lsls r2, r4, 16
- asrs r2, 16
- movs r3, 0x4
- bl CreateSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _0807B9C8 @ =gSprites
- adds r0, r1
- ldr r1, _0807B9CC @ =gSubspriteTables_83931D8
- bl SetSubspriteTables
- ldr r1, _0807B9D0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0x26]
- ldr r1, _0807B9D4 @ =sub_807B9D8
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B9B0: .4byte gBattleAnimEnemyMonIndex
-_0807B9B4: .4byte 0xffe00000
-_0807B9B8: .4byte 0xffdc0000
-_0807B9BC: .4byte 0xfffa0000
-_0807B9C0: .4byte REG_BLDCNT
-_0807B9C4: .4byte gSpriteTemplate_83931E0
-_0807B9C8: .4byte gSprites
-_0807B9CC: .4byte gSubspriteTables_83931D8
-_0807B9D0: .4byte gTasks
-_0807B9D4: .4byte sub_807B9D8
- thumb_func_end sub_807B920
-
- thumb_func_start sub_807B9D8
-sub_807B9D8: @ 807B9D8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0807BA04 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- adds r2, r0, 0
- strh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _0807BA0C
- ldr r0, _0807BA08 @ =sub_807BA24
- str r0, [r1]
- movs r0, 0
- strh r0, [r1, 0xA]
- b _0807BA1C
- .align 2, 0
-_0807BA04: .4byte gTasks
-_0807BA08: .4byte sub_807BA24
-_0807BA0C:
- lsls r0, r2, 24
- lsrs r0, 24
- ldr r2, _0807BA20 @ =REG_BLDALPHA
- movs r1, 0x10
- subs r1, r0
- lsls r1, 8
- orrs r1, r0
- strh r1, [r2]
-_0807BA1C:
- pop {r0}
- bx r0
- .align 2, 0
-_0807BA20: .4byte REG_BLDALPHA
- thumb_func_end sub_807B9D8
-
- thumb_func_start sub_807BA24
-sub_807BA24: @ 807BA24
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0807BABC @ =0x0000271a
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _0807BAC0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r5, r0, r1
- ldrh r0, [r5, 0xA]
- adds r1, r0, 0x1
- strh r1, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xD
- ble _0807BAB4
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _0807BAB4
- ldr r3, _0807BAC4 @ =gPlttBufferFaded
- lsls r2, 4
- mov r12, r2
- ldr r1, _0807BAC8 @ =0x0000010d
- add r1, r12
- lsls r1, 1
- adds r1, r3
- ldrh r4, [r1]
- movs r2, 0x87
- lsls r2, 1
- add r2, r12
- lsls r2, 1
- adds r2, r3
- ldrh r0, [r2]
- strh r0, [r1]
- ldr r0, _0807BACC @ =0x0000010f
- add r0, r12
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- strh r1, [r2]
- strh r4, [r0]
- strh r6, [r5, 0xC]
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _0807BAB4
- strh r6, [r5, 0xE]
- strh r6, [r5, 0xA]
- ldrh r0, [r5, 0x10]
- adds r0, 0x1
- strh r0, [r5, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- bne _0807BAB4
- movs r0, 0x9
- strh r0, [r5, 0xA]
- ldr r0, _0807BAD0 @ =sub_807BAD4
- str r0, [r5]
-_0807BAB4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BABC: .4byte 0x0000271a
-_0807BAC0: .4byte gTasks
-_0807BAC4: .4byte gPlttBufferFaded
-_0807BAC8: .4byte 0x0000010d
-_0807BACC: .4byte 0x0000010f
-_0807BAD0: .4byte sub_807BAD4
- thumb_func_end sub_807BA24
-
- thumb_func_start sub_807BAD4
-sub_807BAD4: @ 807BAD4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0807BB04 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r2, r1, r2
- ldrh r0, [r2, 0xA]
- subs r0, 0x1
- adds r3, r0, 0
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0807BB0C
- ldr r0, _0807BB08 @ =sub_807BB24
- str r0, [r2]
- movs r0, 0
- strh r0, [r2, 0xA]
- b _0807BB1C
- .align 2, 0
-_0807BB04: .4byte gTasks
-_0807BB08: .4byte sub_807BB24
-_0807BB0C:
- lsls r0, r3, 24
- lsrs r0, 24
- ldr r2, _0807BB20 @ =REG_BLDALPHA
- movs r1, 0x10
- subs r1, r0
- lsls r1, 8
- orrs r1, r0
- strh r1, [r2]
-_0807BB1C:
- pop {r0}
- bx r0
- .align 2, 0
-_0807BB20: .4byte REG_BLDALPHA
- thumb_func_end sub_807BAD4
-
- thumb_func_start sub_807BB24
-sub_807BB24: @ 807BB24
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- ldr r1, _0807BB64 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- movs r3, 0
- strh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x25
- bne _0807BB6C
- ldrh r0, [r1, 0x26]
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807BB68 @ =gSprites
- adds r4, r0
- adds r0, r4, 0
- bl FreeSpriteOamMatrix
- adds r0, r4, 0
- bl DestroySprite
- b _0807BB7E
- .align 2, 0
-_0807BB64: .4byte gTasks
-_0807BB68: .4byte gSprites
-_0807BB6C:
- cmp r0, 0x27
- bne _0807BB7E
- ldr r0, _0807BB84 @ =REG_BLDCNT
- strh r3, [r0]
- adds r0, 0x2
- strh r3, [r0]
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_0807BB7E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BB84: .4byte REG_BLDCNT
- thumb_func_end sub_807BB24
-
- thumb_func_start sub_807BB88
-sub_807BB88: @ 807BB88
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r3, 0
- ldr r0, _0807BBA8 @ =0x02017840
- ldrh r0, [r0]
- subs r0, 0xF
- cmp r0, 0x2B
- bls _0807BB9C
- b _0807BD20
-_0807BB9C:
- lsls r0, 2
- ldr r1, _0807BBAC @ =_0807BBB0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807BBA8: .4byte 0x02017840
-_0807BBAC: .4byte _0807BBB0
- .align 2, 0
-_0807BBB0:
- .4byte _0807BC60
- .4byte _0807BC66
- .4byte _0807BC6C
- .4byte _0807BC72
- .4byte _0807BC78
- .4byte _0807BC7E
- .4byte _0807BC84
- .4byte _0807BC8A
- .4byte _0807BC90
- .4byte _0807BC96
- .4byte _0807BC9C
- .4byte _0807BCA2
- .4byte _0807BCA8
- .4byte _0807BCAE
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BCB4
- .4byte _0807BCB8
- .4byte _0807BCBC
- .4byte _0807BCC0
- .4byte _0807BCC4
- .4byte _0807BCC8
- .4byte _0807BCCC
- .4byte _0807BCD0
- .4byte _0807BCD8
- .4byte _0807BCE0
- .4byte _0807BCE8
- .4byte _0807BCF0
- .4byte _0807BCF8
- .4byte _0807BD00
- .4byte _0807BD20
- .4byte _0807BD20
- .4byte _0807BD08
- .4byte _0807BD0C
- .4byte _0807BD10
- .4byte _0807BD18
-_0807BC60:
- movs r5, 0
- movs r2, 0
- b _0807BD28
-_0807BC66:
- movs r5, 0
- movs r2, 0x1
- b _0807BD28
-_0807BC6C:
- movs r5, 0
- movs r2, 0x3
- b _0807BD28
-_0807BC72:
- movs r5, 0
- movs r2, 0x5
- b _0807BD28
-_0807BC78:
- movs r5, 0
- movs r2, 0x6
- b _0807BD28
-_0807BC7E:
- movs r5, 0
- movs r2, 0x2
- b _0807BD28
-_0807BC84:
- movs r5, 0
- movs r2, 0x4
- b _0807BD28
-_0807BC8A:
- movs r5, 0x1
- movs r2, 0
- b _0807BD28
-_0807BC90:
- movs r5, 0x1
- movs r2, 0x1
- b _0807BD28
-_0807BC96:
- movs r5, 0x1
- movs r2, 0x3
- b _0807BD28
-_0807BC9C:
- movs r5, 0x1
- movs r2, 0x5
- b _0807BD28
-_0807BCA2:
- movs r5, 0x1
- movs r2, 0x6
- b _0807BD28
-_0807BCA8:
- movs r5, 0x1
- movs r2, 0x2
- b _0807BD28
-_0807BCAE:
- movs r5, 0x1
- movs r2, 0x4
- b _0807BD28
-_0807BCB4:
- movs r5, 0
- b _0807BCD2
-_0807BCB8:
- movs r5, 0
- b _0807BCDA
-_0807BCBC:
- movs r5, 0
- b _0807BCE2
-_0807BCC0:
- movs r5, 0
- b _0807BCEA
-_0807BCC4:
- movs r5, 0
- b _0807BCF2
-_0807BCC8:
- movs r5, 0
- b _0807BCFA
-_0807BCCC:
- movs r5, 0
- b _0807BD02
-_0807BCD0:
- movs r5, 0x1
-_0807BCD2:
- movs r2, 0
- movs r3, 0x1
- b _0807BD28
-_0807BCD8:
- movs r5, 0x1
-_0807BCDA:
- movs r2, 0x1
- movs r3, 0x1
- b _0807BD28
-_0807BCE0:
- movs r5, 0x1
-_0807BCE2:
- movs r2, 0x3
- movs r3, 0x1
- b _0807BD28
-_0807BCE8:
- movs r5, 0x1
-_0807BCEA:
- movs r2, 0x5
- movs r3, 0x1
- b _0807BD28
-_0807BCF0:
- movs r5, 0x1
-_0807BCF2:
- movs r2, 0x6
- movs r3, 0x1
- b _0807BD28
-_0807BCF8:
- movs r5, 0x1
-_0807BCFA:
- movs r2, 0x2
- movs r3, 0x1
- b _0807BD28
-_0807BD00:
- movs r5, 0x1
-_0807BD02:
- movs r2, 0x4
- movs r3, 0x1
- b _0807BD28
-_0807BD08:
- movs r5, 0
- b _0807BD12
-_0807BD0C:
- movs r5, 0
- b _0807BD1A
-_0807BD10:
- movs r5, 0x1
-_0807BD12:
- movs r2, 0xFF
- movs r3, 0
- b _0807BD28
-_0807BD18:
- movs r5, 0x1
-_0807BD1A:
- movs r2, 0xFF
- movs r3, 0x1
- b _0807BD28
-_0807BD20:
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- b _0807BD4A
-_0807BD28:
- ldr r0, _0807BD50 @ =gBattleAnimArgs
- movs r1, 0
- strh r5, [r0]
- strh r2, [r0, 0x2]
- strh r1, [r0, 0x4]
- strh r1, [r0, 0x6]
- strh r3, [r0, 0x8]
- ldr r1, _0807BD54 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0807BD58 @ =sub_80E32E0
- str r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
-_0807BD4A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BD50: .4byte gBattleAnimArgs
-_0807BD54: .4byte gTasks
-_0807BD58: .4byte sub_80E32E0
- thumb_func_end sub_807BB88
-
- thumb_func_start move_anim_start_t2
-move_anim_start_t2: @ 807BD5C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _0807BD98 @ =gBattleAnimPlayerMonIndex
- strb r4, [r0]
- ldr r0, _0807BD9C @ =gBattleAnimEnemyMonIndex
- strb r4, [r0]
- ldr r0, _0807BDA0 @ =gBattleAnims_StatusConditions
- movs r2, 0
- bl DoMoveAnim
- ldr r0, _0807BDA4 @ =sub_807BDAC
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0807BDA8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BD98: .4byte gBattleAnimPlayerMonIndex
-_0807BD9C: .4byte gBattleAnimEnemyMonIndex
-_0807BDA0: .4byte gBattleAnims_StatusConditions
-_0807BDA4: .4byte sub_807BDAC
-_0807BDA8: .4byte gTasks
- thumb_func_end move_anim_start_t2
-
- thumb_func_start sub_807BDAC
-sub_807BDAC: @ 807BDAC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0807BDF0 @ =gAnimScriptCallback
- ldr r0, [r0]
- bl _call_via_r0
- ldr r0, _0807BDF4 @ =gAnimScriptActive
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807BDEA
- ldr r1, _0807BDF8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r0, _0807BDFC @ =0x02017810
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- adds r0, r4, 0
- bl DestroyTask
-_0807BDEA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BDF0: .4byte gAnimScriptCallback
-_0807BDF4: .4byte gAnimScriptActive
-_0807BDF8: .4byte gTasks
-_0807BDFC: .4byte 0x02017810
- thumb_func_end sub_807BDAC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_message.s b/asm/battle_message.s
deleted file mode 100644
index badbf2b7d..000000000
--- a/asm/battle_message.s
+++ /dev/null
@@ -1,2403 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BufferStringBattle
-BufferStringBattle: @ 8120AA8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 16
- lsrs r7, r0, 16
- movs r6, 0
- ldr r5, _08120B70 @ =gSelectedOrderFromParty
- ldr r4, _08120B74 @ =gActiveBank
- ldrb r1, [r4]
- lsls r1, 9
- ldr r0, _08120B78 @ =gUnknown_02023A64
- adds r1, r0
- str r1, [r5]
- ldr r2, _08120B7C @ =gLastUsedItem
- ldrh r0, [r1, 0x4]
- strh r0, [r2]
- ldr r2, _08120B80 @ =gLastUsedAbility
- ldrb r0, [r1, 0x6]
- strb r0, [r2]
- ldr r3, _08120B84 @ =0x02000000
- ldrb r0, [r1, 0x7]
- mov r8, r0
- ldr r2, _08120B88 @ =0x00016003
- adds r0, r3, r2
- mov r2, r8
- strb r2, [r0]
- ldrb r0, [r1, 0x8]
- mov r8, r0
- ldr r2, _08120B8C @ =0x0001605e
- adds r0, r3, r2
- mov r2, r8
- strb r2, [r0]
- ldrb r0, [r1, 0x9]
- mov r8, r0
- ldr r2, _08120B90 @ =0x000160c1
- adds r0, r3, r2
- mov r2, r8
- strb r2, [r0]
- ldr r2, _08120B94 @ =gStringBank
- ldrb r0, [r1, 0xA]
- strb r0, [r2]
- ldrb r1, [r1, 0xB]
- ldr r2, _08120B98 @ =0x000160a0
- adds r0, r3, r2
- strb r1, [r0]
- movs r2, 0
- mov r9, r3
- ldr r3, _08120B9C @ =gBattleTextBuff1
- mov r10, r3
- ldr r3, _08120BA0 @ =gAbilitiesPerBank
-_08120B10:
- adds r0, r2, r3
- ldr r1, [r5]
- adds r1, 0xC
- adds r1, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _08120B10
- movs r2, 0
- ldr r0, _08120B9C @ =gBattleTextBuff1
- mov r8, r0
- ldr r3, _08120B70 @ =gSelectedOrderFromParty
- ldr r1, _08120BA4 @ =gBattleTextBuff2
- mov r12, r1
- ldr r5, _08120BA8 @ =gBattleTextBuff3
-_08120B30:
- mov r0, r8
- adds r1, r2, r0
- ldr r0, [r3]
- adds r0, 0x10
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- mov r0, r12
- adds r1, r2, r0
- ldr r0, [r3]
- adds r0, 0x20
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, r2, r5
- ldr r0, [r3]
- adds r0, 0x30
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0xF
- ble _08120B30
- cmp r7, 0x5
- bls _08120B64
- b _08120F50
-_08120B64:
- lsls r0, r7, 2
- ldr r1, _08120BAC @ =_08120BB0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08120B70: .4byte gSelectedOrderFromParty
-_08120B74: .4byte gActiveBank
-_08120B78: .4byte gUnknown_02023A64
-_08120B7C: .4byte gLastUsedItem
-_08120B80: .4byte gLastUsedAbility
-_08120B84: .4byte 0x02000000
-_08120B88: .4byte 0x00016003
-_08120B8C: .4byte 0x0001605e
-_08120B90: .4byte 0x000160c1
-_08120B94: .4byte gStringBank
-_08120B98: .4byte 0x000160a0
-_08120B9C: .4byte gBattleTextBuff1
-_08120BA0: .4byte gAbilitiesPerBank
-_08120BA4: .4byte gBattleTextBuff2
-_08120BA8: .4byte gBattleTextBuff3
-_08120BAC: .4byte _08120BB0
- .align 2, 0
-_08120BB0:
- .4byte _08120BC8
- .4byte _08120C40
- .4byte _08120CCC
- .4byte _08120D5C
- .4byte _08120DE8
- .4byte _08120E50
-_08120BC8:
- ldr r0, _08120BEC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08120C00
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08120BF8
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120BF0 @ =gUnknown_084005C7
- cmp r0, 0
- bne _08120BE8
- b _08120F70
-_08120BE8:
- ldr r6, _08120BF4 @ =gUnknown_084005DB
- b _08120F70
- .align 2, 0
-_08120BEC: .4byte gBattleTypeFlags
-_08120BF0: .4byte gUnknown_084005C7
-_08120BF4: .4byte gUnknown_084005DB
-_08120BF8:
- ldr r6, _08120BFC @ =gUnknown_084005AA
- b _08120F70
- .align 2, 0
-_08120BFC: .4byte gUnknown_084005AA
-_08120C00:
- movs r0, 0x80
- lsls r0, 6
- ands r0, r1
- cmp r0, 0
- beq _08120C14
- ldr r6, _08120C10 @ =gUnknown_08400568
- b _08120F70
- .align 2, 0
-_08120C10: .4byte gUnknown_08400568
-_08120C14:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120C24
- ldr r6, _08120C20 @ =gUnknown_08400590
- b _08120F70
- .align 2, 0
-_08120C20: .4byte gUnknown_08400590
-_08120C24:
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- ldr r6, _08120C38 @ =gUnknown_08400555
- cmp r0, 0
- bne _08120C32
- b _08120F70
-_08120C32:
- ldr r6, _08120C3C @ =gUnknown_0840057B
- b _08120F70
- .align 2, 0
-_08120C38: .4byte gUnknown_08400555
-_08120C3C: .4byte gUnknown_0840057B
-_08120C40:
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08120C7C
- ldr r0, _08120C68 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120C74
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120C6C @ =gUnknown_084006A4
- cmp r0, 0
- bne _08120C64
- b _08120F70
-_08120C64:
- ldr r6, _08120C70 @ =gUnknown_084006F1
- b _08120F70
- .align 2, 0
-_08120C68: .4byte gBattleTypeFlags
-_08120C6C: .4byte gUnknown_084006A4
-_08120C70: .4byte gUnknown_084006F1
-_08120C74:
- ldr r6, _08120C78 @ =gUnknown_0840069C
- b _08120F70
- .align 2, 0
-_08120C78: .4byte gUnknown_0840069C
-_08120C7C:
- ldr r0, _08120C94 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120CB4
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08120C9C
- ldr r6, _08120C98 @ =gUnknown_0840065C
- b _08120F70
- .align 2, 0
-_08120C94: .4byte gBattleTypeFlags
-_08120C98: .4byte gUnknown_0840065C
-_08120C9C:
- movs r0, 0x2
- ands r0, r1
- ldr r6, _08120CAC @ =gUnknown_08400608
- cmp r0, 0
- bne _08120CA8
- b _08120F70
-_08120CA8:
- ldr r6, _08120CB0 @ =gUnknown_08400645
- b _08120F70
- .align 2, 0
-_08120CAC: .4byte gUnknown_08400608
-_08120CB0: .4byte gUnknown_08400645
-_08120CB4:
- movs r0, 0x2
- ands r0, r1
- ldr r6, _08120CC4 @ =gUnknown_084005F5
- cmp r0, 0
- bne _08120CC0
- b _08120F70
-_08120CC0:
- ldr r6, _08120CC8 @ =gUnknown_08400635
- b _08120F70
- .align 2, 0
-_08120CC4: .4byte gUnknown_084005F5
-_08120CC8: .4byte gUnknown_08400635
-_08120CCC:
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08120D24
- ldr r0, _08120CE8 @ =0x02000000
- ldr r1, _08120CEC @ =0x000160c1
- adds r0, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _08120CF4
- ldr r6, _08120CF0 @ =gUnknown_08400709
- b _08120F70
- .align 2, 0
-_08120CE8: .4byte 0x02000000
-_08120CEC: .4byte 0x000160c1
-_08120CF0: .4byte gUnknown_08400709
-_08120CF4:
- cmp r2, 0x1
- beq _08120D04
- ldr r0, _08120D08 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120D10
-_08120D04:
- ldr r6, _08120D0C @ =gUnknown_08400727
- b _08120F70
- .align 2, 0
-_08120D08: .4byte gBattleTypeFlags
-_08120D0C: .4byte gUnknown_08400727
-_08120D10:
- ldr r6, _08120D1C @ =gUnknown_08400749
- cmp r2, 0x2
- beq _08120D18
- b _08120F70
-_08120D18:
- ldr r6, _08120D20 @ =gUnknown_08400736
- b _08120F70
- .align 2, 0
-_08120D1C: .4byte gUnknown_08400749
-_08120D20: .4byte gUnknown_08400736
-_08120D24:
- ldr r0, _08120D44 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 4
- cmp r1, r0
- bne _08120D54
- ldr r0, _08120D48 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120D4C @ =gUnknown_08400771
- cmp r0, 0
- bne _08120D40
- b _08120F70
-_08120D40:
- ldr r6, _08120D50 @ =gUnknown_08400781
- b _08120F70
- .align 2, 0
-_08120D44: .4byte gTrainerBattleOpponent
-_08120D48: .4byte gBattleTypeFlags
-_08120D4C: .4byte gUnknown_08400771
-_08120D50: .4byte gUnknown_08400781
-_08120D54:
- ldr r6, _08120D58 @ =gUnknown_0840075E
- b _08120F70
- .align 2, 0
-_08120D58: .4byte gUnknown_0840075E
-_08120D5C:
- ldr r0, _08120D88 @ =0x00016003
- add r0, r9
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08120DB8
- ldr r0, _08120D8C @ =0x000160c1
- add r0, r9
- ldrb r3, [r0]
- cmp r3, 0
- beq _08120D82
- ldr r0, _08120D90 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08120D98
-_08120D82:
- ldr r6, _08120D94 @ =gUnknown_084006B3
- b _08120F70
- .align 2, 0
-_08120D88: .4byte 0x00016003
-_08120D8C: .4byte 0x000160c1
-_08120D90: .4byte gBattleTypeFlags
-_08120D94: .4byte gUnknown_084006B3
-_08120D98:
- cmp r3, 0x1
- bne _08120DA4
- ldr r6, _08120DA0 @ =gUnknown_084006BB
- b _08120F70
- .align 2, 0
-_08120DA0: .4byte gUnknown_084006BB
-_08120DA4:
- ldr r6, _08120DB0 @ =gUnknown_084006D5
- cmp r3, 0x2
- beq _08120DAC
- b _08120F70
-_08120DAC:
- ldr r6, _08120DB4 @ =gUnknown_084006C6
- b _08120F70
- .align 2, 0
-_08120DB0: .4byte gUnknown_084006D5
-_08120DB4: .4byte gUnknown_084006C6
-_08120DB8:
- ldr r0, _08120DD4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08120DE0
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120DD8 @ =gUnknown_0840067C
- cmp r0, 0
- bne _08120DD0
- b _08120F70
-_08120DD0:
- ldr r6, _08120DDC @ =gUnknown_0840068C
- b _08120F70
- .align 2, 0
-_08120DD4: .4byte gBattleTypeFlags
-_08120DD8: .4byte gUnknown_0840067C
-_08120DDC: .4byte gUnknown_0840068C
-_08120DE0:
- ldr r6, _08120DE4 @ =gUnknown_08400622
- b _08120F70
- .align 2, 0
-_08120DE4: .4byte gUnknown_08400622
-_08120DE8:
- mov r0, r10
- bl sub_8121D1C
- ldr r0, _08120E14 @ =gSelectedOrderFromParty
- ldr r2, [r0]
- ldrh r1, [r2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _08120E28
- ldr r0, _08120E18 @ =gBattleTextBuff2
- ldr r2, _08120E1C @ =gUnknown_08401674
- ldr r1, _08120E20 @ =0x02000000
- ldr r3, _08120E24 @ =0x000160a0
- adds r1, r3
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- b _08120E38
- .align 2, 0
-_08120E14: .4byte gSelectedOrderFromParty
-_08120E18: .4byte gBattleTextBuff2
-_08120E1C: .4byte gUnknown_08401674
-_08120E20: .4byte 0x02000000
-_08120E24: .4byte 0x000160a0
-_08120E28:
- ldr r0, _08120E44 @ =gBattleTextBuff2
- ldrh r2, [r2]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _08120E48 @ =gMoveNames
- adds r1, r2
- bl StringCopy
-_08120E38:
- ldr r0, _08120E44 @ =gBattleTextBuff2
- bl sub_8121D74
- ldr r6, _08120E4C @ =gUnknown_084007BD
- b _08120F70
- .align 2, 0
-_08120E44: .4byte gBattleTextBuff2
-_08120E48: .4byte gMoveNames
-_08120E4C: .4byte gUnknown_084007BD
-_08120E50:
- ldr r5, _08120E90 @ =gBattleTextBuff1
- ldrb r1, [r5]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08120EB8
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r5]
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08120E7C
- ldrb r1, [r5]
- cmp r1, 0x3
- beq _08120E7C
- movs r0, 0x3
- eors r0, r1
- strb r0, [r5]
-_08120E7C:
- ldr r0, _08120E90 @ =gBattleTextBuff1
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08120E98
- ldr r6, _08120E94 @ =gUnknown_083FFEFC
- b _08120F70
- .align 2, 0
-_08120E90: .4byte gBattleTextBuff1
-_08120E94: .4byte gUnknown_083FFEFC
-_08120E98:
- ldr r0, _08120EAC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- ldr r6, _08120EB0 @ =gUnknown_083FFFEA
- cmp r0, 0
- beq _08120F70
- ldr r6, _08120EB4 @ =gUnknown_083FFFF7
- b _08120F70
- .align 2, 0
-_08120EAC: .4byte gBattleTypeFlags
-_08120EB0: .4byte gUnknown_083FFFEA
-_08120EB4: .4byte gUnknown_083FFFF7
-_08120EB8:
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08120ED2
- ldrb r1, [r5]
- cmp r1, 0x3
- beq _08120ED2
- movs r0, 0x3
- eors r0, r1
- strb r0, [r5]
-_08120ED2:
- ldr r0, _08120EF0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08120F18
- ldr r0, _08120EF4 @ =gBattleTextBuff1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08120F08
- cmp r0, 0x2
- bgt _08120EF8
- cmp r0, 0x1
- beq _08120EFE
- b _08120F70
- .align 2, 0
-_08120EF0: .4byte gBattleTypeFlags
-_08120EF4: .4byte gBattleTextBuff1
-_08120EF8:
- cmp r0, 0x3
- beq _08120F10
- b _08120F70
-_08120EFE:
- ldr r6, _08120F04 @ =gUnknown_083FFF6A
- b _08120F70
- .align 2, 0
-_08120F04: .4byte gUnknown_083FFF6A
-_08120F08:
- ldr r6, _08120F0C @ =gUnknown_083FFF99
- b _08120F70
- .align 2, 0
-_08120F0C: .4byte gUnknown_083FFF99
-_08120F10:
- ldr r6, _08120F14 @ =gUnknown_083FFFCB
- b _08120F70
- .align 2, 0
-_08120F14: .4byte gUnknown_083FFFCB
-_08120F18:
- ldr r0, _08120F2C @ =gBattleTextBuff1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _08120F40
- cmp r0, 0x2
- bgt _08120F30
- cmp r0, 0x1
- beq _08120F36
- b _08120F70
- .align 2, 0
-_08120F2C: .4byte gBattleTextBuff1
-_08120F30:
- cmp r0, 0x3
- beq _08120F48
- b _08120F70
-_08120F36:
- ldr r6, _08120F3C @ =gUnknown_083FFF56
- b _08120F70
- .align 2, 0
-_08120F3C: .4byte gUnknown_083FFF56
-_08120F40:
- ldr r6, _08120F44 @ =gUnknown_083FFF81
- b _08120F70
- .align 2, 0
-_08120F44: .4byte gUnknown_083FFF81
-_08120F48:
- ldr r6, _08120F4C @ =gUnknown_083FFFB3
- b _08120F70
- .align 2, 0
-_08120F4C: .4byte gUnknown_083FFFB3
-_08120F50:
- movs r0, 0xB5
- lsls r0, 1
- cmp r7, r0
- bls _08120F64
- ldr r1, _08120F60 @ =gDisplayedStringBattle
- movs r0, 0xFF
- strb r0, [r1]
- b _08120F76
- .align 2, 0
-_08120F60: .4byte gDisplayedStringBattle
-_08120F64:
- ldr r1, _08120F84 @ =gBattleStringsTable
- adds r0, r7, 0
- subs r0, 0xC
- lsls r0, 2
- adds r0, r1
- ldr r6, [r0]
-_08120F70:
- adds r0, r6, 0
- bl StrCpyDecodeToDisplayedStringBattle
-_08120F76:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08120F84: .4byte gBattleStringsTable
- thumb_func_end BufferStringBattle
-
- thumb_func_start StrCpyDecodeToDisplayedStringBattle
-StrCpyDecodeToDisplayedStringBattle: @ 8120F88
- push {lr}
- ldr r1, _08120F94 @ =gDisplayedStringBattle
- bl StrCpyDecodeBattle
- pop {r1}
- bx r1
- .align 2, 0
-_08120F94: .4byte gDisplayedStringBattle
- thumb_func_end StrCpyDecodeToDisplayedStringBattle
-
- thumb_func_start sub_8120F98
-sub_8120F98: @ 8120F98
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08120FB0 @ =gUnknown_084017A8
- mov r0, sp
- movs r2, 0x8
- bl memcpy
- mov r2, sp
- movs r3, 0
- b _08120FC0
- .align 2, 0
-_08120FB0: .4byte gUnknown_084017A8
-_08120FB4:
- strb r1, [r2]
- adds r4, 0x1
- adds r2, 0x1
- adds r3, 0x1
- cmp r3, 0x7
- bhi _08120FC8
-_08120FC0:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08120FB4
-_08120FC8:
- ldr r5, [sp]
- ldr r4, [sp, 0x4]
- movs r3, 0
- ldr r2, _08120FE4 @ =gUnknown_081FA6D4
-_08120FD0:
- ldr r1, [r2]
- ldr r0, [r1]
- cmp r5, r0
- bne _08120FE8
- ldr r0, [r1, 0x4]
- cmp r4, r0
- bne _08120FE8
- ldr r0, [r2, 0x4]
- b _08120FF2
- .align 2, 0
-_08120FE4: .4byte gUnknown_081FA6D4
-_08120FE8:
- adds r2, 0x8
- adds r3, 0x1
- cmp r3, 0x6
- bls _08120FD0
- movs r0, 0
-_08120FF2:
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8120F98
-
- thumb_func_start StrCpyDecodeBattle
-StrCpyDecodeBattle: @ 8120FFC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0xC
- mov r9, r0
- mov r8, r1
- movs r6, 0
- movs r4, 0
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r7, r0, 24
- mov r0, r9
- ldrb r1, [r0]
- bl _08121A40
-_0812101E:
- cmp r1, 0xFD
- beq _08121026
- bl _08121A30
-_08121026:
- movs r1, 0x1
- add r9, r1
- mov r2, r9
- ldrb r0, [r2]
- cmp r0, 0x2A
- bls _08121036
- bl _081219E6
-_08121036:
- lsls r0, 2
- ldr r1, _08121040 @ =_08121044
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121040: .4byte _08121044
- .align 2, 0
-_08121044:
- .4byte _081210F0
- .4byte _0812111E
- .4byte _0812115A
- .4byte _08121180
- .4byte _081211A4
- .4byte _081211C8
- .4byte _081211EC
- .4byte _08121218
- .4byte _08121248
- .4byte _08121278
- .4byte _081212A8
- .4byte _0812133C
- .4byte _081213A8
- .4byte _0812141C
- .4byte _08121490
- .4byte _08121504
- .4byte _08121578
- .4byte _081215F8
- .4byte _08121620
- .4byte _08121660
- .4byte _081216EC
- .4byte _081216F4
- .4byte _08121704
- .4byte _08121714
- .4byte _0812172C
- .4byte _0812174C
- .4byte _081217C0
- .4byte _08121830
- .4byte _08121840
- .4byte _08121854
- .4byte _08121868
- .4byte _0812188C
- .4byte _081218B0
- .4byte _081218B8
- .4byte _081218C0
- .4byte _0812195C
- .4byte _081219A4
- .4byte _081219AC
- .4byte _0812197C
- .4byte _08121984
- .4byte _081219CC
- .4byte _081219D4
- .4byte _08121134
-_081210F0:
- ldr r5, _08121100 @ =gBattleTextBuff1
- ldrb r0, [r5]
- cmp r0, 0xFD
- bne _08121108
- ldr r4, _08121104 @ =gStringVar1
- adds r0, r5, 0
- b _08121140
- .align 2, 0
-_08121100: .4byte gBattleTextBuff1
-_08121104: .4byte gStringVar1
-_08121108:
- adds r0, r5, 0
- bl sub_8120F98
- adds r4, r0, 0
- cmp r4, 0
- beq _08121118
- bl _081219E6
-_08121118:
- adds r4, r5, 0
- bl _081219E6
-_0812111E:
- ldr r1, _0812112C @ =gBattleTextBuff2
- ldrb r0, [r1]
- cmp r0, 0xFD
- bne _08121154
- ldr r4, _08121130 @ =gStringVar2
- b _0812113E
- .align 2, 0
-_0812112C: .4byte gBattleTextBuff2
-_08121130: .4byte gStringVar2
-_08121134:
- ldr r1, _0812114C @ =gBattleTextBuff3
- ldrb r0, [r1]
- cmp r0, 0xFD
- bne _08121154
- ldr r4, _08121150 @ =gStringVar3
-_0812113E:
- adds r0, r1, 0
-_08121140:
- adds r1, r4, 0
- bl sub_8121A68
- bl _081219E6
- .align 2, 0
-_0812114C: .4byte gBattleTextBuff3
-_08121150: .4byte gStringVar3
-_08121154:
- adds r4, r1, 0
- bl _081219E6
-_0812115A:
- movs r0, 0
- bl GetBankByPlayerAI
- ldr r1, _08121178 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0812117C @ =gPlayerParty
- adds r0, r1
- bl _0812190E
- .align 2, 0
-_08121178: .4byte gBattlePartyID
-_0812117C: .4byte gPlayerParty
-_08121180:
- movs r0, 0x1
- bl GetBankByPlayerAI
- ldr r1, _0812119C @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081211A0 @ =gEnemyParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_0812119C: .4byte gBattlePartyID
-_081211A0: .4byte gEnemyParty
-_081211A4:
- movs r0, 0x2
- bl GetBankByPlayerAI
- ldr r1, _081211C0 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081211C4 @ =gPlayerParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_081211C0: .4byte gBattlePartyID
-_081211C4: .4byte gPlayerParty
-_081211C8:
- movs r0, 0x3
- bl GetBankByPlayerAI
- ldr r1, _081211E4 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081211E8 @ =gEnemyParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_081211E4: .4byte gBattlePartyID
-_081211E8: .4byte gEnemyParty
-_081211EC:
- ldr r2, _0812120C @ =gBattlePartyID
- ldr r1, _08121210 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x18]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121214 @ =gPlayerParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_0812120C: .4byte gBattlePartyID
-_08121210: .4byte gLinkPlayers
-_08121214: .4byte gPlayerParty
-_08121218:
- ldr r2, _0812123C @ =gBattlePartyID
- ldr r1, _08121240 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x1
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121244 @ =gEnemyParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_0812123C: .4byte gBattlePartyID
-_08121240: .4byte gLinkPlayers
-_08121244: .4byte gEnemyParty
-_08121248:
- ldr r2, _0812126C @ =gBattlePartyID
- ldr r1, _08121270 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x2
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121274 @ =gPlayerParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_0812126C: .4byte gBattlePartyID
-_08121270: .4byte gLinkPlayers
-_08121274: .4byte gPlayerParty
-_08121278:
- ldr r2, _0812129C @ =gBattlePartyID
- ldr r1, _081212A0 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x18]
- movs r0, 0x3
- eors r0, r1
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081212A4 @ =gEnemyParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_0812129C: .4byte gBattlePartyID
-_081212A0: .4byte gLinkPlayers
-_081212A4: .4byte gEnemyParty
-_081212A8:
- ldr r4, _081212CC @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- adds r2, r4, 0
- cmp r0, 0
- beq _0812131C
- ldr r0, _081212D0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _081212D4 @ =gUnknown_08400791
- cmp r0, 0
- beq _081212E6
- ldr r4, _081212D8 @ =gUnknown_08400797
- b _081212E6
- .align 2, 0
-_081212CC: .4byte gBankAttacker
-_081212D0: .4byte gBattleTypeFlags
-_081212D4: .4byte gUnknown_08400791
-_081212D8: .4byte gUnknown_08400797
-_081212DC:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
-_081212E6:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081212DC
- ldrb r0, [r2]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08121314 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121318 @ =gEnemyParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_08121314: .4byte gBattlePartyID
-_08121318: .4byte gEnemyParty
-_0812131C:
- ldrb r0, [r2]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08121338 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08121338: .4byte gBattlePartyID
-_0812133C:
- ldr r4, _08121370 @ =gBankAttacker
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0812137C
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _08121374 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, 0x4
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121378 @ =gPlayerParty
- adds r0, r1
- b _0812190E
- .align 2, 0
-_08121370: .4byte gBankAttacker
-_08121374: .4byte gBattlePartyID
-_08121378: .4byte gPlayerParty
-_0812137C:
- ldrb r0, [r4]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r0, 0x1
- ands r0, r1
- bl GetBankByPlayerAI
- ldr r1, _081213A0 @ =gBattlePartyID
- lsls r0, 24
- lsrs r0, 23
- adds r0, 0x4
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081213A4 @ =gEnemyParty
- b _08121940
- .align 2, 0
-_081213A0: .4byte gBattlePartyID
-_081213A4: .4byte gEnemyParty
-_081213A8:
- ldr r5, _081213F4 @ =gBankAttacker
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _0812140C
- ldr r0, _081213F8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _081213FC @ =gUnknown_08400791
- cmp r0, 0
- beq _081213C6
- ldr r4, _08121400 @ =gUnknown_08400797
-_081213C6:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _08121404 @ =gBattlePartyID
- ldr r2, _08121408 @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _081213E8
-_081213D6:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081213D6
-_081213E8:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _08121908
- .align 2, 0
-_081213F4: .4byte gBankAttacker
-_081213F8: .4byte gBattleTypeFlags
-_081213FC: .4byte gUnknown_08400791
-_08121400: .4byte gUnknown_08400797
-_08121404: .4byte gBattlePartyID
-_08121408: .4byte gEnemyParty
-_0812140C:
- ldr r1, _08121418 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08121418: .4byte gBattlePartyID
-_0812141C:
- ldr r5, _08121468 @ =gBankTarget
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08121480
- ldr r0, _0812146C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _08121470 @ =gUnknown_08400791
- cmp r0, 0
- beq _0812143A
- ldr r4, _08121474 @ =gUnknown_08400797
-_0812143A:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _08121478 @ =gBattlePartyID
- ldr r2, _0812147C @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _0812145C
-_0812144A:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _0812144A
-_0812145C:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _08121908
- .align 2, 0
-_08121468: .4byte gBankTarget
-_0812146C: .4byte gBattleTypeFlags
-_08121470: .4byte gUnknown_08400791
-_08121474: .4byte gUnknown_08400797
-_08121478: .4byte gBattlePartyID
-_0812147C: .4byte gEnemyParty
-_08121480:
- ldr r1, _0812148C @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_0812148C: .4byte gBattlePartyID
-_08121490:
- ldr r5, _081214DC @ =gEffectBank
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _081214F4
- ldr r0, _081214E0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _081214E4 @ =gUnknown_08400791
- cmp r0, 0
- beq _081214AE
- ldr r4, _081214E8 @ =gUnknown_08400797
-_081214AE:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _081214EC @ =gBattlePartyID
- ldr r2, _081214F0 @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _081214D0
-_081214BE:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081214BE
-_081214D0:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _08121908
- .align 2, 0
-_081214DC: .4byte gEffectBank
-_081214E0: .4byte gBattleTypeFlags
-_081214E4: .4byte gUnknown_08400791
-_081214E8: .4byte gUnknown_08400797
-_081214EC: .4byte gBattlePartyID
-_081214F0: .4byte gEnemyParty
-_081214F4:
- ldr r1, _08121500 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08121500: .4byte gBattlePartyID
-_08121504:
- ldr r5, _08121550 @ =gActiveBank
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08121568
- ldr r0, _08121554 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _08121558 @ =gUnknown_08400791
- cmp r0, 0
- beq _08121522
- ldr r4, _0812155C @ =gUnknown_08400797
-_08121522:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _08121560 @ =gBattlePartyID
- ldr r2, _08121564 @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _08121544
-_08121532:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _08121532
-_08121544:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _08121908
- .align 2, 0
-_08121550: .4byte gActiveBank
-_08121554: .4byte gBattleTypeFlags
-_08121558: .4byte gUnknown_08400791
-_0812155C: .4byte gUnknown_08400797
-_08121560: .4byte gBattlePartyID
-_08121564: .4byte gEnemyParty
-_08121568:
- ldr r1, _08121574 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_08121574: .4byte gBattlePartyID
-_08121578:
- ldr r4, _081215CC @ =0x02000000
- ldr r0, _081215D0 @ =0x00016003
- adds r5, r4, r0
- ldrb r0, [r5]
- bl GetBankSide
- lsls r0, 24
- adds r2, r4, 0
- cmp r0, 0
- beq _081215E8
- ldr r0, _081215D4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _081215D8 @ =gUnknown_08400791
- cmp r0, 0
- beq _0812159C
- ldr r4, _081215DC @ =gUnknown_08400797
-_0812159C:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r3, _081215E0 @ =gBattlePartyID
- ldr r5, _081215E4 @ =gEnemyParty
- mov r12, r5
- cmp r0, 0xFF
- beq _081215BC
-_081215AA:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081215AA
-_081215BC:
- ldr r1, _081215D0 @ =0x00016003
- adds r0, r2, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r3
- ldrh r1, [r0]
- b _08121908
- .align 2, 0
-_081215CC: .4byte 0x02000000
-_081215D0: .4byte 0x00016003
-_081215D4: .4byte gBattleTypeFlags
-_081215D8: .4byte gUnknown_08400791
-_081215DC: .4byte gUnknown_08400797
-_081215E0: .4byte gBattlePartyID
-_081215E4: .4byte gEnemyParty
-_081215E8:
- ldr r1, _081215F4 @ =gBattlePartyID
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _0812193A
- .align 2, 0
-_081215F4: .4byte gBattlePartyID
-_081215F8:
- ldr r0, _08121610 @ =gSelectedOrderFromParty
- ldr r2, [r0]
- ldrh r1, [r2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _0812161C
- ldr r0, _08121614 @ =0x02000000
- ldr r2, _08121618 @ =0x000160a0
- adds r0, r2
- b _08121634
- .align 2, 0
-_08121610: .4byte gSelectedOrderFromParty
-_08121614: .4byte 0x02000000
-_08121618: .4byte 0x000160a0
-_0812161C:
- ldrh r1, [r2]
- b _08121652
-_08121620:
- ldr r0, _08121640 @ =gSelectedOrderFromParty
- ldr r2, [r0]
- ldrh r1, [r2, 0x2]
- movs r0, 0xB1
- lsls r0, 1
- cmp r1, r0
- bls _08121650
- ldr r0, _08121644 @ =0x02000000
- ldr r3, _08121648 @ =0x000160a0
- adds r0, r3
-_08121634:
- ldrb r0, [r0]
- lsls r0, 2
- ldr r1, _0812164C @ =gUnknown_08401674
- adds r4, r0, r1
- b _081219E6
- .align 2, 0
-_08121640: .4byte gSelectedOrderFromParty
-_08121644: .4byte 0x02000000
-_08121648: .4byte 0x000160a0
-_0812164C: .4byte gUnknown_08401674
-_08121650:
- ldrh r1, [r2, 0x2]
-_08121652:
- movs r0, 0xD
- muls r1, r0
- ldr r0, _0812165C @ =gMoveNames
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_0812165C: .4byte gMoveNames
-_08121660:
- ldr r0, _081216AC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081216D8
- ldr r1, _081216B0 @ =gLastUsedItem
- ldrh r0, [r1]
- cmp r0, 0xAF
- bne _081216D4
- ldr r2, _081216B4 @ =gLinkPlayers
- ldr r0, _081216B8 @ =0x02000000
- ldr r5, _081216BC @ =0x000160cb
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _081216C0 @ =gStringBank
- ldrb r2, [r1]
- ldrh r0, [r0, 0x18]
- cmp r0, r2
- bne _081216CC
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- ldr r0, _081216C4 @ =gEnigmaBerries
- adds r1, r0
- mov r0, sp
- bl StringCopy
- ldr r1, _081216C8 @ =gUnknown_08400A85
- mov r0, sp
- bl StringAppend
- mov r4, sp
- b _081219E6
- .align 2, 0
-_081216AC: .4byte gBattleTypeFlags
-_081216B0: .4byte gLastUsedItem
-_081216B4: .4byte gLinkPlayers
-_081216B8: .4byte 0x02000000
-_081216BC: .4byte 0x000160cb
-_081216C0: .4byte gStringBank
-_081216C4: .4byte gEnigmaBerries
-_081216C8: .4byte gUnknown_08400A85
-_081216CC:
- ldr r4, _081216D0 @ =gUnknown_08400A78
- b _081219E6
- .align 2, 0
-_081216D0: .4byte gUnknown_08400A78
-_081216D4:
- ldrh r0, [r1]
- b _081216DC
-_081216D8:
- ldr r0, _081216E8 @ =gLastUsedItem
- ldrh r0, [r0]
-_081216DC:
- mov r1, sp
- bl CopyItemName
- mov r4, sp
- b _081219E6
- .align 2, 0
-_081216E8: .4byte gLastUsedItem
-_081216EC:
- ldr r0, _081216F0 @ =gLastUsedAbility
- b _08121734
- .align 2, 0
-_081216F0: .4byte gLastUsedAbility
-_081216F4:
- ldr r1, _081216FC @ =gAbilitiesPerBank
- ldr r0, _08121700 @ =gBankAttacker
- b _08121730
- .align 2, 0
-_081216FC: .4byte gAbilitiesPerBank
-_08121700: .4byte gBankAttacker
-_08121704:
- ldr r1, _0812170C @ =gAbilitiesPerBank
- ldr r0, _08121710 @ =gBankTarget
- b _08121730
- .align 2, 0
-_0812170C: .4byte gAbilitiesPerBank
-_08121710: .4byte gBankTarget
-_08121714:
- ldr r1, _08121720 @ =gAbilitiesPerBank
- ldr r0, _08121724 @ =0x02000000
- ldr r2, _08121728 @ =0x00016003
- adds r0, r2
- b _08121730
- .align 2, 0
-_08121720: .4byte gAbilitiesPerBank
-_08121724: .4byte 0x02000000
-_08121728: .4byte 0x00016003
-_0812172C:
- ldr r1, _08121740 @ =gAbilitiesPerBank
- ldr r0, _08121744 @ =gEffectBank
-_08121730:
- ldrb r0, [r0]
- adds r0, r1
-_08121734:
- ldrb r1, [r0]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _08121748 @ =gAbilityNames
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_08121740: .4byte gAbilitiesPerBank
-_08121744: .4byte gEffectBank
-_08121748: .4byte gAbilityNames
-_0812174C:
- ldr r3, _08121764 @ =gTrainerBattleOpponent
- ldrh r1, [r3]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _08121768
- bl GetSecretBaseTrainerNameIndex
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xD
- b _081217AE
- .align 2, 0
-_08121764: .4byte gTrainerBattleOpponent
-_08121768:
- ldr r0, _08121784 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08121788
- bl get_trainer_class_name_index
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xD
- b _081217AE
- .align 2, 0
-_08121784: .4byte gBattleTypeFlags
-_08121788:
- movs r0, 0x80
- lsls r0, 4
- ands r0, r1
- cmp r0, 0
- beq _0812179E
- bl sub_8135FD8
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xD
- b _081217AE
-_0812179E:
- ldr r2, _081217B8 @ =gTrainers
- ldrh r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r0, 0xD
-_081217AE:
- muls r1, r0
- ldr r0, _081217BC @ =gTrainerClassNames
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_081217B8: .4byte gTrainers
-_081217BC: .4byte gTrainerClassNames
-_081217C0:
- ldr r2, _081217E4 @ =gTrainerBattleOpponent
- ldrh r1, [r2]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- bne _081217EC
- mov r0, sp
- movs r1, 0xFF
- movs r2, 0x8
- bl memset
- ldr r1, _081217E8 @ =0x02017002
- mov r0, sp
- movs r2, 0x7
- bl memcpy
- mov r4, sp
- b _081219E6
- .align 2, 0
-_081217E4: .4byte gTrainerBattleOpponent
-_081217E8: .4byte 0x02017002
-_081217EC:
- ldr r0, _08121804 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08121808
- mov r0, sp
- bl get_trainer_name
- mov r4, sp
- b _081219E6
- .align 2, 0
-_08121804: .4byte gBattleTypeFlags
-_08121808:
- movs r0, 0x80
- lsls r0, 4
- ands r0, r1
- cmp r0, 0
- beq _0812181C
- mov r0, sp
- bl sub_8135FF4
- mov r4, sp
- b _081219E6
-_0812181C:
- ldrh r0, [r2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0812182C @ =gTrainers + 0x4
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_0812182C: .4byte gTrainers + 0x4
-_08121830:
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- ldr r1, _0812183C @ =gLinkPlayers + 0x8
- adds r4, r0, r1
- b _081219E6
- .align 2, 0
-_0812183C: .4byte gLinkPlayers + 0x8
-_08121840:
- ldr r4, _08121850 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x2
- b _08121876
- .align 2, 0
-_08121850: .4byte gLinkPlayers
-_08121854:
- ldr r4, _08121864 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x1
- b _08121876
- .align 2, 0
-_08121864: .4byte gLinkPlayers
-_08121868:
- ldr r4, _08121888 @ =gLinkPlayers
- lsls r0, r7, 3
- subs r0, r7
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x18]
- movs r0, 0x3
-_08121876:
- eors r0, r1
- bl sub_803FC34
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r4, 0x8
- adds r4, r1, r4
- b _081219E6
- .align 2, 0
-_08121888: .4byte gLinkPlayers
-_0812188C:
- ldr r0, _081218A4 @ =0x02000000
- ldr r3, _081218A8 @ =0x00016003
- adds r0, r3
- ldrb r0, [r0]
- bl sub_803FC34
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r0, _081218AC @ =gLinkPlayers + 0x8
- adds r4, r1, r0
- b _081219E6
- .align 2, 0
-_081218A4: .4byte 0x02000000
-_081218A8: .4byte 0x00016003
-_081218AC: .4byte gLinkPlayers + 0x8
-_081218B0:
- ldr r4, _081218B4 @ =gSaveBlock2
- b _081219E6
- .align 2, 0
-_081218B4: .4byte gSaveBlock2
-_081218B8:
- bl sub_8082830
- adds r4, r0, 0
- b _081219E6
-_081218C0:
- ldr r5, _08121918 @ =0x02000000
- ldr r1, _0812191C @ =0x00016003
- adds r0, r5, r1
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _08121934
- ldr r0, _08121920 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- ldr r4, _08121924 @ =gUnknown_08400791
- cmp r0, 0
- beq _081218E2
- ldr r4, _08121928 @ =gUnknown_08400797
-_081218E2:
- ldrb r1, [r4]
- adds r0, r1, 0
- ldr r2, _0812192C @ =gEnemyParty
- mov r12, r2
- adds r2, r5, 0
- cmp r0, 0xFF
- beq _08121902
-_081218F0:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081218F0
-_08121902:
- ldr r5, _08121930 @ =0x0001605e
- adds r0, r2, r5
- ldrb r1, [r0]
-_08121908:
- movs r0, 0x64
- muls r0, r1
- add r0, r12
-_0812190E:
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- b _0812194A
- .align 2, 0
-_08121918: .4byte 0x02000000
-_0812191C: .4byte 0x00016003
-_08121920: .4byte gBattleTypeFlags
-_08121924: .4byte gUnknown_08400791
-_08121928: .4byte gUnknown_08400797
-_0812192C: .4byte gEnemyParty
-_08121930: .4byte 0x0001605e
-_08121934:
- ldr r1, _08121954 @ =0x0001605e
- adds r0, r5, r1
- ldrb r1, [r0]
-_0812193A:
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121958 @ =gPlayerParty
-_08121940:
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
-_0812194A:
- mov r0, sp
- bl StringGetEnd10
- mov r4, sp
- b _081219E6
- .align 2, 0
-_08121954: .4byte 0x0001605e
-_08121958: .4byte gPlayerParty
-_0812195C:
- ldr r0, _08121970 @ =0x0000084b
- bl FlagGet
- lsls r0, 24
- ldr r4, _08121974 @ =gUnknown_084009ED
- cmp r0, 0
- beq _081219E6
- ldr r4, _08121978 @ =gUnknown_084009F7
- b _081219E6
- .align 2, 0
-_08121970: .4byte 0x0000084b
-_08121974: .4byte gUnknown_084009ED
-_08121978: .4byte gUnknown_084009F7
-_0812197C:
- ldr r0, _08121980 @ =gBankAttacker
- b _08121986
- .align 2, 0
-_08121980: .4byte gBankAttacker
-_08121984:
- ldr r0, _08121998 @ =gBankTarget
-_08121986:
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- ldr r4, _0812199C @ =gUnknown_084007A7
- cmp r0, 0
- bne _081219E6
- ldr r4, _081219A0 @ =gUnknown_084007AC
- b _081219E6
- .align 2, 0
-_08121998: .4byte gBankTarget
-_0812199C: .4byte gUnknown_084007A7
-_081219A0: .4byte gUnknown_084007AC
-_081219A4:
- ldr r0, _081219A8 @ =gBankAttacker
- b _081219AE
- .align 2, 0
-_081219A8: .4byte gBankAttacker
-_081219AC:
- ldr r0, _081219C0 @ =gBankTarget
-_081219AE:
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- ldr r4, _081219C4 @ =gUnknown_0840079C
- cmp r0, 0
- bne _081219E6
- ldr r4, _081219C8 @ =gUnknown_084007A1
- b _081219E6
- .align 2, 0
-_081219C0: .4byte gBankTarget
-_081219C4: .4byte gUnknown_0840079C
-_081219C8: .4byte gUnknown_084007A1
-_081219CC:
- ldr r0, _081219D0 @ =gBankAttacker
- b _081219D6
- .align 2, 0
-_081219D0: .4byte gBankAttacker
-_081219D4:
- ldr r0, _08121A24 @ =gBankTarget
-_081219D6:
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- ldr r4, _08121A28 @ =gUnknown_084007B2
- cmp r0, 0
- bne _081219E6
- ldr r4, _08121A2C @ =gUnknown_084007B7
-_081219E6:
- ldrb r1, [r4]
- adds r0, r1, 0
- mov r3, r9
- ldrb r2, [r3]
- adds r3, 0x1
- cmp r0, 0xFF
- beq _08121A06
-_081219F4:
- mov r5, r8
- adds r0, r5, r6
- strb r1, [r0]
- adds r6, 0x1
- adds r4, 0x1
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _081219F4
-_08121A06:
- lsls r0, r2, 24
- lsrs r0, 24
- cmp r0, 0x21
- bne _08121A3C
- mov r0, r8
- adds r1, r0, r6
- movs r0, 0xFC
- strb r0, [r1]
- adds r6, 0x1
- mov r2, r8
- adds r1, r2, r6
- movs r0, 0x9
- strb r0, [r1]
- adds r6, 0x1
- b _08121A3C
- .align 2, 0
-_08121A24: .4byte gBankTarget
-_08121A28: .4byte gUnknown_084007B2
-_08121A2C: .4byte gUnknown_084007B7
-_08121A30:
- mov r3, r8
- adds r0, r3, r6
- strb r1, [r0]
- adds r6, 0x1
- mov r3, r9
- adds r3, 0x1
-_08121A3C:
- mov r9, r3
- ldrb r1, [r3]
-_08121A40:
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _08121A4A
- bl _0812101E
-_08121A4A:
- mov r5, r8
- adds r1, r5, r6
- mov r2, r9
- ldrb r0, [r2]
- strb r0, [r1]
- adds r6, 0x1
- adds r0, r6, 0
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end StrCpyDecodeBattle
-
- thumb_func_start sub_8121A68
-sub_8121A68: @ 8121A68
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r7, r0, 0
- adds r6, r1, 0
- movs r5, 0x1
- movs r0, 0
- mov r8, r0
- movs r0, 0xFF
- strb r0, [r6]
- ldrb r0, [r7, 0x1]
- cmp r0, 0xFF
- bne _08121A86
- b _08121D0E
-_08121A86:
- adds r0, r7, r5
- ldrb r1, [r0]
- adds r4, r0, 0
- cmp r1, 0xA
- bls _08121A92
- b _08121D04
-_08121A92:
- lsls r0, r1, 2
- ldr r1, _08121A9C @ =_08121AA0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121A9C: .4byte _08121AA0
- .align 2, 0
-_08121AA0:
- .4byte _08121ACC
- .4byte _08121AE8
- .4byte _08121B3C
- .4byte _08121B54
- .4byte _08121B64
- .4byte _08121BDC
- .4byte _08121BF0
- .4byte _08121C02
- .4byte _08121C48
- .4byte _08121C5C
- .4byte _08121C78
-_08121ACC:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r0, _08121AE4 @ =gBattleStringsTable
- subs r1, 0xC
- lsls r1, 2
- adds r1, r0
- ldr r1, [r1]
- b _08121CE2
- .align 2, 0
-_08121AE4: .4byte gBattleStringsTable
-_08121AE8:
- ldrb r0, [r4, 0x1]
- cmp r0, 0x2
- beq _08121B04
- cmp r0, 0x2
- bgt _08121AF8
- cmp r0, 0x1
- beq _08121AFE
- b _08121B26
-_08121AF8:
- cmp r0, 0x4
- beq _08121B0C
- b _08121B26
-_08121AFE:
- ldrb r4, [r4, 0x3]
- mov r8, r4
- b _08121B26
-_08121B04:
- ldrb r1, [r4, 0x3]
- ldrb r0, [r4, 0x4]
- lsls r0, 8
- b _08121B22
-_08121B0C:
- ldrb r0, [r4, 0x3]
- mov r8, r0
- ldrb r0, [r4, 0x4]
- lsls r0, 8
- mov r1, r8
- orrs r1, r0
- ldrb r0, [r4, 0x5]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r4, 0x6]
- lsls r0, 24
-_08121B22:
- orrs r1, r0
- mov r8, r1
-_08121B26:
- adds r4, r5, r7
- ldrb r3, [r4, 0x2]
- adds r0, r6, 0
- mov r1, r8
- movs r2, 0
- bl ConvertIntToDecimalStringN
- adds r0, r5, 0x3
- ldrb r4, [r4, 0x1]
- adds r5, r0, r4
- b _08121D04
-_08121B3C:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0xD
- muls r1, r0
- ldr r0, _08121B50 @ =gMoveNames
- adds r1, r0
- b _08121CE2
- .align 2, 0
-_08121B50: .4byte gMoveNames
-_08121B54:
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r1, r0, 3
- subs r1, r0
- ldr r0, _08121B60 @ =gTypeNames
- b _08121C66
- .align 2, 0
-_08121B60: .4byte gTypeNames
-_08121B64:
- ldrb r0, [r4, 0x1]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08121B88
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121B84 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- b _08121BC4
- .align 2, 0
-_08121B84: .4byte gPlayerParty
-_08121B88:
- ldr r0, _08121BA0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08121BA8
- ldr r1, _08121BA4 @ =gUnknown_08400797
- adds r0, r6, 0
- bl StringAppend
- b _08121BB0
- .align 2, 0
-_08121BA0: .4byte gBattleTypeFlags
-_08121BA4: .4byte gUnknown_08400797
-_08121BA8:
- ldr r1, _08121BD4 @ =gUnknown_08400791
- adds r0, r6, 0
- bl StringAppend
-_08121BB0:
- adds r0, r5, r7
- ldrb r1, [r0, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121BD8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
-_08121BC4:
- mov r0, sp
- bl StringGetEnd10
- adds r0, r6, 0
- mov r1, sp
- bl StringAppend
- b _08121D02
- .align 2, 0
-_08121BD4: .4byte gUnknown_08400791
-_08121BD8: .4byte gEnemyParty
-_08121BDC:
- ldr r1, _08121BEC @ =gUnknown_08400F58
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- b _08121C68
- .align 2, 0
-_08121BEC: .4byte gUnknown_08400F58
-_08121BF0:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- adds r0, r6, 0
- bl GetSpeciesName
- b _08121D02
-_08121C02:
- adds r4, r5, r7
- ldrb r0, [r4, 0x1]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08121C28
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121C24 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2
- adds r2, r6, 0
- bl GetMonData
- b _08121C3A
- .align 2, 0
-_08121C24: .4byte gPlayerParty
-_08121C28:
- ldrb r1, [r4, 0x2]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08121C44 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x2
- adds r2, r6, 0
- bl GetMonData
-_08121C3A:
- adds r0, r6, 0
- bl StringGetEnd10
- b _08121D02
- .align 2, 0
-_08121C44: .4byte gEnemyParty
-_08121C48:
- ldr r1, _08121C58 @ =gUnknown_08400F78
- adds r0, r5, r7
- ldrb r0, [r0, 0x1]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- b _08121C68
- .align 2, 0
-_08121C58: .4byte gUnknown_08400F78
-_08121C5C:
- adds r0, r5, r7
- ldrb r1, [r0, 0x1]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _08121C74 @ =gAbilityNames
-_08121C66:
- adds r1, r0
-_08121C68:
- adds r0, r6, 0
- bl StringAppend
- adds r5, 0x2
- b _08121D04
- .align 2, 0
-_08121C74: .4byte gAbilityNames
-_08121C78:
- adds r0, r5, r7
- ldrb r2, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r2, r0
- ldr r0, _08121CC4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08121CFA
- cmp r2, 0xAF
- bne _08121CF0
- ldr r2, _08121CC8 @ =gLinkPlayers
- ldr r0, _08121CCC @ =0x02000000
- ldr r1, _08121CD0 @ =0x000160cb
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, _08121CD4 @ =gStringBank
- ldrb r2, [r1]
- ldrh r0, [r0, 0x18]
- cmp r0, r2
- bne _08121CE0
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- ldr r0, _08121CD8 @ =gEnigmaBerries
- adds r1, r0
- adds r0, r6, 0
- bl StringCopy
- ldr r1, _08121CDC @ =gUnknown_08400A85
- b _08121CE2
- .align 2, 0
-_08121CC4: .4byte gBattleTypeFlags
-_08121CC8: .4byte gLinkPlayers
-_08121CCC: .4byte 0x02000000
-_08121CD0: .4byte 0x000160cb
-_08121CD4: .4byte gStringBank
-_08121CD8: .4byte gEnigmaBerries
-_08121CDC: .4byte gUnknown_08400A85
-_08121CE0:
- ldr r1, _08121CEC @ =gUnknown_08400A78
-_08121CE2:
- adds r0, r6, 0
- bl StringAppend
- b _08121D02
- .align 2, 0
-_08121CEC: .4byte gUnknown_08400A78
-_08121CF0:
- adds r0, r2, 0
- adds r1, r6, 0
- bl CopyItemName
- b _08121D02
-_08121CFA:
- adds r0, r2, 0
- adds r1, r6, 0
- bl CopyItemName
-_08121D02:
- adds r5, 0x3
-_08121D04:
- adds r0, r7, r5
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _08121D0E
- b _08121A86
-_08121D0E:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121A68
-
- thumb_func_start sub_8121D1C
-sub_8121D1C: @ 8121D1C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r2, 0
- ldr r5, _08121D50 @ =gSelectedOrderFromParty
- ldr r3, _08121D54 @ =gUnknown_084016BC
-_08121D26:
- cmp r2, 0x4
- beq _08121D3C
- ldrh r1, [r3]
- cmp r1, 0
- bne _08121D32
- adds r2, 0x1
-_08121D32:
- ldr r0, [r5]
- adds r3, 0x2
- ldrh r0, [r0]
- cmp r1, r0
- bne _08121D26
-_08121D3C:
- cmp r2, 0
- blt _08121D68
- cmp r2, 0x2
- bgt _08121D5C
- ldr r1, _08121D58 @ =gUnknown_08400E5E
- adds r0, r4, 0
- bl StringCopy
- b _08121D68
- .align 2, 0
-_08121D50: .4byte gSelectedOrderFromParty
-_08121D54: .4byte gUnknown_084016BC
-_08121D58: .4byte gUnknown_08400E5E
-_08121D5C:
- cmp r2, 0x4
- bgt _08121D68
- ldr r1, _08121D70 @ =gUnknown_08400E62
- adds r0, r4, 0
- bl StringCopy
-_08121D68:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121D70: .4byte gUnknown_08400E62
- thumb_func_end sub_8121D1C
-
- thumb_func_start sub_8121D74
-sub_8121D74: @ 8121D74
- push {r4,r5,lr}
- adds r3, r0, 0
- movs r4, 0
- b _08121D7E
-_08121D7C:
- adds r3, 0x1
-_08121D7E:
- ldrb r0, [r3]
- cmp r0, 0xFF
- bne _08121D7C
- ldr r1, _08121DB4 @ =gUnknown_084016BC
- ldr r5, _08121DB8 @ =gSelectedOrderFromParty
- movs r0, 0
- lsls r0, 1
- adds r2, r0, r1
-_08121D8E:
- cmp r4, 0x4
- beq _08121DA8
- ldrh r1, [r2]
- cmp r1, 0
- bne _08121D9A
- adds r4, 0x1
-_08121D9A:
- ldr r0, [r5]
- adds r2, 0x2
- ldrh r0, [r0]
- cmp r1, r0
- bne _08121D8E
- cmp r4, 0x4
- bhi _08121E04
-_08121DA8:
- lsls r0, r4, 2
- ldr r1, _08121DBC @ =_08121DC0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121DB4: .4byte gUnknown_084016BC
-_08121DB8: .4byte gSelectedOrderFromParty
-_08121DBC: .4byte _08121DC0
- .align 2, 0
-_08121DC0:
- .4byte _08121DD4
- .4byte _08121DDC
- .4byte _08121DE4
- .4byte _08121DEC
- .4byte _08121DFC
-_08121DD4:
- ldr r1, _08121DD8 @ =gUnknown_084007C8
- b _08121DEE
- .align 2, 0
-_08121DD8: .4byte gUnknown_084007C8
-_08121DDC:
- ldr r1, _08121DE0 @ =gUnknown_084007CA
- b _08121DEE
- .align 2, 0
-_08121DE0: .4byte gUnknown_084007CA
-_08121DE4:
- ldr r1, _08121DE8 @ =gUnknown_084007CC
- b _08121DEE
- .align 2, 0
-_08121DE8: .4byte gUnknown_084007CC
-_08121DEC:
- ldr r1, _08121DF8 @ =gUnknown_084007CE
-_08121DEE:
- adds r0, r3, 0
- bl StringCopy
- b _08121E04
- .align 2, 0
-_08121DF8: .4byte gUnknown_084007CE
-_08121DFC:
- ldr r1, _08121E0C @ =gUnknown_084007D0
- adds r0, r3, 0
- bl StringCopy
-_08121E04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121E0C: .4byte gUnknown_084007D0
- thumb_func_end sub_8121D74
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s
deleted file mode 100644
index 7365f4da6..000000000
--- a/asm/egg_hatch.s
+++ /dev/null
@@ -1,1630 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start AddHatchedMonToParty
-AddHatchedMonToParty: @ 80429EC
- push {r4-r6,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- adds r5, r0, 0
- muls r5, r1
- ldr r0, _08042A9C @ =gPlayerParty
- adds r5, r0
- ldr r1, _08042AA0 @ =gEnemyParty
- adds r0, r5, 0
- bl CreatedHatchedMon
- add r2, sp, 0xC
- movs r6, 0
- strb r6, [r2]
- adds r0, r5, 0
- movs r1, 0x2D
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, sp
- adds r1, r4, 0
- bl GetSpeciesName
- adds r0, r5, 0
- movs r1, 0x2
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- bl SpeciesToNationalPokedexNum
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r4, 0
- movs r1, 0x2
- bl GetNationalPokedexFlag
- adds r0, r4, 0
- movs r1, 0x3
- bl GetNationalPokedexFlag
- ldr r1, _08042AA4 @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNick
- mov r2, sp
- adds r2, 0xE
- movs r0, 0x4
- strh r0, [r2]
- adds r0, r5, 0
- movs r1, 0x26
- bl SetMonData
- add r2, sp, 0x10
- strh r6, [r2]
- adds r0, r5, 0
- movs r1, 0x24
- bl SetMonData
- bl sav1_map_get_name
- mov r2, sp
- adds r2, 0x12
- strb r0, [r2]
- adds r0, r5, 0
- movs r1, 0x23
- bl SetMonData
- adds r0, r5, 0
- bl MonRestorePP
- adds r0, r5, 0
- bl CalculateMonStats
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08042A9C: .4byte gPlayerParty
-_08042AA0: .4byte gEnemyParty
-_08042AA4: .4byte gStringVar1
- thumb_func_end AddHatchedMonToParty
-
- thumb_func_start ScriptHatchMon
-ScriptHatchMon: @ 8042AA8
- push {lr}
- ldr r0, _08042AB8 @ =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl AddHatchedMonToParty
- pop {r0}
- bx r0
- .align 2, 0
-_08042AB8: .4byte gSpecialVar_0x8004
- thumb_func_end ScriptHatchMon
-
- thumb_func_start sub_8042ABC
-sub_8042ABC: @ 8042ABC
- push {r4-r6,lr}
- sub sp, 0x20
- adds r5, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- adds r0, r5, r0
- mov r1, sp
- bl GetBoxMonNick
- lsls r0, r4, 3
- subs r0, r4
- lsls r1, r0, 3
- adds r0, r5, r1
- adds r0, 0xC0
- ldrh r0, [r0]
- cmp r0, 0
- beq _08042B40
- adds r0, r1, 0
- adds r0, 0xA0
- adds r5, r0
- adds r6, r5, 0
- adds r6, 0x2C
- mov r0, sp
- adds r1, r6, 0
- bl StringCompareWithoutExtCtrlCodes
- cmp r0, 0
- bne _08042B08
- ldr r0, _08042B30 @ =gSaveBlock2
- adds r1, r5, 0
- adds r1, 0x24
- bl StringCompareWithoutExtCtrlCodes
- cmp r0, 0
- beq _08042B40
-_08042B08:
- ldr r0, _08042B34 @ =gStringVar1
- mov r1, sp
- bl StringCopy
- ldr r4, _08042B38 @ =gStringVar2
- adds r1, r5, 0
- adds r1, 0x24
- adds r0, r4, 0
- bl StringCopy
- ldr r0, _08042B3C @ =gStringVar3
- adds r1, r6, 0
- bl StringCopy
- adds r0, r4, 0
- bl SanitizeNameString
- movs r0, 0x1
- b _08042B42
- .align 2, 0
-_08042B30: .4byte gSaveBlock2
-_08042B34: .4byte gStringVar1
-_08042B38: .4byte gStringVar2
-_08042B3C: .4byte gStringVar3
-_08042B40:
- movs r0, 0
-_08042B42:
- add sp, 0x20
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8042ABC
-
- thumb_func_start sub_8042B4C
-sub_8042B4C: @ 8042B4C
- push {lr}
- ldr r0, _08042B60 @ =gSaveBlock1 + 0x2F9C
- ldr r1, _08042B64 @ =gSpecialVar_0x8004
- ldrb r1, [r1]
- bl sub_8042ABC
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08042B60: .4byte gSaveBlock1 + 0x2F9C
-_08042B64: .4byte gSpecialVar_0x8004
- thumb_func_end sub_8042B4C
-
- thumb_func_start EggHatchCreateMonSprite
-EggHatchCreateMonSprite: @ 8042B68
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r3, r0, 24
- adds r4, r3, 0
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r1, r2, 24
- adds r2, r1, 0
- movs r5, 0
- mov r9, r5
- movs r7, 0
- cmp r3, 0
- bne _08042B96
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08042BB0 @ =gPlayerParty
- adds r7, r1, r0
- movs r5, 0x1
-_08042B96:
- cmp r3, 0x1
- bne _08042BA6
- movs r0, 0x64
- adds r1, r2, 0
- muls r1, r0
- ldr r0, _08042BB0 @ =gPlayerParty
- adds r7, r1, r0
- movs r5, 0x3
-_08042BA6:
- cmp r6, 0
- beq _08042BB4
- cmp r6, 0x1
- beq _08042C14
- b _08042C50
- .align 2, 0
-_08042BB0: .4byte gPlayerParty
-_08042BB4:
- adds r0, r7, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r7, 0
- movs r1, 0
- bl GetMonData
- mov r8, r0
- lsls r0, r5, 3
- ldr r1, _08042C04 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08042C08 @ =gMonFrontPicCoords
- lsls r2, r5, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- ldr r3, _08042C0C @ =0x02000000
- ldr r6, _08042C10 @ =gUnknown_081FAF4C
- lsls r4, 1
- adds r4, 0x1
- lsls r4, 2
- adds r4, r6
- ldr r4, [r4]
- str r4, [sp]
- str r5, [sp, 0x4]
- mov r4, r8
- str r4, [sp, 0x8]
- bl HandleLoadSpecialPokePic
- adds r0, r7, 0
- bl sub_8040990
- bl LoadCompressedObjectPalette
- b _08042C50
- .align 2, 0
-_08042C04: .4byte gMonFrontPicTable
-_08042C08: .4byte gMonFrontPicCoords
-_08042C0C: .4byte 0x02000000
-_08042C10: .4byte gUnknown_081FAF4C
-_08042C14:
- adds r0, r7, 0
- bl sub_8040990
- ldrh r0, [r0, 0x4]
- adds r1, r5, 0
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _08042C60 @ =gUnknown_02024E8C
- movs r1, 0x78
- movs r2, 0x46
- movs r3, 0x6
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r4, _08042C64 @ =gSprites
- lsls r1, r0, 4
- add r1, r9
- lsls r1, 2
- adds r2, r1, r4
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r2]
- adds r4, 0x1C
- adds r1, r4
- ldr r0, _08042C68 @ =SpriteCallbackDummy
- str r0, [r1]
-_08042C50:
- mov r0, r9
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08042C60: .4byte gUnknown_02024E8C
-_08042C64: .4byte gSprites
-_08042C68: .4byte SpriteCallbackDummy
- thumb_func_end EggHatchCreateMonSprite
-
- thumb_func_start VBlankCB_EggHatch
-VBlankCB_EggHatch: @ 8042C6C
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_EggHatch
-
- thumb_func_start EggHatch
-EggHatch: @ 8042C80
- push {lr}
- sub sp, 0x4
- bl ScriptContext2_Enable
- ldr r0, _08042CA8 @ =Task_EggHatch
- movs r1, 0xA
- bl CreateTask
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08042CA8: .4byte Task_EggHatch
- thumb_func_end EggHatch
-
- thumb_func_start Task_EggHatch
-Task_EggHatch: @ 8042CAC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08042CD8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08042CD0
- ldr r0, _08042CDC @ =CB2_EggHatch_0
- bl SetMainCallback2
- ldr r1, _08042CE0 @ =gFieldCallback
- ldr r0, _08042CE4 @ =sub_8080990
- str r0, [r1]
- adds r0, r4, 0
- bl DestroyTask
-_08042CD0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08042CD8: .4byte gPaletteFade
-_08042CDC: .4byte CB2_EggHatch_0
-_08042CE0: .4byte gFieldCallback
-_08042CE4: .4byte sub_8080990
- thumb_func_end Task_EggHatch
-
- thumb_func_start CB2_EggHatch_0
-CB2_EggHatch_0: @ 8042CE8
- push {r4-r7,lr}
- ldr r0, _08042D04 @ =gMain
- ldr r1, _08042D08 @ =0x0000043c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x8
- bls _08042CF8
- b _08042F6E
-_08042CF8:
- lsls r0, 2
- ldr r1, _08042D0C @ =_08042D10
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08042D04: .4byte gMain
-_08042D08: .4byte 0x0000043c
-_08042D0C: .4byte _08042D10
- .align 2, 0
-_08042D10:
- .4byte _08042D34
- .4byte _08042D90
- .4byte _08042DC4
- .4byte _08042E20
- .4byte _08042E40
- .4byte _08042E74
- .4byte _08042E88
- .4byte _08042EB0
- .4byte _08042F40
-_08042D34:
- movs r0, 0x80
- lsls r0, 19
- movs r2, 0
- strh r2, [r0]
- ldr r1, _08042D74 @ =gUnknown_0300481C
- ldr r0, _08042D78 @ =0x02018000
- str r0, [r1]
- ldr r1, _08042D7C @ =gSpecialVar_0x8004
- ldrh r1, [r1]
- strb r1, [r0, 0x4]
- adds r0, 0x3A
- strb r2, [r0]
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r0, _08042D80 @ =VBlankCB_EggHatch
- bl SetVBlankCallback
- ldr r1, _08042D84 @ =gMain
- ldr r2, _08042D88 @ =0x0000043c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl GetCurrentMapMusic
- ldr r1, _08042D8C @ =gSpecialVar_0x8005
- strh r0, [r1]
- b _08042F6E
- .align 2, 0
-_08042D74: .4byte gUnknown_0300481C
-_08042D78: .4byte 0x02018000
-_08042D7C: .4byte gSpecialVar_0x8004
-_08042D80: .4byte VBlankCB_EggHatch
-_08042D84: .4byte gMain
-_08042D88: .4byte 0x0000043c
-_08042D8C: .4byte gSpecialVar_0x8005
-_08042D90:
- ldr r5, _08042DBC @ =gWindowConfig_81E6F84
- adds r0, r5, 0
- bl SetUpWindowConfig
- ldr r4, _08042DC0 @ =gUnknown_0300481C
- ldr r0, [r4]
- adds r0, 0x8
- adds r1, r5, 0
- bl InitWindowFromConfig
- movs r0, 0x14
- bl SetTextWindowBaseTileNum
- ldr r1, [r4]
- adds r1, 0x38
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, 0x8
- bl LoadTextWindowGraphics
- b _08042F04
- .align 2, 0
-_08042DBC: .4byte gWindowConfig_81E6F84
-_08042DC0: .4byte gUnknown_0300481C
-_08042DC4:
- ldr r0, _08042DFC @ =gUnknown_08D00000
- movs r1, 0xC0
- lsls r1, 19
- bl LZDecompressVram
- ldr r0, _08042E00 @ =gUnknown_08D00524
- ldr r4, _08042E04 @ =0x02000000
- movs r2, 0x80
- lsls r2, 4
- adds r1, r4, 0
- bl CpuSet
- ldr r1, _08042E08 @ =0x040000d4
- str r4, [r1]
- ldr r0, _08042E0C @ =0x06002800
- str r0, [r1, 0x4]
- ldr r0, _08042E10 @ =0x80000280
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- ldr r0, _08042E14 @ =gUnknown_08D004E0
- movs r1, 0
- movs r2, 0x20
- bl LoadCompressedPalette
- ldr r1, _08042E18 @ =gMain
- ldr r2, _08042E1C @ =0x0000043c
- adds r1, r2
- b _08042F0A
- .align 2, 0
-_08042DFC: .4byte gUnknown_08D00000
-_08042E00: .4byte gUnknown_08D00524
-_08042E04: .4byte 0x02000000
-_08042E08: .4byte 0x040000d4
-_08042E0C: .4byte 0x06002800
-_08042E10: .4byte 0x80000280
-_08042E14: .4byte gUnknown_08D004E0
-_08042E18: .4byte gMain
-_08042E1C: .4byte 0x0000043c
-_08042E20:
- ldr r0, _08042E34 @ =gUnknown_0820A3B0
- bl LoadSpriteSheet
- ldr r0, _08042E38 @ =gUnknown_0820A3B8
- bl LoadSpriteSheet
- ldr r0, _08042E3C @ =gUnknown_0820A3C0
- bl LoadSpritePalette
- b _08042F04
- .align 2, 0
-_08042E34: .4byte gUnknown_0820A3B0
-_08042E38: .4byte gUnknown_0820A3B8
-_08042E3C: .4byte gUnknown_0820A3C0
-_08042E40:
- ldr r0, _08042E64 @ =gSpriteTemplate_820A3C8
- movs r1, 0x78
- movs r2, 0x4B
- movs r3, 0x5
- bl CreateSprite
- ldr r2, _08042E68 @ =gUnknown_0300481C
- ldr r1, [r2]
- strb r0, [r1]
- ldr r0, [r2]
- ldrb r0, [r0, 0x4]
- bl AddHatchedMonToParty
- ldr r1, _08042E6C @ =gMain
- ldr r2, _08042E70 @ =0x0000043c
- adds r1, r2
- b _08042F0A
- .align 2, 0
-_08042E64: .4byte gSpriteTemplate_820A3C8
-_08042E68: .4byte gUnknown_0300481C
-_08042E6C: .4byte gMain
-_08042E70: .4byte 0x0000043c
-_08042E74:
- ldr r0, _08042E84 @ =gUnknown_0300481C
- ldr r0, [r0]
- ldrb r2, [r0, 0x4]
- movs r0, 0
- movs r1, 0
- bl EggHatchCreateMonSprite
- b _08042F04
- .align 2, 0
-_08042E84: .4byte gUnknown_0300481C
-_08042E88:
- ldr r4, _08042EA4 @ =gUnknown_0300481C
- ldr r0, [r4]
- ldrb r2, [r0, 0x4]
- movs r0, 0
- movs r1, 0x1
- bl EggHatchCreateMonSprite
- ldr r1, [r4]
- strb r0, [r1, 0x1]
- ldr r1, _08042EA8 @ =gMain
- ldr r2, _08042EAC @ =0x0000043c
- adds r1, r2
- b _08042F0A
- .align 2, 0
-_08042EA4: .4byte gUnknown_0300481C
-_08042EA8: .4byte gMain
-_08042EAC: .4byte 0x0000043c
-_08042EB0:
- ldr r0, _08042F14 @ =REG_BG2CNT
- ldr r2, _08042F18 @ =0x00004c06
- adds r1, r2, 0
- strh r1, [r0]
- ldr r0, _08042F1C @ =gUnknown_0820C9F8
- movs r1, 0x10
- movs r2, 0xA0
- bl LoadPalette
- ldr r3, _08042F20 @ =gUnknown_0820CA98
- ldr r4, _08042F24 @ =0x06004000
- movs r5, 0x98
- lsls r5, 5
- ldr r1, _08042F28 @ =0x040000d4
- ldr r6, _08042F2C @ =0x80000800
- movs r2, 0x80
- lsls r2, 5
- movs r7, 0x80
- lsls r7, 24
-_08042ED6:
- str r3, [r1]
- str r4, [r1, 0x4]
- str r6, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r2
- adds r4, r2
- subs r5, r2
- cmp r5, r2
- bhi _08042ED6
- str r3, [r1]
- str r4, [r1, 0x4]
- lsrs r0, r5, 1
- orrs r0, r7
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- ldr r1, _08042F30 @ =gUnknown_0820F798
- ldr r2, _08042F34 @ =0x06006000
- ldr r0, _08042F28 @ =0x040000d4
- str r1, [r0]
- str r2, [r0, 0x4]
- ldr r1, _08042F2C @ =0x80000800
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
-_08042F04:
- ldr r1, _08042F38 @ =gMain
- ldr r0, _08042F3C @ =0x0000043c
- adds r1, r0
-_08042F0A:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08042F6E
- .align 2, 0
-_08042F14: .4byte REG_BG2CNT
-_08042F18: .4byte 0x00004c06
-_08042F1C: .4byte gUnknown_0820C9F8
-_08042F20: .4byte gUnknown_0820CA98
-_08042F24: .4byte 0x06004000
-_08042F28: .4byte 0x040000d4
-_08042F2C: .4byte 0x80000800
-_08042F30: .4byte gUnknown_0820F798
-_08042F34: .4byte 0x06006000
-_08042F38: .4byte gMain
-_08042F3C: .4byte 0x0000043c
-_08042F40:
- ldr r1, _08042F74 @ =REG_BG1CNT
- ldr r2, _08042F78 @ =0x00000501
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08042F7C @ =REG_BG0HOFS
- movs r4, 0
- strh r4, [r0]
- adds r0, 0x2
- strh r4, [r0]
- adds r0, 0x2
- strh r4, [r0]
- adds r0, 0x2
- strh r4, [r0]
- adds r0, 0x2
- strh r4, [r0]
- adds r0, 0x2
- strh r4, [r0]
- ldr r0, _08042F80 @ =CB2_EggHatch_1
- bl SetMainCallback2
- ldr r0, _08042F84 @ =gUnknown_0300481C
- ldr r0, [r0]
- strb r4, [r0, 0x2]
-_08042F6E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08042F74: .4byte REG_BG1CNT
-_08042F78: .4byte 0x00000501
-_08042F7C: .4byte REG_BG0HOFS
-_08042F80: .4byte CB2_EggHatch_1
-_08042F84: .4byte gUnknown_0300481C
- thumb_func_end CB2_EggHatch_0
-
- thumb_func_start EggHatchSetMonNickname
-EggHatchSetMonNickname: @ 8042F88
- push {lr}
- ldr r0, _08042FA8 @ =gSpecialVar_0x8004
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08042FAC @ =gPlayerParty
- adds r0, r1
- ldr r2, _08042FB0 @ =gStringVar3
- movs r1, 0x2
- bl SetMonData
- ldr r0, _08042FB4 @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08042FA8: .4byte gSpecialVar_0x8004
-_08042FAC: .4byte gPlayerParty
-_08042FB0: .4byte gStringVar3
-_08042FB4: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end EggHatchSetMonNickname
-
- thumb_func_start Task_EggHatchPlayBGM
-Task_EggHatchPlayBGM: @ 8042FB8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08043004 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08042FD4
- bl StopMapMusic
-_08042FD4:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _08042FE4
- movs r0, 0xBC
- lsls r0, 1
- bl PlayBGM
-_08042FE4:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x3C
- ble _08042FF8
- ldr r0, _08043008 @ =0x00000179
- bl PlayBGM
- adds r0, r5, 0
- bl DestroyTask
-_08042FF8:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043004: .4byte gTasks
-_08043008: .4byte 0x00000179
- thumb_func_end Task_EggHatchPlayBGM
-
- thumb_func_start CB2_EggHatch_1
-CB2_EggHatch_1: @ 804300C
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x8
- ldr r1, _08043030 @ =gUnknown_0300481C
- ldr r0, [r1]
- ldrb r0, [r0, 0x2]
- adds r5, r1, 0
- cmp r0, 0xB
- bls _08043026
- b _080432BA
-_08043026:
- lsls r0, 2
- ldr r1, _08043034 @ =_08043038
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08043030: .4byte gUnknown_0300481C
-_08043034: .4byte _08043038
- .align 2, 0
-_08043038:
- .4byte _08043068
- .4byte _080430A0
- .4byte _080430C0
- .4byte _080430F8
- .4byte _08043124
- .4byte _08043164
- .4byte _08043172
- .4byte _08043180
- .4byte _080431B8
- .4byte _080431DA
- .4byte _08043288
- .4byte _080432A8
-_08043068:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0xBA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08043098 @ =gUnknown_0300481C
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- ldr r0, _0804309C @ =Task_EggHatchPlayBGM
- movs r1, 0x5
- bl CreateTask
- b _080432BA
- .align 2, 0
-_08043098: .4byte gUnknown_0300481C
-_0804309C: .4byte Task_EggHatchPlayBGM
-_080430A0:
- ldr r0, _080430BC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _080430B2
- b _080432BA
-_080430B2:
- ldr r0, [r5]
- strb r1, [r0, 0x3]
- ldr r1, [r5]
- b _0804329C
- .align 2, 0
-_080430BC: .4byte gPaletteFade
-_080430C0:
- ldr r1, [r5]
- ldrb r0, [r1, 0x3]
- adds r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1E
- bhi _080430D2
- b _080432BA
-_080430D2:
- ldr r1, [r5]
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- ldr r2, _080430F0 @ =gSprites
- ldr r0, [r5]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _080430F4 @ =SpriteCB_Egg_0
- str r1, [r0]
- b _080432BA
- .align 2, 0
-_080430F0: .4byte gSprites
-_080430F4: .4byte SpriteCB_Egg_0
-_080430F8:
- ldr r2, _0804311C @ =gSprites
- ldr r3, [r5]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _08043120 @ =SpriteCallbackDummy
- cmp r1, r0
- beq _08043112
- b _080432BA
-_08043112:
- ldrb r0, [r3, 0x2]
- adds r0, 0x1
- strb r0, [r3, 0x2]
- b _080432BA
- .align 2, 0
-_0804311C: .4byte gSprites
-_08043120: .4byte SpriteCallbackDummy
-_08043124:
- ldr r0, [r5]
- ldrb r1, [r0, 0x4]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08043150 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08043154 @ =gStringVar1
- bl GetMonNick
- ldr r4, _08043158 @ =gStringVar4
- ldr r1, _0804315C @ =gOtherText_HatchedFromEgg
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- bl EggHatchPrintMessage2
- ldr r0, _08043160 @ =0x00000173
- bl PlayFanfare
- ldr r1, [r5]
- b _0804329C
- .align 2, 0
-_08043150: .4byte gPlayerParty
-_08043154: .4byte gStringVar1
-_08043158: .4byte gStringVar4
-_0804315C: .4byte gOtherText_HatchedFromEgg
-_08043160: .4byte 0x00000173
-_08043164:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- bne _08043170
- b _080432BA
-_08043170:
- b _08043298
-_08043172:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- bne _0804317E
- b _080432BA
-_0804317E:
- b _08043298
-_08043180:
- ldr r0, [r5]
- ldrb r1, [r0, 0x4]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080431A8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080431AC @ =gStringVar1
- bl GetMonNick
- ldr r4, _080431B0 @ =gStringVar4
- ldr r1, _080431B4 @ =gOtherText_NickHatchPrompt
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- bl EggHatchPrintMessage1
- ldr r1, [r5]
- b _0804329C
- .align 2, 0
-_080431A8: .4byte gPlayerParty
-_080431AC: .4byte gStringVar1
-_080431B0: .4byte gStringVar4
-_080431B4: .4byte gOtherText_NickHatchPrompt
-_080431B8:
- bl EggHatchUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- beq _080432BA
- movs r0, 0x16
- movs r1, 0x8
- movs r2, 0x1B
- movs r3, 0xD
- bl MenuDrawTextWindow
- movs r0, 0x16
- movs r1, 0x8
- movs r2, 0x4
- bl InitYesNoMenu
- b _08043298
-_080431DA:
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- movs r1, 0x2
- negs r1, r1
- cmp r0, r1
- beq _080432BA
- lsls r0, r2, 24
- asrs r1, r0, 24
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08043298
- cmp r1, 0x1
- beq _08043298
- ldr r0, _08043278 @ =gUnknown_0300481C
- mov r9, r0
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- movs r1, 0x64
- mov r8, r1
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- ldr r6, _0804327C @ =gPlayerParty
- adds r0, r6
- ldr r1, _08043280 @ =gStringVar3
- mov r10, r1
- bl GetMonNick
- mov r2, r9
- ldr r0, [r2]
- ldrb r0, [r0, 0x4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r2, r9
- ldr r0, [r2]
- ldrb r0, [r0, 0x4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- bl GetMonGender
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r2, r9
- ldr r0, [r2]
- ldrb r0, [r0, 0x4]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- ldr r0, _08043284 @ =EggHatchSetMonNickname
- str r0, [sp, 0x4]
- movs r0, 0x3
- mov r1, r10
- adds r2, r5, 0
- adds r3, r4, 0
- bl DoNamingScreen
- b _080432BA
- .align 2, 0
-_08043278: .4byte gUnknown_0300481C
-_0804327C: .4byte gPlayerParty
-_08043280: .4byte gStringVar3
-_08043284: .4byte EggHatchSetMonNickname
-_08043288:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_08043298:
- ldr r0, _080432A4 @ =gUnknown_0300481C
- ldr r1, [r0]
-_0804329C:
- ldrb r0, [r1, 0x2]
- adds r0, 0x1
- strb r0, [r1, 0x2]
- b _080432BA
- .align 2, 0
-_080432A4: .4byte gUnknown_0300481C
-_080432A8:
- ldr r0, _080432DC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080432BA
- ldr r0, _080432E0 @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
-_080432BA:
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080432DC: .4byte gPaletteFade
-_080432E0: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end CB2_EggHatch_1
-
- thumb_func_start SpriteCB_Egg_0
-SpriteCB_Egg_0: @ 80432E4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _08043304
- ldr r0, _08043300 @ =SpriteCB_Egg_1
- str r0, [r4, 0x1C]
- movs r0, 0
- strh r0, [r4, 0x2E]
- b _08043334
- .align 2, 0
-_08043300: .4byte SpriteCB_Egg_1
-_08043304:
- ldrh r0, [r4, 0x30]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x1
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bne _08043334
- movs r0, 0x17
- bl PlaySE
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- bl CreateRandomEggShardSprite
-_08043334:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_Egg_0
-
- thumb_func_start SpriteCB_Egg_1
-SpriteCB_Egg_1: @ 804333C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1E
- ble _08043398
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _0804336C
- ldr r0, _08043368 @ =SpriteCB_Egg_2
- str r0, [r4, 0x1C]
- strh r1, [r4, 0x2E]
- strh r1, [r4, 0x32]
- b _08043398
- .align 2, 0
-_08043368: .4byte SpriteCB_Egg_2
-_0804336C:
- ldrh r0, [r4, 0x30]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x2
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bne _08043398
- movs r0, 0x17
- bl PlaySE
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
-_08043398:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_Egg_1
-
- thumb_func_start SpriteCB_Egg_2
-SpriteCB_Egg_2: @ 80433A0
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1E
- ble _0804345A
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x26
- ble _08043418
- ldr r0, _08043404 @ =SpriteCB_Egg_3
- str r0, [r4, 0x1C]
- strh r6, [r4, 0x2E]
- ldr r5, _08043408 @ =gUnknown_0300481C
- ldr r0, [r5]
- ldrb r1, [r0, 0x4]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0804340C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- ldr r4, _08043410 @ =gSprites
- ldr r3, [r5]
- ldrb r2, [r3, 0x1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- strh r6, [r1, 0x24]
- ldrb r2, [r3, 0x1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldr r2, _08043414 @ =gMonFrontPicCoords
- lsrs r0, 14
- adds r0, r2
- ldrb r0, [r0, 0x1]
- strh r0, [r1, 0x26]
- b _0804345A
- .align 2, 0
-_08043404: .4byte SpriteCB_Egg_3
-_08043408: .4byte gUnknown_0300481C
-_0804340C: .4byte gPlayerParty
-_08043410: .4byte gSprites
-_08043414: .4byte gMonFrontPicCoords
-_08043418:
- ldrh r0, [r4, 0x30]
- adds r0, 0x14
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x2
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bne _0804344C
- movs r0, 0x17
- bl PlaySE
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- bl CreateRandomEggShardSprite
- bl CreateRandomEggShardSprite
-_0804344C:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1E
- bne _0804345A
- movs r0, 0x17
- bl PlaySE
-_0804345A:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_Egg_2
-
- thumb_func_start SpriteCB_Egg_3
-SpriteCB_Egg_3: @ 8043460
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x32
- ble _0804347A
- ldr r0, _08043480 @ =SpriteCB_Egg_4
- str r0, [r1, 0x1C]
- movs r0, 0
- strh r0, [r1, 0x2E]
-_0804347A:
- pop {r0}
- bx r0
- .align 2, 0
-_08043480: .4byte SpriteCB_Egg_4
- thumb_func_end SpriteCB_Egg_3
-
- thumb_func_start SpriteCB_Egg_4
-SpriteCB_Egg_4: @ 8043484
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080434A4
- movs r1, 0x1
- negs r1, r1
- ldr r0, _080434F8 @ =0x0000ffff
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_080434A4:
- ldrh r0, [r5, 0x2E]
- cmp r0, 0x3
- bhi _080434C0
- movs r4, 0
-_080434AC:
- bl CreateRandomEggShardSprite
- lsls r0, r4, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _080434AC
-_080434C0:
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- ldr r0, _080434FC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080434EE
- movs r0, 0x71
- bl PlaySE
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _08043500 @ =SpriteCB_Egg_5
- str r0, [r5, 0x1C]
- strh r4, [r5, 0x2E]
-_080434EE:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080434F8: .4byte 0x0000ffff
-_080434FC: .4byte gPaletteFade
-_08043500: .4byte SpriteCB_Egg_5
- thumb_func_end SpriteCB_Egg_4
-
- thumb_func_start SpriteCB_Egg_5
-SpriteCB_Egg_5: @ 8043504
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _08043540
- ldr r4, _08043594 @ =gSprites
- ldr r3, _08043598 @ =gUnknown_0300481C
- ldr r0, [r3]
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldr r0, [r3]
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_08043540:
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0x8
- bne _0804355A
- movs r1, 0x1
- negs r1, r1
- ldr r0, _0804359C @ =0x0000ffff
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0804355A:
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0x9
- bgt _08043578
- ldr r2, _08043594 @ =gSprites
- ldr r0, _08043598 @ =gUnknown_0300481C
- ldr r0, [r0]
- ldrb r1, [r0, 0x1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x22]
- subs r1, 0x1
- strh r1, [r0, 0x22]
-_08043578:
- ldrh r1, [r5, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0x28
- ble _08043586
- ldr r0, _080435A0 @ =SpriteCallbackDummy
- str r0, [r5, 0x1C]
-_08043586:
- adds r0, r1, 0x1
- strh r0, [r5, 0x2E]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043594: .4byte gSprites
-_08043598: .4byte gUnknown_0300481C
-_0804359C: .4byte 0x0000ffff
-_080435A0: .4byte SpriteCallbackDummy
- thumb_func_end SpriteCB_Egg_5
-
- thumb_func_start SpriteCB_EggShard
-SpriteCB_EggShard: @ 80435A4
- push {r4,lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- ldrh r1, [r2, 0x36]
- adds r0, r1
- strh r0, [r2, 0x36]
- ldrh r1, [r2, 0x32]
- ldrh r3, [r2, 0x38]
- adds r0, r1, r3
- strh r0, [r2, 0x38]
- movs r4, 0x36
- ldrsh r0, [r2, r4]
- cmp r0, 0
- bge _080435C2
- adds r0, 0xFF
-_080435C2:
- asrs r0, 8
- strh r0, [r2, 0x24]
- movs r3, 0x38
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bge _080435D0
- adds r0, 0xFF
-_080435D0:
- asrs r0, 8
- strh r0, [r2, 0x26]
- ldrh r0, [r2, 0x34]
- adds r3, r1, r0
- strh r3, [r2, 0x32]
- movs r4, 0x22
- ldrsh r1, [r2, r4]
- movs r4, 0x26
- ldrsh r0, [r2, r4]
- adds r0, r1, r0
- adds r1, 0x14
- cmp r0, r1
- ble _080435F6
- lsls r0, r3, 16
- cmp r0, 0
- ble _080435F6
- adds r0, r2, 0
- bl DestroySprite
-_080435F6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_EggShard
-
- thumb_func_start CreateRandomEggShardSprite
-CreateRandomEggShardSprite: @ 80435FC
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r3, _0804364C @ =gEggShardVelocities
- ldr r0, _08043650 @ =gUnknown_0300481C
- ldr r4, [r0]
- adds r4, 0x3A
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r1, r0, r3
- ldrh r6, [r1]
- adds r3, 0x2
- adds r0, r3
- ldrh r5, [r0]
- adds r2, 0x1
- strb r2, [r4]
- bl Random
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsls r6, 16
- asrs r6, 16
- lsls r5, 16
- asrs r5, 16
- movs r0, 0x64
- str r0, [sp]
- lsrs r1, 16
- str r1, [sp, 0x4]
- movs r0, 0x78
- movs r1, 0x3C
- adds r2, r6, 0
- adds r3, r5, 0
- bl CreateEggShardSprite
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0804364C: .4byte gEggShardVelocities
-_08043650: .4byte gUnknown_0300481C
- thumb_func_end CreateRandomEggShardSprite
-
- thumb_func_start CreateEggShardSprite
-CreateEggShardSprite: @ 8043654
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r8, r3
- ldr r0, [sp, 0x1C]
- mov r9, r0
- ldr r1, [sp, 0x20]
- mov r10, r1
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- mov r1, r9
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _080436CC @ =gSpriteTemplate_820A418
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x4
- bl CreateSprite
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _080436D0 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r6, [r0, 0x30]
- mov r1, r8
- strh r1, [r0, 0x32]
- mov r1, r9
- strh r1, [r0, 0x34]
- mov r1, r10
- bl StartSpriteAnim
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080436CC: .4byte gSpriteTemplate_820A418
-_080436D0: .4byte gSprites
- thumb_func_end CreateEggShardSprite
-
- thumb_func_start EggHatchPrintMessage1
-EggHatchPrintMessage1: @ 80436D4
- push {lr}
- sub sp, 0x4
- adds r1, r0, 0
- ldr r0, _080436F8 @ =gUnknown_0300481C
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x8
- adds r2, 0x38
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x3
- bl sub_8002EB0
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080436F8: .4byte gUnknown_0300481C
- thumb_func_end EggHatchPrintMessage1
-
- thumb_func_start EggHatchPrintMessage2
-EggHatchPrintMessage2: @ 80436FC
- push {lr}
- sub sp, 0x4
- adds r1, r0, 0
- ldr r0, _08043720 @ =gUnknown_0300481C
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x8
- adds r2, 0x38
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x3
- bl sub_8003460
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08043720: .4byte gUnknown_0300481C
- thumb_func_end EggHatchPrintMessage2
-
- thumb_func_start EggHatchUpdateWindowText
-EggHatchUpdateWindowText: @ 8043724
- push {lr}
- ldr r0, _08043738 @ =gUnknown_0300481C
- ldr r0, [r0]
- adds r0, 0x8
- bl sub_80035AC
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08043738: .4byte gUnknown_0300481C
- thumb_func_end EggHatchUpdateWindowText
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s
deleted file mode 100644
index 3ad85d7cf..000000000
--- a/asm/hall_of_fame.s
+++ /dev/null
@@ -1,3402 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8141E38
-sub_8141E38: @ 8141E38
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_8141E38
-
- thumb_func_start sub_8141E4C
-sub_8141E4C: @ 8141E4C
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_8141E4C
-
- thumb_func_start sub_8141E64
-sub_8141E64: @ 8141E64
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _08141E80 @ =gMain
- ldr r1, _08141E84 @ =0x0000043c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x4
- bhi _08141EA0
- lsls r0, 2
- ldr r1, _08141E88 @ =_08141E8C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08141E80: .4byte gMain
-_08141E84: .4byte 0x0000043c
-_08141E88: .4byte _08141E8C
- .align 2, 0
-_08141E8C:
- .4byte _08141EA0
- .4byte _08141EC0
- .4byte _08141EC6
- .4byte _08141F1C
- .4byte _08141F58
-_08141EA0:
- movs r0, 0
- bl SetVBlankCallback
- bl sub_81433E0
- ldr r0, _08141EB8 @ =gMain
- ldr r2, _08141EBC @ =0x0000043c
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0]
- b _08141F84
- .align 2, 0
-_08141EB8: .4byte gMain
-_08141EBC: .4byte 0x0000043c
-_08141EC0:
- bl sub_8143570
- b _08141F38
-_08141EC6:
- movs r0, 0x1
- negs r0, r0
- movs r4, 0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _08141F04 @ =sub_8141E38
- bl SetVBlankCallback
- ldr r3, _08141F08 @ =0x04000208
- ldrh r2, [r3]
- strh r4, [r3]
- ldr r4, _08141F0C @ =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r2, _08141F10 @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strh r0, [r2]
- ldr r1, _08141F14 @ =gMain
- ldr r2, _08141F18 @ =0x0000043c
- adds r1, r2
- b _08141F3E
- .align 2, 0
-_08141F04: .4byte sub_8141E38
-_08141F08: .4byte 0x04000208
-_08141F0C: .4byte 0x04000200
-_08141F10: .4byte REG_DISPSTAT
-_08141F14: .4byte gMain
-_08141F18: .4byte 0x0000043c
-_08141F1C:
- ldr r1, _08141F48 @ =REG_BLDCNT
- ldr r2, _08141F4C @ =0x00003f42
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r2, 0xE2
- lsls r2, 3
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r0, 0
- strh r0, [r1]
- bl sub_81435B8
-_08141F38:
- ldr r1, _08141F50 @ =gMain
- ldr r0, _08141F54 @ =0x0000043c
- adds r1, r0
-_08141F3E:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08141F84
- .align 2, 0
-_08141F48: .4byte REG_BLDCNT
-_08141F4C: .4byte 0x00003f42
-_08141F50: .4byte gMain
-_08141F54: .4byte 0x0000043c
-_08141F58:
- bl UpdatePaletteFade
- ldr r0, _08141F7C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08141F84
- ldr r0, _08141F80 @ =sub_8141E4C
- bl SetMainCallback2
- movs r0, 0xDA
- lsls r0, 1
- bl PlayBGM
- movs r0, 0
- b _08141F86
- .align 2, 0
-_08141F7C: .4byte gPaletteFade
-_08141F80: .4byte sub_8141E4C
-_08141F84:
- movs r0, 0x1
-_08141F86:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8141E64
-
- thumb_func_start sub_8141F90
-sub_8141F90: @ 8141F90
- push {r4,lr}
- bl sub_8141E64
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08141FB6
- ldr r0, _08141FBC @ =sub_8141FF8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08141FC0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
-_08141FB6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08141FBC: .4byte sub_8141FF8
-_08141FC0: .4byte gTasks
- thumb_func_end sub_8141F90
-
- thumb_func_start sub_8141FC4
-sub_8141FC4: @ 8141FC4
- push {lr}
- bl sub_8141E64
- lsls r0, 24
- cmp r0, 0
- bne _08141FEA
- ldr r0, _08141FF0 @ =sub_8141FF8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08141FF4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x1
- strh r0, [r1, 0x8]
-_08141FEA:
- pop {r0}
- bx r0
- .align 2, 0
-_08141FF0: .4byte sub_8141FF8
-_08141FF4: .4byte gTasks
- thumb_func_end sub_8141FC4
-
- thumb_func_start sub_8141FF8
-sub_8141FF8: @ 8141FF8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _081420C8 @ =0x0201c000
- mov r9, r0
- ldr r1, _081420CC @ =gTasks
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0xC]
- movs r7, 0
- ldr r4, _081420D0 @ =0xfffffe00
- mov r10, r4
-_08142024:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _081420D4 @ =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r3, r0, 0
- cmp r3, 0
- beq _081420DC
- adds r0, r6, 0
- movs r1, 0x41
- bl GetMonData
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 2
- mov r1, r9
- adds r5, r1, r4
- ldr r2, _081420D8 @ =0x000001ff
- adds r1, r2, 0
- ands r0, r1
- ldrh r1, [r5, 0x8]
- mov r2, r10
- ands r1, r2
- orrs r1, r0
- strh r1, [r5, 0x8]
- adds r0, r6, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [r5]
- adds r0, r6, 0
- movs r1, 0
- bl GetMonData
- mov r1, r9
- adds r1, 0x4
- adds r1, r4
- str r0, [r1]
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 1
- ldrb r2, [r5, 0x9]
- movs r1, 0x1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x9]
- adds r0, r6, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- movs r2, 0
- mov r6, r8
- lsls r5, r6, 2
- mov r3, r9
- adds r3, 0xA
-_081420A0:
- adds r1, r2, r4
- adds r1, r3, r1
- mov r6, sp
- adds r0, r6, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9
- bls _081420A0
- ldr r0, _081420CC @ =gTasks
- mov r2, r8
- adds r1, r5, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0xC]
- adds r0, 0x1
- strh r0, [r1, 0xC]
- b _08142108
- .align 2, 0
-_081420C8: .4byte 0x0201c000
-_081420CC: .4byte gTasks
-_081420D0: .4byte 0xfffffe00
-_081420D4: .4byte gPlayerParty
-_081420D8: .4byte 0x000001ff
-_081420DC:
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 2
- mov r4, r9
- adds r2, r4, r1
- ldrh r0, [r2, 0x8]
- mov r6, r10
- ands r0, r6
- strh r0, [r2, 0x8]
- str r3, [r2]
- mov r0, r9
- adds r0, 0x4
- adds r0, r1
- str r3, [r0]
- ldrb r1, [r2, 0x9]
- movs r0, 0x1
- ands r0, r1
- strb r0, [r2, 0x9]
- movs r0, 0xFF
- strb r0, [r2, 0xA]
- mov r0, r8
- lsls r5, r0, 2
-_08142108:
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x5
- bls _08142024
- ldr r0, _08142158 @ =gUnknown_0203931C
- movs r3, 0
- str r3, [r0]
- ldr r4, _0814215C @ =gTasks
- mov r2, r8
- adds r1, r5, r2
- lsls r1, 3
- adds r2, r1, r4
- strh r3, [r2, 0xA]
- movs r0, 0xFF
- strh r0, [r2, 0x10]
- movs r7, 0
- adds r3, r4, 0
- adds r3, 0x8
- movs r2, 0xFF
-_08142130:
- adds r0, r7, 0x5
- lsls r0, 1
- adds r0, r1
- adds r0, r3
- strh r2, [r0]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x5
- bls _08142130
- mov r6, r8
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r0, r4
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _08142164
- ldr r0, _08142160 @ =sub_81422E8
- b _08142166
- .align 2, 0
-_08142158: .4byte gUnknown_0203931C
-_0814215C: .4byte gTasks
-_08142160: .4byte sub_81422E8
-_08142164:
- ldr r0, _08142178 @ =sub_814217C
-_08142166:
- str r0, [r1]
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08142178: .4byte sub_814217C
- thumb_func_end sub_8141FF8
-
- thumb_func_start sub_814217C
-sub_814217C: @ 814217C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _081421C4 @ =0x0201c000
- mov r9, r0
- movs r7, 0x80
- lsls r7, 6
- add r7, r9
- ldr r0, _081421C8 @ =gUnknown_02039324
- ldrb r0, [r0]
- cmp r0, 0
- bne _081421D4
- movs r4, 0
- mov r0, r8
- lsls r0, 2
- mov r10, r0
- ldr r5, _081421CC @ =0xfffe4000
- add r5, r9
- movs r3, 0xF0
- lsls r3, 9
- movs r2, 0
- ldr r1, _081421D0 @ =0x00001fff
-_081421B2:
- adds r0, r4, r3
- adds r0, r5
- strb r2, [r0]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r1
- bls _081421B2
- b _081421E0
- .align 2, 0
-_081421C4: .4byte 0x0201c000
-_081421C8: .4byte gUnknown_02039324
-_081421CC: .4byte 0xfffe4000
-_081421D0: .4byte 0x00001fff
-_081421D4:
- movs r0, 0x3
- bl sub_8125EC8
- mov r0, r8
- lsls r0, 2
- mov r10, r0
-_081421E0:
- movs r4, 0
- ldrh r1, [r7, 0x8]
- ldr r2, _081421E8 @ =0x000001ff
- b _081421FA
- .align 2, 0
-_081421E8: .4byte 0x000001ff
-_081421EC:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- adds r7, 0x78
- cmp r4, 0x31
- bhi _08142206
- ldrh r1, [r7, 0x8]
-_081421FA:
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _081421EC
- cmp r4, 0x31
- bls _08142228
-_08142206:
- ldr r5, _08142264 @ =0x0201e000
- adds r6, r5, 0
- adds r5, 0x78
- movs r4, 0
- subs r7, 0x78
-_08142210:
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x78
- bl memcpy
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- adds r6, 0x78
- adds r5, 0x78
- cmp r4, 0x30
- bls _08142210
-_08142228:
- adds r0, r7, 0
- mov r1, r9
- movs r2, 0x78
- bl memcpy
- movs r0, 0x2
- movs r1, 0xE
- movs r2, 0x1B
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldr r0, _08142268 @ =gMenuText_HOFSaving
- movs r1, 0x3
- movs r2, 0xF
- bl MenuPrint
- ldr r1, _0814226C @ =gTasks
- mov r0, r10
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldr r1, _08142270 @ =sub_8142274
- str r1, [r0]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08142264: .4byte 0x0201e000
-_08142268: .4byte gMenuText_HOFSaving
-_0814226C: .4byte gTasks
-_08142270: .4byte sub_8142274
- thumb_func_end sub_814217C
-
- thumb_func_start sub_8142274
-sub_8142274: @ 8142274
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _081422A8 @ =gGameContinueCallback
- ldr r0, _081422AC @ =sub_8141FC4
- str r0, [r1]
- movs r0, 0x3
- bl TrySavingData
- movs r0, 0x37
- bl PlaySE
- ldr r1, _081422B0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _081422B4 @ =sub_81422B8
- str r1, [r0]
- movs r1, 0x20
- strh r1, [r0, 0xE]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081422A8: .4byte gGameContinueCallback
-_081422AC: .4byte sub_8141FC4
-_081422B0: .4byte gTasks
-_081422B4: .4byte sub_81422B8
- thumb_func_end sub_8142274
-
- thumb_func_start sub_81422B8
-sub_81422B8: @ 81422B8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _081422D8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r2, [r1, 0xE]
- movs r3, 0xE
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _081422DC
- subs r0, r2, 0x1
- strh r0, [r1, 0xE]
- b _081422E0
- .align 2, 0
-_081422D8: .4byte gTasks
-_081422DC:
- ldr r0, _081422E4 @ =sub_81422E8
- str r0, [r1]
-_081422E0:
- pop {r0}
- bx r0
- .align 2, 0
-_081422E4: .4byte sub_81422E8
- thumb_func_end sub_81422B8
-
- thumb_func_start sub_81422E8
-sub_81422E8: @ 81422E8
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _08142314 @ =gWindowConfig_81E7198
- adds r0, r5, 0
- bl SetUpWindowConfig
- adds r0, r5, 0
- bl InitMenuWindow
- ldr r1, _08142318 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0814231C @ =sub_8142320
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08142314: .4byte gWindowConfig_81E7198
-_08142318: .4byte gTasks
-_0814231C: .4byte sub_8142320
- thumb_func_end sub_81422E8
-
- thumb_func_start sub_8142320
-sub_8142320: @ 8142320
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r2, _08142350 @ =0x0201c000
- ldr r0, _08142354 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldrh r6, [r1, 0xA]
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 2
- adds r4, r0, r2
- movs r2, 0xC
- ldrsh r0, [r1, r2]
- cmp r0, 0x3
- ble _0814235C
- ldr r1, _08142358 @ =gUnknown_0840B534
- b _0814235E
- .align 2, 0
-_08142350: .4byte 0x0201c000
-_08142354: .4byte gTasks
-_08142358: .4byte gUnknown_0840B534
-_0814235C:
- ldr r1, _081423F0 @ =gUnknown_0840B564
-_0814235E:
- lsls r2, r6, 3
- adds r0, r2, r1
- ldrh r5, [r0]
- adds r0, r1, 0x2
- adds r0, r2, r0
- ldrh r3, [r0]
- adds r0, r1, 0x4
- adds r0, r2, r0
- ldrh r0, [r0]
- mov r9, r0
- adds r1, 0x6
- adds r2, r1
- ldrh r2, [r2]
- mov r8, r2
- ldrh r0, [r4, 0x8]
- lsls r0, 23
- lsrs r0, 23
- lsls r1, r5, 16
- asrs r1, 16
- lsls r2, r3, 16
- asrs r2, 16
- ldr r3, [r4]
- str r3, [sp]
- ldr r3, [r4, 0x4]
- str r3, [sp, 0x4]
- adds r3, r6, 0
- bl sub_81436BC
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _081423F4 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r2, r1, r3
- movs r4, 0
- mov r5, r9
- strh r5, [r2, 0x30]
- mov r5, r8
- strh r5, [r2, 0x32]
- strh r4, [r2, 0x2E]
- adds r3, 0x1C
- adds r1, r3
- ldr r2, _081423F8 @ =sub_81435DC
- str r2, [r1]
- ldr r5, _081423FC @ =gTasks
- adds r1, r6, 0x5
- lsls r1, 1
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r1, r4
- adds r2, r5, 0
- adds r2, 0x8
- adds r1, r2
- strh r0, [r1]
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- adds r4, r5
- ldr r0, _08142400 @ =sub_8142404
- str r0, [r4]
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081423F0: .4byte gUnknown_0840B564
-_081423F4: .4byte gSprites
-_081423F8: .4byte sub_81435DC
-_081423FC: .4byte gTasks
-_08142400: .4byte sub_8142404
- thumb_func_end sub_8142320
-
- thumb_func_start sub_8142404
-sub_8142404: @ 8142404
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08142470 @ =0x0201c000
- ldr r3, _08142474 @ =gTasks
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- adds r5, r2, r3
- ldrh r1, [r5, 0xA]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r6, r0, r4
- ldr r4, _08142478 @ =gSprites
- adds r1, 0x5
- lsls r1, 1
- adds r1, r2
- adds r3, 0x8
- adds r1, r3
- movs r0, 0
- ldrsh r1, [r1, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _0814246A
- ldrh r2, [r6, 0x8]
- ldr r0, _0814247C @ =0x000001ff
- ands r0, r2
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08142458
- lsls r0, r2, 23
- lsrs r0, 23
- movs r1, 0
- bl PlayCry1
-_08142458:
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0xE
- bl sub_8143088
- movs r0, 0x78
- strh r0, [r5, 0xE]
- ldr r0, _08142480 @ =sub_8142484
- str r0, [r5]
-_0814246A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08142470: .4byte 0x0201c000
-_08142474: .4byte gTasks
-_08142478: .4byte gSprites
-_0814247C: .4byte 0x000001ff
-_08142480: .4byte sub_8142484
- thumb_func_end sub_8142404
-
- thumb_func_start sub_8142484
-sub_8142484: @ 8142484
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, _081424BC @ =0x0201c000
- ldr r1, _081424C0 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r6, r0, 3
- adds r4, r6, r1
- ldrh r3, [r4, 0xA]
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 2
- adds r0, r2
- mov r9, r0
- ldrh r2, [r4, 0xE]
- movs r7, 0xE
- ldrsh r0, [r4, r7]
- mov r12, r1
- cmp r0, 0
- beq _081424C4
- subs r0, r2, 0x1
- strh r0, [r4, 0xE]
- b _0814255C
- .align 2, 0
-_081424BC: .4byte 0x0201c000
-_081424C0: .4byte gTasks
-_081424C4:
- ldr r2, _0814253C @ =gUnknown_0203931C
- ldr r0, _08142540 @ =gSprites
- mov r8, r0
- adds r0, r3, 0x5
- lsls r0, 1
- adds r0, r6
- mov r1, r12
- adds r1, 0x8
- adds r6, r0, r1
- movs r7, 0
- ldrsh r1, [r6, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x5]
- lsrs r0, 4
- movs r1, 0x80
- lsls r1, 9
- lsls r1, r0
- ldr r3, [r2]
- orrs r3, r1
- str r3, [r2]
- ldrh r2, [r4, 0xA]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bgt _08142550
- mov r7, r9
- ldrh r1, [r7, 0x1C]
- ldr r0, _08142544 @ =0x000001ff
- ands r0, r1
- cmp r0, 0
- beq _08142550
- adds r0, r2, 0x1
- strh r0, [r4, 0xA]
- ldr r0, _08142548 @ =0x0000735f
- str r0, [sp]
- adds r0, r3, 0
- movs r1, 0
- movs r2, 0xC
- movs r3, 0xC
- bl BeginNormalPaletteFade
- movs r0, 0
- ldrsh r1, [r6, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r2, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldr r0, _0814254C @ =sub_8142320
- str r0, [r4]
- b _0814255C
- .align 2, 0
-_0814253C: .4byte gUnknown_0203931C
-_08142540: .4byte gSprites
-_08142544: .4byte 0x000001ff
-_08142548: .4byte 0x0000735f
-_0814254C: .4byte sub_8142320
-_08142550:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- add r0, r12
- ldr r1, _0814256C @ =sub_8142570
- str r1, [r0]
-_0814255C:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0814256C: .4byte sub_8142570
- thumb_func_end sub_8142484
-
- thumb_func_start sub_8142570
-sub_8142570: @ 8142570
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08142604 @ =0xffff0000
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r3, 0
- lsls r1, r4, 2
- adds r0, r1, r4
- lsls r5, r0, 3
- ldr r0, _08142608 @ =gTasks + 0x8
- mov r12, r0
- mov r8, r1
- ldr r6, _0814260C @ =gSprites
- movs r7, 0xD
- negs r7, r7
-_0814259E:
- adds r0, r3, 0x5
- lsls r0, 1
- adds r0, r5
- mov r2, r12
- adds r1, r0, r2
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0xFF
- beq _081425C0
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r2, [r1, 0x5]
- adds r0, r7, 0
- ands r0, r2
- strb r0, [r1, 0x5]
-_081425C0:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x5
- bls _0814259E
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0
- movs r1, 0xF
- bl sub_8143068
- movs r0, 0x69
- bl PlaySE
- ldr r1, _08142610 @ =gTasks
- mov r2, r8
- adds r0, r2, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0xC8
- lsls r1, 1
- strh r1, [r0, 0xE]
- ldr r1, _08142614 @ =sub_8142618
- str r1, [r0]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08142604: .4byte 0xffff0000
-_08142608: .4byte gTasks + 0x8
-_0814260C: .4byte gSprites
-_08142610: .4byte gTasks
-_08142614: .4byte sub_8142618
- thumb_func_end sub_8142570
-
- thumb_func_start sub_8142618
-sub_8142618: @ 8142618
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r7, _08142658 @ =gTasks
- lsls r4, r6, 2
- adds r0, r4, r6
- lsls r5, r0, 3
- adds r1, r5, r7
- ldrh r2, [r1, 0xE]
- movs r3, 0xE
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _0814265C
- subs r2, 0x1
- strh r2, [r1, 0xE]
- movs r0, 0x3
- ands r0, r2
- cmp r0, 0
- bne _081426D2
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x6E
- ble _081426D2
- bl sub_81438C4
- b _081426D2
- .align 2, 0
-_08142658: .4byte gTasks
-_0814265C:
- movs r3, 0
- mov r9, r4
- ldr r0, _081426E4 @ =gUnknown_0203931C
- mov r10, r0
- adds r4, r5, 0
- adds r7, 0x8
- mov r8, r7
- ldr r7, _081426E8 @ =gSprites
- movs r1, 0xD
- negs r1, r1
- mov r12, r1
- movs r5, 0x4
-_08142674:
- adds r0, r3, 0x5
- lsls r0, 1
- adds r0, r4
- mov r2, r8
- adds r1, r0, r2
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0xFF
- beq _08142698
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r1, 0x5]
- mov r0, r12
- ands r0, r2
- orrs r0, r5
- strb r0, [r1, 0x5]
-_08142698:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x5
- bls _08142674
- mov r3, r10
- ldr r0, [r3]
- ldr r1, _081426EC @ =0x0000735f
- str r1, [sp]
- movs r1, 0
- movs r2, 0xC
- movs r3, 0xC
- bl BeginNormalPaletteFade
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r1, _081426F0 @ =gTasks
- mov r2, r9
- adds r0, r2, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x7
- strh r1, [r0, 0xE]
- ldr r1, _081426F4 @ =sub_81426F8
- str r1, [r0]
-_081426D2:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081426E4: .4byte gUnknown_0203931C
-_081426E8: .4byte gSprites
-_081426EC: .4byte 0x0000735f
-_081426F0: .4byte gTasks
-_081426F4: .4byte sub_81426F8
- thumb_func_end sub_8142618
-
- thumb_func_start sub_81426F8
-sub_81426F8: @ 81426F8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08142718 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r2, r1, r2
- ldrh r1, [r2, 0xE]
- movs r3, 0xE
- ldrsh r0, [r2, r3]
- cmp r0, 0xF
- ble _08142720
- ldr r0, _0814271C @ =sub_8142738
- str r0, [r2]
- b _0814272E
- .align 2, 0
-_08142718: .4byte gTasks
-_0814271C: .4byte sub_8142738
-_08142720:
- adds r0, r1, 0x1
- strh r0, [r2, 0xE]
- ldr r1, _08142734 @ =REG_BLDALPHA
- movs r3, 0xE
- ldrsh r0, [r2, r3]
- lsls r0, 8
- strh r0, [r1]
-_0814272E:
- pop {r0}
- bx r0
- .align 2, 0
-_08142734: .4byte REG_BLDALPHA
- thumb_func_end sub_81426F8
-
- thumb_func_start sub_8142738
-sub_8142738: @ 8142738
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0xCA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r4, _08142784 @ =gWindowConfig_81E71B4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- ldr r0, _08142788 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- movs r1, 0x78
- movs r2, 0x48
- movs r3, 0x6
- bl sub_81437A4
- ldr r2, _0814278C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r2
- strh r0, [r1, 0x10]
- movs r0, 0x78
- strh r0, [r1, 0xE]
- ldr r0, _08142790 @ =sub_8142794
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08142784: .4byte gWindowConfig_81E71B4
-_08142788: .4byte gSaveBlock2
-_0814278C: .4byte gTasks
-_08142790: .4byte sub_8142794
- thumb_func_end sub_8142738
-
- thumb_func_start sub_8142794
-sub_8142794: @ 8142794
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _081427B4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r1, [r4, 0xE]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _081427B8
- subs r0, r1, 0x1
- strh r0, [r4, 0xE]
- b _0814280A
- .align 2, 0
-_081427B4: .4byte gTasks
-_081427B8:
- ldr r2, _081427D8 @ =gSprites
- movs r3, 0x10
- ldrsh r1, [r4, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrh r2, [r1, 0x20]
- movs r3, 0x20
- ldrsh r0, [r1, r3]
- cmp r0, 0xA0
- beq _081427DC
- adds r0, r2, 0x1
- strh r0, [r1, 0x20]
- b _0814280A
- .align 2, 0
-_081427D8: .4byte gSprites
-_081427DC:
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0xF
- movs r3, 0x9
- bl MenuDrawTextWindow
- movs r0, 0x1
- movs r1, 0x2
- bl sub_8143300
- movs r0, 0x2
- movs r1, 0xE
- movs r2, 0x1B
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldr r0, _08142810 @ =gMenuText_HOFCongratulations
- movs r1, 0x4
- movs r2, 0xF
- bl MenuPrint
- ldr r0, _08142814 @ =sub_8142818
- str r0, [r4]
-_0814280A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08142810: .4byte gMenuText_HOFCongratulations
-_08142814: .4byte sub_8142818
- thumb_func_end sub_8142794
-
- thumb_func_start sub_8142818
-sub_8142818: @ 8142818
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08142844 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0814283E
- movs r0, 0x4
- bl FadeOutBGM
- ldr r0, _08142848 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0814284C @ =sub_8142850
- str r0, [r1]
-_0814283E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08142844: .4byte gMain
-_08142848: .4byte gTasks
-_0814284C: .4byte sub_8142850
- thumb_func_end sub_8142818
-
- thumb_func_start sub_8142850
-sub_8142850: @ 8142850
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08142890 @ =gPlttBufferFaded
- ldr r1, _08142894 @ =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 2
- bl CpuSet
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x8
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08142898 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0814289C @ =sub_81428A0
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08142890: .4byte gPlttBufferFaded
-_08142894: .4byte gPlttBufferUnfaded
-_08142898: .4byte gTasks
-_0814289C: .4byte sub_81428A0
- thumb_func_end sub_8142850
-
- thumb_func_start sub_81428A0
-sub_81428A0: @ 81428A0
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _081428C4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081428BE
- adds r0, r2, 0
- bl DestroyTask
- ldr r0, _081428C8 @ =sub_81439D0
- bl SetMainCallback2
-_081428BE:
- pop {r0}
- bx r0
- .align 2, 0
-_081428C4: .4byte gPaletteFade
-_081428C8: .4byte sub_81439D0
- thumb_func_end sub_81428A0
-
- thumb_func_start sub_81428CC
-sub_81428CC: @ 81428CC
- push {r4,r5,lr}
- ldr r0, _081428E4 @ =gMain
- ldr r1, _081428E8 @ =0x0000043c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08142908
- lsls r0, 2
- ldr r1, _081428EC @ =_081428F0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081428E4: .4byte gMain
-_081428E8: .4byte 0x0000043c
-_081428EC: .4byte _081428F0
- .align 2, 0
-_081428F0:
- .4byte _08142908
- .4byte _08142928
- .4byte _0814293C
- .4byte _08142980
- .4byte _081429C0
- .4byte _081429EC
-_08142908:
- movs r0, 0
- bl SetVBlankCallback
- bl sub_81433E0
- ldr r0, _08142920 @ =gMain
- ldr r2, _08142924 @ =0x0000043c
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0]
- b _08142A12
- .align 2, 0
-_08142920: .4byte gMain
-_08142924: .4byte 0x0000043c
-_08142928:
- bl sub_8143570
- ldr r1, _08142934 @ =gMain
- ldr r3, _08142938 @ =0x0000043c
- adds r1, r3
- b _081429DC
- .align 2, 0
-_08142934: .4byte gMain
-_08142938: .4byte 0x0000043c
-_0814293C:
- ldr r0, _08142968 @ =sub_8141E38
- bl SetVBlankCallback
- ldr r3, _0814296C @ =0x04000208
- ldrh r2, [r3]
- movs r0, 0
- strh r0, [r3]
- ldr r4, _08142970 @ =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r2, _08142974 @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strh r0, [r2]
- ldr r1, _08142978 @ =gMain
- ldr r4, _0814297C @ =0x0000043c
- adds r1, r4
- b _081429DC
- .align 2, 0
-_08142968: .4byte sub_8141E38
-_0814296C: .4byte 0x04000208
-_08142970: .4byte 0x04000200
-_08142974: .4byte REG_DISPSTAT
-_08142978: .4byte gMain
-_0814297C: .4byte 0x0000043c
-_08142980:
- ldr r0, _081429AC @ =REG_BLDCNT
- movs r1, 0
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- bl sub_81435B8
- ldr r0, _081429B0 @ =0x0201c000
- adds r2, r0, 0
- ldr r1, _081429B4 @ =gUnknown_0840B57C
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r1!, {r3,r5}
- stm r2!, {r3,r5}
- bl sub_80C5CD4
- ldr r1, _081429B8 @ =gMain
- ldr r4, _081429BC @ =0x0000043c
- adds r1, r4
- b _081429DC
- .align 2, 0
-_081429AC: .4byte REG_BLDCNT
-_081429B0: .4byte 0x0201c000
-_081429B4: .4byte gUnknown_0840B57C
-_081429B8: .4byte gMain
-_081429BC: .4byte 0x0000043c
-_081429C0:
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl sub_80C5DCC
- lsls r0, 24
- cmp r0, 0
- beq _08142A12
- ldr r1, _081429E4 @ =gMain
- ldr r5, _081429E8 @ =0x0000043c
- adds r1, r5
-_081429DC:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08142A12
- .align 2, 0
-_081429E4: .4byte gMain
-_081429E8: .4byte 0x0000043c
-_081429EC:
- ldr r1, _08142A18 @ =REG_BLDCNT
- ldr r2, _08142A1C @ =0x00003f42
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r3, 0xE2
- lsls r3, 3
- adds r0, r3, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r0, 0
- strh r0, [r1]
- ldr r0, _08142A20 @ =sub_8142A28
- movs r1, 0
- bl CreateTask
- ldr r0, _08142A24 @ =sub_8141E4C
- bl SetMainCallback2
-_08142A12:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08142A18: .4byte REG_BLDCNT
-_08142A1C: .4byte 0x00003f42
-_08142A20: .4byte sub_8142A28
-_08142A24: .4byte sub_8141E4C
- thumb_func_end sub_81428CC
-
- thumb_func_start sub_8142A28
-sub_8142A28: @ 8142A28
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x3
- bl sub_8125EC8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08142A54
- ldr r0, _08142A4C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _08142A50 @ =sub_8142FEC
- str r0, [r1]
- b _08142AEA
- .align 2, 0
-_08142A4C: .4byte gTasks
-_08142A50: .4byte sub_8142FEC
-_08142A54:
- ldr r2, _08142A8C @ =0x0201e000
- movs r3, 0
- ldrh r1, [r2, 0x8]
- ldr r4, _08142A90 @ =0x000001ff
- adds r0, r4, 0
- ands r0, r1
- ldr r7, _08142A94 @ =gTasks
- lsls r6, r5, 2
- cmp r0, 0
- beq _08142A7E
-_08142A68:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r2, 0x78
- cmp r3, 0x31
- bhi _08142A98
- ldrh r1, [r2, 0x8]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _08142A68
-_08142A7E:
- cmp r3, 0x31
- bhi _08142A98
- adds r0, r6, r5
- lsls r0, 3
- adds r0, r7
- subs r1, r3, 0x1
- b _08142AA0
- .align 2, 0
-_08142A8C: .4byte 0x0201e000
-_08142A90: .4byte 0x000001ff
-_08142A94: .4byte gTasks
-_08142A98:
- adds r0, r6, r5
- lsls r0, 3
- adds r0, r7
- movs r1, 0x31
-_08142AA0:
- strh r1, [r0, 0x8]
- movs r0, 0xA
- bl GetGameStat
- ldr r2, _08142AF0 @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r2
- strh r0, [r1, 0xA]
- movs r3, 0
- ldr r7, _08142AF4 @ =0x0600381a
- ldr r4, _08142AF8 @ =0x0600385a
-_08142AB8:
- lsls r1, r3, 1
- adds r2, r1, r7
- adds r0, r3, 0x3
- strh r0, [r2]
- adds r1, r4
- adds r0, 0x11
- strh r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x10
- bls _08142AB8
- ldr r4, _08142AFC @ =gWindowConfig_81E7198
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- ldr r1, _08142AF0 @ =gTasks
- adds r0, r6, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _08142B00 @ =sub_8142B04
- str r1, [r0]
-_08142AEA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08142AF0: .4byte gTasks
-_08142AF4: .4byte 0x0600381a
-_08142AF8: .4byte 0x0600385a
-_08142AFC: .4byte gWindowConfig_81E7198
-_08142B00: .4byte sub_8142B04
- thumb_func_end sub_8142A28
-
- thumb_func_start sub_8142B04
-sub_8142B04: @ 8142B04
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r3, _08142BB8 @ =0x0201e000
- movs r5, 0
- ldr r1, _08142BBC @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r6, r1, 0
- ldr r2, _08142BC0 @ =gUnknown_0203931C
- cmp r5, r0
- bge _08142B3E
- adds r1, r0, 0
-_08142B32:
- adds r3, 0x78
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r1
- blt _08142B32
-_08142B3E:
- adds r4, r3, 0
- movs r0, 0
- str r0, [r2]
- mov r5, r8
- lsls r2, r5, 2
- adds r1, r2, r5
- lsls r1, 3
- adds r1, r6
- strh r0, [r1, 0xC]
- strh r0, [r1, 0x10]
- movs r5, 0
- str r2, [sp, 0xC]
- ldr r6, _08142BC4 @ =0x000001ff
- adds r2, r1, 0
-_08142B5A:
- ldrh r1, [r4, 0x8]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _08142B6A
- ldrh r0, [r2, 0x10]
- adds r0, 0x1
- strh r0, [r2, 0x10]
-_08142B6A:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, 0x14
- cmp r5, 0x5
- bls _08142B5A
- adds r4, r3, 0
- movs r5, 0
- ldr r1, _08142BBC @ =gTasks
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r7, r0, 3
- adds r6, r7, r1
- str r6, [sp, 0x8]
- adds r1, 0x8
- mov r9, r1
- ldr r0, _08142BC8 @ =gUnknown_0840B564
- mov r10, r0
-_08142B8E:
- ldrh r1, [r4, 0x8]
- ldr r2, _08142BC4 @ =0x000001ff
- adds r0, r2, 0
- ands r0, r1
- adds r6, r1, 0
- cmp r0, 0
- beq _08142C30
- ldr r1, [sp, 0x8]
- movs r2, 0x10
- ldrsh r0, [r1, r2]
- cmp r0, 0x3
- ble _08142BD4
- lsls r1, r5, 3
- ldr r0, _08142BCC @ =gUnknown_0840B534
- adds r0, 0x4
- adds r0, r1, r0
- ldrh r3, [r0]
- ldr r0, _08142BD0 @ =gUnknown_0840B534 + 0x6
- adds r1, r0
- b _08142BE2
- .align 2, 0
-_08142BB8: .4byte 0x0201e000
-_08142BBC: .4byte gTasks
-_08142BC0: .4byte gUnknown_0203931C
-_08142BC4: .4byte 0x000001ff
-_08142BC8: .4byte gUnknown_0840B564
-_08142BCC: .4byte gUnknown_0840B534
-_08142BD0: .4byte gUnknown_0840B534 + 0x6
-_08142BD4:
- lsls r1, r5, 3
- mov r0, r10
- adds r0, 0x4
- adds r0, r1, r0
- ldrh r3, [r0]
- ldr r2, _08142C28 @ =gUnknown_0840B564 + 0x6
- adds r1, r2
-_08142BE2:
- ldrh r2, [r1]
- lsls r0, r6, 23
- lsrs r0, 23
- lsls r1, r3, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- ldr r3, [r4]
- str r3, [sp]
- ldr r3, [r4, 0x4]
- str r3, [sp, 0x4]
- adds r3, r5, 0
- bl sub_81436BC
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08142C2C @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r3, [r1, 0x5]
- movs r6, 0xD
- negs r6, r6
- adds r2, r6, 0
- ands r3, r2
- movs r2, 0x4
- orrs r3, r2
- strb r3, [r1, 0x5]
- adds r1, r5, 0x5
- lsls r1, 1
- adds r1, r7
- add r1, r9
- strh r0, [r1]
- b _08142C3C
- .align 2, 0
-_08142C28: .4byte gUnknown_0840B564 + 0x6
-_08142C2C: .4byte gSprites
-_08142C30:
- adds r0, r5, 0x5
- lsls r0, 1
- adds r0, r7
- add r0, r9
- movs r1, 0xFF
- strh r1, [r0]
-_08142C3C:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, 0x14
- cmp r5, 0x5
- bls _08142B8E
- ldr r0, _08142CB0 @ =0xffff0000
- ldr r2, _08142CB4 @ =0x0000735f
- movs r1, 0xC
- bl BlendPalettes
- ldr r3, _08142CB8 @ =gStringVar1
- ldr r1, _08142CBC @ =gMenuText_HOFNumber
- adds r0, r3, 0
- bl StringCopy
- adds r3, r0, 0
- movs r5, 0xFC
- strb r5, [r3]
- movs r0, 0x14
- strb r0, [r3, 0x1]
- movs r0, 0x6
- strb r0, [r3, 0x2]
- adds r3, 0x3
- ldr r0, _08142CC0 @ =gTasks
- ldr r4, [sp, 0xC]
- add r4, r8
- lsls r4, 3
- adds r4, r0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- adds r0, r3, 0
- bl ConvertIntToDecimalString
- adds r3, r0, 0
- strb r5, [r3]
- movs r0, 0x13
- strb r0, [r3, 0x1]
- movs r0, 0xF0
- strb r0, [r3, 0x2]
- movs r0, 0xFF
- strb r0, [r3, 0x3]
- ldr r0, _08142CB8 @ =gStringVar1
- movs r1, 0
- movs r2, 0
- bl MenuPrint
- ldr r0, _08142CC4 @ =sub_8142CC8
- str r0, [r4]
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08142CB0: .4byte 0xffff0000
-_08142CB4: .4byte 0x0000735f
-_08142CB8: .4byte gStringVar1
-_08142CBC: .4byte gMenuText_HOFNumber
-_08142CC0: .4byte gTasks
-_08142CC4: .4byte sub_8142CC8
- thumb_func_end sub_8142B04
-
- thumb_func_start sub_8142CC8
-sub_8142CC8: @ 8142CC8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08142DD0 @ =0x0201e000
- mov r8, r0
- movs r3, 0
- ldr r1, _08142DD4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- cmp r3, r0
- bge _08142CFE
- adds r1, r0, 0
-_08142CF0:
- movs r0, 0x78
- add r8, r0
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, r1
- blt _08142CF0
-_08142CFE:
- movs r3, 0
- lsls r6, r4, 2
- adds r0, r6, r4
- lsls r5, r0, 3
- ldr r1, _08142DD8 @ =gTasks + 0x8
- mov r10, r1
- ldr r2, _08142DDC @ =gSprites
- mov r12, r2
- movs r0, 0xD
- negs r0, r0
- mov r9, r0
- movs r7, 0x4
-_08142D16:
- adds r0, r3, 0x5
- lsls r0, 1
- adds r0, r5
- add r0, r10
- ldrh r1, [r0]
- cmp r1, 0xFF
- beq _08142D36
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r2, [r0, 0x5]
- mov r1, r9
- ands r1, r2
- orrs r1, r7
- strb r1, [r0, 0x5]
-_08142D36:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x5
- bls _08142D16
- adds r1, r6, r4
- lsls r1, 3
- ldr r2, _08142DD4 @ =gTasks
- adds r5, r1, r2
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- adds r0, 0x5
- lsls r0, 1
- adds r0, r1
- ldr r1, _08142DD4 @ =gTasks
- adds r1, 0x8
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08142DDC @ =gSprites
- adds r0, r1
- ldrb r2, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- strb r1, [r0, 0x5]
- lsrs r1, 4
- movs r0, 0x80
- lsls r0, 9
- lsls r0, r1
- ldr r1, _08142DE0 @ =0xffff0000
- eors r0, r1
- ldr r2, _08142DE4 @ =gUnknown_0203931C
- str r0, [r2]
- ldr r2, _08142DE8 @ =0x0000735f
- movs r1, 0xC
- bl BlendPalettesUnfaded
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- mov r1, r8
- adds r4, r1, r0
- ldrh r1, [r4, 0x8]
- ldr r0, _08142DEC @ =0x000001ff
- ands r0, r1
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _08142DB2
- bl StopCryAndClearCrySongs
- ldrh r0, [r4, 0x8]
- lsls r0, 23
- lsrs r0, 23
- movs r1, 0
- bl PlayCry1
-_08142DB2:
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0xE
- bl sub_8143088
- ldr r0, _08142DF0 @ =sub_8142DF4
- str r0, [r5]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08142DD0: .4byte 0x0201e000
-_08142DD4: .4byte gTasks
-_08142DD8: .4byte gTasks + 0x8
-_08142DDC: .4byte gSprites
-_08142DE0: .4byte 0xffff0000
-_08142DE4: .4byte gUnknown_0203931C
-_08142DE8: .4byte 0x0000735f
-_08142DEC: .4byte 0x000001ff
-_08142DF0: .4byte sub_8142DF4
- thumb_func_end sub_8142CC8
-
- thumb_func_start sub_8142DF4
-sub_8142DF4: @ 8142DF4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08142E88 @ =gMain
- ldrh r2, [r1, 0x2E]
- movs r0, 0x1
- ands r0, r2
- adds r3, r1, 0
- cmp r0, 0
- beq _08142EC4
- ldr r7, _08142E8C @ =gTasks
- lsls r0, r6, 2
- adds r1, r0, r6
- lsls r3, r1, 3
- adds r4, r3, r7
- ldrh r2, [r4, 0x8]
- movs r5, 0x8
- ldrsh r1, [r4, r5]
- mov r8, r0
- cmp r1, 0
- beq _08142E98
- subs r0, r2, 0x1
- strh r0, [r4, 0x8]
- movs r5, 0
- adds r7, 0x8
- mov r9, r7
- adds r7, r3, 0
-_08142E30:
- adds r0, r5, 0x5
- lsls r0, 1
- adds r0, r7
- add r0, r9
- ldrb r1, [r0]
- cmp r1, 0xFF
- beq _08142E5E
- ldr r0, _08142E90 @ =gSprites
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- adds r4, r0
- ldrb r0, [r4, 0x5]
- lsrs r0, 4
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- adds r0, r4, 0
- bl DestroySprite
-_08142E5E:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _08142E30
- ldr r0, _08142E8C @ =gTasks
- mov r2, r8
- adds r1, r2, r6
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0xA]
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08142E80
- subs r0, r2, 0x1
- strh r0, [r1, 0xA]
-_08142E80:
- ldr r0, _08142E94 @ =sub_8142B04
- str r0, [r1]
- b _08142F64
- .align 2, 0
-_08142E88: .4byte gMain
-_08142E8C: .4byte gTasks
-_08142E90: .4byte gSprites
-_08142E94: .4byte sub_8142B04
-_08142E98:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _08142EB2
- bl StopCryAndClearCrySongs
- ldr r0, _08142EB8 @ =gMPlay_BGM
- ldr r1, _08142EBC @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_08142EB2:
- ldr r0, _08142EC0 @ =sub_8142F78
- str r0, [r4]
- b _08142F64
- .align 2, 0
-_08142EB8: .4byte gMPlay_BGM
-_08142EBC: .4byte 0x0000ffff
-_08142EC0: .4byte sub_8142F78
-_08142EC4:
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _08142F08
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _08142EE6
- bl StopCryAndClearCrySongs
- ldr r0, _08142EF8 @ =gMPlay_BGM
- ldr r1, _08142EFC @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_08142EE6:
- ldr r0, _08142F00 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _08142F04 @ =sub_8142F78
- str r0, [r1]
- b _08142F64
- .align 2, 0
-_08142EF8: .4byte gMPlay_BGM
-_08142EFC: .4byte 0x0000ffff
-_08142F00: .4byte gTasks
-_08142F04: .4byte sub_8142F78
-_08142F08:
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- beq _08142F38
- ldr r0, _08142F30 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0xC]
- movs r4, 0xC
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _08142F38
- subs r0, r2, 0x1
- strh r0, [r1, 0xC]
- ldr r0, _08142F34 @ =sub_8142CC8
- str r0, [r1]
- b _08142F64
- .align 2, 0
-_08142F30: .4byte gTasks
-_08142F34: .4byte sub_8142CC8
-_08142F38:
- ldrh r1, [r3, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08142F64
- ldr r1, _08142F70 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r2, r0, r1
- movs r5, 0xC
- ldrsh r1, [r2, r5]
- movs r3, 0x10
- ldrsh r0, [r2, r3]
- subs r0, 0x1
- cmp r1, r0
- bge _08142F64
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- ldr r0, _08142F74 @ =sub_8142CC8
- str r0, [r2]
-_08142F64:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08142F70: .4byte gTasks
-_08142F74: .4byte sub_8142CC8
- thumb_func_end sub_8142DF4
-
- thumb_func_start sub_8142F78
-sub_8142F78: @ 8142F78
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08142FB4 @ =gPlttBufferFaded
- ldr r1, _08142FB8 @ =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 2
- bl CpuSet
- ldr r0, _08142FBC @ =0x0201c000
- adds r2, r0, 0
- ldr r1, _08142FC0 @ =gUnknown_0840B57C
- ldm r1!, {r3,r5,r6}
- stm r2!, {r3,r5,r6}
- ldm r1!, {r3,r5}
- stm r2!, {r3,r5}
- bl sub_80C5E38
- ldr r1, _08142FC4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08142FC8 @ =sub_8142FCC
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08142FB4: .4byte gPlttBufferFaded
-_08142FB8: .4byte gPlttBufferUnfaded
-_08142FBC: .4byte 0x0201c000
-_08142FC0: .4byte gUnknown_0840B57C
-_08142FC4: .4byte gTasks
-_08142FC8: .4byte sub_8142FCC
- thumb_func_end sub_8142F78
-
- thumb_func_start sub_8142FCC
-sub_8142FCC: @ 8142FCC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80C5F98
- lsls r0, 24
- cmp r0, 0
- beq _08142FE6
- adds r0, r4, 0
- bl DestroyTask
- bl ReturnFromHallOfFamePC
-_08142FE6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8142FCC
-
- thumb_func_start sub_8142FEC
-sub_8142FEC: @ 8142FEC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2
- movs r1, 0xE
- movs r2, 0x1B
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldr r0, _08143020 @ =gMenuText_HOFCorrupt
- movs r1, 0x3
- movs r2, 0xF
- bl MenuPrintMessage
- ldr r1, _08143024 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08143028 @ =sub_814302C
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08143020: .4byte gMenuText_HOFCorrupt
-_08143024: .4byte gTasks
-_08143028: .4byte sub_814302C
- thumb_func_end sub_8142FEC
-
- thumb_func_start sub_814302C
-sub_814302C: @ 814302C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- beq _08143056
- ldr r0, _0814305C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08143056
- ldr r0, _08143060 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08143064 @ =sub_8142F78
- str r0, [r1]
-_08143056:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0814305C: .4byte gMain
-_08143060: .4byte gTasks
-_08143064: .4byte sub_8142F78
- thumb_func_end sub_814302C
-
- thumb_func_start sub_8143068
-sub_8143068: @ 8143068
- push {lr}
- lsls r2, r1, 24
- ldr r0, _08143084 @ =gMenuText_WelcomeToHOFAndDexRating
- movs r1, 0x80
- lsls r1, 17
- adds r2, r1
- lsrs r2, 24
- movs r1, 0
- movs r3, 0xF0
- bl sub_8072BD8
- pop {r0}
- bx r0
- .align 2, 0
-_08143084: .4byte gMenuText_WelcomeToHOFAndDexRating
- thumb_func_end sub_8143068
-
- thumb_func_start sub_8143088
-sub_8143088: @ 8143088
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- ldr r7, _08143188 @ =gStringVar1
- movs r0, 0xFC
- strb r0, [r7]
- movs r0, 0x13
- strb r0, [r7, 0x1]
- movs r0, 0x28
- strb r0, [r7, 0x2]
- movs r0, 0xFF
- strb r0, [r7, 0x3]
- mov r0, r9
- ldrh r2, [r0, 0x8]
- ldr r0, _0814318C @ =0x000001ff
- ands r0, r2
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _081430EA
- lsls r0, r2, 23
- lsrs r0, 23
- bl SpeciesToPokedexNum
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _08143190 @ =0x0000ffff
- cmp r6, r0
- beq _081430EA
- ldr r1, _08143194 @ =gOtherText_Number2
- adds r0, r7, 0
- bl StringCopy
- adds r7, r0, 0
- adds r1, r6, 0
- movs r2, 0x2
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
-_081430EA:
- ldr r5, _08143188 @ =gStringVar1
- mov r1, r8
- adds r1, 0x4
- lsls r1, 24
- lsrs r1, 24
- mov r4, r10
- adds r4, 0x1
- lsls r2, r4, 24
- lsrs r2, 24
- adds r0, r5, 0
- bl MenuPrint
- adds r7, r5, 0
- movs r3, 0
- mov r1, r9
- ldrb r0, [r1, 0xA]
- str r4, [sp]
- mov r2, r8
- adds r2, 0x9
- str r2, [sp, 0xC]
- mov r6, r10
- adds r6, 0x3
- str r6, [sp, 0x8]
- cmp r0, 0xFF
- beq _0814313A
- mov r2, r9
- adds r2, 0xA
-_08143120:
- adds r1, r7, r3
- adds r0, r2, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x9
- bhi _0814313A
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08143120
-_0814313A:
- adds r7, r3
- movs r2, 0xFF
- strb r2, [r7]
- mov r1, r9
- ldrh r0, [r1, 0x8]
- ldr r1, _0814318C @ =0x000001ff
- ands r1, r0
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bne _08143198
- movs r0, 0xFC
- strb r0, [r7]
- movs r0, 0x13
- strb r0, [r7, 0x1]
- movs r0, 0xA0
- strb r0, [r7, 0x2]
- strb r2, [r7, 0x3]
- ldr r0, _08143188 @ =gStringVar1
- ldr r2, [sp, 0xC]
- lsls r1, r2, 24
- lsrs r1, 24
- ldr r3, [sp]
- lsls r2, r3, 24
- lsrs r2, 24
- bl MenuPrint
- ldr r6, [sp, 0x8]
- lsls r1, r6, 24
- lsrs r1, 24
- mov r3, r10
- adds r3, 0x4
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0
- movs r2, 0x1D
- bl MenuZeroFillWindowRect
- b _081432E4
- .align 2, 0
-_08143188: .4byte gStringVar1
-_0814318C: .4byte 0x000001ff
-_08143190: .4byte 0x0000ffff
-_08143194: .4byte gOtherText_Number2
-_08143198:
- movs r0, 0xFC
- strb r0, [r7]
- movs r0, 0x13
- strb r0, [r7, 0x1]
- movs r0, 0x3E
- strb r0, [r7, 0x2]
- adds r7, 0x3
- movs r0, 0xBA
- strb r0, [r7]
- adds r7, 0x1
- movs r3, 0
- ldr r2, _08143238 @ =gSpeciesNames
- mov r1, r9
- ldrh r0, [r1, 0x8]
- lsls r0, 23
- lsrs r0, 23
- movs r1, 0xB
- muls r0, r1
- adds r0, r2
- ldrb r0, [r0]
- mov r6, r8
- adds r6, 0x7
- str r6, [sp, 0x4]
- mov r1, r8
- adds r1, 0xD
- str r1, [sp, 0x10]
- cmp r0, 0xFF
- beq _08143204
- adds r5, r2, 0
- movs r4, 0xB
-_081431D4:
- adds r1, r7, r3
- mov r6, r9
- ldrh r0, [r6, 0x8]
- lsls r0, 23
- lsrs r0, 23
- muls r0, r4
- adds r0, r3, r0
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x9
- bhi _08143204
- ldrh r0, [r6, 0x8]
- lsls r0, 23
- lsrs r0, 23
- muls r0, r4
- adds r0, r3, r0
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081431D4
-_08143204:
- adds r7, r3
- movs r0, 0
- strb r0, [r7]
- adds r7, 0x1
- mov r1, r9
- ldrh r0, [r1, 0x8]
- ldr r1, _0814323C @ =0x000001ff
- ands r1, r0
- cmp r1, 0x20
- beq _0814324A
- cmp r1, 0x1D
- beq _0814324A
- lsls r0, 23
- lsrs r0, 23
- mov r2, r9
- ldr r1, [r2, 0x4]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08143240
- cmp r0, 0xFE
- beq _08143244
- b _0814324A
- .align 2, 0
-_08143238: .4byte gSpeciesNames
-_0814323C: .4byte 0x000001ff
-_08143240:
- movs r0, 0xB5
- b _08143246
-_08143244:
- movs r0, 0xB6
-_08143246:
- strb r0, [r7]
- adds r7, 0x1
-_0814324A:
- movs r4, 0xFC
- strb r4, [r7]
- movs r3, 0x13
- mov r8, r3
- strb r3, [r7, 0x1]
- movs r0, 0xA0
- strb r0, [r7, 0x2]
- movs r6, 0xFF
- mov r10, r6
- strb r6, [r7, 0x3]
- ldr r5, _081432F4 @ =gStringVar1
- ldr r0, [sp, 0xC]
- lsls r1, r0, 24
- lsrs r1, 24
- ldr r3, [sp]
- lsls r2, r3, 24
- lsrs r2, 24
- adds r0, r5, 0
- bl MenuPrint
- mov r6, r9
- ldrb r0, [r6, 0x9]
- lsrs r6, r0, 1
- ldr r1, _081432F8 @ =gOtherText_Level3
- adds r0, r5, 0
- bl StringCopy
- adds r7, r0, 0
- strb r4, [r7]
- movs r0, 0x14
- strb r0, [r7, 0x1]
- movs r0, 0x6
- strb r0, [r7, 0x2]
- adds r7, 0x3
- adds r0, r7, 0
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r7, r0, 0
- strb r4, [r7]
- mov r0, r8
- strb r0, [r7, 0x1]
- movs r0, 0x30
- strb r0, [r7, 0x2]
- mov r1, r10
- strb r1, [r7, 0x3]
- ldr r2, [sp, 0x4]
- lsls r1, r2, 24
- lsrs r1, 24
- ldr r3, [sp, 0x8]
- lsls r4, r3, 24
- lsrs r4, 24
- adds r0, r5, 0
- adds r2, r4, 0
- bl MenuPrint
- mov r0, r9
- ldrh r6, [r0]
- ldr r1, _081432FC @ =gOtherText_IDNumber
- adds r0, r5, 0
- bl StringCopy
- adds r7, r0, 0
- adds r1, r6, 0
- movs r2, 0x2
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
- ldr r2, [sp, 0x10]
- lsls r1, r2, 24
- lsrs r1, 24
- adds r0, r5, 0
- adds r2, r4, 0
- bl MenuPrint
-_081432E4:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081432F4: .4byte gStringVar1
-_081432F8: .4byte gOtherText_Level3
-_081432FC: .4byte gOtherText_IDNumber
- thumb_func_end sub_8143088
-
- thumb_func_start sub_8143300
-sub_8143300: @ 8143300
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- adds r5, r0, 0
- adds r4, r1, 0
- lsls r5, 24
- lsls r4, 24
- ldr r0, _081433CC @ =gOtherText_Name
- lsrs r1, r5, 24
- mov r8, r1
- movs r2, 0x80
- lsls r2, 17
- adds r5, r2
- lsrs r5, 24
- lsrs r6, r4, 24
- adds r4, r2
- lsrs r4, 24
- adds r1, r5, 0
- adds r2, r4, 0
- bl MenuPrint
- ldr r0, _081433D0 @ =gSaveBlock2
- mov r10, r0
- movs r1, 0xE
- add r8, r1
- mov r2, r8
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- mov r1, r8
- adds r2, r4, 0
- bl MenuPrint_RightAligned
- ldr r0, _081433D4 @ =gOtherText_IDNumber2
- adds r4, r6, 0x3
- lsls r4, 24
- lsrs r4, 24
- adds r1, r5, 0
- adds r2, r4, 0
- bl MenuPrint
- mov r0, r10
- ldrb r1, [r0, 0xA]
- ldrb r0, [r0, 0xB]
- lsls r0, 8
- orrs r1, r0
- ldr r2, _081433D8 @ =gStringVar1
- mov r9, r2
- mov r0, r9
- movs r2, 0x2
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
- mov r0, r9
- mov r1, r8
- adds r2, r4, 0
- bl MenuPrint_RightAligned
- ldr r0, _081433DC @ =gMainMenuString_Time
- adds r6, 0x5
- lsls r6, 24
- lsrs r6, 24
- adds r1, r5, 0
- adds r2, r6, 0
- bl MenuPrint
- mov r0, r10
- ldrh r1, [r0, 0xE]
- mov r0, r9
- bl ConvertIntToDecimalString
- adds r2, r0, 0
- movs r1, 0
- strb r1, [r2]
- movs r0, 0xF0
- strb r0, [r2, 0x1]
- strb r1, [r2, 0x2]
- adds r2, 0x3
- mov r0, r10
- ldrb r1, [r0, 0x10]
- adds r0, r2, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r2, r0, 0
- movs r0, 0xFF
- strb r0, [r2]
- mov r0, r9
- mov r1, r8
- adds r2, r6, 0
- bl MenuPrint_RightAligned
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081433CC: .4byte gOtherText_Name
-_081433D0: .4byte gSaveBlock2
-_081433D4: .4byte gOtherText_IDNumber2
-_081433D8: .4byte gStringVar1
-_081433DC: .4byte gMainMenuString_Time
- thumb_func_end sub_8143300
-
- thumb_func_start sub_81433E0
-sub_81433E0: @ 81433E0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- movs r0, 0x80
- lsls r0, 19
- movs r1, 0
- strh r1, [r0]
- adds r0, 0x8
- strh r1, [r0]
- adds r0, 0x8
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- subs r0, 0x8
- strh r1, [r0]
- adds r0, 0xA
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- subs r0, 0xA
- strh r1, [r0]
- adds r0, 0xC
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- subs r0, 0xC
- strh r1, [r0]
- adds r0, 0xE
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- movs r3, 0xC0
- lsls r3, 19
- movs r4, 0xC0
- lsls r4, 9
- add r0, sp, 0x4
- mov r8, r0
- ldr r1, _0814354C @ =gHallOfFame_Gfx
- mov r9, r1
- mov r2, sp
- movs r6, 0
- ldr r1, _08143550 @ =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _08143554 @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_08143444:
- strh r6, [r2]
- mov r0, sp
- str r0, [r1]
- str r3, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r5
- subs r4, r5
- cmp r4, r5
- bhi _08143444
- strh r6, [r2]
- mov r2, sp
- str r2, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r4, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 19
- movs r3, 0x80
- lsls r3, 3
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r2, _08143550 @ =0x040000d4
- mov r1, r8
- str r1, [r2]
- str r0, [r2, 0x4]
- lsrs r0, r3, 2
- movs r1, 0x85
- lsls r1, 24
- orrs r0, r1
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r1, 0xA0
- lsls r1, 19
- mov r0, sp
- strh r4, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- lsrs r3, 1
- movs r0, 0x81
- lsls r0, 24
- orrs r3, r0
- str r3, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r1, 0xC0
- lsls r1, 19
- mov r0, r9
- bl LZ77UnCompVram
- movs r1, 0
- ldr r3, _08143558 @ =0x06003800
- movs r2, 0x1
-_081434B2:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x3F
- bls _081434B2
- movs r1, 0
- ldr r5, _0814355C @ =0x02000000
- ldr r3, _08143560 @ =0x06003b80
- movs r2, 0x1
-_081434CA:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0xBF
- bls _081434CA
- movs r1, 0
- ldr r4, _08143564 @ =0x06003000
- movs r3, 0x2
- ldr r2, _08143568 @ =0x000003ff
-_081434E2:
- lsls r0, r1, 1
- adds r0, r4
- strh r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- bls _081434E2
- adds r2, r5, 0
- movs r3, 0x80
- lsls r3, 7
- mov r4, sp
- movs r6, 0
- ldr r1, _08143550 @ =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _08143554 @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_0814350A:
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r5
- subs r3, r5
- cmp r3, r5
- bhi _0814350A
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ResetPaletteFade
- ldr r0, _0814356C @ =gHallOfFame_Pal
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0814354C: .4byte gHallOfFame_Gfx
-_08143550: .4byte 0x040000d4
-_08143554: .4byte 0x81000800
-_08143558: .4byte 0x06003800
-_0814355C: .4byte 0x02000000
-_08143560: .4byte 0x06003b80
-_08143564: .4byte 0x06003000
-_08143568: .4byte 0x000003ff
-_0814356C: .4byte gHallOfFame_Pal
- thumb_func_end sub_81433E0
-
- thumb_func_start sub_8143570
-sub_8143570: @ 8143570
- push {r4,lr}
- bl remove_some_task
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _081435A8 @ =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- ldr r0, _081435AC @ =gUnknown_0840B514
- bl LoadCompressedObjectPic
- ldr r0, _081435B0 @ =gUnknown_0840B524
- bl LoadCompressedObjectPalette
- ldr r4, _081435B4 @ =gWindowConfig_81E71B4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081435A8: .4byte gReservedSpritePaletteCount
-_081435AC: .4byte gUnknown_0840B514
-_081435B0: .4byte gUnknown_0840B524
-_081435B4: .4byte gWindowConfig_81E71B4
- thumb_func_end sub_8143570
-
- thumb_func_start sub_81435B8
-sub_81435B8: @ 81435B8
- ldr r1, _081435D8 @ =REG_BG1CNT
- movs r2, 0xE0
- lsls r2, 3
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x4
- subs r2, 0xFD
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0xE
- movs r2, 0xDA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- bx lr
- .align 2, 0
-_081435D8: .4byte REG_BG1CNT
- thumb_func_end sub_81435B8
-
- thumb_func_start sub_81435DC
-sub_81435DC: @ 81435DC
- push {r4,lr}
- adds r2, r0, 0
- ldr r1, [r2, 0x20]
- ldr r0, [r2, 0x30]
- cmp r1, r0
- beq _08143632
- ldrh r3, [r2, 0x20]
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- movs r4, 0x30
- ldrsh r1, [r2, r4]
- cmp r0, r1
- bge _081435FC
- adds r0, r3, 0
- adds r0, 0xF
- strh r0, [r2, 0x20]
-_081435FC:
- ldrh r3, [r2, 0x20]
- movs r4, 0x20
- ldrsh r0, [r2, r4]
- cmp r0, r1
- ble _0814360C
- adds r0, r3, 0
- subs r0, 0xF
- strh r0, [r2, 0x20]
-_0814360C:
- ldrh r3, [r2, 0x22]
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- movs r4, 0x32
- ldrsh r1, [r2, r4]
- cmp r0, r1
- bge _08143620
- adds r0, r3, 0
- adds r0, 0xA
- strh r0, [r2, 0x22]
-_08143620:
- ldrh r3, [r2, 0x22]
- movs r4, 0x22
- ldrsh r0, [r2, r4]
- cmp r0, r1
- ble _0814363A
- adds r0, r3, 0
- subs r0, 0xA
- strh r0, [r2, 0x22]
- b _0814363A
-_08143632:
- movs r0, 0x1
- strh r0, [r2, 0x2E]
- ldr r0, _08143640 @ =nullsub_81
- str r0, [r2, 0x1C]
-_0814363A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08143640: .4byte nullsub_81
- thumb_func_end sub_81435DC
-
- thumb_func_start nullsub_81
-nullsub_81: @ 8143644
- bx lr
- thumb_func_end nullsub_81
-
- thumb_func_start sub_8143648
-sub_8143648: @ 8143648
- push {r4-r7,lr}
- lsls r1, 24
- ldr r4, _08143670 @ =gUnknown_02024E8C
- adds r3, r4, 0
- ldr r2, _08143674 @ =gUnknown_0840B6B8
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- strh r0, [r4, 0x2]
- ldr r0, _08143678 @ =gUnknown_0840B69C
- lsrs r1, 22
- adds r1, r0
- ldr r0, [r1]
- str r0, [r4, 0xC]
- ldr r0, _0814367C @ =gSpriteAnimTable_81E7C64
- str r0, [r4, 0x8]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08143670: .4byte gUnknown_02024E8C
-_08143674: .4byte gUnknown_0840B6B8
-_08143678: .4byte gUnknown_0840B69C
-_0814367C: .4byte gSpriteAnimTable_81E7C64
- thumb_func_end sub_8143648
-
- thumb_func_start sub_8143680
-sub_8143680: @ 8143680
- push {r4-r7,lr}
- lsls r1, 24
- ldr r4, _081436AC @ =gUnknown_02024E8C
- adds r3, r4, 0
- ldr r2, _081436B0 @ =gUnknown_0840B6B8
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- strh r0, [r4, 0x2]
- ldr r0, _081436B4 @ =gUnknown_0840B69C
- lsrs r1, 22
- adds r1, r0
- ldr r0, [r1]
- str r0, [r4, 0xC]
- ldr r0, _081436B8 @ =gUnknown_081EC2A4
- ldr r0, [r0]
- str r0, [r4, 0x8]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081436AC: .4byte gUnknown_02024E8C
-_081436B0: .4byte gUnknown_0840B6B8
-_081436B4: .4byte gUnknown_0840B69C
-_081436B8: .4byte gUnknown_081EC2A4
- thumb_func_end sub_8143680
-
- thumb_func_start sub_81436BC
-sub_81436BC: @ 81436BC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- adds r6, r0, 0
- mov r9, r1
- mov r10, r2
- mov r8, r3
- ldr r7, [sp, 0x34]
- lsls r6, 16
- lsrs r6, 16
- mov r0, r9
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- mov r1, r10
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- mov r2, r8
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- lsls r0, r6, 3
- ldr r1, _08143790 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08143794 @ =gMonFrontPicCoords
- lsls r2, r6, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08143798 @ =gUnknown_0840B5A0
- mov r12, r4
- mov r5, r8
- lsls r4, r5, 2
- add r4, r12
- ldr r4, [r4]
- str r4, [sp]
- str r6, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r4, 0x1
- str r4, [sp, 0xC]
- bl LoadSpecialPokePic
- adds r0, r6, 0
- ldr r1, [sp, 0x30]
- adds r2, r7, 0
- bl species_and_otid_get_pal
- lsls r4, r5, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x20
- bl LoadCompressedPalette
- lsls r1, r5, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_8143648
- ldr r0, _0814379C @ =gUnknown_02024E8C
- mov r5, r9
- lsls r5, 16
- asrs r5, 16
- mov r9, r5
- mov r1, r10
- lsls r1, 16
- asrs r1, 16
- mov r10, r1
- movs r3, 0xA
- mov r2, r8
- subs r3, r2
- lsls r3, 24
- lsrs r3, 24
- mov r1, r9
- mov r2, r10
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _081437A0 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r4
- strb r1, [r2, 0x5]
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08143790: .4byte gMonFrontPicTable
-_08143794: .4byte gMonFrontPicCoords
-_08143798: .4byte gUnknown_0840B5A0
-_0814379C: .4byte gUnknown_02024E8C
-_081437A0: .4byte gSprites
- thumb_func_end sub_81436BC
-
- thumb_func_start sub_81437A4
-sub_81437A4: @ 81437A4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r1
- mov r10, r2
- adds r6, r3, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r2, 16
- lsrs r2, 16
- mov r10, r2
- lsls r6, 16
- lsrs r6, 16
- lsls r7, r0, 3
- ldr r1, _08143854 @ =gTrainerFrontPicTable
- mov r8, r1
- add r8, r7
- ldr r1, _08143858 @ =gTrainerFrontPicCoords
- lsls r2, r0, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r5, _0814385C @ =gUnknown_0840B5A0
- lsls r4, r6, 2
- adds r4, r5
- ldr r4, [r4]
- str r4, [sp]
- str r0, [sp, 0x4]
- mov r0, r8
- bl DecompressPicFromTable_2
- ldr r0, _08143860 @ =gTrainerFrontPicPaletteTable
- adds r0, r7, r0
- ldr r0, [r0]
- lsls r4, r6, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x20
- bl LoadCompressedPalette
- lsls r1, r6, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_8143680
- ldr r0, _08143864 @ =gUnknown_02024E8C
- mov r1, r9
- lsls r1, 16
- asrs r1, 16
- mov r9, r1
- mov r2, r10
- lsls r2, 16
- asrs r2, 16
- mov r10, r2
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08143868 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r4
- strb r1, [r2, 0x5]
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08143854: .4byte gTrainerFrontPicTable
-_08143858: .4byte gTrainerFrontPicCoords
-_0814385C: .4byte gUnknown_0840B5A0
-_08143860: .4byte gTrainerFrontPicPaletteTable
-_08143864: .4byte gUnknown_02024E8C
-_08143868: .4byte gSprites
- thumb_func_end sub_81437A4
-
- thumb_func_start sub_814386C
-sub_814386C: @ 814386C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r1, [r5, 0x26]
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- cmp r0, 0x78
- ble _08143882
- adds r0, r5, 0
- bl DestroySprite
- b _081438BA
-_08143882:
- adds r0, r1, 0x1
- ldrh r1, [r5, 0x30]
- adds r0, r1
- strh r0, [r5, 0x26]
- ldrh r4, [r5, 0x2E]
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- ands r0, r1
- adds r0, 0x8
- ldr r1, _081438C0 @ =gSineTable
- lsls r4, 1
- adds r4, r1
- movs r2, 0
- ldrsh r1, [r4, r2]
- muls r0, r1
- cmp r0, 0
- bge _081438B0
- adds r0, 0xFF
-_081438B0:
- asrs r0, 8
- strh r0, [r5, 0x24]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x4
- strh r0, [r5, 0x2E]
-_081438BA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081438C0: .4byte gSineTable
- thumb_func_end sub_814386C
-
- thumb_func_start sub_81438C4
-sub_81438C4: @ 81438C4
- push {r4,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF0
- bl __umodsi3
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl Random
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x7
- ands r2, r0
- negs r2, r2
- ldr r0, _08143934 @ =gSpriteTemplate_840B7A4
- lsls r4, 16
- asrs r4, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r4, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08143938 @ =gSprites
- adds r4, r1, r0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x11
- bl __umodsi3
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- bl Random
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0
- beq _0814393C
- movs r0, 0
- b _0814393E
- .align 2, 0
-_08143934: .4byte gSpriteTemplate_840B7A4
-_08143938: .4byte gSprites
-_0814393C:
- movs r0, 0x1
-_0814393E:
- strh r0, [r4, 0x30]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81438C4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/intro_credits_graphics.s b/asm/intro_credits_graphics.s
deleted file mode 100644
index 8d73f6cf6..000000000
--- a/asm/intro_credits_graphics.s
+++ /dev/null
@@ -1,1166 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start load_intro_part2_graphics
-load_intro_part2_graphics: @ 8148B8C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08148BE8 @ =gUnknown_0841225C
- ldr r1, _08148BEC @ =0x06004000
- bl LZ77UnCompVram
- ldr r0, _08148BF0 @ =gUnknown_084126DC
- ldr r1, _08148BF4 @ =0x06007800
- bl LZ77UnCompVram
- ldr r0, _08148BF8 @ =gUnknown_084121FC
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- cmp r4, 0
- beq _08148BB4
- cmp r4, 0x1
- beq _08148C14
-_08148BB4:
- ldr r0, _08148BFC @ =gUnknown_084128D8
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _08148C00 @ =gUnknown_08412EB4
- ldr r1, _08148C04 @ =0x06003000
- bl LZ77UnCompVram
- ldr r0, _08148C08 @ =gUnknown_08412818
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- ldr r0, _08148C0C @ =gUnknown_08416B54
- bl LoadCompressedObjectPic
- ldr r0, _08148C10 @ =gUnknown_08413184
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_8149248
- b _08148C46
- .align 2, 0
-_08148BE8: .4byte gUnknown_0841225C
-_08148BEC: .4byte 0x06004000
-_08148BF0: .4byte gUnknown_084126DC
-_08148BF4: .4byte 0x06007800
-_08148BF8: .4byte gUnknown_084121FC
-_08148BFC: .4byte gUnknown_084128D8
-_08148C00: .4byte gUnknown_08412EB4
-_08148C04: .4byte 0x06003000
-_08148C08: .4byte gUnknown_08412818
-_08148C0C: .4byte gUnknown_08416B54
-_08148C10: .4byte gUnknown_08413184
-_08148C14:
- ldr r0, _08148C58 @ =gUnknown_08413340
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _08148C5C @ =gUnknown_084139C8
- ldr r1, _08148C60 @ =0x06003000
- bl LZ77UnCompVram
- ldr r0, _08148C64 @ =gUnknown_08413300
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08148C68 @ =gUnknown_08416BDC
- bl LoadCompressedObjectPic
- ldr r0, _08148C6C @ =gUnknown_08413CCC
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_8149264
-_08148C46:
- ldr r1, _08148C70 @ =gUnknown_0203935C
- movs r0, 0
- strh r0, [r1]
- ldr r1, _08148C74 @ =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08148C58: .4byte gUnknown_08413340
-_08148C5C: .4byte gUnknown_084139C8
-_08148C60: .4byte 0x06003000
-_08148C64: .4byte gUnknown_08413300
-_08148C68: .4byte gUnknown_08416BDC
-_08148C6C: .4byte gUnknown_08413CCC
-_08148C70: .4byte gUnknown_0203935C
-_08148C74: .4byte gReservedSpritePaletteCount
- thumb_func_end load_intro_part2_graphics
-
- thumb_func_start sub_8148C78
-sub_8148C78: @ 8148C78
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08148CA4 @ =REG_BG3CNT
- ldr r2, _08148CA8 @ =0x00000603
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x2
- adds r2, 0xFF
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x2
- ldr r2, _08148CAC @ =0x00000f05
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0xA
- movs r2, 0xF2
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08148CA4: .4byte REG_BG3CNT
-_08148CA8: .4byte 0x00000603
-_08148CAC: .4byte 0x00000f05
- thumb_func_end sub_8148C78
-
- thumb_func_start sub_8148CB0
-sub_8148CB0: @ 8148CB0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08148CD4 @ =gUnknown_0841225C
- ldr r1, _08148CD8 @ =0x06004000
- bl LZ77UnCompVram
- ldr r0, _08148CDC @ =gUnknown_084126DC
- ldr r1, _08148CE0 @ =0x06007800
- bl LZ77UnCompVram
- cmp r4, 0x4
- bhi _08148CFC
- lsls r0, r4, 2
- ldr r1, _08148CE4 @ =_08148CE8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08148CD4: .4byte gUnknown_0841225C
-_08148CD8: .4byte 0x06004000
-_08148CDC: .4byte gUnknown_084126DC
-_08148CE0: .4byte 0x06007800
-_08148CE4: .4byte _08148CE8
- .align 2, 0
-_08148CE8:
- .4byte _08148CFC
- .4byte _08148D58
- .4byte _08148DC4
- .4byte _08148DC4
- .4byte _08148E1C
-_08148CFC:
- ldr r0, _08148D34 @ =gUnknown_084121FC
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08148D38 @ =gUnknown_084128D8
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _08148D3C @ =gUnknown_08412EB4
- ldr r1, _08148D40 @ =0x06003000
- bl LZ77UnCompVram
- ldr r0, _08148D44 @ =gUnknown_08412818
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- ldr r0, _08148D48 @ =gUnknown_08416B54
- bl LoadCompressedObjectPic
- ldr r0, _08148D4C @ =gUnknown_084131C4
- ldr r1, _08148D50 @ =0x06010000
- bl LZ77UnCompVram
- ldr r0, _08148D54 @ =gUnknown_08413184
- b _08148D8E
- .align 2, 0
-_08148D34: .4byte gUnknown_084121FC
-_08148D38: .4byte gUnknown_084128D8
-_08148D3C: .4byte gUnknown_08412EB4
-_08148D40: .4byte 0x06003000
-_08148D44: .4byte gUnknown_08412818
-_08148D48: .4byte gUnknown_08416B54
-_08148D4C: .4byte gUnknown_084131C4
-_08148D50: .4byte 0x06010000
-_08148D54: .4byte gUnknown_08413184
-_08148D58:
- ldr r0, _08148DA0 @ =gUnknown_0841221C
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08148DA4 @ =gUnknown_084128D8
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _08148DA8 @ =gUnknown_08412EB4
- ldr r1, _08148DAC @ =0x06003000
- bl LZ77UnCompVram
- ldr r0, _08148DB0 @ =gUnknown_08412878
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- ldr r0, _08148DB4 @ =gUnknown_08416B54
- bl LoadCompressedObjectPic
- ldr r0, _08148DB8 @ =gUnknown_084131C4
- ldr r1, _08148DBC @ =0x06010000
- bl LZ77UnCompVram
- ldr r0, _08148DC0 @ =gUnknown_084131A4
-_08148D8E:
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_8149248
- b _08148E58
- .align 2, 0
-_08148DA0: .4byte gUnknown_0841221C
-_08148DA4: .4byte gUnknown_084128D8
-_08148DA8: .4byte gUnknown_08412EB4
-_08148DAC: .4byte 0x06003000
-_08148DB0: .4byte gUnknown_08412878
-_08148DB4: .4byte gUnknown_08416B54
-_08148DB8: .4byte gUnknown_084131C4
-_08148DBC: .4byte 0x06010000
-_08148DC0: .4byte gUnknown_084131A4
-_08148DC4:
- ldr r0, _08148E04 @ =gUnknown_0841221C
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08148E08 @ =gUnknown_08413340
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _08148E0C @ =gUnknown_084139C8
- ldr r1, _08148E10 @ =0x06003000
- bl LZ77UnCompVram
- ldr r4, _08148E14 @ =gUnknown_08413320
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08148E18 @ =gUnknown_08416BDC
- bl LoadCompressedObjectPic
- movs r1, 0x80
- lsls r1, 1
- adds r0, r4, 0
- movs r2, 0x20
- bl LoadPalette
- bl sub_8149264
- b _08148E58
- .align 2, 0
-_08148E04: .4byte gUnknown_0841221C
-_08148E08: .4byte gUnknown_08413340
-_08148E0C: .4byte gUnknown_084139C8
-_08148E10: .4byte 0x06003000
-_08148E14: .4byte gUnknown_08413320
-_08148E18: .4byte gUnknown_08416BDC
-_08148E1C:
- ldr r0, _08148E6C @ =gUnknown_0841223C
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08148E70 @ =gUnknown_08413E78
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, _08148E74 @ =gUnknown_08414084
- ldr r1, _08148E78 @ =0x06003000
- bl LZ77UnCompVram
- ldr r0, _08148E7C @ =gUnknown_08413E38
- movs r1, 0
- movs r2, 0x40
- bl LoadPalette
- ldr r0, _08148E80 @ =gUnknown_08416C70
- bl LoadCompressedObjectPic
- ldr r0, _08148E84 @ =gUnknown_08414064
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_8149280
-_08148E58:
- ldr r1, _08148E88 @ =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- ldr r1, _08148E8C @ =gUnknown_0203935C
- movs r0, 0
- strh r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08148E6C: .4byte gUnknown_0841223C
-_08148E70: .4byte gUnknown_08413E78
-_08148E74: .4byte gUnknown_08414084
-_08148E78: .4byte 0x06003000
-_08148E7C: .4byte gUnknown_08413E38
-_08148E80: .4byte gUnknown_08416C70
-_08148E84: .4byte gUnknown_08414064
-_08148E88: .4byte gReservedSpritePaletteCount
-_08148E8C: .4byte gUnknown_0203935C
- thumb_func_end sub_8148CB0
-
- thumb_func_start sub_8148E90
-sub_8148E90: @ 8148E90
- ldr r1, _08148EB4 @ =REG_BG3CNT
- ldr r2, _08148EB8 @ =0x00000603
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x2
- adds r2, 0xFF
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x2
- ldr r2, _08148EBC @ =0x00000f05
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0xA
- movs r2, 0xFA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- bx lr
- .align 2, 0
-_08148EB4: .4byte REG_BG3CNT
-_08148EB8: .4byte 0x00000603
-_08148EBC: .4byte 0x00000f05
- thumb_func_end sub_8148E90
-
- thumb_func_start sub_8148EC0
-sub_8148EC0: @ 8148EC0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r3, 16
- lsrs r3, 16
- ldr r1, _08148F34 @ =sub_8148F3C
- mov r9, r1
- mov r0, r9
- movs r1, 0
- str r3, [sp]
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _08148F38 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- strh r5, [r0, 0x8]
- strh r6, [r0, 0xA]
- strh r2, [r0, 0xC]
- strh r2, [r0, 0xE]
- mov r1, r8
- strh r1, [r0, 0x10]
- strh r2, [r0, 0x12]
- strh r2, [r0, 0x14]
- ldr r3, [sp]
- strh r3, [r0, 0x16]
- movs r1, 0x8
- strh r1, [r0, 0x18]
- strh r2, [r0, 0x1A]
- adds r0, r4, 0
- bl _call_via_r9
- adds r0, r4, 0
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08148F34: .4byte sub_8148F3C
-_08148F38: .4byte gTasks
- thumb_func_end sub_8148EC0
-
- thumb_func_start sub_8148F3C
-sub_8148F3C: @ 8148F3C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08148FB4 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r3, r0, r1
- ldrh r0, [r3, 0xA]
- lsls r4, r0, 16
- adds r6, r1, 0
- cmp r4, 0
- beq _08148F7C
- movs r1, 0xC
- ldrsh r0, [r3, r1]
- lsls r0, 16
- ldrh r1, [r3, 0xE]
- adds r2, r0, r1
- lsrs r0, r4, 12
- subs r2, r0
- asrs r1, r2, 16
- strh r1, [r3, 0xC]
- strh r2, [r3, 0xE]
- ldr r0, _08148FB8 @ =REG_BG1HOFS
- strh r1, [r0]
- ldr r2, _08148FBC @ =REG_BG1VOFS
- ldr r1, _08148FC0 @ =gUnknown_02039358
- ldr r0, _08148FC4 @ =gUnknown_0203935A
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- strh r0, [r2]
-_08148F7C:
- ldrh r0, [r3, 0x10]
- lsls r4, r0, 16
- cmp r4, 0
- beq _08148FD8
- movs r1, 0x12
- ldrsh r0, [r3, r1]
- lsls r0, 16
- ldrh r1, [r3, 0x14]
- adds r2, r0, r1
- lsrs r0, r4, 12
- subs r2, r0
- asrs r1, r2, 16
- strh r1, [r3, 0x12]
- strh r2, [r3, 0x14]
- ldr r0, _08148FC8 @ =REG_BG2HOFS
- strh r1, [r0]
- movs r1, 0x8
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _08148FD0
- ldr r2, _08148FCC @ =REG_BG2VOFS
- ldr r1, _08148FC0 @ =gUnknown_02039358
- ldr r0, _08148FC4 @ =gUnknown_0203935A
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- strh r0, [r2]
- b _08148FD8
- .align 2, 0
-_08148FB4: .4byte gTasks
-_08148FB8: .4byte REG_BG1HOFS
-_08148FBC: .4byte REG_BG1VOFS
-_08148FC0: .4byte gUnknown_02039358
-_08148FC4: .4byte gUnknown_0203935A
-_08148FC8: .4byte REG_BG2HOFS
-_08148FCC: .4byte REG_BG2VOFS
-_08148FD0:
- ldr r0, _08149010 @ =REG_BG2VOFS
- ldr r1, _08149014 @ =gUnknown_02039358
- ldrh r1, [r1]
- strh r1, [r0]
-_08148FD8:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r3, r0, r6
- ldrh r0, [r3, 0x16]
- lsls r4, r0, 16
- cmp r4, 0
- beq _08149008
- movs r1, 0x18
- ldrsh r0, [r3, r1]
- lsls r0, 16
- ldrh r1, [r3, 0x1A]
- adds r2, r0, r1
- lsrs r0, r4, 12
- subs r2, r0
- asrs r1, r2, 16
- strh r1, [r3, 0x18]
- strh r2, [r3, 0x1A]
- ldr r0, _08149018 @ =REG_BG3HOFS
- strh r1, [r0]
- ldr r1, _0814901C @ =REG_BG3VOFS
- ldr r0, _08149014 @ =gUnknown_02039358
- ldrh r0, [r0]
- strh r0, [r1]
-_08149008:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08149010: .4byte REG_BG2VOFS
-_08149014: .4byte gUnknown_02039358
-_08149018: .4byte REG_BG3HOFS
-_0814901C: .4byte REG_BG3VOFS
- thumb_func_end sub_8148F3C
-
- thumb_func_start sub_8149020
-sub_8149020: @ 8149020
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08149100
- cmp r0, 0x1
- ble _08149034
- cmp r0, 0x2
- beq _08149098
-_08149034:
- ldr r0, _08149060 @ =gMain
- ldr r2, [r0, 0x20]
- movs r0, 0x3
- ands r0, r2
- cmp r0, 0
- bne _08149100
- ldr r0, _08149064 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08149100
- movs r0, 0x4
- ands r2, r0
- cmp r2, 0
- beq _0814906C
- ldr r2, _08149068 @ =gPlttBufferUnfaded
- ldrh r1, [r2, 0x12]
- mov r0, sp
- strh r1, [r0]
- ldrh r1, [r2, 0x14]
- b _08149076
- .align 2, 0
-_08149060: .4byte gMain
-_08149064: .4byte gPaletteFade
-_08149068: .4byte gPlttBufferUnfaded
-_0814906C:
- ldr r2, _08149094 @ =gPlttBufferUnfaded
- ldrh r1, [r2, 0x14]
- mov r0, sp
- strh r1, [r0]
- ldrh r1, [r2, 0x12]
-_08149076:
- adds r0, 0x2
- strh r1, [r0]
- adds r4, r0, 0
- mov r0, sp
- movs r1, 0x9
- movs r2, 0x2
- bl LoadPalette
- adds r0, r4, 0
- movs r1, 0xA
- movs r2, 0x2
- bl LoadPalette
- b _08149100
- .align 2, 0
-_08149094: .4byte gPlttBufferUnfaded
-_08149098:
- ldr r0, _081490C8 @ =gMain
- ldr r2, [r0, 0x20]
- movs r0, 0x3
- ands r0, r2
- cmp r0, 0
- bne _08149100
- ldr r0, _081490CC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08149100
- movs r0, 0x4
- ands r2, r0
- cmp r2, 0
- beq _081490D8
- mov r1, sp
- ldr r2, _081490D0 @ =0x00003d27
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r2, _081490D4 @ =0x00000295
- b _081490E6
- .align 2, 0
-_081490C8: .4byte gMain
-_081490CC: .4byte gPaletteFade
-_081490D0: .4byte 0x00003d27
-_081490D4: .4byte 0x00000295
-_081490D8:
- mov r1, sp
- movs r2, 0xC7
- lsls r2, 2
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r2, _08149108 @ =0x00003d27
-_081490E6:
- adds r0, r2, 0
- strh r0, [r1]
- adds r4, r1, 0
- mov r0, sp
- movs r1, 0xC
- movs r2, 0x2
- bl LoadPalette
- adds r0, r4, 0
- movs r1, 0xD
- movs r2, 0x2
- bl LoadPalette
-_08149100:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08149108: .4byte 0x00003d27
- thumb_func_end sub_8149020
-
- thumb_func_start sub_814910C
-sub_814910C: @ 814910C
- push {lr}
- adds r2, r0, 0
- ldr r0, _08149124 @ =gUnknown_0203935C
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _08149128
- adds r0, r2, 0
- bl DestroySprite
- b _0814916C
- .align 2, 0
-_08149124: .4byte gUnknown_0203935C
-_08149128:
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- lsls r0, 16
- ldrh r1, [r2, 0x32]
- orrs r0, r1
- ldrh r1, [r2, 0x30]
- adds r0, r1
- asrs r1, r0, 16
- strh r1, [r2, 0x20]
- strh r0, [r2, 0x32]
- cmp r1, 0xFF
- ble _08149144
- ldr r0, _08149158 @ =0x0000ffe0
- strh r0, [r2, 0x20]
-_08149144:
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _08149164
- ldr r1, _0814915C @ =gUnknown_02039358
- ldr r0, _08149160 @ =gUnknown_0203935A
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- b _08149168
- .align 2, 0
-_08149158: .4byte 0x0000ffe0
-_0814915C: .4byte gUnknown_02039358
-_08149160: .4byte gUnknown_0203935A
-_08149164:
- ldr r0, _08149170 @ =gUnknown_02039358
- ldrh r0, [r0]
-_08149168:
- negs r0, r0
- strh r0, [r2, 0x26]
-_0814916C:
- pop {r0}
- bx r0
- .align 2, 0
-_08149170: .4byte gUnknown_02039358
- thumb_func_end sub_814910C
-
- thumb_func_start sub_8149174
-sub_8149174: @ 8149174
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- str r1, [sp, 0x4]
- str r2, [sp, 0x8]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- movs r7, 0
- cmp r7, r8
- bcs _0814922A
- ldr r0, _0814923C @ =gSprites
- mov r10, r0
- movs r2, 0x3F
- mov r9, r2
-_0814919E:
- lsls r6, r7, 3
- ldr r0, [sp, 0x4]
- adds r6, r0
- ldrb r1, [r6, 0x1]
- ldrb r2, [r6, 0x2]
- ldrb r3, [r6, 0x3]
- ldr r0, _08149240 @ =gSpriteTemplate_8416B3C
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- mov r2, r10
- adds r4, r5, r2
- ldrb r2, [r6]
- lsls r1, r2, 26
- lsrs r1, 30
- lsrs r2, 6
- adds r0, r4, 0
- movs r3, 0
- bl CalcCenterToCornerVec
- ldrb r3, [r4, 0x5]
- movs r0, 0xC
- orrs r3, r0
- strb r3, [r4, 0x5]
- ldrb r1, [r6]
- lsls r1, 26
- lsrs r1, 30
- lsls r1, 6
- ldrb r2, [r4, 0x1]
- mov r0, r9
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r1, [r6]
- lsrs r1, 6
- lsls r1, 6
- ldrb r2, [r4, 0x3]
- mov r0, r9
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x3]
- movs r0, 0xF
- ands r3, r0
- strb r3, [r4, 0x5]
- ldr r0, _08149244 @ =gSprites + 0x8
- adds r5, r0
- ldr r2, [sp, 0x8]
- str r2, [r5]
- ldrb r1, [r6]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl StartSpriteAnim
- movs r1, 0
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x2E]
- ldrh r0, [r6, 0x4]
- strh r0, [r4, 0x30]
- strh r1, [r4, 0x32]
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, r8
- bcc _0814919E
-_0814922A:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0814923C: .4byte gSprites
-_08149240: .4byte gSpriteTemplate_8416B3C
-_08149244: .4byte gSprites + 0x8
- thumb_func_end sub_8149174
-
- thumb_func_start sub_8149248
-sub_8149248: @ 8149248
- push {lr}
- ldr r1, _0814925C @ =gUnknown_08416B94
- ldr r2, _08149260 @ =gSpriteAnimTable_8416B84
- movs r0, 0
- movs r3, 0x9
- bl sub_8149174
- pop {r0}
- bx r0
- .align 2, 0
-_0814925C: .4byte gUnknown_08416B94
-_08149260: .4byte gSpriteAnimTable_8416B84
- thumb_func_end sub_8149248
-
- thumb_func_start sub_8149264
-sub_8149264: @ 8149264
- push {lr}
- ldr r1, _08149278 @ =gUnknown_08416C10
- ldr r2, _0814927C @ =gSpriteAnimTable_8416C04
- movs r0, 0x1
- movs r3, 0xC
- bl sub_8149174
- pop {r0}
- bx r0
- .align 2, 0
-_08149278: .4byte gUnknown_08416C10
-_0814927C: .4byte gSpriteAnimTable_8416C04
- thumb_func_end sub_8149264
-
- thumb_func_start sub_8149280
-sub_8149280: @ 8149280
- push {lr}
- ldr r1, _08149294 @ =gUnknown_08416C8C
- ldr r2, _08149298 @ =gSpriteAnimTable_8416C88
- movs r0, 0x1
- movs r3, 0x6
- bl sub_8149174
- pop {r0}
- bx r0
- .align 2, 0
-_08149294: .4byte gUnknown_08416C8C
-_08149298: .4byte gSpriteAnimTable_8416C88
- thumb_func_end sub_8149280
-
- thumb_func_start nullsub_82
-nullsub_82: @ 814929C
- bx lr
- thumb_func_end nullsub_82
-
- thumb_func_start sub_81492A0
-sub_81492A0: @ 81492A0
- push {r4,lr}
- ldr r4, _0814930C @ =gSprites
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- adds r1, 0x3E
- ldrb r1, [r1]
- movs r2, 0x3E
- adds r2, r0
- mov r12, r2
- movs r2, 0x4
- ands r2, r1
- 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, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x20]
- strh r1, [r0, 0x20]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x22]
- adds r1, 0x8
- strh r1, [r0, 0x22]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x24]
- strh r1, [r0, 0x24]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x26]
- strh r1, [r0, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0814930C: .4byte gSprites
- thumb_func_end sub_81492A0
-
- thumb_func_start intro_create_brendan_sprite
-intro_create_brendan_sprite: @ 8149310
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r0, _0814935C @ =gSpriteTemplate_8416CDC
- lsls r5, 16
- asrs r5, 16
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _08149360 @ =gSpriteTemplate_8416D2C
- adds r4, 0x8
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08149364 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- strh r6, [r1, 0x2E]
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0814935C: .4byte gSpriteTemplate_8416CDC
-_08149360: .4byte gSpriteTemplate_8416D2C
-_08149364: .4byte gSprites
- thumb_func_end intro_create_brendan_sprite
-
- thumb_func_start intro_create_may_sprite
-intro_create_may_sprite: @ 8149368
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r0, _081493B4 @ =gSpriteTemplate_8416CF4
- lsls r5, 16
- asrs r5, 16
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _081493B8 @ =gSpriteTemplate_8416D44
- adds r4, 0x8
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _081493BC @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- strh r6, [r1, 0x2E]
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_081493B4: .4byte gSpriteTemplate_8416CF4
-_081493B8: .4byte gSpriteTemplate_8416D44
-_081493BC: .4byte gSprites
- thumb_func_end intro_create_may_sprite
-
- thumb_func_start nullsub_83
-nullsub_83: @ 81493C0
- bx lr
- thumb_func_end nullsub_83
-
- thumb_func_start sub_81493C4
-sub_81493C4: @ 81493C4
- push {r4,lr}
- ldr r4, _08149420 @ =gSprites
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- adds r1, 0x3E
- ldrb r1, [r1]
- movs r2, 0x3E
- adds r2, r0
- mov r12, r2
- movs r2, 0x4
- ands r2, r1
- 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, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x22]
- strh r1, [r0, 0x22]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x24]
- strh r1, [r0, 0x24]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x26]
- strh r1, [r0, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08149420: .4byte gSprites
- thumb_func_end sub_81493C4
-
- thumb_func_start intro_create_latios_sprite
-intro_create_latios_sprite: @ 8149424
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r2, r0, 0
- adds r5, r1, 0
- ldr r0, _08149490 @ =gSpriteTemplate_8416D7C
- mov r8, r0
- lsls r2, 16
- asrs r4, r2, 16
- ldr r0, _08149494 @ =0xffe00000
- adds r2, r0
- asrs r2, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, r8
- adds r1, r2, 0
- adds r2, r5, 0
- movs r3, 0x2
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- adds r4, 0x20
- lsls r4, 16
- asrs r4, 16
- mov r0, r8
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08149498 @ =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r0, r4, r5
- strh r6, [r0, 0x2E]
- movs r1, 0x1
- bl StartSpriteAnim
- adds r5, 0x1C
- adds r4, r5
- ldr r0, _0814949C @ =sub_81493C4
- str r0, [r4]
- adds r0, r6, 0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08149490: .4byte gSpriteTemplate_8416D7C
-_08149494: .4byte 0xffe00000
-_08149498: .4byte gSprites
-_0814949C: .4byte sub_81493C4
- thumb_func_end intro_create_latios_sprite
-
- thumb_func_start intro_create_latias_sprite
-intro_create_latias_sprite: @ 81494A0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r2, r0, 0
- adds r5, r1, 0
- ldr r0, _0814950C @ =gSpriteTemplate_8416D94
- mov r8, r0
- lsls r2, 16
- asrs r4, r2, 16
- ldr r0, _08149510 @ =0xffe00000
- adds r2, r0
- asrs r2, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, r8
- adds r1, r2, 0
- adds r2, r5, 0
- movs r3, 0x2
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- adds r4, 0x20
- lsls r4, 16
- asrs r4, 16
- mov r0, r8
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08149514 @ =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r0, r4, r5
- strh r6, [r0, 0x2E]
- movs r1, 0x1
- bl StartSpriteAnim
- adds r5, 0x1C
- adds r4, r5
- ldr r0, _08149518 @ =sub_81493C4
- str r0, [r4]
- adds r0, r6, 0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0814950C: .4byte gSpriteTemplate_8416D94
-_08149510: .4byte 0xffe00000
-_08149514: .4byte gSprites
-_08149518: .4byte sub_81493C4
- thumb_func_end intro_create_latias_sprite
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/common_syms/egg_hatch.txt b/common_syms/egg_hatch.txt
new file mode 100644
index 000000000..f49202045
--- /dev/null
+++ b/common_syms/egg_hatch.txt
@@ -0,0 +1 @@
+gEggHatchData \ No newline at end of file
diff --git a/data/battle_anim_807B69C.s b/data/battle_anim_807B69C.s
deleted file mode 100644
index 0ed7d7cf0..000000000
--- a/data/battle_anim_807B69C.s
+++ /dev/null
@@ -1,23 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSubspriteTable_83931B8:: @ 83931B8
- subsprite -16, -16, 2, 0, 64x64
- subsprite -16, 48, 2, 64, 64x32
- subsprite 48, -16, 2, 96, 32x64
- subsprite 48, 48, 2, 128, 32x32
-
- .align 2
-gSubspriteTables_83931D8:: @ 83931D8
- .4byte 4, gSubspriteTable_83931B8
-
- .align 2
-gSpriteTemplate_83931E0:: @ 83931E0
- spr_template 10010, 10010, gOamData_837E05C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gSpriteTemplate_83931F8:: @ 83931F8
- spr_template 10136, 10136, gOamData_837DF24, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_807B870
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index 853760b4a..0945d75c8 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -1168,7 +1168,7 @@ MoveEffect_Recharge: @ 81D7943
setbyte 0x2024d21, 221
jump BattleScript_1D6F42
-gUnknown_081D7956:: @ 81D7956
+BattleScript_MoveUsedMustRecharge:: @ 81D7956
printstring BATTLE_TEXT_MustRecharge
waitmessage 64
jump BattleScript_EndTurn
@@ -3311,7 +3311,7 @@ gUnknown_081D9041:: @ 81D9041
waitmessage 64
end2
-gUnknown_081D904B:: @ 81D904B
+BattleScript_LeechSeedTurnDrain:: @ 81D904B
playanimation USER, 14, 0x20160a4
orword 0x2024c6c, 0x100100
graphicalhpupdate USER
@@ -3335,12 +3335,12 @@ BattleScript_1D9083: @ 81D9083
faintpokemon TARGET, 0, 0x0
end2
-gUnknown_081D90A7:: @ 81D90A7
+BattleScript_BideStoringEnergy:: @ 81D90A7
printstring BATTLE_TEXT_StoringEnergy
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D90B2:: @ 81D90B2
+BattleScript_BideAttack:: @ 81D90B2
printstring BATTLE_TEXT_UnleashedEnergy
waitmessage 64
accuracycheck BattleScript_1D6F77, 0
@@ -3361,7 +3361,7 @@ gUnknown_081D90B2:: @ 81D90B2
faintpokemon TARGET, 0, 0x0
jump BattleScript_EndTurn
-gUnknown_081D90F1:: @ 81D90F1
+BattleScript_BideNoEnergyToAttack:: @ 81D90F1
printstring BATTLE_TEXT_UnleashedEnergy
waitmessage 64
jump BattleScript_ButItFailed
@@ -3396,21 +3396,21 @@ gUnknown_081D9132:: @ 81D9132
waitmessage 64
return
-gUnknown_081D9139:: @ 81D9139
+BattleScript_MoveUsedIsDisabled:: @ 81D9139
printstring BATTLE_TEXT_MoveIsDisabled
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D9144:: @ 81D9144
+BattleScript_MoveSelectionDisabledMove:: @ 81D9144
printstring2 BATTLE_TEXT_MoveIsDisabled
atk44
-gUnknown_081D9148:: @ 81D9148
+BattleScript_DisabledNoMore:: @ 81D9148
printstring BATTLE_TEXT_DisabledNoMore
waitmessage 64
end2
-gUnknown_081D914F:: @ 81D914F
+BattleScript_EncoredNoMore:: @ 81D914F
printstring BATTLE_TEXT_EncoreEnded
waitmessage 64
end2
@@ -3471,7 +3471,7 @@ BattleScript_1D91FB: @ 81D91FB
waitmessage 64
return
-gUnknown_081D9202:: @ 81D9202
+BattleScript_PerishSongHits:: @ 81D9202
printstring BATTLE_TEXT_PerishSongFell
waitmessage 64
orword 0x2024c6c, 0x100100
@@ -3480,7 +3480,7 @@ gUnknown_081D9202:: @ 81D9202
faintpokemon USER, 0, 0x0
end2
-gUnknown_081D921D:: @ 81D921D
+BattleScript_PerishSongTimerGoesDown:: @ 81D921D
printstring BATTLE_TEXT_PerishSongFell
waitmessage 64
end2
@@ -3546,7 +3546,7 @@ BattleScript_SpikesFree:: @ 81D92D0
waitmessage 64
return
-gUnknown_081D92D7:: @ 81D92D7
+BattleScript_FutureSightHits:: @ 81D92D7
printstring BATTLE_TEXT_TookAttack
waitmessage 64
jumpifbyte 1, 0x2024d23, 0, BattleScript_1D92F4
@@ -3593,11 +3593,11 @@ BattleScript_1D934B: @ 81D934B
setbyte 0x2024c68, 0
end2
-gUnknown_081D9365:: @ 81D9365
+BattleScript_NoMovesLeft:: @ 81D9365
printstring2 BATTLE_TEXT_NoMovesLeft
atk44
-gUnknown_081D9369:: @ 81D9369
+BattleScript_MoveSelectionNoPP:: @ 81D9369
printstring2 BATTLE_TEXT_NoPP1
atk44
@@ -3608,23 +3608,23 @@ BattleScript_NoPPForMove:: @ 81D936D
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D937C:: @ 81D937C
+BattleScript_MoveSelectionTormented:: @ 81D937C
printstring2 BATTLE_TEXT_TormentNoUse
atk44
printstring BATTLE_TEXT_TormentNoUse
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D938B:: @ 81D938B
+BattleScript_MoveSelectionTaunted:: @ 81D938B
printstring2 BATTLE_TEXT_TauntNoUse
atk44
-gUnknown_081D938F:: @ 81D938F
+BattleScript_MoveUsedIsTaunted:: @ 81D938F
printstring BATTLE_TEXT_TauntNoUse
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D939A:: @ 81D939A
+BattleScript_WishComesTrue:: @ 81D939A
atkd4 1, BattleScript_1D93C1
playanimation TARGET, 22, 0x0
printstring BATTLE_TEXT_WishTrue
@@ -3644,7 +3644,7 @@ BattleScript_1D93C1: @ 81D93C1
waitmessage 64
end2
-gUnknown_081D93D1:: @ 81D93D1
+BattleScript_IngrainTurnHeal:: @ 81D93D1
playanimation USER, 21, 0x0
printstring BATTLE_TEXT_AbsorbNutrients
waitmessage 64
@@ -3686,12 +3686,12 @@ BattleScript_KnockedOff:: @ 81D944B
waitmessage 64
return
-gUnknown_081D9459:: @ 81D9459
+BattleScript_MoveUsedIsImprisoned:: @ 81D9459
printstring BATTLE_TEXT_SealedNoUse
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D9464:: @ 81D9464
+BattleScript_MoveSelectionImprisoned:: @ 81D9464
printstring2 BATTLE_TEXT_SealedNoUse
atk44
@@ -3751,13 +3751,13 @@ gUnknown_081D94DA:: @ 81D94DA
waitmessage 64
end2
-gUnknown_081D94EE:: @ 81D94EE
+BattleScript_MoveUsedIsAsleep:: @ 81D94EE
printstring BATTLE_TEXT_FastAsleep
waitmessage 64
statusanimation USER
jump BattleScript_EndTurn
-gUnknown_081D94FB:: @ 81D94FB
+BattleScript_MoveUsedWokeUp:: @ 81D94FB
bicword 0x2024c6c, 0x10
printfromtable BattleTextList_401562
waitmessage 64
@@ -3770,7 +3770,7 @@ gUnknown_081D950F:: @ 81D950F
atk98 1
end2
-gUnknown_081D9518:: @ 81D9518
+BattleScript_PoisonTurnDmg:: @ 81D9518
printstring BATTLE_TEXT_PoisonHurt
waitmessage 64
@@ -3787,18 +3787,18 @@ BattleScript_1D9520: @ 81D9520
BattleScript_1D9539: @ 81D9539
end2
-gUnknown_081D953A:: @ 81D953A
+BattleScript_BurnTurnDmg:: @ 81D953A
printstring BATTLE_TEXT_BurnHurt
waitmessage 64
jump BattleScript_1D951E
-gUnknown_081D9545:: @ 81D9545
+BattleScript_MoveUsedIsFrozen:: @ 81D9545
printstring BATTLE_TEXT_FrozenSolid
waitmessage 64
statusanimation USER
jump BattleScript_EndTurn
-gUnknown_081D9552:: @ 81D9552
+BattleScript_MoveUsedUnfroze:: @ 81D9552
printfromtable BattleTextList_4015C4
waitmessage 64
atk98 1
@@ -3810,13 +3810,13 @@ gUnknown_081D955D:: @ 81D955D
atk98 0
return
-gUnknown_081D9566:: @ 81D9566
+BattleScript_MoveUsedIsParalyzed:: @ 81D9566
printstring BATTLE_TEXT_Paralyzed3
waitmessage 64
statusanimation USER
jump BattleScript_EndTurn
-gUnknown_081D9573:: @ 81D9573
+BattleScript_MoveUsedFlinched:: @ 81D9573
printstring BATTLE_TEXT_Flinched
waitmessage 64
jump BattleScript_EndTurn
@@ -3826,13 +3826,13 @@ gUnknown_081D957E:: @ 81D957E
waitmessage 64
end2
-gUnknown_081D9587:: @ 81D9587
+BattleScript_ThrashConfuses:: @ 81D9587
atk66 1, 1, S_CONFUSED
printstring BATTLE_TEXT_FatigueConfuse
waitmessage 64
end2
-gUnknown_081D9595:: @ 81D9595
+BattleScript_MoveUsedIsConfused:: @ 81D9595
printstring BATTLE_TEXT_Confused
waitmessage 64
atk65 1, 0x7
@@ -3855,7 +3855,7 @@ BattleScript_1D95AC: @ 81D95AC
BattleScript_1D95D3: @ 81D95D3
return
-gUnknown_081D95D4:: @ 81D95D4
+BattleScript_MoveUsedIsConfusedNoMore:: @ 81D95D4
printstring BATTLE_TEXT_ConfusionSnapOut
waitmessage 64
return
@@ -3865,35 +3865,35 @@ gUnknown_081D95DB:: @ 81D95DB
waitmessage 64
return
-gUnknown_081D95E2:: @ 81D95E2
+BattleScript_WrapTurnDmg:: @ 81D95E2
playanimation USER, 6, 0x20160a4
printstring BATTLE_TEXT_HurtBy
waitmessage 64
jump BattleScript_1D9520
-gUnknown_081D95F4:: @ 81D95F4
+BattleScript_WrapEnds:: @ 81D95F4
printstring BATTLE_TEXT_FreedFrom
waitmessage 64
end2
-gUnknown_081D95FB:: @ 81D95FB
+BattleScript_MoveUsedIsInLove:: @ 81D95FB
printstring BATTLE_TEXT_InLoveWith
waitmessage 64
atk65 1, 0xf0000
return
-gUnknown_081D9608:: @ 81D9608
+BattleScript_MoveUsedIsParalyzedCantAttack:: @ 81D9608
printstring BATTLE_TEXT_ImmobilizedBy
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D9613:: @ 81D9613
+BattleScript_NightmareTurnDmg:: @ 81D9613
printstring BATTLE_TEXT_NightmareLock
waitmessage 64
atk65 1, Start
jump BattleScript_1D9520
-gUnknown_081D9624:: @ 81D9624
+BattleScript_CurseTurnDmg:: @ 81D9624
printstring BATTLE_TEXT_CurseAfflict
waitmessage 64
atk65 1, 0x10000000
@@ -3915,7 +3915,7 @@ BattleScript_1D9648: @ 81D9648
waitstateatk
return
-gUnknown_081D964C:: @ 81D964C
+BattleScript_YawnMakesAsleep:: @ 81D964C
statusanimation 2
printstring BATTLE_TEXT_FellAsleep
waitmessage 64
@@ -3996,7 +3996,7 @@ BattleScript_ItemSteal:: @ 81D96F6
waitmessage 64
return
-gUnknown_081D9704:: @ 81D9704
+BattleScript_DrizzleActivates:: @ 81D9704
pause 32
printstring BATTLE_TEXT_RainMade
waitstateatk
@@ -4004,19 +4004,19 @@ gUnknown_081D9704:: @ 81D9704
callatk BattleScript_1D9761
end3
-gUnknown_081D9718:: @ 81D9718
+BattleScript_SpeedBoostActivates:: @ 81D9718
playanimation USER, 1, 0x20160a4
printstring BATTLE_TEXT_SpeedRisen
waitmessage 64
end3
-gUnknown_081D9726:: @ 81D9726
+BattleScript_TraceActivates:: @ 81D9726
pause 32
printstring BATTLE_TEXT_Traced
waitmessage 64
end3
-gUnknown_081D9730:: @ 81D9730
+BattleScript_RainDishActivates:: @ 81D9730
printstring BATTLE_TEXT_RestoredHPByItem
waitmessage 64
orword 0x2024c6c, 0x100
@@ -4024,7 +4024,7 @@ gUnknown_081D9730:: @ 81D9730
datahpupdate USER
end3
-gUnknown_081D9744:: @ 81D9744
+BattleScript_SandstreamActivates:: @ 81D9744
pause 32
printstring BATTLE_TEXT_WhipSandstorm
waitstateatk
@@ -4032,7 +4032,7 @@ gUnknown_081D9744:: @ 81D9744
callatk BattleScript_1D9761
end3
-gUnknown_081D9758:: @ 81D9758
+BattleScript_ShedSkinActivates:: @ 81D9758
printstring BATTLE_TEXT_CuredProblem
waitmessage 64
atk98 1
@@ -4047,7 +4047,7 @@ BattleScript_1D9767: @ 81D9767
jumpifarraynotequal 0x2016003, 0x2024a68, 1, BattleScript_1D9767
return
-gUnknown_081D977D:: @ 81D977D
+BattleScript_CastformChange:: @ 81D977D
callatk BattleScript_1D9783
end3
@@ -4095,7 +4095,7 @@ BattleScript_1D97F0: @ 81D97F0
waitmessage 64
jump BattleScript_1D97E4
-gUnknown_081D97FE:: @ 81D97FE
+BattleScript_DroughtActivates:: @ 81D97FE
pause 32
printstring BATTLE_TEXT_SunIntensified
waitstateatk
@@ -4123,10 +4123,10 @@ gUnknown_081D9834:: @ 81D9834
pause 64
jump BattleScript_EndTurn
-gUnknown_081D9842:: @ 81D9842
+BattleScript_MoveHPDrain_PPLoss:: @ 81D9842
ppreduce
-gUnknown_081D9843:: @ 81D9843
+BattleScript_MoveHPDrain:: @ 81D9843
attackstring
pause 32
orword 0x2024c6c, 0x100
@@ -4137,10 +4137,10 @@ gUnknown_081D9843:: @ 81D9843
orbyte 0x2024c68, 8
jump BattleScript_EndTurn
-gUnknown_081D9865:: @ 81D9865
+BattleScript_MoveHPDrain_FullHP_PPLoss:: @ 81D9865
ppreduce
-gUnknown_081D9866:: @ 81D9866
+BattleScript_MoveHPDrain_FullHP:: @ 81D9866
attackstring
pause 32
printstring BATTLE_TEXT_MadeUseless
@@ -4148,10 +4148,10 @@ gUnknown_081D9866:: @ 81D9866
orbyte 0x2024c68, 8
jump BattleScript_EndTurn
-gUnknown_081D987B:: @ 81D987B
+BattleScript_FlashFireBoost_PPLoss:: @ 81D987B
ppreduce
-gUnknown_081D987C:: @ 81D987C
+BattleScript_FlashFireBoost:: @ 81D987C
attackstring
pause 32
printfromtable BattleTextList_401648
@@ -4206,7 +4206,7 @@ BattleScript_1D98E5: @ 81D98E5
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D98F3:: @ 81D98F3
+BattleScript_SoundproofProtected:: @ 81D98F3
attackstring
ppreduce
pause 32
@@ -4227,12 +4227,12 @@ BattleScript_NoItemSteal:: @ 81D9913
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D9921:: @ 81D9921
+BattleScript_ColorChangeActivates:: @ 81D9921
printstring BATTLE_TEXT_MadeType
waitmessage 64
return
-gUnknown_081D9928:: @ 81D9928
+BattleScript_RoughSkinActivates:: @ 81D9928
orword 0x2024c6c, 0x100100
graphicalhpupdate USER
datahpupdate USER
@@ -4241,18 +4241,18 @@ gUnknown_081D9928:: @ 81D9928
faintpokemon USER, 0, 0x0
return
-gUnknown_081D9943:: @ 81D9943
+BattleScript_CuteCharmActivates:: @ 81D9943
atk65 1, 0xf0000
printstring BATTLE_TEXT_InfatuatedPoke
waitmessage 64
return
-gUnknown_081D9950:: @ 81D9950
+BattleScript_ApplySecondaryEffect:: @ 81D9950
waitstateatk
seteffectuser
return
-gUnknown_081D9953:: @ 81D9953
+BattleScript_SynchronizeActivates:: @ 81D9953
waitstateatk
seteffecttarget
return
@@ -4275,7 +4275,7 @@ gUnknown_081D996F:: @ 81D996F
waitmessage 64
jumptoattack TARGET
-gUnknown_081D9977:: @ 81D9977
+BattleScript_MoveUsedLoafingAround:: @ 81D9977
printfromtable BattleTextList_40160E
waitmessage 64
setbyte 0x201600c, 0
@@ -4301,11 +4301,11 @@ BattleScript_SubstituteFade:: @ 81D99AB
printstring BATTLE_TEXT_SubFaded
return
-gUnknown_081D99B6:: @ 81D99B6
- callatk gUnknown_081D99BC
+BattleScript_BerryCurePrlzEnd2:: @ 81D99B6
+ callatk BattleScript_BerryCureParRet
end2
-gUnknown_081D99BC:: @ 81D99BC
+BattleScript_BerryCureParRet:: @ 81D99BC
playanimation 10, 7, 0x0
printstring BATTLE_TEXT_CuredParalysis
waitmessage 64
@@ -4313,11 +4313,11 @@ gUnknown_081D99BC:: @ 81D99BC
removeitem 10
return
-gUnknown_081D99CE:: @ 81D99CE
- callatk gUnknown_081D99D4
+BattleScript_BerryCurePsnEnd2:: @ 81D99CE
+ callatk BattleScript_BerryCurePsnRet
end2
-gUnknown_081D99D4:: @ 81D99D4
+BattleScript_BerryCurePsnRet:: @ 81D99D4
playanimation 10, 7, 0x0
printstring BATTLE_TEXT_CuredPoison
waitmessage 64
@@ -4325,11 +4325,11 @@ gUnknown_081D99D4:: @ 81D99D4
removeitem 10
return
-gUnknown_081D99E6:: @ 81D99E6
- callatk gUnknown_081D99EC
+BattleScript_BerryCureBrnEnd2:: @ 81D99E6
+ callatk BattleScript_BerryCureBrnRet
end2
-gUnknown_081D99EC:: @ 81D99EC
+BattleScript_BerryCureBrnRet:: @ 81D99EC
playanimation 10, 7, 0x0
printstring BATTLE_TEXT_CuredBurn
waitmessage 64
@@ -4337,11 +4337,11 @@ gUnknown_081D99EC:: @ 81D99EC
removeitem 10
return
-gUnknown_081D99FE:: @ 81D99FE
- callatk gUnknown_081D9A04
+BattleScript_BerryCureFrzEnd2:: @ 81D99FE
+ callatk BattleScript_BerryCureFrzRet
end2
-gUnknown_081D9A04:: @ 81D9A04
+BattleScript_BerryCureFrzRet:: @ 81D9A04
playanimation 10, 7, 0x0
printstring BATTLE_TEXT_CuredFreeze
waitmessage 64
@@ -4349,11 +4349,11 @@ gUnknown_081D9A04:: @ 81D9A04
removeitem 10
return
-gUnknown_081D9A16:: @ 81D9A16
- callatk gUnknown_081D9A1C
+BattleScript_BerryCureSlpEnd2:: @ 81D9A16
+ callatk BattleScript_BerryCureSlpRet
end2
-gUnknown_081D9A1C:: @ 81D9A1C
+BattleScript_BerryCureSlpRet:: @ 81D9A1C
playanimation 10, 7, 0x0
printstring BATTLE_TEXT_CuredSleep
waitmessage 64
@@ -4361,11 +4361,11 @@ gUnknown_081D9A1C:: @ 81D9A1C
removeitem 10
return
-gUnknown_081D9A2E:: @ 81D9A2E
- callatk gUnknown_081D9A34
+BattleScript_BerryCureConfusionEnd2:: @ 81D9A2E
+ callatk BattleScript_BerryCureConfusionRet
end2
-gUnknown_081D9A34:: @ 81D9A34
+BattleScript_BerryCureConfusionRet:: @ 81D9A34
playanimation 10, 7, 0x0
printstring BATTLE_TEXT_CuredConfusion
waitmessage 64
@@ -4384,18 +4384,18 @@ gUnknown_081D9A4A:: @ 81D9A4A
removeitem 10
return
-gUnknown_081D9A5E:: @ 81D9A5E
- callatk gUnknown_081D9A64
+BattleScript_WhiteHerbEnd2:: @ 81D9A5E
+ callatk BattleScript_WhiteHerbRet
end2
-gUnknown_081D9A64:: @ 81D9A64
+BattleScript_WhiteHerbRet:: @ 81D9A64
playanimation 10, 7, 0x0
printstring BATTLE_TEXT_RestoredStatus
waitmessage 64
removeitem 10
return
-gUnknown_081D9A74:: @ 81D9A74
+BattleScript_ItemHealHP_RemoveItem:: @ 81D9A74
playanimation USER, 7, 0x0
printstring BATTLE_TEXT_RestoredHealth
waitmessage 64
@@ -4405,18 +4405,18 @@ gUnknown_081D9A74:: @ 81D9A74
removeitem USER
end2
-gUnknown_081D9A91:: @ 81D9A91
+BattleScript_BerryPPHealEnd2:: @ 81D9A91
playanimation USER, 7, 0x0
printstring BATTLE_TEXT_RestoredPP
waitmessage 64
removeitem USER
end2
-gUnknown_081D9AA1:: @ 81D9AA1
- callatk gUnknown_081D9AA7
+BattleScript_ItemHealHP_End2:: @ 81D9AA1
+ callatk BattleScript_ItemHealHP_Ret
end2
-gUnknown_081D9AA7:: @ 81D9AA7
+BattleScript_ItemHealHP_Ret:: @ 81D9AA7
playanimation USER, 7, 0x0
printstring BATTLE_TEXT_RestoredHPLittle
waitmessage 64
@@ -4425,7 +4425,7 @@ gUnknown_081D9AA7:: @ 81D9AA7
datahpupdate USER
return
-gUnknown_081D9AC2:: @ 81D9AC2
+BattleScript_MoveSelectionChoiceBanded:: @ 81D9AC2
printstring2 BATTLE_TEXT_ChoiceBand
atk44
@@ -4435,7 +4435,7 @@ BattleScript_HangedOnMsg:: @ 81D9AC6
waitmessage 64
return
-gUnknown_081D9AD4:: @ 81D9AD4
+BattleScript_BerryConfuseHealEnd2:: @ 81D9AD4
playanimation USER, 7, 0x0
printstring BATTLE_TEXT_RestoredHealth
waitmessage 64
@@ -4449,7 +4449,7 @@ gUnknown_081D9AD4:: @ 81D9AD4
removeitem USER
end2
-gUnknown_081D9AFE:: @ 81D9AFE
+BattleScript_BerryStatRaiseEnd2:: @ 81D9AFE
playanimation USER, 7, 0x0
statbuffchange 65, BattleScript_1D9B0B
@@ -4459,7 +4459,7 @@ BattleScript_1D9B0B: @ 81D9B0B
removeitem USER
end2
-gUnknown_081D9B19:: @ 81D9B19
+BattleScript_BerryFocusEnergyEnd2:: @ 81D9B19
playanimation USER, 7, 0x0
printstring BATTLE_TEXT_HustleUse
waitmessage 64
diff --git a/data/data2a.s b/data/data2a.s
index db2158fc7..657fc6908 100644
--- a/data/data2a.s
+++ b/data/data2a.s
@@ -1015,7 +1015,7 @@ gUnknown_081FA71F:: @ 81FA71F
.byte 4, 4, 4, 4
.align 1
-gUnknown_081FA724:: @ 81FA724
+gSoundMovesTable:: @ 81FA724
.2byte 0x2D
.2byte 0x2E
.2byte 0x2F
diff --git a/data/data2b.s b/data/data2b.s
index ef16eaa25..5fb3fa982 100644
--- a/data/data2b.s
+++ b/data/data2b.s
@@ -286,11 +286,3 @@ gLinkOpponentBufferCommands:: @ 81FB048
@ 81FB12C
.include "data/battle_moves.inc"
-
- .align 2
-gUnknown_081FC1D0:: @ 81FC1D0
- .2byte 0x34, 0x10, 0x101
- .space 2
-
- .2byte -1, -1, -1
- .space 2
diff --git a/data/egg_hatch.s b/data/egg_hatch.s
deleted file mode 100644
index 1823409dd..000000000
--- a/data/egg_hatch.s
+++ /dev/null
@@ -1,122 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-EggPalette:: @ 8209AD8
- .incbin "graphics/pokemon/egg/palette.gbapal"
-
-EggHatchTiles:: @ 8209AF8
- .incbin "graphics/misc/egg_hatch.4bpp"
-
-EggShardTiles:: @ 820A2F8
- .incbin "graphics/misc/egg_shard.4bpp"
-
- .align 2
-gOamData_820A378:: @ 820A378
- .2byte 0x0000
- .2byte 0x8000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_820A380:: @ 820A380
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820A388:: @ 820A388
- obj_image_anim_frame 16, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820A390:: @ 820A390
- obj_image_anim_frame 32, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820A398:: @ 820A398
- obj_image_anim_frame 48, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_820A3A0:: @ 820A3A0
- .4byte gSpriteAnim_820A380
- .4byte gSpriteAnim_820A388
- .4byte gSpriteAnim_820A390
- .4byte gSpriteAnim_820A398
-
- .align 2
-gUnknown_0820A3B0:: @ 820A3B0
- obj_tiles EggHatchTiles, 2048, 12345
-
- .align 2
-gUnknown_0820A3B8:: @ 820A3B8
- obj_tiles EggShardTiles, 128, 23456
-
- .align 2
-gUnknown_0820A3C0:: @ 820A3C0
- obj_pal EggPalette, 54321
-
- .align 2
-gSpriteTemplate_820A3C8:: @ 820A3C8
- spr_template 12345, 54321, gOamData_820A378, gSpriteAnimTable_820A3A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gOamData_820A3E0:: @ 820A3E0
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0800
-
- .align 2
-gSpriteAnim_820A3E8:: @ 820A3E8
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820A3F0:: @ 820A3F0
- obj_image_anim_frame 1, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820A3F8:: @ 820A3F8
- obj_image_anim_frame 2, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_820A400:: @ 820A400
- obj_image_anim_frame 3, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_820A408:: @ 820A408
- .4byte gSpriteAnim_820A3E8
- .4byte gSpriteAnim_820A3F0
- .4byte gSpriteAnim_820A3F8
- .4byte gSpriteAnim_820A400
-
- .align 2
-gSpriteTemplate_820A418:: @ 820A418
- spr_template 23456, 54321, gOamData_820A3E0, gSpriteAnimTable_820A408, NULL, gDummySpriteAffineAnimTable, SpriteCB_EggShard
-
-@ The values are Q8.8 fixed-point numbers.
- .align 1
-gEggShardVelocities:: @ 820A430
- .2byte 0xFE80, 0xFC40 @ (-1.5, -3.75)
- .2byte 0xFB00, 0xFD00 @ (-5, -3)
- .2byte 0x0380, 0xFD00 @ (3.5, -3)
- .2byte 0xFC00, 0xFC40 @ (-4, -3.75)
- .2byte 0x0200, 0xFE80 @ (2, -1.5)
- .2byte 0xFF80, 0xF940 @ (-0.5, -6.75)
- .2byte 0x0500, 0xFDC0 @ (5, -2.25)
- .2byte 0xFE80, 0xFC40 @ (-1.5, -3.75)
- .2byte 0x0480, 0xFE80 @ (4.5, -1.5)
- .2byte 0xFF00, 0xF940 @ (-1, -6.75)
- .2byte 0x0400, 0xFDC0 @ (4, -2.25)
- .2byte 0xFC80, 0xFC40 @ (-3.5, -3.75)
- .2byte 0x0100, 0xFE80 @ (1, -1.5)
- .2byte 0xFC7C, 0xF940 @ (-3.515625, -6.75)
- .2byte 0x0480, 0xFDC0 @ (4.5, -2.25)
- .2byte 0xFF80, 0xF880 @ (-0.5, -7.5)
- .2byte 0x0100, 0xFB80 @ (1, -4.5)
- .2byte 0xFD80, 0xFDC0 @ (-2.5, -2.25)
- .2byte 0x0280, 0xF880 @ (2.5, -7.5)
diff --git a/data/hall_of_fame.s b/data/hall_of_fame.s
deleted file mode 100644
index 0795e7389..000000000
--- a/data/hall_of_fame.s
+++ /dev/null
@@ -1,230 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_0840B514:: @ 840B514
- obj_tiles gContestConfetti_Gfx, 0x220, 1001
- .space 8
-
-gUnknown_0840B524:: @ 840B524
- obj_pal gContestConfetti_Pal, 1001
- .space 8
-
- .align 2
-gUnknown_0840B534:: @ 840B534
- .2byte 120,210,120, 40
- .2byte 326,220, 56, 40
- .2byte -86,220,184, 40
- .2byte 120,-62,120, 88
- .2byte -25,-62,200, 88
- .2byte 265,-62, 40, 88
-
- .align 2
-gUnknown_0840B564:: @ 840B564
- .2byte 120,214,120, 64
- .2byte 281,214, 56, 64
- .2byte -41,214,184, 64
-
- .align 2
-gUnknown_0840B57C:: @ 840B57C
- .2byte 1002
- .2byte 1002
- .space 0x10
-
-@ unused data?
- .byte 2, 1, 3, 6, 4, 5
-
- .align 2
-gOamData_840B598:: @ 840B598
- .2byte 0x0000
- .2byte 0xC000
- .2byte 0x0000
-
- .align 2
-gUnknown_0840B5A0:: @ 840B5A0
- .4byte 0x02008000
- .4byte 0x0200A000
- .4byte 0x0200C000
- .4byte 0x0200E000
- .4byte 0x02010000
- .4byte 0x02014000
- .4byte 0x02018000
-
- .align 2
-gSpriteImageTable_840B5BC:: @ 840B5BC
- obj_frame_tiles 0x02008000, 0x800
- obj_frame_tiles 0x02008800, 0x800
- obj_frame_tiles 0x02009000, 0x800
- obj_frame_tiles 0x02009800, 0x800
-
- .align 2
-gSpriteImageTable_840B5DC:: @ 840B5DC
- obj_frame_tiles 0x0200A000, 0x800
- obj_frame_tiles 0x0200A800, 0x800
- obj_frame_tiles 0x0200B000, 0x800
- obj_frame_tiles 0x0200B800, 0x800
-
- .align 2
-gSpriteImageTable_840B5FC:: @ 840B5FC
- obj_frame_tiles 0x0200C000, 0x800
- obj_frame_tiles 0x0200C800, 0x800
- obj_frame_tiles 0x0200D000, 0x800
- obj_frame_tiles 0x0200D800, 0x800
-
- .align 2
-gSpriteImageTable_840B61C:: @ 840B61C
- obj_frame_tiles 0x0200E000, 0x800
- obj_frame_tiles 0x0200E800, 0x800
- obj_frame_tiles 0x0200F000, 0x800
- obj_frame_tiles 0x0200F800, 0x800
-
- .align 2
-gSpriteImageTable_840B63C:: @ 840B63C
- obj_frame_tiles 0x02010000, 0x800
- obj_frame_tiles 0x02010800, 0x800
- obj_frame_tiles 0x02011000, 0x800
- obj_frame_tiles 0x02011800, 0x800
-
- .align 2
-gSpriteImageTable_840B65C:: @ 840B65C
- obj_frame_tiles 0x02014000, 0x800
- obj_frame_tiles 0x02014800, 0x800
- obj_frame_tiles 0x02015000, 0x800
- obj_frame_tiles 0x02015800, 0x800
-
- .align 2
-gSpriteImageTable_840B67C:: @ 840B67C
- obj_frame_tiles 0x02018000, 0x800
- obj_frame_tiles 0x02018800, 0x800
- obj_frame_tiles 0x02019000, 0x800
- obj_frame_tiles 0x02019800, 0x800
-
- .align 2
-gUnknown_0840B69C:: @ 840B69C
- .4byte gSpriteImageTable_840B5BC
- .4byte gSpriteImageTable_840B5DC
- .4byte gSpriteImageTable_840B5FC
- .4byte gSpriteImageTable_840B61C
- .4byte gSpriteImageTable_840B63C
- .4byte gSpriteImageTable_840B65C
- .4byte gSpriteImageTable_840B67C
-
-gUnknown_0840B6B8:: @ 840B6B8
- spr_template -1, -1, gOamData_840B598, NULL, gSpriteImageTable_840B5BC, gDummySpriteAffineAnimTable, nullsub_81
-
- .align 2
-gOamData_840B6D0:: @ 840B6D0
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
-
- .align 2
-gSpriteAnim_840B6D8:: @ 840B6D8
- obj_image_anim_frame 0, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B6E0:: @ 840B6E0
- obj_image_anim_frame 1, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B6E8:: @ 840B6E8
- obj_image_anim_frame 2, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B6F0:: @ 840B6F0
- obj_image_anim_frame 3, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B6F8:: @ 840B6F8
- obj_image_anim_frame 4, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B700:: @ 840B700
- obj_image_anim_frame 5, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B708:: @ 840B708
- obj_image_anim_frame 6, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B710:: @ 840B710
- obj_image_anim_frame 7, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B718:: @ 840B718
- obj_image_anim_frame 8, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B720:: @ 840B720
- obj_image_anim_frame 9, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B728:: @ 840B728
- obj_image_anim_frame 10, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B730:: @ 840B730
- obj_image_anim_frame 11, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B738:: @ 840B738
- obj_image_anim_frame 12, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B740:: @ 840B740
- obj_image_anim_frame 13, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B748:: @ 840B748
- obj_image_anim_frame 14, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B750:: @ 840B750
- obj_image_anim_frame 15, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_840B758:: @ 840B758
- obj_image_anim_frame 16, 30
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_840B760:: @ 840B760
- .4byte gSpriteAnim_840B6D8
- .4byte gSpriteAnim_840B6E0
- .4byte gSpriteAnim_840B6E8
- .4byte gSpriteAnim_840B6F0
- .4byte gSpriteAnim_840B6F8
- .4byte gSpriteAnim_840B700
- .4byte gSpriteAnim_840B708
- .4byte gSpriteAnim_840B710
- .4byte gSpriteAnim_840B718
- .4byte gSpriteAnim_840B720
- .4byte gSpriteAnim_840B728
- .4byte gSpriteAnim_840B730
- .4byte gSpriteAnim_840B738
- .4byte gSpriteAnim_840B740
- .4byte gSpriteAnim_840B748
- .4byte gSpriteAnim_840B750
- .4byte gSpriteAnim_840B758
-
- .align 2
-gSpriteTemplate_840B7A4:: @ 840B7A4
- spr_template 1001, 1001, gOamData_840B6D0, gSpriteAnimTable_840B760, NULL, gDummySpriteAffineAnimTable, sub_814386C
diff --git a/data/intro_credits_graphics.s b/data/intro_credits_graphics.s
index 82931f6ee..8c096e1cd 100644
--- a/data/intro_credits_graphics.s
+++ b/data/intro_credits_graphics.s
@@ -338,11 +338,11 @@ gSpriteAnimTable_8416D28:: @ 8416D28
.4byte gSpriteAnim_8416D14
.align 2
-gSpriteTemplate_8416D2C:: @ 8416D2C
+gSpriteTemplate_Brendan:: @ 8416D2C
spr_template 1001, 1002, gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
.align 2
-gSpriteTemplate_8416D44:: @ 8416D44
+gSpriteTemplate_May:: @ 8416D44
spr_template 1001, 1003, gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
.align 2
diff --git a/include/battle.h b/include/battle.h
index 12faee537..9d8092197 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -19,6 +19,15 @@
#define BATTLE_TYPE_LEGENDARY 0x2000
#define BATTLE_TYPE_REGI 0x4000
+#define BATTLE_WON 0x1
+#define BATTLE_LOST 0x2
+#define BATTLE_DREW 0x3
+#define BATTLE_RAN 0x4
+#define BATTLE_PLAYER_TELEPORTED 0x5
+#define BATTLE_POKE_FLED 0x6
+#define BATTLE_CAUGHT 0x7
+#define BATTLE_OPPONENT_TELEPORTED 0xA
+
#define AI_ACTION_DONE 0x0001
#define AI_ACTION_FLEE 0x0002
#define AI_ACTION_WATCH 0x0004
@@ -34,8 +43,13 @@
#define STATUS_FREEZE 0x20
#define STATUS_PARALYSIS 0x40
#define STATUS_TOXIC_POISON 0x80
+#define STATUS_TOXIC_COUNTER 0xF00
+
+#define STATUS_PSN_ANY ((STATUS_POISON | STATUS_TOXIC_POISON))
+#define STATUS_ANY ((STATUS_SLEEP | STATUS_POISON | STATUS_BURN | STATUS_FREEZE | STATUS_PARALYSIS | STATUS_TOXIC_POISON))
#define STATUS2_CONFUSION 0x00000007
+#define STATUS2_FLINCHED 0x00000008
#define STATUS2_UPROAR 0x00000070
#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
#define STATUS2_LOCK_CONFUSE 0x00000C00
@@ -71,6 +85,8 @@
#define STATUS3_MUDSPORT 0x10000
#define STATUS3_WATERSPORT 0x20000
#define STATUS3_UNDERWATER 0x40000
+#define STATUS3_INTIMIDATE_POKES 0x80000
+#define STATUS3_TRACE 0x100000
#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
@@ -87,8 +103,9 @@
#define HITMARKER_IGNORE_ON_AIR 0x00010000
#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
#define HITMARKER_IGNORE_UNDERWATER 0x00040000
-#define HITMARKER_x80000 0x00080000
+#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
#define HITMARKER_x100000 0x00100000
+#define HITMARKER_x200000 0x00200000
#define HITMARKER_x400000 0x00400000
#define HITMARKER_x800000 0x00800000
#define HITMARKER_GRUDGE 0x01000000
@@ -99,12 +116,47 @@
#define SIDE_STATUS_REFLECT (1 << 0)
#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
+#define SIDE_STATUS_X4 (1 << 2)
#define SIDE_STATUS_SPIKES (1 << 4)
#define SIDE_STATUS_SAFEGUARD (1 << 5)
#define SIDE_STATUS_FUTUREATTACK (1 << 6)
#define SIDE_STATUS_MIST (1 << 8)
#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
+#define ABILITYEFFECT_ON_SWITCHIN 0x0
+#define ABILITYEFFECT_ENDTURN 0x1
+#define ABILITYEFFECT_MOVES_BLOCK 0x2
+#define ABILITYEFFECT_ABSORBING 0x3
+#define ABILITYEFFECT_CONTACT 0x4
+#define ABILITYEFFECT_IMMUNITY 0x5
+#define ABILITYEFFECT_FORECAST 0x6
+#define ABILITYEFFECT_SYNCHRONIZE 0x7
+#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
+#define ABILITYEFFECT_INTIMIDATE1 0x9
+#define ABILITYEFFECT_INTIMIDATE2 0xA
+#define ABILITYEFFECT_TRACE 0xB
+#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
+#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD
+#define ABILITYEFFECT_FIELD_SPORT 0xE
+#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK 0xF
+#define ABILITYEFFECT_COUNT_OTHER_SIZE 0x10
+#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11
+#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
+#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
+
+#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
+
+#define MOVESTATUS_MISSED (1 << 0)
+#define MOVESTATUS_SUPEREFFECTIVE (1 << 1)
+#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2)
+#define MOVESTATUS_NOTAFFECTED (1 << 3)
+#define MOVESTATUS_ONEHITKO (1 << 4)
+#define MOVESTATUS_FAILED (1 << 5)
+#define MOVESTATUS_ENDURED (1 << 6)
+#define MOVESTATUS_HUNGON (1 << 7)
+
+#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))
+
#define MAX_TRAINER_ITEMS 4
#define MAX_MON_MOVES 4
#define MAX_BANKS_BATTLE 4
@@ -172,14 +224,16 @@ struct BattleStruct /* 0x2000000 */
u8 filler0[0x15DDE];
/*0x15DDE*/ u8 unk15DDE;
/*0x15DDF*/ u8 unk15DDF;
- /*0x15DE0*/ u8 filler15DE0[0x222];
+ /*0x15DE0*/ u8 filler15DE0[0x220];
+ /*0x16000*/ u8 turnEffectsTracker;
+ /*0x16001*/ u8 turnEffectsBank;
/*0x16002*/ u8 animTurn;
/*0x16003*/ u8 scriptingActive;
/*0x16004*/ u8 wrappedMove1[4];
/*0x16008*/ u8 wrappedMove2[4];
/*0x1600C*/ u8 cmd49StateTracker;
/*0x1600D*/ u8 unk1600D;
- /*0x1600E*/ u8 unk1600E;
+ /*0x1600E*/ u8 turncountersTracker;
/*0x1600F*/ u8 cmd23StateTracker;
/*0x16010*/ u8 moveTarget[4];
/*0x16014*/ u8 unk16014;
@@ -248,7 +302,7 @@ struct BattleStruct /* 0x2000000 */
/*0x16056*/ u8 moneyMultiplier;
/*0x16057*/ u8 unk16057;
/*0x16058*/ u8 unk16058;
- /*0x16059*/ u8 unk16059;
+ /*0x16059*/ u8 sub80173A4_Tracker;
/*0x1605A*/ u8 unk1605A;
/*0x1605B*/ u8 unk1605B;
/*0x1605C*/ u16 exp;
@@ -269,10 +323,7 @@ struct BattleStruct /* 0x2000000 */
/*0x1608A*/ u8 unk1608A;
/*0x1608B*/ u8 unk1608B;
/*0x1608C*/ u8 ChosenMoveID[4];
- /*0x16090*/ u8 unk16090;
- /*0x16091*/ u8 unk16091;
- /*0x16092*/ u8 unk16092;
- /*0x16093*/ u8 unk16093;
+ /*0x16090*/ s32 bideDmg;
/*0x16094*/ u8 unk16094;
/*0x16095*/ u8 unk16095;
/*0x16096*/ u8 unk16096;
@@ -285,7 +336,7 @@ struct BattleStruct /* 0x2000000 */
/*0x1609D*/ u8 unk1609D;
/*0x1609E*/ u8 unk1609E;
/*0x1609F*/ u8 unk1609F;
- /*0x160A0*/ u8 unk160a0;
+ /*0x160A0*/ u8 stringMoveType;
/*0x160A1*/ u8 animTargetsHit;
/*0x160A2*/ u8 expGetterBank;
/*0x160A3*/ u8 unk160A3;
@@ -327,7 +378,84 @@ struct BattleStruct /* 0x2000000 */
/*0x160CA*/ u8 synchroniseEffect;
/*0x160CB*/ u8 linkPlayerIndex;
/*0x160CC*/ u16 usedHeldItems[4];
- u8 filler2[0x72E];
+ /*0x160D4*/ u8 unk160D4;
+ /*0x160D5*/ u8 unk160D5;
+ /*0x160D6*/ u8 unk160D6;
+ /*0x160D7*/ u8 unk160D7;
+ /*0x160D8*/ u8 unk160D8;
+ /*0x160D9*/ u8 unk160D9;
+ /*0x160DA*/ u8 unk160DA;
+ /*0x160DB*/ u8 unk160DB;
+ /*0x160DC*/ u8 unk160DC;
+ /*0x160DD*/ u8 intimidateBank;
+ /*0x160DE*/ u8 unk160DE;
+ /*0x160DF*/ u8 unk160DF;
+ /*0x160E0*/ u8 unk160E0;
+ /*0x160E1*/ u8 unk160E1;
+ /*0x160E2*/ u8 unk160E2;
+ /*0x160E3*/ u8 unk160E3;
+ /*0x160E4*/ u8 unk160E4;
+ /*0x160E5*/ u8 unk160E5;
+ /*0x160E6*/ u8 unk160E6;
+ /*0x160E7*/ u8 atkCancellerTracker;
+ /*0x160E8*/ u8 unk160E8;
+ /*0x160E9*/ u8 unk160E9;
+ /*0x160EA*/ u8 unk160EA;
+ /*0x160EB*/ u8 unk160EB;
+ /*0x160EC*/ u8 unk160EC;
+ /*0x160ED*/ u8 unk160ED;
+ /*0x160EE*/ u8 unk160EE;
+ /*0x160EF*/ u8 unk160EF;
+ /*0x160F0*/ u8 unk160F0;
+ /*0x160F1*/ u8 unk160F1;
+ /*0x160F2*/ u8 unk160F2;
+ /*0x160F3*/ u8 unk160F3;
+ /*0x160F4*/ u8 unk160F4;
+ /*0x160F5*/ u8 unk160F5;
+ /*0x160F6*/ u8 unk160F6;
+ /*0x160F7*/ u8 unk160F7;
+ /*0x160F8*/ u8 unk160F8;
+ /*0x160F9*/ u8 unk160F9;
+ /*0x160FA*/ u8 unk160FA;
+ /*0x160FB*/ u8 unk160FB;
+ /*0x160FC*/ u8 turnSideTracker;
+ /*0x160FD*/ u8 unk160FD;
+ /*0x160FE*/ u8 unk160FE;
+ /*0x160FF*/ u8 unk160FF;
+ /*0x16100*/ u8 unk16100;
+ /*0x16101*/ u8 unk16101;
+ /*0x16102*/ u8 unk16102;
+ /*0x16103*/ u8 unk16103;
+ /*0x16104*/ u8 unk16104;
+ /*0x16105*/ u8 unk16105;
+ /*0x16106*/ u8 unk16106;
+ /*0x16107*/ u8 unk16107;
+ /*0x16108*/ u8 unk16108;
+ /*0x16109*/ u8 unk16109;
+ /*0x1610A*/ u8 unk1610A;
+ /*0x1610B*/ u8 unk1610B;
+ /*0x1610C*/ u8 unk1610C;
+ /*0x1610D*/ u8 unk1610D;
+ /*0x1610E*/ u8 unk1610E;
+ /*0x1610F*/ u8 unk1610F;
+ /*0x16110*/ u8 sub80170DC_Tracker;
+ /*0x16111*/ u8 sub80170DC_Bank;
+ /*0x16112*/ u8 unk16112;
+ /*0x16113*/ u8 unk16113;
+ /*0x16114*/ u8 unk16114;
+ /*0x16115*/ u8 unk16115;
+ /*0x16116*/ u8 unk16116;
+ /*0x16117*/ u8 unk16117;
+ /*0x16118*/ u8 unk16118;
+ /*0x16119*/ u8 unk16119;
+ /*0x1611A*/ u8 unk1611A;
+ /*0x1611B*/ u8 unk1611B;
+ /*0x1611C*/ u8 unk1611C;
+ /*0x1611D*/ u8 unk1611D;
+ /*0x1611E*/ u8 unk1611E;
+ /*0x1611F*/ u8 unk1611F;
+
+ //u8 filler2[0x72E];
/* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2;
};
@@ -482,9 +610,9 @@ struct SpecialStatus
u8 flag40 : 1;
u8 focusBanded : 1;
u8 field1[3];
- u32 moveturnLostHP;
- u32 moveturnLostHP_physical;
- u32 moveturnLostHP_special;
+ s32 moveturnLostHP;
+ s32 moveturnLostHP_physical;
+ s32 moveturnLostHP_special;
u8 moveturnPhysicalBank;
u8 moveturnSpecialBank;
u8 field12;
@@ -497,8 +625,7 @@ struct sideTimer
u8 lightscreenTimer; //0x1
u8 mistTimer; //0x2
u8 field3; //0x3
- u8 field4; //0x4
- u8 field5; //0x5
+ u16 field4; //0x4
u8 spikesAmount; //0x6
u8 safeguardTimer; //0x7
u8 followmeTimer; //0x8
@@ -516,7 +643,7 @@ struct WishFutureKnock
u8 wishCounter[MAX_BANKS_BATTLE];
u8 wishUserID[MAX_BANKS_BATTLE];
u8 weatherDuration;
- u8 knockedOffPokes[2];
+ u16 knockedOffPokes;
};
extern struct UnkBattleStruct1 unk_2016A00;
@@ -532,15 +659,19 @@ extern struct Struct20238C8 gUnknown_020238C8;
// TODO: move ewram to global.h
extern u8 ewram[];
-#define BATTLE_STRUCT ((struct BattleStruct *) (ewram + 0x00000))
-#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(ewram + 0x16800))
-#define UNK_2016A00_STRUCT ((struct UnkBattleStruct1 *) (ewram + 0x16A00))
-#define AI_STACK ((struct AI_Stack *) (ewram + 0x16C00))
-#define AI_ARRAY_160CC ((struct SmallItemStruct *) (ewram + 0x160CC))
-#define B_FUNCTION_STACK ((struct funcStack *) (ewram + 0x17140))
-#define ewram17800 ((struct Struct2017800 *) (ewram + 0x17800))
-#define ewram17810 ((struct Struct2017810 *) (ewram + 0x17810))
-#define ewram17840 (*(struct Struct2017840 *) (ewram + 0x17840))
+#define BATTLE_STRUCT ((struct BattleStruct *) (ewram + 0x00000))
+#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(ewram + 0x16800))
+#define UNK_2016A00_STRUCT ((struct UnkBattleStruct1 *) (ewram + 0x16A00))
+#define AI_STACK ((struct AI_Stack *) (ewram + 0x16C00))
+#define AI_ARRAY_160CC ((struct SmallItemStruct *) (ewram + 0x160CC))
+#define B_BATTLESCRIPTS_STACK ((struct scriptsStack *) (ewram + 0x17110))
+#define B_FUNCTION_STACK ((struct funcStack *) (ewram + 0x17140))
+#define ewram17800 ((struct Struct2017800 *) (ewram + 0x17800))
+#define ewram17810 ((struct Struct2017810 *) (ewram + 0x17810))
+#define ewram17840 (*(struct Struct2017840 *) (ewram + 0x17840))
+#define ewram17000 ((u32 *) (ewram + 0x17100))
+
+typedef void (*BattleCmdFunc)(void);
struct funcStack
{
@@ -548,6 +679,12 @@ struct funcStack
u8 size;
};
+struct scriptsStack
+{
+ u8* ptr[8];
+ u8 size;
+};
+
extern u8 gBattleTextBuff1[];
//function declarations of buffer emits
@@ -650,19 +787,19 @@ void TurnValuesCleanUp(u8);
void SpecialStatusesClear(void);
void sub_80138F0(void);
void sub_80155A4();
-void CancelMultiTurnMoves(u8);
+void CancelMultiTurnMoves(u8 bank);
void PrepareStringBattle();
void sub_80156DC();
void sub_80157C4(u8 index);
// asm/battle_3.o
-u8 sub_8015A98(u8, u8, u8);
-u8 UpdateTurnCounters();
-u8 TurnBasedEffects();
+u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check);
+u8 UpdateTurnCounters(void);
+u8 TurnBasedEffects(void);
u8 sub_80170DC();
u8 sub_80173A4();
-u8 AbilityBattleEffects(u8, u8, u8, u8, u16);
-u8 ItemBattleEffects();
+u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 move);
+u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn);
// asm/battle_4.o
void AI_CalcDmg(u8, u8);
diff --git a/include/battle_message.h b/include/battle_message.h
index da57333a5..d115e5357 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -1,7 +1,8 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
-void StrCpyDecodeToDisplayedStringBattle(const u8 *);
-void StrCpyDecodeBattle(const u8 *, u8 *);
+void BufferStringBattle(u16 stringID);
+u32 StrCpyDecodeToDisplayedStringBattle(const u8* src);
+u32 StrCpyDecodeBattle(const u8* src, u8* dst);
#endif // GUARD_BATTLE_MESSAGE_H
diff --git a/include/data2.h b/include/data2.h
index 9dd26fd5f..2837a4451 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -45,6 +45,8 @@ extern const u8 gTrainerClassNames[][13];
extern const struct Trainer gTrainers[];
extern u8 gSpeciesNames[][11];
extern u8 gMoveNames[][13];
+extern const u8 gAbilityNames[][13];
+extern const u8 gTypeNames[][7];
extern const struct UnknownStructD2 gUnknown_081F9674;
extern const u8 gUnknown_081F96C8[];
extern struct CompressedSpriteSheet gUnknown_081FAEA4;
diff --git a/include/decompress.h b/include/decompress.h
index 07d69301f..84c1f29c0 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -10,7 +10,7 @@ void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *a
void LoadCompressedObjectPalette(const struct CompressedSpritePalette *a);
void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer);
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *a, u8 b, u8 c, void *d, void *e, s32 f);
-void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g);
+void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 pid);
void LoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 h);
void Unused_LZDecompressWramIndirect(const void **src, void *dest);
diff --git a/include/intro_credits_graphics.h b/include/intro_credits_graphics.h
index 5abb2381b..2718d2f9f 100644
--- a/include/intro_credits_graphics.h
+++ b/include/intro_credits_graphics.h
@@ -10,15 +10,16 @@ extern const struct SpritePalette gIntro2SpritePalettes[];
extern const struct CompressedSpriteSheet gUnknown_08416E24;
extern const struct CompressedSpriteSheet gUnknown_08416E34;
-void load_intro_part2_graphics(/*TODO: arg types*/);
-void sub_8148C78(/*TODO: arg types*/);
+void load_intro_part2_graphics(u8 a);
+void sub_8148C78(u8 a);
void sub_8148CB0(u8);
void sub_8148E90(u8);
-u8 sub_8148EC0(/*TODO: arg types*/);
-void sub_8149020(/*TODO: arg types*/);
-u8 intro_create_brendan_sprite(/*TODO: arg types*/);
-u8 intro_create_may_sprite(/*TODO: arg types*/);
-u8 intro_create_latios_sprite(/*TODO: arg types*/);
-u8 intro_create_latias_sprite(/*TODO: arg types*/);
+u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d);
+void sub_8148F3C(u8);
+void sub_8149020(u8);
+u8 intro_create_brendan_sprite(s16 a, s16 b);
+u8 intro_create_may_sprite(s16 a, s16 b);
+u8 intro_create_latios_sprite(s16 a, s16 b);
+u8 intro_create_latias_sprite(s16 a, s16 b);
#endif // GUARD_INTRO_CREDITS_GRAPHICS_H
diff --git a/include/item_menu.h b/include/item_menu.h
index 6950ed0ff..29618f347 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -3,6 +3,17 @@
#include "string_util.h"
+struct PocketScrollState
+{
+ u8 cursorPos;
+ u8 scrollTop;
+ u8 numSlots;
+ u8 cursorMax;
+};
+
+extern struct PocketScrollState gBagPocketScrollStates[];
+extern struct ItemSlot *gCurrentBagPocketItemSlots;
+
void ResetBagScrollPositions(void);
void ClearBag(void);
void sub_80A3E0C(void);
diff --git a/include/pokemon.h b/include/pokemon.h
index 739fbf0f9..d0ceaf15e 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -408,9 +408,11 @@ struct BattleMove
u8 pad[3];
};
+#define FLAG_MAKES_CONTACT 0x1
#define FLAG_PROTECT_AFFECTED 0x2
#define FLAG_MAGICCOAT_AFFECTED 0x4
#define FLAG_SNATCH_AFFECTED 0x8
+#define FLAG_KINGSROCK_AFFECTED 0x20
struct PokemonStorage
{
diff --git a/include/sprite.h b/include/sprite.h
index 733231eb5..5682a7c1d 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -204,14 +204,14 @@ struct Sprite
/*0x3A*/ s16 data6;
/*0x3C*/ s16 data7;
- /*0x3E*/ u16 inUse:1;
- u16 coordOffsetEnabled:1;
- u16 invisible:1;
- u16 flags_3:1;
- u16 flags_4:1;
- u16 flags_5:1;
- u16 flags_6:1;
- u16 flags_7:1;
+ /*0x3E*/ u16 inUse:1; //1
+ u16 coordOffsetEnabled:1; //2
+ u16 invisible:1; //4
+ u16 flags_3:1; //8
+ u16 flags_4:1; //0x10
+ u16 flags_5:1; //0x20
+ u16 flags_6:1; //0x40
+ u16 flags_7:1; //0x80
/*0x3F*/ u16 hFlip:1;
u16 vFlip:1;
u16 animBeginning:1;
diff --git a/ld_script.txt b/ld_script.txt
index 9ca2705a6..a0417faa3 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -53,7 +53,7 @@ SECTIONS {
asm/battle_1.o(.text_800DC24);
src/battle_2.o(.text);
asm/battle_2.o(.text);
- asm/battle_3.o(.text);
+ src/battle_3.o(.text);
src/battle_4.o(.text);
asm/battle_5.o(.text);
src/battle_6.o(.text);
@@ -74,7 +74,6 @@ SECTIONS {
src/daycare.o(.text);
asm/daycare.o(.text);
src/egg_hatch.o(.text);
- asm/egg_hatch.o(.text);
src/battle_interface.o(.text);
src/smokescreen.o(.text);
src/pokeball.o(.text);
@@ -122,7 +121,7 @@ SECTIONS {
src/rom_8077ABC.o(.text);
src/task.o(.text);
asm/reshow_battle_screen.o(.text);
- asm/battle_anim_807B69C.o(.text);
+ src/battle_anim_807B69C.o(.text);
src/title_screen.o(.text);
src/field_weather.o(.text);
asm/field_weather.o(.text);
@@ -229,7 +228,7 @@ SECTIONS {
src/fldeff_strength.o(.text);
asm/battle_transition.o(.text);
src/battle_811DA74.o(.text);
- asm/battle_message.o(.text);
+ src/battle_message.o(.text);
src/choose_party.o(.text);
asm/cable_car.o(.text);
asm/roulette_util.o(.text);
@@ -255,7 +254,7 @@ SECTIONS {
src/intro.o(.text);
src/field_region_map.o(.text);
asm/battle_anim_813F0F4.o(.text);
- asm/hall_of_fame.o(.text);
+ src/hall_of_fame.o(.text);
src/credits.o(.text);
src/lottery_corner.o(.text);
src/diploma.o(.text);
@@ -265,7 +264,7 @@ SECTIONS {
src/braille_puzzles.o(.text);
asm/pokeblock_feed.o(.text);
src/clear_save_data_menu.o(.text);
- asm/intro_credits_graphics.o(.text);
+ src/intro_credits_graphics.o(.text);
asm/evolution_graphics.o(.text);
src/bard_music.o(.text);
src/fldeff_teleport.o(.text);
@@ -332,12 +331,13 @@ SECTIONS {
data/data2a.o(.rodata);
src/battle_4.o(.rodata);
data/data2b.o(.rodata);
+ src/battle_3.o(.rodata);
src/pokemon_data.o(.rodata);
. = ALIGN(4);
src/trig.o(.rodata);
src/util.o(.rodata);
data/daycare.o(.rodata);
- data/egg_hatch.o(.rodata);
+ src/egg_hatch.o(.rodata);
data/battle_interface.o(.rodata);
src/pokeball.o(.rodata);
data/trade.o(.rodata);
@@ -372,7 +372,7 @@ SECTIONS {
data/map_events.o(.rodata);
data/data_8393054.o(.rodata);
src/task.o(.rodata);
- data/battle_anim_807B69C.o(.rodata);
+ src/battle_anim_807B69C.o(.rodata);
src/title_screen.o(.rodata);
data/field_weather.o(.rodata);
src/field_screen_effect.o(.rodata);
@@ -462,7 +462,7 @@ SECTIONS {
src/player_pc.o(.rodata);
src/intro.o(.rodata);
data/battle_anim_813F0F4.o(.rodata);
- data/hall_of_fame.o(.rodata);
+ src/hall_of_fame.o(.rodata);
src/credits.o(.rodata);
data/credits.o(.rodata);
src/lottery_corner.o(.rodata);
diff --git a/src/battle_3.c b/src/battle_3.c
new file mode 100644
index 000000000..9bb9e333f
--- /dev/null
+++ b/src/battle_3.c
@@ -0,0 +1,6595 @@
+#include "global.h"
+#include "abilities.h"
+#include "battle.h"
+#include "moves.h"
+#include "item.h"
+#include "items.h"
+#include "hold_effects.h"
+#include "species.h"
+#include "pokemon.h"
+#include "data2.h"
+#include "rng.h"
+#include "text.h"
+#include "battle_move_effects.h"
+#include "string_util.h"
+#include "flags.h"
+
+extern u8* gBattlescriptCurrInstr;
+extern u8 gActiveBank;
+extern u8 gBattleBufferB[4][0x200];
+extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to
+extern u16 gLastUsedMove[4];
+extern struct BattlePokemon gBattleMons[4];
+extern struct BattleEnigmaBerry gEnigmaBerries[4];
+extern u8 gStringBank;
+extern u16 gLastUsedItem;
+extern u16 gCurrentMove;
+extern const u32 gBitTable[];
+extern u16 gBattleTypeFlags;
+extern u8 gNoOfAllBanks;
+extern u32 gStatuses3[4];
+extern u8 gBankAttacker;
+extern u8 gBankTarget;
+extern u8 gTurnOrder[4];
+extern u16 gSideAffecting[2];
+extern u16 gBattleWeather;
+extern void (*gBattleMainFunc)(void);
+extern u8 gAbsentBankFlags;
+extern u8 gBattleCommunication[];
+extern u32 gHitMarker;
+extern u8 gEffectBank;
+extern u8 gBank1;
+extern s32 gBattleMoveDamage;
+extern u16 gBattlePartyID[4];
+extern u16 gChosenMovesByBanks[4];
+extern s32 gTakenDmg[4];
+extern u8 gTakenDmgBanks[4];
+extern u8 gBattleMoveFlags;
+extern u8 gLastUsedAbility;
+extern u8 gBattleTextBuff2[];
+extern u8 gFightStateTracker;
+extern struct BattleEnigmaBerry gEnigmaBerries[4];
+extern u8 gUnknown_02024BE5;
+extern u8 gCurrMovePos;
+extern u16 gRandomMove;
+extern s32 gBattleMoveDamage;
+extern u16 gDynamicBasePower;
+extern u32 gBattleExecBuffer;
+extern const u16 gSoundMovesTable[];
+extern const u8 gStatusConditionString_PoisonJpn[];
+extern const u8 gStatusConditionString_SleepJpn[];
+extern const u8 gStatusConditionString_ParalysisJpn[];
+extern const u8 gStatusConditionString_BurnJpn[];
+extern const u8 gStatusConditionString_IceJpn[];
+extern const u8 gStatusConditionString_ConfusionJpn[];
+extern const u8 gStatusConditionString_LoveJpn[];
+extern const BattleCmdFunc gBattleScriptingCommandsTable[];
+
+u8 IsImprisoned(u8 bank, u16 move);
+u8 GetBankByPlayerAI(u8 ID);
+u8 GetBankIdentity(u8 bank);
+u8 GetBankSide(u8 bank);
+void b_call_bc_move_exec(u8* BS_ptr);
+bool8 sub_8015660(u8 bank); //check if a move failed
+void SetMoveEffect(bool8 primary, u8 certainArg);
+bool8 UproarWakeUpCheck(u8 bank);
+bool8 sub_8018018(u8 bank, u8, u8);
+void sub_8015740(u8 bank);
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def);
+u8 CountTrailingZeroBits(u32 a);
+u8 GetMoveTarget(u16 move, u8 useMoveTarget);
+u8 sub_803FC34(u8 bank);
+u16 sub_803FBFC(u8 a);
+u8 weather_get_current(void);
+void b_push_move_exec(u8* BS_ptr);
+void RecordAbilityBattle(u8 bank, u8 ability);
+void RecordItemBattle(u8 bank, u8 holdEffect);
+void sub_8013F54(void);
+void sub_8013FBC(void);
+s8 GetPokeFlavourRelation(u32 pid, u8 flavor);
+
+extern u8 BattleScript_MoveSelectionDisabledMove[];
+extern u8 BattleScript_MoveSelectionTormented[];
+extern u8 BattleScript_MoveSelectionTaunted[];
+extern u8 BattleScript_MoveSelectionImprisoned[];
+extern u8 BattleScript_MoveSelectionChoiceBanded[];
+extern u8 BattleScript_MoveSelectionNoPP[];
+extern u8 BattleScript_NoMovesLeft[];
+extern u8 BattleScript_WishComesTrue[];
+extern u8 BattleScript_IngrainTurnHeal[];
+extern u8 BattleScript_LeechSeedTurnDrain[];
+extern u8 BattleScript_PoisonTurnDmg[];
+extern u8 BattleScript_BurnTurnDmg[];
+extern u8 BattleScript_NightmareTurnDmg[];
+extern u8 BattleScript_CurseTurnDmg[];
+extern u8 BattleScript_WrapTurnDmg[];
+extern u8 BattleScript_WrapEnds[];
+extern u8 BattleScript_DisabledNoMore[];
+extern u8 BattleScript_EncoredNoMore[];
+
+extern u8 gUnknown_081D9030[];
+extern u8 gUnknown_081D8F62[];
+extern u8 gUnknown_081D8FFF[];
+extern u8 gUnknown_081D8F7D[];
+extern u8 gUnknown_081D9016[];
+extern u8 gUnknown_081D9008[];
+extern u8 gUnknown_081D9041[];
+extern u8 gUnknown_081D950F[]; //uproar wakeup BS
+extern u8 gUnknown_081D957E[]; //uproar BS
+extern u8 BattleScript_ThrashConfuses[];
+extern u8 BattleScript_YawnMakesAsleep[];
+extern u8 BattleScript_FutureSightHits[];
+extern u8 BattleScript_PerishSongHits[];
+extern u8 BattleScript_PerishSongTimerGoesDown[];
+extern u8 gUnknown_081D8C72[];
+extern u8 gUnknown_081D8C7B[];
+
+extern u8 BattleScript_MoveUsedIsAsleep[];
+extern u8 BattleScript_MoveUsedWokeUp[];
+extern u8 BattleScript_MoveUsedIsFrozen[];
+extern u8 BattleScript_MoveUsedUnfroze[];
+extern u8 BattleScript_MoveUsedLoafingAround[];
+extern u8 BattleScript_MoveUsedMustRecharge[];
+extern u8 BattleScript_MoveUsedFlinched[];
+extern u8 BattleScript_MoveUsedIsDisabled[];
+extern u8 BattleScript_MoveUsedIsTaunted[];
+extern u8 BattleScript_MoveUsedIsImprisoned[];
+extern u8 BattleScript_MoveUsedIsConfused[];
+extern u8 BattleScript_MoveUsedIsConfusedNoMore[];
+extern u8 BattleScript_MoveUsedIsParalyzed[];
+extern u8 BattleScript_MoveUsedIsParalyzedCantAttack[];
+extern u8 BattleScript_MoveUsedIsInLove[];
+extern u8 BattleScript_BideStoringEnergy[];
+extern u8 BattleScript_BideAttack[];
+extern u8 BattleScript_BideNoEnergyToAttack[];
+
+extern u8 gUnknown_081D901D[]; //load weather from overworld
+extern u8 BattleScript_DrizzleActivates[];
+extern u8 BattleScript_SandstreamActivates[];
+extern u8 BattleScript_DroughtActivates[];
+extern u8 BattleScript_CastformChange[];
+extern u8 BattleScript_RainDishActivates[];
+extern u8 BattleScript_ShedSkinActivates[];
+extern u8 BattleScript_SpeedBoostActivates[];
+extern u8 BattleScript_SoundproofProtected[];
+extern u8 BattleScript_MoveHPDrain[];
+extern u8 BattleScript_MoveHPDrain_PPLoss[];
+extern u8 BattleScript_FlashFireBoost[];
+extern u8 BattleScript_FlashFireBoost_PPLoss[];
+extern u8 BattleScript_MoveHPDrain_FullHP[];
+extern u8 BattleScript_MoveHPDrain_FullHP_PPLoss[];
+extern u8 BattleScript_ColorChangeActivates[];
+extern u8 BattleScript_RoughSkinActivates[];
+extern u8 BattleScript_ApplySecondaryEffect[];
+extern u8 BattleScript_CuteCharmActivates[];
+extern u8 gUnknown_081D9956[]; //ability status clear
+extern u8 BattleScript_SynchronizeActivates[];
+extern u8 gUnknown_081D978C[]; //intimidate1
+extern u8 gUnknown_081D9795[]; //intimidate2
+extern u8 BattleScript_TraceActivates[];
+
+extern u8 BattleScript_WhiteHerbEnd2[];
+extern u8 BattleScript_WhiteHerbRet[];
+extern u8 BattleScript_ItemHealHP_RemoveItem[];
+extern u8 BattleScript_BerryPPHealEnd2[];
+extern u8 BattleScript_ItemHealHP_End2[];
+extern u8 BattleScript_BerryConfuseHealEnd2[];
+extern u8 BattleScript_BerryStatRaiseEnd2[];
+extern u8 BattleScript_BerryFocusEnergyEnd2[];
+extern u8 BattleScript_BerryCurePrlzEnd2[];
+extern u8 BattleScript_BerryCurePsnEnd2[];
+extern u8 BattleScript_BerryCureBrnEnd2[];
+extern u8 BattleScript_BerryCureFrzEnd2[];
+extern u8 BattleScript_BerryCureSlpEnd2[];
+extern u8 BattleScript_BerryCureConfusionEnd2[];
+extern u8 gUnknown_081D9A44[]; //berry cure any status end2
+extern u8 BattleScript_BerryCureParRet[];
+extern u8 BattleScript_BerryCurePsnRet[];
+extern u8 BattleScript_BerryCureBrnRet[];
+extern u8 BattleScript_BerryCureFrzRet[];
+extern u8 BattleScript_BerryCureSlpRet[];
+extern u8 BattleScript_BerryCureConfusionRet[];
+extern u8 gUnknown_081D9A4A[]; //berry cure any status return
+
+extern u8 BattleScript_ItemHealHP_Ret[];
+
+extern u8 gUnknown_081D995F[]; //disobedient while asleep
+extern u8 gUnknown_081D996F[]; //disobedient, uses a random move
+extern u8 gUnknown_081D9989[]; //disobedient, went to sleep
+extern u8 gUnknown_081D99A0[]; //disobedient, hits itself
+
+#define CHOICED_MOVE(bank)(((u16*)(&ewram[bank * 2 + 0x160e8])))
+
+//array entries for battle communication
+#define MOVE_EFFECT_BYTE 0x3
+#define MULTISTRING_CHOOSER 0x5
+#define MSG_DISPLAY 0x7
+
+void b_movescr_stack_push(u8* BS_ptr)
+{
+ B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr;
+}
+
+void b_movescr_stack_push_cursor(void)
+{
+ B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = gBattlescriptCurrInstr;
+}
+
+void b_movescr_stack_pop_cursor(void)
+{
+ gBattlescriptCurrInstr = B_BATTLESCRIPTS_STACK->ptr[--B_BATTLESCRIPTS_STACK->size];
+}
+
+u8 sub_8015894(void) //msg can't select a move
+{
+ u8 limitations = 0;
+ u16 move = gBattleMons[gActiveBank].moves[gBattleBufferB[gActiveBank][2]];
+ u8 holdEffect;
+ u16* choicedMove = CHOICED_MOVE(gActiveBank);
+ if (gDisableStructs[gActiveBank].disabledMove == move && move)
+ {
+ BATTLE_STRUCT->scriptingActive = gActiveBank;
+ gCurrentMove = move;
+ gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionDisabledMove;
+ limitations++;
+ }
+ if (move == gLastUsedMove[gActiveBank] && move != MOVE_STRUGGLE && gBattleMons[gActiveBank].status2 & STATUS2_TORMENT)
+ {
+ CancelMultiTurnMoves(gActiveBank);
+ gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionTormented;
+ limitations++;
+ }
+ if (gDisableStructs[gActiveBank].tauntTimer1 && gBattleMoves[move].power == 0)
+ {
+ gCurrentMove = move;
+ gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionTaunted;
+ limitations++;
+ }
+ if (IsImprisoned(gActiveBank, move))
+ {
+ gCurrentMove = move;
+ gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionImprisoned;
+ limitations++;
+ }
+ if (gBattleMons[gActiveBank].item == ITEM_ENIGMA_BERRY)
+ holdEffect = gEnigmaBerries[gActiveBank].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBank].item);
+ gStringBank = gActiveBank;
+ if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != move)
+ {
+ gCurrentMove = *choicedMove;
+ gLastUsedItem = gBattleMons[gActiveBank].item;
+ gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionChoiceBanded;
+ limitations++;
+ }
+ if (gBattleMons[gActiveBank].pp[gBattleBufferB[gActiveBank][2]] == 0)
+ {
+ gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionNoPP;
+ limitations++;
+ }
+ return limitations;
+}
+
+#define MOVE_LIMITATION_ZEROMOVE (1 << 0)
+#define MOVE_LIMITATION_PP (1 << 1)
+#define MOVE_LIMITATION_DISABLED (1 << 2)
+#define MOVE_LIMITATION_TORMENTED (1 << 3)
+#define MOVE_LIMITATION_TAUNT (1 << 4)
+#define MOVE_LIMITATION_IMPRISION (1 << 5)
+
+u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check)
+{
+ u8 holdEffect;
+ u16* choicedMove = CHOICED_MOVE(bank);
+ s32 i;
+ if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY)
+ holdEffect = gEnigmaBerries[bank].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[bank].item);
+ gStringBank = bank;
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[bank].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE)
+ unusableMoves |= gBitTable[i];
+ if (gBattleMons[bank].pp[i] == 0 && check & MOVE_LIMITATION_PP)
+ unusableMoves |= gBitTable[i];
+ if (gBattleMons[bank].moves[i] == gDisableStructs[bank].disabledMove && check & MOVE_LIMITATION_DISABLED)
+ unusableMoves |= gBitTable[i];
+ if (gBattleMons[bank].moves[i] == gLastUsedMove[bank] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[bank].status2 & STATUS2_TORMENT)
+ unusableMoves |= gBitTable[i];
+ if (gDisableStructs[bank].tauntTimer1 && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[bank].moves[i]].power == 0)
+ unusableMoves |= gBitTable[i];
+ if (IsImprisoned(bank, gBattleMons[bank].moves[i]) && check & MOVE_LIMITATION_IMPRISION)
+ unusableMoves |= gBitTable[i];
+ if (gDisableStructs[bank].encoreTimer1 && gDisableStructs[bank].encoredMove != gBattleMons[bank].moves[i])
+ unusableMoves |= gBitTable[i];
+ if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != gBattleMons[bank].moves[i])
+ unusableMoves |= gBitTable[i];
+ }
+ return unusableMoves;
+}
+
+bool8 AreAllMovesUnusable(void)
+{
+ u8 unusable;
+ unusable = CheckMoveLimitations(gActiveBank, 0, 0xFF);
+ if (unusable == 0xF) //all moves are unusable
+ {
+ gProtectStructs[gActiveBank].onlyStruggle = 1;
+ gUnknown_02024C1C[gActiveBank] = BattleScript_NoMovesLeft;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ gBattleBufferB[gActiveBank][3] = GetBankByPlayerAI((GetBankIdentity(gActiveBank) ^ 1) | (Random() & 2));
+ else
+ gBattleBufferB[gActiveBank][3] = GetBankByPlayerAI(GetBankIdentity(gActiveBank) ^ 1);
+ }
+ else
+ gProtectStructs[gActiveBank].onlyStruggle = 0;
+ return (unusable == 0xF);
+}
+
+u8 IsImprisoned(u8 bank, u16 move)
+{
+ u8 imprisionedMoves = 0;
+ u8 bankSide = GetBankSide(bank);
+ s32 i;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (bankSide != GetBankSide(i) && gStatuses3[i] & STATUS3_IMPRISIONED)
+ {
+ s32 j;
+ for (j = 0; j < 4; j++)
+ {
+ if (move == gBattleMons[i].moves[j])
+ break;
+ }
+ if (j < 4)
+ imprisionedMoves++;
+ }
+ }
+ return imprisionedMoves;
+}
+
+u8 UpdateTurnCounters(void)
+{
+ u8 effect = 0;
+ s32 i;
+
+ for (gBankAttacker = 0; gBankAttacker < gNoOfAllBanks && gAbsentBankFlags & gBitTable[gBankAttacker]; gBankAttacker++)
+ {
+ }
+ for (gBankTarget = 0; gBankTarget < gNoOfAllBanks && gAbsentBankFlags & gBitTable[gBankTarget]; gBankTarget++)
+ {
+ }
+
+ do
+ {
+ u8 sideBank;
+
+ switch (BATTLE_STRUCT->turncountersTracker)
+ {
+ case 0:
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ gTurnOrder[i] = i;
+ }
+ for (i = 0; i < gNoOfAllBanks - 1; i++)
+ {
+ s32 j;
+ for (j = i + 1; j < gNoOfAllBanks; j++)
+ {
+ if (b_first_side(gTurnOrder[i], gTurnOrder[j], 0))
+ sub_8012FBC(i, j);
+ }
+ }
+ BATTLE_STRUCT->turncountersTracker++;
+ BATTLE_STRUCT->turnSideTracker = 0;
+ case 1:
+ while (BATTLE_STRUCT->turnSideTracker < 2)
+ {
+ gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+
+ if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT)
+ {
+ if (--gSideTimer[sideBank].reflectTimer == 0)
+ {
+
+ gSideAffecting[sideBank] &= ~SIDE_STATUS_REFLECT;
+ b_call_bc_move_exec(gUnknown_081D9030);
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = MOVE_REFLECT;
+ gBattleTextBuff1[3] = MOVE_REFLECT >> 8;
+ gBattleTextBuff1[4] = EOS;
+ effect++;
+ }
+ }
+ BATTLE_STRUCT->turnSideTracker++;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ BATTLE_STRUCT->turncountersTracker++;
+ BATTLE_STRUCT->turnSideTracker = 0;
+ }
+ break;
+ case 2:
+ while (BATTLE_STRUCT->turnSideTracker < 2)
+ {
+ gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN)
+ {
+ if (--gSideTimer[sideBank].lightscreenTimer == 0)
+ {
+ gSideAffecting[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN;
+ b_call_bc_move_exec(gUnknown_081D9030);
+ gBattleCommunication[MULTISTRING_CHOOSER] = sideBank;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = MOVE_LIGHT_SCREEN;
+ gBattleTextBuff1[3] = MOVE_LIGHT_SCREEN >> 8;
+ gBattleTextBuff1[4] = EOS;
+ effect++;
+ }
+ }
+ BATTLE_STRUCT->turnSideTracker++;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ BATTLE_STRUCT->turncountersTracker++;
+ BATTLE_STRUCT->turnSideTracker = 0;
+ }
+ break;
+ case 3:
+ while (BATTLE_STRUCT->turnSideTracker < 2)
+ {
+ gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ if (gSideTimer[sideBank].mistTimer && --gSideTimer[sideBank].mistTimer == 0)
+ {
+ gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST;
+ b_call_bc_move_exec(gUnknown_081D9030);
+ gBattleCommunication[MULTISTRING_CHOOSER] = sideBank;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = MOVE_MIST;
+ gBattleTextBuff1[3] = MOVE_MIST >> 8;
+ gBattleTextBuff1[4] = EOS;
+ effect++;
+ }
+ BATTLE_STRUCT->turnSideTracker++;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ BATTLE_STRUCT->turncountersTracker++;
+ BATTLE_STRUCT->turnSideTracker = 0;
+ }
+ break;
+ case 4:
+ while (BATTLE_STRUCT->turnSideTracker < 2)
+ {
+ gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker;
+ if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD)
+ {
+ if (--gSideTimer[sideBank].safeguardTimer == 0)
+ {
+ gSideAffecting[sideBank] &= ~SIDE_STATUS_SAFEGUARD;
+ b_call_bc_move_exec(gUnknown_081D9041);
+ effect++;
+ }
+ }
+ BATTLE_STRUCT->turnSideTracker++;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ BATTLE_STRUCT->turncountersTracker++;
+ BATTLE_STRUCT->turnSideTracker = 0;
+ }
+ break;
+ case 5:
+ while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks)
+ {
+ gActiveBank = gTurnOrder[BATTLE_STRUCT->turnSideTracker];
+ if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp)
+ {
+ gBankTarget = gActiveBank;
+ b_call_bc_move_exec(BattleScript_WishComesTrue);
+ effect++;
+ }
+ BATTLE_STRUCT->turnSideTracker++;
+ if (effect)
+ break;
+ }
+ if (!effect)
+ {
+ BATTLE_STRUCT->turncountersTracker++;
+ }
+ break;
+ case 6:
+ if (gBattleWeather & WEATHER_RAIN_ANY)
+ {
+ if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
+ {
+ if (--gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_RAIN_TEMPORARY;
+ gBattleWeather &= ~WEATHER_RAIN_DOWNPOUR;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ }
+ else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ b_call_bc_move_exec(gUnknown_081D8F62);
+ effect++;
+ }
+ BATTLE_STRUCT->turncountersTracker++;
+ break;
+ case 7:
+ if (gBattleWeather & WEATHER_SANDSTORM_ANY)
+ {
+ if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_SANDSTORM_TEMPORARY;
+ gBattlescriptCurrInstr = gUnknown_081D8FFF;
+ }
+ else
+ gBattlescriptCurrInstr = gUnknown_081D8F7D;
+
+ BATTLE_STRUCT->animArg1 = 0xC;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ b_call_bc_move_exec(gBattlescriptCurrInstr);
+ effect++;
+ }
+ BATTLE_STRUCT->turncountersTracker++;
+ break;
+ case 8:
+ if (gBattleWeather & WEATHER_SUN_ANY)
+ {
+ if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_SUN_TEMPORARY;
+ gBattlescriptCurrInstr = gUnknown_081D9016;
+ }
+ else
+ gBattlescriptCurrInstr = gUnknown_081D9008;
+
+ b_call_bc_move_exec(gBattlescriptCurrInstr);
+ effect++;
+ }
+ BATTLE_STRUCT->turncountersTracker++;
+ break;
+ case 9:
+ if (gBattleWeather & WEATHER_HAIL)
+ {
+ if (--gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~WEATHER_HAIL;
+ gBattlescriptCurrInstr = gUnknown_081D8FFF;
+ }
+ else
+ gBattlescriptCurrInstr = gUnknown_081D8F7D;
+
+ BATTLE_STRUCT->animArg1 = 0xD;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ b_call_bc_move_exec(gBattlescriptCurrInstr);
+ effect++;
+ }
+ BATTLE_STRUCT->turncountersTracker++;
+ break;
+ case 10:
+ effect++;
+ break;
+ }
+ } while (effect == 0);
+ return (gBattleMainFunc != BattleTurnPassed);
+}
+
+#define TURNBASED_MAX_CASE 19
+
+u8 TurnBasedEffects(void)
+{
+ u8 effect = 0;
+
+ gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
+ while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE)
+ {
+ gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->turnEffectsBank];
+ if (gAbsentBankFlags & gBitTable[gActiveBank])
+ {
+ BATTLE_STRUCT->turnEffectsBank++;
+ }
+ else
+ {
+ switch (BATTLE_STRUCT->turnEffectsTracker)
+ {
+ case 0: // ingrain
+ if ((gStatuses3[gActiveBank] & STATUS3_ROOTED)
+ && gBattleMons[gActiveBank].hp != gBattleMons[gActiveBank].maxHP
+ && gBattleMons[gActiveBank].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ b_call_bc_move_exec(BattleScript_IngrainTurnHeal);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 1: // end turn abilities
+ if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBank, 0, 0, 0))
+ effect++;
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 2: // item effects
+ if (ItemBattleEffects(1, gActiveBank, 0))
+ effect++;
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 18: // item effects again
+ if (ItemBattleEffects(1, gActiveBank, 1))
+ effect++;
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 3: // leech seed
+ if (gStatuses3[gActiveBank] & STATUS3_LEECHSEED && gBattleMons[gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gActiveBank].hp != 0)
+ {
+ gBankTarget = gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK; //funny how the 'target' is actually the bank that receives HP
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BATTLE_STRUCT->animArg1 = gBankTarget;
+ BATTLE_STRUCT->animArg2 = gBankAttacker;
+ b_call_bc_move_exec(BattleScript_LeechSeedTurnDrain);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 4: // poison
+ if ((gBattleMons[gActiveBank].status1 & STATUS_POISON) && gBattleMons[gActiveBank].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ b_call_bc_move_exec(BattleScript_PoisonTurnDmg);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 5: // toxic poison
+ if ((gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON) && gBattleMons[gActiveBank].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if ((gBattleMons[gActiveBank].status1 & 0xF00) != 0xF00) //not 16 turns
+ gBattleMons[gActiveBank].status1 += 0x100;
+ gBattleMoveDamage *= (gBattleMons[gActiveBank].status1 & 0xF00) >> 8;
+ b_call_bc_move_exec(BattleScript_PoisonTurnDmg);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 6: // burn
+ if ((gBattleMons[gActiveBank].status1 & STATUS_BURN) && gBattleMons[gActiveBank].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ b_call_bc_move_exec(BattleScript_BurnTurnDmg);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 7: // spooky nightmares
+ if ((gBattleMons[gActiveBank].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBank].hp != 0)
+ {
+ // missing sleep check
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ b_call_bc_move_exec(BattleScript_NightmareTurnDmg);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 8: // curse
+ if ((gBattleMons[gActiveBank].status2 & STATUS2_CURSED) && gBattleMons[gActiveBank].hp != 0)
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ b_call_bc_move_exec(BattleScript_CurseTurnDmg);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 9: // wrap
+ if ((gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBank].hp != 0)
+ {
+ gBattleMons[gActiveBank].status2 -= 0x2000;
+ if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap
+ {
+ BATTLE_STRUCT->animArg1 = ewram[gActiveBank * 2 + 0x16004];
+ BATTLE_STRUCT->animArg2 = ewram[gActiveBank * 2 + 0x16005];
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = ewram[gActiveBank * 2 + 0x16004];
+ gBattleTextBuff1[3] = ewram[gActiveBank * 2 + 0x16005];
+ gBattleTextBuff1[4] = EOS;
+ gBattlescriptCurrInstr = BattleScript_WrapTurnDmg;
+ gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ else // broke free
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = ewram[gActiveBank * 2 + 0x16004];
+ gBattleTextBuff1[3] = ewram[gActiveBank * 2 + 0x16005];
+ gBattleTextBuff1[4] = EOS;
+ gBattlescriptCurrInstr = BattleScript_WrapEnds;
+ }
+ b_call_bc_move_exec(gBattlescriptCurrInstr);
+ effect++;
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 10: // uproar
+ if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR)
+ {
+ for (gBankAttacker = 0; gBankAttacker < gNoOfAllBanks; gBankAttacker++)
+ {
+ if ((gBattleMons[gBankAttacker].status1 & STATUS_SLEEP)
+ && gBattleMons[gBankAttacker].ability != ABILITY_SOUNDPROOF)
+ {
+ gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP);
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ b_call_bc_move_exec(gUnknown_081D950F);
+ gActiveBank = gBankAttacker;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ break;
+ }
+ }
+ if (gBankAttacker != gNoOfAllBanks)
+ {
+ effect = 2; // a pokemon was awaken
+ break;
+ }
+ else
+ {
+ gBankAttacker = gActiveBank;
+ gBattleMons[gActiveBank].status2 -= 0x10; // uproar timer goes down
+ if (sub_8015660(gActiveBank))
+ {
+ CancelMultiTurnMoves(gActiveBank);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ else if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattleMons[gActiveBank].status2 |= STATUS2_MULTIPLETURNS;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ CancelMultiTurnMoves(gActiveBank);
+ }
+ b_call_bc_move_exec(gUnknown_081D957E);
+ effect = 1;
+ }
+ }
+ if (effect != 2)
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 11: // thrash
+ if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE)
+ {
+ gBattleMons[gActiveBank].status2 -= 0x400;
+ if (sub_8015660(gActiveBank))
+ CancelMultiTurnMoves(gActiveBank);
+ else if (!(gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE)
+ && (gBattleMons[gActiveBank].status2 & STATUS2_MULTIPLETURNS))
+ {
+ gBattleMons[gActiveBank].status2 &= ~(STATUS2_MULTIPLETURNS);
+ if (!(gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION))
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0x47;
+ SetMoveEffect(1, 0);
+ if (gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION)
+ b_call_bc_move_exec(BattleScript_ThrashConfuses);
+ effect++;
+ }
+ }
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 12: // disable
+ if (gDisableStructs[gActiveBank].disableTimer1 != 0)
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gDisableStructs[gActiveBank].disabledMove == gBattleMons[gActiveBank].moves[i])
+ break;
+ }
+ if (i == 4) // pokemon does not have the disabled move anymore
+ {
+ gDisableStructs[gActiveBank].disabledMove = 0;
+ gDisableStructs[gActiveBank].disableTimer1 = 0;
+ }
+ else if (--gDisableStructs[gActiveBank].disableTimer1 == 0) // disable ends
+ {
+ gDisableStructs[gActiveBank].disabledMove = 0;
+ b_call_bc_move_exec(BattleScript_DisabledNoMore);
+ effect++;
+ }
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 13: // encore
+ if (gDisableStructs[gActiveBank].encoreTimer1 != 0)
+ {
+ if (gBattleMons[gActiveBank].moves[gDisableStructs[gActiveBank].encoredMovePos] != gDisableStructs[gActiveBank].encoredMove) // pokemon does not have the encored move anymore
+ {
+ gDisableStructs[gActiveBank].encoredMove = 0;
+ gDisableStructs[gActiveBank].encoreTimer1 = 0;
+ }
+ else if (--gDisableStructs[gActiveBank].encoreTimer1 == 0
+ || gBattleMons[gActiveBank].pp[gDisableStructs[gActiveBank].encoredMovePos] == 0)
+ {
+ gDisableStructs[gActiveBank].encoredMove = 0;
+ gDisableStructs[gActiveBank].encoreTimer1 = 0;
+ b_call_bc_move_exec(BattleScript_EncoredNoMore);
+ effect++;
+ }
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 14: // lock-on decrement
+ if (gStatuses3[gActiveBank] & STATUS3_ALWAYS_HITS)
+ gStatuses3[gActiveBank] -= 0x8;
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 15: // charge
+ if (gDisableStructs[gActiveBank].chargeTimer1 && --gDisableStructs[gActiveBank].chargeTimer1 == 0)
+ gStatuses3[gActiveBank] &= ~STATUS3_CHARGED_UP;
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 16: // taunt
+ if (gDisableStructs[gActiveBank].tauntTimer1)
+ gDisableStructs[gActiveBank].tauntTimer1--;
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 17: // yawn
+ if (gStatuses3[gActiveBank] & STATUS3_YAWN)
+ {
+ gStatuses3[gActiveBank] -= 0x800;
+ if (!(gStatuses3[gActiveBank] & STATUS3_YAWN) && !(gBattleMons[gActiveBank].status1 & STATUS_ANY)
+ && gBattleMons[gActiveBank].ability != ABILITY_VITAL_SPIRIT
+ && gBattleMons[gActiveBank].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBank))
+ {
+ CancelMultiTurnMoves(gActiveBank);
+ gBattleMons[gActiveBank].status1 |= (Random() & 3) + 2;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ gEffectBank = gActiveBank;
+ b_call_bc_move_exec(BattleScript_YawnMakesAsleep);
+ effect++;
+ }
+ }
+ BATTLE_STRUCT->turnEffectsTracker++;
+ break;
+ case 19: // done
+ BATTLE_STRUCT->turnEffectsTracker = 0;
+ BATTLE_STRUCT->turnEffectsBank++;
+ break;
+ }
+ if (effect != 0)
+ return effect;
+ }
+ }
+ gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20);
+ return 0;
+}
+
+bool8 sub_80170DC(void) // handle future sight and perish song
+{
+ gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
+ switch (BATTLE_STRUCT->sub80170DC_Tracker)
+ {
+ case 0: // future sight
+ while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks)
+ {
+ gActiveBank = BATTLE_STRUCT->sub80170DC_Bank;
+ if (gAbsentBankFlags & gBitTable[gActiveBank])
+ BATTLE_STRUCT->sub80170DC_Bank++;
+ else
+ {
+ BATTLE_STRUCT->sub80170DC_Bank++;
+ if (gWishFutureKnock.futureSightCounter[gActiveBank] && --gWishFutureKnock.futureSightCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp)
+ {
+ if (gWishFutureKnock.futureSightMove[gActiveBank] == MOVE_FUTURE_SIGHT)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else //Doom Desire
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = gWishFutureKnock.futureSightMove[gActiveBank];
+ gBattleTextBuff1[3] = gWishFutureKnock.futureSightMove[gActiveBank] >> 8;
+ gBattleTextBuff1[4] = 0xFF;
+ gBankTarget = gActiveBank;
+ gBankAttacker = gWishFutureKnock.futureSightAttacker[gActiveBank];
+ gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBank];
+ gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF;
+ b_call_bc_move_exec(BattleScript_FutureSightHits);
+ return 1;
+ }
+ }
+ }
+ BATTLE_STRUCT->sub80170DC_Tracker = 1;
+ BATTLE_STRUCT->sub80170DC_Bank = 0;
+ case 1: // perish song
+ while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks)
+ {
+ gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->sub80170DC_Bank];
+ if (gAbsentBankFlags & gBitTable[gActiveBank])
+ BATTLE_STRUCT->sub80170DC_Bank++;
+ else
+ {
+ BATTLE_STRUCT->sub80170DC_Bank++;
+ if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 1;
+ gBattleTextBuff1[2] = 1;
+ gBattleTextBuff1[3] = 1;
+ gBattleTextBuff1[4] = gDisableStructs[gActiveBank].perishSong1;
+ gBattleTextBuff1[5] = 0xFF;
+ if (gDisableStructs[gActiveBank].perishSong1 == 0)
+ {
+ gStatuses3[gActiveBank] &= ~(STATUS3_PERISH_SONG);
+ gBattleMoveDamage = gBattleMons[gActiveBank].hp;
+ gBattlescriptCurrInstr = BattleScript_PerishSongHits;
+ }
+ else
+ {
+ gDisableStructs[gActiveBank].perishSong1--;
+ gBattlescriptCurrInstr = BattleScript_PerishSongTimerGoesDown;
+ }
+ b_call_bc_move_exec(gBattlescriptCurrInstr);
+ return 1;
+ }
+ }
+ }
+ break;
+ }
+ gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20);
+ return 0;
+}
+
+#define sub_80173A4_MAX_CASE 7
+
+bool8 sub_80173A4(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ return 0;
+ do
+ {
+ int i;
+ switch (BATTLE_STRUCT->sub80173A4_Tracker)
+ {
+ case 0:
+ BATTLE_STRUCT->unk1605A = 0;
+ BATTLE_STRUCT->sub80173A4_Tracker++;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gAbsentBankFlags & gBitTable[i] && !sub_8018018(i, 6, 6))
+ gAbsentBankFlags &= ~(gBitTable[i]);
+ }
+ case 1:
+ do
+ {
+ gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A;
+ if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A]))
+ {
+ b_call_bc_move_exec(gUnknown_081D8C72);
+ BATTLE_STRUCT->sub80173A4_Tracker = 2;
+ return 1;
+ }
+ } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks);
+ BATTLE_STRUCT->sub80173A4_Tracker = 3;
+ break;
+ case 2:
+ sub_8015740(gBank1);
+ if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks)
+ BATTLE_STRUCT->sub80173A4_Tracker = 3;
+ else
+ BATTLE_STRUCT->sub80173A4_Tracker = 1;
+ break;
+ case 3:
+ BATTLE_STRUCT->unk1605A = 0;
+ BATTLE_STRUCT->sub80173A4_Tracker++;
+ case 4:
+ do
+ {
+ gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched?
+ if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A]))
+ {
+ b_call_bc_move_exec(gUnknown_081D8C7B);
+ BATTLE_STRUCT->sub80173A4_Tracker = 5;
+ return 1;
+ }
+ } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks);
+ BATTLE_STRUCT->sub80173A4_Tracker = 6;
+ break;
+ case 5:
+ if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks)
+ BATTLE_STRUCT->sub80173A4_Tracker = 6;
+ else
+ BATTLE_STRUCT->sub80173A4_Tracker = 4;
+ break;
+ case 6:
+ if (AbilityBattleEffects(9, 0, 0, 0, 0) || AbilityBattleEffects(0xB, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(6, 0, 0, 0, 0))
+ return 1;
+ BATTLE_STRUCT->sub80173A4_Tracker++;
+ break;
+ case 7:
+ break;
+ }
+ } while (BATTLE_STRUCT->sub80173A4_Tracker != sub_80173A4_MAX_CASE);
+ return 0;
+}
+
+void b_clear_atk_up_if_hit_flag_unless_enraged(void)
+{
+ int i;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].status2 & STATUS2_RAGE && gChosenMovesByBanks[i] != MOVE_RAGE)
+ gBattleMons[i].status2 &= ~(STATUS2_RAGE);
+ }
+}
+
+#define ATKCANCELLER_MAX_CASE 14
+
+u8 AtkCanceller_UnableToUseMove(void)
+{
+ u8 effect = 0;
+ s32* bideDmg = &BATTLE_STRUCT->bideDmg;
+ do
+ {
+ switch (BATTLE_STRUCT->atkCancellerTracker)
+ {
+ case 0: // flags clear
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_DESTINY_BOND);
+ gStatuses3[gBankAttacker] &= ~(STATUS3_GRUDGE);
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 1: // check being asleep
+ if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP)
+ {
+ if (UproarWakeUpCheck(gBankAttacker))
+ {
+ gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP);
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ b_movescr_stack_push_cursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
+ effect = 2;
+ }
+ else
+ {
+ u8 toSub;
+ if (gBattleMons[gBankAttacker].ability == ABILITY_EARLY_BIRD)
+ toSub = 2;
+ else
+ toSub = 1;
+ if ((gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) < toSub)
+ gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP);
+ else
+ gBattleMons[gBankAttacker].status1 -= toSub;
+ if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP)
+ {
+ if (gCurrentMove != MOVE_SNORE && gCurrentMove != MOVE_SLEEP_TALK)
+ {
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 2;
+ }
+ }
+ else
+ {
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE);
+ b_movescr_stack_push_cursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
+ effect = 2;
+ }
+ }
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 2: // check being frozen
+ if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE)
+ {
+ if (Random() % 5)
+ {
+ if (gBattleMoves[gCurrentMove].effect != EFFECT_THAW_HIT) // unfreezing via a move effect happens in case 13
+ {
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen;
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ }
+ else
+ {
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ }
+ }
+ else // unfreeze
+ {
+ gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ effect = 2;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 3: // truant
+ if (gBattleMons[gBankAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBankAttacker].truantCounter)
+ {
+ CancelMultiTurnMoves(gBankAttacker);
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ gBattleMoveFlags |= MOVESTATUS_MISSED;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 4: // recharge
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE)
+ {
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_RECHARGE);
+ gDisableStructs[gBankAttacker].rechargeCounter = 0;
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 5: // flinch
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_FLINCHED)
+ {
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_FLINCHED);
+ gProtectStructs[gBankAttacker].flinchImmobility = 1;
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 6: // disabled move
+ if (gDisableStructs[gBankAttacker].disabledMove == gCurrentMove && gDisableStructs[gBankAttacker].disabledMove != 0)
+ {
+ gProtectStructs[gBankAttacker].usedDisabledMove = 1;
+ BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 7: // taunt
+ if (gDisableStructs[gBankAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0)
+ {
+ gProtectStructs[gBankAttacker].usedTauntedMove = 1;
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 8: // imprisoned
+ if (IsImprisoned(gBankAttacker, gCurrentMove))
+ {
+ gProtectStructs[gBankAttacker].usedImprisionedMove = 1;
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 9: // confusion
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION)
+ {
+ gBattleMons[gBankAttacker].status2--;
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION)
+ {
+ if (Random() & 1)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ b_movescr_stack_push_cursor();
+ }
+ else // confusion dmg
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBankTarget = gBankAttacker;
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankAttacker], MOVE_POUND, 0, 40, 0, gBankAttacker, gBankAttacker);
+ gProtectStructs[gBankAttacker].confusionSelfDmg = 1;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ }
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused;
+ }
+ else // snapped out of confusion
+ {
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfusedNoMore;
+ }
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 10: // paralysis
+ if (gBattleMons[gBankAttacker].status1 & STATUS_PARALYSIS && (Random() % 4) == 0)
+ {
+ gProtectStructs[gBankAttacker].prlzImmobility = 1;
+ CancelMultiTurnMoves(gBankAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 11: // infatuation
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION)
+ {
+ BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
+ if (Random() & 1)
+ b_movescr_stack_push_cursor();
+ else
+ {
+ b_movescr_stack_push(BattleScript_MoveUsedIsParalyzedCantAttack);
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gProtectStructs[gBankAttacker].loveImmobility = 1;
+ CancelMultiTurnMoves(gBankAttacker);
+ }
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 12: // bide
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE)
+ {
+ gBattleMons[gBankAttacker].status2 -= 0x100;
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE)
+ gBattlescriptCurrInstr = BattleScript_BideStoringEnergy;
+ else
+ {
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS);
+ if (gTakenDmg[gBankAttacker])
+ {
+ gCurrentMove = MOVE_BIDE;
+ *bideDmg = gTakenDmg[gBankAttacker] * 2;
+ gBankTarget = gTakenDmgBanks[gBankAttacker];
+ if (gAbsentBankFlags & gBitTable[gBankTarget])
+ gBankTarget = GetMoveTarget(MOVE_BIDE, 1);
+ gBattlescriptCurrInstr = BattleScript_BideAttack;
+ }
+ else
+ gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack;
+ }
+ effect = 1;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 13: // move thawing
+ if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE)
+ {
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT)
+ {
+ gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ }
+ effect = 2;
+ }
+ BATTLE_STRUCT->atkCancellerTracker++;
+ break;
+ case 14: // last case
+ break;
+ }
+
+ } while (BATTLE_STRUCT->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0);
+
+ if (effect == 2)
+ {
+ gActiveBank = gBankAttacker;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ return effect;
+}
+
+bool8 sub_8018018(u8 bank, u8 r1, u8 r2)
+{
+ struct Pokemon* party;
+ u8 r7;
+ u8 r6;
+ s32 i;
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ return 0;
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ r7 = sub_803FC34(bank);
+ if (GetBankSide(bank) == 0)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+ r6 = sub_803FBFC(r7);
+ for (i = r6 * 3; i < r6 * 3 + 3; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
+ break;
+ }
+ return (i == r6 * 3 + 3);
+ }
+ else
+ {
+ if (GetBankSide(bank) == 1)
+ {
+ r7 = GetBankByPlayerAI(1);
+ r6 = GetBankByPlayerAI(3);
+ party = gEnemyParty;
+ }
+ else
+ {
+ r7 = GetBankByPlayerAI(0);
+ r6 = GetBankByPlayerAI(2);
+ party = gPlayerParty;
+ }
+ if (r1 == 6)
+ r1 = gBattlePartyID[r7];
+ if (r2 == 6)
+ r2 = gBattlePartyID[r6];
+ for (i = 0; i < 6; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG && i != r1 && i != r2 && i != ewram[r7 + 0x16068] && i != ewram[r6 + 0x16068])
+ break;
+ }
+ return (i == 6);
+ }
+}
+
+enum
+{
+ CASTFORM_NO_CHANGE, //0
+ CASTFORM_TO_NORMAL, //1
+ CASTFORM_TO_FIRE, //2
+ CASTFORM_TO_WATER, //3
+ CASTFORM_TO_ICE, //4
+};
+
+u8 CastformDataTypeChange(u8 bank)
+{
+ u8 formChange = 0;
+ if (gBattleMons[bank].species != SPECIES_CASTFORM || gBattleMons[bank].ability != ABILITY_FORECAST || gBattleMons[bank].hp == 0)
+ return CASTFORM_NO_CHANGE;
+ if (!WEATHER_HAS_EFFECT && gBattleMons[bank].type1 != TYPE_NORMAL && gBattleMons[bank].type2 != TYPE_NORMAL)
+ {
+ gBattleMons[bank].type1 = TYPE_NORMAL;
+ gBattleMons[bank].type2 = TYPE_NORMAL;
+ return CASTFORM_TO_NORMAL;
+ }
+ if (!WEATHER_HAS_EFFECT)
+ return CASTFORM_NO_CHANGE;
+ if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL)) && gBattleMons[bank].type1 != TYPE_NORMAL && gBattleMons[bank].type2 != TYPE_NORMAL)
+ {
+ gBattleMons[bank].type1 = TYPE_NORMAL;
+ gBattleMons[bank].type2 = TYPE_NORMAL;
+ formChange = CASTFORM_TO_NORMAL;
+ }
+ if (gBattleWeather & WEATHER_SUN_ANY && gBattleMons[bank].type1 != TYPE_FIRE && gBattleMons[bank].type2 != TYPE_FIRE)
+ {
+ gBattleMons[bank].type1 = TYPE_FIRE;
+ gBattleMons[bank].type2 = TYPE_FIRE;
+ formChange = CASTFORM_TO_FIRE;
+ }
+ if (gBattleWeather & WEATHER_RAIN_ANY && gBattleMons[bank].type1 != TYPE_WATER && gBattleMons[bank].type2 != TYPE_WATER)
+ {
+ gBattleMons[bank].type1 = TYPE_WATER;
+ gBattleMons[bank].type2 = TYPE_WATER;
+ formChange = CASTFORM_TO_WATER;
+ }
+ if (gBattleWeather & WEATHER_HAIL && gBattleMons[bank].type1 != TYPE_ICE && gBattleMons[bank].type2 != TYPE_ICE)
+ {
+ gBattleMons[bank].type1 = TYPE_ICE;
+ gBattleMons[bank].type2 = TYPE_ICE;
+ formChange = CASTFORM_TO_ICE;
+ }
+ return formChange;
+}
+
+#ifdef NONMATCHING
+
+struct Struct2017100
+{
+ u32 arr[4];
+};
+
+#define ewram17100 (*(struct Struct2017100 *)(ewram + 0x17100))
+
+u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
+{
+ u8 effect = 0;
+ struct Pokemon* pokeAtk;
+ struct Pokemon* pokeDef;
+ u16 speciesAtk;
+ u16 speciesDef;
+ u32 pidAtk;
+ u32 pidDef;
+
+ if (gBankAttacker >= gNoOfAllBanks)
+ gBankAttacker = bank;
+ if (GetBankSide(gBankAttacker) == 0)
+ pokeAtk = &gPlayerParty[gBattlePartyID[gBankAttacker]];
+ else
+ pokeAtk = &gEnemyParty[gBattlePartyID[gBankAttacker]];
+
+ if (gBankTarget >= gNoOfAllBanks)
+ gBankTarget = bank;
+ if (GetBankSide(gBankTarget) == 0)
+ pokeDef = &gPlayerParty[gBattlePartyID[gBankTarget]];
+ else
+ pokeDef = &gEnemyParty[gBattlePartyID[gBankTarget]];
+
+ speciesAtk = GetMonData(pokeAtk, MON_DATA_SPECIES);
+ pidAtk = GetMonData(pokeAtk, MON_DATA_PERSONALITY);
+
+ speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES);
+ pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY);
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // why isn't that check done at the beginning?
+ {
+ //_08018436
+ int i; // r4
+ u16 move;
+ // Hmm...
+ #define moveType moveArg
+ //u16 moveType;
+ u8 side;
+
+ if (special)
+ gLastUsedAbility = special;
+ else
+ gLastUsedAbility = gBattleMons[bank].ability;
+
+ if (moveArg)
+ move = moveArg;
+ else
+ move = gCurrentMove;
+
+ if (BATTLE_STRUCT->dynamicMoveType)
+ moveType = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ else
+ moveType = gBattleMoves[move].type;
+
+ //_080184AC
+ switch (caseID)
+ {
+ case ABILITYEFFECT_ON_SWITCHIN: // 0
+ //_08018518
+ if (gBankAttacker >= gNoOfAllBanks)
+ gBankAttacker = bank;
+ switch (gLastUsedAbility)
+ {
+ case 0xFF: //weather from overworld
+ //_08018586
+ switch (weather_get_current())
+ {
+ case 3:
+ case 5:
+ case 13:
+ if (!(gBattleWeather & WEATHER_RAIN_ANY))
+ {
+ gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT);
+ BATTLE_STRUCT->animArg1 = 0xA;
+ BATTLE_STRUCT->scriptingActive = bank;
+ effect++;
+ }
+ break;
+ case 8:
+ if (!(gBattleWeather & WEATHER_SANDSTORM_ANY))
+ {
+ gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
+ BATTLE_STRUCT->animArg1 = 0xC;
+ BATTLE_STRUCT->scriptingActive = bank;
+ effect++;
+ }
+ break;
+ case 12:
+ if (!(gBattleWeather & WEATHER_SUN_ANY))
+ {
+ gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
+ BATTLE_STRUCT->animArg1 = 0xB;
+ BATTLE_STRUCT->scriptingActive = bank;
+ effect++;
+ }
+ break;
+ }
+ if (effect)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current();
+ b_push_move_exec(gUnknown_081D901D);
+ }
+ break;
+ case ABILITY_DRIZZLE:
+ //_08018680
+ if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY);
+ b_push_move_exec(BattleScript_DrizzleActivates);
+ BATTLE_STRUCT->scriptingActive = bank;
+ effect++;
+ }
+ break;
+ case ABILITY_SAND_STREAM:
+ //_080186B8
+ if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
+ b_push_move_exec(BattleScript_SandstreamActivates);
+ BATTLE_STRUCT->scriptingActive = bank;
+ effect++;
+ }
+ break;
+ case ABILITY_DROUGHT:
+ //_080186F0
+ if (!(gBattleWeather & WEATHER_SUN_PERMANENT))
+ {
+ gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
+ b_push_move_exec(BattleScript_DroughtActivates);
+ BATTLE_STRUCT->scriptingActive = bank;
+ effect++;
+ }
+ break;
+ case ABILITY_INTIMIDATE:
+ //_08018728
+ if (!(gSpecialStatuses[bank].intimidatedPoke))
+ {
+ gStatuses3[bank] |= STATUS3_INTIMIDATE_POKES;
+ gSpecialStatuses[bank].intimidatedPoke = 1;
+ }
+ break;
+ case ABILITY_FORECAST:
+ //_0801875C
+ effect = CastformDataTypeChange(bank);
+ if (effect != 0)
+ {
+ b_push_move_exec(BattleScript_CastformChange);
+ BATTLE_STRUCT->scriptingActive = bank;
+ BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ }
+ break;
+ case ABILITY_TRACE:
+ //_080187A0
+ if (!(gSpecialStatuses[bank].traced))
+ {
+ gStatuses3[bank] |= STATUS3_TRACE;
+ gSpecialStatuses[bank].traced = 1;
+ }
+ break;
+ case ABILITY_CLOUD_NINE:
+ case ABILITY_AIR_LOCK:
+ //_080187DC
+ {
+ u8 i;
+
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ // TODO: i should be in r6 here
+ //asm("":::"r4","r5");
+ effect = CastformDataTypeChange(i);
+ if (effect != 0)
+ {
+ b_push_move_exec(BattleScript_CastformChange);
+ BATTLE_STRUCT->scriptingActive = i;
+ BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_ENDTURN: // 1
+ //_08018814
+ if (gBattleMons[bank].hp != 0)
+ {
+ gBankAttacker = bank;
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_RAIN_DISH:
+ if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY)
+ && gBattleMons[bank].maxHP > gBattleMons[bank].hp)
+ {
+ gLastUsedAbility = ABILITY_RAIN_DISH; //why
+ b_push_move_exec(BattleScript_RainDishActivates);
+ gBattleMoveDamage = gBattleMons[bank].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ effect++;
+ }
+ break;
+ case ABILITY_SHED_SKIN:
+ if ((gBattleMons[bank].status1 & STATUS_ANY) && (Random() % 3) == 0)
+ {
+ if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON))
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ if (gBattleMons[bank].status1 & STATUS_SLEEP)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ if (gBattleMons[bank].status1 & STATUS_BURN)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ if (gBattleMons[bank].status1 & STATUS_FREEZE)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ gBattleMons[bank].status1 = 0;
+ //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); fixed in Emerald
+ BATTLE_STRUCT->scriptingActive = gActiveBank = bank;
+ b_push_move_exec(BattleScript_ShedSkinActivates);
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ effect++;
+ }
+ break;
+ case ABILITY_SPEED_BOOST:
+ if (gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[bank].isFirstTurn != 2)
+ {
+ gBattleMons[bank].statStages[STAT_STAGE_SPEED]++;
+ BATTLE_STRUCT->animArg1 = 0x11;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_push_move_exec(BattleScript_SpeedBoostActivates);
+ BATTLE_STRUCT->scriptingActive = bank;
+ effect++;
+ }
+ break;
+ case ABILITY_TRUANT:
+ gDisableStructs[gBankAttacker].truantCounter ^= 1;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_MOVES_BLOCK: // 2
+ //_08018A40
+ if (gLastUsedAbility == ABILITY_SOUNDPROOF)
+ {
+ for (i = 0; gSoundMovesTable[i] != 0xFFFF; i++)
+ {
+ if (gSoundMovesTable[i] == move)
+ break;
+ }
+ if (gSoundMovesTable[i] != 0xFFFF)
+ {
+ if (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)
+ gHitMarker |= HITMARKER_NO_PPDEDUCT;
+ gBattlescriptCurrInstr = BattleScript_SoundproofProtected;
+ effect = 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_ABSORBING: // 3
+ //_08018AD8
+ if (move)
+ {
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_VOLT_ABSORB:
+ if (moveType == TYPE_ELECTRIC && gBattleMoves[move].power != 0)
+ {
+ if (gProtectStructs[gBankAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_ABSORB:
+ if (moveType == TYPE_WATER && gBattleMoves[move].power != 0)
+ {
+ if (gProtectStructs[gBankAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ effect = 1;
+ }
+ break;
+ case ABILITY_FLASH_FIRE:
+ if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS_FREEZE))
+ {
+ if (!(ewram17100.arr[bank] & 1))
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ if (gProtectStructs[gBankAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ ewram17100.arr[bank] |= 1;
+ effect = 2;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ if (gProtectStructs[gBankAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ effect = 2;
+ }
+ }
+ break;
+ }
+ if (effect == 1)
+ {
+ if (gBattleMons[bank].maxHP == gBattleMons[bank].hp)
+ {
+ if ((gProtectStructs[gBankAttacker].notFirstStrike))
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[bank].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_CONTACT: // 4
+ //_08018CF0
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_COLOR_CHANGE:
+ //_08018DCC
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && move != MOVE_STRUGGLE
+ && gBattleMoves[move].power != 0
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && gBattleMons[bank].type1 != moveType
+ && gBattleMons[bank].type2 != moveType
+ && gBattleMons[bank].hp != 0)
+ {
+ gBattleMons[bank].type1 = moveType;
+ gBattleMons[bank].type2 = moveType;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 3;
+ gBattleTextBuff1[2] = moveType;
+ gBattleTextBuff1[3] = 0xFF;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_ColorChangeActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_ROUGH_SKIN:
+ //_08018E94
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && gBattleMons[gBankAttacker].hp != 0
+ && !gProtectStructs[gBankAttacker].confusionSelfDmg
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT))
+ {
+ gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_RoughSkinActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_EFFECT_SPORE:
+ //_08018F54
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && gBattleMons[gBankAttacker].hp != 0
+ && !gProtectStructs[gBankAttacker].confusionSelfDmg
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 10) == 0)
+ {
+ do
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3;
+ } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0);
+ if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3)
+ gBattleCommunication[MOVE_EFFECT_BYTE] += 2;
+ gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_POISON_POINT:
+ //_0801904C
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && gBattleMons[gBankAttacker].hp != 0
+ && !gProtectStructs[gBankAttacker].confusionSelfDmg
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_STATIC:
+ //_08019128
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && gBattleMons[gBankAttacker].hp != 0
+ && !gProtectStructs[gBankAttacker].confusionSelfDmg
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_FLAME_BODY:
+ //_08019204
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && gBattleMons[gBankAttacker].hp != 0
+ && !gProtectStructs[gBankAttacker].confusionSelfDmg
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && (Random() % 3) == 0)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_CUTE_CHARM:
+ //_080192E0
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && gBattleMons[gBankAttacker].hp != 0
+ && !gProtectStructs[gBankAttacker].confusionSelfDmg
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && gBattleMons[gBankTarget].hp != 0
+ && (Random() % 3) == 0
+ && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef)
+ && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION)
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF
+ && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF)
+ {
+ gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_CuteCharmActivates;
+ effect++;
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_IMMUNITY: // 5
+ //_08019448
+ {
+ #define i bank
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ switch (gBattleMons[i].ability)
+ {
+ case ABILITY_IMMUNITY:
+ if (gBattleMons[i].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | 0xF00)) // TODO: what is 0xF00?
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OWN_TEMPO:
+ if (gBattleMons[i].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ effect = 2;
+ }
+ break;
+ case ABILITY_LIMBER:
+ if (gBattleMons[i].status1 & STATUS_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_INSOMNIA:
+ case ABILITY_VITAL_SPIRIT:
+ if (gBattleMons[i].status1 & STATUS_SLEEP)
+ {
+ gBattleMons[i].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_VEIL:
+ if (gBattleMons[i].status1 & STATUS_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_MAGMA_ARMOR:
+ if (gBattleMons[i].status1 & STATUS_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OBLIVIOUS:
+ if (gBattleMons[i].status2 & STATUS2_INFATUATION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ effect = 3;
+ }
+ break;
+ }
+ if (effect)
+ {
+ switch (effect)
+ {
+ case 1: // status cleared
+ gBattleMons[i].status1 = 0;
+ break;
+ case 2: // get rid of confusion
+ gBattleMons[i].status2 &= ~(STATUS2_CONFUSION);
+ break;
+ case 3: // get rid of infatuation
+ gBattleMons[i].status2 &= ~(STATUS2_INFATUATION);
+ break;
+ }
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = gUnknown_081D9956;
+ BATTLE_STRUCT->scriptingActive = i;
+ gActiveBank = i;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ return effect;
+ }
+ }
+ #undef i
+ }
+ break;
+ case ABILITYEFFECT_FORECAST: // 6
+ //_080197B4
+ {
+ #define i bank
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ABILITY_FORECAST)
+ {
+ effect = CastformDataTypeChange(i);
+ if (effect)
+ {
+ b_push_move_exec(BattleScript_CastformChange);
+ BATTLE_STRUCT->scriptingActive = i;
+ BATTLE_STRUCT->castformToChangeInto = effect - 1;
+ return effect;
+ }
+ }
+ }
+ #undef i
+ }
+ break;
+ case ABILITYEFFECT_SYNCHRONIZE: // 7
+ //_08019804
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+ BATTLE_STRUCT->synchroniseEffect &= 0x3F;
+ if (BATTLE_STRUCT->synchroniseEffect == 6)
+ BATTLE_STRUCT->synchroniseEffect = 2;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40;
+ BATTLE_STRUCT->scriptingActive = gBankTarget;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8
+ //_08019880
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
+ BATTLE_STRUCT->synchroniseEffect &= 0x3F;
+ if (BATTLE_STRUCT->synchroniseEffect == 6)
+ BATTLE_STRUCT->synchroniseEffect = 2;
+ gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect;
+ BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITYEFFECT_INTIMIDATE1: // 9
+ //_080198FC
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES)
+ {
+ gLastUsedAbility = ABILITY_INTIMIDATE;
+ gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
+ b_push_move_exec(gUnknown_081D978C);
+ BATTLE_STRUCT->intimidateBank = i;
+ effect++;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_TRACE: // 11
+ //_08019940
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE))
+ {
+ u8 opposite = (GetBankIdentity(i) ^ 1) & 1;
+ u8 target1 = GetBankByPlayerAI(opposite);
+ u8 target2 = GetBankByPlayerAI(opposite + 2);
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0
+ && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0)
+ {
+ //_080199AE
+ gActiveBank = GetBankByPlayerAI(((Random() & 1) * 2) | opposite);
+ gBattleMons[i].ability = gBattleMons[gActiveBank].ability;
+ gLastUsedAbility = gBattleMons[gActiveBank].ability;
+ effect++;
+ }
+ else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0)
+ {
+ //_08019A34
+ gActiveBank = target1;
+ gBattleMons[i].ability = gBattleMons[gActiveBank].ability;
+ gLastUsedAbility = gBattleMons[gActiveBank].ability;
+ effect++;
+ }
+ else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0)
+ {
+ //_08019A78
+ gActiveBank = target2;
+ gBattleMons[i].ability = gBattleMons[gActiveBank].ability;
+ gLastUsedAbility = gBattleMons[gActiveBank].ability;
+ effect++;
+ }
+ }
+ else
+ //_08019ABC
+ {
+ gActiveBank = target1;
+ if (gBattleMons[target1].ability && gBattleMons[target1].hp)
+ {
+ gBattleMons[i].ability = gBattleMons[target1].ability;
+ gLastUsedAbility = gBattleMons[target1].ability;
+ effect++;
+ }
+ }
+ if (effect)
+ {
+ b_push_move_exec(BattleScript_TraceActivates);
+ gStatuses3[i] &= ~(STATUS3_TRACE);
+ BATTLE_STRUCT->scriptingActive = i;
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 4;
+ gBattleTextBuff1[2] = gActiveBank;
+ gBattleTextBuff1[3] = gBattlePartyID[gActiveBank];
+ gBattleTextBuff1[4] = EOS;
+
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 9;
+ gBattleTextBuff2[2] = gLastUsedAbility;
+ gBattleTextBuff2[3] = EOS;
+ break;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_INTIMIDATE2: // 10
+ //_08019B1C
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES))
+ {
+ gLastUsedAbility = ABILITY_INTIMIDATE;
+ gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = gUnknown_081D9795;
+ BATTLE_STRUCT->intimidateBank = i;
+ effect++;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12
+ //_08019B60
+ side = GetBankSide(bank);
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (GetBankSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_BANK_SIDE: // 13
+ //_08019BBC
+ side = GetBankSide(bank);
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (GetBankSide(i) == side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_FIELD_SPORT: // 14
+ //_08019C18
+ switch (gLastUsedAbility)
+ {
+ case 0xFD:
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gStatuses3[i] & STATUS3_MUDSPORT)
+ effect = i + 1;
+ }
+ break;
+ case 0xFE:
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gStatuses3[i] & STATUS3_WATERSPORT)
+ effect = i + 1;
+ }
+ break;
+ default:
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_CHECK_ON_FIELD: // 19
+ //_08019CD4
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK: // 15
+ //_08019D18
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ability && i != bank)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_OTHER_SIZE: // 16
+ //_08019D5C
+ side = GetBankSide(bank);
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (GetBankSide(i) != side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect++;
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_BANK_SIDE: // 17
+ //_08019DB8
+ side = GetBankSide(bank);
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (GetBankSide(i) == side && gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect++;
+ }
+ }
+ break;
+ case ABILITYEFFECT_COUNT_ON_FIELD: // 18
+ //_08019F44
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].ability == ability && i != bank)
+ {
+ gLastUsedAbility = ability;
+ effect++;
+ }
+ }
+ break;
+ }
+ //_08019F76
+ if (effect && caseID < 0xC && gLastUsedAbility != 0xFF)
+ RecordAbilityBattle(bank, gLastUsedAbility);
+ }
+
+ return effect;
+}
+
+#else
+__attribute__((naked))
+u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x28\n\
+ ldr r4, [sp, 0x48]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r10, r1\n\
+ lsls r2, 24\n\
+ lsrs r6, r2, 24\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ mov r8, r3\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ movs r0, 0\n\
+ mov r9, r0\n\
+ ldr r5, _08018380 @ =gBankAttacker\n\
+ ldr r1, _08018384 @ =gNoOfAllBanks\n\
+ ldrb r0, [r5]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _08018360\n\
+ mov r1, r10\n\
+ strb r1, [r5]\n\
+_08018360:\n\
+ ldrb r0, [r5]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08018390\n\
+ ldr r1, _08018388 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _0801838C @ =gPlayerParty\n\
+ b _080183A0\n\
+ .align 2, 0\n\
+_08018380: .4byte gBankAttacker\n\
+_08018384: .4byte gNoOfAllBanks\n\
+_08018388: .4byte gBattlePartyID\n\
+_0801838C: .4byte gPlayerParty\n\
+_08018390:\n\
+ ldr r1, _080183D0 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _080183D4 @ =gEnemyParty\n\
+_080183A0:\n\
+ adds r7, r1, r0\n\
+ ldr r5, _080183D8 @ =gBankTarget\n\
+ ldr r1, _080183DC @ =gNoOfAllBanks\n\
+ ldrb r0, [r5]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _080183B2\n\
+ mov r2, r10\n\
+ strb r2, [r5]\n\
+_080183B2:\n\
+ ldrb r0, [r5]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080183E4\n\
+ ldr r1, _080183D0 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _080183E0 @ =gPlayerParty\n\
+ b _080183F4\n\
+ .align 2, 0\n\
+_080183D0: .4byte gBattlePartyID\n\
+_080183D4: .4byte gEnemyParty\n\
+_080183D8: .4byte gBankTarget\n\
+_080183DC: .4byte gNoOfAllBanks\n\
+_080183E0: .4byte gPlayerParty\n\
+_080183E4:\n\
+ ldr r1, _08018444 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _08018448 @ =gEnemyParty\n\
+_080183F4:\n\
+ adds r5, r1, r0\n\
+ adds r0, r7, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0\n\
+ bl GetMonData\n\
+ str r0, [sp, 0x10]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0xC]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ bl GetMonData\n\
+ str r0, [sp, 0x14]\n\
+ ldr r0, _0801844C @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018436\n\
+ bl _08019F92\n\
+_08018436:\n\
+ mov r3, r8\n\
+ cmp r3, 0\n\
+ beq _08018454\n\
+ ldr r0, _08018450 @ =gLastUsedAbility\n\
+ strb r3, [r0]\n\
+ mov r8, r0\n\
+ b _0801846A\n\
+ .align 2, 0\n\
+_08018444: .4byte gBattlePartyID\n\
+_08018448: .4byte gEnemyParty\n\
+_0801844C: .4byte gBattleTypeFlags\n\
+_08018450: .4byte gLastUsedAbility\n\
+_08018454:\n\
+ ldr r2, _08018474 @ =gLastUsedAbility\n\
+ ldr r1, _08018478 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r0, r1\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r2]\n\
+ mov r8, r2\n\
+_0801846A:\n\
+ cmp r4, 0\n\
+ beq _0801847C\n\
+ adds r3, r4, 0\n\
+ b _08018480\n\
+ .align 2, 0\n\
+_08018474: .4byte gLastUsedAbility\n\
+_08018478: .4byte gBattleMons\n\
+_0801847C:\n\
+ ldr r0, _08018494 @ =gCurrentMove\n\
+ ldrh r3, [r0]\n\
+_08018480:\n\
+ ldr r1, _08018498 @ =0x02000000\n\
+ ldr r2, _0801849C @ =0x0001601c\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ adds r7, r1, 0\n\
+ cmp r0, 0\n\
+ beq _080184A0\n\
+ movs r4, 0x3F\n\
+ ands r4, r0\n\
+ b _080184AC\n\
+ .align 2, 0\n\
+_08018494: .4byte gCurrentMove\n\
+_08018498: .4byte 0x02000000\n\
+_0801849C: .4byte 0x0001601c\n\
+_080184A0:\n\
+ ldr r1, _080184C0 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r4, [r0, 0x2]\n\
+_080184AC:\n\
+ ldr r5, [sp, 0x4]\n\
+ cmp r5, 0x13\n\
+ bls _080184B6\n\
+ bl _08019F76\n\
+_080184B6:\n\
+ lsls r0, r5, 2\n\
+ ldr r1, _080184C4 @ =_080184C8\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080184C0: .4byte gBattleMoves\n\
+_080184C4: .4byte _080184C8\n\
+ .align 2, 0\n\
+_080184C8:\n\
+ .4byte _08018518\n\
+ .4byte _08018814\n\
+ .4byte _08018A40\n\
+ .4byte _08018AD8\n\
+ .4byte _08018CF0\n\
+ .4byte _08019448\n\
+ .4byte _080197B4\n\
+ .4byte _08019804\n\
+ .4byte _08019880\n\
+ .4byte _080198FC\n\
+ .4byte _08019B1C\n\
+ .4byte _08019940\n\
+ .4byte _08019B60\n\
+ .4byte _08019BBC\n\
+ .4byte _08019C18\n\
+ .4byte _08019D18\n\
+ .4byte _08019D5C\n\
+ .4byte _08019DB8\n\
+ .4byte _08019F44\n\
+ .4byte _08019CD4\n\
+_08018518:\n\
+ ldr r2, _0801854C @ =gBankAttacker\n\
+ ldr r0, _08018550 @ =gNoOfAllBanks\n\
+ ldrb r1, [r2]\n\
+ adds r5, r0, 0\n\
+ ldrb r0, [r5]\n\
+ cmp r1, r0\n\
+ bcc _0801852A\n\
+ mov r1, r10\n\
+ strb r1, [r2]\n\
+_0801852A:\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ cmp r0, 0x2D\n\
+ bne _08018534\n\
+ b _080186B8\n\
+_08018534:\n\
+ cmp r0, 0x2D\n\
+ bgt _08018564\n\
+ cmp r0, 0xD\n\
+ bne _0801853E\n\
+ b _080187DC\n\
+_0801853E:\n\
+ cmp r0, 0xD\n\
+ bgt _08018554\n\
+ cmp r0, 0x2\n\
+ bne _08018548\n\
+ b _08018680\n\
+_08018548:\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_0801854C: .4byte gBankAttacker\n\
+_08018550: .4byte gNoOfAllBanks\n\
+_08018554:\n\
+ cmp r0, 0x16\n\
+ bne _0801855A\n\
+ b _08018728\n\
+_0801855A:\n\
+ cmp r0, 0x24\n\
+ bne _08018560\n\
+ b _080187A0\n\
+_08018560:\n\
+ bl _08019F76\n\
+_08018564:\n\
+ cmp r0, 0x46\n\
+ bne _0801856A\n\
+ b _080186F0\n\
+_0801856A:\n\
+ cmp r0, 0x46\n\
+ bgt _08018578\n\
+ cmp r0, 0x3B\n\
+ bne _08018574\n\
+ b _0801875C\n\
+_08018574:\n\
+ bl _08019F76\n\
+_08018578:\n\
+ cmp r0, 0x4D\n\
+ bne _0801857E\n\
+ b _080187DC\n\
+_0801857E:\n\
+ cmp r0, 0xFF\n\
+ beq _08018586\n\
+ bl _08019F76\n\
+_08018586:\n\
+ bl weather_get_current\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ subs r0, 0x3\n\
+ cmp r0, 0xA\n\
+ bhi _0801864C\n\
+ lsls r0, 2\n\
+ ldr r1, _080185A0 @ =_080185A4\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080185A0: .4byte _080185A4\n\
+ .align 2, 0\n\
+_080185A4:\n\
+ .4byte _080185D0\n\
+ .4byte _0801864C\n\
+ .4byte _080185D0\n\
+ .4byte _0801864C\n\
+ .4byte _0801864C\n\
+ .4byte _080185F8\n\
+ .4byte _0801864C\n\
+ .4byte _0801864C\n\
+ .4byte _0801864C\n\
+ .4byte _08018620\n\
+ .4byte _080185D0\n\
+_080185D0:\n\
+ ldr r2, _080185EC @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801864C\n\
+ movs r0, 0x5\n\
+ strh r0, [r2]\n\
+ ldr r0, _080185F0 @ =0x02000000\n\
+ ldr r3, _080185F4 @ =0x000160a4\n\
+ adds r2, r0, r3\n\
+ movs r1, 0xA\n\
+ b _08018638\n\
+ .align 2, 0\n\
+_080185EC: .4byte gBattleWeather\n\
+_080185F0: .4byte 0x02000000\n\
+_080185F4: .4byte 0x000160a4\n\
+_080185F8:\n\
+ ldr r3, _08018614 @ =gBattleWeather\n\
+ ldrh r1, [r3]\n\
+ movs r2, 0x18\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801864C\n\
+ strh r2, [r3]\n\
+ ldr r0, _08018618 @ =0x02000000\n\
+ ldr r3, _0801861C @ =0x000160a4\n\
+ adds r2, r0, r3\n\
+ movs r1, 0xC\n\
+ b _08018638\n\
+ .align 2, 0\n\
+_08018614: .4byte gBattleWeather\n\
+_08018618: .4byte 0x02000000\n\
+_0801861C: .4byte 0x000160a4\n\
+_08018620:\n\
+ ldr r3, _08018668 @ =gBattleWeather\n\
+ ldrh r1, [r3]\n\
+ movs r2, 0x60\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801864C\n\
+ strh r2, [r3]\n\
+ ldr r0, _0801866C @ =0x02000000\n\
+ ldr r3, _08018670 @ =0x000160a4\n\
+ adds r2, r0, r3\n\
+ movs r1, 0xB\n\
+_08018638:\n\
+ strb r1, [r2]\n\
+ ldr r5, _08018674 @ =0x00016003\n\
+ adds r0, r5\n\
+ mov r1, r10\n\
+ strb r1, [r0]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_0801864C:\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ bne _08018656\n\
+ bl _08019F92\n\
+_08018656:\n\
+ bl weather_get_current\n\
+ ldr r1, _08018678 @ =gBattleCommunication\n\
+ strb r0, [r1, 0x5]\n\
+ ldr r0, _0801867C @ =gUnknown_081D901D\n\
+ bl b_push_move_exec\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018668: .4byte gBattleWeather\n\
+_0801866C: .4byte 0x02000000\n\
+_08018670: .4byte 0x000160a4\n\
+_08018674: .4byte 0x00016003\n\
+_08018678: .4byte gBattleCommunication\n\
+_0801867C: .4byte gUnknown_081D901D\n\
+_08018680:\n\
+ ldr r2, _080186A8 @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018690\n\
+ bl _08019F76\n\
+_08018690:\n\
+ movs r0, 0x5\n\
+ strh r0, [r2]\n\
+ ldr r0, _080186AC @ =BattleScript_DrizzleActivates\n\
+ bl b_push_move_exec\n\
+ ldr r0, _080186B0 @ =0x02000000\n\
+ ldr r3, _080186B4 @ =0x00016003\n\
+ adds r0, r3\n\
+ mov r5, r10\n\
+ strb r5, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_080186A8: .4byte gBattleWeather\n\
+_080186AC: .4byte BattleScript_DrizzleActivates\n\
+_080186B0: .4byte 0x02000000\n\
+_080186B4: .4byte 0x00016003\n\
+_080186B8:\n\
+ ldr r2, _080186E0 @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080186C8\n\
+ bl _08019F76\n\
+_080186C8:\n\
+ movs r0, 0x18\n\
+ strh r0, [r2]\n\
+ ldr r0, _080186E4 @ =BattleScript_SandstreamActivates\n\
+ bl b_push_move_exec\n\
+ ldr r0, _080186E8 @ =0x02000000\n\
+ ldr r1, _080186EC @ =0x00016003\n\
+ adds r0, r1\n\
+ mov r2, r10\n\
+ strb r2, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_080186E0: .4byte gBattleWeather\n\
+_080186E4: .4byte BattleScript_SandstreamActivates\n\
+_080186E8: .4byte 0x02000000\n\
+_080186EC: .4byte 0x00016003\n\
+_080186F0:\n\
+ ldr r2, _08018718 @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018700\n\
+ bl _08019F76\n\
+_08018700:\n\
+ movs r0, 0x60\n\
+ strh r0, [r2]\n\
+ ldr r0, _0801871C @ =BattleScript_DroughtActivates\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08018720 @ =0x02000000\n\
+ ldr r3, _08018724 @ =0x00016003\n\
+ adds r0, r3\n\
+ mov r5, r10\n\
+ strb r5, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_08018718: .4byte gBattleWeather\n\
+_0801871C: .4byte BattleScript_DroughtActivates\n\
+_08018720: .4byte 0x02000000\n\
+_08018724: .4byte 0x00016003\n\
+_08018728:\n\
+ ldr r0, _08018754 @ =gSpecialStatuses\n\
+ mov r1, r10\n\
+ lsls r2, r1, 2\n\
+ adds r1, r2, r1\n\
+ lsls r1, 2\n\
+ adds r3, r1, r0\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018740\n\
+ bl _08019F76\n\
+_08018740:\n\
+ ldr r1, _08018758 @ =gStatuses3\n\
+ adds r1, r2, r1\n\
+ ldr r0, [r1]\n\
+ movs r2, 0x80\n\
+ lsls r2, 12\n\
+ orrs r0, r2\n\
+ str r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x8\n\
+ b _080187CA\n\
+ .align 2, 0\n\
+_08018754: .4byte gSpecialStatuses\n\
+_08018758: .4byte gStatuses3\n\
+_0801875C:\n\
+ mov r0, r10\n\
+ bl CastformDataTypeChange\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ cmp r0, 0\n\
+ bne _08018770\n\
+ bl _08019F92\n\
+_08018770:\n\
+ ldr r0, _08018790 @ =BattleScript_CastformChange\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08018794 @ =0x02000000\n\
+ ldr r2, _08018798 @ =0x00016003\n\
+ adds r1, r0, r2\n\
+ mov r3, r10\n\
+ strb r3, [r1]\n\
+ mov r1, r9\n\
+ subs r1, 0x1\n\
+ ldr r5, _0801879C @ =0x0001609b\n\
+ adds r0, r5\n\
+ strb r1, [r0]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018790: .4byte BattleScript_CastformChange\n\
+_08018794: .4byte 0x02000000\n\
+_08018798: .4byte 0x00016003\n\
+_0801879C: .4byte 0x0001609b\n\
+_080187A0:\n\
+ ldr r0, _080187D4 @ =gSpecialStatuses\n\
+ mov r1, r10\n\
+ lsls r2, r1, 2\n\
+ adds r1, r2, r1\n\
+ lsls r1, 2\n\
+ adds r3, r1, r0\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 27\n\
+ cmp r0, 0\n\
+ bge _080187B8\n\
+ bl _08019F76\n\
+_080187B8:\n\
+ ldr r1, _080187D8 @ =gStatuses3\n\
+ adds r1, r2, r1\n\
+ ldr r0, [r1]\n\
+ movs r2, 0x80\n\
+ lsls r2, 13\n\
+ orrs r0, r2\n\
+ str r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x10\n\
+_080187CA:\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_080187D4: .4byte gSpecialStatuses\n\
+_080187D8: .4byte gStatuses3\n\
+_080187DC:\n\
+ movs r6, 0\n\
+ ldrb r5, [r5]\n\
+ cmp r6, r5\n\
+ bcc _080187E8\n\
+ bl _08019F76\n\
+_080187E8:\n\
+ adds r0, r6, 0\n\
+ bl CastformDataTypeChange\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ cmp r0, 0\n\
+ beq _080187FC\n\
+ bl _08019E14\n\
+_080187FC:\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r0, _08018810 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ bcc _080187E8\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018810: .4byte gNoOfAllBanks\n\
+_08018814:\n\
+ ldr r2, _08018844 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r4, r1, r2\n\
+ ldrh r0, [r4, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018828\n\
+ bl _08019F76\n\
+_08018828:\n\
+ ldr r0, _08018848 @ =gBankAttacker\n\
+ mov r3, r10\n\
+ strb r3, [r0]\n\
+ mov r3, r8\n\
+ ldrb r5, [r3]\n\
+ cmp r5, 0x2C\n\
+ beq _0801885A\n\
+ cmp r5, 0x2C\n\
+ bgt _0801884C\n\
+ cmp r5, 0x3\n\
+ bne _08018840\n\
+ b _080189B8\n\
+_08018840:\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018844: .4byte gBattleMons\n\
+_08018848: .4byte gBankAttacker\n\
+_0801884C:\n\
+ cmp r5, 0x36\n\
+ bne _08018852\n\
+ b _08018A18\n\
+_08018852:\n\
+ cmp r5, 0x3D\n\
+ beq _080188DC\n\
+ bl _08019F76\n\
+_0801885A:\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0x13\n\
+ movs r1, 0\n\
+ movs r2, 0xD\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0\n\
+ beq _08018876\n\
+ bl _08019F76\n\
+_08018876:\n\
+ str r0, [sp]\n\
+ movs r0, 0x13\n\
+ movs r1, 0\n\
+ movs r2, 0x4D\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0801888E\n\
+ bl _08019F76\n\
+_0801888E:\n\
+ ldr r0, _080188D0 @ =gBattleWeather\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801889E\n\
+ bl _08019F76\n\
+_0801889E:\n\
+ ldrh r0, [r4, 0x2C]\n\
+ ldrh r1, [r4, 0x28]\n\
+ cmp r0, r1\n\
+ bhi _080188AA\n\
+ bl _08019F76\n\
+_080188AA:\n\
+ mov r2, r8\n\
+ strb r5, [r2]\n\
+ ldr r0, _080188D4 @ =BattleScript_RainDishActivates\n\
+ bl b_push_move_exec\n\
+ ldr r1, _080188D8 @ =gBattleMoveDamage\n\
+ ldrh r0, [r4, 0x2C]\n\
+ lsrs r0, 4\n\
+ str r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _080188C4\n\
+ movs r0, 0x1\n\
+ str r0, [r1]\n\
+_080188C4:\n\
+ ldr r0, [r1]\n\
+ negs r0, r0\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_080188D0: .4byte gBattleWeather\n\
+_080188D4: .4byte BattleScript_RainDishActivates\n\
+_080188D8: .4byte gBattleMoveDamage\n\
+_080188DC:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x4C\n\
+ adds r5, r1, r0\n\
+ ldrb r0, [r5]\n\
+ cmp r0, 0\n\
+ bne _080188EC\n\
+ bl _08019F76\n\
+_080188EC:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ cmp r4, 0\n\
+ beq _08018906\n\
+ bl _08019F76\n\
+_08018906:\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x88\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018918\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn\n\
+ bl StringCopy\n\
+_08018918:\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801892A\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _08018998 @ =gStatusConditionString_SleepJpn\n\
+ bl StringCopy\n\
+_0801892A:\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801893C\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn\n\
+ bl StringCopy\n\
+_0801893C:\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801894E\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn\n\
+ bl StringCopy\n\
+_0801894E:\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018960\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _080189A4 @ =gStatusConditionString_IceJpn\n\
+ bl StringCopy\n\
+_08018960:\n\
+ str r4, [r5]\n\
+ ldr r0, _080189A8 @ =0x02000000\n\
+ ldr r4, _080189AC @ =gActiveBank\n\
+ mov r3, r10\n\
+ strb r3, [r4]\n\
+ ldr r1, _080189B0 @ =0x00016003\n\
+ adds r0, r1\n\
+ strb r3, [r0]\n\
+ ldr r0, _080189B4 @ =BattleScript_ShedSkinActivates\n\
+ bl b_push_move_exec\n\
+ str r5, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x28\n\
+ movs r2, 0\n\
+ movs r3, 0x4\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_08018990: .4byte gBattleTextBuff1\n\
+_08018994: .4byte gStatusConditionString_PoisonJpn\n\
+_08018998: .4byte gStatusConditionString_SleepJpn\n\
+_0801899C: .4byte gStatusConditionString_ParalysisJpn\n\
+_080189A0: .4byte gStatusConditionString_BurnJpn\n\
+_080189A4: .4byte gStatusConditionString_IceJpn\n\
+_080189A8: .4byte 0x02000000\n\
+_080189AC: .4byte gActiveBank\n\
+_080189B0: .4byte 0x00016003\n\
+_080189B4: .4byte BattleScript_ShedSkinActivates\n\
+_080189B8:\n\
+ ldrb r2, [r4, 0x1B]\n\
+ movs r0, 0x1B\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0xB\n\
+ ble _080189C6\n\
+ bl _08019F76\n\
+_080189C6:\n\
+ ldr r0, _08018A04 @ =gDisableStructs\n\
+ mov r3, r10\n\
+ lsls r1, r3, 3\n\
+ subs r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x16]\n\
+ cmp r0, 0x2\n\
+ bne _080189DC\n\
+ bl _08019F76\n\
+_080189DC:\n\
+ adds r0, r2, 0x1\n\
+ movs r2, 0\n\
+ strb r0, [r4, 0x1B]\n\
+ ldr r5, _08018A08 @ =0x000160a4\n\
+ adds r1, r7, r5\n\
+ movs r0, 0x11\n\
+ strb r0, [r1]\n\
+ ldr r1, _08018A0C @ =0x000160a5\n\
+ adds r0, r7, r1\n\
+ strb r2, [r0]\n\
+ ldr r0, _08018A10 @ =BattleScript_SpeedBoostActivates\n\
+ bl b_push_move_exec\n\
+ ldr r2, _08018A14 @ =0x00016003\n\
+ adds r0, r7, r2\n\
+ mov r3, r10\n\
+ strb r3, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_08018A04: .4byte gDisableStructs\n\
+_08018A08: .4byte 0x000160a4\n\
+_08018A0C: .4byte 0x000160a5\n\
+_08018A10: .4byte BattleScript_SpeedBoostActivates\n\
+_08018A14: .4byte 0x00016003\n\
+_08018A18:\n\
+ ldr r2, _08018A3C @ =gDisableStructs\n\
+ ldrb r0, [r0]\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r2\n\
+ ldrb r3, [r1, 0x18]\n\
+ lsls r0, r3, 31\n\
+ lsrs r0, 31\n\
+ movs r2, 0x1\n\
+ eors r2, r0\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ ands r0, r3\n\
+ orrs r0, r2\n\
+ strb r0, [r1, 0x18]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018A3C: .4byte gDisableStructs\n\
+_08018A40:\n\
+ mov r5, r8\n\
+ ldrb r0, [r5]\n\
+ cmp r0, 0x2B\n\
+ beq _08018A4C\n\
+ bl _08019F76\n\
+_08018A4C:\n\
+ movs r4, 0\n\
+ ldr r0, _08018ABC @ =gSoundMovesTable\n\
+ ldrh r2, [r0]\n\
+ ldr r5, _08018AC0 @ =0x0000ffff\n\
+ adds r1, r0, 0\n\
+ cmp r2, r5\n\
+ bne _08018A5E\n\
+ bl _08019F76\n\
+_08018A5E:\n\
+ cmp r2, r3\n\
+ beq _08018A76\n\
+ adds r2, r1, 0\n\
+_08018A64:\n\
+ adds r2, 0x2\n\
+ adds r4, 0x1\n\
+ ldrh r0, [r2]\n\
+ cmp r0, r5\n\
+ bne _08018A72\n\
+ bl _08019F76\n\
+_08018A72:\n\
+ cmp r0, r3\n\
+ bne _08018A64\n\
+_08018A76:\n\
+ lsls r0, r4, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _08018AC0 @ =0x0000ffff\n\
+ cmp r1, r0\n\
+ bne _08018A86\n\
+ bl _08019F76\n\
+_08018A86:\n\
+ ldr r1, _08018AC4 @ =gBattleMons\n\
+ ldr r0, _08018AC8 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 5\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018AAC\n\
+ ldr r0, _08018ACC @ =gHitMarker\n\
+ ldr r1, [r0]\n\
+ movs r2, 0x80\n\
+ lsls r2, 4\n\
+ orrs r1, r2\n\
+ str r1, [r0]\n\
+_08018AAC:\n\
+ ldr r1, _08018AD0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018AD4 @ =BattleScript_SoundproofProtected\n\
+ str r0, [r1]\n\
+ movs r0, 0x1\n\
+ mov r9, r0\n\
+ bl _08019F7C\n\
+ .align 2, 0\n\
+_08018ABC: .4byte gSoundMovesTable\n\
+_08018AC0: .4byte 0x0000ffff\n\
+_08018AC4: .4byte gBattleMons\n\
+_08018AC8: .4byte gBankAttacker\n\
+_08018ACC: .4byte gHitMarker\n\
+_08018AD0: .4byte gBattlescriptCurrInstr\n\
+_08018AD4: .4byte BattleScript_SoundproofProtected\n\
+_08018AD8:\n\
+ cmp r3, 0\n\
+ bne _08018AE0\n\
+ bl _08019F76\n\
+_08018AE0:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xB\n\
+ beq _08018B50\n\
+ cmp r0, 0xB\n\
+ bgt _08018AF2\n\
+ cmp r0, 0xA\n\
+ beq _08018AF8\n\
+ b _08018C6A\n\
+_08018AF2:\n\
+ cmp r0, 0x12\n\
+ beq _08018BA8\n\
+ b _08018C6A\n\
+_08018AF8:\n\
+ cmp r4, 0xD\n\
+ beq _08018AFE\n\
+ b _08018C6A\n\
+_08018AFE:\n\
+ ldr r0, _08018B28 @ =gBattleMoves\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0\n\
+ bne _08018B10\n\
+ b _08018C6A\n\
+_08018B10:\n\
+ ldr r1, _08018B2C @ =gProtectStructs\n\
+ ldr r0, _08018B30 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018B3C\n\
+ ldr r1, _08018B34 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018B38 @ =BattleScript_MoveHPDrain\n\
+ b _08018B40\n\
+ .align 2, 0\n\
+_08018B28: .4byte gBattleMoves\n\
+_08018B2C: .4byte gProtectStructs\n\
+_08018B30: .4byte gBankAttacker\n\
+_08018B34: .4byte gBattlescriptCurrInstr\n\
+_08018B38: .4byte BattleScript_MoveHPDrain\n\
+_08018B3C:\n\
+ ldr r1, _08018B48 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018B4C @ =BattleScript_MoveHPDrain_PPLoss\n\
+_08018B40:\n\
+ str r0, [r1]\n\
+ movs r2, 0x1\n\
+ b _08018C68\n\
+ .align 2, 0\n\
+_08018B48: .4byte gBattlescriptCurrInstr\n\
+_08018B4C: .4byte BattleScript_MoveHPDrain_PPLoss\n\
+_08018B50:\n\
+ cmp r4, 0xB\n\
+ beq _08018B56\n\
+ b _08018C6A\n\
+_08018B56:\n\
+ ldr r0, _08018B80 @ =gBattleMoves\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0\n\
+ bne _08018B68\n\
+ b _08018C6A\n\
+_08018B68:\n\
+ ldr r1, _08018B84 @ =gProtectStructs\n\
+ ldr r0, _08018B88 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018B94\n\
+ ldr r1, _08018B8C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018B90 @ =BattleScript_MoveHPDrain\n\
+ b _08018B98\n\
+ .align 2, 0\n\
+_08018B80: .4byte gBattleMoves\n\
+_08018B84: .4byte gProtectStructs\n\
+_08018B88: .4byte gBankAttacker\n\
+_08018B8C: .4byte gBattlescriptCurrInstr\n\
+_08018B90: .4byte BattleScript_MoveHPDrain\n\
+_08018B94:\n\
+ ldr r1, _08018BA0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018BA4 @ =BattleScript_MoveHPDrain_PPLoss\n\
+_08018B98:\n\
+ str r0, [r1]\n\
+ movs r3, 0x1\n\
+ mov r9, r3\n\
+ b _08018C6A\n\
+ .align 2, 0\n\
+_08018BA0: .4byte gBattlescriptCurrInstr\n\
+_08018BA4: .4byte BattleScript_MoveHPDrain_PPLoss\n\
+_08018BA8:\n\
+ cmp r4, 0xA\n\
+ bne _08018C6A\n\
+ ldr r1, _08018BF4 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08018C6A\n\
+ ldr r2, _08018BF8 @ =0x02017100\n\
+ mov r0, r10\n\
+ lsls r1, r0, 2\n\
+ adds r0, r1, r2\n\
+ ldr r3, [r0]\n\
+ movs r4, 0x1\n\
+ ands r3, r4\n\
+ adds r5, r1, 0\n\
+ cmp r3, 0\n\
+ bne _08018C30\n\
+ ldr r0, _08018BFC @ =gBattleCommunication\n\
+ strb r3, [r0, 0x5]\n\
+ ldr r1, _08018C00 @ =gProtectStructs\n\
+ ldr r0, _08018C04 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018C10\n\
+ ldr r1, _08018C08 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018C0C @ =BattleScript_FlashFireBoost\n\
+ b _08018C14\n\
+ .align 2, 0\n\
+_08018BF4: .4byte gBattleMons\n\
+_08018BF8: .4byte 0x02017100\n\
+_08018BFC: .4byte gBattleCommunication\n\
+_08018C00: .4byte gProtectStructs\n\
+_08018C04: .4byte gBankAttacker\n\
+_08018C08: .4byte gBattlescriptCurrInstr\n\
+_08018C0C: .4byte BattleScript_FlashFireBoost\n\
+_08018C10:\n\
+ ldr r1, _08018C28 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018C2C @ =BattleScript_FlashFireBoost_PPLoss\n\
+_08018C14:\n\
+ str r0, [r1]\n\
+ adds r0, r5, r2\n\
+ ldr r1, [r0]\n\
+ movs r2, 0x1\n\
+ orrs r1, r2\n\
+ str r1, [r0]\n\
+ movs r1, 0x2\n\
+ mov r9, r1\n\
+ b _08018C6A\n\
+ .align 2, 0\n\
+_08018C28: .4byte gBattlescriptCurrInstr\n\
+_08018C2C: .4byte BattleScript_FlashFireBoost_PPLoss\n\
+_08018C30:\n\
+ ldr r0, _08018C4C @ =gBattleCommunication\n\
+ strb r4, [r0, 0x5]\n\
+ ldr r1, _08018C50 @ =gProtectStructs\n\
+ ldr r0, _08018C54 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018C60\n\
+ ldr r1, _08018C58 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018C5C @ =BattleScript_FlashFireBoost\n\
+ b _08018C64\n\
+ .align 2, 0\n\
+_08018C4C: .4byte gBattleCommunication\n\
+_08018C50: .4byte gProtectStructs\n\
+_08018C54: .4byte gBankAttacker\n\
+_08018C58: .4byte gBattlescriptCurrInstr\n\
+_08018C5C: .4byte BattleScript_FlashFireBoost\n\
+_08018C60:\n\
+ ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018CA8 @ =BattleScript_FlashFireBoost_PPLoss\n\
+_08018C64:\n\
+ str r0, [r1]\n\
+ movs r2, 0x2\n\
+_08018C68:\n\
+ mov r9, r2\n\
+_08018C6A:\n\
+ mov r3, r9\n\
+ cmp r3, 0x1\n\
+ beq _08018C74\n\
+ bl _08019F76\n\
+_08018C74:\n\
+ ldr r1, _08018CAC @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r0, r1\n\
+ ldrh r0, [r1, 0x2C]\n\
+ ldrh r2, [r1, 0x28]\n\
+ cmp r0, r2\n\
+ bne _08018CD0\n\
+ ldr r1, _08018CB0 @ =gProtectStructs\n\
+ ldr r0, _08018CB4 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018CBC\n\
+ ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018CB8 @ =BattleScript_MoveHPDrain_FullHP\n\
+ str r0, [r1]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018CA4: .4byte gBattlescriptCurrInstr\n\
+_08018CA8: .4byte BattleScript_FlashFireBoost_PPLoss\n\
+_08018CAC: .4byte gBattleMons\n\
+_08018CB0: .4byte gProtectStructs\n\
+_08018CB4: .4byte gBankAttacker\n\
+_08018CB8: .4byte BattleScript_MoveHPDrain_FullHP\n\
+_08018CBC:\n\
+ ldr r1, _08018CC8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018CCC @ =BattleScript_MoveHPDrain_FullHP_PPLoss\n\
+ str r0, [r1]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018CC8: .4byte gBattlescriptCurrInstr\n\
+_08018CCC: .4byte BattleScript_MoveHPDrain_FullHP_PPLoss\n\
+_08018CD0:\n\
+ ldr r2, _08018CEC @ =gBattleMoveDamage\n\
+ ldrh r0, [r1, 0x2C]\n\
+ lsrs r0, 2\n\
+ str r0, [r2]\n\
+ cmp r0, 0\n\
+ bne _08018CE0\n\
+ mov r3, r9\n\
+ str r3, [r2]\n\
+_08018CE0:\n\
+ ldr r0, [r2]\n\
+ negs r0, r0\n\
+ str r0, [r2]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_08018CEC: .4byte gBattleMoveDamage\n\
+_08018CF0:\n\
+ mov r5, r8\n\
+ ldrb r0, [r5]\n\
+ subs r0, 0x9\n\
+ cmp r0, 0x2F\n\
+ bls _08018CFE\n\
+ bl _08019F76\n\
+_08018CFE:\n\
+ lsls r0, 2\n\
+ ldr r1, _08018D08 @ =_08018D0C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08018D08: .4byte _08018D0C\n\
+ .align 2, 0\n\
+_08018D0C:\n\
+ .4byte _08019128\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08018DCC\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08018E94\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08018F54\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _0801904C\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019204\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _080192E0\n\
+_08018DCC:\n\
+ ldr r0, _08018E74 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018DDC\n\
+ bl _08019F76\n\
+_08018DDC:\n\
+ cmp r3, 0xA5\n\
+ bne _08018DE4\n\
+ bl _08019F76\n\
+_08018DE4:\n\
+ ldr r0, _08018E78 @ =gBattleMoves\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0\n\
+ bne _08018DF8\n\
+ bl _08019F76\n\
+_08018DF8:\n\
+ ldr r2, _08018E7C @ =gSpecialStatuses\n\
+ ldr r0, _08018E80 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018E20\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018E20\n\
+ bl _08019F76\n\
+_08018E20:\n\
+ ldr r1, _08018E84 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r1, r0, r1\n\
+ adds r3, r1, 0\n\
+ adds r3, 0x21\n\
+ ldrb r0, [r3]\n\
+ cmp r0, r4\n\
+ bne _08018E3A\n\
+ bl _08019F76\n\
+_08018E3A:\n\
+ adds r2, r1, 0\n\
+ adds r2, 0x22\n\
+ ldrb r0, [r2]\n\
+ cmp r0, r4\n\
+ bne _08018E48\n\
+ bl _08019F76\n\
+_08018E48:\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018E52\n\
+ bl _08019F76\n\
+_08018E52:\n\
+ strb r4, [r3]\n\
+ strb r4, [r2]\n\
+ ldr r1, _08018E88 @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x3\n\
+ strb r0, [r1, 0x1]\n\
+ strb r4, [r1, 0x2]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08018E8C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018E90 @ =BattleScript_ColorChangeActivates\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_08018E74: .4byte gBattleMoveFlags\n\
+_08018E78: .4byte gBattleMoves\n\
+_08018E7C: .4byte gSpecialStatuses\n\
+_08018E80: .4byte gBankTarget\n\
+_08018E84: .4byte gBattleMons\n\
+_08018E88: .4byte gBattleTextBuff1\n\
+_08018E8C: .4byte gBattlescriptCurrInstr\n\
+_08018E90: .4byte BattleScript_ColorChangeActivates\n\
+_08018E94:\n\
+ ldr r0, _08018F2C @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018EA4\n\
+ bl _08019F76\n\
+_08018EA4:\n\
+ ldr r1, _08018F30 @ =gBattleMons\n\
+ ldr r0, _08018F34 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r4, r0, r1\n\
+ ldrh r0, [r4, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018EBA\n\
+ bl _08019F76\n\
+_08018EBA:\n\
+ ldr r0, _08018F38 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08018ECC\n\
+ bl _08019F76\n\
+_08018ECC:\n\
+ ldr r2, _08018F3C @ =gSpecialStatuses\n\
+ ldr r0, _08018F40 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018EF4\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018EF4\n\
+ bl _08019F76\n\
+_08018EF4:\n\
+ ldr r1, _08018F44 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r2, 0x1\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08018F0E\n\
+ bl _08019F76\n\
+_08018F0E:\n\
+ ldr r1, _08018F48 @ =gBattleMoveDamage\n\
+ ldrh r0, [r4, 0x2C]\n\
+ lsrs r0, 4\n\
+ str r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _08018F1C\n\
+ str r2, [r1]\n\
+_08018F1C:\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08018F4C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018F50 @ =BattleScript_RoughSkinActivates\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_08018F2C: .4byte gBattleMoveFlags\n\
+_08018F30: .4byte gBattleMons\n\
+_08018F34: .4byte gBankAttacker\n\
+_08018F38: .4byte gProtectStructs\n\
+_08018F3C: .4byte gSpecialStatuses\n\
+_08018F40: .4byte gBankTarget\n\
+_08018F44: .4byte gBattleMoves\n\
+_08018F48: .4byte gBattleMoveDamage\n\
+_08018F4C: .4byte gBattlescriptCurrInstr\n\
+_08018F50: .4byte BattleScript_RoughSkinActivates\n\
+_08018F54:\n\
+ ldr r0, _08019020 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018F64\n\
+ bl _08019F76\n\
+_08018F64:\n\
+ ldr r1, _08019024 @ =gBattleMons\n\
+ ldr r0, _08019028 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018F7A\n\
+ bl _08019F76\n\
+_08018F7A:\n\
+ ldr r0, _0801902C @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08018F8C\n\
+ bl _08019F76\n\
+_08018F8C:\n\
+ ldr r2, _08019030 @ =gSpecialStatuses\n\
+ ldr r0, _08019034 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018FB4\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018FB4\n\
+ bl _08019F76\n\
+_08018FB4:\n\
+ ldr r1, _08019038 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08018FCC\n\
+ bl _08019F76\n\
+_08018FCC:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _08018FE4\n\
+ bl _08019F76\n\
+_08018FE4:\n\
+ ldr r5, _0801903C @ =gBattleCommunication\n\
+ movs r4, 0x3\n\
+_08018FE8:\n\
+ bl Random\n\
+ ands r0, r4\n\
+ strb r0, [r5, 0x3]\n\
+ cmp r0, 0\n\
+ beq _08018FE8\n\
+ ldr r1, _0801903C @ =gBattleCommunication\n\
+ ldrb r0, [r1, 0x3]\n\
+ cmp r0, 0x3\n\
+ bne _08019000\n\
+ adds r0, 0x2\n\
+ strb r0, [r1, 0x3]\n\
+_08019000:\n\
+ ldrb r0, [r1, 0x3]\n\
+ adds r0, 0x40\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019040 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019044 @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _08019048 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_08019020: .4byte gBattleMoveFlags\n\
+_08019024: .4byte gBattleMons\n\
+_08019028: .4byte gBankAttacker\n\
+_0801902C: .4byte gProtectStructs\n\
+_08019030: .4byte gSpecialStatuses\n\
+_08019034: .4byte gBankTarget\n\
+_08019038: .4byte gBattleMoves\n\
+_0801903C: .4byte gBattleCommunication\n\
+_08019040: .4byte gBattlescriptCurrInstr\n\
+_08019044: .4byte BattleScript_ApplySecondaryEffect\n\
+_08019048: .4byte gHitMarker\n\
+_0801904C:\n\
+ ldr r0, _080190FC @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801905C\n\
+ bl _08019F76\n\
+_0801905C:\n\
+ ldr r1, _08019100 @ =gBattleMons\n\
+ ldr r0, _08019104 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08019072\n\
+ bl _08019F76\n\
+_08019072:\n\
+ ldr r0, _08019108 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08019084\n\
+ bl _08019F76\n\
+_08019084:\n\
+ ldr r2, _0801910C @ =gSpecialStatuses\n\
+ ldr r0, _08019110 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080190AC\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080190AC\n\
+ bl _08019F76\n\
+_080190AC:\n\
+ ldr r1, _08019114 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080190C4\n\
+ bl _08019F76\n\
+_080190C4:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _080190DC\n\
+ bl _08019F76\n\
+_080190DC:\n\
+ ldr r1, _08019118 @ =gBattleCommunication\n\
+ movs r0, 0x42\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _0801911C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019120 @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _08019124 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_080190FC: .4byte gBattleMoveFlags\n\
+_08019100: .4byte gBattleMons\n\
+_08019104: .4byte gBankAttacker\n\
+_08019108: .4byte gProtectStructs\n\
+_0801910C: .4byte gSpecialStatuses\n\
+_08019110: .4byte gBankTarget\n\
+_08019114: .4byte gBattleMoves\n\
+_08019118: .4byte gBattleCommunication\n\
+_0801911C: .4byte gBattlescriptCurrInstr\n\
+_08019120: .4byte BattleScript_ApplySecondaryEffect\n\
+_08019124: .4byte gHitMarker\n\
+_08019128:\n\
+ ldr r0, _080191D8 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08019138\n\
+ bl _08019F76\n\
+_08019138:\n\
+ ldr r1, _080191DC @ =gBattleMons\n\
+ ldr r0, _080191E0 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _0801914E\n\
+ bl _08019F76\n\
+_0801914E:\n\
+ ldr r0, _080191E4 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08019160\n\
+ bl _08019F76\n\
+_08019160:\n\
+ ldr r2, _080191E8 @ =gSpecialStatuses\n\
+ ldr r0, _080191EC @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08019188\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08019188\n\
+ bl _08019F76\n\
+_08019188:\n\
+ ldr r1, _080191F0 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080191A0\n\
+ bl _08019F76\n\
+_080191A0:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _080191B8\n\
+ bl _08019F76\n\
+_080191B8:\n\
+ ldr r1, _080191F4 @ =gBattleCommunication\n\
+ movs r0, 0x45\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _080191F8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080191FC @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _08019200 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_080191D8: .4byte gBattleMoveFlags\n\
+_080191DC: .4byte gBattleMons\n\
+_080191E0: .4byte gBankAttacker\n\
+_080191E4: .4byte gProtectStructs\n\
+_080191E8: .4byte gSpecialStatuses\n\
+_080191EC: .4byte gBankTarget\n\
+_080191F0: .4byte gBattleMoves\n\
+_080191F4: .4byte gBattleCommunication\n\
+_080191F8: .4byte gBattlescriptCurrInstr\n\
+_080191FC: .4byte BattleScript_ApplySecondaryEffect\n\
+_08019200: .4byte gHitMarker\n\
+_08019204:\n\
+ ldr r0, _080192B4 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08019214\n\
+ bl _08019F76\n\
+_08019214:\n\
+ ldr r1, _080192B8 @ =gBattleMons\n\
+ ldr r0, _080192BC @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _0801922A\n\
+ bl _08019F76\n\
+_0801922A:\n\
+ ldr r0, _080192C0 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _0801923C\n\
+ bl _08019F76\n\
+_0801923C:\n\
+ ldr r1, _080192C4 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08019254\n\
+ bl _08019F76\n\
+_08019254:\n\
+ ldr r2, _080192C8 @ =gSpecialStatuses\n\
+ ldr r0, _080192CC @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801927C\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801927C\n\
+ bl _08019F76\n\
+_0801927C:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _08019294\n\
+ bl _08019F76\n\
+_08019294:\n\
+ ldr r1, _080192D0 @ =gBattleCommunication\n\
+ movs r0, 0x43\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _080192D4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080192D8 @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _080192DC @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_080192B4: .4byte gBattleMoveFlags\n\
+_080192B8: .4byte gBattleMons\n\
+_080192BC: .4byte gBankAttacker\n\
+_080192C0: .4byte gProtectStructs\n\
+_080192C4: .4byte gBattleMoves\n\
+_080192C8: .4byte gSpecialStatuses\n\
+_080192CC: .4byte gBankTarget\n\
+_080192D0: .4byte gBattleCommunication\n\
+_080192D4: .4byte gBattlescriptCurrInstr\n\
+_080192D8: .4byte BattleScript_ApplySecondaryEffect\n\
+_080192DC: .4byte gHitMarker\n\
+_080192E0:\n\
+ ldr r0, _08019420 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080192F0\n\
+ bl _08019F76\n\
+_080192F0:\n\
+ ldr r5, _08019424 @ =gBattleMons\n\
+ ldr r7, _08019428 @ =gBankAttacker\n\
+ ldrb r1, [r7]\n\
+ movs r6, 0x58\n\
+ adds r0, r1, 0\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08019308\n\
+ bl _08019F76\n\
+_08019308:\n\
+ ldr r0, _0801942C @ =gProtectStructs\n\
+ lsls r1, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _0801931A\n\
+ bl _08019F76\n\
+_0801931A:\n\
+ ldr r1, _08019430 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08019332\n\
+ bl _08019F76\n\
+_08019332:\n\
+ ldr r3, _08019434 @ =gSpecialStatuses\n\
+ ldr r0, _08019438 @ =gBankTarget\n\
+ mov r8, r0\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r2, r0, 2\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r2, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801935C\n\
+ adds r0, r3, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r2, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801935C\n\
+ bl _08019F76\n\
+_0801935C:\n\
+ adds r0, r1, 0\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _0801936C\n\
+ bl _08019F76\n\
+_0801936C:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _08019384\n\
+ bl _08019F76\n\
+_08019384:\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xC\n\
+ bne _08019396\n\
+ bl _08019F76\n\
+_08019396:\n\
+ ldr r0, [sp, 0x8]\n\
+ ldr r1, [sp, 0x10]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ adds r4, r0, 0\n\
+ ldr r0, [sp, 0xC]\n\
+ ldr r1, [sp, 0x14]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ lsls r4, 24\n\
+ lsls r0, 24\n\
+ cmp r4, r0\n\
+ bne _080193B4\n\
+ bl _08019F76\n\
+_080193B4:\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r4, r5, 0\n\
+ adds r4, 0x50\n\
+ adds r0, r4\n\
+ ldr r0, [r0]\n\
+ movs r1, 0xF0\n\
+ lsls r1, 12\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080193CE\n\
+ bl _08019F76\n\
+_080193CE:\n\
+ ldr r0, [sp, 0x8]\n\
+ ldr r1, [sp, 0x10]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0xFF\n\
+ bne _080193E2\n\
+ bl _08019F76\n\
+_080193E2:\n\
+ ldr r0, [sp, 0xC]\n\
+ ldr r1, [sp, 0x14]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0xFF\n\
+ bne _080193F6\n\
+ bl _08019F76\n\
+_080193F6:\n\
+ ldrb r0, [r7]\n\
+ adds r2, r0, 0\n\
+ muls r2, r6\n\
+ adds r2, r4\n\
+ ldr r1, _0801943C @ =gBitTable\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ lsls r1, 16\n\
+ ldr r0, [r2]\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019440 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019444 @ =BattleScript_CuteCharmActivates\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
+_08019420: .4byte gBattleMoveFlags\n\
+_08019424: .4byte gBattleMons\n\
+_08019428: .4byte gBankAttacker\n\
+_0801942C: .4byte gProtectStructs\n\
+_08019430: .4byte gBattleMoves\n\
+_08019434: .4byte gSpecialStatuses\n\
+_08019438: .4byte gBankTarget\n\
+_0801943C: .4byte gBitTable\n\
+_08019440: .4byte gBattlescriptCurrInstr\n\
+_08019444: .4byte BattleScript_CuteCharmActivates\n\
+_08019448:\n\
+ movs r5, 0\n\
+ mov r10, r5\n\
+ ldr r0, _0801947C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcc _08019458\n\
+ bl _08019F76\n\
+_08019458:\n\
+ ldr r1, _08019480 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, r1\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ subs r0, 0x7\n\
+ adds r2, r1, 0\n\
+ cmp r0, 0x41\n\
+ bls _08019472\n\
+ b _080196D6\n\
+_08019472:\n\
+ lsls r0, 2\n\
+ ldr r1, _08019484 @ =_08019488\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_0801947C: .4byte gNoOfAllBanks\n\
+_08019480: .4byte gBattleMons\n\
+_08019484: .4byte _08019488\n\
+ .align 2, 0\n\
+_08019488:\n\
+ .4byte _080195EC\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196B0\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _08019614\n\
+ .4byte _080196D6\n\
+ .4byte _08019590\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080195BC\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _08019680\n\
+ .4byte _08019650\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _08019614\n\
+_08019590:\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080195B0 @ =0x00000f88\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080195AA\n\
+ b _080196D6\n\
+_080195AA:\n\
+ ldr r0, _080195B4 @ =gBattleTextBuff1\n\
+ ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn\n\
+ b _0801969C\n\
+ .align 2, 0\n\
+_080195B0: .4byte 0x00000f88\n\
+_080195B4: .4byte gBattleTextBuff1\n\
+_080195B8: .4byte gStatusConditionString_PoisonJpn\n\
+_080195BC:\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080195D6\n\
+ b _080196D6\n\
+_080195D6:\n\
+ ldr r0, _080195E4 @ =gBattleTextBuff1\n\
+ ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn\n\
+ bl StringCopy\n\
+ movs r2, 0x2\n\
+ mov r9, r2\n\
+ b _080196DC\n\
+ .align 2, 0\n\
+_080195E4: .4byte gBattleTextBuff1\n\
+_080195E8: .4byte gStatusConditionString_ConfusionJpn\n\
+_080195EC:\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _0801960C @ =gBattleTextBuff1\n\
+ ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn\n\
+ b _0801969C\n\
+ .align 2, 0\n\
+_0801960C: .4byte gBattleTextBuff1\n\
+_08019610: .4byte gStatusConditionString_ParalysisJpn\n\
+_08019614:\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x4C\n\
+ adds r0, r3, r0\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ adds r2, 0x50\n\
+ adds r2, r3, r2\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08019644 @ =0xf7ffffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, _08019648 @ =gBattleTextBuff1\n\
+ ldr r1, _0801964C @ =gStatusConditionString_SleepJpn\n\
+ bl StringCopy\n\
+ movs r0, 0x1\n\
+ mov r9, r0\n\
+ b _080196DC\n\
+ .align 2, 0\n\
+_08019644: .4byte 0xf7ffffff\n\
+_08019648: .4byte gBattleTextBuff1\n\
+_0801964C: .4byte gStatusConditionString_SleepJpn\n\
+_08019650:\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _08019678 @ =gBattleTextBuff1\n\
+ ldr r1, _0801967C @ =gStatusConditionString_BurnJpn\n\
+ bl StringCopy\n\
+ movs r2, 0x1\n\
+ mov r9, r2\n\
+ b _080196DC\n\
+ .align 2, 0\n\
+_08019678: .4byte gBattleTextBuff1\n\
+_0801967C: .4byte gStatusConditionString_BurnJpn\n\
+_08019680:\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _080196A8 @ =gBattleTextBuff1\n\
+ ldr r1, _080196AC @ =gStatusConditionString_IceJpn\n\
+_0801969C:\n\
+ bl StringCopy\n\
+ movs r5, 0x1\n\
+ mov r9, r5\n\
+ b _080196DC\n\
+ .align 2, 0\n\
+_080196A8: .4byte gBattleTextBuff1\n\
+_080196AC: .4byte gStatusConditionString_IceJpn\n\
+_080196B0:\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0xF0\n\
+ lsls r1, 12\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _080196EC @ =gBattleTextBuff1\n\
+ ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn\n\
+ bl StringCopy\n\
+ movs r2, 0x3\n\
+ mov r9, r2\n\
+_080196D6:\n\
+ mov r3, r9\n\
+ cmp r3, 0\n\
+ beq _08019798\n\
+_080196DC:\n\
+ mov r5, r9\n\
+ cmp r5, 0x2\n\
+ beq _08019710\n\
+ cmp r5, 0x2\n\
+ bgt _080196F4\n\
+ cmp r5, 0x1\n\
+ beq _080196FC\n\
+ b _0801973C\n\
+ .align 2, 0\n\
+_080196EC: .4byte gBattleTextBuff1\n\
+_080196F0: .4byte gStatusConditionString_LoveJpn\n\
+_080196F4:\n\
+ mov r0, r9\n\
+ cmp r0, 0x3\n\
+ beq _08019728\n\
+ b _0801973C\n\
+_080196FC:\n\
+ ldr r1, _0801970C @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r1, 0x4C\n\
+ adds r2, r1\n\
+ movs r0, 0\n\
+ b _0801973A\n\
+ .align 2, 0\n\
+_0801970C: .4byte gBattleMons\n\
+_08019710:\n\
+ ldr r1, _08019724 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r1, 0x50\n\
+ adds r2, r1\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x8\n\
+ negs r1, r1\n\
+ b _08019738\n\
+ .align 2, 0\n\
+_08019724: .4byte gBattleMons\n\
+_08019728:\n\
+ ldr r1, _08019778 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r1, 0x50\n\
+ adds r2, r1\n\
+ ldr r0, [r2]\n\
+ ldr r1, _0801977C @ =0xfff0ffff\n\
+_08019738:\n\
+ ands r0, r1\n\
+_0801973A:\n\
+ str r0, [r2]\n\
+_0801973C:\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019780 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019784 @ =gUnknown_081D9956\n\
+ str r0, [r1]\n\
+ ldr r0, _08019788 @ =0x02000000\n\
+ ldr r1, _0801978C @ =0x00016003\n\
+ adds r0, r1\n\
+ mov r2, r10\n\
+ strb r2, [r0]\n\
+ ldr r4, _08019790 @ =gActiveBank\n\
+ strb r2, [r4]\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ ldr r1, _08019794 @ =gUnknown_02024ACC\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x28\n\
+ movs r2, 0\n\
+ movs r3, 0x4\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ bl _08019F92\n\
+ .align 2, 0\n\
+_08019778: .4byte gBattleMons\n\
+_0801977C: .4byte 0xfff0ffff\n\
+_08019780: .4byte gBattlescriptCurrInstr\n\
+_08019784: .4byte gUnknown_081D9956\n\
+_08019788: .4byte 0x02000000\n\
+_0801978C: .4byte 0x00016003\n\
+_08019790: .4byte gActiveBank\n\
+_08019794: .4byte gUnknown_02024ACC\n\
+_08019798:\n\
+ mov r0, r10\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r0, _080197B0 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcs _080197AC\n\
+ b _08019458\n\
+_080197AC:\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
+_080197B0: .4byte gNoOfAllBanks\n\
+_080197B4:\n\
+ movs r3, 0\n\
+ mov r10, r3\n\
+ ldr r0, _080197FC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcc _080197C2\n\
+ b _08019F76\n\
+_080197C2:\n\
+ ldr r4, _08019800 @ =gBattleMons\n\
+_080197C4:\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r0, r4\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3B\n\
+ bne _080197E8\n\
+ mov r0, r10\n\
+ bl CastformDataTypeChange\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ cmp r0, 0\n\
+ beq _080197E8\n\
+ b _08019E40\n\
+_080197E8:\n\
+ mov r0, r10\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r0, _080197FC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcc _080197C4\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_080197FC: .4byte gNoOfAllBanks\n\
+_08019800: .4byte gBattleMons\n\
+_08019804:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x1C\n\
+ beq _0801980E\n\
+ b _08019F76\n\
+_0801980E:\n\
+ ldr r4, _08019860 @ =gHitMarker\n\
+ ldr r1, [r4]\n\
+ movs r0, 0x80\n\
+ lsls r0, 7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801981E\n\
+ b _08019F76\n\
+_0801981E:\n\
+ ldr r0, _08019864 @ =0xffffbfff\n\
+ ands r1, r0\n\
+ str r1, [r4]\n\
+ ldr r3, _08019868 @ =0x000160ca\n\
+ adds r2, r7, r3\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ cmp r0, 0x6\n\
+ bne _08019838\n\
+ movs r0, 0x2\n\
+ strb r0, [r2]\n\
+_08019838:\n\
+ ldr r1, _0801986C @ =gBattleCommunication\n\
+ ldrb r0, [r2]\n\
+ adds r0, 0x40\n\
+ strb r0, [r1, 0x3]\n\
+ ldr r0, _08019870 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ ldr r5, _08019874 @ =0x00016003\n\
+ adds r0, r7, r5\n\
+ strb r1, [r0]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019878 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _0801987C @ =BattleScript_SynchronizeActivates\n\
+ str r0, [r1]\n\
+ ldr r0, [r4]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r4]\n\
+ b _08019F22\n\
+ .align 2, 0\n\
+_08019860: .4byte gHitMarker\n\
+_08019864: .4byte 0xffffbfff\n\
+_08019868: .4byte 0x000160ca\n\
+_0801986C: .4byte gBattleCommunication\n\
+_08019870: .4byte gBankTarget\n\
+_08019874: .4byte 0x00016003\n\
+_08019878: .4byte gBattlescriptCurrInstr\n\
+_0801987C: .4byte BattleScript_SynchronizeActivates\n\
+_08019880:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x1C\n\
+ beq _0801988A\n\
+ b _08019F76\n\
+_0801988A:\n\
+ ldr r4, _080198DC @ =gHitMarker\n\
+ ldr r1, [r4]\n\
+ movs r0, 0x80\n\
+ lsls r0, 7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801989A\n\
+ b _08019F76\n\
+_0801989A:\n\
+ ldr r0, _080198E0 @ =0xffffbfff\n\
+ ands r1, r0\n\
+ str r1, [r4]\n\
+ ldr r3, _080198E4 @ =0x000160ca\n\
+ adds r2, r7, r3\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ cmp r0, 0x6\n\
+ bne _080198B4\n\
+ movs r0, 0x2\n\
+ strb r0, [r2]\n\
+_080198B4:\n\
+ ldr r1, _080198E8 @ =gBattleCommunication\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r1, 0x3]\n\
+ ldr r0, _080198EC @ =gBankAttacker\n\
+ ldrb r1, [r0]\n\
+ ldr r5, _080198F0 @ =0x00016003\n\
+ adds r0, r7, r5\n\
+ strb r1, [r0]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _080198F4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080198F8 @ =BattleScript_SynchronizeActivates\n\
+ str r0, [r1]\n\
+ ldr r0, [r4]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r4]\n\
+ b _08019F22\n\
+ .align 2, 0\n\
+_080198DC: .4byte gHitMarker\n\
+_080198E0: .4byte 0xffffbfff\n\
+_080198E4: .4byte 0x000160ca\n\
+_080198E8: .4byte gBattleCommunication\n\
+_080198EC: .4byte gBankAttacker\n\
+_080198F0: .4byte 0x00016003\n\
+_080198F4: .4byte gBattlescriptCurrInstr\n\
+_080198F8: .4byte BattleScript_SynchronizeActivates\n\
+_080198FC:\n\
+ movs r4, 0\n\
+ ldr r0, _08019934 @ =gNoOfAllBanks\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ blt _08019908\n\
+ b _08019F76\n\
+_08019908:\n\
+ ldr r0, _08019938 @ =gBattleMons\n\
+ adds r5, r1, 0\n\
+ ldr r2, _0801993C @ =gStatuses3\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x20\n\
+ movs r6, 0x80\n\
+ lsls r6, 12\n\
+_08019916:\n\
+ ldrb r1, [r3]\n\
+ cmp r1, 0x16\n\
+ bne _08019926\n\
+ ldr r0, [r2]\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ beq _08019926\n\
+ b _08019E6C\n\
+_08019926:\n\
+ adds r2, 0x4\n\
+ adds r3, 0x58\n\
+ adds r4, 0x1\n\
+ cmp r4, r5\n\
+ blt _08019916\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019934: .4byte gNoOfAllBanks\n\
+_08019938: .4byte gBattleMons\n\
+_0801993C: .4byte gStatuses3\n\
+_08019940:\n\
+ movs r4, 0\n\
+ ldr r0, _08019A1C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _0801994C\n\
+ b _08019F76\n\
+_0801994C:\n\
+ ldr r0, _08019A20 @ =gActiveBank\n\
+ mov r8, r0\n\
+ ldr r1, _08019A24 @ =gBattleMons\n\
+ adds r1, 0x20\n\
+ str r1, [sp, 0x1C]\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x20]\n\
+_0801995A:\n\
+ ldr r3, [sp, 0x1C]\n\
+ ldrb r0, [r3]\n\
+ cmp r0, 0x24\n\
+ beq _08019964\n\
+ b _08019AF6\n\
+_08019964:\n\
+ ldr r0, _08019A28 @ =gStatuses3\n\
+ ldr r5, [sp, 0x20]\n\
+ adds r0, r5, r0\n\
+ ldr r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 13\n\
+ ands r1, r0\n\
+ str r5, [sp, 0x18]\n\
+ cmp r1, 0\n\
+ bne _0801997A\n\
+ b _08019AF6\n\
+_0801997A:\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankIdentity\n\
+ movs r1, 0x1\n\
+ adds r5, r0, 0\n\
+ eors r5, r1\n\
+ ands r5, r1\n\
+ adds r0, r5, 0\n\
+ bl GetBankByPlayerAI\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ adds r0, r5, 0x2\n\
+ bl GetBankByPlayerAI\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ ldr r0, _08019A2C @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r2, 0x1\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080199AE\n\
+ b _08019ABC\n\
+_080199AE:\n\
+ movs r1, 0x58\n\
+ adds r0, r6, 0\n\
+ muls r0, r1\n\
+ ldr r3, _08019A24 @ =gBattleMons\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019A78\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019A34\n\
+ movs r1, 0x58\n\
+ adds r0, r7, 0\n\
+ muls r0, r1\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019A34\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019A34\n\
+ str r2, [sp, 0x24]\n\
+ bl Random\n\
+ ldr r2, [sp, 0x24]\n\
+ adds r1, r2, 0\n\
+ ands r1, r0\n\
+ lsls r1, 1\n\
+ orrs r5, r1\n\
+ adds r0, r5, 0\n\
+ bl GetBankByPlayerAI\n\
+ mov r2, r8\n\
+ strb r0, [r2]\n\
+ ldrb r0, [r2]\n\
+ movs r3, 0x58\n\
+ muls r0, r3\n\
+ ldr r5, _08019A24 @ =gBattleMons\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ ldr r1, [sp, 0x1C]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r2]\n\
+ muls r0, r3\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ ldr r2, _08019A30 @ =gLastUsedAbility\n\
+ strb r0, [r2]\n\
+ b _08019AE4\n\
+ .align 2, 0\n\
+_08019A1C: .4byte gNoOfAllBanks\n\
+_08019A20: .4byte gActiveBank\n\
+_08019A24: .4byte gBattleMons\n\
+_08019A28: .4byte gStatuses3\n\
+_08019A2C: .4byte gBattleTypeFlags\n\
+_08019A30: .4byte gLastUsedAbility\n\
+_08019A34:\n\
+ ldr r3, _08019A74 @ =gBattleMons\n\
+ movs r2, 0x58\n\
+ adds r0, r6, 0\n\
+ muls r0, r2\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019A78\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019A78\n\
+ mov r5, r8\n\
+ strb r6, [r5]\n\
+ adds r1, r4, 0\n\
+ muls r1, r2\n\
+ adds r1, r3\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r1, 0x20\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ b _08019AE0\n\
+ .align 2, 0\n\
+_08019A74: .4byte gBattleMons\n\
+_08019A78:\n\
+ ldr r3, _08019AB8 @ =gBattleMons\n\
+ movs r2, 0x58\n\
+ adds r0, r7, 0\n\
+ muls r0, r2\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019AEE\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019AEE\n\
+ mov r5, r8\n\
+ strb r7, [r5]\n\
+ adds r1, r4, 0\n\
+ muls r1, r2\n\
+ adds r1, r3\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r1, 0x20\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ b _08019AE0\n\
+ .align 2, 0\n\
+_08019AB8: .4byte gBattleMons\n\
+_08019ABC:\n\
+ mov r2, r8\n\
+ strb r6, [r2]\n\
+ movs r3, 0x58\n\
+ adds r0, r6, 0\n\
+ muls r0, r3\n\
+ ldr r5, _08019B10 @ =gBattleMons\n\
+ adds r0, r5\n\
+ adds r2, r0, 0\n\
+ adds r2, 0x20\n\
+ ldrb r1, [r2]\n\
+ cmp r1, 0\n\
+ beq _08019AEE\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019AEE\n\
+ ldr r0, [sp, 0x1C]\n\
+ strb r1, [r0]\n\
+ ldrb r0, [r2]\n\
+_08019AE0:\n\
+ ldr r1, _08019B14 @ =gLastUsedAbility\n\
+ strb r0, [r1]\n\
+_08019AE4:\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019AEE:\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ beq _08019AF6\n\
+ b _08019E88\n\
+_08019AF6:\n\
+ ldr r3, [sp, 0x1C]\n\
+ adds r3, 0x58\n\
+ str r3, [sp, 0x1C]\n\
+ ldr r5, [sp, 0x20]\n\
+ adds r5, 0x4\n\
+ str r5, [sp, 0x20]\n\
+ adds r4, 0x1\n\
+ ldr r0, _08019B18 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ bge _08019B0E\n\
+ b _0801995A\n\
+_08019B0E:\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019B10: .4byte gBattleMons\n\
+_08019B14: .4byte gLastUsedAbility\n\
+_08019B18: .4byte gNoOfAllBanks\n\
+_08019B1C:\n\
+ movs r4, 0\n\
+ ldr r0, _08019B54 @ =gNoOfAllBanks\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ blt _08019B28\n\
+ b _08019F76\n\
+_08019B28:\n\
+ ldr r0, _08019B58 @ =gBattleMons\n\
+ adds r5, r1, 0\n\
+ ldr r2, _08019B5C @ =gStatuses3\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x20\n\
+ movs r6, 0x80\n\
+ lsls r6, 12\n\
+_08019B36:\n\
+ ldrb r1, [r3]\n\
+ cmp r1, 0x16\n\
+ bne _08019B46\n\
+ ldr r0, [r2]\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ beq _08019B46\n\
+ b _08019F04\n\
+_08019B46:\n\
+ adds r2, 0x4\n\
+ adds r3, 0x58\n\
+ adds r4, 0x1\n\
+ cmp r4, r5\n\
+ blt _08019B36\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019B54: .4byte gNoOfAllBanks\n\
+_08019B58: .4byte gBattleMons\n\
+_08019B5C: .4byte gStatuses3\n\
+_08019B60:\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019B76\n\
+ b _08019F76\n\
+_08019B76:\n\
+ ldr r7, _08019BB4 @ =gBattleMons\n\
+_08019B78:\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r5\n\
+ beq _08019BA2\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019BA2\n\
+ ldr r0, _08019BB8 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019BA2:\n\
+ adds r4, r3, 0\n\
+ ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019B78\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019BB0: .4byte gNoOfAllBanks\n\
+_08019BB4: .4byte gBattleMons\n\
+_08019BB8: .4byte gLastUsedAbility\n\
+_08019BBC:\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019C0C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019BD2\n\
+ b _08019F76\n\
+_08019BD2:\n\
+ ldr r7, _08019C10 @ =gBattleMons\n\
+_08019BD4:\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r5\n\
+ bne _08019BFE\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019BFE\n\
+ ldr r0, _08019C14 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019BFE:\n\
+ adds r4, r3, 0\n\
+ ldr r0, _08019C0C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019BD4\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019C0C: .4byte gNoOfAllBanks\n\
+_08019C10: .4byte gBattleMons\n\
+_08019C14: .4byte gLastUsedAbility\n\
+_08019C18:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xFD\n\
+ beq _08019C40\n\
+ cmp r0, 0xFE\n\
+ beq _08019C78\n\
+ movs r4, 0\n\
+ ldr r0, _08019C38 @ =gNoOfAllBanks\n\
+ adds r5, r0, 0\n\
+ ldrb r2, [r5]\n\
+ cmp r4, r2\n\
+ blt _08019C32\n\
+ b _08019F76\n\
+_08019C32:\n\
+ ldr r2, _08019C3C @ =gBattleMons\n\
+ b _08019CB0\n\
+ .align 2, 0\n\
+_08019C38: .4byte gNoOfAllBanks\n\
+_08019C3C: .4byte gBattleMons\n\
+_08019C40:\n\
+ movs r4, 0\n\
+ ldr r0, _08019C70 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019C4C\n\
+ b _08019F76\n\
+_08019C4C:\n\
+ ldr r5, _08019C74 @ =gStatuses3\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r1, r0, 0\n\
+_08019C54:\n\
+ lsls r0, r4, 2\n\
+ adds r0, r5\n\
+ ldr r0, [r0]\n\
+ ands r0, r2\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, 0\n\
+ beq _08019C68\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019C68:\n\
+ adds r4, r3, 0\n\
+ cmp r4, r1\n\
+ blt _08019C54\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019C70: .4byte gNoOfAllBanks\n\
+_08019C74: .4byte gStatuses3\n\
+_08019C78:\n\
+ movs r4, 0\n\
+ ldr r0, _08019CA8 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019C84\n\
+ b _08019F76\n\
+_08019C84:\n\
+ ldr r5, _08019CAC @ =gStatuses3\n\
+ movs r2, 0x80\n\
+ lsls r2, 10\n\
+ adds r1, r0, 0\n\
+_08019C8C:\n\
+ lsls r0, r4, 2\n\
+ adds r0, r5\n\
+ ldr r0, [r0]\n\
+ ands r0, r2\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, 0\n\
+ beq _08019CA0\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019CA0:\n\
+ adds r4, r3, 0\n\
+ cmp r4, r1\n\
+ blt _08019C8C\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019CA8: .4byte gNoOfAllBanks\n\
+_08019CAC: .4byte gStatuses3\n\
+_08019CB0:\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r2\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r6\n\
+ bne _08019CCA\n\
+ mov r0, r8\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019CCA:\n\
+ adds r4, r3, 0\n\
+ ldrb r1, [r5]\n\
+ cmp r4, r1\n\
+ blt _08019CB0\n\
+ b _08019F76\n\
+_08019CD4:\n\
+ movs r4, 0\n\
+ ldr r0, _08019D10 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019CE0\n\
+ b _08019F76\n\
+_08019CE0:\n\
+ ldr r7, _08019D14 @ =gBattleMons\n\
+ adds r2, r0, 0\n\
+ movs r5, 0x58\n\
+_08019CE6:\n\
+ adds r0, r4, 0\n\
+ muls r0, r5\n\
+ adds r1, r0, r7\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r6\n\
+ bne _08019D08\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019D08\n\
+ mov r0, r8\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019D08:\n\
+ adds r4, r3, 0\n\
+ cmp r4, r2\n\
+ blt _08019CE6\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019D10: .4byte gNoOfAllBanks\n\
+_08019D14: .4byte gBattleMons\n\
+_08019D18:\n\
+ movs r4, 0\n\
+ ldr r0, _08019D50 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019D24\n\
+ b _08019F76\n\
+_08019D24:\n\
+ ldr r7, _08019D54 @ =gBattleMons\n\
+ adds r1, r0, 0\n\
+ movs r5, 0x58\n\
+ ldr r2, _08019D58 @ =gLastUsedAbility\n\
+_08019D2C:\n\
+ adds r0, r4, 0\n\
+ muls r0, r5\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r6\n\
+ bne _08019D48\n\
+ cmp r4, r10\n\
+ beq _08019D48\n\
+ strb r6, [r2]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019D48:\n\
+ adds r4, r3, 0\n\
+ cmp r4, r1\n\
+ blt _08019D2C\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019D50: .4byte gNoOfAllBanks\n\
+_08019D54: .4byte gBattleMons\n\
+_08019D58: .4byte gLastUsedAbility\n\
+_08019D5C:\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019DAC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019D72\n\
+ b _08019F76\n\
+_08019D72:\n\
+ ldr r7, _08019DB0 @ =gBattleMons\n\
+_08019D74:\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, r5\n\
+ beq _08019DA0\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019DA0\n\
+ ldr r0, _08019DB4 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019DA0:\n\
+ adds r4, 0x1\n\
+ ldr r0, _08019DAC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019D74\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019DAC: .4byte gNoOfAllBanks\n\
+_08019DB0: .4byte gBattleMons\n\
+_08019DB4: .4byte gLastUsedAbility\n\
+_08019DB8:\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019E08 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019DCE\n\
+ b _08019F76\n\
+_08019DCE:\n\
+ ldr r7, _08019E0C @ =gBattleMons\n\
+_08019DD0:\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, r5\n\
+ bne _08019DFC\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019DFC\n\
+ ldr r0, _08019E10 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019DFC:\n\
+ adds r4, 0x1\n\
+ ldr r0, _08019E08 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019DD0\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019E08: .4byte gNoOfAllBanks\n\
+_08019E0C: .4byte gBattleMons\n\
+_08019E10: .4byte gLastUsedAbility\n\
+_08019E14:\n\
+ ldr r0, _08019E30 @ =BattleScript_CastformChange\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08019E34 @ =0x02000000\n\
+ ldr r2, _08019E38 @ =0x00016003\n\
+ adds r1, r0, r2\n\
+ strb r6, [r1]\n\
+ mov r1, r9\n\
+ subs r1, 0x1\n\
+ ldr r3, _08019E3C @ =0x0001609b\n\
+ adds r0, r3\n\
+ strb r1, [r0]\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019E30: .4byte BattleScript_CastformChange\n\
+_08019E34: .4byte 0x02000000\n\
+_08019E38: .4byte 0x00016003\n\
+_08019E3C: .4byte 0x0001609b\n\
+_08019E40:\n\
+ ldr r0, _08019E5C @ =BattleScript_CastformChange\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08019E60 @ =0x02000000\n\
+ ldr r5, _08019E64 @ =0x00016003\n\
+ adds r1, r0, r5\n\
+ mov r2, r10\n\
+ strb r2, [r1]\n\
+ mov r1, r9\n\
+ subs r1, 0x1\n\
+ ldr r3, _08019E68 @ =0x0001609b\n\
+ adds r0, r3\n\
+ strb r1, [r0]\n\
+ b _08019F92\n\
+ .align 2, 0\n\
+_08019E5C: .4byte BattleScript_CastformChange\n\
+_08019E60: .4byte 0x02000000\n\
+_08019E64: .4byte 0x00016003\n\
+_08019E68: .4byte 0x0001609b\n\
+_08019E6C:\n\
+ mov r5, r8\n\
+ strb r1, [r5]\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08019E80 @ =0xfff7ffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, _08019E84 @ =gUnknown_081D978C\n\
+ bl b_push_move_exec\n\
+ b _08019F1A\n\
+ .align 2, 0\n\
+_08019E80: .4byte 0xfff7ffff\n\
+_08019E84: .4byte gUnknown_081D978C\n\
+_08019E88:\n\
+ ldr r0, _08019EDC @ =BattleScript_TraceActivates\n\
+ bl b_push_move_exec\n\
+ ldr r1, _08019EE0 @ =gStatuses3\n\
+ ldr r2, [sp, 0x18]\n\
+ adds r1, r2, r1\n\
+ ldr r0, [r1]\n\
+ ldr r2, _08019EE4 @ =0xffefffff\n\
+ ands r0, r2\n\
+ str r0, [r1]\n\
+ ldr r0, _08019EE8 @ =0x02000000\n\
+ ldr r3, _08019EEC @ =0x00016003\n\
+ adds r0, r3\n\
+ strb r4, [r0]\n\
+ ldr r1, _08019EF0 @ =gBattleTextBuff1\n\
+ movs r4, 0xFD\n\
+ strb r4, [r1]\n\
+ movs r0, 0x4\n\
+ strb r0, [r1, 0x1]\n\
+ ldr r2, _08019EF4 @ =gActiveBank\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r1, 0x2]\n\
+ ldr r3, _08019EF8 @ =gBattlePartyID\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ ldr r1, _08019EFC @ =gBattleTextBuff2\n\
+ strb r4, [r1]\n\
+ movs r0, 0x9\n\
+ strb r0, [r1, 0x1]\n\
+ ldr r0, _08019F00 @ =gLastUsedAbility\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1, 0x2]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ strb r0, [r1, 0x3]\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019EDC: .4byte BattleScript_TraceActivates\n\
+_08019EE0: .4byte gStatuses3\n\
+_08019EE4: .4byte 0xffefffff\n\
+_08019EE8: .4byte 0x02000000\n\
+_08019EEC: .4byte 0x00016003\n\
+_08019EF0: .4byte gBattleTextBuff1\n\
+_08019EF4: .4byte gActiveBank\n\
+_08019EF8: .4byte gBattlePartyID\n\
+_08019EFC: .4byte gBattleTextBuff2\n\
+_08019F00: .4byte gLastUsedAbility\n\
+_08019F04:\n\
+ mov r5, r8\n\
+ strb r1, [r5]\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08019F30 @ =0xfff7ffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019F34 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019F38 @ =gUnknown_081D9795\n\
+ str r0, [r1]\n\
+_08019F1A:\n\
+ ldr r0, _08019F3C @ =0x02000000\n\
+ ldr r1, _08019F40 @ =0x000160dd\n\
+ adds r0, r1\n\
+ strb r4, [r0]\n\
+_08019F22:\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ b _08019F76\n\
+ .align 2, 0\n\
+_08019F30: .4byte 0xfff7ffff\n\
+_08019F34: .4byte gBattlescriptCurrInstr\n\
+_08019F38: .4byte gUnknown_081D9795\n\
+_08019F3C: .4byte 0x02000000\n\
+_08019F40: .4byte 0x000160dd\n\
+_08019F44:\n\
+ movs r4, 0\n\
+ ldr r0, _08019FA4 @ =gNoOfAllBanks\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ bge _08019F76\n\
+ ldr r0, _08019FA8 @ =gBattleMons\n\
+ adds r2, r1, 0\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x20\n\
+ ldr r3, _08019FAC @ =gLastUsedAbility\n\
+_08019F58:\n\
+ ldrb r0, [r1]\n\
+ cmp r0, r6\n\
+ bne _08019F6E\n\
+ cmp r4, r10\n\
+ beq _08019F6E\n\
+ strb r6, [r3]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+_08019F6E:\n\
+ adds r1, 0x58\n\
+ adds r4, 0x1\n\
+ cmp r4, r2\n\
+ blt _08019F58\n\
+_08019F76:\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ beq _08019F92\n\
+_08019F7C:\n\
+ ldr r3, [sp, 0x4]\n\
+ cmp r3, 0xB\n\
+ bhi _08019F92\n\
+ ldr r1, _08019FAC @ =gLastUsedAbility\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xFF\n\
+ beq _08019F92\n\
+ adds r1, r0, 0\n\
+ mov r0, r10\n\
+ bl RecordAbilityBattle\n\
+_08019F92:\n\
+ mov r0, r9\n\
+ add sp, 0x28\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_08019FA4: .4byte gNoOfAllBanks\n\
+_08019FA8: .4byte gBattleMons\n\
+_08019FAC: .4byte gLastUsedAbility\n\
+ .syntax divided");
+}
+
+#endif // NONMATCHING
+
+void b_call_bc_move_exec(u8* BS_ptr)
+{
+ gBattlescriptCurrInstr = BS_ptr;
+ B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc;
+ gBattleMainFunc = sub_8013F54;
+ gFightStateTracker = 0;
+}
+
+void b_push_move_exec(u8* BS_ptr)
+{
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BS_ptr;
+ B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc;
+ gBattleMainFunc = sub_8013FBC;
+}
+
+enum
+{
+ ITEM_NO_EFFECT, // 0
+ ITEM_STATUS_CHANGE, // 1
+ ITEM_EFFECT_OTHER, // 2
+ ITEM_PP_CHANGE, // 3
+ ITEM_HP_CHANGE, // 4
+ ITEM_STATS_CHANGE, // 5
+};
+
+enum
+{
+ FLAVOR_SPICY, // 0
+ FLAVOR_DRY, // 1
+ FLAVOR_SWEET, // 2
+ FLAVOR_BITTER, // 3
+ FLAVOR_SOUR, // 4
+};
+
+u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
+{
+ int i = 0;
+ u8 effect = ITEM_NO_EFFECT;
+ u8 changedPP = 0;
+ u8 bankHoldEffect, atkHoldEffect, defHoldEffect;
+ u8 bankQuality, atkQuality, defQuality;
+ u16 atkItem, defItem;
+
+ gLastUsedItem = gBattleMons[bank].item;
+ if (gLastUsedItem == ITEM_ENIGMA_BERRY)
+ {
+ bankHoldEffect = gEnigmaBerries[bank].holdEffect;
+ bankQuality = gEnigmaBerries[bank].holdEffectParam;
+ }
+ else
+ {
+ bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
+ bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem);
+ }
+
+ atkItem = gBattleMons[gBankAttacker].item;
+ if (atkItem == ITEM_ENIGMA_BERRY)
+ {
+ atkHoldEffect = gEnigmaBerries[gBankAttacker].holdEffect;
+ atkQuality = gEnigmaBerries[gBankAttacker].holdEffectParam;
+ }
+ else
+ {
+ atkHoldEffect = ItemId_GetHoldEffect(atkItem);
+ atkQuality = ItemId_GetHoldEffectParam(atkItem);
+ }
+
+ // def variables are unused
+ defItem = gBattleMons[gBankTarget].item;
+ if (defItem == ITEM_ENIGMA_BERRY)
+ {
+ defHoldEffect = gEnigmaBerries[gBankTarget].holdEffect;
+ defQuality = gEnigmaBerries[gBankTarget].holdEffectParam;
+ }
+ else
+ {
+ defHoldEffect = ItemId_GetHoldEffect(defItem);
+ defQuality = ItemId_GetHoldEffectParam(defItem);
+ }
+
+ switch (caseID)
+ {
+ case 0:
+ switch (bankHoldEffect)
+ {
+ case HOLD_EFFECT_DOUBLE_PRIZE:
+ BATTLE_STRUCT->moneyMultiplier = 2;
+ break;
+ case HOLD_EFFECT_RESTORE_STATS:
+ for (i = 0; i < 8; i++)
+ {
+ if (gBattleMons[bank].statStages[i] < 6)
+ {
+ gBattleMons[bank].statStages[i] = 6;
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ if (effect)
+ {
+ BATTLE_STRUCT->scriptingActive = bank;
+ gStringBank = bank;
+ gActiveBank = gBankAttacker = bank;
+ b_call_bc_move_exec(BattleScript_WhiteHerbEnd2);
+ }
+ break;
+ }
+ break;
+ case 1:
+ if (gBattleMons[bank].hp)
+ {
+ switch (bankHoldEffect)
+ {
+ case HOLD_EFFECT_RESTORE_HP:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ {
+ gBattleMoveDamage = bankQuality;
+ if (gBattleMons[bank].hp + bankQuality > gBattleMons[bank].maxHP)
+ gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ gBattleMoveDamage *= -1;
+ b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem);
+ effect = 4;
+ }
+ break;
+ case HOLD_EFFECT_RESTORE_PP:
+ if (!moveTurn)
+ {
+ struct Pokemon* poke;
+ u8 ppBonuses;
+ u16 move;
+
+ if (GetBankSide(bank) == 0)
+ poke = &gPlayerParty[gBattlePartyID[bank]];
+ else
+ poke = &gEnemyParty[gBattlePartyID[bank]];
+ for (i = 0; i < 4; i++)
+ {
+ move = GetMonData(poke, MON_DATA_MOVE1 + i);
+ changedPP = GetMonData(poke, MON_DATA_PP1 + i);
+ ppBonuses = GetMonData(poke, MON_DATA_PP_BONUSES);
+ if (move && changedPP == 0)
+ break;
+ }
+ if (i != 4)
+ {
+ u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i);
+ if (changedPP + bankQuality > maxPP)
+ changedPP = maxPP;
+ else
+ changedPP = changedPP + bankQuality;
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = move;
+ gBattleTextBuff1[3] = move >> 8;
+ gBattleTextBuff1[4] = 0xFF;
+ b_call_bc_move_exec(BattleScript_BerryPPHealEnd2);
+ EmitSetAttributes(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP);
+ MarkBufferBankForExecution(gActiveBank);
+ effect = ITEM_PP_CHANGE;
+ }
+ }
+ break;
+ case HOLD_EFFECT_RESTORE_STATS:
+ for (i = 0; i < 8; i++)
+ {
+ if (gBattleMons[bank].statStages[i] < 6)
+ {
+ gBattleMons[bank].statStages[i] = 6;
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ if (effect)
+ {
+ BATTLE_STRUCT->scriptingActive = bank;
+ gStringBank = bank;
+ gActiveBank = gBankAttacker = bank;
+ b_call_bc_move_exec(BattleScript_WhiteHerbEnd2);
+ }
+ break;
+ case HOLD_EFFECT_LEFTOVERS:
+ if (gBattleMons[bank].hp < gBattleMons[bank].maxHP && !moveTurn)
+ {
+ gBattleMoveDamage = gBattleMons[bank].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
+ gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ gBattleMoveDamage *= -1;
+ b_call_bc_move_exec(BattleScript_ItemHealHP_End2);
+ effect = ITEM_HP_CHANGE;
+ RecordItemBattle(bank, bankHoldEffect);
+ }
+ break;
+ // nice copy/paste there gamefreak, making a function for confuse berries was too much eh?
+ case HOLD_EFFECT_CONFUSE_SPICY:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 8;
+ gBattleTextBuff1[2] = FLAVOR_SPICY;
+ gBattleTextBuff1[3] = EOS;
+ gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
+ gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ gBattleMoveDamage *= -1;
+ if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SPICY) < 0)
+ b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2);
+ else
+ b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_DRY:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 8;
+ gBattleTextBuff1[2] = FLAVOR_DRY;
+ gBattleTextBuff1[3] = EOS;
+ gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
+ gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ gBattleMoveDamage *= -1;
+ if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_DRY) < 0)
+ b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2);
+ else
+ b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_SWEET:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 8;
+ gBattleTextBuff1[2] = FLAVOR_SWEET;
+ gBattleTextBuff1[3] = EOS;
+ gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
+ gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ gBattleMoveDamage *= -1;
+ if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SWEET) < 0)
+ b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2);
+ else
+ b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_BITTER:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 8;
+ gBattleTextBuff1[2] = FLAVOR_BITTER;
+ gBattleTextBuff1[3] = EOS;
+ gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
+ gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ gBattleMoveDamage *= -1;
+ if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_BITTER) < 0)
+ b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2);
+ else
+ b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_SOUR:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 8;
+ gBattleTextBuff1[2] = FLAVOR_SOUR;
+ gBattleTextBuff1[3] = EOS;
+ gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
+ gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ gBattleMoveDamage *= -1;
+ if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SOUR) < 0)
+ b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2);
+ else
+ b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem);
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ // copy/paste again, smh
+ case HOLD_EFFECT_ATTACK_UP:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_ATK] < 0xC)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 5;
+ gBattleTextBuff1[2] = STAT_STAGE_ATK;
+ gBattleTextBuff1[3] = EOS;
+
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 0;
+ gBattleTextBuff2[2] = 0xD2;
+ gBattleTextBuff2[3] = 0xD2 >> 8;
+ gBattleTextBuff2[4] = EOS;
+
+ gEffectBank = bank;
+ BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK;
+ BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_DEFENSE_UP:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_DEF] < 0xC)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 5;
+ gBattleTextBuff1[2] = STAT_STAGE_DEF;
+ gBattleTextBuff1[3] = EOS;
+
+ gEffectBank = bank;
+ BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF;
+ BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_SPEED_UP:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 5;
+ gBattleTextBuff1[2] = STAT_STAGE_SPEED;
+ gBattleTextBuff1[3] = EOS;
+
+ gEffectBank = bank;
+ BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED;
+ BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_SP_ATTACK_UP:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPATK] < 0xC)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 5;
+ gBattleTextBuff1[2] = STAT_STAGE_SPATK;
+ gBattleTextBuff1[3] = EOS;
+
+ gEffectBank = bank;
+ BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK;
+ BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_SP_DEFENSE_UP:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPDEF] < 0xC)
+ {
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 5;
+ gBattleTextBuff1[2] = STAT_STAGE_SPDEF;
+ gBattleTextBuff1[3] = EOS;
+
+ gEffectBank = bank;
+ BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF;
+ BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CRITICAL_UP:
+ if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && !(gBattleMons[bank].status2 & STATUS2_FOCUS_ENERGY))
+ {
+ gBattleMons[bank].status2 |= STATUS2_FOCUS_ENERGY;
+ b_call_bc_move_exec(BattleScript_BerryFocusEnergyEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_RANDOM_STAT_UP:
+ if (!moveTurn && gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ if (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] < 0xC)
+ break;
+ }
+ if (i != 5)
+ {
+ do
+ {
+ i = Random() % 5;
+ } while (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] == 0xC);
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 5;
+ gBattleTextBuff1[2] = i + 1;
+ gBattleTextBuff1[3] = EOS;
+
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 0;
+ gBattleTextBuff2[2] = 0xD1;
+ gBattleTextBuff2[3] = 0xD1 >> 8;
+ gBattleTextBuff2[4] = 0;
+ gBattleTextBuff2[5] = 0xD2;
+ gBattleTextBuff2[6] = 0xD2 >> 8;
+ gBattleTextBuff2[7] = EOS;
+
+ gEffectBank = bank;
+ BATTLE_STRUCT->statChanger = 0x21 + i;
+ BATTLE_STRUCT->animArg1 = 0x21 + i + 6;
+ BATTLE_STRUCT->animArg2 = 0;
+ b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ break;
+ case HOLD_EFFECT_CURE_PAR:
+ if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS);
+ b_call_bc_move_exec(BattleScript_BerryCurePrlzEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_PSN:
+ if (gBattleMons[bank].status1 & STATUS_PSN_ANY)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER);
+ b_call_bc_move_exec(BattleScript_BerryCurePsnEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_BRN:
+ if (gBattleMons[bank].status1 & STATUS_BURN)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_BURN);
+ b_call_bc_move_exec(BattleScript_BerryCureBrnEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_FRZ:
+ if (gBattleMons[bank].status1 & STATUS_FREEZE)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_FREEZE);
+ b_call_bc_move_exec(BattleScript_BerryCureFrzEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_SLP:
+ if (gBattleMons[bank].status1 & STATUS_SLEEP)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_SLEEP);
+ gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ b_call_bc_move_exec(BattleScript_BerryCureSlpEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_CONFUSION:
+ if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ {
+ gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ b_call_bc_move_exec(BattleScript_BerryCureConfusionEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_CURE_STATUS:
+ if (gBattleMons[bank].status1 & STATUS_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ {
+ i = 0;
+ if (gBattleMons[bank].status1 & STATUS_PSN_ANY)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ i++;
+ }
+ if (gBattleMons[bank].status1 & STATUS_SLEEP)
+ {
+ gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ i++;
+ }
+ if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ i++;
+ }
+ if (gBattleMons[bank].status1 & STATUS_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ i++;
+ }
+ if (gBattleMons[bank].status1 & STATUS_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ i++;
+ }
+ if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ i++;
+ }
+ if (!(i > 1))
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattleMons[bank].status1 = 0;
+ gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ b_call_bc_move_exec(gUnknown_081D9A44);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_ATTRACT:
+ if (gBattleMons[bank].status2 & STATUS2_INFATUATION)
+ {
+ gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ b_call_bc_move_exec(gUnknown_081D9A44);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ }
+ if (effect)
+ {
+ BATTLE_STRUCT->scriptingActive = bank;
+ gStringBank = bank;
+ gActiveBank = gBankAttacker = bank;
+ switch (effect)
+ {
+ case ITEM_STATUS_CHANGE:
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ break;
+ case ITEM_PP_CHANGE:
+ if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[bank].unk18_b & gBitTable[i]))
+ gBattleMons[bank].pp[i] = changedPP;
+ break;
+ }
+ }
+ }
+ break;
+ case 2:
+ break;
+ case 3:
+ for (bank = 0; bank < gNoOfAllBanks; bank++)
+ {
+ gLastUsedItem = gBattleMons[bank].item;
+ if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY)
+ {
+ bankHoldEffect = gEnigmaBerries[bank].holdEffect;
+ bankQuality = gEnigmaBerries[bank].holdEffectParam;
+ }
+ else
+ {
+ bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
+ bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem);
+ }
+ switch (bankHoldEffect)
+ {
+ case HOLD_EFFECT_CURE_PAR:
+ if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureParRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_PSN:
+ if (gBattleMons[bank].status1 & STATUS_PSN_ANY)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCurePsnRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_BRN:
+ if (gBattleMons[bank].status1 & STATUS_BURN)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_BURN);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_FRZ:
+ if (gBattleMons[bank].status1 & STATUS_FREEZE)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_FREEZE);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_SLP:
+ if (gBattleMons[bank].status1 & STATUS_SLEEP)
+ {
+ gBattleMons[bank].status1 &= ~(STATUS_SLEEP);
+ gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_CONFUSION:
+ if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ {
+ gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet;
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_CURE_ATTRACT:
+ if (gBattleMons[bank].status2 & STATUS2_INFATUATION)
+ {
+ gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ b_movescr_stack_push_cursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = gUnknown_081D9A4A;
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_CURE_STATUS:
+ if (gBattleMons[bank].status1 & STATUS_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ {
+ if (gBattleMons[bank].status1 & STATUS_PSN_ANY)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ }
+ if (gBattleMons[bank].status1 & STATUS_SLEEP)
+ {
+ gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ }
+ if (gBattleMons[bank].status1 & STATUS_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ }
+ if (gBattleMons[bank].status1 & STATUS_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ }
+ if (gBattleMons[bank].status1 & STATUS_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ }
+ if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ }
+ gBattleMons[bank].status1 = 0;
+ gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ b_movescr_stack_push_cursor();
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattlescriptCurrInstr = gUnknown_081D9A4A;
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_RESTORE_STATS:
+ for (i = 0; i < 8; i++)
+ {
+ if (gBattleMons[bank].statStages[i] < 6)
+ {
+ gBattleMons[bank].statStages[i] = 6;
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ if (effect)
+ {
+ BATTLE_STRUCT->scriptingActive = bank;
+ gStringBank = bank;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_WhiteHerbRet;
+ return effect; // unnecessary return
+ }
+ break;
+ }
+ if (effect)
+ {
+ BATTLE_STRUCT->scriptingActive = bank;
+ gStringBank = bank;
+ gActiveBank = bank;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ break;
+ }
+ }
+ break;
+ case 4:
+ if (gBattleMoveDamage)
+ {
+ switch (atkHoldEffect)
+ {
+ case HOLD_EFFECT_FLINCH:
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)
+ && (Random() % 100) < bankQuality
+ && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED
+ && gBattleMons[gBankTarget].hp)
+ {
+ gBattleCommunication[MOVE_EFFECT_BYTE] = 8;
+ b_movescr_stack_push_cursor();
+ SetMoveEffect(0, 0);
+ b_movescr_stack_pop_cursor();
+ }
+ break;
+ case HOLD_EFFECT_SHELL_BELL:
+ if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)
+ && gSpecialStatuses[gBankTarget].moveturnLostHP != 0
+ && gSpecialStatuses[gBankTarget].moveturnLostHP != 0xFFFF
+ && gBankAttacker != gBankTarget
+ && gBattleMons[gBankAttacker].hp != gBattleMons[gBankAttacker].maxHP
+ && gBattleMons[gBankAttacker].hp != 0)
+ {
+ gLastUsedItem = atkItem;
+ gStringBank = gBankAttacker;
+ BATTLE_STRUCT->scriptingActive = gBankAttacker;
+ gBattleMoveDamage = (gSpecialStatuses[gBankTarget].moveturnLostHP / atkQuality) * -1;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = -1;
+ gSpecialStatuses[gBankTarget].moveturnLostHP = 0;
+ b_movescr_stack_push_cursor();
+ gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret;
+ effect++;
+ }
+ break;
+ }
+ }
+ break;
+ }
+
+ return effect;
+}
+
+struct CombinedMove
+{
+ u16 move1;
+ u16 move2;
+ u16 newMove;
+};
+
+static const struct CombinedMove sCombinedMoves[2] =
+{
+ {MOVE_EMBER, MOVE_GUST, MOVE_HEAT_WAVE},
+ {0xFFFF, 0xFFFF, 0xFFFF}
+};
+
+void unref_sub_801B40C(void)
+{
+ int i = 0;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ do
+ {
+ u8 bank = 0;
+ do
+ {
+ u8 absent = gAbsentBankFlags;
+ if (gBitTable[bank] & absent || absent & gBitTable[bank + 2])
+ bank++;
+ else
+ {
+ if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank + 2])
+ {
+ gSideTimer[GetBankIdentity(bank) & 1].field3 = (bank) | ((bank + 2) << 4);
+ gSideTimer[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove;
+ gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4;
+ }
+ if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank + 2] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank])
+ {
+ gSideTimer[GetBankIdentity(bank) & 1].field3 = (bank + 2) | ((bank) << 4);
+ gSideTimer[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove;
+ gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4;
+ }
+ bank++;
+ }
+ } while (bank < 2);
+ i++;
+ } while (sCombinedMoves[i].move1 != 0xFFFF);
+ }
+}
+
+void sub_801B594(void)
+{
+ if (gBattleExecBuffer == 0)
+ gBattleScriptingCommandsTable[*gBattlescriptCurrInstr]();
+}
+
+u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target
+{
+ u8 targetBank = 0;
+ u8 moveTarget;
+ u8 side;
+
+ if (useMoveTarget)
+ moveTarget = useMoveTarget - 1;
+ else
+ moveTarget = gBattleMoves[move].target;
+
+ switch (moveTarget)
+ {
+ case 0:
+ side = GetBankSide(gBankAttacker) ^ 1;
+ if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp)
+ targetBank = gSideTimer[side].followmeTarget;
+ else
+ {
+ side = GetBankSide(gBankAttacker);
+ do
+ {
+ targetBank = Random() % gNoOfAllBanks;
+ } while (targetBank == gBankAttacker || side == GetBankSide(targetBank) || gAbsentBankFlags & gBitTable[targetBank]);
+ if (gBattleMoves[move].type == TYPE_ELECTRIC
+ && AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_LIGHTNING_ROD, 0, 0)
+ && gBattleMons[targetBank].ability != ABILITY_LIGHTNING_ROD)
+ {
+ targetBank ^= 2;
+ RecordAbilityBattle(targetBank, gBattleMons[targetBank].ability);
+ gSpecialStatuses[targetBank].lightningRodRedirected = 1;
+ }
+ }
+ break;
+ case 1:
+ case 8:
+ case 32:
+ case 64:
+ targetBank = GetBankByPlayerAI((GetBankIdentity(gBankAttacker) & 1) ^ 1);
+ if (gAbsentBankFlags & gBitTable[targetBank])
+ targetBank ^= 2;
+ break;
+ case 4:
+ side = GetBankSide(gBankAttacker) ^ 1;
+ if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp)
+ targetBank = gSideTimer[side].followmeTarget;
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & 4)
+ {
+ if (GetBankSide(gBankAttacker) == 0)
+ {
+ if (Random() & 1)
+ targetBank = GetBankByPlayerAI(1);
+ else
+ targetBank = GetBankByPlayerAI(3);
+ }
+ else
+ {
+ if (Random() & 1)
+ targetBank = GetBankByPlayerAI(0);
+ else
+ targetBank = GetBankByPlayerAI(2);
+ }
+ if (gAbsentBankFlags & gBitTable[targetBank])
+ targetBank ^= 2;
+ }
+ else
+ targetBank = GetBankByPlayerAI((GetBankIdentity(gBankAttacker) & 1) ^ 1);
+ break;
+ case 2:
+ case 16:
+ targetBank = gBankAttacker;
+ break;
+ }
+ ewram[gBankAttacker + 0x16010] = targetBank;
+ return targetBank;
+}
+
+u8 IsPokeDisobedient(void)
+{
+ u8 obedienceLevel;
+ s32 rnd;
+ s32 calc;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK
+ || GetBankSide(gBankAttacker) == 1
+ || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName)
+ || FlagGet(BADGE08_GET))
+ return 0;
+
+ obedienceLevel = 10;
+ if (FlagGet(BADGE02_GET))
+ obedienceLevel = 30;
+ if (FlagGet(BADGE04_GET))
+ obedienceLevel = 50;
+ if (FlagGet(BADGE06_GET))
+ obedienceLevel = 70;
+
+ if (gBattleMons[gBankAttacker].level <= obedienceLevel)
+ return 0;
+ rnd = (Random() & 255);
+ calc = (gBattleMons[gBankAttacker].level + obedienceLevel) * rnd >> 8;
+ if (calc < obedienceLevel)
+ return 0;
+
+ // is not obedient
+ if (gCurrentMove == MOVE_RAGE)
+ gBattleMons[gBankAttacker].status2 &= ~(STATUS2_RAGE);
+ if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK))
+ {
+ gBattlescriptCurrInstr = gUnknown_081D995F;
+ return 1;
+ }
+
+ rnd = (Random() & 255);
+ calc = (gBattleMons[gBankAttacker].level + obedienceLevel) * rnd >> 8;
+ if (calc < obedienceLevel)
+ {
+ calc = CheckMoveLimitations(gBankAttacker, gBitTable[gCurrMovePos], 0xFF);
+ if (calc == 0xF) // all moves cannot be used
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ return 1;
+ }
+ else // use a random move
+ {
+ do
+ {
+ gCurrMovePos = gUnknown_02024BE5 = Random() & 3;
+ } while (gBitTable[gCurrMovePos] & calc);
+ gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos];
+ gBattleCommunication[3] = 0;
+ gDynamicBasePower = 0;
+ BATTLE_STRUCT->dynamicMoveType = 0;
+ gBattlescriptCurrInstr = gUnknown_081D996F;
+ gBankTarget = GetMoveTarget(gRandomMove, 0);
+ gHitMarker |= HITMARKER_x200000;
+ return 2;
+ }
+ }
+ else
+ {
+ obedienceLevel = gBattleMons[gBankAttacker].level - obedienceLevel;
+
+ calc = (Random() & 255);
+ if (calc < obedienceLevel && !(gBattleMons[gBankAttacker].status1 & STATUS_ANY) && gBattleMons[gBankAttacker].ability != ABILITY_VITAL_SPIRIT && gBattleMons[gBankAttacker].ability != ABILITY_INSOMNIA)
+ {
+ // try putting asleep
+ int i;
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gBattleMons[i].status2 & STATUS2_UPROAR)
+ break;
+ }
+ if (i == gNoOfAllBanks)
+ {
+ gBattlescriptCurrInstr = gUnknown_081D9989;
+ return 1;
+ }
+ }
+ calc -= obedienceLevel;
+ if (calc < obedienceLevel)
+ {
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankAttacker], MOVE_POUND, 0, 40, 0, gBankAttacker, gBankAttacker);
+ gBankTarget = gBankAttacker;
+ gBattlescriptCurrInstr = gUnknown_081D99A0;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ return 2;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ return 1;
+ }
+ }
+}
diff --git a/src/battle_4.c b/src/battle_4.c
index d58ae4145..6dd5d7df6 100644
--- a/src/battle_4.c
+++ b/src/battle_4.c
@@ -95,13 +95,13 @@ extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one
extern u8 gCurrentMoveTurn;
//extern functions
-bool8 CantUseMove(void);
+u8 AtkCanceller_UnableToUseMove(void);
void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move);
void CancelMultiTurnMoves(u8 bank);
void b_movescr_stack_push(u8* BS_ptr);
void b_movescr_stack_push_cursor(void);
void RecordAbilityBattle(u8 bank, u8 ability);
-void RecordItemBattle(u8 bank, u8 item);
+void RecordItemBattle(u8 bank, u8 holdEffect);
int IsPokeDisobedient(void);
static bool8 IsTwoTurnsMove(u16 move);
static void DestinyBondFlagUpdate(void);
@@ -150,16 +150,16 @@ bool8 sub_8014AB8(u8 bank); //can run from battle
u8 CountAliveMons(u8 caseID);
void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp);
u8 CanRunFromBattle(void);
-u8 sub_801B5C0(u16 move, u8 targetbyte); //get target of move
+u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move
void sub_80153D0(u8 atk); //pressure perish song pp decrement
-u8 castform_switch(u8 bank);
+u8 CastformDataTypeChange(u8 bank);
void b_push_move_exec(u8* bs_ptr);
u8 sav1_map_get_light_level(void);
u8 CalculatePlayerPartyCount(void);
u16 Sqrt(u32 num);
u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display
void sub_814A880(u8 a1, u8 a2);
-u8 sub_8015A98(u8 bank, u8 unusable_moves, u8 flags); //choose move limitations
+u8 CheckMoveLimitations(u8 bank, u8 unusable_moves, u8 flags);
void sub_801529C(u8 bank);
bool8 IsLinkDoubleBattle(void);
void sub_8094B6C(u8 bank, u8 partyID, u8 r2);
@@ -207,7 +207,7 @@ extern u8 BattleScript_1D6F44[]; //present dmg
extern u8 BattleScript_1D83B5[]; //present full hp
extern u8 BattleScript_1D839B[]; //present hp heal
extern u8 BattleScript_1D6F74[];
-extern u8 gUnknown_081D977D[]; //castform change bs
+extern u8 BattleScript_CastformChange[];
extern u8 gUnknown_081D9834[];
extern u8 gUnknown_081D90FC[]; //bs random switchout
extern u8 gUnknown_081D95DB[]; //bs payday money give
@@ -223,31 +223,8 @@ extern u8 gUnknown_081D95DB[]; //bs payday money give
#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr))
-
-#define MOVESTATUS_MISSED (1 << 0)
-#define MOVESTATUS_SUPEREFFECTIVE (1 << 1)
-#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2)
-#define MOVESTATUS_NOTAFFECTED (1 << 3)
-#define MOVESTATUS_ONEHITKO (1 << 4)
-#define MOVESTATUS_FAILED (1 << 5)
-#define MOVESTATUS_ENDURED (1 << 6)
-#define MOVESTATUS_HUNGON (1 << 7)
-
-#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))
-
#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
-#define ABILITYEFFECT_CONTACT 0x4
-#define ABILITYEFFECT_IMMUNITY 0x5
-#define ABILITYEFFECT_SYNCHRONIZE 0x7
-#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
-#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
-#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD
-#define ABILITYEFFECT_COUNT_OTHER_SIZE 0x10
-#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11
-#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
-#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
-
//array entries for battle communication
#define MOVE_EFFECT_BYTE 0x3
#define MULTISTRING_CHOOSER 0x5
@@ -269,15 +246,6 @@ extern u8 gUnknown_081D95DB[]; //bs payday money give
#define CMP_COMMON_BITS 0x4
#define CMP_NO_COMMON_BITS 0x5
-#define BATTLE_WON 0x1
-#define BATTLE_LOST 0x2
-#define BATTLE_DREW 0x3
-#define BATTLE_RAN 0x4
-#define BATTLE_PLAYER_TELEPORTED 0x5
-#define BATTLE_POKE_FLED 0x6
-#define BATTLE_CAUGHT 0x7
-#define BATTLE_OPPONENT_TELEPORTED 0xA
-
#define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00)))
#define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08)))
@@ -299,7 +267,6 @@ extern u8 gUnknown_081D95DB[]; //bs payday money give
#define RecordAbilitySetField6(ability, fieldValue) \
(gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability))
-#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special)))
#define HP_ON_SWITCHOUT (((u16*)(0x020160bc)))
@@ -553,8 +520,6 @@ static void atkF5_removeattackerstatus1(void);
static void atkF6_802BF48(void);
static void atkF7_802BF54(void);
-typedef void (*BattleCmdFunc)(void);
-
const BattleCmdFunc gBattleScriptingCommandsTable[] =
{
atk00_attackcanceler,
@@ -1061,11 +1026,11 @@ static void atk00_attackcanceler(void)
}
if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
{
- gHitMarker |= HITMARKER_x80000;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
gBattlescriptCurrInstr = BattleScript_EndTurn;
return;
}
- if (CantUseMove())
+ if (AtkCanceller_UnableToUseMove())
return;
if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0))
return;
@@ -5217,7 +5182,7 @@ static void atk15_seteffectwithchancetarget(void)
else
gBattlescriptCurrInstr++;
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
- BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later
+ BATTLE_STRUCT->unk16112 = 0;
}
static void atk16_seteffectprimary(void)
@@ -5240,7 +5205,7 @@ static void atk18_status_effect_clear(void)
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
gBattlescriptCurrInstr += 2;
- BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later
+ BATTLE_STRUCT->unk16112 = 0;
}
//Fuck this, Maybe later
@@ -10144,7 +10109,7 @@ static void atk4D_switch_data_update(void)
gBattleTextBuff1[1] = 7;
gBattleTextBuff1[2] = gActiveBank;
gBattleTextBuff1[3] = gBattlePartyID[gActiveBank];
- gBattleTextBuff1[4] = 0xFF;
+ gBattleTextBuff1[4] = EOS;
gBattlescriptCurrInstr += 2;
}
@@ -12788,7 +12753,7 @@ static void atk76_various(void)
gBattleCommunication[0] = CanRunFromBattle();
break;
case 3:
- gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBankTarget = GetMoveTarget(gCurrentMove, 0);
break;
case 4:
if (gHitMarker & HITMARKER_FAINTED(gActiveBank))
@@ -12964,7 +12929,7 @@ static void atk7C_8025508(void)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gCurrentMove = r7;
- gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBankTarget = GetMoveTarget(gCurrentMove, 0);
gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
}
else if (r6 != 0 && r5 != 0 && r6 != 0xFFFF && r5 != 0xFFFF)
@@ -12974,21 +12939,21 @@ static void atk7C_8025508(void)
gCurrentMove = r6;
else
gCurrentMove = r5;
- gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBankTarget = GetMoveTarget(gCurrentMove, 0);
gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
}
else if (r6 != 0 && r6 != 0xFFFF)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gCurrentMove = r6;
- gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBankTarget = GetMoveTarget(gCurrentMove, 0);
gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
}
else if (r5 != 0 && r5 != 0xFFFF)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gCurrentMove = r5;
- gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBankTarget = GetMoveTarget(gCurrentMove, 0);
gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
}
else
@@ -13113,7 +13078,7 @@ static void atk83_nop(void)
gBattlescriptCurrInstr++;
}
-bool8 sub_8025A44(u8 bank) //uproar wakeup check
+bool8 UproarWakeUpCheck(u8 bank)
{
int i;
for (i = 0; i < gNoOfAllBanks; i++)
@@ -13138,7 +13103,7 @@ bool8 sub_8025A44(u8 bank) //uproar wakeup check
static void atk84_jump_if_cant_sleep(void)
{
u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
- if (sub_8025A44(gBankTarget))
+ if (UproarWakeUpCheck(gBankTarget))
gBattlescriptCurrInstr = jump_loc;
else if (gBattleMons[gBankTarget].ability == ABILITY_INSOMNIA || gBattleMons[gBankTarget].ability == ABILITY_VITAL_SPIRIT)
{
@@ -14962,7 +14927,7 @@ static void atk9E_metronome(void)
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect];
- gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBankTarget = GetMoveTarget(gCurrentMove, 0);
}
#else
@@ -15028,7 +14993,7 @@ _080278F8:\n\
str r0, [r1]\n\
ldrh r0, [r4]\n\
movs r1, 0\n\
- bl sub_801B5C0\n\
+ bl GetMoveTarget\n\
ldr r1, _0802795C @ =gBankTarget\n\
strb r0, [r1]\n\
pop {r3}\n\
@@ -15582,7 +15547,7 @@ static void atkA9_sleeptalk_choose_move(void)
|| gBattleMons[gBankAttacker].moves[i] == MOVE_UPROAR || IsTwoTurnsMove(gBattleMons[gBankAttacker].moves[i]))
unusable_moves |= gBitTable[i];
}
- unusable_moves = sub_8015A98(gBankAttacker, unusable_moves, 0xFD);
+ unusable_moves = CheckMoveLimitations(gBankAttacker, unusable_moves, 0xFD);
if (unusable_moves == 0xF) //all 4 moves cannot be chosen
gBattlescriptCurrInstr += 5;
else //at least one move can be chosen
@@ -15596,7 +15561,7 @@ static void atkA9_sleeptalk_choose_move(void)
gRandomMove = gBattleMons[gBankAttacker].moves[random_pos];
gCurrMovePos = random_pos;
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
- gBankTarget = sub_801B5C0(gRandomMove, 0);
+ gBankTarget = GetMoveTarget(gRandomMove, 0);
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
}
}
@@ -16710,7 +16675,7 @@ static void atkCC_callterrainattack(void) //nature power
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gCurrentMove = sNaturePowerMoves[gBattleTerrain];
- gBankTarget = sub_801B5C0(gCurrentMove, 0);
+ gBankTarget = GetMoveTarget(gCurrentMove, 0);
b_movescr_stack_push(gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]);
gBattlescriptCurrInstr++;
}
@@ -17333,7 +17298,7 @@ static void atkDE_asistattackselect(void)
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no];
- gBankTarget = sub_801B5C0(gRandomMove, 0);
+ gBankTarget = GetMoveTarget(gRandomMove, 0);
gBattlescriptCurrInstr += 5;
}
else
@@ -17477,7 +17442,7 @@ _0802AB54:\n\
strh r0, [r4]\n\
ldrh r0, [r4]\n\
movs r1, 0\n\
- bl sub_801B5C0\n\
+ bl GetMoveTarget\n\
ldr r1, _0802ABC4 @ =gBankTarget\n\
strb r0, [r1]\n\
ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr\n\
@@ -17678,10 +17643,10 @@ static void atkE7_castform_data_change(void)
{
u8 form;
gBattlescriptCurrInstr++;
- form = castform_switch(BATTLE_STRUCT->scriptingActive);
+ form = CastformDataTypeChange(BATTLE_STRUCT->scriptingActive);
if (form)
{
- b_push_move_exec(gUnknown_081D977D);
+ b_push_move_exec(BattleScript_CastformChange);
BATTLE_STRUCT->castformToChangeInto = form - 1;
}
}
diff --git a/src/battle_ai.c b/src/battle_ai.c
index a1cb805d9..0e20c6b05 100644
--- a/src/battle_ai.c
+++ b/src/battle_ai.c
@@ -301,7 +301,7 @@ void BattleAI_SetupAIData(void)
for (i = 0; i < MAX_MON_MOVES; i++)
AI_THINKING_STRUCT->score[i] = 100;
- r7 = sub_8015A98(gActiveBank, 0, 0xFF);
+ r7 = CheckMoveLimitations(gActiveBank, 0, 0xFF);
// probably sets up the moves to consider and ignores non-valid moves such as NO_MOVE or glitch moves.
for (i = 0; i < MAX_MON_MOVES; i++)
diff --git a/src/battle_anim_807B69C.c b/src/battle_anim_807B69C.c
new file mode 100644
index 000000000..42932877b
--- /dev/null
+++ b/src/battle_anim_807B69C.c
@@ -0,0 +1,353 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "blend_palette.h"
+#include "decompress.h"
+#include "palette.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+
+extern u8 gBattleAnimPlayerMonIndex;
+extern u8 gBattleAnimEnemyMonIndex;
+extern bool8 gAnimScriptActive;
+extern void (*gAnimScriptCallback)(void);
+extern s16 gBattleAnimArgs[];
+extern u8 gBattleAnimEnemyMonIndex;
+extern u8 gObjectBankIDs[];
+extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
+extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
+extern const u8 *const gBattleAnims_StatusConditions[];
+extern const struct OamData gOamData_837E05C;
+extern const struct OamData gOamData_837DF24;
+
+extern u8 sub_8077ABC(u8, u8);
+extern void sub_80E32E0(u8);
+
+
+static const struct Subsprite gSubspriteTable_83931B8[] =
+{
+ {.x = -16, .y = -16, .shape = ST_OAM_SQUARE, .size = 3, .tileOffset = 0, .priority = 2},
+ {.x = -16, .y = 48, .shape = ST_OAM_H_RECTANGLE, .size = 3, .tileOffset = 64, .priority = 2},
+ {.x = 48, .y = -16, .shape = ST_OAM_V_RECTANGLE, .size = 3, .tileOffset = 96, .priority = 2},
+ {.x = 48, .y = 48, .shape = ST_OAM_SQUARE, .size = 2, .tileOffset = 128, .priority = 2},
+};
+
+static const struct SubspriteTable gSubspriteTables_83931D8[] =
+{
+ {ARRAY_COUNT(gSubspriteTable_83931B8), gSubspriteTable_83931B8},
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83931E0 =
+{
+ .tileTag = 10010,
+ .paletteTag = 10010,
+ .oam = &gOamData_837E05C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static void sub_807B870(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_83931F8 =
+{
+ .tileTag = 10136,
+ .paletteTag = 10136,
+ .oam = &gOamData_837DF24,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807B870,
+};
+
+static void sub_807B7E0(u8);
+static void sub_807B8A4(struct Sprite *);
+static void sub_807B9D8(u8);
+static void sub_807BA24(u8);
+static void sub_807BAD4(u8);
+static void sub_807BB24(u8);
+static void sub_807BDAC(u8);
+
+u8 unref_sub_807B69C(u8 a, u8 b)
+{
+ u8 spriteId1 = gObjectBankIDs[a];
+ u8 taskId = CreateTask(sub_807B7E0, 10);
+ u8 spriteId2;
+ u8 i;
+
+ LoadCompressedObjectPic(&gBattleAnimPicTable[136]);
+ LoadCompressedObjectPalette(&gBattleAnimPaletteTable[136]);
+ gTasks[taskId].data[0] = a;
+ if (b != 0)
+ {
+ gTasks[taskId].data[1] = 0x1F;
+ for (i = 0; i < 10; i++)
+ {
+ spriteId2 = CreateSprite(&gSpriteTemplate_83931F8, gSprites[spriteId1].pos1.x, gSprites[spriteId1].pos1.y + 32, 0);
+ gSprites[spriteId2].data0 = i * 51;
+ gSprites[spriteId2].data1 = -256;
+ gSprites[spriteId2].invisible = TRUE;
+ if (i > 4)
+ gSprites[spriteId2].data6 = 21;
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[1] = 0x7C00;
+ for (i = 0; i < 10; i++)
+ {
+ spriteId2 = CreateSprite(&gSpriteTemplate_83931F8, gSprites[spriteId1].pos1.x, gSprites[spriteId1].pos1.y - 32, 0);
+ gSprites[spriteId2].data0 = i * 51;
+ gSprites[spriteId2].data1 = 256;
+ gSprites[spriteId2].invisible = TRUE;
+ if (i > 4)
+ gSprites[spriteId2].data6 = 21;
+ }
+ }
+ gSprites[spriteId2].data7 = 1;
+ return taskId;
+}
+
+static void sub_807B7E0(u8 taskId)
+{
+ if (gTasks[taskId].data[2] == 2)
+ {
+ gTasks[taskId].data[2] = 0;
+ BlendPalette(0x100 + gTasks[taskId].data[0] * 16, 16, gTasks[taskId].data[4], gTasks[taskId].data[1]);
+ if (gTasks[taskId].data[5] == 0)
+ {
+ gTasks[taskId].data[4]++;
+ if (gTasks[taskId].data[4] > 8)
+ gTasks[taskId].data[5] ^= 1;
+ }
+ else
+ {
+ u16 var = gTasks[taskId].data[4];
+
+ gTasks[taskId].data[4]--;
+ if (gTasks[taskId].data[4] < 0)
+ {
+ gTasks[taskId].data[4] = var;
+ gTasks[taskId].data[5] ^= 1;
+ gTasks[taskId].data[3]++;
+ if (gTasks[taskId].data[3] == 2)
+ DestroyTask(taskId);
+ }
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[2]++;
+ }
+}
+
+static void sub_807B870(struct Sprite *sprite)
+{
+ if (sprite->data6 == 0)
+ {
+ sprite->invisible = FALSE;
+ sprite->callback = sub_807B8A4;
+ sub_807B8A4(sprite);
+ }
+ else
+ {
+ sprite->data6 --;
+ }
+}
+
+static void sub_807B8A4(struct Sprite *sprite)
+{
+ sprite->pos2.x = Cos(sprite->data0, 32);
+ sprite->pos2.y = Sin(sprite->data0, 8);
+ if (sprite->data0 < 128)
+ sprite->subpriority = 29;
+ else
+ sprite->subpriority = 31;
+ sprite->data0 = (sprite->data0 + 8) & 0xFF;
+ sprite->data5 += sprite->data1;
+ sprite->pos2.y += sprite->data5 >> 8;
+ sprite->data2++;
+ if (sprite->data2 == 52)
+ {
+ if (sprite->data7 != 0)
+ DestroySpriteAndFreeResources(sprite);
+ else
+ DestroySprite(sprite);
+ }
+}
+
+void sub_807B920(u8 taskId)
+{
+ s16 x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) - 32;
+ s16 y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) - 36;
+ u8 spriteId;
+
+ if (IsContest())
+ x -= 6;
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x1000;
+ spriteId = CreateSprite(&gSpriteTemplate_83931E0, x, y, 4);
+ SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83931D8);
+ gTasks[taskId].data[15] = spriteId;
+ gTasks[taskId].func = sub_807B9D8;
+}
+
+static void sub_807B9D8(u8 taskId)
+{
+ gTasks[taskId].data[1]++;
+ if (gTasks[taskId].data[1] == 10)
+ {
+ gTasks[taskId].func = sub_807BA24;
+ gTasks[taskId].data[1] = 0;
+ }
+ else
+ {
+ u8 var = gTasks[taskId].data[1];
+
+ REG_BLDALPHA = ((16 - var) << 8) | var;
+ }
+}
+
+static void sub_807BA24(u8 taskId)
+{
+ u8 r2 = IndexOfSpritePaletteTag(0x271A);
+
+ if (gTasks[taskId].data[1]++ > 13)
+ {
+ gTasks[taskId].data[2]++;
+ if (gTasks[taskId].data[2] == 3)
+ {
+ u16 temp;
+
+ temp = gPlttBufferFaded[0x100 + r2 * 16 + 13];
+ gPlttBufferFaded[0x100 + r2 * 16 + 13] = gPlttBufferFaded[0x100 + r2 * 16 + 14];
+ gPlttBufferFaded[0x100 + r2 * 16 + 14] = gPlttBufferFaded[0x100 + r2 * 16 + 15];
+ gPlttBufferFaded[0x100 + r2 * 16 + 15] = temp;
+
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3]++;
+ if (gTasks[taskId].data[3] == 3)
+ {
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[4]++;
+ if (gTasks[taskId].data[4] == 2)
+ {
+ gTasks[taskId].data[1] = 9;
+ gTasks[taskId].func = sub_807BAD4;
+ }
+ }
+ }
+ }
+}
+
+static void sub_807BAD4(u8 taskId)
+{
+ gTasks[taskId].data[1]--;
+ if (gTasks[taskId].data[1] == -1)
+ {
+ gTasks[taskId].func = sub_807BB24;
+ gTasks[taskId].data[1] = 0;
+ }
+ else
+ {
+ u8 var = gTasks[taskId].data[1];
+
+ REG_BLDALPHA = ((16 - var) << 8) | var;
+ }
+}
+
+static void sub_807BB24(u8 taskId)
+{
+ gTasks[taskId].data[1]++;
+ if (gTasks[taskId].data[1] == 37)
+ {
+ u8 spriteId = gTasks[taskId].data[15];
+
+ FreeSpriteOamMatrix(&gSprites[spriteId]);
+ DestroySprite(&gSprites[spriteId]);
+ }
+ else if (gTasks[taskId].data[1] == 39)
+ {
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_807BB88(u8 taskId)
+{
+ s16 r5;
+ s16 r2;
+ s16 r3 = 0;
+
+ switch (ewram17840.unk0)
+ {
+ case 15: r5 = 0; r2 = 0; break;
+ case 16: r5 = 0; r2 = 1; break;
+ case 17: r5 = 0; r2 = 3; break;
+ case 18: r5 = 0; r2 = 5; break;
+ case 19: r5 = 0; r2 = 6; break;
+ case 20: r5 = 0; r2 = 2; break;
+ case 21: r5 = 0; r2 = 4; break;
+ case 22: r5 = 1; r2 = 0; break;
+ case 23: r5 = 1; r2 = 1; break;
+ case 24: r5 = 1; r2 = 3; break;
+ case 25: r5 = 1; r2 = 5; break;
+ case 26: r5 = 1; r2 = 6; break;
+ case 27: r5 = 1; r2 = 2; break;
+ case 28: r5 = 1; r2 = 4; break;
+ case 39: r5 = 0; r2 = 0; r3 = 1; break;
+ case 40: r5 = 0; r2 = 1; r3 = 1; break;
+ case 41: r5 = 0; r2 = 3; r3 = 1; break;
+ case 42: r5 = 0; r2 = 5; r3 = 1; break;
+ case 43: r5 = 0; r2 = 6; r3 = 1; break;
+ case 44: r5 = 0; r2 = 2; r3 = 1; break;
+ case 45: r5 = 0; r2 = 4; r3 = 1; break;
+ case 46: r5 = 1; r2 = 0; r3 = 1; break;
+ case 47: r5 = 1; r2 = 1; r3 = 1; break;
+ case 48: r5 = 1; r2 = 3; r3 = 1; break;
+ case 49: r5 = 1; r2 = 5; r3 = 1; break;
+ case 50: r5 = 1; r2 = 6; r3 = 1; break;
+ case 51: r5 = 1; r2 = 2; r3 = 1; break;
+ case 52: r5 = 1; r2 = 4; r3 = 1; break;
+ case 55: r5 = 0; r2 = 0xFF; r3 = 0; break;
+ case 56: r5 = 0; r2 = 0xFF; r3 = 1; break;
+ case 57: r5 = 1; r2 = 0xFF; r3 = 0; break;
+ case 58: r5 = 1; r2 = 0xFF; r3 = 1; break;
+
+ default:
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ gBattleAnimArgs[0] = r5;
+ gBattleAnimArgs[1] = r2;
+ gBattleAnimArgs[2] = 0;
+ gBattleAnimArgs[3] = 0;
+ gBattleAnimArgs[4] = r3;
+ gTasks[taskId].func = sub_80E32E0;
+ sub_80E32E0(taskId);
+}
+
+void move_anim_start_t2(u8 a, u8 b)
+{
+ u8 taskId;
+
+ gBattleAnimPlayerMonIndex = a;
+ gBattleAnimEnemyMonIndex = a;
+ DoMoveAnim(gBattleAnims_StatusConditions, b, 0);
+ taskId = CreateTask(sub_807BDAC, 10);
+ gTasks[taskId].data[0] = a;
+}
+
+static void sub_807BDAC(u8 taskId)
+{
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ ewram17810[gTasks[taskId].data[0]].unk0_4 = 0;
+ DestroyTask(taskId);
+ }
+}
diff --git a/src/battle_message.c b/src/battle_message.c
new file mode 100644
index 000000000..37ec14459
--- /dev/null
+++ b/src/battle_message.c
@@ -0,0 +1,974 @@
+#include "global.h"
+#include "battle_message.h"
+#include "battle.h"
+#include "item.h"
+#include "items.h"
+#include "pokemon.h"
+#include "data2.h"
+#include "text.h"
+#include "string_util.h"
+#include "link.h"
+#include "battle_setup.h"
+#include "battle_tower.h"
+#include "flags.h"
+
+#define BATTLESTRING_TO_SUB 12
+#define BATTLESTRINGS_NO 351
+#define BATTLESTRINGS_MAX BATTLESTRINGS_NO + BATTLESTRING_TO_SUB
+
+extern const u8* const gBattleStringsTable[BATTLESTRINGS_NO];
+
+extern u16 gLastUsedItem;
+extern u8 gLastUsedAbility;
+extern u8 gActiveBank;
+extern u8 gBankAttacker;
+extern u8 gBankTarget;
+extern u8 gStringBank;
+extern u8 gEffectBank;
+extern u8 gAbilitiesPerBank[4];
+extern u8 gBattleTextBuff1[];
+extern u8 gBattleTextBuff2[];
+extern u8 gBattleTextBuff3[];
+extern u8 gStringVar1[];
+extern u8 gStringVar2[];
+extern u8 gStringVar3[];
+extern u16 gBattleTypeFlags;
+extern u16 gTrainerBattleOpponent;
+extern u8 gDisplayedStringBattle[];
+extern u8 gStringVar1[];
+extern u8 gStringVar2[];
+extern u8 gStringVar3[];
+extern u16 gBattlePartyID[4];
+extern struct BattleEnigmaBerry gEnigmaBerries[4];
+extern u8 gBattleBufferA[4][0x200];
+
+extern const u8 gUnknown_084005DB[];
+extern const u8 gUnknown_084005C7[];
+extern const u8 gUnknown_084005AA[];
+extern const u8 gUnknown_08400568[];
+extern const u8 gUnknown_08400590[];
+extern const u8 gUnknown_0840057B[];
+extern const u8 gUnknown_08400555[];
+extern const u8 gUnknown_084006F1[];
+extern const u8 gUnknown_084006A4[];
+extern const u8 gUnknown_0840069C[];
+extern const u8 gUnknown_0840065C[];
+extern const u8 gUnknown_08400645[];
+extern const u8 gUnknown_08400608[];
+extern const u8 gUnknown_08400635[];
+extern const u8 gUnknown_084005F5[];
+extern const u8 gUnknown_08400709[];
+extern const u8 gUnknown_08400727[];
+extern const u8 gUnknown_08400736[];
+extern const u8 gUnknown_08400749[];
+extern const u8 gUnknown_08400781[];
+extern const u8 gUnknown_08400771[];
+extern const u8 gUnknown_0840075E[];
+extern const u8 gUnknown_084006B3[];
+extern const u8 gUnknown_084006BB[];
+extern const u8 gUnknown_084006C6[];
+extern const u8 gUnknown_084006D5[];
+extern const u8 gUnknown_0840068C[];
+extern const u8 gUnknown_0840067C[];
+extern const u8 gUnknown_08400622[];
+extern const u8 gUnknown_084007BD[];
+extern const u8 gUnknown_083FFEFC[];
+extern const u8 gUnknown_083FFFF7[];
+extern const u8 gUnknown_083FFFEA[];
+extern const u8 gUnknown_083FFF6A[];
+extern const u8 gUnknown_083FFF99[];
+extern const u8 gUnknown_083FFFCB[];
+extern const u8 gUnknown_083FFF56[];
+extern const u8 gUnknown_083FFF81[];
+extern const u8 gUnknown_083FFFB3[];
+extern const u8 gUnknown_08400A78[];
+extern const u8 gUnknown_08400A85[];
+extern const u8 gUnknown_08400797[];
+extern const u8 gUnknown_08400791[];
+extern const u8 gUnknown_084007B7[];
+extern const u8 gUnknown_084007B2[];
+extern const u8 gUnknown_0840079C[];
+extern const u8 gUnknown_084007A1[];
+extern const u8 gUnknown_084007A7[];
+extern const u8 gUnknown_084007AC[];
+extern const u8 gUnknown_084009ED[];
+extern const u8 gUnknown_084009F7[];
+extern const u8 gUnknown_084007C8[];
+extern const u8 gUnknown_084007CA[];
+extern const u8 gUnknown_084007CC[];
+extern const u8 gUnknown_084007CE[];
+extern const u8 gUnknown_084007D0[];
+extern const u8 gUnknown_08400E5E[];
+extern const u8 gUnknown_08400E62[];
+
+extern const u16 gUnknown_084016BC[]; // a table of moves
+
+extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings
+extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings
+extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings
+
+struct StatusFlagString
+{
+ u8* flag;
+ u8* ptr;
+};
+
+extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text
+extern const u8 gUnknown_084017A8[8]; // empty flags
+
+struct StringInfo
+{
+ u16 currentMove;
+ u16 lastMove;
+ u16 lastItem;
+ u8 lastAbility;
+ u8 scrActive;
+ u8 unk1605E;
+ u8 hpScale;
+ u8 StringBank;
+ u8 moveType;
+ u8 abilities[4];
+ u8 textBuffs[3][0x10];
+};
+
+extern struct StringInfo* gSelectedOrderFromParty;
+#define gStringInfo gSelectedOrderFromParty
+
+void sub_8121D1C(u8* textBuff);
+void sub_8121D74(u8* textBuff);
+void StrCpyDecodeBattleTextBuff(u8* src, u8* dst);
+
+u8 GetBankSide(u8 bank);
+s32 sub_803FC34(u16);
+void get_trainer_name(u8* dst);
+u8 get_trainer_class_name_index(void);
+u8 sub_8135FD8(void);
+u8 GetMultiplayerId(void);
+u8 GetBankByPlayerAI(u8 ID);
+u8 GetBankSide(u8 bank);
+u8 GetBankIdentity(u8 bank);
+#ifdef GERMAN
+extern u8 *de_sub_804110C();
+#endif
+
+void BufferStringBattle(u16 stringID)
+{
+ int i;
+ const u8* stringPtr = NULL;
+
+ gStringInfo = (struct StringInfo*)(&gBattleBufferA[gActiveBank][4]);
+ gLastUsedItem = gStringInfo->lastItem;
+ gLastUsedAbility = gStringInfo->lastAbility;
+ BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive;
+ BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E;
+ BATTLE_STRUCT->hpScale = gStringInfo->hpScale;
+ gStringBank = gStringInfo->StringBank;
+ BATTLE_STRUCT->stringMoveType = gStringInfo->moveType;
+ for (i = 0; i < 4; i++)
+ {
+ gAbilitiesPerBank[i] = gStringInfo->abilities[i];
+ }
+ for (i = 0; i < 0x10; i++)
+ {
+ gBattleTextBuff1[i] = gStringInfo->textBuffs[0][i];
+ gBattleTextBuff2[i] = gStringInfo->textBuffs[1][i];
+ gBattleTextBuff3[i] = gStringInfo->textBuffs[2][i];
+ }
+ switch (stringID)
+ {
+ case 0: // first battle msg
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = gUnknown_084005DB;
+ else
+ stringPtr = gUnknown_084005C7;
+ }
+ else
+ {
+ stringPtr = gUnknown_084005AA;
+#ifdef GERMAN
+ stringPtr = de_sub_804110C(0xFFFF, stringPtr);
+#endif
+ }
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
+ stringPtr = gUnknown_08400568;
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles
+ stringPtr = gUnknown_08400590;
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
+ stringPtr = gUnknown_0840057B;
+ else
+ stringPtr = gUnknown_08400555;
+ }
+ break;
+ case 1: // poke first send-out
+ if (GetBankSide(gActiveBank) == 0)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = gUnknown_084006F1;
+ else
+ stringPtr = gUnknown_084006A4;
+ }
+ else
+ stringPtr = gUnknown_0840069C;
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = gUnknown_0840065C;
+ else if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ stringPtr = gUnknown_08400645;
+ else
+ {
+ stringPtr = gUnknown_08400608;
+#ifdef GERMAN
+ stringPtr = de_sub_804110C(0xFFFF, stringPtr);
+#endif
+ }
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ stringPtr = gUnknown_08400635;
+ else
+ {
+ stringPtr = gUnknown_084005F5;
+#ifdef GERMAN
+ stringPtr = de_sub_804110C(0xFFFF, stringPtr);
+#endif
+ }
+ }
+ break;
+ case 2: // sending poke to ball msg
+ if (GetBankSide(gActiveBank) == 0)
+ {
+ if (BATTLE_STRUCT->hpScale == 0)
+ stringPtr = gUnknown_08400709;
+ else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ stringPtr = gUnknown_08400727;
+ else if (BATTLE_STRUCT->hpScale == 2)
+ stringPtr = gUnknown_08400736;
+ else
+ stringPtr = gUnknown_08400749;
+ }
+ else
+ {
+ if (gTrainerBattleOpponent == 0x800)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = gUnknown_08400781;
+ else
+ stringPtr = gUnknown_08400771;
+ }
+ else
+ {
+ stringPtr = gUnknown_0840075E;
+#ifdef GERMAN
+ stringPtr = de_sub_804110C(0xFFFF, stringPtr);
+#endif
+ }
+ }
+ break;
+ case 3: // switch-in msg
+ if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0)
+ {
+ if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ stringPtr = gUnknown_084006B3;
+ else if (BATTLE_STRUCT->hpScale == 1)
+ stringPtr = gUnknown_084006BB;
+ else if (BATTLE_STRUCT->hpScale == 2)
+ stringPtr = gUnknown_084006C6;
+ else
+ stringPtr = gUnknown_084006D5;
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = gUnknown_0840068C;
+ else
+ stringPtr = gUnknown_0840067C;
+ }
+ else
+ {
+ stringPtr = gUnknown_08400622;
+#ifdef GERMAN
+ stringPtr = de_sub_804110C(0xFFFF, stringPtr);
+#endif
+ }
+ }
+ break;
+ case 4: // pokemon used a move msg
+ sub_8121D1C(gBattleTextBuff1);
+ if (gStringInfo->currentMove > 0x162)
+ StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]);
+ else
+ StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
+ sub_8121D74(gBattleTextBuff2);
+ stringPtr = gUnknown_084007BD;
+ break;
+ case 5: // battle end
+ if (gBattleTextBuff1[0] & 0x80)
+ {
+ gBattleTextBuff1[0] &= ~(0x80);
+ if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3)
+ gBattleTextBuff1[0] ^= 3;
+ if (gBattleTextBuff1[0] == BATTLE_LOST || gBattleTextBuff1[0] == BATTLE_DREW)
+ stringPtr = gUnknown_083FFEFC;
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ stringPtr = gUnknown_083FFFF7;
+ else
+ stringPtr = gUnknown_083FFFEA;
+ }
+ }
+ else
+ {
+ if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3)
+ gBattleTextBuff1[0] ^= 3;
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ switch (gBattleTextBuff1[0])
+ {
+ case BATTLE_WON:
+ stringPtr = gUnknown_083FFF6A;
+ break;
+ case BATTLE_LOST:
+ stringPtr = gUnknown_083FFF99;
+ break;
+ case BATTLE_DREW:
+ stringPtr = gUnknown_083FFFCB;
+ break;
+ }
+ }
+ else
+ {
+ switch (gBattleTextBuff1[0])
+ {
+ case BATTLE_WON:
+ stringPtr = gUnknown_083FFF56;
+ break;
+ case BATTLE_LOST:
+ stringPtr = gUnknown_083FFF81;
+ break;
+ case BATTLE_DREW:
+ stringPtr = gUnknown_083FFFB3;
+ break;
+ }
+ }
+ }
+ break;
+ default: // load a string from the table
+ if (stringID >= BATTLESTRINGS_MAX)
+ {
+ gDisplayedStringBattle[0] = EOS;
+ return;
+ }
+ else
+ {
+ stringPtr = gBattleStringsTable[stringID - BATTLESTRING_TO_SUB];
+#ifdef GERMAN
+ stringPtr = de_sub_804110C(stringID, stringPtr);
+#endif
+ }
+ break;
+ }
+ StrCpyDecodeToDisplayedStringBattle(stringPtr);
+}
+
+u32 StrCpyDecodeToDisplayedStringBattle(const u8* src)
+{
+ StrCpyDecodeBattle(src, gDisplayedStringBattle);
+}
+
+const u8* AppendStatusString(u8* src)
+{
+ u32 i;
+ u8 status[8];
+ u32 flag1, flag2;
+ u8* statusPtr;
+
+ memcpy(status, gUnknown_084017A8, 8);
+
+ statusPtr = status;
+ for (i = 0; i < sizeof(struct StatusFlagString); i++)
+ {
+ if (*src == EOS)
+ break;
+ *statusPtr = *src;
+ src++;
+ statusPtr++;
+ }
+ flag1 = *(u32*)(&status[0]);
+ flag2 = *(u32*)(&status[4]);
+ for (i = 0; i < 7; i++)
+ {
+ if (flag1 == *(u32*)(&gUnknown_081FA6D4[i].flag[0]) && flag2 == *(u32*)(&gUnknown_081FA6D4[i].flag[4]))
+ return gUnknown_081FA6D4[i].ptr;
+ }
+ return NULL;
+}
+
+#ifdef GERMAN
+extern u8 *de_sub_8073174(u8 *, const u8 *);
+extern u8 *de_sub_8041024(s32, u32);
+#endif
+
+#ifdef ENGLISH
+#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \
+ if (GetBankSide(bank) != 0) \
+ { \
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
+ toCpy = gUnknown_08400797; \
+ else \
+ toCpy = gUnknown_08400791; \
+ while (*toCpy != EOS) \
+ { \
+ dst[dstID] = *toCpy; \
+ dstID++; \
+ toCpy++; \
+ } \
+ GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \
+ } \
+ else \
+ { \
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
+ } \
+ StringGetEnd10(text); \
+ toCpy = text;
+#else
+#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \
+ if (GetBankSide(bank) != 0) \
+ { \
+ GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \
+ StringGetEnd10(text); \
+ toCpy = text; \
+ while (*toCpy != EOS) \
+ { \
+ dst[dstID] = *toCpy; \
+ dstID++; \
+ toCpy++; \
+ } \
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
+ toCpy = gUnknown_08400797; \
+ else \
+ toCpy = gUnknown_08400791; \
+ } \
+ else \
+ { \
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
+ StringGetEnd10(text); \
+ toCpy = text; \
+ }
+#endif
+
+u32 StrCpyDecodeBattle(const u8* src, u8* dst)
+{
+ u32 dstID = 0; // if they used dstID, why not use srcID as well?
+ const u8* toCpy = NULL;
+ u8 text[12];
+ u8 multiplayerID = GetMultiplayerId();
+
+ while (*src != EOS)
+ {
+ if (*src == 0xFD)
+ {
+ src++;
+ switch (*src)
+ {
+ case 0:
+ if (gBattleTextBuff1[0] == 0xFD)
+ {
+ StrCpyDecodeBattleTextBuff(gBattleTextBuff1, gStringVar1);
+ toCpy = gStringVar1;
+ }
+ else
+ {
+ toCpy = AppendStatusString(gBattleTextBuff1);
+ if (toCpy == 0)
+ toCpy = gBattleTextBuff1;
+ }
+ break;
+ case 1:
+ if (gBattleTextBuff2[0] == 0xFD)
+ {
+ StrCpyDecodeBattleTextBuff(gBattleTextBuff2, gStringVar2);
+ toCpy = gStringVar2;
+ }
+ else
+ toCpy = gBattleTextBuff2;
+ break;
+ case 42:
+ if (gBattleTextBuff3[0] == 0xFD)
+ {
+ StrCpyDecodeBattleTextBuff(gBattleTextBuff3, gStringVar3);
+ toCpy = gStringVar3;
+ }
+ else
+ toCpy = gBattleTextBuff3;
+ break;
+ case 2: // first player poke name
+ GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(0)]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 3: // first enemy poke name
+ GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(1)]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 4: // second player poke name
+ GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(2)]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 5: // second enemy poke name
+ GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(3)]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 6: // link first player poke name
+ GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 7: // link first opponent poke name
+ GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 1]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 8: // link second player poke name
+ GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 2]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 9: // link second opponent poke name
+ GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 3]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 10: // attacker name with prefix, only bank 0/1
+ HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)])
+ break;
+ case 11: // attacker partner name, only bank 0/1
+ if (GetBankSide(gBankAttacker) == 0)
+ GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
+ else
+ GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text);
+
+ StringGetEnd10(text);
+ toCpy = text;
+ break;
+ case 12: // attacker name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[gBankAttacker])
+ break;
+ case 13: // target name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gBankTarget, gBattlePartyID[gBankTarget])
+ break;
+ case 14: // effect bank name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gEffectBank, gBattlePartyID[gEffectBank])
+ break;
+ case 15: // active bank name with prefix
+ HANDLE_NICKNAME_STRING_CASE(gActiveBank, gBattlePartyID[gActiveBank])
+ break;
+ case 16: // scripting active bank name with prefix
+ HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, gBattlePartyID[BATTLE_STRUCT->scriptingActive])
+ break;
+ case 17: // current move name
+ if (gStringInfo->currentMove > 0x162)
+ toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
+ else
+ toCpy = gMoveNames[gStringInfo->currentMove];
+ break;
+ case 18: // last used move name
+ if (gStringInfo->lastMove > 0x162)
+ toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType];
+ else
+ toCpy = gMoveNames[gStringInfo->lastMove];
+ break;
+ case 19: // last used item
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gLastUsedItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
+ {
+ StringCopy(text, gEnigmaBerries[gStringBank].name);
+#ifdef ENGLISH
+ StringAppend(text, gUnknown_08400A85);
+#else
+ de_sub_8073174(text, gUnknown_08400A85);
+#endif
+ toCpy = text;
+ }
+ else
+ toCpy = gUnknown_08400A78;
+ }
+ else
+ {
+ CopyItemName(gLastUsedItem, text);
+ toCpy = text;
+ }
+ }
+ else
+ {
+ CopyItemName(gLastUsedItem, text);
+ toCpy = text;
+ }
+ break;
+ case 20: // last used ability
+ toCpy = gAbilityNames[gLastUsedAbility];
+ break;
+ case 21: // attacker ability
+ toCpy = gAbilityNames[gAbilitiesPerBank[gBankAttacker]];
+ break;
+ case 22: // target ability
+ toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]];
+ break;
+ case 23: // scripting active ability
+ toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]];
+ break;
+ case 24: // effect bank ability
+ toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]];
+ break;
+ case 25: // trainer class name
+#ifdef ENGLISH
+ if (gTrainerBattleOpponent == 0x400)
+ toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()];
+ else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
+ toCpy = gTrainerClassNames[get_trainer_class_name_index()];
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ toCpy = gTrainerClassNames[sub_8135FD8()];
+ else
+ toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass];
+ break;
+#else
+ if (gTrainerBattleOpponent == 0x400)
+ toCpy = de_sub_8041024(gTrainerBattleOpponent, 0);
+ else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
+ toCpy = de_sub_8041024(BATTLE_TYPE_BATTLE_TOWER, 0);
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ toCpy = de_sub_8041024(BATTLE_TYPE_EREADER_TRAINER, 0);
+ else
+ toCpy = de_sub_8041024(0, gTrainerBattleOpponent);
+ break;
+#endif
+ case 26: // trainer name
+ if (gTrainerBattleOpponent == 0x400)
+ {
+ memset(text, 0xFF, 8);
+ memcpy(text, &ewram[0x17002], 7);
+ toCpy = text;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
+ {
+ get_trainer_name(text);
+ toCpy = text;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ {
+ sub_8135FF4(text);
+ toCpy = text;
+ }
+ else
+ toCpy = gTrainers[gTrainerBattleOpponent].trainerName;
+ break;
+ case 27: // link player name?
+ toCpy = gLinkPlayers[multiplayerID].name;
+ break;
+ case 28: // link partner name?
+ toCpy = gLinkPlayers[sub_803FC34(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
+ break;
+ case 29: // link opponent 1 name?
+ toCpy = gLinkPlayers[sub_803FC34(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
+ break;
+ case 30: // link opponent 2 name?
+ toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
+ break;
+ case 31: // link scripting active name
+ toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name;
+ break;
+ case 32: // player name
+ toCpy = gSaveBlock2.playerName;
+ break;
+ case 33: // ?
+ toCpy = sub_8082830();
+ break;
+ case 34: // ?
+ HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E)
+ break;
+ case 35: // lanette pc
+ if (FlagGet(SYS_PC_LANETTE))
+ toCpy = gUnknown_084009F7;
+ else
+ toCpy = gUnknown_084009ED;
+ break;
+ case 38:
+ if (GetBankSide(gBankAttacker) == 0)
+ toCpy = gUnknown_084007AC;
+ else
+ toCpy = gUnknown_084007A7;
+ break;
+ case 39:
+ if (GetBankSide(gBankTarget) == 0)
+ toCpy = gUnknown_084007AC;
+ else
+ toCpy = gUnknown_084007A7;
+ break;
+ case 36:
+ if (GetBankSide(gBankAttacker) == 0)
+ toCpy = gUnknown_084007A1;
+ else
+ toCpy = gUnknown_0840079C;
+ break;
+ case 37:
+ if (GetBankSide(gBankTarget) == 0)
+ toCpy = gUnknown_084007A1;
+ else
+ toCpy = gUnknown_0840079C;
+ break;
+ case 40:
+ if (GetBankSide(gBankAttacker) == 0)
+ toCpy = gUnknown_084007B7;
+ else
+ toCpy = gUnknown_084007B2;
+ break;
+ case 41:
+ if (GetBankSide(gBankTarget) == 0)
+ toCpy = gUnknown_084007B7;
+ else
+ toCpy = gUnknown_084007B2;
+ break;
+ }
+ //if (toCpy != NULL) really GF, why did you forget about this?
+ while (*toCpy != EOS)
+ {
+ dst[dstID] = *toCpy;
+ dstID++;
+ toCpy++;
+ }
+ if (*src == 33)
+ {
+ dst[dstID] = 0xFC;
+ dstID++;
+ dst[dstID] = 9;
+ dstID++;
+ }
+ }
+ else
+ {
+ dst[dstID] = *src;
+ dstID++;
+ }
+ src++;
+ }
+ dst[dstID] = *src;
+ dstID++;
+ return dstID;
+}
+
+#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
+#define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
+
+void StrCpyDecodeBattleTextBuff(u8* src, u8* dst)
+{
+ u32 srcID = 1;
+ u32 value = 0;
+ u8 text[12];
+ u16 hword;
+
+ *dst = EOS;
+ while (src[srcID] != EOS)
+ {
+ switch (src[srcID])
+ {
+ case 0: // battle string
+ hword = ByteRead16(&src[srcID + 1]);
+#ifdef GERMAN
+ if (hword == 209 || hword == 211)
+ srcID += 3;
+#endif
+ StringAppend(dst, gBattleStringsTable[hword - BATTLESTRING_TO_SUB]);
+ srcID += 3;
+ break;
+ case 1: // int to string
+ switch (src[srcID + 1])
+ {
+ case 1:
+ value = src[srcID + 3];
+ break;
+ case 2:
+ value = ByteRead16(&src[srcID + 3]);
+ break;
+ case 4:
+ value = ByteRead32(&src[srcID + 3]);
+ break;
+ }
+ ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]);
+ srcID += src[srcID + 1] + 3;
+ break;
+ case 2: // move name
+ StringAppend(dst, gMoveNames[ByteRead16(&src[srcID + 1])]);
+ srcID += 3;
+ break;
+ case 3: // type name
+ StringAppend(dst, gTypeNames[src[srcID + 1]]);
+ srcID += 2;
+ break;
+ case 4: // poke nick with prefix
+#ifdef ENGLISH
+ if (GetBankSide(src[srcID + 1]) == 0)
+ {
+ GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ StringAppend(dst, gUnknown_08400797);
+ else
+ StringAppend(dst, gUnknown_08400791);
+ GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
+ }
+ StringGetEnd10(text);
+ StringAppend(dst, text);
+#else
+ if (GetBankSide(src[srcID + 1]) == 0)
+ {
+ GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ StringAppend(dst, text);
+ }
+ else
+ {
+ GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
+ StringGetEnd10(text);
+ StringAppend(dst, text);
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ StringAppend(dst, gUnknown_08400797);
+ else
+ StringAppend(dst, gUnknown_08400791);
+ }
+#endif
+ srcID += 3;
+ break;
+ case 5: // stats
+ StringAppend(dst, gUnknown_08400F58[src[srcID + 1]]);
+ srcID += 2;
+ break;
+ case 6: // species name
+ GetSpeciesName(dst, ByteRead16(&src[srcID + 1]));
+ srcID += 3;
+ break;
+ case 7: // poke nick without prefix
+ if (GetBankSide(src[srcID + 1]) == 0)
+ GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
+ else
+ GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
+ StringGetEnd10(dst);
+ srcID += 3;
+ break;
+ case 8: // flavour table
+ StringAppend(dst, gUnknown_08400F78[src[srcID + 1]]);
+ srcID += 2;
+ break;
+ case 9: // ability names
+ StringAppend(dst, gAbilityNames[src[srcID + 1]]);
+ srcID += 2;
+ break;
+ case 10: // item name
+ {
+ hword = ByteRead16(&src[srcID + 1]);
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (hword == ITEM_ENIGMA_BERRY)
+ {
+ if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank)
+ {
+ StringCopy(dst, gEnigmaBerries[gStringBank].name);
+#ifdef ENGLISH
+ StringAppend(dst, gUnknown_08400A85);
+#else
+ de_sub_8073174(dst, gUnknown_08400A85);
+#endif
+ }
+ else
+ StringAppend(dst, gUnknown_08400A78);
+ }
+ else
+ CopyItemName(hword, dst);
+ }
+ else
+ CopyItemName(hword, dst);
+ srcID += 3;
+ }
+ break;
+ }
+ }
+}
+
+void sub_8121D1C(u8* textBuff)
+{
+ s32 counter = 0;
+ u32 i = 0;
+
+ while (counter != 4)
+ {
+ if (gUnknown_084016BC[i] == 0)
+ counter++;
+ if (gUnknown_084016BC[i++] == gStringInfo->currentMove)
+ break;
+ }
+
+ if (counter >= 0)
+ {
+ if (counter <= 2)
+ StringCopy(textBuff, gUnknown_08400E5E); // is
+ else if (counter <= 4)
+ StringCopy(textBuff, gUnknown_08400E62); // 's
+ }
+}
+
+void sub_8121D74(u8* dst)
+{
+ s32 counter = 0;
+ s32 i = 0;
+
+ while (*dst != EOS)
+ dst++;
+
+ while (counter != 4)
+ {
+ if (gUnknown_084016BC[i] == 0)
+ counter++;
+ if (gUnknown_084016BC[i++] == gStringInfo->currentMove)
+ break;
+ }
+
+ switch (counter)
+ {
+ case 0:
+ StringCopy(dst, gUnknown_084007C8);
+ break;
+ case 1:
+ StringCopy(dst, gUnknown_084007CA);
+ break;
+ case 2:
+ StringCopy(dst, gUnknown_084007CC);
+ break;
+ case 3:
+ StringCopy(dst, gUnknown_084007CE);
+ break;
+ case 4:
+ StringCopy(dst, gUnknown_084007D0);
+ break;
+ }
+}
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index ff430e7b2..50db5388c 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -61,9 +61,9 @@ static void sub_8146440(u8 taskId);
static void sub_8146480(u8 taskid);
static void sub_81464E4(void);
static void sub_8146600(u8 berry);
-// static void sub_81466A0(void);
+static void sub_81466A0(void);
static void sub_81466E8(u8 taskId, s8 direction);
-// static void sub_8146798(u8 berry);
+static void sub_8146798(u8 berry);
static void sub_8146810(s8 berry);
static void sub_81468BC(void);
@@ -347,7 +347,7 @@ static void sub_8146600(u8 berry)
gUnknown_0203932E[4] = sub_80A7E5C(208);
}
-void sub_81466A0(void)
+static void sub_81466A0(void)
{
u16 i;
@@ -361,105 +361,36 @@ void sub_81466A0(void)
}
}
-__attribute__((naked))
static void sub_81466E8(u8 taskId, s8 direction)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- lsls r1, 24\n\
- lsrs r2, r1, 24\n\
- lsls r0, r7, 2\n\
- adds r0, r7\n\
- lsls r0, 3\n\
- ldr r1, _08146748 @ =gTasks + 0x8\n\
- adds r6, r0, r1\n\
- ldr r4, _0814674C @ =gBagPocketScrollStates\n\
- movs r0, 0xC\n\
- adds r0, r4\n\
- mov r8, r0\n\
- ldrb r1, [r0, 0x1]\n\
- ldrb r0, [r4, 0xC]\n\
- adds r1, r0\n\
- cmp r1, 0\n\
- bne _08146718\n\
- lsls r0, r2, 24\n\
- cmp r0, 0\n\
- blt _0814678C\n\
-_08146718:\n\
- adds r0, r1, 0x1\n\
- lsls r5, r2, 24\n\
- mov r1, r8\n\
- ldrb r1, [r1, 0x2]\n\
- cmp r0, r1\n\
- bne _08146728\n\
- cmp r5, 0\n\
- bgt _0814678C\n\
-_08146728:\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- mov r2, r8\n\
- ldrb r3, [r2, 0x1]\n\
- ldrb r4, [r4, 0xC]\n\
- mov r12, r4\n\
- adds r0, r3, r4\n\
- asrs r2, r5, 24\n\
- adds r1, r0, r2\n\
- cmp r1, 0\n\
- bge _08146750\n\
- negs r0, r0\n\
- strh r0, [r6, 0x2]\n\
- b _08146766\n\
- .align 2, 0\n\
-_08146748: .4byte gTasks + 0x8\n\
-_0814674C: .4byte gBagPocketScrollStates\n\
-_08146750:\n\
- mov r4, r8\n\
- ldrb r0, [r4, 0x2]\n\
- cmp r1, r0\n\
- blt _08146764\n\
- subs r0, r3\n\
- mov r1, r12\n\
- subs r0, r1\n\
- subs r0, 0x1\n\
- strh r0, [r6, 0x2]\n\
- b _08146766\n\
-_08146764:\n\
- strh r2, [r6, 0x2]\n\
-_08146766:\n\
- ldr r0, _08146780 @ =gTasks\n\
- lsls r1, r7, 2\n\
- adds r1, r7\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- ldr r0, _08146784 @ =sub_8146798\n\
- str r0, [r1]\n\
- cmp r5, 0\n\
- bge _08146788\n\
- movs r2, 0x10\n\
- negs r2, r2\n\
- adds r0, r2, 0\n\
- b _0814678A\n\
- .align 2, 0\n\
-_08146780: .4byte gTasks\n\
-_08146784: .4byte sub_8146798\n\
-_08146788:\n\
- movs r0, 0x10\n\
-_0814678A:\n\
- strh r0, [r6]\n\
-_0814678C:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ u8 berryPocket = 3;
+ s16 *data = gTasks[taskId].data;
+
+ if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0
+ && direction < 0)
+ return;
+ if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots
+ && direction > 0)
+ return;
+
+ PlaySE(SE_SELECT);
+ if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0)
+ data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos);
+ else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots)
+ data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1;
+ else
+ data[1] = direction;
+
+ gTasks[taskId].func = sub_8146798;
+
+ if (direction < 0)
+ data[0] = -16;
+ else
+ data[0] = 16;
+
}
-void sub_8146798(u8 taskId)
+static void sub_8146798(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
@@ -478,94 +409,38 @@ void sub_8146798(u8 taskId)
}
}
-__attribute__((naked))
static void sub_8146810(s8 berry)
{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- adds r4, r3, 0\n\
- lsls r0, r3, 24\n\
- asrs r1, r0, 24\n\
- cmp r1, 0\n\
- ble _08146848\n\
- ldr r0, _08146840 @ =gBagPocketScrollStates\n\
- adds r4, r0, 0\n\
- adds r4, 0xC\n\
- ldrb r2, [r0, 0xC]\n\
- adds r1, r2, r1\n\
- adds r6, r0, 0\n\
- cmp r1, 0x7\n\
- ble _08146844\n\
- adds r0, r3, 0\n\
- adds r0, 0xF9\n\
- adds r0, r2, r0\n\
- ldrb r1, [r4, 0x1]\n\
- adds r0, r1\n\
- strb r0, [r4, 0x1]\n\
- movs r0, 0x7\n\
- b _0814686E\n\
- .align 2, 0\n\
-_08146840: .4byte gBagPocketScrollStates\n\
-_08146844:\n\
- adds r0, r2, r3\n\
- b _0814686E\n\
-_08146848:\n\
- ldr r0, _08146868 @ =gBagPocketScrollStates\n\
- adds r5, r0, 0\n\
- adds r5, 0xC\n\
- ldrb r2, [r0, 0xC]\n\
- adds r1, r2, r1\n\
- adds r6, r0, 0\n\
- cmp r1, 0\n\
- bge _0814686C\n\
- adds r0, r2, r3\n\
- ldrb r1, [r5, 0x1]\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strb r0, [r5, 0x1]\n\
- strb r1, [r6, 0xC]\n\
- b _08146870\n\
- .align 2, 0\n\
-_08146868: .4byte gBagPocketScrollStates\n\
-_0814686C:\n\
- adds r0, r2, r4\n\
-_0814686E:\n\
- strb r0, [r6, 0xC]\n\
-_08146870:\n\
- ldr r2, _081468AC @ =gScriptItemId\n\
- movs r0, 0x3\n\
- lsls r0, 2\n\
- adds r0, r6\n\
- ldrb r1, [r0, 0x1]\n\
- ldrb r0, [r0]\n\
- adds r1, r0\n\
- ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\
- ldr r0, [r0]\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrh r0, [r1]\n\
- strh r0, [r2]\n\
- ldr r0, _081468B4 @ =gUnknown_0203932C\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, _081468B8 @ =gSprites\n\
- adds r0, r1\n\
- bl DestroySprite\n\
- bl sub_81466A0\n\
- bl sub_80A7DD4\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_081468AC: .4byte gScriptItemId\n\
-_081468B0: .4byte gCurrentBagPocketItemSlots\n\
-_081468B4: .4byte gUnknown_0203932C\n\
-_081468B8: .4byte gSprites\n\
- .syntax divided\n");
+ u8 berryPocket = 3;
+
+ if (berry > 0)
+ {
+ if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7)
+ {
+ gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry;
+ gBagPocketScrollStates[berryPocket].cursorPos = 7;
+ }
+ else
+ {
+ gBagPocketScrollStates[berryPocket].cursorPos += berry;
+ }
+ }
+ else
+ {
+ if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0)
+ {
+ gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry;
+ gBagPocketScrollStates[berryPocket].cursorPos = 0;
+ }
+ else
+ {
+ gBagPocketScrollStates[berryPocket].cursorPos += berry;
+ }
+ }
+ gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
+ DestroySprite(&gSprites[gUnknown_0203932C]);
+ sub_81466A0();
+ sub_80A7DD4();
}
static void sub_81468BC(void)
diff --git a/src/choose_party.c b/src/choose_party.c
index d8df44028..7b2c833e1 100644
--- a/src/choose_party.c
+++ b/src/choose_party.c
@@ -211,11 +211,10 @@ bool8 sub_8121E78(void)
return FALSE;
}
-#ifdef NONMATCHING
static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
{
- u16 r3;
- s32 i;
+ u16 species;
+ s32 i = 0;
if (GetMonData(pkmn, MON_DATA_IS_EGG))
return FALSE;
@@ -232,97 +231,16 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
&& GetMonData(pkmn, MON_DATA_LEVEL) > 50)
return FALSE;
- r3 = GetMonData(pkmn, MON_DATA_SPECIES);
- // Can't stop the compiler from optimizing out the first index
- for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++)
+ // Check if the pkmn is in the ban list
+ species = GetMonData(pkmn, MON_DATA_SPECIES);
+ while (gBattleTowerBanlist[i] != 0xFFFF)
{
- if (gBattleTowerBanlist[i] == r3)
+ if (gBattleTowerBanlist[i] == species)
return FALSE;
+ i++;
}
return TRUE;
}
-#else
-__attribute__((naked))
-static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
-{
- asm_unified(
- "push {r4,lr}\n\
- adds r4, r0, 0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0812207C\n\
- ldr r0, _08122058 @ =0x0201b000\n\
- ldr r1, _0812205C @ =0x00000263\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08122060\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _0812207C\n\
- b _081220B6\n\
- .align 2, 0\n\
-_08122058: .4byte 0x0201b000\n\
-_0812205C: .4byte 0x00000263\n\
-_08122060:\n\
- ldr r0, _08122080 @ =gSaveBlock2\n\
- ldr r1, _08122084 @ =0x00000554\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08122088\n\
- adds r0, r4, 0\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- cmp r0, 0x32\n\
- bls _08122088\n\
-_0812207C:\n\
- movs r0, 0\n\
- b _081220B8\n\
- .align 2, 0\n\
-_08122080: .4byte gSaveBlock2\n\
-_08122084: .4byte 0x00000554\n\
-_08122088:\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- ldr r1, _081220C0 @ =gBattleTowerBanlist\n\
- movs r0, 0\n\
- lsls r0, 1\n\
- adds r2, r0, r1\n\
- ldrh r0, [r2]\n\
- ldr r1, _081220C4 @ =0x0000ffff\n\
- cmp r0, r1\n\
- beq _081220B6\n\
- adds r4, r1, 0\n\
- adds r1, r2, 0\n\
-_081220A8:\n\
- ldrh r0, [r1]\n\
- cmp r0, r3\n\
- beq _0812207C\n\
- adds r1, 0x2\n\
- ldrh r0, [r1]\n\
- cmp r0, r4\n\
- bne _081220A8\n\
-_081220B6:\n\
- movs r0, 0x1\n\
-_081220B8:\n\
- pop {r4}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_081220C0: .4byte gBattleTowerBanlist\n\
-_081220C4: .4byte 0x0000ffff\n"
- );
-}
-#endif
static u8 sub_81220C8(void)
{
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 32fbe1547..2b68d83e8 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -1,7 +1,226 @@
#include "global.h"
#include "pokemon.h"
+#include "items.h"
+#include "decompress.h"
+#include "data2.h"
+#include "task.h"
+#include "script.h"
+#include "palette.h"
+#include "rom4.h"
+#include "main.h"
+#include "event_data.h"
+#include "sound.h"
+#include "songs.h"
+#include "text.h"
+#include "text_window.h"
+#include "string_util.h"
+#include "strings2.h"
+#include "menu.h"
+#include "naming_screen.h"
+#include "trig.h"
+#include "rng.h"
-void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) {
+extern u8 ewram[];
+extern struct SpriteTemplate gUnknown_02024E8C;
+
+struct EggHatchData
+{
+ u8 eggSpriteID;
+ u8 pokeSpriteID;
+ u8 CB2_state;
+ u8 CB2_PalCounter;
+ u8 eggPartyID;
+ struct Window window;
+ u8 tileDataStartOffset;
+ u8 unused_39;
+ u8 eggShardVelocityID;
+};
+
+struct EggHatchData* gEggHatchData;
+
+extern const u32 gUnknown_08D00000[];
+extern const u32 gUnknown_08D00524[];
+extern const u32 gUnknown_0820CA98[];
+extern const u32 gUnknown_0820F798[];
+extern const u16 gUnknown_08D004E0[]; //palette
+extern const u16 gUnknown_0820C9F8[]; //palette
+extern const struct SpriteSheet sUnknown_0820A3B0;
+extern const struct SpriteSheet sUnknown_0820A3B8;
+extern const struct SpritePalette sUnknown_0820A3C0;
+
+bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID);
+u8* GetMonNick(struct Pokemon* mon, u8* dst);
+u8 sav1_map_get_name(void);
+const struct CompressedSpritePalette* sub_8040990(struct Pokemon* mon); //gets pokemon palette address
+void sub_8080990(void);
+
+static void Task_EggHatch(u8 taskID);
+static void CB2_EggHatch_0(void);
+static void CB2_EggHatch_1(void);
+static void SpriteCB_Egg_0(struct Sprite* sprite);
+static void SpriteCB_Egg_1(struct Sprite* sprite);
+static void SpriteCB_Egg_2(struct Sprite* sprite);
+static void SpriteCB_Egg_3(struct Sprite* sprite);
+static void SpriteCB_Egg_4(struct Sprite* sprite);
+static void SpriteCB_Egg_5(struct Sprite* sprite);
+static void SpriteCB_EggShard(struct Sprite* sprite);
+static void EggHatchPrintMessage2(u8* src);
+static void EggHatchPrintMessage1(u8* src);
+static bool8 EggHatchUpdateWindowText(void);
+static void CreateRandomEggShardSprite(void);
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
+
+// graphics
+
+static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/palette.gbapal");
+static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp");
+static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
+
+static const struct OamData sOamData_820A378 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_820A380[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_820A388[] =
+{
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_820A390[] =
+{
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_820A398[] =
+{
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_820A3A0[] =
+{
+ sSpriteAnim_820A380,
+ sSpriteAnim_820A388,
+ sSpriteAnim_820A390,
+ sSpriteAnim_820A398,
+};
+
+static const struct SpriteSheet sUnknown_0820A3B0 =
+{
+ .data = sEggHatchTiles,
+ .size = 2048,
+ .tag = 12345,
+};
+
+static const struct SpriteSheet sUnknown_0820A3B8 =
+{
+ .data = sEggShardTiles,
+ .size = 128,
+ .tag = 23456,
+};
+
+static const struct SpritePalette sUnknown_0820A3C0 =
+{
+ .data = sEggPalette,
+ .tag = 54321
+};
+
+static const struct SpriteTemplate sSpriteTemplate_820A3C8 =
+{
+ .tileTag = 12345,
+ .paletteTag = 54321,
+ .oam = &sOamData_820A378,
+ .anims = sSpriteAnimTable_820A3A0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+
+static const struct OamData sOamData_820A3E0 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_820A3E8[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_820A3F0[] =
+{
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_820A3F8[] =
+{
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_820A400[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_820A408[] =
+{
+ sSpriteAnim_820A3E8,
+ sSpriteAnim_820A3F0,
+ sSpriteAnim_820A3F8,
+ sSpriteAnim_820A400,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_820A418 =
+{
+ .tileTag = 23456,
+ .paletteTag = 54321,
+ .oam = &sOamData_820A3E0,
+ .anims = sSpriteAnimTable_820A408,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_EggShard
+};
+
+// actual code
+
+static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
+{
u16 species;
u32 personality, pokerus;
u8 i, friendship, language, gameMet, markings;
@@ -50,3 +269,596 @@ void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) {
*egg = *temp;
}
+
+static void AddHatchedMonToParty(u8 id)
+{
+ u8 isEgg;
+ u16 pokeNum;
+ u8 name[12];
+ u16 ball;
+ u16 caughtLvl;
+ u8 mapNameID;
+ struct Pokemon* mon = &gPlayerParty[id];
+
+ CreatedHatchedMon(mon, &gEnemyParty[0]);
+ isEgg = 0;
+ SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
+
+ pokeNum = GetMonData(mon, MON_DATA_SPECIES);
+ GetSpeciesName(name, pokeNum);
+ SetMonData(mon, MON_DATA_NICKNAME, name);
+
+ pokeNum = SpeciesToNationalPokedexNum(pokeNum);
+ GetNationalPokedexFlag(pokeNum, 2);
+ GetNationalPokedexFlag(pokeNum, 3);
+
+ GetMonNick(mon, gStringVar1);
+
+ ball = ITEM_POKE_BALL;
+ SetMonData(mon, MON_DATA_POKEBALL, (const u8*) &ball);
+
+ caughtLvl = 0;
+ SetMonData(mon, MON_DATA_MET_LEVEL, (const u8*) &caughtLvl);
+
+ mapNameID = sav1_map_get_name();
+ SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
+
+ MonRestorePP(mon);
+ CalculateMonStats(mon);
+}
+
+void ScriptHatchMon(void)
+{
+ AddHatchedMonToParty(gSpecialVar_0x8004);
+}
+
+#ifdef NONMATCHING
+static bool8 sub_8042ABC(void* a, u8 b)
+{
+
+}
+
+#else
+__attribute__((naked))
+static bool8 sub_8042ABC(void* a, u8 b)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x20\n\
+ adds r5, r0, 0\n\
+ lsls r4, r1, 24\n\
+ lsrs r4, 24\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 4\n\
+ adds r0, r5, r0\n\
+ mov r1, sp\n\
+ bl GetBoxMonNick\n\
+ lsls r0, r4, 3\n\
+ subs r0, r4\n\
+ lsls r1, r0, 3\n\
+ adds r0, r5, r1\n\
+ adds r0, 0xC0\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08042B40\n\
+ adds r0, r1, 0\n\
+ adds r0, 0xA0\n\
+ adds r5, r0\n\
+ adds r6, r5, 0\n\
+ adds r6, 0x2C\n\
+ mov r0, sp\n\
+ adds r1, r6, 0\n\
+ bl StringCompareWithoutExtCtrlCodes\n\
+ cmp r0, 0\n\
+ bne _08042B08\n\
+ ldr r0, _08042B30 @ =gSaveBlock2\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x24\n\
+ bl StringCompareWithoutExtCtrlCodes\n\
+ cmp r0, 0\n\
+ beq _08042B40\n\
+_08042B08:\n\
+ ldr r0, _08042B34 @ =gStringVar1\n\
+ mov r1, sp\n\
+ bl StringCopy\n\
+ ldr r4, _08042B38 @ =gStringVar2\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x24\n\
+ adds r0, r4, 0\n\
+ bl StringCopy\n\
+ ldr r0, _08042B3C @ =gStringVar3\n\
+ adds r1, r6, 0\n\
+ bl StringCopy\n\
+ adds r0, r4, 0\n\
+ bl SanitizeNameString\n\
+ movs r0, 0x1\n\
+ b _08042B42\n\
+ .align 2, 0\n\
+_08042B30: .4byte gSaveBlock2\n\
+_08042B34: .4byte gStringVar1\n\
+_08042B38: .4byte gStringVar2\n\
+_08042B3C: .4byte gStringVar3\n\
+_08042B40:\n\
+ movs r0, 0\n\
+_08042B42:\n\
+ add sp, 0x20\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided");
+}
+
+#endif // NONMATCHING
+
+bool8 sub_8042B4C(void)
+{
+ return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+}
+
+static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID)
+{
+ u8 r5 = 0;
+ u8 spriteID = 0;
+ struct Pokemon* mon = NULL;
+
+ if (a0 == 0)
+ {
+ mon = &gPlayerParty[pokeID];
+ r5 = 1;
+ }
+ if (a0 == 1)
+ {
+ mon = &gPlayerParty[pokeID];
+ r5 = 3;
+ }
+ switch (switchID)
+ {
+ case 0:
+ {
+ u16 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,(u32)(&ewram[0]), gUnknown_081FAF4C[2 * a0 + 1], species, pid);
+ LoadCompressedObjectPalette(sub_8040990(mon));
+ }
+ break;
+ case 1:
+ GetMonSpriteTemplate_803C56C(sub_8040990(mon)->tag, r5);
+ spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6);
+ gSprites[spriteID].invisible = 1;
+ gSprites[spriteID].callback = SpriteCallbackDummy;
+ break;
+ }
+ return spriteID;
+}
+
+static void VBlankCB_EggHatch(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void EggHatch(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(Task_EggHatch, 10);
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+}
+
+static void Task_EggHatch(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_EggHatch_0);
+ gFieldCallback = sub_8080990;
+ DestroyTask(taskID);
+ }
+}
+
+static void CB2_EggHatch_0(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ REG_DISPCNT = 0;
+ gEggHatchData = (struct EggHatchData*)(&ewram[0x18000]);
+ gEggHatchData->eggPartyID = gSpecialVar_0x8004;
+ gEggHatchData->eggShardVelocityID = 0;
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(VBlankCB_EggHatch);
+ gMain.state++;
+ gSpecialVar_0x8005 = GetCurrentMapMusic();
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E6F84);
+ InitWindowFromConfig(&gEggHatchData->window, &gWindowConfig_81E6F84);
+ gEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20);
+ LoadTextWindowGraphics(&gEggHatchData->window);
+ gMain.state++;
+ break;
+ case 2:
+ LZDecompressVram(&gUnknown_08D00000, (void*)(VRAM));
+ CpuSet(&gUnknown_08D00524, &ewram[0], 0x800);
+ DmaCopy16(3, &ewram[0], (void*)(VRAM + 0x2800), 0x500);
+ LoadCompressedPalette(&gUnknown_08D004E0, 0, 0x20);
+ gMain.state++;
+ break;
+ case 3:
+ LoadSpriteSheet(&sUnknown_0820A3B0);
+ LoadSpriteSheet(&sUnknown_0820A3B8);
+ LoadSpritePalette(&sUnknown_0820A3C0);
+ gMain.state++;
+ break;
+ case 4:
+ gEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5);
+ AddHatchedMonToParty(gEggHatchData->eggPartyID);
+ gMain.state++;
+ break;
+ case 5:
+ EggHatchCreateMonSprite(0, 0, gEggHatchData->eggPartyID);
+ gMain.state++;
+ break;
+ case 6:
+ gEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gEggHatchData->eggPartyID);
+ gMain.state++;
+ break;
+ case 7:
+ {
+ u32 offsetRead, offsetWrite;
+ u32 offsetRead2, offsetWrite2;
+ u32 size;
+
+ REG_BG2CNT = 0x4C06;
+ LoadPalette(&gUnknown_0820C9F8, 0x10, 0xA0);
+
+ offsetRead = (u32)(&gUnknown_0820CA98);
+ offsetWrite = (VRAM + 0x4000);
+ size = 0x1300;
+ while (TRUE)
+ {
+ DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000);
+ offsetRead += 0x1000;
+ offsetWrite += 0x1000;
+ size -= 0x1000;
+ if (size <= 0x1000)
+ {
+ DmaCopy16(3, offsetRead, (void *) (offsetWrite), size);
+ break;
+ }
+ }
+
+ offsetRead2 = (u32)(&gUnknown_0820F798);
+ offsetWrite2 = (u32)(VRAM + 0x6000);
+ DmaCopy16(3, offsetRead2, (void*)(offsetWrite2), 0x1000);
+ gMain.state++;
+ }
+ break;
+ case 8:
+ REG_BG1CNT = 0x501;
+
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+
+ SetMainCallback2(CB2_EggHatch_1);
+ gEggHatchData->CB2_state = 0;
+ break;
+ }
+}
+
+static void EggHatchSetMonNickname(void)
+{
+ SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+}
+
+static void Task_EggHatchPlayBGM(u8 taskID)
+{
+ if (gTasks[taskID].data[0] == 0)
+ StopMapMusic();
+ if (gTasks[taskID].data[0] == 1)
+ PlayBGM(376);
+ if (gTasks[taskID].data[0] > 60)
+ {
+ PlayBGM(377);
+ DestroyTask(taskID);
+ //return; task is destroyed, yet you increment the value?
+ }
+ gTasks[taskID].data[0]++;
+}
+
+static void CB2_EggHatch_1(void)
+{
+ switch (gEggHatchData->CB2_state)
+ {
+ case 0:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ REG_DISPCNT = 0x1740;
+ gEggHatchData->CB2_state++;
+ CreateTask(Task_EggHatchPlayBGM, 5);
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ gEggHatchData->CB2_PalCounter = 0;
+ gEggHatchData->CB2_state++;
+ }
+ break;
+ case 2:
+ if (++gEggHatchData->CB2_PalCounter > 30)
+ {
+ gEggHatchData->CB2_state++;
+ gSprites[gEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0;
+ }
+ break;
+ case 3:
+ if (gSprites[gEggHatchData->eggSpriteID].callback == SpriteCallbackDummy)
+ gEggHatchData->CB2_state++;
+ break;
+ case 4:
+ GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg);
+ EggHatchPrintMessage2(gStringVar4);
+ PlayFanfare(371);
+ gEggHatchData->CB2_state++;
+ break;
+ case 5:
+ if (IsFanfareTaskInactive())
+ gEggHatchData->CB2_state++;
+ break;
+ case 6:
+ if (IsFanfareTaskInactive())
+ gEggHatchData->CB2_state++;
+ break;
+ case 7:
+ GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt);
+ EggHatchPrintMessage1(gStringVar4);
+ gEggHatchData->CB2_state++;
+ break;
+ case 8:
+ if (EggHatchUpdateWindowText())
+ {
+ MenuDrawTextWindow(22, 8, 27, 13);
+ InitYesNoMenu(22, 8, 4);
+ gEggHatchData->CB2_state++;
+ }
+ break;
+ case 9:
+ {
+ s8 menuInput;
+ if ((menuInput = ProcessMenuInputNoWrap_()) != -2)
+ {
+ if (menuInput != -1 && menuInput != 1)
+ {
+ u16 species;
+ u8 gender;
+ u32 personality;
+
+ GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar3);
+ species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gender = GetMonGender(&gPlayerParty[gEggHatchData->eggPartyID]);
+ personality = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
+ DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
+ }
+ else
+ gEggHatchData->CB2_state++;
+ }
+ }
+ break;
+ case 10:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gEggHatchData->CB2_state++;
+ break;
+ case 11:
+ if (!gPaletteFade.active)
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ break;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void SpriteCB_Egg_0(struct Sprite* sprite)
+{
+ if (++sprite->data0 > 20)
+ {
+ sprite->callback = SpriteCB_Egg_1;
+ sprite->data0 = 0;
+ }
+ else
+ {
+ sprite->data1 = (sprite->data1 + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data1, 1);
+ if (sprite->data0 == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 1);
+ CreateRandomEggShardSprite();
+ }
+ }
+}
+
+static void SpriteCB_Egg_1(struct Sprite* sprite)
+{
+ if (++sprite->data2 > 30)
+ {
+ if (++sprite->data0 > 20)
+ {
+ sprite->callback = SpriteCB_Egg_2;
+ sprite->data0 = 0;
+ sprite->data2 = 0;
+ }
+ else
+ {
+ sprite->data1 = (sprite->data1 + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data1, 2);
+ if (sprite->data0 == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ }
+ }
+ }
+}
+
+static void SpriteCB_Egg_2(struct Sprite* sprite)
+{
+ if (++sprite->data2 > 30)
+ {
+ if (++sprite->data0 > 38)
+ {
+ u16 species;
+
+ sprite->callback = SpriteCB_Egg_3;
+ sprite->data0 = 0;
+ species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES);
+ gSprites[gEggHatchData->pokeSpriteID].pos2.x = 0;
+ gSprites[gEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset;
+ }
+ else
+ {
+ sprite->data1 = (sprite->data1 + 20) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data1, 2);
+ if (sprite->data0 == 15)
+ {
+ PlaySE(SE_BOWA);
+ StartSpriteAnim(sprite, 2);
+ CreateRandomEggShardSprite();
+ CreateRandomEggShardSprite();
+ }
+ if (sprite->data0 == 30)
+ PlaySE(SE_BOWA);
+ }
+ }
+}
+
+static void SpriteCB_Egg_3(struct Sprite* sprite)
+{
+ if (++sprite->data0 > 50)
+ {
+ sprite->callback = SpriteCB_Egg_4;
+ sprite->data0 = 0;
+ }
+}
+
+static void SpriteCB_Egg_4(struct Sprite* sprite)
+{
+ s16 i;
+ if (sprite->data0 == 0)
+ BeginNormalPaletteFade(-1, -1, 0, 0x10, 0xFFFF);
+ if (sprite->data0 < 4u)
+ {
+ for (i = 0; i <= 3; i++)
+ CreateRandomEggShardSprite();
+ }
+ sprite->data0++;
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_TAMAGO);
+ sprite->invisible = 1;
+ sprite->callback = SpriteCB_Egg_5;
+ sprite->data0 = 0;
+ }
+}
+
+static void SpriteCB_Egg_5(struct Sprite* sprite)
+{
+ if (sprite->data0 == 0)
+ {
+ gSprites[gEggHatchData->pokeSpriteID].invisible = 0;
+ StartSpriteAffineAnim(&gSprites[gEggHatchData->pokeSpriteID], 1);
+ }
+ if (sprite->data0 == 8)
+ BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF);
+ if (sprite->data0 <= 9)
+ gSprites[gEggHatchData->pokeSpriteID].pos1.y -= 1;
+ if (sprite->data0 > 40)
+ sprite->callback = SpriteCallbackDummy;
+ sprite->data0++;
+}
+
+static void SpriteCB_EggShard(struct Sprite* sprite)
+{
+ sprite->data4 += sprite->data1;
+ sprite->data5 += sprite->data2;
+
+ sprite->pos2.x = sprite->data4 / 256;
+ sprite->pos2.y = sprite->data5 / 256;
+
+ sprite->data2 += sprite->data3;
+
+ if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data2 > 0)
+ DestroySprite(sprite);
+}
+
+// Converts a number to Q8.8 fixed-point format
+#define Q_8_8(n) ((s16)((n) * 256))
+
+static const s16 sEggShardVelocities[][2] =
+{
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(-5), Q_8_8(-3)},
+ {Q_8_8(3.5), Q_8_8(-3)},
+ {Q_8_8(-4), Q_8_8(-3.75)},
+ {Q_8_8(2), Q_8_8(-1.5)},
+ {Q_8_8(-0.5), Q_8_8(-6.75)},
+ {Q_8_8(5), Q_8_8(-2.25)},
+ {Q_8_8(-1.5), Q_8_8(-3.75)},
+ {Q_8_8(4.5), Q_8_8(-1.5)},
+ {Q_8_8(-1), Q_8_8(-6.75)},
+ {Q_8_8(4), Q_8_8(-2.25)},
+ {Q_8_8(-3.5), Q_8_8(-3.75)},
+ {Q_8_8(1), Q_8_8(-1.5)},
+ {Q_8_8(-3.515625), Q_8_8(-6.75)},
+ {Q_8_8(4.5), Q_8_8(-2.25)},
+ {Q_8_8(-0.5), Q_8_8(-7.5)},
+ {Q_8_8(1), Q_8_8(-4.5)},
+ {Q_8_8(-2.5), Q_8_8(-2.25)},
+ {Q_8_8(2.5), Q_8_8(-7.5)},
+};
+
+static void CreateRandomEggShardSprite(void)
+{
+ u16 spriteAnimIndex;
+
+ s16 velocity1 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][0];
+ s16 velocity2 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][1];
+ gEggHatchData->eggShardVelocityID++;
+ spriteAnimIndex = Random() % 4;
+ CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex);
+}
+
+static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex)
+{
+ u8 spriteID = CreateSprite(&sSpriteTemplate_820A418, x, y, 4);
+ gSprites[spriteID].data1 = data1;
+ gSprites[spriteID].data2 = data2;
+ gSprites[spriteID].data3 = data3;
+ StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex);
+}
+
+static void EggHatchPrintMessage1(u8* src)
+{
+ sub_8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15);
+}
+
+static void EggHatchPrintMessage2(u8* src)
+{
+ sub_8003460(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15);
+}
+
+static bool8 EggHatchUpdateWindowText(void)
+{
+ return sub_80035AC(&gEggHatchData->window);
+}
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
new file mode 100644
index 000000000..a04f9d65b
--- /dev/null
+++ b/src/hall_of_fame.c
@@ -0,0 +1,1413 @@
+#include "global.h"
+#include "main.h"
+#include "task.h"
+#include "palette.h"
+#include "sound.h"
+#include "songs.h"
+#include "pokemon.h"
+#include "text.h"
+#include "strings.h"
+#include "string_util.h"
+#include "menu.h"
+#include "save.h"
+#include "species.h"
+#include "rom4.h"
+#include "m4a.h"
+#include "data2.h"
+#include "decompress.h"
+#include "rng.h"
+#include "trig.h"
+
+static EWRAM_DATA u32 sUnknown_0203931C = 0;
+
+extern u8 ewram[];
+extern bool8 gUnknown_02039324; // has hall of fame records
+extern void (*gGameContinueCallback)(void);
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u8 gReservedSpritePaletteCount;
+extern struct SpriteTemplate gUnknown_02024E8C;
+
+extern const u8 gContestConfetti_Gfx[];
+extern const u8 gContestConfetti_Pal[];
+extern const u8 gHallOfFame_Gfx[];
+extern const u16 gHallOfFame_Pal[];
+
+struct HallofFameMon
+{
+ u32 tid;
+ u32 personality;
+ u16 species : 9;
+ u16 lvl : 7;
+ u8 nick[10];
+};
+
+struct HallofFameMons
+{
+ struct HallofFameMon mons[6];
+};
+
+#define HALL_OF_FAME_MAX_TEAMS 50
+
+static void sub_8141FF8(u8 taskID);
+static void sub_81422E8(u8 taskID);
+static void sub_814217C(u8 taskID);
+static void sub_8142274(u8 taskID);
+static void sub_81422B8(u8 taskID);
+static void sub_8142320(u8 taskID);
+static void sub_8142404(u8 taskID);
+static void sub_8142484(u8 taskID);
+static void sub_8142570(u8 taskID);
+static void sub_8142618(u8 taskID);
+static void sub_81426F8(u8 taskID);
+static void sub_8142738(u8 taskID);
+static void sub_8142794(u8 taskID);
+static void sub_8142818(u8 taskID);
+static void sub_8142850(u8 taskID);
+static void sub_81428A0(u8 taskID);
+static void sub_8142A28(u8 taskID);
+static void sub_8142FEC(u8 taskID);
+static void sub_8142B04(u8 taskID);
+static void sub_8142CC8(u8 taskID);
+static void sub_8142DF4(u8 taskID);
+static void sub_8142F78(u8 taskID);
+static void sub_8142FCC(u8 taskID);
+static void sub_814302C(u8 taskID);
+
+static void sub_81435DC(struct Sprite* sprite);
+static void sub_814386C(struct Sprite* sprite);
+static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite);
+
+static void sub_8143068(u8 a0, u8 a1);
+static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2);
+static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1);
+static void sub_81433E0(void);
+static void sub_8143570(void);
+static void sub_81435B8(void);
+static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid);
+static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3);
+static bool8 sub_81438C4(void);
+
+// functions from different files
+void sub_81439D0(void);
+void sub_80C5CD4(void*); // ?
+void sub_80C5E38(void*); // ?
+bool8 sub_80C5DCC(void);
+bool8 sub_80C5F98(void);
+void ReturnFromHallOfFamePC(void);
+u16 SpeciesToPokedexNum(u16 species);
+void remove_some_task(void);
+
+// data and gfx
+
+static const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet =
+{
+ gContestConfetti_Gfx, 0x220, 1001
+};
+
+static const u8 sUnused0[8] = {};
+
+static const struct CompressedSpritePalette sHallOfFame_ConfettiSpritePalette =
+{
+ gContestConfetti_Pal, 1001
+};
+
+static const u8 sUnused1[8] = {};
+
+static const s16 sHallOfFame_MonsFullTeamPositions[6][4] =
+{
+ {120, 210, 120, 40},
+ {326, 220, 56, 40},
+ {-86, 220, 184, 40},
+ {120, -62, 120, 88},
+ {-25, -62, 200, 88},
+ {265, -62, 40, 88}
+};
+
+static const s16 sHallOfFame_MonsHalfTeamPositions[3][4] =
+{
+ {120, 214, 120, 64},
+ {281, 214, 56, 64},
+ {-41, 214, 184, 64}
+};
+
+static const struct HallofFameMon sDummyFameMon =
+{
+ 0x3EA03EA, 0, 0, 0, {0}
+};
+
+static const u8 sUnused2[6] = {2, 1, 3, 6, 4, 5};
+
+static const struct OamData sOamData_840B598 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+void* const gUnknown_0840B5A0[] =
+{
+ &ewram[0x08000],
+ &ewram[0x0A000],
+ &ewram[0x0C000],
+ &ewram[0x0E000],
+ &ewram[0x10000],
+ &ewram[0x14000],
+ &ewram[0x18000]
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_840B5BC[] =
+{
+ {&ewram[0x8000], 0x800},
+ {&ewram[0x8800], 0x800},
+ {&ewram[0x9000], 0x800},
+ {&ewram[0x9800], 0x800}
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_840B5DC[] =
+{
+ {&ewram[0xA000], 0x800},
+ {&ewram[0xA800], 0x800},
+ {&ewram[0xB000], 0x800},
+ {&ewram[0xB800], 0x800}
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_840B5FC[] =
+{
+ {&ewram[0xC000], 0x800},
+ {&ewram[0xC800], 0x800},
+ {&ewram[0xD000], 0x800},
+ {&ewram[0xD800], 0x800}
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_840B61C[] =
+{
+ {&ewram[0xE000], 0x800},
+ {&ewram[0xE800], 0x800},
+ {&ewram[0xF000], 0x800},
+ {&ewram[0xF800], 0x800}
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_840B63C[] =
+{
+ {&ewram[0x10000], 0x800},
+ {&ewram[0x10800], 0x800},
+ {&ewram[0x11000], 0x800},
+ {&ewram[0x11800], 0x800}
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_840B65C[] =
+{
+ {&ewram[0x14000], 0x800},
+ {&ewram[0x14800], 0x800},
+ {&ewram[0x15000], 0x800},
+ {&ewram[0x15800], 0x800}
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_840B67C[] =
+{
+ {&ewram[0x18000], 0x800},
+ {&ewram[0x18800], 0x800},
+ {&ewram[0x19000], 0x800},
+ {&ewram[0x19800], 0x800}
+};
+
+static const struct SpriteFrameImage* const sUnknown_0840B69C[7] =
+{
+ sSpriteImageTable_840B5BC,
+ sSpriteImageTable_840B5DC,
+ sSpriteImageTable_840B5FC,
+ sSpriteImageTable_840B61C,
+ sSpriteImageTable_840B63C,
+ sSpriteImageTable_840B65C,
+ sSpriteImageTable_840B67C
+};
+
+static const struct SpriteTemplate sUnknown_0840B6B8 =
+{
+ .tileTag = -1,
+ .paletteTag = -1,
+ .oam = &sOamData_840B598,
+ .anims = NULL,
+ .images = sSpriteImageTable_840B5BC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFame_Dummy
+};
+
+static const struct OamData sOamData_840B6D0 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_840B6D8[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B6E0[] =
+{
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B6E8[] =
+{
+ ANIMCMD_FRAME(2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B6F0[] =
+{
+ ANIMCMD_FRAME(3, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B6F8[] =
+{
+ ANIMCMD_FRAME(4, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B700[] =
+{
+ ANIMCMD_FRAME(5, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B708[] =
+{
+ ANIMCMD_FRAME(6, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B710[] =
+{
+ ANIMCMD_FRAME(7, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B718[] =
+{
+ ANIMCMD_FRAME(8, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B720[] =
+{
+ ANIMCMD_FRAME(9, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B728[] =
+{
+ ANIMCMD_FRAME(10, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B730[] =
+{
+ ANIMCMD_FRAME(11, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B738[] =
+{
+ ANIMCMD_FRAME(12, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B740[] =
+{
+ ANIMCMD_FRAME(13, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B748[] =
+{
+ ANIMCMD_FRAME(14, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B750[] =
+{
+ ANIMCMD_FRAME(15, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_840B758[] =
+{
+ ANIMCMD_FRAME(16, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd* const sSpriteAnimTable_840B760[] =
+{
+ sSpriteAnim_840B6D8,
+ sSpriteAnim_840B6E0,
+ sSpriteAnim_840B6E8,
+ sSpriteAnim_840B6F0,
+ sSpriteAnim_840B6F8,
+ sSpriteAnim_840B700,
+ sSpriteAnim_840B708,
+ sSpriteAnim_840B710,
+ sSpriteAnim_840B718,
+ sSpriteAnim_840B720,
+ sSpriteAnim_840B728,
+ sSpriteAnim_840B730,
+ sSpriteAnim_840B738,
+ sSpriteAnim_840B740,
+ sSpriteAnim_840B748,
+ sSpriteAnim_840B750,
+ sSpriteAnim_840B758
+};
+
+static const struct SpriteTemplate sSpriteTemplate_840B7A4 =
+{
+ .tileTag = 1001,
+ .paletteTag = 1001,
+ .oam = &sOamData_840B6D0,
+ .anims = sSpriteAnimTable_840B760,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_814386C
+};
+
+// code
+
+#define tDisplayedPoke data[1]
+#define tPokesNumber data[2]
+#define tFrameCount data[3]
+#define tPlayerSpriteID data[4]
+#define tMonSpriteID(i) data[i + 5]
+
+static void VBlankCB_HallOfFame(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void CB2_HallOfFame(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static bool8 sub_8141E64(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ default:
+ SetVBlankCallback(NULL);
+ sub_81433E0();
+ gMain.state = 1;
+ break;
+ case 1:
+ sub_8143570();
+ gMain.state++;
+ break;
+ case 2:
+ {
+ u16 saved_IME;
+
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ SetVBlankCallback(VBlankCB_HallOfFame);
+ saved_IME = REG_IME;
+ REG_IME = 0;
+ REG_IE |= 1;
+ REG_IME = saved_IME;
+ REG_DISPSTAT |= 8;
+ gMain.state++;
+ }
+ break;
+ case 3:
+ REG_BLDCNT = 0x3F42;
+ REG_BLDALPHA = 0x710;
+ REG_BLDY = 0;
+ sub_81435B8();
+ gMain.state++;
+ break;
+ case 4:
+ UpdatePaletteFade();
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_HallOfFame);
+ PlayBGM(BGM_DENDOU);
+ return 0;
+ }
+ break;
+ }
+ return 1;
+}
+
+void sub_8141F90(void)
+{
+ if (sub_8141E64() == 0)
+ {
+ u8 taskID = CreateTask(sub_8141FF8, 0);
+ gTasks[taskID].data[0] = 0;
+ }
+}
+
+static void sub_8141FC4(void)
+{
+ if (sub_8141E64() == 0)
+ {
+ u8 taskID = CreateTask(sub_8141FF8, 0);
+ gTasks[taskID].data[0] = 1;
+ }
+}
+
+static void sub_8141FF8(u8 taskID)
+{
+ u16 i, j;
+ struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]);
+
+ gTasks[taskID].tPokesNumber = 0; // valid pokes
+ for (i = 0; i < 6; i++)
+ {
+ u8 nick[12];
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
+ {
+ fameMons->mons[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ fameMons->mons[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID);
+ fameMons->mons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
+ fameMons->mons[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+ GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick);
+ for (j = 0; j < 10; j++)
+ {
+ fameMons->mons[i].nick[j] = nick[j];
+ }
+ gTasks[taskID].tPokesNumber++;
+ }
+ else
+ {
+ fameMons->mons[i].species = 0;
+ fameMons->mons[i].tid = 0;
+ fameMons->mons[i].personality = 0;
+ fameMons->mons[i].lvl = 0;
+ fameMons->mons[i].nick[0] = EOS;
+ }
+ }
+ sUnknown_0203931C = 0;
+ gTasks[taskID].tDisplayedPoke = 0;
+ gTasks[taskID].data[4] = 0xFF;
+ for (i = 0; i < 6; i++)
+ {
+ gTasks[taskID].tMonSpriteID(i) = 0xFF;
+ }
+ if (gTasks[taskID].data[0])
+ gTasks[taskID].func = sub_81422E8;
+ else
+ gTasks[taskID].func = sub_814217C;
+}
+
+static void sub_814217C(u8 taskID)
+{
+ u16 i;
+ struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]);
+ struct HallofFameMons* lastSavedTeam = (struct HallofFameMons*)(&ewram[0x1E000]);
+
+ if (gUnknown_02039324 == FALSE)
+ {
+ for (i = 0; i < 0x2000; i++)
+ ewram[i + 0x1E000] = 0;
+ }
+ else
+ sub_8125EC8(3);
+
+ for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++)
+ {
+ if (lastSavedTeam->mons[0].species == 0)
+ break;
+ }
+ if (i >= HALL_OF_FAME_MAX_TEAMS)
+ {
+ struct HallofFameMons* r5 = (struct HallofFameMons*)(&ewram[0x1E000]);
+ struct HallofFameMons* r6 = (struct HallofFameMons*)(&ewram[0x1E000]);
+ r5++;
+ for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, r6++, r5++)
+ {
+ *r6 = *r5;
+ }
+ lastSavedTeam--;
+ }
+ *lastSavedTeam = *fameMons;
+ MenuDrawTextWindow(2, 14, 27, 19);
+ MenuPrint(gMenuText_HOFSaving, 3, 15);
+ gTasks[taskID].func = sub_8142274;
+}
+
+static void sub_8142274(u8 taskID)
+{
+ gGameContinueCallback = sub_8141FC4;
+ TrySavingData(3);
+ PlaySE(SE_SAVE);
+ gTasks[taskID].func = sub_81422B8;
+ gTasks[taskID].tFrameCount = 32;
+}
+
+static void sub_81422B8(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCount)
+ gTasks[taskID].tFrameCount--;
+ else
+ gTasks[taskID].func = sub_81422E8;
+}
+
+static void sub_81422E8(u8 taskID)
+{
+ SetUpWindowConfig(&gWindowConfig_81E7198);
+ InitMenuWindow(&gWindowConfig_81E7198);
+ gTasks[taskID].func = sub_8142320;
+}
+
+static void sub_8142320(u8 taskID)
+{
+ u8 spriteID;
+ s16 xPos, yPos, field4, field6;
+
+ struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]);
+ u16 currPokeID = gTasks[taskID].tDisplayedPoke;
+ struct HallofFameMon* currMon = &fameMons->mons[currPokeID];
+
+ if (gTasks[taskID].tPokesNumber > 3)
+ {
+ xPos = sHallOfFame_MonsFullTeamPositions[currPokeID][0];
+ yPos = sHallOfFame_MonsFullTeamPositions[currPokeID][1];
+ field4 = sHallOfFame_MonsFullTeamPositions[currPokeID][2];
+ field6 = sHallOfFame_MonsFullTeamPositions[currPokeID][3];
+ }
+ else
+ {
+ xPos = sHallOfFame_MonsHalfTeamPositions[currPokeID][0];
+ yPos = sHallOfFame_MonsHalfTeamPositions[currPokeID][1];
+ field4 = sHallOfFame_MonsHalfTeamPositions[currPokeID][2];
+ field6 = sHallOfFame_MonsHalfTeamPositions[currPokeID][3];
+ }
+
+ spriteID = HallOfFame_LoadPokemonPic(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality);
+ gSprites[spriteID].data1 = field4;
+ gSprites[spriteID].data2 = field6;
+ gSprites[spriteID].data0 = 0;
+ gSprites[spriteID].callback = sub_81435DC;
+ gTasks[taskID].tMonSpriteID(currPokeID) = spriteID;
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ gTasks[taskID].func = sub_8142404;
+}
+
+static void sub_8142404(u8 taskID)
+{
+ struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]);
+ u16 currPokeID = gTasks[taskID].tDisplayedPoke;
+ struct HallofFameMon* currMon = &fameMons->mons[currPokeID];
+
+ if (gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].data0 != 0)
+ {
+ if (currMon->species != SPECIES_EGG)
+ PlayCry1(currMon->species, 0);
+ HallOfFame_PrintMonInfo(currMon, 0, 14);
+ gTasks[taskID].tFrameCount = 120;
+ gTasks[taskID].func = sub_8142484;
+ }
+}
+
+static void sub_8142484(u8 taskID)
+{
+ struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]);
+ u16 currPokeID = gTasks[taskID].tDisplayedPoke;
+ struct HallofFameMon* currMon = &fameMons->mons[currPokeID];
+
+ if (gTasks[taskID].tFrameCount != 0)
+ gTasks[taskID].tFrameCount--;
+ else
+ {
+ sUnknown_0203931C |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum);
+ if (gTasks[taskID].tDisplayedPoke <= 4 && currMon[1].species != 0) // there is another pokemon to display
+ {
+ gTasks[taskID].tDisplayedPoke++;
+ BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, 0x735F);
+ gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.priority = 1;
+ gTasks[taskID].func = sub_8142320;
+ }
+ else
+ gTasks[taskID].func = sub_8142570;
+ }
+}
+
+static void sub_8142570(u8 taskID)
+{
+ u16 i;
+
+ BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0, 0);
+ for (i = 0; i < 6; i++)
+ {
+ if (gTasks[taskID].tMonSpriteID(i) != 0xFF)
+ gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 0;
+ }
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ sub_8143068(0, 15);
+ PlaySE(SE_DENDOU);
+ gTasks[taskID].tFrameCount = 400;
+ gTasks[taskID].func = sub_8142618;
+}
+
+static void sub_8142618(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCount != 0)
+ {
+ gTasks[taskID].tFrameCount--;
+ if ((gTasks[taskID].tFrameCount & 3) == 0 && gTasks[taskID].tFrameCount > 110)
+ sub_81438C4();
+ }
+ else
+ {
+ u16 i;
+ for (i = 0; i < 6; i++)
+ {
+ if (gTasks[taskID].tMonSpriteID(i) != 0xFF)
+ gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 1;
+ }
+ BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, 0x735F);
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ gTasks[taskID].tFrameCount = 7;
+ gTasks[taskID].func = sub_81426F8;
+ }
+}
+
+static void sub_81426F8(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCount >= 16)
+ gTasks[taskID].func = sub_8142738;
+ else
+ {
+ gTasks[taskID].tFrameCount++;
+ REG_BLDALPHA = gTasks[taskID].tFrameCount * 256;
+ }
+}
+
+static void sub_8142738(u8 taskID)
+{
+ REG_DISPCNT = 0x1940;
+ SetUpWindowConfig(&gWindowConfig_81E71B4);
+ InitMenuWindow(&gWindowConfig_81E71B4);
+
+ gTasks[taskID].tPlayerSpriteID = HallOfFame_LoadTrainerPic(gSaveBlock2.playerGender, 120, 72, 6);
+ gTasks[taskID].tFrameCount = 120;
+ gTasks[taskID].func = sub_8142794;
+}
+
+static void sub_8142794(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCount != 0)
+ gTasks[taskID].tFrameCount--;
+ else
+ {
+ if (gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x != 160)
+ gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x++;
+ else
+ {
+ MenuDrawTextWindow(1, 2, 15, 9);
+ HallOfFame_PrintPlayerInfo(1, 2);
+ MenuDrawTextWindow(2, 14, 27, 19);
+ MenuPrint(gMenuText_HOFCongratulations, 4, 15);
+ gTasks[taskID].func = sub_8142818;
+ }
+ }
+}
+
+static void sub_8142818(u8 taskID)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ FadeOutBGM(4);
+ gTasks[taskID].func = sub_8142850;
+ }
+}
+
+static void sub_8142850(u8 taskID)
+{
+ CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200);
+ BeginNormalPaletteFade(-1, 8, 0, 0x10, 0);
+ gTasks[taskID].func = sub_81428A0;
+}
+
+static void sub_81428A0(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyTask(taskID);
+ SetMainCallback2(sub_81439D0);
+ }
+}
+
+#undef tDisplayedPoke
+#undef tPokesNumber
+#undef tFrameCount
+#undef tPlayerSpriteID
+#undef tMonSpriteID
+
+void sub_81428CC(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ default:
+ SetVBlankCallback(NULL);
+ sub_81433E0();
+ gMain.state = 1;
+ break;
+ case 1:
+ sub_8143570();
+ gMain.state++;
+ break;
+ case 2:
+ {
+ u16 savedIme;
+
+ SetVBlankCallback(VBlankCB_HallOfFame);
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= 1;
+ REG_IME = savedIme;
+ REG_DISPSTAT |= 8;
+ gMain.state++;
+ }
+ break;
+ case 3:
+ {
+ struct HallofFameMons* fameMons;
+
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BLDY = 0;
+ sub_81435B8();
+
+ fameMons = (struct HallofFameMons*)(&ewram[0x1C000]);
+ fameMons->mons[0] = sDummyFameMon;
+
+ sub_80C5CD4(fameMons);
+ gMain.state++;
+ }
+ break;
+ case 4:
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ if (sub_80C5DCC())
+ gMain.state++;
+ break;
+ case 5:
+ REG_BLDCNT = 0x3F42;
+ REG_BLDALPHA = 0x710;
+ REG_BLDY = 0;
+ CreateTask(sub_8142A28, 0);
+ SetMainCallback2(CB2_HallOfFame);
+ break;
+ }
+}
+
+#define tCurrTeamNo data[0]
+#define tCurrPageNo data[1]
+#define tCurrPokeID data[2]
+#define tPokesNo data[4]
+#define tMonSpriteID(i) data[i + 5]
+
+static void sub_8142A28(u8 taskID)
+{
+ if (sub_8125EC8(3) != 1)
+ gTasks[taskID].func = sub_8142FEC;
+ else
+ {
+ u16 *vram1, *vram2;
+
+ u16 i;
+ struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]);
+ for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++)
+ {
+ if (savedTeams->mons[0].species == 0)
+ break;
+ }
+ if (i < HALL_OF_FAME_MAX_TEAMS)
+ gTasks[taskID].tCurrTeamNo = i - 1;
+ else
+ gTasks[taskID].tCurrTeamNo = HALL_OF_FAME_MAX_TEAMS - 1;
+ gTasks[taskID].tCurrPageNo = GetGameStat(10);
+
+ for (i = 0, vram1 = (u16*)(VRAM + 0x381A), vram2 = (u16*)(VRAM + 0x385A); i <= 16; i++)
+ {
+ *(vram1 + i) = i + 3;
+ *(vram2 + i) = i + 20;
+ }
+ SetUpWindowConfig(&gWindowConfig_81E7198);
+ InitMenuWindow(&gWindowConfig_81E7198);
+ gTasks[taskID].func = sub_8142B04;
+ }
+}
+
+static void sub_8142B04(u8 taskID)
+{
+ struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]);
+ struct HallofFameMon* currMon;
+ u16 i;
+ u8* stringPtr;
+
+ for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++)
+ savedTeams++;
+
+ currMon = &savedTeams->mons[0];
+ sUnknown_0203931C = 0;
+ gTasks[taskID].tCurrPokeID = 0;
+ gTasks[taskID].tPokesNo = 0;
+
+ for (i = 0; i < 6; i++, currMon++)
+ {
+ if (currMon->species != 0)
+ gTasks[taskID].tPokesNo++;
+ }
+
+ currMon = &savedTeams->mons[0];
+
+ for (i = 0; i < 6; i++, currMon++)
+ {
+ if (currMon->species != 0)
+ {
+ u16 spriteID;
+ s16 posX, posY;
+ if (gTasks[taskID].tPokesNo > 3)
+ {
+ posX = sHallOfFame_MonsFullTeamPositions[i][2];
+ posY = sHallOfFame_MonsFullTeamPositions[i][3];
+ }
+ else
+ {
+ posX = sHallOfFame_MonsHalfTeamPositions[i][2];
+ posY = sHallOfFame_MonsHalfTeamPositions[i][3];
+ }
+ spriteID = HallOfFame_LoadPokemonPic(currMon->species, posX, posY, i, currMon->tid, currMon->personality);
+ gSprites[spriteID].oam.priority = 1;
+ gTasks[taskID].tMonSpriteID(i) = spriteID;
+ }
+ else
+ gTasks[taskID].tMonSpriteID(i) = 0xFF;
+ }
+
+ BlendPalettes(0xFFFF0000, 0xC, 0x735F);
+
+ stringPtr = gStringVar1;
+ stringPtr = StringCopy(stringPtr, gMenuText_HOFNumber);
+ stringPtr[0] = 0xFC;
+ stringPtr[1] = 0x14;
+ stringPtr[2] = 0x6;
+ stringPtr += 3;
+ stringPtr = ConvertIntToDecimalString(stringPtr, gTasks[taskID].tCurrPageNo);
+ stringPtr[0] = 0xFC;
+ stringPtr[1] = 0x13;
+ stringPtr[2] = 0xF0;
+ stringPtr[3] = EOS;
+ MenuPrint(gStringVar1, 0, 0);
+
+ gTasks[taskID].func = sub_8142CC8;
+}
+
+static void sub_8142CC8(u8 taskID)
+{
+ struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]);
+ struct HallofFameMon* currMon;
+ u16 i;
+ u16 currMonID;
+
+ for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++)
+ savedTeams++;
+
+ for (i = 0; i < 6; i++)
+ {
+ u16 spriteID = gTasks[taskID].tMonSpriteID(i);
+ if (spriteID != 0xFF)
+ gSprites[spriteID].oam.priority = 1;
+ }
+
+ currMonID = gTasks[taskID].tMonSpriteID(gTasks[taskID].tCurrPokeID);
+ gSprites[currMonID].oam.priority = 0;
+ sUnknown_0203931C = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000;
+ BlendPalettesUnfaded(sUnknown_0203931C, 0xC, 0x735F);
+
+ currMon = &savedTeams->mons[gTasks[taskID].tCurrPokeID];
+ if (currMon->species != SPECIES_EGG)
+ {
+ StopCryAndClearCrySongs();
+ PlayCry1(currMon->species, 0);
+ }
+ HallOfFame_PrintMonInfo(currMon, 0, 14);
+
+ gTasks[taskID].func = sub_8142DF4;
+}
+
+static void sub_8142DF4(u8 taskID)
+{
+ u16 i;
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (gTasks[taskID].tCurrTeamNo != 0) // prepare another team to view
+ {
+ gTasks[taskID].tCurrTeamNo--;
+ for (i = 0; i < 6; i++)
+ {
+ u8 spriteID = gTasks[taskID].tMonSpriteID(i);
+ if (spriteID != 0xFF)
+ {
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteID].oam.paletteNum));
+ DestroySprite(&gSprites[spriteID]);
+ }
+ }
+ if (gTasks[taskID].tCurrPageNo != 0)
+ gTasks[taskID].tCurrPageNo--;
+ gTasks[taskID].func = sub_8142B04;
+ }
+ else // no more teams to view, turn off hall of fame PC
+ {
+ if (IsCryPlayingOrClearCrySongs())
+ {
+ StopCryAndClearCrySongs();
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ }
+ gTasks[taskID].func = sub_8142F78;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON) // turn off hall of fame PC
+ {
+ if (IsCryPlayingOrClearCrySongs())
+ {
+ StopCryAndClearCrySongs();
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ }
+ gTasks[taskID].func = sub_8142F78;
+ }
+ else if (gMain.newKeys & DPAD_UP && gTasks[taskID].tCurrPokeID != 0) // change poke -1
+ {
+ gTasks[taskID].tCurrPokeID--;
+ gTasks[taskID].func = sub_8142CC8;
+ }
+ else if (gMain.newKeys & DPAD_DOWN && gTasks[taskID].tCurrPokeID < gTasks[taskID].tPokesNo - 1) // change poke +1
+ {
+ gTasks[taskID].tCurrPokeID++;
+ gTasks[taskID].func = sub_8142CC8;
+ }
+}
+
+static void sub_8142F78(u8 taskID)
+{
+ struct HallofFameMons* fameMons;
+
+ CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200);
+ fameMons = (struct HallofFameMons*)(&ewram[0x1C000]);
+ fameMons->mons[0] = sDummyFameMon;
+ sub_80C5E38(fameMons);
+ gTasks[taskID].func = sub_8142FCC;
+}
+
+static void sub_8142FCC(u8 taskID)
+{
+ if (sub_80C5F98())
+ {
+ DestroyTask(taskID);
+ ReturnFromHallOfFamePC();
+ }
+}
+
+static void sub_8142FEC(u8 taskID)
+{
+ MenuDrawTextWindow(2, 14, 27, 19);
+ MenuPrintMessage(gMenuText_HOFCorrupt, 3, 15);
+ gTasks[taskID].func = sub_814302C;
+}
+
+static void sub_814302C(u8 taskID)
+{
+ if (MenuUpdateWindowText() && gMain.newKeys & A_BUTTON)
+ gTasks[taskID].func = sub_8142F78;
+}
+
+#undef tCurrTeamNo
+#undef tCurrPageNo
+#undef tCurrPokeID
+#undef tPokesNo
+#undef tMonSpriteID
+
+static void sub_8143068(u8 a0, u8 a1)
+{
+ sub_8072BD8(gMenuText_WelcomeToHOFAndDexRating, 0, a1 + 1, 0xF0);
+}
+
+static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2)
+{
+ u8* stringPtr;
+ u16 monData;
+ u16 i;
+
+ stringPtr = gStringVar1;
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x13;
+ stringPtr[2] = 0x28;
+ stringPtr[3] = EOS;
+
+ if (currMon->species != SPECIES_EGG)
+ {
+ monData = SpeciesToPokedexNum(currMon->species);
+ if (monData != 0xFFFF)
+ {
+ stringPtr = StringCopy(stringPtr, gOtherText_Number2);
+ ConvertIntToDecimalStringN(stringPtr, monData, 2, 3);
+ }
+ }
+
+ MenuPrint(gStringVar1, a1 + 4, a2 + 1);
+ stringPtr = gStringVar1;
+
+ for (i = 0; i < 10 && currMon->nick[i] != EOS; stringPtr[i] = currMon->nick[i], i++) {}
+ stringPtr += i;
+ stringPtr[0] = EOS;
+
+ if (currMon->species == SPECIES_EGG)
+ {
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x13;
+ stringPtr[2] = 0xA0;
+ stringPtr[3] = EOS;
+ MenuPrint(gStringVar1, a1 + 9, a2 + 1);
+ MenuZeroFillWindowRect(0, a2 + 3, 29, a2 + 4);
+ }
+ else
+ {
+
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x13;
+ stringPtr[2] = 0x3E;
+ stringPtr += 3;
+
+ stringPtr[0] = CHAR_SLASH;
+ stringPtr++;
+
+ for (i = 0; i < 10 && gSpeciesNames[currMon->species][i] != EOS; stringPtr[i] = gSpeciesNames[currMon->species][i], i++) {}
+
+ stringPtr += i;
+ stringPtr[0] = CHAR_SPACE;
+ stringPtr++;
+
+ if (currMon->species != SPECIES_NIDORAN_M && currMon->species != SPECIES_NIDORAN_F)
+ {
+ switch (GetGenderFromSpeciesAndPersonality(currMon->species, currMon->personality))
+ {
+ case MON_MALE:
+ stringPtr[0] = CHAR_MALE;
+ stringPtr++;
+ break;
+ case MON_FEMALE:
+ stringPtr[0] = CHAR_FEMALE;
+ stringPtr++;
+ break;
+ }
+ }
+
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x13;
+ stringPtr[2] = 0xA0;
+ stringPtr[3] = EOS;
+
+ MenuPrint(gStringVar1, a1 + 9, a2 + 1);
+
+ monData = currMon->lvl;
+
+ stringPtr = StringCopy(gStringVar1, gOtherText_Level3);
+
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x14;
+ stringPtr[2] = 6;
+ stringPtr += 3;
+
+ stringPtr = ConvertIntToDecimalStringN(stringPtr, monData, 0, 3);
+
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x13;
+ stringPtr[2] = 0x30;
+ stringPtr[3] = EOS;
+
+ MenuPrint(gStringVar1, a1 + 7, a2 + 3);
+
+ monData = currMon->tid;
+
+ stringPtr = StringCopy(gStringVar1, gOtherText_IDNumber);
+ ConvertIntToDecimalStringN(stringPtr, monData, 2, 5);
+
+ MenuPrint(gStringVar1, a1 + 13, a2 + 3);
+ }
+}
+
+#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
+
+static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1)
+{
+ u8* stringPtr;
+ u16 visibleTid;
+
+ MenuPrint(gOtherText_Name, a0 + 1, a1 + 1);
+ MenuPrint_RightAligned(gSaveBlock2.playerName, a0 + 14, a1 + 1);
+
+ MenuPrint(gOtherText_IDNumber2, a0 + 1, a1 + 3);
+ visibleTid = ByteRead16(gSaveBlock2.playerTrainerId);
+ ConvertIntToDecimalStringN(gStringVar1, visibleTid, 2, 5);
+
+ MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 3);
+ MenuPrint(gMainMenuString_Time, a0 + 1, a1 + 5);
+
+ stringPtr = ConvertIntToDecimalString(gStringVar1, gSaveBlock2.playTimeHours);
+ stringPtr[0] = CHAR_SPACE;
+ stringPtr[1] = CHAR_COLON;
+ stringPtr[2] = CHAR_SPACE;
+ stringPtr += 3;
+
+ stringPtr = ConvertIntToDecimalStringN(stringPtr, gSaveBlock2.playTimeMinutes, 2, 2);
+ stringPtr[0] = EOS;
+
+ MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 5);
+}
+
+static void sub_81433E0(void)
+{
+ u32 offsetWrite, offsetWrite2, offsetWrite3, offsetWrite4;
+ u32 size, size2, size3, size4;
+ u16 i;
+
+ REG_DISPCNT = 0;
+
+ REG_BG0CNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+
+ REG_BG1CNT = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+
+ REG_BG2CNT = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+
+ REG_BG3CNT = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+
+ offsetWrite = (VRAM);
+ size = 0x18000;
+ while (TRUE)
+ {
+ DmaFill16(3, 0, offsetWrite, 0x1000);
+ offsetWrite += 0x1000;
+ size -= 0x1000;
+ if (size <= 0x1000)
+ {
+ DmaFill16(3, 0, offsetWrite, size);
+ break;
+ }
+ }
+
+ offsetWrite2 = OAM;
+ size2 = OAM_SIZE;
+ DmaFill32(3, 0, offsetWrite2, size2);
+
+ offsetWrite3 = PLTT;
+ size3 = PLTT_SIZE;
+ DmaFill16(3, 0, offsetWrite3, size3);
+
+ LZ77UnCompVram(gHallOfFame_Gfx, (void*)(VRAM));
+
+ for (i = 0; i < 64; i++)
+ {
+ *((u16*)(VRAM + 0x3800) + i) = 1;
+ }
+ for (i = 0; i < 192; i++)
+ {
+ *((u16*)(VRAM + 0x3B80) + i) = 1;
+ }
+ for (i = 0; i < 1024; i++)
+ {
+ *((u16*)(VRAM + 0x3000) + i) = 2;
+ }
+
+ offsetWrite4 = (u32)(&ewram[0]);
+ size4 = 0x4000;
+ while (TRUE)
+ {
+ DmaFill16(3, 0, offsetWrite4, 0x1000);
+ offsetWrite4 += 0x1000;
+ size4 -= 0x1000;
+ if (size4 <= 0x1000)
+ {
+ DmaFill16(3, 0, offsetWrite4, size4);
+ break;
+ }
+ }
+
+ ResetPaletteFade();
+ LoadPalette(gHallOfFame_Pal, 0, 0x20);
+}
+
+static void sub_8143570(void)
+{
+ remove_some_task();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 8;
+ LoadCompressedObjectPic(&sHallOfFame_ConfettiSpriteSheet);
+ LoadCompressedObjectPalette(&sHallOfFame_ConfettiSpritePalette);
+ SetUpWindowConfig(&gWindowConfig_81E71B4);
+ InitMenuWindow(&gWindowConfig_81E71B4);
+}
+
+static void sub_81435B8(void)
+{
+ REG_BG1CNT = 0x700;
+ REG_BG3CNT = 0x603;
+ REG_DISPCNT = 0x1B40;
+}
+
+static void sub_81435DC(struct Sprite* sprite)
+{
+ u32 spritePos = *(u32*)(&sprite->pos1);
+ u32 dataPos = *(u32*)(&sprite->data1);
+ if (spritePos != dataPos)
+ {
+ if (sprite->pos1.x < sprite->data1)
+ sprite->pos1.x += 15;
+ if (sprite->pos1.x > sprite->data1)
+ sprite->pos1.x -= 15;
+
+ if (sprite->pos1.y < sprite->data2)
+ sprite->pos1.y += 10;
+ if (sprite->pos1.y > sprite->data2)
+ sprite->pos1.y -= 10;
+ }
+ else
+ {
+ sprite->data0 = 1;
+ sprite->callback = SpriteCB_HallOfFame_Dummy;
+ }
+}
+
+static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite)
+{
+
+}
+
+void sub_8143648(u16 paletteTag, u8 animID)
+{
+ gUnknown_02024E8C = sUnknown_0840B6B8;
+ gUnknown_02024E8C.paletteTag = paletteTag;
+ gUnknown_02024E8C.images = sUnknown_0840B69C[animID];
+ gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64;
+}
+
+void sub_8143680(u16 paletteTag, u8 animID)
+{
+ gUnknown_02024E8C = sUnknown_0840B6B8;
+ gUnknown_02024E8C.paletteTag = paletteTag;
+ gUnknown_02024E8C.images = sUnknown_0840B69C[animID];
+ gUnknown_02024E8C.anims = gUnknown_081EC2A4[0];
+}
+
+static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid)
+{
+ u8 spriteID;
+ const u8* pokePal;
+
+ LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[pokeID], species, pid, 1);
+
+ pokePal = species_and_otid_get_pal(species, tid, pid);
+ LoadCompressedPalette(pokePal, 16 * pokeID + 256, 0x20);
+
+ sub_8143648(pokeID, pokeID);
+ spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 10 - pokeID);
+ gSprites[spriteID].oam.paletteNum = pokeID;
+ return spriteID;
+}
+
+static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3)
+{
+ u8 spriteID;
+
+ DecompressPicFromTable_2(&gTrainerFrontPicTable[trainerPicID], gTrainerFrontPicCoords[trainerPicID].coords, gTrainerFrontPicCoords[trainerPicID].y_offset, (void*) 0x2000000, gUnknown_0840B5A0[a3], trainerPicID);
+
+ LoadCompressedPalette(gTrainerFrontPicPaletteTable[trainerPicID].data, 16 * a3 + 256, 0x20);
+ sub_8143680(a3, a3);
+
+ spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 1);
+ gSprites[spriteID].oam.paletteNum = a3;
+
+ return spriteID;
+}
+
+static void sub_814386C(struct Sprite* sprite)
+{
+ if (sprite->pos2.y > 120)
+ DestroySprite(sprite);
+ else
+ {
+ u16 rand;
+ u8 tableID;
+
+ sprite->pos2.y++;
+ sprite->pos2.y += sprite->data1;
+
+ tableID = sprite->data0;
+ rand = (Random() % 4) + 8;
+ sprite->pos2.x = rand * gSineTable[tableID] / 256;
+
+ sprite->data0 += 4;
+ }
+}
+
+static bool8 sub_81438C4(void)
+{
+ u8 spriteID;
+ struct Sprite* sprite;
+
+ s16 posX = Random() % 240;
+ s16 posY = -(Random() % 8);
+
+ spriteID = CreateSprite(&sSpriteTemplate_840B7A4, posX, posY, 0);
+ sprite = &gSprites[spriteID];
+
+ StartSpriteAnim(sprite, Random() % 17);
+
+ if (Random() & 3)
+ sprite->data1 = 0;
+ else
+ sprite->data1 = 1;
+
+ return 0;
+}
diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c
new file mode 100755
index 000000000..cd0589af8
--- /dev/null
+++ b/src/intro_credits_graphics.c
@@ -0,0 +1,532 @@
+#include "global.h"
+#include "gba/m4a_internal.h"
+#include "intro.h"
+#include "data2.h"
+#include "decompress.h"
+#include "hall_of_fame.h"
+#include "intro_credits_graphics.h"
+#include "libgncmultiboot.h"
+#include "link.h"
+#include "m4a.h"
+#include "main.h"
+#include "new_game.h"
+#include "palette.h"
+#include "rng.h"
+#include "save.h"
+#include "songs.h"
+#include "sound.h"
+#include "species.h"
+#include "task.h"
+#include "title_screen.h"
+#include "trig.h"
+#include "unknown_task.h"
+
+// define register constants for the inline asm
+asm(".include \"constants/gba_constants.inc\"\n");
+
+struct UnknownStruct1
+{
+ u8 var0_0:4;
+ u8 var0_4:2;
+ u8 var0_6:2;
+ u8 var1;
+ u8 var2;
+ u8 var3;
+ u16 var4;
+};
+
+extern u8 gUnknown_0841225C;
+extern u8 gUnknown_084126DC;
+extern u8 gUnknown_084121FC;
+extern u8 gUnknown_084128D8;
+extern u8 gUnknown_08412EB4;
+extern u8 gUnknown_08412818;
+extern u8 gUnknown_08413184;
+extern u8 gUnknown_08413340;
+extern u8 gUnknown_084139C8;
+extern u8 gUnknown_08413300;
+extern u8 gUnknown_08413CCC;
+
+extern const struct SpriteTemplate gSpriteTemplate_8416B3C;
+const extern struct CompressedSpriteSheet gUnknown_08416B54;
+const extern struct CompressedSpriteSheet gUnknown_08416BDC;
+
+extern u16 gUnknown_02039358;
+extern s16 gUnknown_0203935A;
+extern s16 gUnknown_0203935C;
+extern u8 gReservedSpritePaletteCount;
+
+void sub_8149248();
+void sub_8149264();
+
+void load_intro_part2_graphics(u8 a)
+{
+ LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000));
+ LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800));
+ LoadPalette(&gUnknown_084121FC, 240, 32);
+ switch (a)
+ {
+ case 0:
+ default:
+ LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_08412818, 0, 96);
+ LoadCompressedObjectPic(&gUnknown_08416B54);
+ LoadPalette(&gUnknown_08413184, 256, 32);
+ sub_8149248();
+ break;
+ case 1:
+ LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_08413300, 0, 32);
+ LoadCompressedObjectPic(&gUnknown_08416BDC);
+ LoadPalette(&gUnknown_08413CCC, 256, 32);
+ sub_8149264();
+ break;
+ }
+ gUnknown_0203935C = 0;
+ gReservedSpritePaletteCount = 8;
+}
+
+void sub_8148C78(u8 a)
+{
+ if (a == 1)
+ {
+ REG_BG3CNT = 0x603;
+ REG_BG2CNT = 0x702;
+ REG_BG1CNT = 0xF05;
+ REG_DISPCNT = 0x1E40;
+ }
+ else
+ {
+ REG_BG3CNT = 0x603;
+ REG_BG2CNT = 0x702;
+ REG_BG1CNT = 0xF05;
+ REG_DISPCNT = 0x1E40;
+ }
+}
+
+extern u8 gUnknown_084131C4;
+extern u8 gUnknown_084131A4;
+extern u8 gUnknown_0841221C;
+extern u8 gUnknown_08412878;
+extern u8 gUnknown_08413320;
+extern u8 gUnknown_0841223C;
+extern u8 gUnknown_08413E78;
+extern u8 gUnknown_08414084;
+extern u8 gUnknown_08413E38;
+const extern struct CompressedSpriteSheet gUnknown_08416C70;
+extern u8 gUnknown_08414064;
+extern struct UnknownStruct1 gUnknown_08416B94;
+extern struct UnknownStruct1 gUnknown_08416C10;
+extern struct UnknownStruct1 gUnknown_08416C8C;
+const extern union AnimCmd *const gSpriteAnimTable_8416B84;
+const extern union AnimCmd *const gSpriteAnimTable_8416C04;
+const extern union AnimCmd *const gSpriteAnimTable_8416C88;
+const extern struct SpriteTemplate gSpriteTemplate_8416CDC;
+const extern struct SpriteTemplate gSpriteTemplate_Brendan;
+const extern struct SpriteTemplate gSpriteTemplate_8416CF4;
+const extern struct SpriteTemplate gSpriteTemplate_May;
+const extern struct SpriteTemplate gSpriteTemplate_8416D7C;
+const extern struct SpriteTemplate gSpriteTemplate_8416D94;
+
+void sub_8149280();
+
+void sub_8148CB0(u8 a)
+{
+ LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000));
+ LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800));
+ switch (a)
+ {
+ case 0:
+ default:
+ LoadPalette(&gUnknown_084121FC, 240, 32);
+ LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_08412818, 0, 96);
+ LoadCompressedObjectPic(&gUnknown_08416B54);
+ LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000));
+ LoadPalette(&gUnknown_08413184, 256, 32);
+ sub_8149248();
+ break;
+ case 1:
+ LoadPalette(&gUnknown_0841221C, 240, 32);
+ LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_08412878, 0, 96);
+ LoadCompressedObjectPic(&gUnknown_08416B54);
+ LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000));
+ LoadPalette(&gUnknown_084131A4, 256, 32);
+ sub_8149248();
+ break;
+ case 2:
+ case 3:
+ LoadPalette(&gUnknown_0841221C, 240, 32);
+ LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_08413320, 0, 32);
+ LoadCompressedObjectPic(&gUnknown_08416BDC);
+ LoadPalette(&gUnknown_08413320, 256, 32);
+ sub_8149264();
+ break;
+ case 4:
+ LoadPalette(&gUnknown_0841223C, 240, 32);
+ LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_08413E38, 0, 64);
+ LoadCompressedObjectPic(&gUnknown_08416C70);
+ LoadPalette(&gUnknown_08414064, 256, 32);
+ sub_8149280();
+ break;
+ }
+ gReservedSpritePaletteCount = 8;
+ gUnknown_0203935C = 0;
+}
+
+void sub_8148E90(u8 a)
+{
+ REG_BG3CNT = 0x603;
+ REG_BG2CNT = 0x702;
+ REG_BG1CNT = 0xF05;
+ REG_DISPCNT = 0x1F40;
+}
+
+u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d)
+{
+ u8 taskId = CreateTask(&sub_8148F3C, 0);
+
+ gTasks[taskId].data[0] = a;
+ gTasks[taskId].data[1] = b;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[4] = c;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[6] = 0;
+ gTasks[taskId].data[7] = d;
+ gTasks[taskId].data[8] = 8;
+ gTasks[taskId].data[9] = 0;
+ sub_8148F3C(taskId);
+ return taskId;
+}
+
+#ifdef NONMATCHING
+void sub_8148F3C(u8 taskId)
+{
+ register u32 r4 asm("r4");
+ s32 r2;
+
+ r4 = (u16)gTasks[taskId].data[1] << 16;
+ if (r4 != 0)
+ {
+ r2 = (gTasks[taskId].data[2] << 16) + (u16)gTasks[taskId].data[3] - (r4 >> 12);
+ gTasks[taskId].data[2] = r2 >> 16;
+ gTasks[taskId].data[3] = r2;
+ REG_BG1HOFS = gTasks[taskId].data[2];
+ REG_BG1VOFS = gUnknown_0203935A + gUnknown_02039358;
+ }
+
+ r4 = (u16)gTasks[taskId].data[4] << 16;
+ if (r4 != 0)
+ {
+ r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - (r4 >> 12);
+ gTasks[taskId].data[5] = r2 >> 16;
+ gTasks[taskId].data[3] = r2;
+ REG_BG2HOFS = gTasks[taskId].data[5];
+ if (gTasks[taskId].data[0] != 0)
+ REG_BG2VOFS = gUnknown_0203935A + gUnknown_02039358;
+ else
+ REG_BG2VOFS = gUnknown_02039358;
+ }
+
+ r4 = (u16)gTasks[taskId].data[7] << 16;
+ if (r4 != 0)
+ {
+ r2 = (gTasks[taskId].data[8] << 16) + (u16)gTasks[taskId].data[9] - (r4 >> 12);;
+ gTasks[taskId].data[8] = r2 >> 16;
+ gTasks[taskId].data[9] = r2;
+ REG_BG3HOFS = gTasks[taskId].data[8];
+ REG_BG3VOFS = gUnknown_02039358;
+ }
+}
+#else
+__attribute__((naked))
+void sub_8148F3C(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r1, _08148FB4 @ =gTasks\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r3, r0, r1\n\
+ ldrh r0, [r3, 0xA]\n\
+ lsls r4, r0, 16\n\
+ adds r6, r1, 0\n\
+ cmp r4, 0\n\
+ beq _08148F7C\n\
+ movs r1, 0xC\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r0, 16\n\
+ ldrh r1, [r3, 0xE]\n\
+ adds r2, r0, r1\n\
+ lsrs r0, r4, 12\n\
+ subs r2, r0\n\
+ asrs r1, r2, 16\n\
+ strh r1, [r3, 0xC]\n\
+ strh r2, [r3, 0xE]\n\
+ ldr r0, _08148FB8 @ =REG_BG1HOFS\n\
+ strh r1, [r0]\n\
+ ldr r2, _08148FBC @ =REG_BG1VOFS\n\
+ ldr r1, _08148FC0 @ =gUnknown_02039358\n\
+ ldr r0, _08148FC4 @ =gUnknown_0203935A\n\
+ ldrh r0, [r0]\n\
+ ldrh r1, [r1]\n\
+ adds r0, r1\n\
+ strh r0, [r2]\n\
+_08148F7C:\n\
+ ldrh r0, [r3, 0x10]\n\
+ lsls r4, r0, 16\n\
+ cmp r4, 0\n\
+ beq _08148FD8\n\
+ movs r1, 0x12\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r0, 16\n\
+ ldrh r1, [r3, 0x14]\n\
+ adds r2, r0, r1\n\
+ lsrs r0, r4, 12\n\
+ subs r2, r0\n\
+ asrs r1, r2, 16\n\
+ strh r1, [r3, 0x12]\n\
+ strh r2, [r3, 0x14]\n\
+ ldr r0, _08148FC8 @ =REG_BG2HOFS\n\
+ strh r1, [r0]\n\
+ movs r1, 0x8\n\
+ ldrsh r0, [r3, r1]\n\
+ cmp r0, 0\n\
+ beq _08148FD0\n\
+ ldr r2, _08148FCC @ =REG_BG2VOFS\n\
+ ldr r1, _08148FC0 @ =gUnknown_02039358\n\
+ ldr r0, _08148FC4 @ =gUnknown_0203935A\n\
+ ldrh r0, [r0]\n\
+ ldrh r1, [r1]\n\
+ adds r0, r1\n\
+ strh r0, [r2]\n\
+ b _08148FD8\n\
+ .align 2, 0\n\
+_08148FB4: .4byte gTasks\n\
+_08148FB8: .4byte REG_BG1HOFS\n\
+_08148FBC: .4byte REG_BG1VOFS\n\
+_08148FC0: .4byte gUnknown_02039358\n\
+_08148FC4: .4byte gUnknown_0203935A\n\
+_08148FC8: .4byte REG_BG2HOFS\n\
+_08148FCC: .4byte REG_BG2VOFS\n\
+_08148FD0:\n\
+ ldr r0, _08149010 @ =REG_BG2VOFS\n\
+ ldr r1, _08149014 @ =gUnknown_02039358\n\
+ ldrh r1, [r1]\n\
+ strh r1, [r0]\n\
+_08148FD8:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r3, r0, r6\n\
+ ldrh r0, [r3, 0x16]\n\
+ lsls r4, r0, 16\n\
+ cmp r4, 0\n\
+ beq _08149008\n\
+ movs r1, 0x18\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r0, 16\n\
+ ldrh r1, [r3, 0x1A]\n\
+ adds r2, r0, r1\n\
+ lsrs r0, r4, 12\n\
+ subs r2, r0\n\
+ asrs r1, r2, 16\n\
+ strh r1, [r3, 0x18]\n\
+ strh r2, [r3, 0x1A]\n\
+ ldr r0, _08149018 @ =REG_BG3HOFS\n\
+ strh r1, [r0]\n\
+ ldr r1, _0814901C @ =REG_BG3VOFS\n\
+ ldr r0, _08149014 @ =gUnknown_02039358\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r1]\n\
+_08149008:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08149010: .4byte REG_BG2VOFS\n\
+_08149014: .4byte gUnknown_02039358\n\
+_08149018: .4byte REG_BG3HOFS\n\
+_0814901C: .4byte REG_BG3VOFS\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_8149020(u8 mode)
+{
+ u16 var1;
+ u16 var2;
+ switch (mode)
+ {
+ case 0:
+ default:
+ /* stuff */
+ if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
+ break;
+ if (gMain.vblankCounter1 & 4)
+ {
+ var1 = gPlttBufferUnfaded[9];
+ var2 = gPlttBufferUnfaded[10];
+ }
+ else
+ {
+ var1 = gPlttBufferUnfaded[10];
+ var2 = gPlttBufferUnfaded[9];
+ }
+ LoadPalette(&var1, 9, 2);
+ LoadPalette(&var2, 10, 2);
+ break;
+ case 2:
+ if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
+ break;
+ if (gMain.vblankCounter1 & 4)
+ {
+ var1 = 0x3D27;
+ var2 = 0x295;
+ }
+ else
+ {
+ var1 = 0x31C;
+ var2 = 0x3D27;
+ }
+ LoadPalette(&var1, 12, 2);
+ LoadPalette(&var2, 13, 2);
+ break;
+ case 1:
+ break;
+ }
+}
+
+void sub_814910C(struct Sprite *sprite)
+{
+ if (gUnknown_0203935C)
+ {
+ DestroySprite(sprite);
+ }
+ else
+ {
+ s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1;
+ sprite->pos1.x = var >> 16;
+ sprite->data2 = var;
+ if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0;
+ if (sprite->data0)
+ {
+ sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A);
+ }
+ else
+ {
+ sprite->pos2.y = -gUnknown_02039358;
+ }
+ }
+}
+
+void sub_8149174(u8 a, struct UnknownStruct1 *b, const union AnimCmd *const *c, u8 d)
+{
+ u8 i;
+
+ for(i = 0; i < d; i++)
+ {
+ u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3);
+ CalcCenterToCornerVec(&gSprites[sprite], b[i].var0_4, b[i].var0_6, 0);
+ gSprites[sprite].oam.priority = 3;
+ gSprites[sprite].oam.shape = b[i].var0_4;
+ gSprites[sprite].oam.size = b[i].var0_6;
+ gSprites[sprite].oam.paletteNum = 0;
+ gSprites[sprite].anims = c;
+ StartSpriteAnim(&gSprites[sprite], b[i].var0_0);
+ gSprites[sprite].data0 = a;
+ gSprites[sprite].data1 = b[i].var4;
+ gSprites[sprite].data2 = 0;
+ }
+}
+
+void sub_8149248()
+{
+ sub_8149174(0, &gUnknown_08416B94, &gSpriteAnimTable_8416B84, 9);
+}
+
+void sub_8149264()
+{
+ sub_8149174(1, &gUnknown_08416C10, &gSpriteAnimTable_8416C04, 12);
+}
+
+void sub_8149280()
+{
+ sub_8149174(1, &gUnknown_08416C8C, &gSpriteAnimTable_8416C88, 6);
+}
+
+void nullsub_82()
+{
+}
+
+void sub_81492A0(struct Sprite* sprite)
+{
+ sprite->invisible = gSprites[sprite->data0].invisible;
+ sprite->pos1.x = gSprites[sprite->data0].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8;
+ sprite->pos2.x = gSprites[sprite->data0].pos2.x;
+ sprite->pos2.y = gSprites[sprite->data0].pos2.y;
+}
+
+
+
+u8 intro_create_brendan_sprite(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0);
+ u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1);
+ gSprites[brendan].data0 = sprite;
+ return sprite;
+}
+
+u8 intro_create_may_sprite(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0);
+ u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1);
+ gSprites[may].data0 = sprite;
+ return sprite;
+}
+
+void nullsub_83()
+{
+}
+
+void sub_81493C4(struct Sprite* sprite)
+{
+ sprite->invisible = gSprites[sprite->data0].invisible;
+ sprite->pos1.y = gSprites[sprite->data0].pos1.y;
+ sprite->pos2.x = gSprites[sprite->data0].pos2.x;
+ sprite->pos2.y = gSprites[sprite->data0].pos2.y;
+}
+
+u8 intro_create_latios_sprite(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2);
+ u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2);
+ gSprites[latios].data0 = sprite;
+ StartSpriteAnim(&gSprites[latios], 1);
+ gSprites[latios].callback = &sub_81493C4;
+ return sprite;
+}
+
+u8 intro_create_latias_sprite(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2);
+ u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2);
+ gSprites[latios].data0 = sprite;
+ StartSpriteAnim(&gSprites[latios], 1);
+ gSprites[latios].callback = &sub_81493C4;
+ return sprite;
+}
diff --git a/src/item_menu.c b/src/item_menu.c
index 350ba3db4..fdc47ad67 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -56,14 +56,6 @@ extern void sub_804E990(u8);
extern void sub_802E424(u8);
extern void sub_8064E2C(void);
-struct PocketScrollState
-{
- u8 cursorPos;
- u8 scrollTop;
- u8 numSlots;
- u8 cursorMax;
-};
-
struct UnknownStruct2
{
u8 unk0;
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 3d85a1c8f..e449af0a1 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1219,7 +1219,7 @@ s8 sub_8040A54(struct Pokemon *mon, u8 a2)
return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
}
-s8 sub_8040A7C(u32 personality, u8 a2)
+s8 GetPokeFlavourRelation(u32 personality, u8 a2)
{
u8 nature = GetNatureFromPersonality(personality);
return gPokeblockFlavorCompatibilityTable[nature * 5 + a2];
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index 8994ea49e..9bb3386e1 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1024,17 +1024,17 @@ void sub_809D7E8(struct Sprite *);
u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
{
u8 spriteId;
- struct MonIconSpriteTemplate iconTemplate;
- struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
-
- iconTemplatePtr->oam = &sMonIconOamData;
- iconTemplatePtr->image = gMonIconTable[species];
- iconTemplatePtr->anims = sMonIconAnims;
- iconTemplatePtr->affineAnims = sMonIconAffineAnims;
- iconTemplatePtr->callback = callback;
- iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
+ struct MonIconSpriteTemplate iconTemplate =
+ {
+ .oam = &sMonIconOamData,
+ .image = gMonIconTable[species],
+ .anims = sMonIconAnims,
+ .affineAnims = sMonIconAffineAnims,
+ .callback = callback,
+ .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
+ };
- spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
+ spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
UpdateMonIconFrame(&gSprites[spriteId]);
@@ -1067,17 +1067,17 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u
u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
{
u8 spriteId;
- struct MonIconSpriteTemplate iconTemplate;
- struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
-
- iconTemplatePtr->oam = &sMonIconOamData;
- iconTemplatePtr->image = gMonIconTable[species];
- iconTemplatePtr->anims = sMonIconAnims;
- iconTemplatePtr->affineAnims = sMonIconAffineAnims;
- iconTemplatePtr->callback = callback;
- iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
+ struct MonIconSpriteTemplate iconTemplate =
+ {
+ .oam = &sMonIconOamData,
+ .image = gMonIconTable[species],
+ .anims = sMonIconAnims,
+ .affineAnims = sMonIconAffineAnims,
+ .callback = callback,
+ .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
+ };
- spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
+ spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
UpdateMonIconFrame(&gSprites[spriteId]);
@@ -1197,7 +1197,7 @@ void sub_809D62C(struct Sprite *sprite)
UpdateMonIconFrame(sprite);
}
-// TODO: try to find a way to avoid using goto and asm statement
+// TODO: try to find a way to avoid using asm statement
u8 UpdateMonIconFrame(struct Sprite *sprite)
{
u8 result = 0;
@@ -1206,34 +1206,31 @@ u8 UpdateMonIconFrame(struct Sprite *sprite)
{
s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
- if (frame != -2)
- {
- if (frame != -1)
- goto copy;
- goto end;
- }
-
- sprite->animCmdIndex = 0;
- goto end;
-
- copy:
- RequestSpriteCopy(
- (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame,
- (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
- sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
+ switch (frame)
{
- register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
- sprite->animDelayCounter = duration;
+ case -1:
+ break;
+ case -2:
+ sprite->animCmdIndex = 0;
+ break;
+ default:
+ RequestSpriteCopy(
+ (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame,
+ (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
+ sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
+ {
+ register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
+ sprite->animDelayCounter = duration;
+ }
+ sprite->animCmdIndex++;
+ result = sprite->animCmdIndex;
+ break;
}
- sprite->animCmdIndex++;
- result = sprite->animCmdIndex;
}
else
{
sprite->animDelayCounter--;
}
-
-end:
return result;
}
diff --git a/sym_common.txt b/sym_common.txt
index fc729a587..0e934ba05 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -106,13 +106,7 @@ gUnknown_0300434C: @ 300434C
.include "pokemon_1.o"
.include "rng.o"
-
-@ egg_hatch
-
- .align 2
-gUnknown_0300481C: @ 300481C
- .space 0x4
-
+ .include "egg_hatch.o"
.include "load_save.o"
@ trade
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 0e8b25e28..fd19dca9b 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -662,13 +662,7 @@ gUnknown_0203927D: @ 203927D
.include "src/use_pokeblock.o"
.include "src/player_pc.o"
.include "src/intro.o"
-
-@ hall_of_fame
-
- .align 2
-gUnknown_0203931C: @ 203931C
- .space 0x4
-
+ .include "src/hall_of_fame.o"
.include "src/credits.o"
.include "src/lottery_corner.o"
.include "src/berry_tag_screen.o"
diff --git a/tools/scaninc/asm_file.cpp b/tools/scaninc/asm_file.cpp
index c3d140bb1..6322749e2 100644
--- a/tools/scaninc/asm_file.cpp
+++ b/tools/scaninc/asm_file.cpp
@@ -137,7 +137,7 @@ std::string AsmFile::ReadPath()
FATAL_INPUT_ERROR("path is too long");
}
- return std::string(m_buffer, startPos, length);
+ return std::string(m_buffer + startPos, length);
}
void AsmFile::SkipEndOfLineComment()