summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_link_817C95C.s4891
-rw-r--r--asm/battle_tower.s2
-rw-r--r--asm/blit.s823
-rw-r--r--asm/field_specials.s4
-rw-r--r--asm/trainer_rematch.s206
-rw-r--r--constants/battle_move_constants.inc15
-rw-r--r--constants/constants.inc1
-rw-r--r--data/battle_link_817C95C.s174
-rw-r--r--data/battle_moves.inc3906
-rw-r--r--data/data2b.s18
-rw-r--r--data/data2c.s18
-rw-r--r--data/event_scripts.s4
-rw-r--r--data/scripts/maps/MauvilleCity.inc18
-rw-r--r--data/scripts/maps/PetalburgCity_Gym.inc4
-rw-r--r--data/text/ability_description_pointers.inc80
-rw-r--r--data/text/ability_descriptions.inc233
-rw-r--r--data/text/ability_names.inc79
-rw-r--r--data/text/type_names.inc19
-rw-r--r--data/trainer_money.inc59
-rw-r--r--data/trainer_rematch.s10
-rw-r--r--data/type_effectiveness.inc119
-rw-r--r--data/unk_transition.s1
-rw-r--r--include/battle.h127
-rw-r--r--include/battle_link_817C95C.h11
-rw-r--r--include/battle_main.h30
-rw-r--r--include/battle_script_commands.h8
-rw-r--r--include/battle_tv.h11
-rw-r--r--include/blit.h10
-rw-r--r--include/clock.h2
-rw-r--r--include/constants/battle_move_effects.h2
-rw-r--r--include/constants/battle_script_commands.h2
-rw-r--r--include/constants/flags.h12
-rw-r--r--include/data/battle_moves.h3913
-rw-r--r--include/data/text/abilities.h247
-rw-r--r--include/data2.h2
-rw-r--r--include/global.tv.h4
-rw-r--r--include/gym_leader_rematch.h87
-rw-r--r--include/pokemon.h1
-rw-r--r--include/tv.h41
-rw-r--r--ld_script.txt11
-rw-r--r--src/battle_ai_script_commands.c333
-rw-r--r--src/battle_ai_switch_items.c2
-rw-r--r--src/battle_controller_link_opponent.c9
-rw-r--r--src/battle_controller_link_partner.c9
-rw-r--r--src/battle_controller_opponent.c7
-rw-r--r--src/battle_controller_player.c32
-rw-r--r--src/battle_controller_player_partner.c3
-rw-r--r--src/battle_controller_recorded_opponent.c2
-rw-r--r--src/battle_controller_recorded_player.c1
-rw-r--r--src/battle_controller_wally.c2
-rw-r--r--src/battle_controllers.c10
-rw-r--r--src/battle_gfx_sfx_util.c9
-rw-r--r--src/battle_main.c211
-rw-r--r--src/battle_message.c740
-rw-r--r--src/battle_script_commands.c409
-rw-r--r--src/battle_setup.c162
-rw-r--r--src/battle_tv.c1576
-rw-r--r--src/battle_util.c3
-rw-r--r--src/blit.c209
-rw-r--r--src/gym_leader_rematch.c106
-rwxr-xr-xsrc/item_menu.c1
-rw-r--r--src/lilycove_lady.c84
-rw-r--r--src/pokemon.c24
-rw-r--r--src/pokemon_summary_screen.c5
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/text.c12
-rw-r--r--src/tv.c483
-rw-r--r--src/window.c23
68 files changed, 7556 insertions, 12118 deletions
diff --git a/asm/battle_link_817C95C.s b/asm/battle_link_817C95C.s
deleted file mode 100644
index 55d0bae39..000000000
--- a/asm/battle_link_817C95C.s
+++ /dev/null
@@ -1,4891 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_817C95C
-sub_817C95C: @ 817C95C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817C988
- ldr r0, [sp]
- cmp r0, 0x1B
- beq _0817C988
- cmp r0, 0xDD
- beq _0817C988
- bl _0817E0A6
-_0817C988:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r7, r0, r1
- ldr r5, =gBattlerAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gEffectBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =gStringInfo
- ldr r0, [r0]
- ldrb r0, [r0, 0x7]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- cmp r4, 0
- bne _0817CA00
- ldr r2, =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- b _0817CA10
- .pool
-_0817CA00:
- ldr r2, =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gEnemyParty
-_0817CA10:
- adds r1, r0
- str r1, [sp, 0x8]
- cmp r6, 0
- bne _0817CA3C
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- b _0817CA4C
- .pool
-_0817CA3C:
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gEnemyParty
-_0817CA4C:
- adds r1, r0
- str r1, [sp, 0xC]
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- ldr r1, =gStringInfo
- ldr r1, [r1]
- ldrh r1, [r1]
- bl GetBattlerMoveSlotId
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- cmp r0, 0x3
- bls _0817CA9C
- ldr r0, [sp]
- bl sub_817E0B8
- lsls r0, 24
- cmp r0, 0
- beq _0817CA9C
- ldr r2, [sp]
- cmp r2, 0xC
- bls _0817CA9C
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r1, [r0]
- movs r2, 0x1E
- bl _0817E0A2
- .pool
-_0817CA9C:
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- mov r8, r0
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r5, r0, 25
- ldr r0, =gEffectBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r3, r0, 25
- ldr r1, [sp]
- subs r1, 0x2
- movs r0, 0xB0
- lsls r0, 1
- cmp r1, r0
- bls _0817CAD2
- bl _0817E0A6
-_0817CAD2:
- lsls r0, r1, 2
- ldr r1, =_0817CAEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817CAEC:
- .4byte _0817DD7A
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D070
- .4byte _0817DD74
- .4byte _0817DD80
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DA68
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D7D8
- .4byte _0817E0A6
- .4byte _0817D8A4
- .4byte _0817E0A6
- .4byte _0817D838
- .4byte _0817E0A6
- .4byte _0817D704
- .4byte _0817E0A6
- .4byte _0817D76C
- .4byte _0817DB24
- .4byte _0817E0A6
- .4byte _0817DB90
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D9C2
- .4byte _0817E0A6
- .4byte _0817DA24
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DBD4
- .4byte _0817E0A6
- .4byte _0817D94C
- .4byte _0817E0A6
- .4byte _0817D994
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E040
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DE10
- .4byte _0817DDC8
- .4byte _0817DEDC
- .4byte _0817DF24
- .4byte _0817DF4E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D698
- .4byte _0817E0A6
- .4byte _0817E08E
- .4byte _0817DF70
- .4byte _0817DFBC
- .4byte _0817E0A6
- .4byte _0817E08E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D53C
- .4byte _0817E0A6
- .4byte _0817D584
- .4byte _0817DACC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D3A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D296
- .4byte _0817D2E4
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D5CE
- .4byte _0817D608
- .4byte _0817D498
- .4byte _0817D4E0
- .4byte _0817DC62
- .4byte _0817DC98
- .4byte _0817E0A6
- .4byte _0817D1B8
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DCDC
- .4byte _0817E0A6
- .4byte _0817D0DC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D1E0
- .4byte _0817D314
- .4byte _0817D354
- .4byte _0817D372
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D216
- .4byte _0817D260
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D3C0
- .4byte _0817D3F2
- .4byte _0817D440
- .4byte _0817D45C
- .4byte _0817D3B8
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D098
- .4byte _0817D0D4
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DC20
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D16C
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DD38
- .4byte _0817DCFC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D65E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D124
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DE58
- .4byte _0817DDC8
- .4byte _0817DE10
- .4byte _0817DFE6
-_0817D070:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0x2
- movs r3, 0
- bl sub_817E684
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817D08C
- bl _0817E0A6
-_0817D08C:
- bl sub_817EECC
- bl _0817E0A6
- .pool
-_0817D098:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0x1
- movs r3, 0
- bl sub_817E684
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817D0B4
- bl _0817E0A6
-_0817D0B4:
- ldr r0, [sp, 0xC]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D0C6
- bl _0817E0A6
-_0817D0C6:
- bl sub_817EECC
- bl _0817E0A6
- .pool
-_0817D0D4:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0
- b _0817D48E
-_0817D0DC:
- lsls r3, r4, 1
- adds r3, r4
- lsls r3, 2
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3, 0x50]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x50]
- adds r3, 0x55
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0xD
- negs r0, r0
- bl _0817DC0C
- .pool
-_0817D124:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x52
- movs r0, 0x7
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r4]
- movs r0, 0x1D
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x55
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D16C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r5, r7, r0
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r3, r5, 0
- adds r3, 0x52
- lsls r1, 5
- ldrb r2, [r3]
- movs r0, 0x1F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- adds r4, r5, 0
- adds r4, 0x55
- mov r0, r10
- lsls r2, r0, 6
- ldrb r1, [r4]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r2
- strb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x58
- ldrb r0, [r2]
- movs r1, 0x40
- bl _0817DFAC
- .pool
-_0817D1B8:
- ldr r1, =gBattleTextBuff1 + 4
- ldrb r0, [r1]
- cmp r0, 0
- beq _0817D1C4
- bl _0817E0A6
-_0817D1C4:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x14
- bl _0817E0A2
- .pool
-_0817D1E0:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r3, r7, r0
- adds r0, r3, 0
- adds r0, 0x53
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D1FA
- bl _0817E0A6
-_0817D1FA:
- adds r2, r6, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x56
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- bl _0817DB10
-_0817D216:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x53
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x56
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D260:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r3, r7, r0
- adds r0, r3, 0
- adds r0, 0x53
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817D27A
- bl _0817E0A6
-_0817D27A:
- adds r2, r6, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x56
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- bl _0817DBC2
-_0817D296:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r2, 0x56
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 7
- ldrh r3, [r2]
- ldr r0, =0xfffffe7f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2]
- bl _0817E0A6
- .pool
-_0817D2E4:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x56
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- bne _0817D2FC
- bl _0817E0A6
-_0817D2FC:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x16
- bl _0817E0A2
-_0817D314:
- mov r2, r8
- lsls r3, r2, 3
- lsls r0, r4, 4
- adds r3, r0
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r3, 0x35
- movs r0, 0x7
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- movs r2, 0x3
- mov r1, r10
- ands r1, r2
- lsls r1, 3
- movs r2, 0x19
- negs r2, r2
- bl _0817DC0C
- .pool
-_0817D354:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r0, r7, r0
- adds r0, 0x35
- ldrb r1, [r0]
- lsls r0, r1, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D36E
- bl _0817E0A6
-_0817D36E:
- adds r2, r4, 0
- b _0817D38C
-_0817D372:
- lsls r0, r5, 3
- lsls r1, r6, 4
- adds r0, r1
- adds r0, r7, r0
- adds r0, 0x35
- ldrb r1, [r0]
- lsls r0, r1, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D38A
- bl _0817E0A6
-_0817D38A:
- adds r2, r6, 0
-_0817D38C:
- subs r0, 0x1
- lsls r0, 2
- lsls r3, r1, 27
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0x6
- bl sub_817E684
- bl _0817E0A6
-_0817D3A6:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xB3
- movs r1, 0x1
- bl _0817E0A4
- .pool
-_0817D3B8:
- movs r0, 0x12
- mov r1, r10
- movs r2, 0
- b _0817D48E
-_0817D3C0:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D3CC
- bl _0817E0A6
-_0817D3CC:
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD1
- bne _0817D3E8
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x17
- b _0817D48C
- .pool
-_0817D3E8:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x16
- b _0817D48C
-_0817D3F2:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D3FE
- bl _0817E0A6
-_0817D3FE:
- ldr r0, =gBattlerAttacker
- ldr r1, =gBattlerTarget
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0817D436
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD1
- bne _0817D42C
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x17
- b _0817D48C
- .pool
-_0817D42C:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x16
- b _0817D48C
-_0817D436:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1B
- b _0817D48C
-_0817D440:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D44C
- bl _0817E0A6
-_0817D44C:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x18
- b _0817D48C
- .pool
-_0817D45C:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D468
- bl _0817E0A6
-_0817D468:
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD3
- bne _0817D484
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1A
- b _0817D48C
- .pool
-_0817D484:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x19
-_0817D48C:
- mov r1, r10
-_0817D48E:
- movs r3, 0
- bl sub_817E684
- bl _0817E0A6
-_0817D498:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x30
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x32
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D4E0:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D4F2
- bl _0817E0A6
-_0817D4F2:
- mov r2, r8
- lsls r0, r2, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D50E
- bl _0817E0A6
-_0817D50E:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0x2
- b _0817D6F2
-_0817D53C:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x30
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x32
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D584:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817D5A0
- bl _0817E0A6
-_0817D5A0:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x1
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- b _0817D6F2
-_0817D5CE:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r2, 0x30]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x30]
- adds r2, 0x32
- bl _0817DF0A
- .pool
-_0817D608:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D61A
- bl _0817E0A6
-_0817D61A:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- ldrh r0, [r1, 0x30]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- bne _0817D632
- bl _0817E0A6
-_0817D632:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsrs r3, 6
- movs r0, 0x8
- movs r1, 0x5
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0xA
- b _0817D6F2
-_0817D65E:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x31
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- bl _0817DF9E
- .pool
-_0817D698:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D6AA
- bl _0817E0A6
-_0817D6AA:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817D6C6
- bl _0817E0A6
-_0817D6C6:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x6
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0xC
-_0817D6F2:
- orrs r0, r2
- mov r2, r8
- lsls r3, r2, 5
- movs r2, 0x1F
- ands r0, r2
- orrs r0, r3
- strb r0, [r1]
- bl _0817E0A6
-_0817D704:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r2]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- mov r2, r10
- lsls r3, r2, 6
- ldrb r2, [r1, 0x2]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x2]
- bl _0817E0A6
- .pool
-_0817D76C:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D77E
- bl _0817E0A6
-_0817D77E:
- ldr r6, =gBattlerPartyIndexes
- ldr r5, =gBattlerAttacker
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- lsls r0, 2
- lsls r1, r4, 1
- adds r4, r1, r4
- lsls r1, r4, 3
- adds r0, r1
- adds r1, r7, r0
- ldrh r0, [r1]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- beq _0817D7B2
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsrs r3, 6
- movs r0, 0x8
- movs r1, 0x4
- bl sub_817E684
-_0817D7B2:
- lsls r3, r4, 2
- adds r3, r7, r3
- adds r3, 0x57
- ldrb r0, [r3]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r0
- movs r0, 0x8
- orrs r1, r0
- strb r1, [r3]
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r6
- b _0817D934
- .pool
-_0817D7D8:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x2]
- movs r0, 0xD
- negs r0, r0
- b _0817D88C
- .pool
-_0817D838:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r1, r9
- lsls r4, r1, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r2]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 4
- ldrb r3, [r1, 0x2]
- movs r0, 0x31
- negs r0, r0
-_0817D88C:
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x2]
- bl _0817E0A6
- .pool
-_0817D8A4:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D8B6
- bl _0817E0A6
-_0817D8B6:
- ldr r2, =gBattlerPartyIndexes
- mov r8, r2
- ldr r6, =gBattlerAttacker
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- lsls r0, 2
- lsls r1, r4, 1
- adds r5, r1, r4
- lsls r4, r5, 3
- adds r0, r4
- adds r1, r7, r0
- ldrb r0, [r1]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- beq _0817D8EE
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x2
- bl sub_817E684
-_0817D8EE:
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r4
- adds r1, r7, r0
- ldrb r0, [r1]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817D91A
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x3
- bl sub_817E684
-_0817D91A:
- lsls r3, r5, 2
- adds r3, r7, r3
- adds r3, 0x57
- ldrb r0, [r3]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r0
- movs r0, 0x6
- orrs r1, r0
- strb r1, [r3]
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
-_0817D934:
- ldrh r0, [r0]
- lsls r0, 5
- movs r2, 0x1F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3]
- b _0817E0A6
- .pool
-_0817D94C:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x31
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- b _0817DFAA
- .pool
-_0817D994:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- bne _0817D9AE
- b _0817E0A6
-_0817D9AE:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x9
- b _0817E086
-_0817D9C2:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r2, 0x1]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- ldrb r3, [r1, 0x3]
- movs r0, 0x4
- negs r0, r0
- b _0817DB76
- .pool
-_0817DA24:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldrb r0, [r1, 0x1]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817DA48
- b _0817E0A6
-_0817DA48:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x9
- movs r1, 0x2
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DA68:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r1, r9
- lsls r4, r1, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2, 0x1]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x3]
- movs r0, 0xD
- negs r0, r0
- b _0817DB76
- .pool
-_0817DACC:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldrb r0, [r1, 0x1]
- lsls r0, 25
- lsrs r2, r0, 29
- cmp r2, 0
- bne _0817DAF0
- b _0817E0A6
-_0817DAF0:
- ldr r0, =gStringInfo
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0xAD
- bne _0817DAFC
- b _0817E0A6
-_0817DAFC:
- cmp r0, 0xD6
- bne _0817DB02
- b _0817E0A6
-_0817DB02:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x9
-_0817DB10:
- movs r1, 0x3
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DB24:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r3, [r0]
- lsls r3, 2
- mov r2, r9
- lsls r4, r2, 1
- add r4, r9
- lsls r4, 3
- adds r3, r4
- adds r3, r7, r3
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 4
- ldrb r3, [r1, 0x3]
- movs r0, 0x31
- negs r0, r0
-_0817DB76:
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x3]
- b _0817E0A6
- .pool
-_0817DB90:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldr r0, [r1]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- bne _0817DBB4
- b _0817E0A6
-_0817DBB4:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x9
-_0817DBC2:
- movs r1, 0x4
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DBD4:
- lsls r3, 3
- mov r1, r9
- lsls r0, r1, 4
- adds r3, r0
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3, 0x30]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x30]
- adds r3, 0x33
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r2, [r3]
- movs r0, 0x31
- negs r0, r0
-_0817DC0C:
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- b _0817E0A6
- .pool
-_0817DC20:
- mov r2, r8
- lsls r0, r2, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r7, r0
- ldr r0, [r3, 0x30]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817DC4C
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r3, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x9
- movs r1, 0x1
- bl sub_817E684
-_0817DC4C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x18
- b _0817E0A2
-_0817DC62:
- lsls r2, r6, 1
- adds r2, r6
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
- b _0817DF9E
- .pool
-_0817DC98:
- ldr r1, [sp, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r4, r7, r0
- adds r0, r4, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r2, r0, 29
- cmp r2, 0
- bne _0817DCB2
- b _0817E0A6
-_0817DCB2:
- movs r0, 0x1
- eors r1, r0
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x54
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0xA
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0xE
- b _0817DFAC
-_0817DCDC:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x4
- negs r0, r0
- b _0817DF6A
-_0817DCFC:
- mov r0, r8
- lsls r2, r0, 3
- lsls r0, r4, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x34
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- mov r1, r10
- lsls r3, r1, 6
- b _0817DF0E
- .pool
-_0817DD38:
- mov r0, r8
- lsls r2, r0, 3
- lsls r0, r4, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r2, 0x34
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r2]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r10
- lsls r3, r1, 6
- movs r1, 0x3F
- b _0817DF12
- .pool
-_0817DD74:
- movs r0, 0
- bl sub_817EA80
-_0817DD7A:
- mov r2, r8
- lsls r0, r2, 3
- b _0817DD88
-_0817DD80:
- movs r0, 0x1
- bl sub_817EA80
- lsls r0, r5, 3
-_0817DD88:
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r4, r1, 0
- adds r4, 0x34
- ldrb r5, [r4]
- lsls r0, r5, 29
- cmp r0, 0
- beq _0817DDAE
- movs r0, 0x8
- negs r0, r0
- ands r0, r5
- strb r0, [r4]
- adds r2, r1, 0
- adds r2, 0x33
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
-_0817DDAE:
- ldrb r1, [r4]
- lsls r0, r1, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817DDBA
- b _0817E0A6
-_0817DDBA:
- movs r0, 0x39
- negs r0, r0
- ands r0, r1
- movs r1, 0x3F
- ands r0, r1
- strb r0, [r4]
- b _0817E0A6
-_0817DDC8:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- b _0817DFAA
- .pool
-_0817DE10:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r4]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r4]
- adds r2, 0x54
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- b _0817DFAA
- .pool
-_0817DE58:
- ldr r1, =gBattleTextBuff1 + 2
- ldrh r0, [r1]
- cmp r0, 0x73
- bne _0817DE82
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x39
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0817DE82:
- ldr r2, =gBattleTextBuff1 + 2
- ldrh r0, [r2]
- cmp r0, 0x71
- bne _0817DEAA
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrh r2, [r3]
- ldr r0, =0xfffffe3f
- ands r0, r2
- strh r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x31
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0817DEAA:
- ldr r1, =gBattleTextBuff1 + 2
- ldrh r0, [r1]
- cmp r0, 0x36
- beq _0817DEB4
- b _0817E0A6
-_0817DEB4:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r4, r1, 0
- adds r4, 0x51
- ldrb r2, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r2
- strb r0, [r4]
- adds r1, 0x55
- ldrb r2, [r1]
- movs r0, 0x4
- negs r0, r0
- b _0817DF6A
- .pool
-_0817DEDC:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x51
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
-_0817DF0A:
- mov r0, r10
- lsls r3, r0, 6
-_0817DF0E:
- ldrb r1, [r2]
- movs r0, 0x3F
-_0817DF12:
- ands r0, r1
- orrs r0, r3
- strb r0, [r2]
- b _0817E0A6
- .pool
-_0817DF24:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x51
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817DF3C
- b _0817E0A6
-_0817DF3C:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x54
- ldrb r3, [r0]
- lsrs r3, 6
- movs r0, 0xF
- b _0817E086
-_0817DF4E:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r4, r1, 0
- adds r4, 0x51
- ldrb r2, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- strb r0, [r4]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x3F
-_0817DF6A:
- ands r0, r2
- strb r0, [r1]
- b _0817E0A6
-_0817DF70:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x51
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x55
-_0817DF9E:
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x4
- negs r0, r0
-_0817DFAA:
- ands r0, r3
-_0817DFAC:
- orrs r0, r1
- strb r0, [r2]
- b _0817E0A6
- .pool
-_0817DFBC:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x51
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- beq _0817E0A6
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x10
- b _0817E086
-_0817DFE6:
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x39
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldrh r2, [r3]
- ldr r0, =0xfffffe3f
- ands r0, r2
- strh r0, [r3]
- ldrb r2, [r1]
- movs r0, 0x31
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0x11
- movs r1, 0
- mov r3, r10
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817E040:
- lsls r0, r4, 4
- adds r4, r7, r0
- adds r0, r4, 0
- adds r0, 0x35
- ldrb r0, [r0]
- lsrs r0, 5
- cmp r0, 0
- beq _0817E068
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x36
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x15
- movs r1, 0
- bl sub_817E684
-_0817E068:
- adds r0, r4, 0
- adds r0, 0x3D
- ldrb r0, [r0]
- lsrs r0, 5
- cmp r0, 0
- beq _0817E0A6
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x15
-_0817E086:
- movs r1, 0
- bl sub_817E684
- b _0817E0A6
-_0817E08E:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x1C
-_0817E0A2:
- orrs r1, r2
-_0817E0A4:
- strb r1, [r0]
-_0817E0A6:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_817C95C
-
- thumb_func_start sub_817E0B8
-sub_817E0B8: @ 817E0B8
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- movs r3, 0
- ldr r4, =gUnknown_0860A8A4
- ldr r6, =0x0000ffff
- adds r2, r4, 0
- adds r1, r4, 0
-_0817E0C8:
- ldrh r0, [r1]
- cmp r0, r5
- beq _0817E0DA
- adds r2, 0x2
- adds r1, 0x2
- adds r3, 0x1
- ldrh r0, [r2]
- cmp r0, r6
- bne _0817E0C8
-_0817E0DA:
- lsls r0, r3, 1
- adds r0, r4
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817E0F4
- movs r0, 0
- b _0817E0F6
- .pool
-_0817E0F4:
- movs r0, 0x1
-_0817E0F6:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_817E0B8
-
- thumb_func_start sub_817E0FC
-sub_817E0FC: @ 817E0FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- str r2, [sp, 0x4]
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817E122
- b _0817E310
-_0817E122:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r1, r0, r1
- str r1, [sp, 0x8]
- ldr r2, =gBattlerAttacker
- mov r10, r2
- ldrb r0, [r2]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r10
- ldrb r0, [r1]
- adds r1, r7, 0
- bl GetBattlerMoveSlotId
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _0817E184
- mov r2, r9
- lsls r0, r2, 1
- add r0, r9
- lsls r0, 2
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- adds r0, 0x57
- ldrb r1, [r0]
- movs r2, 0x1E
- orrs r1, r2
- strb r1, [r0]
- b _0817E310
- .pool
-_0817E184:
- mov r2, r10
- ldrb r0, [r2]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- lsls r0, 3
- lsls r4, 4
- adds r0, r4
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- mov r2, r10
- ldrb r1, [r2]
- lsls r1, 1
- ldr r2, =gBattlerPartyIndexes
- adds r1, r2
- ldrh r2, [r1]
- adds r2, 0x1
- adds r0, 0x35
- lsls r2, 5
- ldrb r3, [r0]
- movs r1, 0x1F
- ands r1, r3
- orrs r1, r2
- strb r1, [r0]
- mov r1, r10
- ldrb r0, [r1]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- lsls r0, 3
- adds r0, r4
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- adds r0, 0x36
- movs r1, 0x3
- mov r8, r6
- mov r2, r8
- ands r2, r1
- mov r8, r2
- ldrb r2, [r0]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- mov r2, r8
- orrs r1, r2
- strb r1, [r0]
- mov r1, r9
- lsls r0, r1, 1
- add r0, r9
- lsls r0, 2
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- str r0, [sp, 0xC]
- adds r5, r0, 0
- adds r5, 0x53
- lsls r2, r6, 6
- ldrb r1, [r5]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r2
- strb r0, [r5]
- ldr r1, =gBattleMoves
- lsls r4, r7, 1
- adds r0, r4, r7
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0
- adds r1, r6, 0
- movs r3, 0
- bl sub_817E684
- ldr r0, [sp]
- adds r1, r7, 0
- adds r2, r6, 0
- bl sub_817F394
- ldr r0, [sp, 0x4]
- ldrb r1, [r0, 0x12]
- movs r0, 0xF
- ands r0, r1
- str r4, [sp, 0x10]
- cmp r0, 0
- beq _0817E23C
- movs r0, 0x7
- adds r1, r7, 0
- adds r2, r6, 0
- movs r3, 0
- bl sub_817E684
-_0817E23C:
- ldr r0, =0x00000111
- cmp r7, r0
- bne _0817E272
- mov r1, r10
- ldrb r0, [r1]
- lsls r0, 1
- ldr r2, =gBattlerPartyIndexes
- adds r0, r2
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- ldrb r2, [r5]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5]
- ldr r2, [sp, 0xC]
- adds r2, 0x56
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- mov r1, r8
- orrs r0, r1
- strb r0, [r2]
-_0817E272:
- cmp r7, 0x78
- beq _0817E27A
- cmp r7, 0x99
- bne _0817E2D2
-_0817E27A:
- movs r0, 0x1
- mov r2, r9
- eors r0, r2
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, [sp, 0x8]
- adds r2, r0, r2
- mov r1, r10
- ldrb r0, [r1]
- lsls r0, 1
- ldr r1, =gBattlerPartyIndexes
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x58
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r8
- lsls r3, r1, 1
- movs r1, 0x7
- negs r1, r1
- ands r0, r1
- orrs r0, r3
- strb r0, [r4]
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x1A
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4]
-_0817E2D2:
- ldr r1, =gBattleMoves
- ldr r2, [sp, 0x10]
- adds r0, r2, r7
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x2]
- ldrb r5, [r0, 0x1]
- movs r0, 0xD
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xE
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xB
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xC
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl sub_817E684
-_0817E310:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E0FC
-
- thumb_func_start sub_817E32C
-sub_817E32C: @ 817E32C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817E3EE
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r4, r0, r1
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r5, 0x12
- beq _0817E36C
- cmp r5, 0x13
- beq _0817E3AA
- b _0817E3EE
- .pool
-_0817E36C:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0
- ldr r0, [r4, 0x50]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817E3EE
- subs r0, 0x1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x55
- ldrb r3, [r1]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x10
- b _0817E3EA
-_0817E3AA:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 29
- cmp r0, 0
- beq _0817E3EE
- subs r0, 0x1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x55
- ldrb r3, [r1]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0x1
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x12
-_0817E3EA:
- orrs r0, r1
- strb r0, [r2]
-_0817E3EE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_817E32C
-
- thumb_func_start sub_817E3F4
-sub_817E3F4: @ 817E3F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- movs r0, 0
- str r0, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r2, 0
- str r2, [sp, 0x8]
- ldr r3, =0x00007fff
- str r3, [sp, 0xC]
- movs r4, 0
- str r4, [sp, 0x10]
- movs r7, 0
- str r7, [sp, 0x14]
- mov r8, r0
- ldr r0, =gBattleStruct
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xB3
- ldrb r0, [r0]
- cmp r0, 0
- beq _0817E42A
- b _0817E670
-_0817E42A:
- movs r2, 0xD2
- lsls r2, 1
- adds r2, r1
- mov r10, r2
- movs r6, 0
-_0817E434:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r0, r4, r0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0817E454
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
-_0817E454:
- ldr r5, =gEnemyParty
- adds r0, r4, r5
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0817E46A
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_0817E46A:
- adds r6, 0x1
- cmp r6, 0x5
- ble _0817E434
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817E47E
- b _0817E670
-_0817E47E:
- cmp r8, r7
- beq _0817E484
- b _0817E670
-_0817E484:
- movs r6, 0
- lsls r3, r6, 1
- str r3, [sp, 0x18]
- movs r4, 0x64
- mov r8, r4
-_0817E48E:
- mov r1, r8
- muls r1, r6
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r6, 0x1
- mov r9, r0
- cmp r7, 0
- beq _0817E4EE
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817E4EE
- movs r4, 0
- lsls r0, r6, 3
- mov r2, r10
- adds r1, r0, r2
- movs r3, 0x3
-_0817E4C4:
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r4, [r1]
- adds r0, r4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0817E4C4
- ldr r1, [sp, 0x8]
- lsls r0, r1, 16
- lsls r1, r4, 16
- cmp r0, r1
- bge _0817E4EE
- lsls r0, r6, 24
- lsrs r0, 24
- str r0, [sp, 0x10]
- lsrs r1, 16
- str r1, [sp, 0x8]
- str r7, [sp]
-_0817E4EE:
- mov r0, r8
- muls r0, r6
- ldr r2, =gEnemyParty
- adds r4, r0, r2
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r3, [sp, 0x8]
- lsls r3, 16
- str r3, [sp, 0x1C]
- cmp r7, 0
- beq _0817E5A0
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817E5A0
- movs r4, 0
- ldr r0, [sp, 0xC]
- lsls r2, r0, 16
- movs r3, 0x1
- lsls r1, r3, 1
- adds r1, 0x1
- lsls r1, 4
- lsls r0, r6, 3
- adds r0, r1
- mov r3, r10
- adds r1, r0, r3
- movs r3, 0x3
-_0817E534:
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r4, [r1]
- adds r0, r4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0817E534
- asrs r1, r2, 16
- lsls r5, r4, 16
- asrs r0, r5, 16
- cmp r1, r0
- bne _0817E590
- mov r0, r8
- muls r0, r6
- ldr r1, =gEnemyParty
- adds r0, r1
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- ldr r2, [sp, 0x14]
- mov r0, r8
- muls r0, r2
- ldr r3, =gEnemyParty
- adds r0, r3
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- cmp r4, r0
- bls _0817E5A0
- b _0817E594
- .pool
-_0817E590:
- cmp r1, r0
- ble _0817E5A0
-_0817E594:
- lsls r0, r6, 24
- lsrs r0, 24
- str r0, [sp, 0x14]
- lsrs r5, 16
- str r5, [sp, 0xC]
- str r7, [sp, 0x4]
-_0817E5A0:
- mov r6, r9
- cmp r6, 0x5
- bgt _0817E5A8
- b _0817E48E
-_0817E5A8:
- movs r4, 0
- movs r6, 0
- movs r3, 0
- ldr r5, =gPlayerParty
- ldr r7, [sp, 0x10]
- lsls r0, r7, 3
- mov r1, r10
- adds r2, r0, r1
-_0817E5B8:
- lsls r0, r4, 16
- asrs r0, 16
- movs r7, 0
- ldrsh r1, [r2, r7]
- cmp r0, r1
- bge _0817E5C8
- ldrh r4, [r2]
- adds r6, r3, 0
-_0817E5C8:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x3
- ble _0817E5B8
- movs r0, 0x64
- ldr r1, [sp, 0x10]
- muls r0, r1
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0xD
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r2, [sp, 0x1C]
- cmp r2, 0
- beq _0817E670
- cmp r4, 0
- beq _0817E670
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0817E65C
- ldr r3, [sp, 0x10]
- cmp r3, 0x2
- bhi _0817E620
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r0, [r0]
- bl sub_806D82C
- lsls r0, 16
- cmp r0, 0
- beq _0817E630
- b _0817E670
- .pool
-_0817E620:
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r0, [r0]
- bl sub_806D82C
- lsls r0, 16
- cmp r0, 0
- beq _0817E670
-_0817E630:
- movs r3, 0
- ldr r7, [sp, 0x14]
- cmp r7, 0x2
- bls _0817E63A
- movs r3, 0x1
-_0817E63A:
- lsls r0, r3, 24
- lsrs r0, 24
- ldr r1, =gBattleScripting
- adds r1, 0x25
- ldrb r1, [r1]
- bl sub_806EF84
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- bl PutBattleUpdateOnTheAir
- b _0817E670
- .pool
-_0817E65C:
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- adds r1, r4, 0
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- bl PutBattleUpdateOnTheAir
-_0817E670:
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E3F4
-
- thumb_func_start sub_817E684
-sub_817E684: @ 817E684
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r5, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0xD2
- lsls r1, 1
- adds r1, r0
- mov r8, r1
- movs r2, 0x81
- lsls r2, 2
- adds r7, r0, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r3, r0, 24
- mov r0, r10
- cmp r0, 0x1B
- bls _0817E6D4
- b _0817EA6C
-_0817E6D4:
- lsls r0, 2
- ldr r1, =_0817E6F0
- adds r1, r0, r1
- ldr r1, [r1]
- mov r12, r0
- mov pc, r1
- .pool
- .align 2, 0
-_0817E6F0:
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E85C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E8A0
- .4byte _0817E8A0
- .4byte _0817E8CC
- .4byte _0817E8F0
- .4byte _0817E978
- .4byte _0817E9E0
- .4byte _0817EA28
- .4byte _0817E8A0
- .4byte _0817E8A0
- .4byte _0817E880
- .4byte _0817E760
- .4byte _0817E80A
- .4byte _0817E848
- .4byte _0817E8A0
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
-_0817E760:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r6
- lsls r1, 1
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r5, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E79C:
- ldr r1, =gUnknown_0860A834
- add r1, r12
- ldr r7, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r4
- lsls r2, r0, 4
- ldr r4, =0x0000ffff
- ldr r1, [r1]
- ldr r3, =gBattlerAttacker
- ldrh r0, [r1]
- cmp r6, r0
- bne _0817E7E0
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x2]
- ldrh r2, [r0]
- adds r1, r2
- strh r1, [r0]
- b _0817EA6C
- .pool
-_0817E7E0:
- adds r1, 0x4
- ldrh r0, [r1]
- cmp r0, r4
- bne _0817E7EA
- b _0817EA6C
-_0817E7EA:
- cmp r6, r0
- bne _0817E7E0
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x2]
- ldrh r5, [r0]
- adds r1, r5
- strh r1, [r0]
- b _0817EA6C
-_0817E80A:
- movs r0, 0x1
- adds r1, r5, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- mov r0, r9
- lsls r1, r0, 1
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E848:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
-_0817E85C:
- mov r0, r9
- lsls r1, r0, 1
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E880:
- lsls r1, r5, 2
- add r1, r9
- lsls r1, 1
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- b _0817EA64
- .pool
-_0817E8A0:
- lsls r2, r5, 2
- add r2, r9
- lsls r2, 1
- movs r1, 0x1
- eors r1, r4
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 4
- adds r2, r0
- add r2, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r1, [r0]
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- ldrh r1, [r2]
- adds r0, r1
- strh r0, [r2]
- b _0817EA6C
- .pool
-_0817E8CC:
- lsls r1, r5, 2
- add r1, r9
- lsls r1, 1
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E8F0:
- lsls r0, r3, 4
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x34
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- adds r4, r2, 0
- adds r4, 0x3C
- ldrb r0, [r4]
- lsls r0, 29
- lsrs r0, 29
- cmn r1, r0
- bne _0817E90E
- b _0817EA6C
-_0817E90E:
- cmp r6, 0xA
- beq _0817E914
- b _0817EA6C
-_0817E914:
- cmp r1, 0
- beq _0817E940
- subs r1, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x33
- ldrb r0, [r0]
- lsrs r0, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r5, [r1]
- adds r0, r5
- strh r0, [r1]
-_0817E940:
- ldrb r0, [r4]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817E94C
- b _0817EA6C
-_0817E94C:
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x3B
- ldrb r0, [r0]
- lsrs r0, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E978:
- lsls r1, r3, 4
- adds r1, r7, r1
- adds r0, r1, 0
- adds r0, 0x34
- ldrb r4, [r0]
- lsls r0, r4, 26
- lsrs r2, r0, 29
- adds r5, r1, 0
- adds r5, 0x3C
- ldrb r0, [r5]
- lsls r0, 26
- lsrs r0, 29
- cmn r2, r0
- beq _0817EA6C
- cmp r6, 0xD
- bne _0817EA6C
- cmp r2, 0
- beq _0817E9BE
- subs r1, r2, 0x1
- lsls r1, 2
- lsrs r0, r4, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
-_0817E9BE:
- ldrb r2, [r5]
- lsls r0, r2, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- lsrs r0, r2, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- b _0817EA5A
- .pool
-_0817E9E0:
- cmp r6, 0x8
- bhi _0817EA6C
- cmp r5, 0
- beq _0817EA6C
- lsls r0, r3, 1
- adds r3, r0, r3
- lsls r0, r3, 2
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x54
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 30
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817EA28:
- cmp r6, 0x8
- bls _0817EA6C
- cmp r5, 0
- beq _0817EA6C
- lsls r0, r3, 1
- adds r3, r0, r3
- lsls r0, r3, 2
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x50
- ldrh r0, [r0]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x54
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 30
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 4
-_0817EA5A:
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
-_0817EA64:
- ldrh r0, [r0]
- ldrh r5, [r1]
- adds r0, r5
-_0817EA6A:
- strh r0, [r1]
-_0817EA6C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E684
-
- thumb_func_start sub_817EA80
-sub_817EA80: @ 817EA80
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r5, r0, r1
- ldr r3, =gBattlerAttacker
- mov r8, r3
- ldrb r0, [r3]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r6, r5, r0
- adds r0, r6, 0
- adds r0, 0x57
- ldrb r0, [r0]
- lsrs r3, r0, 5
- lsls r0, 27
- lsrs r0, 28
- cmp r0, 0
- bne _0817EAC8
- b _0817EE50
-_0817EAC8:
- subs r0, 0x1
- cmp r0, 0xE
- bls _0817EAD0
- b _0817EEBC
-_0817EAD0:
- lsls r0, 2
- ldr r1, =_0817EAEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817EAEC:
- .4byte _0817EB28
- .4byte _0817EB54
- .4byte _0817EB80
- .4byte _0817EBD4
- .4byte _0817EBFE
- .4byte _0817EC26
- .4byte _0817EC4E
- .4byte _0817EC6C
- .4byte _0817EC9A
- .4byte _0817ECCC
- .4byte _0817ED54
- .4byte _0817ED82
- .4byte _0817EDC2
- .4byte _0817EE1C
- .4byte _0817EEBC
-_0817EB28:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EB40
- b _0817EEBC
-_0817EB40:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 28
- b _0817EE84
-_0817EB54:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EB6C
- b _0817EEBC
-_0817EB6C:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 26
- b _0817EE84
-_0817EB80:
- lsls r0, r3, 2
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 3
- adds r0, r1
- adds r5, r0
- ldrb r0, [r5]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- beq _0817EBB4
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r1, 0x1
- lsls r0, 2
- ldrb r3, [r5, 0x2]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817EBB4:
- ldrb r0, [r5]
- lsls r0, 26
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EBC0
- b _0817EEBC
-_0817EBC0:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r1, 0x1
- lsls r0, 2
- ldrb r3, [r5, 0x2]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817EBD4:
- lsls r0, r3, 2
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 3
- adds r0, r1
- adds r1, r5, r0
- ldrh r0, [r1]
- lsls r0, 23
- lsrs r3, r0, 29
- cmp r3, 0
- bne _0817EBEC
- b _0817EEBC
-_0817EBEC:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r3, 0x1
- lsls r0, 2
- ldrb r3, [r1, 0x2]
- lsrs r3, 6
- adds r3, r0
- b _0817EE88
-_0817EBFE:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- ldrh r0, [r3, 0x30]
- lsls r0, 23
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC12
- b _0817EEBC
-_0817EC12:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsrs r3, 6
- b _0817EE86
-_0817EC26:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC3E
- b _0817EEBC
-_0817EC3E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x33
- b _0817EE80
-_0817EC4E:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC66
- b _0817EEBC
-_0817EC66:
- movs r0, 0x1
- adds r2, r4, 0
- b _0817EE76
-_0817EC6C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- ldr r0, [r3, 0x50]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- bne _0817EC80
- b _0817EEBC
-_0817EC80:
- adds r2, r4, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
-_0817EC9A:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 29
- cmp r0, 0
- bne _0817ECB2
- b _0817EEBC
-_0817ECB2:
- adds r2, r4, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
-_0817ECCC:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x58
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- bge _0817ED14
- adds r0, r3, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsrs r0, 5
- subs r6, r0, 0x1
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- beq _0817ED14
- adds r2, r4, 0
- lsls r1, r6, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817ED14:
- movs r1, 0x1
- eors r1, r4
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r1, r5, r0
- adds r0, r1, 0
- adds r0, 0x58
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- blt _0817ED2E
- b _0817EEBC
-_0817ED2E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- adds r0, r1, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsrs r0, 5
- subs r0, 0x1
- lsls r0, 2
- adds r1, 0x55
- ldrb r3, [r1]
- lsrs r3, 6
- adds r3, r0
- b _0817EE88
- .pool
-_0817ED54:
- movs r0, 0x1
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5, r1
- adds r1, 0x56
- ldrb r0, [r1]
- lsls r0, 25
- lsrs r5, r0, 29
- cmp r5, 0
- bne _0817ED6E
- b _0817EEBC
-_0817ED6E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r5, 0x1
- lsls r0, 2
- ldrh r3, [r1]
- lsls r3, 23
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817ED82:
- lsls r2, r4, 4
- movs r1, 0x1
- adds r0, r4, 0
- eors r0, r1
- lsls r6, r0, 24
- adds r0, r5, 0
- adds r0, 0x30
- adds r4, r2, r0
- movs r5, 0x1
-_0817ED94:
- ldr r0, [r4]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817EDB8
- subs r0, 0x1
- lsls r0, 2
- ldrb r3, [r4, 0x3]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- lsrs r2, r6, 24
- bl sub_817E684
-_0817EDB8:
- adds r4, 0x8
- subs r5, 0x1
- cmp r5, 0
- bge _0817ED94
- b _0817EEBC
-_0817EDC2:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r5, r0
- adds r0, 0x58
- ldrb r3, [r0]
- lsls r0, r3, 31
- cmp r0, 0
- beq _0817EDF0
- adds r2, r4, 0
- lsls r0, r3, 26
- lsrs r0, 29
- subs r0, 0x1
- lsls r0, 2
- lsls r3, 29
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817EDF0:
- movs r0, 0x1
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5, r1
- adds r1, 0x58
- ldrb r1, [r1]
- lsls r0, r1, 31
- cmp r0, 0
- beq _0817EEBC
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r1, 26
- lsrs r0, 29
- subs r0, 0x1
- lsls r0, 2
- lsls r3, r1, 29
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817EE1C:
- cmp r7, 0x1
- bne _0817EEBC
- adds r2, r4, 0
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r5, r0
- adds r0, 0x53
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
- .pool
-_0817EE50:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x57
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 28
- cmp r0, 0x7
- bne _0817EE96
- adds r0, r3, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- beq _0817EEBC
- movs r0, 0x1
-_0817EE76:
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x54
-_0817EE80:
- ldrb r3, [r0]
- lsls r3, 30
-_0817EE84:
- lsrs r3, 30
-_0817EE86:
- adds r3, r1
-_0817EE88:
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
-_0817EE8E:
- movs r1, 0
- bl sub_817E684
- b _0817EEBC
-_0817EE96:
- adds r2, r4, 0
- ldr r1, =gBattlerPartyIndexes
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- adds r0, r6, 0
- adds r0, 0x53
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- movs r1, 0
- bl sub_817E684
-_0817EEBC:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817EA80
-
- thumb_func_start sub_817EECC
-sub_817EECC: @ 817EECC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- ldr r7, =gBattleTypeFlags
- ldr r0, [r7]
- ldr r1, =0x02000003
- ands r0, r1
- cmp r0, 0
- beq _0817EEE6
- b _0817F1FA
-_0817EEE6:
- ldr r4, =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0817EEF8
- b _0817F1FA
-_0817EEF8:
- ldr r5, =gBattleMons
- ldrb r4, [r4]
- movs r1, 0x58
- adds r6, r4, 0
- muls r6, r1
- adds r0, r6, r5
- ldrb r0, [r0, 0x1E]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x5
- bgt _0817EF10
- b _0817F1FA
-_0817EF10:
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r1
- adds r0, r5
- ldrb r0, [r0, 0x1F]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x6
- ble _0817EF24
- b _0817F1FA
-_0817EF24:
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- cmp r1, 0xED
- bne _0817EF2E
- b _0817F1FA
-_0817EF2E:
- ldr r0, =0x00000137
- cmp r1, r0
- bne _0817EF36
- b _0817F1FA
-_0817EF36:
- ldr r0, [r7]
- movs r1, 0xC8
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0817EF44
- b _0817F1FA
-_0817EF44:
- ldr r3, =gBattleMoves
- ldr r2, =gMoveSelectionCursor
- adds r0, r4, r2
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r6
- adds r1, r5, 0
- adds r1, 0xC
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x1]
- adds r6, r2, 0
- cmp r0, 0
- bne _0817EF6A
- b _0817F1FA
-_0817EF6A:
- movs r5, 0
- str r1, [sp, 0x24]
- ldr r1, =gUnknown_0860A4AC
- ldr r4, =0x0000ffff
- adds r3, r1, 0
- adds r2, r1, 0
-_0817EF76:
- ldr r0, [sp, 0x24]
- ldrh r7, [r2]
- cmp r0, r7
- beq _0817EF8A
- adds r3, 0x2
- adds r2, 0x2
- adds r5, 0x1
- ldrh r0, [r3]
- cmp r0, r4
- bne _0817EF76
-_0817EF8A:
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817EF98
- b _0817F1FA
-_0817EF98:
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 2
- mov r1, sp
- adds r1, r0
- adds r1, 0x10
- ldr r0, =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [r1]
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- str r1, [sp, 0x24]
- movs r5, 0
- add r3, sp, 0x20
- mov r10, r3
- mov r8, r0
- add r7, sp, 0x10
- ldr r4, =gBattlerTarget
- mov r9, r4
-_0817EFC2:
- lsls r1, r5, 1
- ldr r6, =gBattlerAttacker
- ldrb r0, [r6]
- movs r2, 0x58
- muls r0, r2
- adds r1, r0
- ldr r0, =gBattleMons
- adds r0, 0xC
- adds r1, r0
- ldrh r0, [r1]
- mov r3, r8
- strh r0, [r3]
- movs r6, 0
- mov r4, r10
- strh r6, [r4]
- ldrh r0, [r3]
- adds r1, r7, 0
- mov r2, r10
- bl sub_817F21C
- lsls r0, 24
- cmp r0, 0
- beq _0817F0B4
- ldr r4, =gSideStatuses
- mov r1, r9
- ldrb r0, [r1]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- movs r4, 0x58
- muls r0, r4
- ldr r6, =gBattleMons
- adds r0, r6
- mov r2, r9
- ldrb r1, [r2]
- muls r1, r4
- adds r1, r6
- mov r4, r8
- ldrh r2, [r4]
- mov r6, r10
- ldrh r4, [r6]
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r6, =gBattlerAttacker
- ldrb r4, [r6]
- str r4, [sp, 0x8]
- mov r6, r9
- ldrb r4, [r6]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- adds r3, r0, 0
- ldr r4, =gBattleMoveDamage
- str r3, [r4]
- ldr r1, =gStatuses3
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0817F06A
- ldr r2, =gBattleMoves
- mov r6, r8
- ldrh r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0817F06A
- lsls r0, r3, 1
- str r0, [r4]
-_0817F06A:
- ldr r0, =gProtectStructs
- ldr r6, =gBattlerAttacker
- ldrb r1, [r6]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 28
- cmp r0, 0
- bge _0817F08C
- ldr r4, =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0817F08C:
- mov r1, r8
- ldrh r0, [r1]
- ldrb r1, [r6]
- mov r3, r9
- ldrb r2, [r3]
- bl TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [r7]
- cmp r0, 0
- bne _0817F0B4
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0817F0B4
- movs r0, 0x1
- str r0, [r7]
-_0817F0B4:
- adds r7, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- ble _0817EFC2
- movs r5, 0
- ldr r3, =gBattlerAttacker
- ldr r6, =gMoveSelectionCursor
- ldr r4, =gBattlerPartyIndexes
- mov r8, r4
- movs r7, 0x64
- mov r9, r7
- mov r10, r6
-_0817F0CC:
- ldrb r0, [r3]
- adds r0, r6
- ldrb r2, [r0]
- cmp r5, r2
- bne _0817F0D8
- b _0817F1D4
-_0817F0D8:
- lsls r0, r5, 2
- mov r1, sp
- adds r1, r0
- adds r1, 0x10
- lsls r0, r2, 2
- add r0, sp
- adds r0, 0x10
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- ble _0817F1D4
- movs r7, 0x1
- cmp r2, 0
- beq _0817F0F6
- movs r7, 0
-_0817F0F6:
- movs r5, 0
- ldr r4, =gBattlerTarget
- ldr r6, =gEnemyParty
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- add r0, r10
- ldrb r3, [r0]
- add r2, sp, 0x10
-_0817F106:
- cmp r5, r3
- beq _0817F11A
- lsls r0, r7, 2
- add r0, sp
- adds r0, 0x10
- ldr r1, [r2]
- ldr r0, [r0]
- cmp r1, r0
- ble _0817F11A
- adds r7, r5, 0
-_0817F11A:
- adds r2, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- ble _0817F106
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, =gBattlerAttacker
- ldrb r3, [r4]
- mov r2, r10
- adds r0, r3, r2
- ldrb r2, [r0]
- movs r0, 0x58
- adds r4, r3, 0
- muls r4, r0
- ldr r5, =gBattleMons + 0xC
- adds r3, r4, r5
- lsls r0, r7, 1
- adds r0, r4
- adds r0, r5
- ldrh r0, [r0]
- str r0, [sp]
- adds r0, r6, 0
- bl sub_80EE35C
- b _0817F1DC
- .pool
-_0817F1D4:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _0817F1DC
- b _0817F0CC
-_0817F1DC:
- ldr r2, =gBattleMoveDamage
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- add r0, sp
- adds r0, 0x10
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, =gCurrentMove
- mov r3, sp
- ldrh r3, [r3, 0x24]
- strh r3, [r0]
-_0817F1FA:
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817EECC
-
- thumb_func_start sub_817F21C
-sub_817F21C: @ 817F21C
- push {r4-r7,lr}
- adds r6, r1, 0
- mov r12, r2
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, =gBattleMoves
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0817F286
- movs r4, 0
- ldr r5, =gUnknown_0860A4AC
- ldr r7, =0x0000ffff
- adds r3, r5, 0
- adds r1, r5, 0
-_0817F240:
- ldrh r0, [r1]
- cmp r2, r0
- beq _0817F252
- adds r3, 0x2
- adds r1, 0x2
- adds r4, 0x1
- ldrh r0, [r3]
- cmp r0, r7
- bne _0817F240
-_0817F252:
- lsls r0, r4, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817F270
- movs r0, 0
- str r0, [r6]
- b _0817F2A0
- .pool
-_0817F270:
- cmp r2, 0x95
- bne _0817F294
- ldr r2, =gBattleMons
- ldr r0, =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r0, [r0]
- asrs r0, 1
-_0817F286:
- str r0, [r6]
- movs r0, 0
- b _0817F2A0
- .pool
-_0817F294:
- cmp r2, 0xDE
- bne _0817F29E
- movs r0, 0xA
- mov r1, r12
- strh r0, [r1]
-_0817F29E:
- movs r0, 0x1
-_0817F2A0:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_817F21C
-
- thumb_func_start sub_817F2A8
-sub_817F2A8: @ 817F2A8
- push {r4,r5,lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817F324
- ldr r0, =gBattleStruct
- ldr r3, [r0]
- ldr r0, =0x0000025b
- adds r4, r3, r0
- ldrb r2, [r4]
- subs r1, 0x21
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldr r0, =0x00000267
- adds r2, r3, r0
- ldrb r0, [r2]
- ands r1, r0
- strb r1, [r2]
- ldrb r5, [r4]
- movs r1, 0x1F
- adds r0, r1, 0
- ands r0, r5
- strb r0, [r4]
- ldrb r0, [r2]
- ands r1, r0
- strb r1, [r2]
- movs r0, 0x97
- lsls r0, 2
- adds r4, r3, r0
- ldrb r2, [r4]
- movs r1, 0x39
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- movs r0, 0x9A
- lsls r0, 2
- adds r3, r0
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
- ldrb r2, [r4]
- movs r1, 0x7
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
- ldrb r2, [r4]
- movs r1, 0x2
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
-_0817F324:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817F2A8
-
- thumb_func_start GetBattlerMoveSlotId
-GetBattlerMoveSlotId: @ 817F33C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- ldr r6, =gEnemyParty
- cmp r0, 0
- bne _0817F356
- ldr r6, =gPlayerParty
-_0817F356:
- movs r4, 0
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r5, 1
- adds r5, r0, r1
- b _0817F36E
- .pool
-_0817F36C:
- adds r4, 0x1
-_0817F36E:
- cmp r4, 0x3
- bgt _0817F388
- ldrh r1, [r5]
- movs r0, 0x64
- muls r0, r1
- adds r0, r6, r0
- adds r1, r4, 0
- adds r1, 0xD
- movs r2, 0
- bl GetMonData
- cmp r0, r7
- bne _0817F36C
-_0817F388:
- lsls r0, r4, 24
- lsrs r0, 24
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetBattlerMoveSlotId
-
- thumb_func_start sub_817F394
-sub_817F394: @ 817F394
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- adds r4, r3, 0
- lsls r1, 16
- lsrs r1, 16
- adds r6, r1, 0
- lsls r2, 24
- lsrs r2, 24
- adds r5, r2, 0
- movs r0, 0x7
- ands r0, r3
- cmp r0, 0
- beq _0817F3B4
- movs r0, 0x3
- b _0817F3CA
-_0817F3B4:
- movs r0, 0x60
- ands r0, r3
- cmp r0, 0
- beq _0817F3C0
- movs r0, 0x4
- b _0817F3CA
-_0817F3C0:
- movs r0, 0x18
- ands r0, r3
- cmp r0, 0
- beq _0817F3D2
- movs r0, 0x5
-_0817F3CA:
- movs r3, 0
- bl sub_817E684
- b _0817F3E6
-_0817F3D2:
- movs r0, 0x80
- ands r4, r0
- cmp r4, 0
- beq _0817F3E6
- movs r0, 0x6
- adds r1, r6, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
-_0817F3E6:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_817F394
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index eb89d4d79..6cee2dc0a 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -3134,7 +3134,7 @@ _081639FC:
bl __umodsi3
cmp r0, 0
bne _08163A78
- bl sub_81DA57C
+ bl UpdateGymLeaderRematch
b _08163A78
.pool
_08163A2C:
diff --git a/asm/blit.s b/asm/blit.s
deleted file mode 100644
index 5df45e77e..000000000
--- a/asm/blit.s
+++ /dev/null
@@ -1,823 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BlitBitmapRect4BitWithoutColorKey
-@ void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height)
-BlitBitmapRect4BitWithoutColorKey: @ 8002BDC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- ldr r4, [sp, 0x2C]
- ldr r5, [sp, 0x30]
- ldr r6, [sp, 0x34]
- ldr r7, [sp, 0x38]
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- lsls r7, 16
- lsrs r7, 16
- str r4, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- str r7, [sp, 0xC]
- movs r4, 0xFF
- str r4, [sp, 0x10]
- bl BlitBitmapRect4Bit
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4BitWithoutColorKey
-
- thumb_func_start BlitBitmapRect4Bit
-@ void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey)
-BlitBitmapRect4Bit: @ 8002C20
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, [sp, 0x4C]
- ldr r1, [sp, 0x50]
- ldr r4, [sp, 0x54]
- ldr r5, [sp, 0x58]
- ldr r6, [sp, 0x5C]
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x8]
- lsls r3, 16
- lsrs r7, r3, 16
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- str r6, [sp, 0x10]
- ldr r0, [sp, 0x4]
- ldrh r3, [r0, 0x4]
- ldr r1, [sp, 0xC]
- subs r0, r3, r1
- adds r2, r4
- mov r8, r2
- cmp r0, r4
- bge _08002C74
- ldr r2, [sp, 0x8]
- adds r0, r2
- mov r8, r0
-_08002C74:
- ldr r4, [sp, 0x4]
- ldrh r0, [r4, 0x6]
- mov r1, r9
- subs r0, r1
- adds r2, r5, r7
- str r2, [sp, 0x14]
- cmp r0, r5
- bge _08002C88
- adds r0, r7
- str r0, [sp, 0x14]
-_08002C88:
- ldr r4, [sp]
- ldrh r1, [r4, 0x4]
- movs r2, 0x7
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x18]
- adds r0, r3, 0
- ands r0, r2
- adds r0, r3, r0
- asrs r0, 3
- str r0, [sp, 0x1C]
- ldr r0, [sp, 0x10]
- cmp r0, 0xFF
- bne _08002D46
- adds r3, r7, 0
- mov r1, r9
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002CB4
- b _08002DEE
-_08002CB4:
- ldr r5, [sp, 0x8]
- ldr r6, [sp, 0xC]
- adds r4, r3, 0x1
- str r4, [sp, 0x24]
- adds r0, r1, 0x1
- str r0, [sp, 0x28]
- cmp r5, r8
- bge _08002D3A
- movs r7, 0x3
- asrs r0, r3, 3
- ldr r2, [sp, 0x18]
- muls r0, r2
- lsls r0, 5
- mov r10, r0
- lsls r0, r3, 29
- lsrs r0, 27
- mov r9, r0
- asrs r0, r1, 3
- ldr r4, [sp, 0x1C]
- muls r0, r4
- lsls r0, 5
- mov r12, r0
- lsls r0, r1, 29
- lsrs r3, r0, 27
-_08002CE4:
- asrs r0, r5, 1
- ands r0, r7
- ldr r2, [sp]
- ldr r1, [r2]
- adds r1, r0
- asrs r0, r5, 3
- lsls r0, 5
- adds r1, r0
- add r1, r10
- mov r4, r9
- adds r2, r1, r4
- asrs r0, r6, 1
- ands r0, r7
- ldr r4, [sp, 0x4]
- ldr r1, [r4]
- adds r1, r0
- asrs r0, r6, 3
- lsls r0, 5
- adds r1, r0
- add r1, r12
- adds r4, r1, r3
- ldrb r2, [r2]
- adds r0, r5, 0
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- asrs r2, r0
- movs r0, 0xF
- ands r2, r0
- adds r0, r6, 0
- ands r0, r1
- lsls r1, r0, 2
- lsls r2, r1
- movs r0, 0xF0
- asrs r0, r1
- ldrb r1, [r4]
- ands r0, r1
- orrs r2, r0
- strb r2, [r4]
- adds r5, 0x1
- adds r6, 0x1
- cmp r5, r8
- blt _08002CE4
-_08002D3A:
- ldr r3, [sp, 0x24]
- ldr r1, [sp, 0x28]
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002CB4
- b _08002DEE
-_08002D46:
- adds r3, r7, 0
- mov r1, r9
- ldr r4, [sp, 0x14]
- cmp r3, r4
- bge _08002DEE
-_08002D50:
- ldr r5, [sp, 0x8]
- ldr r6, [sp, 0xC]
- adds r0, r3, 0x1
- str r0, [sp, 0x24]
- adds r2, r1, 0x1
- str r2, [sp, 0x28]
- cmp r5, r8
- bge _08002DE4
- movs r4, 0x3
- mov r9, r4
- asrs r0, r3, 3
- ldr r2, [sp, 0x18]
- muls r0, r2
- lsls r0, 5
- str r0, [sp, 0x20]
- lsls r0, r3, 29
- lsrs r0, 27
- mov r10, r0
- movs r3, 0x1
- asrs r0, r1, 3
- ldr r4, [sp, 0x1C]
- muls r0, r4
- lsls r0, 5
- mov r12, r0
- lsls r0, r1, 29
- lsrs r7, r0, 27
-_08002D84:
- asrs r0, r5, 1
- mov r1, r9
- ands r0, r1
- ldr r2, [sp]
- ldr r1, [r2]
- adds r1, r0
- asrs r0, r5, 3
- lsls r0, 5
- adds r1, r0
- ldr r4, [sp, 0x20]
- adds r1, r4
- mov r0, r10
- adds r2, r1, r0
- asrs r0, r6, 1
- mov r1, r9
- ands r0, r1
- ldr r4, [sp, 0x4]
- ldr r1, [r4]
- adds r1, r0
- asrs r0, r6, 3
- lsls r0, 5
- adds r1, r0
- add r1, r12
- adds r4, r1, r7
- ldrb r2, [r2]
- adds r0, r5, 0
- ands r0, r3
- lsls r0, 2
- asrs r2, r0
- movs r0, 0xF
- ands r2, r0
- ldr r0, [sp, 0x10]
- cmp r2, r0
- beq _08002DDC
- adds r0, r6, 0
- ands r0, r3
- lsls r1, r0, 2
- lsls r2, r1
- movs r0, 0xF0
- asrs r0, r1
- ldrb r1, [r4]
- ands r0, r1
- orrs r2, r0
- strb r2, [r4]
-_08002DDC:
- adds r5, 0x1
- adds r6, 0x1
- cmp r5, r8
- blt _08002D84
-_08002DE4:
- ldr r3, [sp, 0x24]
- ldr r1, [sp, 0x28]
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002D50
-_08002DEE:
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4Bit
-
- thumb_func_start FillBitmapRect4Bit
-@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-FillBitmapRect4Bit: @ 8002E00
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- ldr r0, [sp, 0x28]
- ldr r4, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- lsls r2, 16
- lsrs r2, 16
- adds r6, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r5, r4, 24
- adds r4, r1, r3
- mov r3, r9
- ldrh r1, [r3, 0x4]
- cmp r4, r1
- ble _08002E36
- adds r4, r1, 0
-_08002E36:
- adds r2, r0
- mov r12, r2
- mov r2, r9
- ldrh r0, [r2, 0x6]
- cmp r12, r0
- ble _08002E44
- mov r12, r0
-_08002E44:
- movs r0, 0x7
- ands r0, r1
- adds r0, r1, r0
- asrs r0, 3
- str r0, [sp, 0x4]
- lsls r0, r5, 28
- lsrs r0, 24
- mov r8, r0
- movs r3, 0xF
- mov r10, r3
- mov r0, r10
- ands r0, r5
- mov r10, r0
- adds r1, r6, 0
- cmp r1, r12
- bge _08002EB6
-_08002E64:
- ldr r3, [sp]
- adds r7, r1, 0x1
- cmp r3, r4
- bge _08002EB0
- asrs r0, r1, 3
- ldr r2, [sp, 0x4]
- muls r0, r2
- lsls r6, r0, 5
- lsls r0, r1, 29
- lsrs r5, r0, 27
-_08002E78:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- mov r0, r9
- ldr r1, [r0]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- adds r1, r6
- adds r2, r1, r5
- lsls r0, r3, 31
- cmp r0, 0
- beq _08002E9E
- ldrb r1, [r2]
- movs r0, 0xF
- ands r0, r1
- mov r1, r8
- b _08002EA6
-_08002E9E:
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- mov r1, r10
-_08002EA6:
- orrs r0, r1
- strb r0, [r2]
- adds r3, 0x1
- cmp r3, r4
- blt _08002E78
-_08002EB0:
- adds r1, r7, 0
- cmp r1, r12
- blt _08002E64
-_08002EB6:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FillBitmapRect4Bit
-
- thumb_func_start BlitBitmapRect4BitTo8Bit
-@ void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
-BlitBitmapRect4BitTo8Bit: @ 8002EC8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x3C
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, [sp, 0x5C]
- ldr r1, [sp, 0x60]
- ldr r5, [sp, 0x64]
- ldr r4, [sp, 0x68]
- ldr r6, [sp, 0x6C]
- ldr r7, [sp, 0x70]
- mov r8, r7
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x8]
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r6, 24
- lsrs r6, 24
- str r6, [sp, 0x10]
- mov r0, r8
- lsls r0, 28
- lsrs r0, 24
- str r0, [sp, 0x14]
- lsls r0, r6, 28
- lsrs r0, 24
- str r0, [sp, 0x28]
- ldr r1, [sp, 0x4]
- ldrh r0, [r1, 0x4]
- ldr r2, [sp, 0xC]
- subs r0, r2
- ldr r1, [sp, 0x8]
- adds r1, r5, r1
- str r1, [sp, 0x18]
- cmp r0, r5
- bge _08002F2E
- ldr r2, [sp, 0x8]
- adds r0, r2
- str r0, [sp, 0x18]
-_08002F2E:
- ldr r5, [sp, 0x4]
- ldrh r1, [r5, 0x6]
- subs r0, r1, r7
- cmp r0, r4
- bge _08002F40
- adds r0, r3, r1
- subs r0, r7
- str r0, [sp, 0x1C]
- b _08002F44
-_08002F40:
- adds r4, r3, r4
- str r4, [sp, 0x1C]
-_08002F44:
- ldr r0, [sp]
- ldrh r1, [r0, 0x4]
- movs r2, 0x7
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x20]
- ldr r5, [sp, 0x4]
- ldrh r1, [r5, 0x4]
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x24]
- ldr r0, [sp, 0x10]
- cmp r0, 0xFF
- bne _08003024
- adds r2, r3, 0
- adds r5, r7, 0
- ldr r1, [sp, 0x1C]
- cmp r2, r1
- blt _08002F74
- b _08003106
-_08002F74:
- ldr r3, [sp, 0x8]
- lsrs r3, 1
- str r3, [sp, 0x2C]
- movs r0, 0x3
- ands r3, r0
- str r3, [sp, 0x2C]
- ldr r7, [sp, 0x8]
- lsrs r0, r7, 3
- lsls r0, 5
- str r0, [sp, 0x30]
-_08002F88:
- ldr r0, [sp]
- ldr r1, [r0]
- ldr r3, [sp, 0x2C]
- adds r1, r3
- ldr r7, [sp, 0x30]
- adds r1, r7
- asrs r0, r2, 3
- ldr r3, [sp, 0x20]
- muls r0, r3
- lsls r0, 5
- mov r8, r0
- add r1, r8
- lsls r0, r2, 29
- lsrs r7, r0, 27
- adds r6, r1, r7
- ldr r3, [sp, 0x8]
- ldr r4, [sp, 0xC]
- adds r2, 0x1
- mov r10, r2
- adds r0, r5, 0x1
- str r0, [sp, 0x38]
- ldr r1, [sp, 0x18]
- cmp r3, r1
- bge _08003018
- asrs r0, r5, 3
- ldr r2, [sp, 0x24]
- muls r0, r2
- lsls r0, 6
- mov r12, r0
- lsls r0, r5, 29
- lsrs r0, 26
- mov r9, r0
-_08002FC8:
- movs r0, 0x7
- ands r0, r4
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r12
- mov r0, r9
- adds r5, r1, r0
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08002FEC
- ldrb r0, [r6]
- lsrs r0, 4
- b _08003008
-_08002FEC:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- ldr r0, [sp]
- ldr r1, [r0]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- add r1, r8
- adds r6, r1, r7
- ldrb r1, [r6]
- movs r0, 0xF
- ands r0, r1
-_08003008:
- ldr r1, [sp, 0x14]
- adds r0, r1, r0
- strb r0, [r5]
- adds r3, 0x1
- adds r4, 0x1
- ldr r2, [sp, 0x18]
- cmp r3, r2
- blt _08002FC8
-_08003018:
- mov r2, r10
- ldr r5, [sp, 0x38]
- ldr r3, [sp, 0x1C]
- cmp r2, r3
- blt _08002F88
- b _08003106
-_08003024:
- adds r2, r3, 0
- adds r5, r7, 0
- ldr r7, [sp, 0x1C]
- cmp r2, r7
- bge _08003106
- ldr r0, [sp, 0x8]
- lsrs r0, 1
- str r0, [sp, 0x34]
- movs r0, 0x3
- ldr r1, [sp, 0x34]
- ands r1, r0
- str r1, [sp, 0x34]
-_0800303C:
- ldr r3, [sp]
- ldr r1, [r3]
- ldr r7, [sp, 0x34]
- adds r1, r7
- ldr r3, [sp, 0x8]
- lsrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- asrs r0, r2, 3
- ldr r7, [sp, 0x20]
- muls r0, r7
- lsls r0, 5
- mov r8, r0
- add r1, r8
- lsls r0, r2, 29
- lsrs r7, r0, 27
- adds r6, r1, r7
- ldr r4, [sp, 0xC]
- adds r2, 0x1
- mov r10, r2
- adds r0, r5, 0x1
- str r0, [sp, 0x38]
- ldr r1, [sp, 0x18]
- cmp r3, r1
- bge _080030FC
- asrs r0, r5, 3
- ldr r2, [sp, 0x24]
- muls r0, r2
- lsls r0, 6
- mov r9, r0
- lsls r0, r5, 29
- lsrs r0, 26
- mov r12, r0
-_0800307E:
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _080030B2
- ldrb r2, [r6]
- movs r0, 0xF0
- ands r0, r2
- ldr r5, [sp, 0x28]
- cmp r0, r5
- beq _080030F2
- adds r0, r4, 0
- movs r1, 0x7
- ands r0, r1
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r9
- mov r0, r12
- adds r5, r1, r0
- lsrs r0, r2, 4
- ldr r1, [sp, 0x14]
- adds r0, r1, r0
- b _080030F0
-_080030B2:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- ldr r5, [sp]
- ldr r1, [r5]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- add r1, r8
- adds r6, r1, r7
- ldrb r0, [r6]
- movs r2, 0xF
- ands r2, r0
- ldr r0, [sp, 0x10]
- cmp r2, r0
- beq _080030F2
- adds r0, r4, 0
- movs r1, 0x7
- ands r0, r1
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r9
- mov r0, r12
- adds r5, r1, r0
- ldr r1, [sp, 0x14]
- adds r0, r1, r2
-_080030F0:
- strb r0, [r5]
-_080030F2:
- adds r3, 0x1
- adds r4, 0x1
- ldr r2, [sp, 0x18]
- cmp r3, r2
- blt _0800307E
-_080030FC:
- mov r2, r10
- ldr r5, [sp, 0x38]
- ldr r3, [sp, 0x1C]
- cmp r2, r3
- blt _0800303C
-_08003106:
- add sp, 0x3C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4BitTo8Bit
-
- thumb_func_start FillBitmapRect8Bit
-@ void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-FillBitmapRect8Bit: @ 8003118
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r8, r0
- ldr r0, [sp, 0x28]
- ldr r4, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 16
- lsrs r2, 16
- adds r6, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r4, 24
- mov r9, r4
- adds r5, r1, r3
- mov r3, r8
- ldrh r1, [r3, 0x4]
- cmp r5, r1
- ble _08003150
- adds r5, r1, 0
-_08003150:
- adds r7, r2, r0
- mov r2, r8
- ldrh r0, [r2, 0x6]
- cmp r7, r0
- ble _0800315C
- adds r7, r0, 0
-_0800315C:
- movs r0, 0x7
- ands r0, r1
- adds r0, r1, r0
- asrs r0, 3
- str r0, [sp]
- adds r1, r6, 0
- cmp r1, r7
- bge _080031AC
-_0800316C:
- mov r3, r10
- adds r6, r1, 0x1
- str r6, [sp, 0x4]
- cmp r3, r5
- bge _080031A6
- movs r0, 0x7
- mov r12, r0
- asrs r0, r1, 3
- ldr r2, [sp]
- muls r0, r2
- lsls r4, r0, 6
- lsls r0, r1, 29
- lsrs r2, r0, 26
-_08003186:
- adds r0, r3, 0
- mov r6, r12
- ands r0, r6
- mov r6, r8
- ldr r1, [r6]
- adds r1, r0
- asrs r0, r3, 3
- lsls r0, 6
- adds r1, r0
- adds r1, r4
- adds r1, r2
- mov r0, r9
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, r5
- blt _08003186
-_080031A6:
- ldr r1, [sp, 0x4]
- cmp r1, r7
- blt _0800316C
-_080031AC:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FillBitmapRect8Bit
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_specials.s b/asm/field_specials.s
index 29c6dc800..6200123ac 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -3388,7 +3388,7 @@ _0813980C:
_0813981C:
ldrh r5, [r2]
adds r0, r5, 0
- bl sub_80EF370
+ bl CountDigits
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -3408,7 +3408,7 @@ _0813983C:
adds r4, 0x4
ldrh r5, [r2]
adds r0, r5, 0
- bl sub_80EF370
+ bl CountDigits
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
diff --git a/asm/trainer_rematch.s b/asm/trainer_rematch.s
deleted file mode 100644
index 1c874f28f..000000000
--- a/asm/trainer_rematch.s
+++ /dev/null
@@ -1,206 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81DA57C
-sub_81DA57C: @ 81DA57C
- push {lr}
- ldr r0, =0x00000864
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081DA5CA
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1E
- bhi _081DA5CA
- movs r0, 0x5B
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081DA5C0
- ldr r0, =gUnknown_0862AD34
- movs r1, 0x8
- movs r2, 0x5
- bl sub_81DA5D4
- b _081DA5CA
- .pool
-_081DA5C0:
- ldr r0, =gUnknown_0862AD44
- movs r1, 0x7
- movs r2, 0x1
- bl sub_81DA5D4
-_081DA5CA:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81DA57C
-
- thumb_func_start sub_81DA5D4
-sub_81DA5D4: @ 81DA5D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- adds r7, r1, 0
- mov r10, r2
- movs r6, 0
- movs r0, 0x5
- mov r8, r0
- movs r5, 0
- cmp r5, r7
- bcs _081DA61C
- mov r4, r9
-_081DA5F4:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r4]
- ldr r2, =0x000009ca
- adds r0, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081DA614
- adds r0, r1, 0
- bl sub_81DA6CC
- cmp r8, r0
- ble _081DA612
- mov r8, r0
-_081DA612:
- adds r6, 0x1
-_081DA614:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r7
- bcc _081DA5F4
-_081DA61C:
- cmp r6, 0
- beq _081DA6BA
- cmp r8, r10
- bhi _081DA6BA
- movs r6, 0
- movs r5, 0
- cmp r5, r7
- bcs _081DA654
- mov r4, r9
-_081DA62E:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r4]
- ldr r2, =0x000009ca
- adds r0, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081DA64C
- adds r0, r1, 0
- bl sub_81DA6CC
- cmp r0, r8
- bne _081DA64C
- adds r6, 0x1
-_081DA64C:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r7
- bcc _081DA62E
-_081DA654:
- cmp r6, 0
- beq _081DA6BA
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __modsi3
- adds r6, r0, 0
- movs r5, 0
- cmp r5, r7
- bcs _081DA6BA
- ldr r2, =gSaveBlock1Ptr
- ldr r3, =0x000009ca
- mov r4, r9
-_081DA674:
- ldr r0, [r2]
- ldrh r1, [r4]
- adds r0, r3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081DA6B2
- adds r0, r1, 0
- str r2, [sp]
- str r3, [sp, 0x4]
- bl sub_81DA6CC
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- cmp r0, r8
- bne _081DA6B2
- cmp r6, 0
- bne _081DA6B0
- ldr r0, [r2]
- adds r0, r3
- ldrh r4, [r4]
- adds r0, r4
- mov r1, r8
- strb r1, [r0]
- b _081DA6BA
- .pool
-_081DA6B0:
- subs r6, 0x1
-_081DA6B2:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r7
- bcc _081DA674
-_081DA6BA:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81DA5D4
-
- thumb_func_start sub_81DA6CC
-sub_81DA6CC: @ 81DA6CC
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- ldr r6, =gRematchTable
-_081DA6D4:
- lsls r0, r4, 1
- lsls r1, r5, 4
- adds r0, r1
- adds r0, r6
- ldrh r0, [r0]
- bl HasTrainerBeenFought
- lsls r0, 24
- cmp r0, 0
- bne _081DA6F0
- adds r0, r4, 0
- b _081DA6F8
- .pool
-_081DA6F0:
- adds r4, 0x1
- cmp r4, 0x4
- ble _081DA6D4
- movs r0, 0x5
-_081DA6F8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_81DA6CC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/constants/battle_move_constants.inc b/constants/battle_move_constants.inc
deleted file mode 100644
index a05da3db3..000000000
--- a/constants/battle_move_constants.inc
+++ /dev/null
@@ -1,15 +0,0 @@
- .set TARGET_SELECTED_POKEMON, 0
-
- .set F_TARGET_SPECIAL, 1 << 0
- .set F_TARGET_RANDOM, 1 << 2
- .set F_TARGET_BOTH_ENEMIES, 1 << 3
- .set F_TARGET_USER, 1 << 4
- .set F_TARGET_ALL_EXCEPT_USER, 1 << 5
- .set F_TARGET_ENEMY_SIDE, 1 << 6
-
- .set F_MAKES_CONTACT, 1 << 0
- .set F_AFFECTED_BY_PROTECT, 1 << 1
- .set F_AFFECTED_BY_MAGIC_COAT, 1 << 2
- .set F_AFFECTED_BY_SNATCH, 1 << 3
- .set F_MIRROR_MOVE_COMPATIBLE, 1 << 4
- .set F_AFFECTED_BY_KINGS_ROCK, 1 << 5
diff --git a/constants/constants.inc b/constants/constants.inc
index 10d582eb1..28f2b2658 100644
--- a/constants/constants.inc
+++ b/constants/constants.inc
@@ -3,7 +3,6 @@
.include "constants/contest_constants.inc"
.include "constants/pokemon_data_constants.inc"
.include "constants/item_data_constants.inc"
- .include "constants/battle_move_constants.inc"
.include "constants/battle_frontier_constants.inc"
.include "constants/map_constants.inc"
.include "constants/berry_constants.inc"
diff --git a/data/battle_link_817C95C.s b/data/battle_link_817C95C.s
deleted file mode 100644
index 24f70c79c..000000000
--- a/data/battle_link_817C95C.s
+++ /dev/null
@@ -1,174 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 1
-gUnknown_0860A4AC:: @ 860A4AC
- .2byte 0x0044, 0x005a, 0x0075, 0x00f3, 0x0020, 0x00af, 0x00b3, 0x00ed, 0x0149, 0x0108, 0x011c, 0x0143, 0x008a, 0x0137, 0x00ad, 0x00dc
- .2byte 0x000c, 0x00da, 0x00d8, 0x011b, 0x00d9, 0x0117, 0xffff, 0x00de, 0x0095, 0xffff
-
- .align 1
-gUnknown_0860A4E0:: @ 860A4E0
- .2byte 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, 0x0005, 0x0004, 0x0005, 0x0001, 0x0003, 0x0001
- .2byte 0x0003, 0x0005, 0x0001, 0x0007, 0x0001, 0x0007, 0x0007, 0x0001, 0x0005, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001
- .2byte 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0007, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0004
- .2byte 0x0005, 0x0002, 0x0004, 0x0001, 0x0004, 0x0001, 0x0007, 0x0002, 0x0001, 0x0005, 0x0007, 0x0003, 0x0003, 0x0004, 0x0003, 0x0003
- .2byte 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0005, 0x0001, 0x0001, 0x0004, 0x0005, 0x0003, 0x0001, 0x0002, 0x0001, 0x0005
- .2byte 0x0004, 0x0003, 0x0006, 0x0004, 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001, 0x0001, 0x0007
- .2byte 0x0002, 0x0002, 0x0001, 0x0001, 0x0004, 0x0004, 0x0004, 0x0001, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0007, 0x0007
- .2byte 0x0006, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0001, 0x0001, 0x0004, 0x0004
- .2byte 0x0003, 0x0003, 0x0003, 0x0001, 0x0004, 0x0007, 0x0007, 0x0005, 0x0007, 0x0001, 0x0007, 0x0001, 0x0005, 0x0000, 0x0004, 0x0004
- .2byte 0x0004, 0x0004, 0x0004, 0x0002, 0x0002, 0x0006, 0x0003, 0x0006, 0x0004, 0x0004, 0x0002, 0x0005, 0x0002, 0x0001, 0x0001, 0x0006
- .2byte 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003
-
- .align 1
-gUnknown_0860A68C:: @ 860A68C
- .2byte 0x0004, 0xfffd, 0xfffa
-
- .align 1
-gUnknown_0860A692:: @ 860A692
- .2byte 0x0004, 0x0004, 0x0006, 0x0006, 0x0007, 0x0006, 0x0002
-
- .align 1
-gUnknown_0860A6A0:: @ 860A6A0
- .2byte 0x0091, 0x0003, 0x00fa, 0x0003, 0x00be, 0x0003, 0x0080, 0x0003, 0x006e, 0x0003, 0x0098, 0x0003, 0x0143, 0x0003, 0x0123, 0x0003
- .2byte 0x007f, 0x0003, 0x014a, 0x0003, 0x0039, 0x0003, 0x0134, 0x0003, 0x0038, 0x0003, 0x003d, 0x0003, 0x015a, 0x0000, 0x0037, 0x0003
- .2byte 0x0160, 0x0003, 0x0137, 0x0003, 0x0057, 0x0003, 0x004c, 0xfffc, 0x013b, 0xfffc, 0x00ac, 0xfffc, 0x0035, 0xfffc, 0x00dd, 0xfffc
- .2byte 0x007e, 0xfffc, 0x0101, 0xfffc, 0x0034, 0xfffc, 0x0133, 0xfffc, 0x012b, 0xfffc, 0x011c, 0xfffc, 0x0053, 0xfffc, 0x0007, 0xfffc
- .2byte 0x004c, 0xfffc, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A728:: @ 860A728
- .2byte 0x013b, 0x0003, 0x00ac, 0x0003, 0x0035, 0x0003, 0x00dd, 0x0003, 0x007e, 0x0003, 0x0101, 0x0003, 0x0034, 0x0003, 0x0133, 0x0003
- .2byte 0x012b, 0x0003, 0x011c, 0x0003, 0x0053, 0x0003, 0x0007, 0x0003, 0x004c, 0x0005, 0x00eb, 0x0003, 0x00ea, 0x0003, 0x00ec, 0x0003
- .2byte 0x0137, 0x0003, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A770:: @ 860A770
- .2byte 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A77C:: @ 860A77C
- .2byte 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A788:: @ 860A788
- .2byte 0x0055, 0x0003, 0x0009, 0x0003, 0x00d1, 0x0003, 0x0054, 0x0003, 0x00c0, 0x0003, 0x015f, 0x0003, 0x0056, 0x0000, 0x0057, 0x0003
- .2byte 0x0158, 0x0003, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A7B0:: @ 860A7B0
- .2byte 0x0005, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003
-
- .align 1
-gUnknown_0860A7BE:: @ 860A7BE
- .2byte 0x0005, 0x0005, 0x0005, 0x0005, 0x0005
-
- .align 1
-gUnknown_0860A7C8:: @ 860A7C8
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7CA:: @ 860A7CA
- .2byte 0x0005
-
- .align 1
-gUnknown_0860A7CC:: @ 860A7CC
- .2byte 0x0005
-
- .align 1
-gUnknown_0860A7CE:: @ 860A7CE
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D0:: @ 860A7D0
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D2:: @ 860A7D2
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7D4:: @ 860A7D4
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D6:: @ 860A7D6
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7D8:: @ 860A7D8
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7DA:: @ 860A7DA
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7DC:: @ 860A7DC
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7DE:: @ 860A7DE
- .2byte 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
-
- .align 1
-gUnknown_0860A7EC:: @ 860A7EC
- .2byte 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
-
- .align 1
-gUnknown_0860A7FA:: @ 860A7FA
- .2byte 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
-
- .align 1
-gUnknown_0860A808:: @ 860A808
- .2byte 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
-
- .align 1
-gUnknown_0860A816:: @ 860A816
- .2byte 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
-
- .align 1
-gUnknown_0860A824:: @ 860A824
- .2byte 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe
-
- .align 2
-gUnknown_0860A834:: @ 860A834
- .4byte gUnknown_0860A4E0
- .4byte gUnknown_0860A68C
- .4byte gUnknown_0860A692
- .4byte gUnknown_0860A6A0
- .4byte gUnknown_0860A728
- .4byte gUnknown_0860A770
- .4byte gUnknown_0860A77C
- .4byte gUnknown_0860A788
- .4byte gUnknown_0860A7B0
- .4byte gUnknown_0860A7BE
- .4byte gUnknown_0860A7C8
- .4byte gUnknown_0860A7CA
- .4byte gUnknown_0860A7CC
- .4byte gUnknown_0860A7CE
- .4byte gUnknown_0860A7D0
- .4byte gUnknown_0860A7D2
- .4byte gUnknown_0860A7D4
- .4byte gUnknown_0860A7D6
- .4byte gUnknown_0860A7D8
- .4byte gUnknown_0860A7DA
- .4byte gUnknown_0860A7DA
- .4byte gUnknown_0860A7DC
- .4byte gUnknown_0860A7DE
- .4byte gUnknown_0860A7EC
- .4byte gUnknown_0860A7FA
- .4byte gUnknown_0860A808
- .4byte gUnknown_0860A816
- .4byte gUnknown_0860A824
-
- .align 1
-gUnknown_0860A8A4:: @ 860A8A4
- .2byte 0x0097, 0x00b2, 0x00bc, 0x008c, 0x00b4, 0x00b5, 0x0093, 0x006a, 0x0091, 0x005e, 0x0030, 0x002a, 0x0095, 0x001c, 0x001d, 0x0064
- .2byte 0x0060, 0xffff
-
diff --git a/data/battle_moves.inc b/data/battle_moves.inc
deleted file mode 100644
index c5c090546..000000000
--- a/data/battle_moves.inc
+++ /dev/null
@@ -1,3906 +0,0 @@
- .align 2
-gBattleMoves:: @ 831C898
-@ -
- .byte 0x00 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 0 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Pound
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Karate Chop
- .byte 0x2b @ effect
- .byte 50 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double Slap
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Comet Punch
- .byte 0x1d @ effect
- .byte 18 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mega Punch
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Pay Day
- .byte 0x22 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Punch
- .byte 0x04 @ effect
- .byte 75 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Ice Punch
- .byte 0x05 @ effect
- .byte 75 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thunder Punch
- .byte 0x06 @ effect
- .byte 75 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Scratch
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vice Grip
- .byte 0x00 @ effect
- .byte 55 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Guillotine
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Razor Wind
- .byte 0x27 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Swords Dance
- .byte 0x32 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Cut
- .byte 0x00 @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Gust
- .byte 0x95 @ effect
- .byte 40 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Wing Attack
- .byte 0x00 @ effect
- .byte 60 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Whirlwind
- .byte 0x1c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -6 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fly
- .byte 0x9b @ effect
- .byte 70 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Bind
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slam
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vine Whip
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Stomp
- .byte 0x96 @ effect
- .byte 65 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double Kick
- .byte 0x2c @ effect
- .byte 30 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mega Kick
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Jump Kick
- .byte 0x2d @ effect
- .byte 70 @ power
- .byte TYPE_FIGHTING
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rolling Kick
- .byte 0x1f @ effect
- .byte 60 @ power
- .byte TYPE_FIGHTING
- .byte 85 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sand-Attack
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Headbutt
- .byte 0x1f @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Horn Attack
- .byte 0x00 @ effect
- .byte 65 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Fury Attack
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Horn Drill
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Tackle
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Body Slam
- .byte 0x06 @ effect
- .byte 85 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Wrap
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Take Down
- .byte 0x30 @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thrash
- .byte 0x1b @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double-Edge
- .byte 0xc6 @ effect
- .byte 120 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Tail Whip
- .byte 0x13 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Sting
- .byte 0x02 @ effect
- .byte 15 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Twineedle
- .byte 0x4d @ effect
- .byte 25 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Pin Missile
- .byte 0x1d @ effect
- .byte 14 @ power
- .byte TYPE_BUG
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leer
- .byte 0x13 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bite
- .byte 0x1f @ effect
- .byte 60 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Growl
- .byte 0x12 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Roar
- .byte 0x1c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -6 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sing
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Supersonic
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sonic Boom
- .byte 0x82 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Disable
- .byte 0x56 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Acid
- .byte 0x45 @ effect
- .byte 40 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Ember
- .byte 0x04 @ effect
- .byte 40 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flamethrower
- .byte 0x04 @ effect
- .byte 95 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mist
- .byte 0x2e @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Water Gun
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hydro Pump
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_WATER
- .byte 80 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Surf
- .byte 0x00 @ effect
- .byte 95 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Ice Beam
- .byte 0x05 @ effect
- .byte 95 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Blizzard
- .byte 0x05 @ effect
- .byte 120 @ power
- .byte TYPE_ICE
- .byte 70 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psybeam
- .byte 0x4c @ effect
- .byte 65 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bubble Beam
- .byte 0x46 @ effect
- .byte 65 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aurora Beam
- .byte 0x44 @ effect
- .byte 65 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hyper Beam
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Peck
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Drill Peck
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Submission
- .byte 0x30 @ effect
- .byte 80 @ power
- .byte TYPE_FIGHTING
- .byte 80 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Low Kick
- .byte 0xc4 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Counter
- .byte 0x59 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte -5 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_MAKES_CONTACT @ misc. flags
-
-@ Seismic Toss
- .byte 0x57 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Strength
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Absorb
- .byte 0x03 @ effect
- .byte 20 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mega Drain
- .byte 0x03 @ effect
- .byte 40 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leech Seed
- .byte 0x54 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Growth
- .byte 0x0d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Razor Leaf
- .byte 0x2b @ effect
- .byte 55 @ power
- .byte TYPE_GRASS
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Solar Beam
- .byte 0x97 @ effect
- .byte 120 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Powder
- .byte 0x42 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 75 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Stun Spore
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 75 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sleep Powder
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Petal Dance
- .byte 0x1b @ effect
- .byte 70 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ String Shot
- .byte 0x14 @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 95 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dragon Rage
- .byte 0x29 @ effect
- .byte 1 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Spin
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_FIRE
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder Shock
- .byte 0x06 @ effect
- .byte 40 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunderbolt
- .byte 0x06 @ effect
- .byte 95 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder Wave
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder
- .byte 0x98 @ effect
- .byte 120 @ power
- .byte TYPE_ELECTRIC
- .byte 70 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rock Throw
- .byte 0x00 @ effect
- .byte 50 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Earthquake
- .byte 0x93 @ effect
- .byte 100 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fissure
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_GROUND
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dig
- .byte 0x9b @ effect
- .byte 60 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Toxic
- .byte 0x21 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Confusion
- .byte 0x4c @ effect
- .byte 50 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psychic
- .byte 0x48 @ effect
- .byte 90 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hypnosis
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 60 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Meditate
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Agility
- .byte 0x34 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Quick Attack
- .byte 0x67 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rage
- .byte 0x51 @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Teleport
- .byte 0x99 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Night Shade
- .byte 0x57 @ effect
- .byte 1 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mimic
- .byte 0x52 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Screech
- .byte 0x3b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Double Team
- .byte 0x10 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Recover
- .byte 0x20 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Harden
- .byte 0x0b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Minimize
- .byte 0x6c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Smokescreen
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Confuse Ray
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Withdraw
- .byte 0x0b @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Defense Curl
- .byte 0x9c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Barrier
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Light Screen
- .byte 0x23 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Haze
- .byte 0x19 @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Reflect
- .byte 0x41 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Focus Energy
- .byte 0x2f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Bide
- .byte 0x1a @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Metronome
- .byte 0x53 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Mirror Move
- .byte 0x09 @ effect
- .byte 0 @ power
- .byte TYPE_FLYING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Self-Destruct
- .byte 0x07 @ effect
- .byte 200 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Egg Bomb
- .byte 0x00 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Lick
- .byte 0x06 @ effect
- .byte 20 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Smog
- .byte 0x02 @ effect
- .byte 20 @ power
- .byte TYPE_POISON
- .byte 70 @ accuracy
- .byte 20 @ PP
- .byte 40 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sludge
- .byte 0x02 @ effect
- .byte 65 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bone Club
- .byte 0x1f @ effect
- .byte 65 @ power
- .byte TYPE_GROUND
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Blast
- .byte 0x04 @ effect
- .byte 120 @ power
- .byte TYPE_FIRE
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Waterfall
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Clamp
- .byte 0x2a @ effect
- .byte 35 @ power
- .byte TYPE_WATER
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Swift
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Skull Bash
- .byte 0x91 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spike Cannon
- .byte 0x1d @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Constrict
- .byte 0x46 @ effect
- .byte 10 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Amnesia
- .byte 0x36 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Kinesis
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Soft-Boiled
- .byte 0x9d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hi Jump Kick
- .byte 0x2d @ effect
- .byte 85 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Glare
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dream Eater
- .byte 0x08 @ effect
- .byte 100 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Gas
- .byte 0x42 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 55 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Barrage
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leech Life
- .byte 0x03 @ effect
- .byte 20 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Lovely Kiss
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sky Attack
- .byte 0x4b @ effect
- .byte 140 @ power
- .byte TYPE_FLYING
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Transform
- .byte 0x39 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Bubble
- .byte 0x46 @ effect
- .byte 20 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dizzy Punch
- .byte 0x4c @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spore
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flash
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 70 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psywave
- .byte 0x58 @ effect
- .byte 1 @ power
- .byte TYPE_PSYCHIC
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Splash
- .byte 0x55 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Acid Armor
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Crabhammer
- .byte 0x2b @ effect
- .byte 90 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Explosion
- .byte 0x07 @ effect
- .byte 250 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fury Swipes
- .byte 0x1d @ effect
- .byte 18 @ power
- .byte TYPE_NORMAL
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Bonemerang
- .byte 0x2c @ effect
- .byte 50 @ power
- .byte TYPE_GROUND
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rest
- .byte 0x25 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Rock Slide
- .byte 0x1f @ effect
- .byte 75 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hyper Fang
- .byte 0x1f @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sharpen
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Conversion
- .byte 0x1e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Tri Attack
- .byte 0x24 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Super Fang
- .byte 0x28 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slash
- .byte 0x2b @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Substitute
- .byte 0x4f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Struggle
- .byte 0x30 @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 1 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sketch
- .byte 0x5f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 1 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Triple Kick
- .byte 0x68 @ effect
- .byte 10 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thief
- .byte 0x69 @ effect
- .byte 40 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spider Web
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mind Reader
- .byte 0x5e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Nightmare
- .byte 0x6b @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flame Wheel
- .byte 0x7d @ effect
- .byte 60 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Snore
- .byte 0x5c @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Curse
- .byte 0x6d @ effect
- .byte 0 @ power
- .byte TYPE_MYSTERY
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Flail
- .byte 0x63 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Conversion 2
- .byte 0x5d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Aeroblast
- .byte 0x2b @ effect
- .byte 100 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cotton Spore
- .byte 0x3c @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Reversal
- .byte 0x63 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spite
- .byte 0x64 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Powder Snow
- .byte 0x05 @ effect
- .byte 40 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Protect
- .byte 0x6f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Mach Punch
- .byte 0x67 @ effect
- .byte 40 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Scary Face
- .byte 0x3c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Faint Attack
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_DARK
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sweet Kiss
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Belly Drum
- .byte 0x8e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Sludge Bomb
- .byte 0x02 @ effect
- .byte 90 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mud-Slap
- .byte 0x49 @ effect
- .byte 20 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Octazooka
- .byte 0x49 @ effect
- .byte 65 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Spikes
- .byte 0x70 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ENEMY_SIDE
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Zap Cannon
- .byte 0x06 @ effect
- .byte 100 @ power
- .byte TYPE_ELECTRIC
- .byte 50 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Foresight
- .byte 0x71 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Destiny Bond
- .byte 0x62 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Perish Song
- .byte 0x72 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Icy Wind
- .byte 0x46 @ effect
- .byte 55 @ power
- .byte TYPE_ICE
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Detect
- .byte 0x6f @ effect
- .byte 0 @ power
- .byte TYPE_FIGHTING
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Bone Rush
- .byte 0x1d @ effect
- .byte 25 @ power
- .byte TYPE_GROUND
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Lock-On
- .byte 0x5e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Outrage
- .byte 0x1b @ effect
- .byte 90 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sandstorm
- .byte 0x73 @ effect
- .byte 0 @ power
- .byte TYPE_ROCK
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Giga Drain
- .byte 0x03 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Endure
- .byte 0x74 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Charm
- .byte 0x3a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rollout
- .byte 0x75 @ effect
- .byte 30 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ False Swipe
- .byte 0x65 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Swagger
- .byte 0x76 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Milk Drink
- .byte 0x9d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Spark
- .byte 0x06 @ effect
- .byte 65 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Fury Cutter
- .byte 0x77 @ effect
- .byte 10 @ power
- .byte TYPE_BUG
- .byte 95 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Steel Wing
- .byte 0x8a @ effect
- .byte 70 @ power
- .byte TYPE_STEEL
- .byte 90 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mean Look
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Attract
- .byte 0x78 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sleep Talk
- .byte 0x61 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Heal Bell
- .byte 0x66 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Return
- .byte 0x79 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Present
- .byte 0x7a @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Frustration
- .byte 0x7b @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Safeguard
- .byte 0x7c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Pain Split
- .byte 0x5b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sacred Fire
- .byte 0x7d @ effect
- .byte 100 @ power
- .byte TYPE_FIRE
- .byte 95 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Magnitude
- .byte 0x7e @ effect
- .byte 1 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dynamic Punch
- .byte 0x4c @ effect
- .byte 100 @ power
- .byte TYPE_FIGHTING
- .byte 50 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Megahorn
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_BUG
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Dragon Breath
- .byte 0x06 @ effect
- .byte 60 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Baton Pass
- .byte 0x7f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Encore
- .byte 0x5a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Pursuit
- .byte 0x80 @ effect
- .byte 40 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rapid Spin
- .byte 0x81 @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sweet Scent
- .byte 0x18 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Iron Tail
- .byte 0x45 @ effect
- .byte 100 @ power
- .byte TYPE_STEEL
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Metal Claw
- .byte 0x8b @ effect
- .byte 50 @ power
- .byte TYPE_STEEL
- .byte 95 @ accuracy
- .byte 35 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vital Throw
- .byte 0x4e @ effect
- .byte 70 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Morning Sun
- .byte 0x84 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Synthesis
- .byte 0x85 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Moonlight
- .byte 0x86 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hidden Power
- .byte 0x87 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cross Chop
- .byte 0x2b @ effect
- .byte 100 @ power
- .byte TYPE_FIGHTING
- .byte 80 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Twister
- .byte 0x92 @ effect
- .byte 40 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rain Dance
- .byte 0x88 @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Sunny Day
- .byte 0x89 @ effect
- .byte 0 @ power
- .byte TYPE_FIRE
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Crunch
- .byte 0x48 @ effect
- .byte 80 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mirror Coat
- .byte 0x90 @ effect
- .byte 1 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte -5 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags
-
-@ Psych Up
- .byte 0x8f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Extreme Speed
- .byte 0x67 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Ancient Power
- .byte 0x8c @ effect
- .byte 60 @ power
- .byte TYPE_ROCK
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Shadow Ball
- .byte 0x48 @ effect
- .byte 80 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Future Sight
- .byte 0x94 @ effect
- .byte 80 @ power
- .byte TYPE_PSYCHIC
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Rock Smash
- .byte 0x45 @ effect
- .byte 20 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Whirlpool
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_WATER
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Beat Up
- .byte 0x9a @ effect
- .byte 10 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fake Out
- .byte 0x9e @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Uproar
- .byte 0x9f @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Stockpile
- .byte 0xa0 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Spit Up
- .byte 0xa1 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Swallow
- .byte 0xa2 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Heat Wave
- .byte 0x04 @ effect
- .byte 100 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hail
- .byte 0xa4 @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Torment
- .byte 0xa5 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flatter
- .byte 0xa6 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Will-O-Wisp
- .byte 0xa7 @ effect
- .byte 0 @ power
- .byte TYPE_FIRE
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Memento
- .byte 0xa8 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Facade
- .byte 0xa9 @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Focus Punch
- .byte 0xaa @ effect
- .byte 150 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -3 @ priority
- .4byte F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Smelling Salt
- .byte 0xab @ effect
- .byte 60 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Follow Me
- .byte 0xac @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Nature Power
- .byte 0xad @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Charge
- .byte 0xae @ effect
- .byte 0 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Taunt
- .byte 0xaf @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Helping Hand
- .byte 0xb0 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 5 @ priority
- .4byte 0 @ misc. flags
-
-@ Trick
- .byte 0xb1 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Role Play
- .byte 0xb2 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Wish
- .byte 0xb3 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Assist
- .byte 0xb4 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Ingrain
- .byte 0xb5 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Superpower
- .byte 0xb6 @ effect
- .byte 120 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Magic Coat
- .byte 0xb7 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 4 @ priority
- .4byte 0 @ misc. flags
-
-@ Recycle
- .byte 0xb8 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Revenge
- .byte 0xb9 @ effect
- .byte 60 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -4 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Brick Break
- .byte 0xba @ effect
- .byte 75 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Yawn
- .byte 0xbb @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Knock Off
- .byte 0xbc @ effect
- .byte 20 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Endeavor
- .byte 0xbd @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Eruption
- .byte 0xbe @ effect
- .byte 150 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Skill Swap
- .byte 0xbf @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Imprison
- .byte 0xc0 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Refresh
- .byte 0xc1 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Grudge
- .byte 0xc2 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Snatch
- .byte 0xc3 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 4 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags
-
-@ Secret Power
- .byte 0xc5 @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dive
- .byte 0x9b @ effect
- .byte 60 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Arm Thrust
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Camouflage
- .byte 0xd5 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Tail Glow
- .byte 0x35 @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Luster Purge
- .byte 0x48 @ effect
- .byte 70 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mist Ball
- .byte 0x47 @ effect
- .byte 70 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Feather Dance
- .byte 0x3a @ effect
- .byte 0 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Teeter Dance
- .byte 0xc7 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Blaze Kick
- .byte 0xc8 @ effect
- .byte 85 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mud Sport
- .byte 0xc9 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Ice Ball
- .byte 0x75 @ effect
- .byte 30 @ power
- .byte TYPE_ICE
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Needle Arm
- .byte 0x96 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slack Off
- .byte 0x20 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hyper Voice
- .byte 0x00 @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Fang
- .byte 0xca @ effect
- .byte 50 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Crush Claw
- .byte 0x45 @ effect
- .byte 75 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 10 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Blast Burn
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hydro Cannon
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_WATER
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Meteor Mash
- .byte 0x8b @ effect
- .byte 100 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Astonish
- .byte 0x96 @ effect
- .byte 30 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Weather Ball
- .byte 0xcb @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aromatherapy
- .byte 0x66 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Fake Tears
- .byte 0x3e @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Air Cutter
- .byte 0x2b @ effect
- .byte 55 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Overheat
- .byte 0xcc @ effect
- .byte 140 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Odor Sleuth
- .byte 0x71 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rock Tomb
- .byte 0x46 @ effect
- .byte 50 @ power
- .byte TYPE_ROCK
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Silver Wind
- .byte 0x8c @ effect
- .byte 60 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Metal Sound
- .byte 0x3e @ effect
- .byte 0 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Grass Whistle
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 55 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Tickle
- .byte 0xcd @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cosmic Power
- .byte 0xce @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Water Spout
- .byte 0xbe @ effect
- .byte 150 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Signal Beam
- .byte 0x4c @ effect
- .byte 75 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Shadow Punch
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_GHOST
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Extrasensory
- .byte 0x96 @ effect
- .byte 80 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sky Uppercut
- .byte 0xcf @ effect
- .byte 85 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sand Tomb
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_GROUND
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sheer Cold
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_ICE
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Muddy Water
- .byte 0x49 @ effect
- .byte 95 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bullet Seed
- .byte 0x1d @ effect
- .byte 10 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aerial Ace
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_FLYING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Icicle Spear
- .byte 0x1d @ effect
- .byte 10 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Iron Defense
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_STEEL
- .byte 0 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Block
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Howl
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Dragon Claw
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Frenzy Plant
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_GRASS
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bulk Up
- .byte 0xd0 @ effect
- .byte 0 @ power
- .byte TYPE_FIGHTING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Bounce
- .byte 0x9b @ effect
- .byte 85 @ power
- .byte TYPE_FLYING
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mud Shot
- .byte 0x46 @ effect
- .byte 55 @ power
- .byte TYPE_GROUND
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Tail
- .byte 0xd1 @ effect
- .byte 50 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Covet
- .byte 0x69 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Volt Tackle
- .byte 0xc6 @ effect
- .byte 120 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Magical Leaf
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Water Sport
- .byte 0xd2 @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Calm Mind
- .byte 0xd3 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Leaf Blade
- .byte 0x2b @ effect
- .byte 70 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Dragon Dance
- .byte 0xd4 @ effect
- .byte 0 @ power
- .byte TYPE_DRAGON
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Rock Blast
- .byte 0x1d @ effect
- .byte 25 @ power
- .byte TYPE_ROCK
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Shock Wave
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_ELECTRIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Water Pulse
- .byte 0x4c @ effect
- .byte 60 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Doom Desire
- .byte 0x94 @ effect
- .byte 120 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Psycho Boost
- .byte 0xcc @ effect
- .byte 140 @ power
- .byte TYPE_PSYCHIC
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
diff --git a/data/data2b.s b/data/data2b.s
index b65087d7a..8d759b0b2 100644
--- a/data/data2b.s
+++ b/data/data2b.s
@@ -4866,21 +4866,3 @@ gUnknown_0831ACDC:: @ 831ACDC
.align 2
gUnknown_0831ACE0:: @ 831ACE0
.byte 0xe0, 0xf0, 0xf0, 0xe0, 0xe0, 0x00, 0x00, 0x00
-
-@ 831ACE8
- .include "data/type_effectiveness.inc"
-
-@ 831AE38
- .include "data/text/type_names.inc"
-
-@ 831AEB8
- .include "data/trainer_money.inc"
-
-@ 831AF98
- .include "data/text/ability_descriptions.inc"
-
-@ 831B6DB
- .include "data/text/ability_names.inc"
-
-@ 831BAD4
- .include "data/text/ability_description_pointers.inc"
diff --git a/data/data2c.s b/data/data2c.s
deleted file mode 100644
index 8d134ccb2..000000000
--- a/data/data2c.s
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "constants/abilities.h"
-#include "constants/items.h"
-#include "constants/moves.h"
-#include "constants/species.h"
-#include "constants/pokemon.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-
-@ 831C898
- .include "data/battle_moves.inc"
-
-@ 0x31d93c
-@ unreferenced unknown data
- .byte 0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 6668f0d1f..42c5aa1ad 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -1161,7 +1161,7 @@ EventScript_2715DE:: @ 82715DE
setflag FLAG_0x376
setflag FLAG_0x374
setflag FLAG_0x375
- setflag FLAG_0x3C1
+ setflag FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION
setflag FLAG_0x378
setflag FLAG_0x2F0
setflag FLAG_0x2F5
@@ -1177,7 +1177,7 @@ EventScript_2715DE:: @ 82715DE
setflag FLAG_0x38F
setflag FLAG_0x393
setflag FLAG_0x358
- setflag FLAG_0x390
+ setflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
setflag FLAG_0x2FD
setflag FLAG_0x398
setflag FLAG_0x399
diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc
index 1c48e9710..40578a907 100644
--- a/data/scripts/maps/MauvilleCity.inc
+++ b/data/scripts/maps/MauvilleCity.inc
@@ -5,18 +5,18 @@ MauvilleCity_MapScripts:: @ 81DF385
MauvilleCity_MapScript1_1DF38B: @ 81DF38B
setflag FLAG_VISITED_MAUVILLE_CITY
clearflag FLAG_0x09D
- clearflag FLAG_0x3C1
+ clearflag FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION
setflag FLAG_SYS_TV_START
clearflag FLAG_0x063
setvar VAR_0x4093, 0
- checkflag FLAG_0x0D1
+ checkflag FLAG_GOT_TM24_FROM_WATTSON
call_if 1, MauvilleCity_EventScript_1DF3A9
end
MauvilleCity_EventScript_1DF3A9:: @ 81DF3A9
- clearflag FLAG_0x391
- setflag FLAG_0x390
- setflag FLAG_0x05B
+ clearflag FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON
+ setflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
+ setflag FLAG_WATTSON_REMATCH_AVAILABLE
return
MauvilleCity_EventScript_1DF3B3:: @ 81DF3B3
@@ -424,15 +424,15 @@ MauvilleCity_Movement_1DF72F: @ 81DF72F
MauvilleCity_EventScript_1DF73A:: @ 81DF73A
lock
faceplayer
- checkflag FLAG_0x0D1
+ checkflag FLAG_GOT_TM24_FROM_WATTSON
goto_eq MauvilleCity_EventScript_1DF7B0
compare VAR_0x40BA, 2
goto_eq MauvilleCity_EventScript_1DF784
- checkflag FLAG_0x0D0
+ checkflag FLAG_GOT_BASEMENT_KEY_FROM_WATTSON
goto_eq MauvilleCity_EventScript_1DF77A
msgbox MauvilleCity_Text_1DFFE4, 4
giveitem_std ITEM_BASEMENT_KEY
- setflag FLAG_0x0D0
+ setflag FLAG_GOT_BASEMENT_KEY_FROM_WATTSON
msgbox MauvilleCity_Text_1E0154, 4
release
end
@@ -447,7 +447,7 @@ MauvilleCity_EventScript_1DF784:: @ 81DF784
giveitem_std ITEM_TM24
compare VAR_RESULT, 0
goto_eq MauvilleCity_EventScript_272054
- setflag FLAG_0x0D1
+ setflag FLAG_GOT_TM24_FROM_WATTSON
msgbox MauvilleCity_Text_1E02AA, 4
release
end
diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc
index 627ae904c..2751e345e 100644
--- a/data/scripts/maps/PetalburgCity_Gym.inc
+++ b/data/scripts/maps/PetalburgCity_Gym.inc
@@ -423,8 +423,8 @@ PetalburgCity_Gym_EventScript_204E3B:: @ 8204E3B
setflag FLAG_BADGE05_GET
special sub_813B9A0
call PetalburgCity_Gym_EventScript_2721F8
- setflag FLAG_0x391
- clearflag FLAG_0x390
+ setflag FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON
+ clearflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
setvar VAR_0x8008, 5
call PetalburgCity_Gym_EventScript_271F43
clearflag FLAG_0x3AC
diff --git a/data/text/ability_description_pointers.inc b/data/text/ability_description_pointers.inc
deleted file mode 100644
index 41d3e84ef..000000000
--- a/data/text/ability_description_pointers.inc
+++ /dev/null
@@ -1,80 +0,0 @@
- .align 2
-gAbilityDescriptionPointers:: @ 831BAD4
- .4byte gNoneAbilityDescription
- .4byte gStenchAbilityDescription
- .4byte gDrizzleAbilityDescription
- .4byte gSpeedBoostAbilityDescription
- .4byte gBattleArmorAbilityDescription
- .4byte gSturdyAbilityDescription
- .4byte gDampAbilityDescription
- .4byte gLimberAbilityDescription
- .4byte gSandVeilAbilityDescription
- .4byte gStaticAbilityDescription
- .4byte gVoltAbsorbAbilityDescription
- .4byte gWaterAbsorbAbilityDescription
- .4byte gObliviousAbilityDescription
- .4byte gCloudNineAbilityDescription
- .4byte gCompoundEyesAbilityDescription
- .4byte gInsomniaAbilityDescription
- .4byte gColorChangeAbilityDescription
- .4byte gImmunityAbilityDescription
- .4byte gFlashFireAbilityDescription
- .4byte gShieldDustAbilityDescription
- .4byte gOwnTempoAbilityDescription
- .4byte gSuctionCupsAbilityDescription
- .4byte gIntimidateAbilityDescription
- .4byte gShadowTagAbilityDescription
- .4byte gRoughSkinAbilityDescription
- .4byte gWonderGuardAbilityDescription
- .4byte gLevitateAbilityDescription
- .4byte gEffectSporeAbilityDescription
- .4byte gSynchronizeAbilityDescription
- .4byte gClearBodyAbilityDescription
- .4byte gNaturalCureAbilityDescription
- .4byte gLightningRodAbilityDescription
- .4byte gSereneGraceAbilityDescription
- .4byte gSwiftSwimAbilityDescription
- .4byte gChlorophyllAbilityDescription
- .4byte gIlluminateAbilityDescription
- .4byte gTraceAbilityDescription
- .4byte gHugePowerAbilityDescription
- .4byte gPoisonPointAbilityDescription
- .4byte gInnerFocusAbilityDescription
- .4byte gMagmaArmorAbilityDescription
- .4byte gWaterVeilAbilityDescription
- .4byte gMagnetPullAbilityDescription
- .4byte gSoundproofAbilityDescription
- .4byte gRainDishAbilityDescription
- .4byte gSandStreamAbilityDescription
- .4byte gPressureAbilityDescription
- .4byte gThickFatAbilityDescription
- .4byte gEarlyBirdAbilityDescription
- .4byte gFlameBodyAbilityDescription
- .4byte gRunAwayAbilityDescription
- .4byte gKeenEyeAbilityDescription
- .4byte gHyperCutterAbilityDescription
- .4byte gPickupAbilityDescription
- .4byte gTruantAbilityDescription
- .4byte gHustleAbilityDescription
- .4byte gCuteCharmAbilityDescription
- .4byte gPlusAbilityDescription
- .4byte gMinusAbilityDescription
- .4byte gForecastAbilityDescription
- .4byte gStickyHoldAbilityDescription
- .4byte gShedSkinAbilityDescription
- .4byte gGutsAbilityDescription
- .4byte gMarvelScaleAbilityDescription
- .4byte gLiquidOozeAbilityDescription
- .4byte gOvergrowAbilityDescription
- .4byte gBlazeAbilityDescription
- .4byte gTorrentAbilityDescription
- .4byte gSwarmAbilityDescription
- .4byte gRockHeadAbilityDescription
- .4byte gDroughtAbilityDescription
- .4byte gArenaTrapAbilityDescription
- .4byte gVitalSpiritAbilityDescription
- .4byte gWhiteSmokeAbilityDescription
- .4byte gPurePowerAbilityDescription
- .4byte gShellArmorAbilityDescription
- .4byte gCacophonyAbilityDescription
- .4byte gAirLockAbilityDescription
diff --git a/data/text/ability_descriptions.inc b/data/text/ability_descriptions.inc
deleted file mode 100644
index fe8305542..000000000
--- a/data/text/ability_descriptions.inc
+++ /dev/null
@@ -1,233 +0,0 @@
-gNoneAbilityDescription:: @ 831AF98
- .string "No special ability.$"
-
-gStenchAbilityDescription:: @ 831AFAC
- .string "Helps repel wild POKéMON.$"
-
-gDrizzleAbilityDescription:: @ 831AFC6
- .string "Summons rain in battle.$"
-
-gSpeedBoostAbilityDescription:: @ 831AFDE
- .string "Gradually boosts SPEED.$"
-
-gBattleArmorAbilityDescription:: @ 831AFF6
- .string "Blocks critical hits.$"
-
-gSturdyAbilityDescription:: @ 831B00C
- .string "Negates 1-hit KO attacks.$"
-
-gDampAbilityDescription:: @ 831B026
- .string "Prevents self-destruction.$"
-
-gLimberAbilityDescription:: @ 831B041
- .string "Prevents paralysis.$"
-
-gSandVeilAbilityDescription:: @ 831B055
- .string "Ups evasion in a sandstorm.$"
-
-gStaticAbilityDescription:: @ 831B071
- .string "Paralyzes on contact.$"
-
-gVoltAbsorbAbilityDescription:: @ 831B087
- .string "Turns electricity into HP.$"
-
-gWaterAbsorbAbilityDescription:: @ 831B0A2
- .string "Changes water into HP.$"
-
-gObliviousAbilityDescription:: @ 831B0B9
- .string "Prevents attraction.$"
-
-gCloudNineAbilityDescription:: @ 831B0CE
- .string "Negates weather effects.$"
-
-gCompoundEyesAbilityDescription:: @ 831B0E7
- .string "Raises accuracy.$"
-
-gInsomniaAbilityDescription:: @ 831B0F8
- .string "Prevents sleep.$"
-
-gColorChangeAbilityDescription:: @ 831B108
- .string "Changes type to foe’s move.$"
-
-gImmunityAbilityDescription:: @ 831B124
- .string "Prevents poisoning.$"
-
-gFlashFireAbilityDescription:: @ 831B138
- .string "Powers up if hit by fire.$"
-
-gShieldDustAbilityDescription:: @ 831B152
- .string "Prevents added effects.$"
-
-gOwnTempoAbilityDescription:: @ 831B16A
- .string "Prevents confusion.$"
-
-gSuctionCupsAbilityDescription:: @ 831B17E
- .string "Firmly anchors the body.$"
-
-gIntimidateAbilityDescription:: @ 831B197
- .string "Lowers the foe’s ATTACK.$"
-
-gShadowTagAbilityDescription:: @ 831B1B0
- .string "Prevents the foe’s escape.$"
-
-gRoughSkinAbilityDescription:: @ 831B1CB
- .string "Hurts to touch.$"
-
-gWonderGuardAbilityDescription:: @ 831B1DB
- .string "“Super effective” hits.$"
-
-gLevitateAbilityDescription:: @ 831B1F3
- .string "Not hit by GROUND attacks.$"
-
-gEffectSporeAbilityDescription:: @ 831B20E
- .string "Leaves spores on contact.$"
-
-gSynchronizeAbilityDescription:: @ 831B228
- .string "Passes on status problems.$"
-
-gClearBodyAbilityDescription:: @ 831B243
- .string "Prevents ability reduction.$"
-
-gNaturalCureAbilityDescription:: @ 831B25F
- .string "Heals upon switching out.$"
-
-gLightningRodAbilityDescription:: @ 831B279
- .string "Draws electrical moves.$"
-
-gSereneGraceAbilityDescription:: @ 831B291
- .string "Promotes added effects.$"
-
-gSwiftSwimAbilityDescription:: @ 831B2A9
- .string "Raises SPEED in rain.$"
-
-gChlorophyllAbilityDescription:: @ 831B2BF
- .string "Raises SPEED in sunshine.$"
-
-gIlluminateAbilityDescription:: @ 831B2D9
- .string "Encounter rate increases.$"
-
-gTraceAbilityDescription:: @ 831B2F3
- .string "Copies special ability.$"
-
-gHugePowerAbilityDescription:: @ 831B30B
- .string "Raises ATTACK.$"
-
-gPoisonPointAbilityDescription:: @ 831B31A
- .string "Poisons foe on contact.$"
-
-gInnerFocusAbilityDescription:: @ 831B332
- .string "Prevents flinching.$"
-
-gMagmaArmorAbilityDescription:: @ 831B346
- .string "Prevents freezing.$"
-
-gWaterVeilAbilityDescription:: @ 831B359
- .string "Prevents burns.$"
-
-gMagnetPullAbilityDescription:: @ 831B369
- .string "Traps STEEL-type POKéMON.$"
-
-gSoundproofAbilityDescription:: @ 831B383
- .string "Avoids sound-based moves.$"
-
-gRainDishAbilityDescription:: @ 831B39D
- .string "Slight HP recovery in rain.$"
-
-gSandStreamAbilityDescription:: @ 831B3B9
- .string "Summons a sandstorm.$"
-
-gPressureAbilityDescription:: @ 831B3CE
- .string "Raises foe’s PP usage.$"
-
-gThickFatAbilityDescription:: @ 831B3E5
- .string "Heat-and-cold protection.$"
-
-gEarlyBirdAbilityDescription:: @ 831B3FF
- .string "Awakens quickly from sleep.$"
-
-gFlameBodyAbilityDescription:: @ 831B41B
- .string "Burns the foe on contact.$"
-
-gRunAwayAbilityDescription:: @ 831B435
- .string "Makes escaping easier.$"
-
-gKeenEyeAbilityDescription:: @ 831B44C
- .string "Prevents loss of accuracy.$"
-
-gHyperCutterAbilityDescription:: @ 831B467
- .string "Prevents ATTACK reduction.$"
-
-gPickupAbilityDescription:: @ 831B482
- .string "May pick up items.$"
-
-gTruantAbilityDescription:: @ 831B495
- .string "Moves only every two turns.$"
-
-gHustleAbilityDescription:: @ 831B4B1
- .string "Trades accuracy for power.$"
-
-gCuteCharmAbilityDescription:: @ 831B4CC
- .string "Infatuates on contact.$"
-
-gPlusAbilityDescription:: @ 831B4E3
- .string "Powers up with MINUS.$"
-
-gMinusAbilityDescription:: @ 831B4F9
- .string "Powers up with PLUS.$"
-
-gForecastAbilityDescription:: @ 831B50E
- .string "Changes with the weather.$"
-
-gStickyHoldAbilityDescription:: @ 831B528
- .string "Prevents item theft.$"
-
-gShedSkinAbilityDescription:: @ 831B53D
- .string "Heals the body by shedding.$"
-
-gGutsAbilityDescription:: @ 831B559
- .string "Ups ATTACK if suffering.$"
-
-gMarvelScaleAbilityDescription:: @ 831B572
- .string "Ups DEFENSE if suffering.$"
-
-gLiquidOozeAbilityDescription:: @ 831B58C
- .string "Draining causes injury.$"
-
-gOvergrowAbilityDescription:: @ 831B5A4
- .string "Ups GRASS moves in a pinch.$"
-
-gBlazeAbilityDescription:: @ 831B5C0
- .string "Ups FIRE moves in a pinch.$"
-
-gTorrentAbilityDescription:: @ 831B5DB
- .string "Ups WATER moves in a pinch.$"
-
-gSwarmAbilityDescription:: @ 831B5F7
- .string "Ups BUG moves in a pinch.$"
-
-gRockHeadAbilityDescription:: @ 831B611
- .string "Prevents recoil damage.$"
-
-gDroughtAbilityDescription:: @ 831B629
- .string "Summons sunlight in battle.$"
-
-gArenaTrapAbilityDescription:: @ 831B645
- .string "Prevents fleeing.$"
-
-gVitalSpiritAbilityDescription:: @ 831B657
- .string "Prevents sleep.$"
-
-gWhiteSmokeAbilityDescription:: @ 831B667
- .string "Prevents ability reduction.$"
-
-gPurePowerAbilityDescription:: @ 831B683
- .string "Raises ATTACK.$"
-
-gShellArmorAbilityDescription:: @ 831B692
- .string "Blocks critical hits.$"
-
-gCacophonyAbilityDescription:: @ 831B6A8
- .string "Avoids sound-based moves.$"
-
-gAirLockAbilityDescription:: @ 831B6C2
- .string "Negates weather effects.$"
diff --git a/data/text/ability_names.inc b/data/text/ability_names.inc
deleted file mode 100644
index a630b8080..000000000
--- a/data/text/ability_names.inc
+++ /dev/null
@@ -1,79 +0,0 @@
-gAbilityNames:: @ 831B6DB
- .string "-------$", 13
- .string "STENCH$", 13
- .string "DRIZZLE$", 13
- .string "SPEED BOOST$", 13
- .string "BATTLE ARMOR$", 13
- .string "STURDY$", 13
- .string "DAMP$", 13
- .string "LIMBER$", 13
- .string "SAND VEIL$", 13
- .string "STATIC$", 13
- .string "VOLT ABSORB$", 13
- .string "WATER ABSORB$", 13
- .string "OBLIVIOUS$", 13
- .string "CLOUD NINE$", 13
- .string "COMPOUNDEYES$", 13
- .string "INSOMNIA$", 13
- .string "COLOR CHANGE$", 13
- .string "IMMUNITY$", 13
- .string "FLASH FIRE$", 13
- .string "SHIELD DUST$", 13
- .string "OWN TEMPO$", 13
- .string "SUCTION CUPS$", 13
- .string "INTIMIDATE$", 13
- .string "SHADOW TAG$", 13
- .string "ROUGH SKIN$", 13
- .string "WONDER GUARD$", 13
- .string "LEVITATE$", 13
- .string "EFFECT SPORE$", 13
- .string "SYNCHRONIZE$", 13
- .string "CLEAR BODY$", 13
- .string "NATURAL CURE$", 13
- .string "LIGHTNINGROD$", 13
- .string "SERENE GRACE$", 13
- .string "SWIFT SWIM$", 13
- .string "CHLOROPHYLL$", 13
- .string "ILLUMINATE$", 13
- .string "TRACE$", 13
- .string "HUGE POWER$", 13
- .string "POISON POINT$", 13
- .string "INNER FOCUS$", 13
- .string "MAGMA ARMOR$", 13
- .string "WATER VEIL$", 13
- .string "MAGNET PULL$", 13
- .string "SOUNDPROOF$", 13
- .string "RAIN DISH$", 13
- .string "SAND STREAM$", 13
- .string "PRESSURE$", 13
- .string "THICK FAT$", 13
- .string "EARLY BIRD$", 13
- .string "FLAME BODY$", 13
- .string "RUN AWAY$", 13
- .string "KEEN EYE$", 13
- .string "HYPER CUTTER$", 13
- .string "PICKUP$", 13
- .string "TRUANT$", 13
- .string "HUSTLE$", 13
- .string "CUTE CHARM$", 13
- .string "PLUS$", 13
- .string "MINUS$", 13
- .string "FORECAST$", 13
- .string "STICKY HOLD$", 13
- .string "SHED SKIN$", 13
- .string "GUTS$", 13
- .string "MARVEL SCALE$", 13
- .string "LIQUID OOZE$", 13
- .string "OVERGROW$", 13
- .string "BLAZE$", 13
- .string "TORRENT$", 13
- .string "SWARM$", 13
- .string "ROCK HEAD$", 13
- .string "DROUGHT$", 13
- .string "ARENA TRAP$", 13
- .string "VITAL SPIRIT$", 13
- .string "WHITE SMOKE$", 13
- .string "PURE POWER$", 13
- .string "SHELL ARMOR$", 13
- .string "CACOPHONY$", 13
- .string "AIR LOCK$", 13
diff --git a/data/text/type_names.inc b/data/text/type_names.inc
deleted file mode 100644
index c79e705c2..000000000
--- a/data/text/type_names.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-gTypeNames:: @ 831AE38
- .string "NORMAL$", 7
- .string "FIGHT$", 7
- .string "FLYING$", 7
- .string "POISON$", 7
- .string "GROUND$", 7
- .string "ROCK$", 7
- .string "BUG$", 7
- .string "GHOST$", 7
- .string "STEEL$", 7
- .string "???$", 7
- .string "FIRE$", 7
- .string "WATER$", 7
- .string "GRASS$", 7
- .string "ELECTR$", 7
- .string "PSYCHC$", 7
- .string "ICE$", 7
- .string "DRAGON$", 7
- .string "DARK$", 7
diff --git a/data/trainer_money.inc b/data/trainer_money.inc
deleted file mode 100644
index 5b8032d95..000000000
--- a/data/trainer_money.inc
+++ /dev/null
@@ -1,59 +0,0 @@
-@ This is a factor in how much money you get for beating a trainer.
- .align 2
-gTrainerMoneyTable:: @ 831AEB8
- .byte TRAINER_CLASS_TEAM_AQUA, 5, 0, 0
- .byte TRAINER_CLASS_AQUA_ADMIN, 10, 0, 0
- .byte TRAINER_CLASS_AQUA_LEADER, 20, 0, 0
- .byte TRAINER_CLASS_AROMA_LADY, 10, 0, 0
- .byte TRAINER_CLASS_RUIN_MANIAC, 15, 0, 0
- .byte TRAINER_CLASS_INTERVIEWER, 12, 0, 0
- .byte TRAINER_CLASS_TUBER_1, 1, 0, 0
- .byte TRAINER_CLASS_TUBER_2, 1, 0, 0
- .byte TRAINER_CLASS_SIS_AND_BRO, 3, 0, 0
- .byte TRAINER_CLASS_COOLTRAINER_1, 12, 0, 0
- .byte TRAINER_CLASS_HEX_MANIAC, 6, 0, 0
- .byte TRAINER_CLASS_LADY, 50, 0, 0
- .byte TRAINER_CLASS_BEAUTY, 20, 0, 0
- .byte TRAINER_CLASS_RICH_BOY, 50, 0, 0
- .byte TRAINER_CLASS_POKEMANIAC, 15, 0, 0
- .byte TRAINER_CLASS_SWIMMER_M, 2, 0, 0
- .byte TRAINER_CLASS_BLACK_BELT, 8, 0, 0
- .byte TRAINER_CLASS_GUITARIST, 8, 0, 0
- .byte TRAINER_CLASS_KINDLER, 8, 0, 0
- .byte TRAINER_CLASS_CAMPER, 4, 0, 0
- .byte TRAINER_CLASS_OLD_COUPLE, 10, 0, 0
- .byte TRAINER_CLASS_BUG_MANIAC, 15, 0, 0
- .byte TRAINER_CLASS_PSYCHIC, 6, 0, 0
- .byte TRAINER_CLASS_GENTLEMAN, 20, 0, 0
- .byte TRAINER_CLASS_ELITE_FOUR, 25, 0, 0
- .byte TRAINER_CLASS_LEADER, 25, 0, 0
- .byte TRAINER_CLASS_SCHOOL_KID, 5, 0, 0
- .byte TRAINER_CLASS_SR_AND_JR, 4, 0, 0
- .byte TRAINER_CLASS_POKEFAN, 20, 0, 0
- .byte TRAINER_CLASS_EXPERT, 10, 0, 0
- .byte TRAINER_CLASS_YOUNGSTER, 4, 0, 0
- .byte TRAINER_CLASS_CHAMPION, 50, 0, 0
- .byte TRAINER_CLASS_FISHERMAN, 10, 0, 0
- .byte TRAINER_CLASS_TRIATHLETE, 10, 0, 0
- .byte TRAINER_CLASS_DRAGON_TAMER, 12, 0, 0
- .byte TRAINER_CLASS_BIRD_KEEPER, 8, 0, 0
- .byte TRAINER_CLASS_NINJA_BOY, 3, 0, 0
- .byte TRAINER_CLASS_BATTLE_GIRL, 6, 0, 0
- .byte TRAINER_CLASS_PARASOL_LADY, 10, 0, 0
- .byte TRAINER_CLASS_SWIMMER_F, 2, 0, 0
- .byte TRAINER_CLASS_PICNICKER, 4, 0, 0
- .byte TRAINER_CLASS_TWINS, 3, 0, 0
- .byte TRAINER_CLASS_SAILOR, 8, 0, 0
- .byte TRAINER_CLASS_COLLECTOR, 15, 0, 0
- .byte TRAINER_CLASS_PKMN_TRAINER_3, 15, 0, 0
- .byte TRAINER_CLASS_PKMN_BREEDER, 10, 0, 0
- .byte TRAINER_CLASS_PKMN_RANGER, 12, 0, 0
- .byte TRAINER_CLASS_TEAM_MAGMA, 5, 0, 0
- .byte TRAINER_CLASS_MAGMA_ADMIN, 10, 0, 0
- .byte TRAINER_CLASS_MAGMA_LEADER, 20, 0, 0
- .byte TRAINER_CLASS_LASS, 4, 0, 0
- .byte TRAINER_CLASS_BUG_CATCHER, 4, 0, 0
- .byte TRAINER_CLASS_HIKER, 10, 0, 0
- .byte TRAINER_CLASS_YOUNG_COUPLE, 8, 0, 0
- .byte TRAINER_CLASS_WINSTRATE, 10, 0, 0
- .byte -1, 5, 0, 0
diff --git a/data/trainer_rematch.s b/data/trainer_rematch.s
deleted file mode 100644
index e3a05ba8b..000000000
--- a/data/trainer_rematch.s
+++ /dev/null
@@ -1,10 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_0862AD34:: @ 862AD34
- .2byte 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048
-
-gUnknown_0862AD44:: @ 862AD44
- .2byte 0x0041, 0x0042, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0000
diff --git a/data/type_effectiveness.inc b/data/type_effectiveness.inc
deleted file mode 100644
index 0739199c2..000000000
--- a/data/type_effectiveness.inc
+++ /dev/null
@@ -1,119 +0,0 @@
-@ format: attacking type, defending type, damage multiplier
-@ the multiplier is a (decimal) fixed-point number:
-@ 20 is ×2.0
-@ 05 is ×0.5
-@ 00 is ×0
-
-gTypeEffectiveness:: @ 831ACE8
- .byte TYPE_NORMAL, TYPE_ROCK, 5
- .byte TYPE_NORMAL, TYPE_STEEL, 5
- .byte TYPE_FIRE, TYPE_FIRE, 5
- .byte TYPE_FIRE, TYPE_WATER, 5
- .byte TYPE_FIRE, TYPE_GRASS, 20
- .byte TYPE_FIRE, TYPE_ICE, 20
- .byte TYPE_FIRE, TYPE_BUG, 20
- .byte TYPE_FIRE, TYPE_ROCK, 5
- .byte TYPE_FIRE, TYPE_DRAGON, 5
- .byte TYPE_FIRE, TYPE_STEEL, 20
- .byte TYPE_WATER, TYPE_FIRE, 20
- .byte TYPE_WATER, TYPE_WATER, 5
- .byte TYPE_WATER, TYPE_GRASS, 5
- .byte TYPE_WATER, TYPE_GROUND, 20
- .byte TYPE_WATER, TYPE_ROCK, 20
- .byte TYPE_WATER, TYPE_DRAGON, 5
- .byte TYPE_ELECTRIC, TYPE_WATER, 20
- .byte TYPE_ELECTRIC, TYPE_ELECTRIC, 5
- .byte TYPE_ELECTRIC, TYPE_GRASS, 5
- .byte TYPE_ELECTRIC, TYPE_GROUND, 0
- .byte TYPE_ELECTRIC, TYPE_FLYING, 20
- .byte TYPE_ELECTRIC, TYPE_DRAGON, 5
- .byte TYPE_GRASS, TYPE_FIRE, 5
- .byte TYPE_GRASS, TYPE_WATER, 20
- .byte TYPE_GRASS, TYPE_GRASS, 5
- .byte TYPE_GRASS, TYPE_POISON, 5
- .byte TYPE_GRASS, TYPE_GROUND, 20
- .byte TYPE_GRASS, TYPE_FLYING, 5
- .byte TYPE_GRASS, TYPE_BUG, 5
- .byte TYPE_GRASS, TYPE_ROCK, 20
- .byte TYPE_GRASS, TYPE_DRAGON, 5
- .byte TYPE_GRASS, TYPE_STEEL, 5
- .byte TYPE_ICE, TYPE_WATER, 5
- .byte TYPE_ICE, TYPE_GRASS, 20
- .byte TYPE_ICE, TYPE_ICE, 5
- .byte TYPE_ICE, TYPE_GROUND, 20
- .byte TYPE_ICE, TYPE_FLYING, 20
- .byte TYPE_ICE, TYPE_DRAGON, 20
- .byte TYPE_ICE, TYPE_STEEL, 5
- .byte TYPE_ICE, TYPE_FIRE, 5
- .byte TYPE_FIGHTING, TYPE_NORMAL, 20
- .byte TYPE_FIGHTING, TYPE_ICE, 20
- .byte TYPE_FIGHTING, TYPE_POISON, 5
- .byte TYPE_FIGHTING, TYPE_FLYING, 5
- .byte TYPE_FIGHTING, TYPE_PSYCHIC, 5
- .byte TYPE_FIGHTING, TYPE_BUG, 5
- .byte TYPE_FIGHTING, TYPE_ROCK, 20
- .byte TYPE_FIGHTING, TYPE_DARK, 20
- .byte TYPE_FIGHTING, TYPE_STEEL, 20
- .byte TYPE_POISON, TYPE_GRASS, 20
- .byte TYPE_POISON, TYPE_POISON, 5
- .byte TYPE_POISON, TYPE_GROUND, 5
- .byte TYPE_POISON, TYPE_ROCK, 5
- .byte TYPE_POISON, TYPE_GHOST, 5
- .byte TYPE_POISON, TYPE_STEEL, 0
- .byte TYPE_GROUND, TYPE_FIRE, 20
- .byte TYPE_GROUND, TYPE_ELECTRIC, 20
- .byte TYPE_GROUND, TYPE_GRASS, 5
- .byte TYPE_GROUND, TYPE_POISON, 20
- .byte TYPE_GROUND, TYPE_FLYING, 0
- .byte TYPE_GROUND, TYPE_BUG, 5
- .byte TYPE_GROUND, TYPE_ROCK, 20
- .byte TYPE_GROUND, TYPE_STEEL, 20
- .byte TYPE_FLYING, TYPE_ELECTRIC, 5
- .byte TYPE_FLYING, TYPE_GRASS, 20
- .byte TYPE_FLYING, TYPE_FIGHTING, 20
- .byte TYPE_FLYING, TYPE_BUG, 20
- .byte TYPE_FLYING, TYPE_ROCK, 5
- .byte TYPE_FLYING, TYPE_STEEL, 5
- .byte TYPE_PSYCHIC, TYPE_FIGHTING, 20
- .byte TYPE_PSYCHIC, TYPE_POISON, 20
- .byte TYPE_PSYCHIC, TYPE_PSYCHIC, 5
- .byte TYPE_PSYCHIC, TYPE_DARK, 0
- .byte TYPE_PSYCHIC, TYPE_STEEL, 5
- .byte TYPE_BUG, TYPE_FIRE, 5
- .byte TYPE_BUG, TYPE_GRASS, 20
- .byte TYPE_BUG, TYPE_FIGHTING, 5
- .byte TYPE_BUG, TYPE_POISON, 5
- .byte TYPE_BUG, TYPE_FLYING, 5
- .byte TYPE_BUG, TYPE_PSYCHIC, 20
- .byte TYPE_BUG, TYPE_GHOST, 5
- .byte TYPE_BUG, TYPE_DARK, 20
- .byte TYPE_BUG, TYPE_STEEL, 5
- .byte TYPE_ROCK, TYPE_FIRE, 20
- .byte TYPE_ROCK, TYPE_ICE, 20
- .byte TYPE_ROCK, TYPE_FIGHTING, 5
- .byte TYPE_ROCK, TYPE_GROUND, 5
- .byte TYPE_ROCK, TYPE_FLYING, 20
- .byte TYPE_ROCK, TYPE_BUG, 20
- .byte TYPE_ROCK, TYPE_STEEL, 5
- .byte TYPE_GHOST, TYPE_NORMAL, 0
- .byte TYPE_GHOST, TYPE_PSYCHIC, 20
- .byte TYPE_GHOST, TYPE_DARK, 5
- .byte TYPE_GHOST, TYPE_STEEL, 5
- .byte TYPE_GHOST, TYPE_GHOST, 20
- .byte TYPE_DRAGON, TYPE_DRAGON, 20
- .byte TYPE_DRAGON, TYPE_STEEL, 5
- .byte TYPE_DARK, TYPE_FIGHTING, 5
- .byte TYPE_DARK, TYPE_PSYCHIC, 20
- .byte TYPE_DARK, TYPE_GHOST, 20
- .byte TYPE_DARK, TYPE_DARK, 5
- .byte TYPE_DARK, TYPE_STEEL, 5
- .byte TYPE_STEEL, TYPE_FIRE, 5
- .byte TYPE_STEEL, TYPE_WATER, 5
- .byte TYPE_STEEL, TYPE_ELECTRIC, 5
- .byte TYPE_STEEL, TYPE_ICE, 20
- .byte TYPE_STEEL, TYPE_ROCK, 20
- .byte TYPE_STEEL, TYPE_STEEL, 5
- .byte 0xFE, 0xFE, 0
- .byte TYPE_NORMAL, TYPE_GHOST, 0
- .byte TYPE_FIGHTING, TYPE_GHOST, 0
- .byte 0xFF, 0xFF, 0
diff --git a/data/unk_transition.s b/data/unk_transition.s
index 2dc54e22d..db5744d08 100644
--- a/data/unk_transition.s
+++ b/data/unk_transition.s
@@ -3,6 +3,7 @@
.section .rodata
+ .align 2, 0
gUnknown_0862AD54:: @ 862AD54
.incbin "graphics/battle_transitions/frontier_transition.4bpp.lz"
diff --git a/include/battle.h b/include/battle.h
index 5225b72e3..b0554a914 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -3,9 +3,9 @@
// should they be included here or included individually by every file?
#include "constants/battle.h"
+#include "battle_main.h"
#include "battle_util.h"
#include "battle_script_commands.h"
-#include "battle_main.h"
#include "battle_ai_switch_items.h"
#include "battle_gfx_sfx_util.h"
#include "battle_util2.h"
@@ -66,29 +66,14 @@
#define MSG_DISPLAY 0x7
#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8
-#define MOVE_TARGET_SELECTED 0x0
-#define MOVE_TARGET_DEPENDS 0x1
-#define MOVE_TARGET_USER 0x2
-#define MOVE_TARGET_RANDOM 0x4
-#define MOVE_TARGET_x10 0x10
-#define MOVE_TARGET_BOTH 0x8
-#define MOVE_TARGET_FOES_AND_ALLY 0x20
-#define MOVE_TARGET_OPPONENTS_FIELD 0x40
-
-// defines for the u8 array gTypeEffectiveness
-#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
-#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
-#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
-
-// defines for the gTypeEffectiveness multipliers
-#define TYPE_MUL_NO_EFFECT 0
-#define TYPE_MUL_NOT_EFFECTIVE 5
-#define TYPE_MUL_NORMAL 10
-#define TYPE_MUL_SUPER_EFFECTIVE 20
-
-// special type table Ids
-#define TYPE_FORESIGHT 0xFE
-#define TYPE_ENDTABLE 0xFF
+#define MOVE_TARGET_SELECTED 0x0
+#define MOVE_TARGET_DEPENDS 0x1
+#define MOVE_TARGET_USER_OR_SELECTED 0x2
+#define MOVE_TARGET_RANDOM 0x4
+#define MOVE_TARGET_BOTH 0x8
+#define MOVE_TARGET_USER 0x10
+#define MOVE_TARGET_FOES_AND_ALLY 0x20
+#define MOVE_TARGET_OPPONENTS_FIELD 0x40
#define BATTLE_BUFFER_LINK_SIZE 0x1000
@@ -368,6 +353,91 @@ struct BattleResults
u8 catchAttempts[11]; // 0x36
};
+struct BattleTv_Side
+{
+ u32 spikesMonId:3;
+ u32 reflectMonId:3;
+ u32 lightScreenMonId:3;
+ u32 safeguardMonId:3;
+ u32 mistMonId:3;
+ u32 futureSightMonId:3;
+ u32 doomDesireMonId:3;
+ u32 perishSongMonId:3;
+ u32 wishMonId:3;
+ u32 grudgeMonId:3;
+ u32 usedMoveSlot:2;
+ u32 spikesMoveSlot:2;
+ u32 reflectMoveSlot:2;
+ u32 lightScreenMoveSlot:2;
+ u32 safeguardMoveSlot:2;
+ u32 mistMoveSlot:2;
+ u32 futureSightMoveSlot:2;
+ u32 doomDesireMoveSlot:2;
+ u32 perishSongMoveSlot:2;
+ u32 wishMoveSlot:2;
+ u32 grudgeMoveSlot:2;
+ u32 destinyBondMonId:3;
+ u32 destinyBondMoveSlot:2;
+ u32 faintCause:4;
+ u32 faintCauseMonId:3;
+ u32 explosion:1;
+ u32 explosionMoveSlot:2;
+ u32 explosionMonId:3;
+ u32 perishSong:1;
+};
+
+struct BattleTv_Position
+{
+ u32 curseMonId:3;
+ u32 leechSeedMonId:3;
+ u32 nightmareMonId:3;
+ u32 wrapMonId:3;
+ u32 attractMonId:3;
+ u32 confusionMonId:3;
+ u32 curseMoveSlot:2;
+ u32 leechSeedMoveSlot:2;
+ u32 nightmareMoveSlot:2;
+ u32 wrapMoveSlot:2;
+ u32 attractMoveSlot:2;
+ u32 confusionMoveSlot:2;
+ u32 waterSportMoveSlot:2;
+ u32 waterSportMonId:3;
+ u32 mudSportMonId:3;
+ u32 mudSportMoveSlot:2;
+ u32 ingrainMonId:3;
+ u32 ingrainMoveSlot:2;
+ u32 attackedByMonId:3;
+ u32 attackedByMoveSlot:2;
+};
+
+struct BattleTv_Mon
+{
+ u32 psnMonId:3;
+ u32 badPsnMonId:3;
+ u32 brnMonId:3;
+ u32 prlzMonId:3;
+ u32 slpMonId:3;
+ u32 frzMonId:3;
+ u32 psnMoveSlot:2;
+ u32 badPsnMoveSlot:2;
+ u32 brnMoveSlot:2;
+ u32 prlzMoveSlot:2;
+ u32 slpMoveSlot:2;
+ u32 frzMoveSlot:2;
+};
+
+struct BattleTv
+{
+ struct BattleTv_Mon mon[2][6]; // [side][partyId]
+ struct BattleTv_Position pos[2][2]; // [side][flank]
+ struct BattleTv_Side side[2]; // [side]
+};
+
+struct BattleTvMovePoints
+{
+ s16 points[2][PARTY_SIZE * 4];
+};
+
struct BattleStruct
{
u8 turnEffectsTracker;
@@ -447,7 +517,7 @@ struct BattleStruct
u8 field_B0;
u8 hpScale;
u8 synchronizeMoveEffect;
- u8 field_B3;
+ bool8 anyMonHasTransformed;
void (*savedCallback)(void);
u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
@@ -472,9 +542,9 @@ struct BattleStruct
u8 wishPerishSongBattlerId;
bool8 overworldWeatherDone;
u8 atkCancellerTracker;
- u8 field_1A4[96];
- u8 field_204[104];
- u8 field_26C[40];
+ struct BattleTvMovePoints tvMovePoints;
+ struct BattleTv tv;
+ u8 notSureWhatFieldLol[0x28];
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_298[8];
u8 field_2A0;
@@ -493,6 +563,7 @@ struct BattleStruct
#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
diff --git a/include/battle_link_817C95C.h b/include/battle_link_817C95C.h
deleted file mode 100644
index cb2cb0b27..000000000
--- a/include/battle_link_817C95C.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GUARD_BATTLE_LINK_817C95C_H
-#define GUARD_BATTLE_LINK_817C95C_H
-
-void sub_817C95C(u16 stringId);
-void sub_817E0FC(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
-void sub_817E32C(u8 animationId);
-void sub_817E3F4(void);
-void sub_817F2A8(void);
-u8 GetBattlerMoveSlotId(u8 bank, u16 move);
-
-#endif // GUARD_BATTLE_LINK_817C95C_H
diff --git a/include/battle_main.h b/include/battle_main.h
index d7a522f17..a725b631f 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -1,6 +1,30 @@
#ifndef GUARD_BATTLE_MAIN_H
#define GUARD_BATTLE_MAIN_H
+struct TrainerMoney
+{
+ u8 classId;
+ u8 value;
+};
+
+#define TYPE_NAME_LENGTH 6
+#define ABILITY_NAME_LENGTH 12
+
+// defines for the u8 array gTypeEffectiveness
+#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
+#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
+#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
+
+// defines for the gTypeEffectiveness multipliers
+#define TYPE_MUL_NO_EFFECT 0
+#define TYPE_MUL_NOT_EFFECTIVE 5
+#define TYPE_MUL_NORMAL 10
+#define TYPE_MUL_SUPER_EFFECTIVE 20
+
+// special type table Ids
+#define TYPE_FORESIGHT 0xFE
+#define TYPE_ENDTABLE 0xFF
+
void CB2_InitBattle(void);
void BattleMainCB2(void);
void CB2_QuitRecordedBattle(void);
@@ -42,6 +66,12 @@ void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
bool8 TryRunFromBattle(u8 battlerId);
+extern const u8 gTypeEffectiveness[336];
+extern const u8 gTypeNames[][TYPE_NAME_LENGTH + 1];
+extern const struct TrainerMoney gTrainerMoneyTable[];
+extern const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1];
+extern const u8 *const gAbilityDescriptionPointers[];
+
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
extern const u8 gStatusConditionString_ParalysisJpn[8];
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 6c84d1f0f..142ac1f7b 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -4,16 +4,16 @@
#define WINDOW_CLEAR 0x1
#define WINDOW_x80 0x80
-void AI_CalcDmg(u8 bankAtk, u8 bankDef);
-u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
+void AI_CalcDmg(u8 battlerIdAtk, u8 battlerIdDef);
+u8 TypeCalc(u16 move, u8 battlerIdAtk, u8 battlerIdDef);
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
-u8 GetBattlerTurnOrderNum(u8 bank);
+u8 GetBattlerTurnOrderNum(u8 battlerId);
void SetMoveEffect(bool8 primary, u8 certain);
void BattleDestroyYesNoCursorAt(u8 cursorPosition);
void BattleCreateYesNoCursorAt(u8 cursorPosition);
void BufferMoveToLearnIntoBattleTextBuff2(void);
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
-bool8 UproarWakeUpCheck(u8 bank);
+bool8 UproarWakeUpCheck(u8 battlerId);
extern void (* const gBattleScriptingCommandsTable[])(void);
extern const u8 gUnknown_0831C494[][4];
diff --git a/include/battle_tv.h b/include/battle_tv.h
new file mode 100644
index 000000000..72466d73b
--- /dev/null
+++ b/include/battle_tv.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_BATTLE_TV_H
+#define GUARD_BATTLE_TV_H
+
+void BattleTv_SetDataBasedOnString(u16 stringId);
+void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
+void BattleTv_SetDataBasedOnAnimation(u8 animationId);
+void TryPutLinkBattleTvShowOnAir(void);
+void BattleTv_ClearExplosionFaintCause(void);
+u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId);
+
+#endif // GUARD_BATTLE_TV_H
diff --git a/include/blit.h b/include/blit.h
new file mode 100644
index 000000000..e7f384cc8
--- /dev/null
+++ b/include/blit.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_BLIT_H
+#define GUARD_BLIT_H
+
+void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height);
+void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey);
+void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
+void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset);
+void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
+
+#endif // GUARD_BLIT_H
diff --git a/include/clock.h b/include/clock.h
index 4e6560c91..aa179bf6f 100644
--- a/include/clock.h
+++ b/include/clock.h
@@ -5,4 +5,4 @@
void DoTimeBasedEvents(void);
-#endif
+#endif // GUARD_CLOCK_H
diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h
index 1b59f2f64..b54f01353 100644
--- a/include/constants/battle_move_effects.h
+++ b/include/constants/battle_move_effects.h
@@ -151,7 +151,7 @@
#define EFFECT_EARTHQUAKE 147
#define EFFECT_FUTURE_SIGHT 148
#define EFFECT_GUST 149
-#define EFFECT_FLINCH_HIT_2 150 // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
+#define EFFECT_FLINCH_MINIMIZE_HIT 150 // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
#define EFFECT_SOLARBEAM 151
#define EFFECT_THUNDER 152
#define EFFECT_TELEPORT 153
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index 0390f17f4..a1a4ed50a 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -92,6 +92,6 @@
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
#define ATK48_BIT_x4 0x4
-#define ATK48_LOWER_FAIL_CHECK 0x8
+#define ATK48_DONT_CHECK_LOWER 0x8
#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 63e053cbd..7f52018a1 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -91,7 +91,7 @@
#define FLAG_0x058 0x58
#define FLAG_0x059 0x59
#define FLAG_0x05A 0x5A
-#define FLAG_0x05B 0x5B
+#define FLAG_WATTSON_REMATCH_AVAILABLE 0x5B
#define FLAG_0x05C 0x5C
#define FLAG_0x05D 0x5D
#define FLAG_0x05E 0x5E
@@ -208,8 +208,8 @@
#define FLAG_0x0CD 0xCD
#define FLAG_0x0CE 0xCE
#define FLAG_0x0CF 0xCF
-#define FLAG_0x0D0 0xD0
-#define FLAG_0x0D1 0xD1
+#define FLAG_GOT_BASEMENT_KEY_FROM_WATTSON 0xD0
+#define FLAG_GOT_TM24_FROM_WATTSON 0xD1
#define FLAG_0x0D2 0xD2
#define FLAG_0x0D3 0xD3
#define FLAG_0x0D4 0xD4
@@ -912,8 +912,8 @@
#define FLAG_0x38D 0x38D
#define FLAG_0x38E 0x38E
#define FLAG_0x38F 0x38F
-#define FLAG_0x390 0x390
-#define FLAG_0x391 0x391
+#define FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON 0x390
+#define FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON 0x391
#define FLAG_0x392 0x392
#define FLAG_0x393 0x393
#define FLAG_0x394 0x394
@@ -961,7 +961,7 @@
#define FLAG_0x3BE 0x3BE
#define FLAG_0x3BF 0x3BF
#define FLAG_0x3C0 0x3C0
-#define FLAG_0x3C1 0x3C1
+#define FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION 0x3C1
#define FLAG_0x3C2 0x3C2
#define FLAG_0x3C3 0x3C3
#define FLAG_0x3C4 0x3C4
diff --git a/include/data/battle_moves.h b/include/data/battle_moves.h
new file mode 100644
index 000000000..6489fe07f
--- /dev/null
+++ b/include/data/battle_moves.h
@@ -0,0 +1,3913 @@
+#ifndef GUARD_DATA_BATTLE_MOVES
+#define GUARD_DATA_BATTLE_MOVES
+
+const struct BattleMove gBattleMoves[LAST_MOVE_INDEX + 1] =
+{
+ { // MOVE_NONE
+ .effect = EFFECT_HIT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 0,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_POUND
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_KARATE_CHOP
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 50,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DOUBLE_SLAP
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COMET_PUNCH
+ .effect = EFFECT_MULTI_HIT,
+ .power = 18,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MEGA_PUNCH
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_PAY_DAY
+ .effect = EFFECT_PAY_DAY,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FIRE_PUNCH
+ .effect = EFFECT_BURN_HIT,
+ .power = 75,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ICE_PUNCH
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 75,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDER_PUNCH
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 75,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SCRATCH
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_VICE_GRIP
+ .effect = EFFECT_HIT,
+ .power = 55,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_GUILLOTINE
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_RAZOR_WIND
+ .effect = EFFECT_RAZOR_WIND,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWORDS_DANCE
+ .effect = EFFECT_ATTACK_UP_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_CUT
+ .effect = EFFECT_HIT,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_GUST
+ .effect = EFFECT_GUST,
+ .power = 40,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WING_ATTACK
+ .effect = EFFECT_HIT,
+ .power = 60,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WHIRLWIND
+ .effect = EFFECT_ROAR,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -6,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLY
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 70,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BIND
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SLAM
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_VINE_WHIP
+ .effect = EFFECT_HIT,
+ .power = 35,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STOMP
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 65,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DOUBLE_KICK
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 30,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MEGA_KICK
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_JUMP_KICK
+ .effect = EFFECT_RECOIL_IF_MISS,
+ .power = 70,
+ .type = TYPE_FIGHTING,
+ .accuracy = 95,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ROLLING_KICK
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 60,
+ .type = TYPE_FIGHTING,
+ .accuracy = 85,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SAND_ATTACK
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HEADBUTT
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HORN_ATTACK
+ .effect = EFFECT_HIT,
+ .power = 65,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FURY_ATTACK
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_HORN_DRILL
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TACKLE
+ .effect = EFFECT_HIT,
+ .power = 35,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BODY_SLAM
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 85,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WRAP
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TAKE_DOWN
+ .effect = EFFECT_RECOIL,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_THRASH
+ .effect = EFFECT_RAMPAGE,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DOUBLE_EDGE
+ .effect = EFFECT_DOUBLE_EDGE,
+ .power = 120,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TAIL_WHIP
+ .effect = EFFECT_DEFENSE_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POISON_STING
+ .effect = EFFECT_POISON_HIT,
+ .power = 15,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TWINEEDLE
+ .effect = EFFECT_TWINEEDLE,
+ .power = 25,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PIN_MISSILE
+ .effect = EFFECT_MULTI_HIT,
+ .power = 14,
+ .type = TYPE_BUG,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LEER
+ .effect = EFFECT_DEFENSE_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BITE
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 60,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_GROWL
+ .effect = EFFECT_ATTACK_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROAR
+ .effect = EFFECT_ROAR,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -6,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SING
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 55,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SUPERSONIC
+ .effect = EFFECT_CONFUSE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 55,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SONIC_BOOM
+ .effect = EFFECT_SONICBOOM,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DISABLE
+ .effect = EFFECT_DISABLE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 55,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ACID
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 40,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_EMBER
+ .effect = EFFECT_BURN_HIT,
+ .power = 40,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLAMETHROWER
+ .effect = EFFECT_BURN_HIT,
+ .power = 95,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIST
+ .effect = EFFECT_MIST,
+ .power = 0,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_WATER_GUN
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_HYDRO_PUMP
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_WATER,
+ .accuracy = 80,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SURF
+ .effect = EFFECT_HIT,
+ .power = 95,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ICE_BEAM
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 95,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BLIZZARD
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 120,
+ .type = TYPE_ICE,
+ .accuracy = 70,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYBEAM
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 65,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BUBBLE_BEAM
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_AURORA_BEAM
+ .effect = EFFECT_ATTACK_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HYPER_BEAM
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_PECK
+ .effect = EFFECT_HIT,
+ .power = 35,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DRILL_PECK
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SUBMISSION
+ .effect = EFFECT_RECOIL,
+ .power = 80,
+ .type = TYPE_FIGHTING,
+ .accuracy = 80,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LOW_KICK
+ .effect = EFFECT_LOW_KICK,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COUNTER
+ .effect = EFFECT_COUNTER,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = -5,
+ .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SEISMIC_TOSS
+ .effect = EFFECT_LEVEL_DAMAGE,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STRENGTH
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ABSORB
+ .effect = EFFECT_ABSORB,
+ .power = 20,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEGA_DRAIN
+ .effect = EFFECT_ABSORB,
+ .power = 40,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_LEECH_SEED
+ .effect = EFFECT_LEECH_SEED,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_GROWTH
+ .effect = EFFECT_SPECIAL_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_RAZOR_LEAF
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 55,
+ .type = TYPE_GRASS,
+ .accuracy = 95,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SOLAR_BEAM
+ .effect = EFFECT_SOLARBEAM,
+ .power = 120,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_POISON_POWDER
+ .effect = EFFECT_POISON,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 75,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_STUN_SPORE
+ .effect = EFFECT_PARALYZE,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 75,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLEEP_POWDER
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 75,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PETAL_DANCE
+ .effect = EFFECT_RAMPAGE,
+ .power = 70,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STRING_SHOT
+ .effect = EFFECT_SPEED_DOWN,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 95,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DRAGON_RAGE
+ .effect = EFFECT_DRAGON_RAGE,
+ .power = 1,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FIRE_SPIN
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_FIRE,
+ .accuracy = 70,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_THUNDER_SHOCK
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 40,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDERBOLT
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 95,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDER_WAVE
+ .effect = EFFECT_PARALYZE,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDER
+ .effect = EFFECT_THUNDER,
+ .power = 120,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 70,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROCK_THROW
+ .effect = EFFECT_HIT,
+ .power = 50,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EARTHQUAKE
+ .effect = EFFECT_EARTHQUAKE,
+ .power = 100,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FISSURE
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_GROUND,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DIG
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 60,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TOXIC
+ .effect = EFFECT_TOXIC,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_CONFUSION
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 50,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYCHIC
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 90,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HYPNOSIS
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 60,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEDITATE
+ .effect = EFFECT_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_AGILITY
+ .effect = EFFECT_SPEED_UP_2,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_QUICK_ATTACK
+ .effect = EFFECT_QUICK_ATTACK,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_RAGE
+ .effect = EFFECT_RAGE,
+ .power = 20,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TELEPORT
+ .effect = EFFECT_TELEPORT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_NIGHT_SHADE
+ .effect = EFFECT_LEVEL_DAMAGE,
+ .power = 1,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MIMIC
+ .effect = EFFECT_MIMIC,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_SCREECH
+ .effect = EFFECT_DEFENSE_DOWN_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DOUBLE_TEAM
+ .effect = EFFECT_EVASION_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_RECOVER
+ .effect = EFFECT_RESTORE_HP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HARDEN
+ .effect = EFFECT_DEFENSE_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_MINIMIZE
+ .effect = EFFECT_MINIMIZE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SMOKESCREEN
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_CONFUSE_RAY
+ .effect = EFFECT_CONFUSE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WITHDRAW
+ .effect = EFFECT_DEFENSE_UP,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_DEFENSE_CURL
+ .effect = EFFECT_DEFENSE_CURL,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BARRIER
+ .effect = EFFECT_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_LIGHT_SCREEN
+ .effect = EFFECT_LIGHT_SCREEN,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HAZE
+ .effect = EFFECT_HAZE,
+ .power = 0,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_REFLECT
+ .effect = EFFECT_REFLECT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_FOCUS_ENERGY
+ .effect = EFFECT_FOCUS_ENERGY,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BIDE
+ .effect = EFFECT_BIDE,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_METRONOME
+ .effect = EFFECT_METRONOME,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_MIRROR_MOVE
+ .effect = EFFECT_MIRROR_MOVE,
+ .power = 0,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_SELF_DESTRUCT
+ .effect = EFFECT_EXPLOSION,
+ .power = 200,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EGG_BOMB
+ .effect = EFFECT_HIT,
+ .power = 100,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LICK
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 20,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SMOG
+ .effect = EFFECT_POISON_HIT,
+ .power = 20,
+ .type = TYPE_POISON,
+ .accuracy = 70,
+ .pp = 20,
+ .secondaryEffectChance = 40,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLUDGE
+ .effect = EFFECT_POISON_HIT,
+ .power = 65,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BONE_CLUB
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 65,
+ .type = TYPE_GROUND,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FIRE_BLAST
+ .effect = EFFECT_BURN_HIT,
+ .power = 120,
+ .type = TYPE_FIRE,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WATERFALL
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CLAMP
+ .effect = EFFECT_TRAP,
+ .power = 35,
+ .type = TYPE_WATER,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWIFT
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SKULL_BASH
+ .effect = EFFECT_SKULL_BASH,
+ .power = 100,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SPIKE_CANNON
+ .effect = EFFECT_MULTI_HIT,
+ .power = 20,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CONSTRICT
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 10,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_AMNESIA
+ .effect = EFFECT_SPECIAL_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_KINESIS
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 80,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SOFT_BOILED
+ .effect = EFFECT_SOFTBOILED,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HI_JUMP_KICK
+ .effect = EFFECT_RECOIL_IF_MISS,
+ .power = 85,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_GLARE
+ .effect = EFFECT_PARALYZE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DREAM_EATER
+ .effect = EFFECT_DREAM_EATER,
+ .power = 100,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POISON_GAS
+ .effect = EFFECT_POISON,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 55,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BARRAGE
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LEECH_LIFE
+ .effect = EFFECT_ABSORB,
+ .power = 20,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_LOVELY_KISS
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SKY_ATTACK
+ .effect = EFFECT_SKY_ATTACK,
+ .power = 140,
+ .type = TYPE_FLYING,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TRANSFORM
+ .effect = EFFECT_TRANSFORM,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_BUBBLE
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 20,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DIZZY_PUNCH
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SPORE
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLASH
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 70,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYWAVE
+ .effect = EFFECT_PSYWAVE,
+ .power = 1,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 80,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SPLASH
+ .effect = EFFECT_SPLASH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ACID_ARMOR
+ .effect = EFFECT_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_CRABHAMMER
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 90,
+ .type = TYPE_WATER,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EXPLOSION
+ .effect = EFFECT_EXPLOSION,
+ .power = 250,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FURY_SWIPES
+ .effect = EFFECT_MULTI_HIT,
+ .power = 18,
+ .type = TYPE_NORMAL,
+ .accuracy = 80,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BONEMERANG
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 50,
+ .type = TYPE_GROUND,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_REST
+ .effect = EFFECT_REST,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_ROCK_SLIDE
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 75,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HYPER_FANG
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SHARPEN
+ .effect = EFFECT_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_CONVERSION
+ .effect = EFFECT_CONVERSION,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_TRI_ATTACK
+ .effect = EFFECT_TRI_ATTACK,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SUPER_FANG
+ .effect = EFFECT_SUPER_FANG,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLASH
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SUBSTITUTE
+ .effect = EFFECT_SUBSTITUTE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_STRUGGLE
+ .effect = EFFECT_RECOIL,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SKETCH
+ .effect = EFFECT_SKETCH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_TRIPLE_KICK
+ .effect = EFFECT_TRIPLE_KICK,
+ .power = 10,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_THIEF
+ .effect = EFFECT_THIEF,
+ .power = 40,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SPIDER_WEB
+ .effect = EFFECT_MEAN_LOOK,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIND_READER
+ .effect = EFFECT_LOCK_ON,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_NIGHTMARE
+ .effect = EFFECT_NIGHTMARE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLAME_WHEEL
+ .effect = EFFECT_THAW_HIT,
+ .power = 60,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SNORE
+ .effect = EFFECT_SNORE,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CURSE
+ .effect = EFFECT_CURSE,
+ .power = 0,
+ .type = TYPE_MYSTERY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_FLAIL
+ .effect = EFFECT_FLAIL,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CONVERSION_2
+ .effect = EFFECT_CONVERSION_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_AEROBLAST
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 100,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COTTON_SPORE
+ .effect = EFFECT_SPEED_DOWN_2,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 85,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_REVERSAL
+ .effect = EFFECT_FLAIL,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SPITE
+ .effect = EFFECT_SPITE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POWDER_SNOW
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 40,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PROTECT
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_MACH_PUNCH
+ .effect = EFFECT_QUICK_ATTACK,
+ .power = 40,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SCARY_FACE
+ .effect = EFFECT_SPEED_DOWN_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FAINT_ATTACK
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWEET_KISS
+ .effect = EFFECT_CONFUSE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BELLY_DRUM
+ .effect = EFFECT_BELLY_DRUM,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SLUDGE_BOMB
+ .effect = EFFECT_POISON_HIT,
+ .power = 90,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MUD_SLAP
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 20,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_OCTAZOOKA
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_WATER,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SPIKES
+ .effect = EFFECT_SPIKES,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_OPPONENTS_FIELD,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ZAP_CANNON
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 100,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 50,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FORESIGHT
+ .effect = EFFECT_FORESIGHT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DESTINY_BOND
+ .effect = EFFECT_DESTINY_BOND,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_PERISH_SONG
+ .effect = EFFECT_PERISH_SONG,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ICY_WIND
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 55,
+ .type = TYPE_ICE,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DETECT
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_BONE_RUSH
+ .effect = EFFECT_MULTI_HIT,
+ .power = 25,
+ .type = TYPE_GROUND,
+ .accuracy = 80,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LOCK_ON
+ .effect = EFFECT_LOCK_ON,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_OUTRAGE
+ .effect = EFFECT_RAMPAGE,
+ .power = 90,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SANDSTORM
+ .effect = EFFECT_SANDSTORM,
+ .power = 0,
+ .type = TYPE_ROCK,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_GIGA_DRAIN
+ .effect = EFFECT_ABSORB,
+ .power = 60,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ENDURE
+ .effect = EFFECT_ENDURE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_CHARM
+ .effect = EFFECT_ATTACK_DOWN_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROLLOUT
+ .effect = EFFECT_ROLLOUT,
+ .power = 30,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FALSE_SWIPE
+ .effect = EFFECT_FALSE_SWIPE,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWAGGER
+ .effect = EFFECT_SWAGGER,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MILK_DRINK
+ .effect = EFFECT_SOFTBOILED,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SPARK
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 65,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FURY_CUTTER
+ .effect = EFFECT_FURY_CUTTER,
+ .power = 10,
+ .type = TYPE_BUG,
+ .accuracy = 95,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STEEL_WING
+ .effect = EFFECT_DEFENSE_UP_HIT,
+ .power = 70,
+ .type = TYPE_STEEL,
+ .accuracy = 90,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MEAN_LOOK
+ .effect = EFFECT_MEAN_LOOK,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ATTRACT
+ .effect = EFFECT_ATTRACT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLEEP_TALK
+ .effect = EFFECT_SLEEP_TALK,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_HEAL_BELL
+ .effect = EFFECT_HEAL_BELL,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_RETURN
+ .effect = EFFECT_RETURN,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_PRESENT
+ .effect = EFFECT_PRESENT,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FRUSTRATION
+ .effect = EFFECT_FRUSTRATION,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SAFEGUARD
+ .effect = EFFECT_SAFEGUARD,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_PAIN_SPLIT
+ .effect = EFFECT_PAIN_SPLIT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SACRED_FIRE
+ .effect = EFFECT_THAW_HIT,
+ .power = 100,
+ .type = TYPE_FIRE,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MAGNITUDE
+ .effect = EFFECT_MAGNITUDE,
+ .power = 1,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DYNAMIC_PUNCH
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 100,
+ .type = TYPE_FIGHTING,
+ .accuracy = 50,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEGAHORN
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_BUG,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DRAGON_BREATH
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 60,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BATON_PASS
+ .effect = EFFECT_BATON_PASS,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ENCORE
+ .effect = EFFECT_ENCORE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PURSUIT
+ .effect = EFFECT_PURSUIT,
+ .power = 40,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_RAPID_SPIN
+ .effect = EFFECT_RAPID_SPIN,
+ .power = 20,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWEET_SCENT
+ .effect = EFFECT_EVASION_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_IRON_TAIL
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 100,
+ .type = TYPE_STEEL,
+ .accuracy = 75,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_METAL_CLAW
+ .effect = EFFECT_ATTACK_UP_HIT,
+ .power = 50,
+ .type = TYPE_STEEL,
+ .accuracy = 95,
+ .pp = 35,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_VITAL_THROW
+ .effect = EFFECT_VITAL_THROW,
+ .power = 70,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MORNING_SUN
+ .effect = EFFECT_MORNING_SUN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SYNTHESIS
+ .effect = EFFECT_SYNTHESIS,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_MOONLIGHT
+ .effect = EFFECT_MOONLIGHT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HIDDEN_POWER
+ .effect = EFFECT_HIDDEN_POWER,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CROSS_CHOP
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 100,
+ .type = TYPE_FIGHTING,
+ .accuracy = 80,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TWISTER
+ .effect = EFFECT_TWISTER,
+ .power = 40,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_RAIN_DANCE
+ .effect = EFFECT_RAIN_DANCE,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_SUNNY_DAY
+ .effect = EFFECT_SUNNY_DAY,
+ .power = 0,
+ .type = TYPE_FIRE,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_CRUNCH
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIRROR_COAT
+ .effect = EFFECT_MIRROR_COAT,
+ .power = 1,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = -5,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYCH_UP
+ .effect = EFFECT_PSYCH_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_EXTREME_SPEED
+ .effect = EFFECT_QUICK_ATTACK,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ANCIENT_POWER
+ .effect = EFFECT_ALL_STATS_UP_HIT,
+ .power = 60,
+ .type = TYPE_ROCK,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SHADOW_BALL
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FUTURE_SIGHT
+ .effect = EFFECT_FUTURE_SIGHT,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ROCK_SMASH
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 20,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WHIRLPOOL
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_WATER,
+ .accuracy = 70,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BEAT_UP
+ .effect = EFFECT_BEAT_UP,
+ .power = 10,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FAKE_OUT
+ .effect = EFFECT_FAKE_OUT,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_UPROAR
+ .effect = EFFECT_UPROAR,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STOCKPILE
+ .effect = EFFECT_STOCKPILE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SPIT_UP
+ .effect = EFFECT_SPIT_UP,
+ .power = 100,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWALLOW
+ .effect = EFFECT_SWALLOW,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HEAT_WAVE
+ .effect = EFFECT_BURN_HIT,
+ .power = 100,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HAIL
+ .effect = EFFECT_HAIL,
+ .power = 0,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_TORMENT
+ .effect = EFFECT_TORMENT,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLATTER
+ .effect = EFFECT_FLATTER,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WILL_O_WISP
+ .effect = EFFECT_WILL_O_WISP,
+ .power = 0,
+ .type = TYPE_FIRE,
+ .accuracy = 75,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEMENTO
+ .effect = EFFECT_MEMENTO,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FACADE
+ .effect = EFFECT_FACADE,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FOCUS_PUNCH
+ .effect = EFFECT_FOCUS_PUNCH,
+ .power = 150,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -3,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_SMELLING_SALT
+ .effect = EFFECT_SMELLINGSALT,
+ .power = 60,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FOLLOW_ME
+ .effect = EFFECT_FOLLOW_ME,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_NATURE_POWER
+ .effect = EFFECT_NATURE_POWER,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_CHARGE
+ .effect = EFFECT_CHARGE,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_TAUNT
+ .effect = EFFECT_TAUNT,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_HELPING_HAND
+ .effect = EFFECT_HELPING_HAND,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 5,
+ .flags = 0,
+ },
+ { // MOVE_TRICK
+ .effect = EFFECT_TRICK,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROLE_PLAY
+ .effect = EFFECT_ROLE_PLAY,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_WISH
+ .effect = EFFECT_WISH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_ASSIST
+ .effect = EFFECT_ASSIST,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_INGRAIN
+ .effect = EFFECT_INGRAIN,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SUPERPOWER
+ .effect = EFFECT_SUPERPOWER,
+ .power = 120,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MAGIC_COAT
+ .effect = EFFECT_MAGIC_COAT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 4,
+ .flags = 0,
+ },
+ { // MOVE_RECYCLE
+ .effect = EFFECT_RECYCLE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_REVENGE
+ .effect = EFFECT_REVENGE,
+ .power = 60,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -4,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BRICK_BREAK
+ .effect = EFFECT_BRICK_BREAK,
+ .power = 75,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_YAWN
+ .effect = EFFECT_YAWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_KNOCK_OFF
+ .effect = EFFECT_KNOCK_OFF,
+ .power = 20,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ENDEAVOR
+ .effect = EFFECT_ENDEAVOR,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ERUPTION
+ .effect = EFFECT_ERUPTION,
+ .power = 150,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SKILL_SWAP
+ .effect = EFFECT_SKILL_SWAP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_IMPRISON
+ .effect = EFFECT_IMPRISON,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_REFRESH
+ .effect = EFFECT_REFRESH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_GRUDGE
+ .effect = EFFECT_GRUDGE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SNATCH
+ .effect = EFFECT_SNATCH,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 4,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SECRET_POWER
+ .effect = EFFECT_SECRET_POWER,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DIVE
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 60,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ARM_THRUST
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CAMOUFLAGE
+ .effect = EFFECT_CAMOUFLAGE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_TAIL_GLOW
+ .effect = EFFECT_SPECIAL_ATTACK_UP_2,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_LUSTER_PURGE
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 70,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIST_BALL
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .power = 70,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FEATHER_DANCE
+ .effect = EFFECT_ATTACK_DOWN_2,
+ .power = 0,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TEETER_DANCE
+ .effect = EFFECT_TEETER_DANCE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_BLAZE_KICK
+ .effect = EFFECT_BLAZE_KICK,
+ .power = 85,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MUD_SPORT
+ .effect = EFFECT_MUD_SPORT,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ICE_BALL
+ .effect = EFFECT_ROLLOUT,
+ .power = 30,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_NEEDLE_ARM
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 60,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLACK_OFF
+ .effect = EFFECT_RESTORE_HP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HYPER_VOICE
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POISON_FANG
+ .effect = EFFECT_POISON_FANG,
+ .power = 50,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_CRUSH_CLAW
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 75,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BLAST_BURN
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_HYDRO_CANNON
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_WATER,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_METEOR_MASH
+ .effect = EFFECT_ATTACK_UP_HIT,
+ .power = 100,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ASTONISH
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 30,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WEATHER_BALL
+ .effect = EFFECT_WEATHER_BALL,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_AROMATHERAPY
+ .effect = EFFECT_HEAL_BELL,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_FAKE_TEARS
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_AIR_CUTTER
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 55,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_OVERHEAT
+ .effect = EFFECT_OVERHEAT,
+ .power = 140,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ODOR_SLEUTH
+ .effect = EFFECT_FORESIGHT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROCK_TOMB
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 50,
+ .type = TYPE_ROCK,
+ .accuracy = 80,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SILVER_WIND
+ .effect = EFFECT_ALL_STATS_UP_HIT,
+ .power = 60,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_METAL_SOUND
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_GRASS_WHISTLE
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 55,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TICKLE
+ .effect = EFFECT_TICKLE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COSMIC_POWER
+ .effect = EFFECT_COSMIC_POWER,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_WATER_SPOUT
+ .effect = EFFECT_ERUPTION,
+ .power = 150,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SIGNAL_BEAM
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 75,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SHADOW_PUNCH
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EXTRASENSORY
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SKY_UPPERCUT
+ .effect = EFFECT_SKY_UPPERCUT,
+ .power = 85,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SAND_TOMB
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_GROUND,
+ .accuracy = 70,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SHEER_COLD
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_ICE,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MUDDY_WATER
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 95,
+ .type = TYPE_WATER,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BULLET_SEED
+ .effect = EFFECT_MULTI_HIT,
+ .power = 10,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_AERIAL_ACE
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ICICLE_SPEAR
+ .effect = EFFECT_MULTI_HIT,
+ .power = 10,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_IRON_DEFENSE
+ .effect = EFFECT_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BLOCK
+ .effect = EFFECT_MEAN_LOOK,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HOWL
+ .effect = EFFECT_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_DRAGON_CLAW
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FRENZY_PLANT
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_GRASS,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BULK_UP
+ .effect = EFFECT_BULK_UP,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BOUNCE
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 85,
+ .type = TYPE_FLYING,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MUD_SHOT
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 55,
+ .type = TYPE_GROUND,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_POISON_TAIL
+ .effect = EFFECT_POISON_TAIL,
+ .power = 50,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COVET
+ .effect = EFFECT_THIEF,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_VOLT_TACKLE
+ .effect = EFFECT_DOUBLE_EDGE,
+ .power = 120,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MAGICAL_LEAF
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WATER_SPORT
+ .effect = EFFECT_WATER_SPORT,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_CALM_MIND
+ .effect = EFFECT_CALM_MIND,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_LEAF_BLADE
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 70,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DRAGON_DANCE
+ .effect = EFFECT_DRAGON_DANCE,
+ .power = 0,
+ .type = TYPE_DRAGON,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_ROCK_BLAST
+ .effect = EFFECT_MULTI_HIT,
+ .power = 25,
+ .type = TYPE_ROCK,
+ .accuracy = 80,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SHOCK_WAVE
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WATER_PULSE
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 60,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DOOM_DESIRE
+ .effect = EFFECT_FUTURE_SIGHT,
+ .power = 120,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_PSYCHO_BOOST
+ .effect = EFFECT_OVERHEAT,
+ .power = 140,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+};
+
+#endif // GUARD_DATA_BATTLE_MOVES
diff --git a/include/data/text/abilities.h b/include/data/text/abilities.h
new file mode 100644
index 000000000..2efd76afc
--- /dev/null
+++ b/include/data/text/abilities.h
@@ -0,0 +1,247 @@
+#ifndef POKEEMERALD_DATA_TEXT_ABILITIES_H
+#define POKEEMERALD_DATA_TEXT_ABILITIES_H
+
+static const u8 gNoneAbilityDescription[] = _("No special ability.");
+static const u8 gStenchAbilityDescription[] = _("Helps repel wild POKéMON.");
+static const u8 gDrizzleAbilityDescription[] = _("Summons rain in battle.");
+static const u8 gSpeedBoostAbilityDescription[] = _("Gradually boosts SPEED.");
+static const u8 gBattleArmorAbilityDescription[] = _("Blocks critical hits.");
+static const u8 gSturdyAbilityDescription[] = _("Negates 1-hit KO attacks.");
+static const u8 gDampAbilityDescription[] = _("Prevents self-destruction.");
+static const u8 gLimberAbilityDescription[] = _("Prevents paralysis.");
+static const u8 gSandVeilAbilityDescription[] = _("Ups evasion in a sandstorm.");
+static const u8 gStaticAbilityDescription[] = _("Paralyzes on contact.");
+static const u8 gVoltAbsorbAbilityDescription[] = _("Turns electricity into HP.");
+static const u8 gWaterAbsorbAbilityDescription[] = _("Changes water into HP.");
+static const u8 gObliviousAbilityDescription[] = _("Prevents attraction.");
+static const u8 gCloudNineAbilityDescription[] = _("Negates weather effects.");
+static const u8 gCompoundEyesAbilityDescription[] = _("Raises accuracy.");
+static const u8 gInsomniaAbilityDescription[] = _("Prevents sleep.");
+static const u8 gColorChangeAbilityDescription[] = _("Changes type to foe’s move.");
+static const u8 gImmunityAbilityDescription[] = _("Prevents poisoning.");
+static const u8 gFlashFireAbilityDescription[] = _("Powers up if hit by fire.");
+static const u8 gShieldDustAbilityDescription[] = _("Prevents added effects.");
+static const u8 gOwnTempoAbilityDescription[] = _("Prevents confusion.");
+static const u8 gSuctionCupsAbilityDescription[] = _("Firmly anchors the body.");
+static const u8 gIntimidateAbilityDescription[] = _("Lowers the foe’s ATTACK.");
+static const u8 gShadowTagAbilityDescription[] = _("Prevents the foe’s escape.");
+static const u8 gRoughSkinAbilityDescription[] = _("Hurts to touch.");
+static const u8 gWonderGuardAbilityDescription[] = _("“Super effective” hits.");
+static const u8 gLevitateAbilityDescription[] = _("Not hit by GROUND attacks.");
+static const u8 gEffectSporeAbilityDescription[] = _("Leaves spores on contact.");
+static const u8 gSynchronizeAbilityDescription[] = _("Passes on status problems.");
+static const u8 gClearBodyAbilityDescription[] = _("Prevents ability reduction.");
+static const u8 gNaturalCureAbilityDescription[] = _("Heals upon switching out.");
+static const u8 gLightningRodAbilityDescription[] = _("Draws electrical moves.");
+static const u8 gSereneGraceAbilityDescription[] = _("Promotes added effects.");
+static const u8 gSwiftSwimAbilityDescription[] = _("Raises SPEED in rain.");
+static const u8 gChlorophyllAbilityDescription[] = _("Raises SPEED in sunshine.");
+static const u8 gIlluminateAbilityDescription[] = _("Encounter rate increases.");
+static const u8 gTraceAbilityDescription[] = _("Copies special ability.");
+static const u8 gHugePowerAbilityDescription[] = _("Raises ATTACK.");
+static const u8 gPoisonPointAbilityDescription[] = _("Poisons foe on contact.");
+static const u8 gInnerFocusAbilityDescription[] = _("Prevents flinching.");
+static const u8 gMagmaArmorAbilityDescription[] = _("Prevents freezing.");
+static const u8 gWaterVeilAbilityDescription[] = _("Prevents burns.");
+static const u8 gMagnetPullAbilityDescription[] = _("Traps STEEL-type POKéMON.");
+static const u8 gSoundproofAbilityDescription[] = _("Avoids sound-based moves.");
+static const u8 gRainDishAbilityDescription[] = _("Slight HP recovery in rain.");
+static const u8 gSandStreamAbilityDescription[] = _("Summons a sandstorm.");
+static const u8 gPressureAbilityDescription[] = _("Raises foe’s PP usage.");
+static const u8 gThickFatAbilityDescription[] = _("Heat-and-cold protection.");
+static const u8 gEarlyBirdAbilityDescription[] = _("Awakens quickly from sleep.");
+static const u8 gFlameBodyAbilityDescription[] = _("Burns the foe on contact.");
+static const u8 gRunAwayAbilityDescription[] = _("Makes escaping easier.");
+static const u8 gKeenEyeAbilityDescription[] = _("Prevents loss of accuracy.");
+static const u8 gHyperCutterAbilityDescription[] = _("Prevents ATTACK reduction.");
+static const u8 gPickupAbilityDescription[] = _("May pick up items.");
+static const u8 gTruantAbilityDescription[] = _("Moves only every two turns.");
+static const u8 gHustleAbilityDescription[] = _("Trades accuracy for power.");
+static const u8 gCuteCharmAbilityDescription[] = _("Infatuates on contact.");
+static const u8 gPlusAbilityDescription[] = _("Powers up with MINUS.");
+static const u8 gMinusAbilityDescription[] = _("Powers up with PLUS.");
+static const u8 gForecastAbilityDescription[] = _("Changes with the weather.");
+static const u8 gStickyHoldAbilityDescription[] = _("Prevents item theft.");
+static const u8 gShedSkinAbilityDescription[] = _("Heals the body by shedding.");
+static const u8 gGutsAbilityDescription[] = _("Ups ATTACK if suffering.");
+static const u8 gMarvelScaleAbilityDescription[] = _("Ups DEFENSE if suffering.");
+static const u8 gLiquidOozeAbilityDescription[] = _("Draining causes injury.");
+static const u8 gOvergrowAbilityDescription[] = _("Ups GRASS moves in a pinch.");
+static const u8 gBlazeAbilityDescription[] = _("Ups FIRE moves in a pinch.");
+static const u8 gTorrentAbilityDescription[] = _("Ups WATER moves in a pinch.");
+static const u8 gSwarmAbilityDescription[] = _("Ups BUG moves in a pinch.");
+static const u8 gRockHeadAbilityDescription[] = _("Prevents recoil damage.");
+static const u8 gDroughtAbilityDescription[] = _("Summons sunlight in battle.");
+static const u8 gArenaTrapAbilityDescription[] = _("Prevents fleeing.");
+static const u8 gVitalSpiritAbilityDescription[] = _("Prevents sleep.");
+static const u8 gWhiteSmokeAbilityDescription[] = _("Prevents ability reduction.");
+static const u8 gPurePowerAbilityDescription[] = _("Raises ATTACK.");
+static const u8 gShellArmorAbilityDescription[] = _("Blocks critical hits.");
+static const u8 gCacophonyAbilityDescription[] = _("Avoids sound-based moves.");
+static const u8 gAirLockAbilityDescription[] = _("Negates weather effects.");
+
+const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1] =
+{
+ _("-------"),
+ _("STENCH"),
+ _("DRIZZLE"),
+ _("SPEED BOOST"),
+ _("BATTLE ARMOR"),
+ _("STURDY"),
+ _("DAMP"),
+ _("LIMBER"),
+ _("SAND VEIL"),
+ _("STATIC"),
+ _("VOLT ABSORB"),
+ _("WATER ABSORB"),
+ _("OBLIVIOUS"),
+ _("CLOUD NINE"),
+ _("COMPOUNDEYES"),
+ _("INSOMNIA"),
+ _("COLOR CHANGE"),
+ _("IMMUNITY"),
+ _("FLASH FIRE"),
+ _("SHIELD DUST"),
+ _("OWN TEMPO"),
+ _("SUCTION CUPS"),
+ _("INTIMIDATE"),
+ _("SHADOW TAG"),
+ _("ROUGH SKIN"),
+ _("WONDER GUARD"),
+ _("LEVITATE"),
+ _("EFFECT SPORE"),
+ _("SYNCHRONIZE"),
+ _("CLEAR BODY"),
+ _("NATURAL CURE"),
+ _("LIGHTNINGROD"),
+ _("SERENE GRACE"),
+ _("SWIFT SWIM"),
+ _("CHLOROPHYLL"),
+ _("ILLUMINATE"),
+ _("TRACE"),
+ _("HUGE POWER"),
+ _("POISON POINT"),
+ _("INNER FOCUS"),
+ _("MAGMA ARMOR"),
+ _("WATER VEIL"),
+ _("MAGNET PULL"),
+ _("SOUNDPROOF"),
+ _("RAIN DISH"),
+ _("SAND STREAM"),
+ _("PRESSURE"),
+ _("THICK FAT"),
+ _("EARLY BIRD"),
+ _("FLAME BODY"),
+ _("RUN AWAY"),
+ _("KEEN EYE"),
+ _("HYPER CUTTER"),
+ _("PICKUP"),
+ _("TRUANT"),
+ _("HUSTLE"),
+ _("CUTE CHARM"),
+ _("PLUS"),
+ _("MINUS"),
+ _("FORECAST"),
+ _("STICKY HOLD"),
+ _("SHED SKIN"),
+ _("GUTS"),
+ _("MARVEL SCALE"),
+ _("LIQUID OOZE"),
+ _("OVERGROW"),
+ _("BLAZE"),
+ _("TORRENT"),
+ _("SWARM"),
+ _("ROCK HEAD"),
+ _("DROUGHT"),
+ _("ARENA TRAP"),
+ _("VITAL SPIRIT"),
+ _("WHITE SMOKE"),
+ _("PURE POWER"),
+ _("SHELL ARMOR"),
+ _("CACOPHONY"),
+ _("AIR LOCK"),
+};
+
+const u8 *const gAbilityDescriptionPointers[] =
+{
+ gNoneAbilityDescription,
+ gStenchAbilityDescription,
+ gDrizzleAbilityDescription,
+ gSpeedBoostAbilityDescription,
+ gBattleArmorAbilityDescription,
+ gSturdyAbilityDescription,
+ gDampAbilityDescription,
+ gLimberAbilityDescription,
+ gSandVeilAbilityDescription,
+ gStaticAbilityDescription,
+ gVoltAbsorbAbilityDescription,
+ gWaterAbsorbAbilityDescription,
+ gObliviousAbilityDescription,
+ gCloudNineAbilityDescription,
+ gCompoundEyesAbilityDescription,
+ gInsomniaAbilityDescription,
+ gColorChangeAbilityDescription,
+ gImmunityAbilityDescription,
+ gFlashFireAbilityDescription,
+ gShieldDustAbilityDescription,
+ gOwnTempoAbilityDescription,
+ gSuctionCupsAbilityDescription,
+ gIntimidateAbilityDescription,
+ gShadowTagAbilityDescription,
+ gRoughSkinAbilityDescription,
+ gWonderGuardAbilityDescription,
+ gLevitateAbilityDescription,
+ gEffectSporeAbilityDescription,
+ gSynchronizeAbilityDescription,
+ gClearBodyAbilityDescription,
+ gNaturalCureAbilityDescription,
+ gLightningRodAbilityDescription,
+ gSereneGraceAbilityDescription,
+ gSwiftSwimAbilityDescription,
+ gChlorophyllAbilityDescription,
+ gIlluminateAbilityDescription,
+ gTraceAbilityDescription,
+ gHugePowerAbilityDescription,
+ gPoisonPointAbilityDescription,
+ gInnerFocusAbilityDescription,
+ gMagmaArmorAbilityDescription,
+ gWaterVeilAbilityDescription,
+ gMagnetPullAbilityDescription,
+ gSoundproofAbilityDescription,
+ gRainDishAbilityDescription,
+ gSandStreamAbilityDescription,
+ gPressureAbilityDescription,
+ gThickFatAbilityDescription,
+ gEarlyBirdAbilityDescription,
+ gFlameBodyAbilityDescription,
+ gRunAwayAbilityDescription,
+ gKeenEyeAbilityDescription,
+ gHyperCutterAbilityDescription,
+ gPickupAbilityDescription,
+ gTruantAbilityDescription,
+ gHustleAbilityDescription,
+ gCuteCharmAbilityDescription,
+ gPlusAbilityDescription,
+ gMinusAbilityDescription,
+ gForecastAbilityDescription,
+ gStickyHoldAbilityDescription,
+ gShedSkinAbilityDescription,
+ gGutsAbilityDescription,
+ gMarvelScaleAbilityDescription,
+ gLiquidOozeAbilityDescription,
+ gOvergrowAbilityDescription,
+ gBlazeAbilityDescription,
+ gTorrentAbilityDescription,
+ gSwarmAbilityDescription,
+ gRockHeadAbilityDescription,
+ gDroughtAbilityDescription,
+ gArenaTrapAbilityDescription,
+ gVitalSpiritAbilityDescription,
+ gWhiteSmokeAbilityDescription,
+ gPurePowerAbilityDescription,
+ gShellArmorAbilityDescription,
+ gCacophonyAbilityDescription,
+ gAirLockAbilityDescription,
+};
+
+#endif // POKEEMERALD_DATA_TEXT_ABILITIES_H
diff --git a/include/data2.h b/include/data2.h
index df71f6e88..d71958201 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -14,8 +14,6 @@ extern struct MonCoords gTrainerFrontPicCoords[];
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
extern const u8 gMoveNames[][13];
-extern const u8 gAbilityNames[][13];
-extern const u8 gTypeNames[][7];
extern struct CompressedSpriteSheet gUnknown_0831C620;
extern struct CompressedSpritePalette gUnknown_0831C628;
extern const struct SpriteTemplate gUnknown_0831C688;
diff --git a/include/global.tv.h b/include/global.tv.h
index 5f65aa8e0..81f181cf3 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -188,11 +188,11 @@ typedef union // size = 0x24
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
- /*0x02*/ u16 species;
+ /*0x02*/ u16 speciesOpponent;
/*0x04*/ u8 playerName[8];
/*0x0C*/ u8 linkOpponentName[8];
/*0x14*/ u16 move;
- /*0x16*/ u16 species2;
+ /*0x16*/ u16 speciesPlayer;
/*0x18*/ u8 battleType;
/*0x19*/ u8 language;
/*0x1A*/ u8 linkOpponentLanguage;
diff --git a/include/gym_leader_rematch.h b/include/gym_leader_rematch.h
new file mode 100644
index 000000000..ef0e5fef1
--- /dev/null
+++ b/include/gym_leader_rematch.h
@@ -0,0 +1,87 @@
+#ifndef GUARD_TRAINER_REMATCH_H
+#define GUARD_TRAINER_REMATCH_H
+
+enum {
+ REMATCH_ROSE,
+ REMATCH_ANDRES,
+ REMATCH_DUSTY,
+ REMATCH_LOLA,
+ REMATCH_RICKY,
+ REMATCH_LILA_AND_ROY,
+ REMATCH_CRISTIN,
+ REMATCH_BROOKE,
+ REMATCH_WILTON,
+ REMATCH_VALERIE,
+ REMATCH_CINDY,
+ REMATCH_THALIA,
+ REMATCH_JESSICA,
+ REMATCH_WINSTON,
+ REMATCH_STEVE,
+ REMATCH_TONY,
+ REMATCH_NOB,
+ REMATCH_KOJI,
+ REMATCH_FERNANDO,
+ REMATCH_DALTON,
+ REMATCH_BERNIE,
+ REMATCH_ETHAN,
+ REMATCH_JOHN_AND_JAY,
+ REMATCH_JEFFREY,
+ REMATCH_CAMERON,
+ REMATCH_JACKI,
+ REMATCH_WALTER,
+ REMATCH_KAREN,
+ REMATCH_JERRY,
+ REMATCH_ANNA_AND_MEG,
+ REMATCH_ISABEL,
+ REMATCH_MIGUEL,
+ REMATCH_TIMOTHY,
+ REMATCH_SHELBY,
+ REMATCH_CALVIN,
+ REMATCH_ELLIOT,
+ REMATCH_ISAIAH,
+ REMATCH_MARIA,
+ REMATCH_ABIGAIL,
+ REMATCH_DYLAN,
+ REMATCH_KATELYN,
+ REMATCH_BENJAMIN,
+ REMATCH_PABLO,
+ REMATCH_NICOLAS,
+ REMATCH_ROBERT,
+ REMATCH_LAO,
+ REMATCH_CYNDY,
+ REMATCH_MADELINE,
+ REMATCH_JENNY,
+ REMATCH_DIANA,
+ REMATCH_AMY_AND_LIV,
+ REMATCH_ERNEST,
+ REMATCH_CORY,
+ REMATCH_EDWIN,
+ REMATCH_LYDIA,
+ REMATCH_ISAAC,
+ REMATCH_GABRIELLE,
+ REMATCH_CATHERINE,
+ REMATCH_JACKSON,
+ REMATCH_HALEY,
+ REMATCH_JAMES,
+ REMATCH_TRENT,
+ REMATCH_SAWYER,
+ REMATCH_KIRA_AND_DAN,
+ REMATCH_WALLY_3,
+ REMATCH_ROXANNE,
+ REMATCH_BRAWLY,
+ REMATCH_WATTSON,
+ REMATCH_FLANNERY,
+ REMATCH_NORMAN,
+ REMATCH_WINONA,
+ REMATCH_TATE_AND_LIZA,
+ REMATCH_JUAN,
+ REMATCH_SIDNEY,
+ REMATCH_PHOEBE,
+ REMATCH_GLACIA,
+ REMATCH_DRAKE,
+ REMATCH_WALLACE
+};
+
+void UpdateGymLeaderRematch(void);
+
+#endif //GUARD_TRAINER_REMATCH_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 6df9ce313..cd79a217d 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -468,6 +468,7 @@ extern struct Pokemon gEnemyParty[PARTY_SIZE];
extern struct SpriteTemplate gUnknown_0202499C;
extern struct PokemonStorage* gPokemonStoragePtr;
+extern const struct BattleMove gBattleMoves[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
extern const struct BaseStats gBaseStats[];
diff --git a/include/tv.h b/include/tv.h
index eca11385e..19c900ba8 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -4,17 +4,46 @@
extern u8 *const gTVStringVarPtrs[3];
void ClearTVShowData(void);
-void PutPokemonTodayCaughtOnAir(void);
+void sub_80EE184(void);
+void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove);
+void sub_80EE8C8(u16 winStreak, u8 facility);
+void DoTVShow(void);
+void DoTVShowInSearchOfTrainers(void);
+void sub_80EDCE8(void);
+void sub_80EE2CC(void);
+void sub_80EE72C(void);
+void sub_80EED10(void);
+void sub_80EED34(void);
+void sub_80EED60(u16 delta);
+void sub_80F01B8(void);
+void sub_80F01E8(void *src, u32 size, u8 masterIdx);
+void sub_80EE4DC(struct Pokemon *pokemon, u8 ribbonMonDataIdx);
u32 GetPlayerIDAsU32(void);
bool8 GetPriceReduction(u8 newsKind);
+void sub_80F14F8(TVShow *shows);
+size_t CountDigits(int value);
u8 GetRibbonCount(struct Pokemon *pokemon);
-void TV_PutSecretBaseVisitOnTheAir(void);
-void sub_80EE184(void);
+void sub_80EDE70(u16 nCoinsSpent);
+void sub_80EDE84(u16 nCoinsSpent);
+void sub_80EDD78(u16 nCoinsPaidOut);
void sub_80EEA70(void);
-void sub_80F14F8(TVShow *shows);
-size_t sub_80EF370(int value);
-bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
+void sub_80EDB44(void);
+void sub_80EDC60(const u16 *words);
+void sub_80EDA80(void);
+void sub_80F0C7C(void *src, u32 size, u8 masterIdx);
+void sub_80F0BB8(void);
+void sub_80ED950(bool8 flag);
+void sub_80EEC80(void);
+void sub_80EECA4(void);
+void sub_80EECC8(void);
+void sub_80EECEC(void);
+void sub_80F1208(TVShow *shows);
+void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed);
void SetPokemonAnglerSpecies(u16 species);
void UpdateTVShowsPerDay(u16 days);
+void PutPokemonTodayCaughtOnAir(void);
+void TV_PutSecretBaseVisitOnTheAir(void);
+bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
+void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent);
#endif //GUARD_TV_H
diff --git a/ld_script.txt b/ld_script.txt
index c0b5d97eb..7dcf21569 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -47,7 +47,7 @@ SECTIONS {
src/dma3_manager.o(.text);
src/gpu_regs.o(.text);
src/bg.o(.text);
- asm/blit.o(.text);
+ src/blit.o(.text);
src/window.o(.text);
src/text.o(.text);
src/sprite.o(.text);
@@ -236,7 +236,7 @@ SECTIONS {
src/evolution_graphics.o(.text);
src/bard_music.o(.text);
src/fldeff_teleport.o(.text);
- asm/battle_link_817C95C.o(.text);
+ src/battle_tv.o(.text);
src/pokemon_animation.o(.text);
src/recorded_battle.o(.text);
src/battle_controller_recorded_opponent.o(.text);
@@ -268,7 +268,7 @@ SECTIONS {
src/rayquaza_scene.o(.text);
src/walda_phrase.o(.text);
asm/contest_link_81D9DE4.o(.text);
- asm/trainer_rematch.o(.text);
+ src/gym_leader_rematch.o(.text);
src/unk_transition.o(.text);
src/international_string_util.o(.text);
asm/international_string_util.o(.text);
@@ -382,7 +382,6 @@ SECTIONS {
data/smokescreen.o(.rodata);
src/battle_controller_opponent.o(.rodata);
src/battle_controller_link_opponent.o(.rodata);
- data/data2c.o(.rodata);
src/pokemon.o(.rodata);
src/trig.o(.rodata);
src/util.o(.rodata);
@@ -512,7 +511,7 @@ SECTIONS {
src/intro_credits_graphics.o(.rodata);
src/evolution_graphics.o(.rodata);
src/bard_music.o(.rodata);
- data/battle_link_817C95C.o(.rodata);
+ src/battle_tv.o(.rodata);
src/pokemon_animation.o(.rodata);
src/battle_controller_recorded_opponent.o(.rodata);
src/battle_controller_recorded_player.o(.rodata);
@@ -538,7 +537,7 @@ SECTIONS {
data/pokenav.o(.rodata);
src/rayquaza_scene.o(.rodata);
src/walda_phrase.o(.rodata);
- data/trainer_rematch.o(.rodata);
+ src/gym_leader_rematch.o(.rodata);
data/unk_transition.o(.rodata);
src/unk_transition.o(.rodata);
data/text_input_strings.o(.rodata);
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index d6ccf9305..46fe7a89c 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -45,7 +45,6 @@ in order to read the next command correctly. refer to battle_ai_scripts.s for th
AI scripts.
*/
-extern const struct BattleMove gBattleMoves[];
extern const u8 * const gBattleAI_ScriptsTable[];
extern u32 GetAiScriptsInRecordedBattle();
@@ -346,7 +345,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves)
}
gBattleResources->AI_ScriptsStack->size = 0;
sBattler_AI = gActiveBattler;
- // decide a random target bank in doubles
+ // decide a random target battlerId in doubles
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
gBattlerTarget = (Random() & BIT_FLANK) + (GetBattlerSide(gActiveBattler) ^ BIT_SIDE);
@@ -620,32 +619,32 @@ static void RecordLastUsedMoveByTarget(void)
}
}
-void ClearBattlerMoveHistory(u8 bank)
+void ClearBattlerMoveHistory(u8 battlerId)
{
s32 i;
for (i = 0; i < 4; i++)
- gBattleResources->battleHistory->usedMoves[bank].moves[i] = 0;
+ gBattleResources->battleHistory->usedMoves[battlerId].moves[i] = 0;
}
-void RecordAbilityBattle(u8 bank, u8 abilityId)
+void RecordAbilityBattle(u8 battlerId, u8 abilityId)
{
- gBattleResources->battleHistory->abilities[bank] = abilityId;
+ gBattleResources->battleHistory->abilities[battlerId] = abilityId;
}
-void ClearBattlerAbilityHistory(u8 bank)
+void ClearBattlerAbilityHistory(u8 battlerId)
{
- gBattleResources->battleHistory->abilities[bank] = 0;
+ gBattleResources->battleHistory->abilities[battlerId] = 0;
}
-void RecordItemEffectBattle(u8 bank, u8 itemEffect)
+void RecordItemEffectBattle(u8 battlerId, u8 itemEffect)
{
- gBattleResources->battleHistory->itemEffects[bank] = itemEffect;
+ gBattleResources->battleHistory->itemEffects[battlerId] = itemEffect;
}
-void ClearBankItemEffectHistory(u8 bank)
+void ClearBankItemEffectHistory(u8 battlerId)
{
- gBattleResources->battleHistory->itemEffects[bank] = 0;
+ gBattleResources->battleHistory->itemEffects[battlerId] = 0;
}
static void BattleAICmd_if_random_less_than(void)
@@ -700,14 +699,14 @@ static void BattleAICmd_score(void)
static void BattleAICmd_if_hp_less_than(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) < gAIScriptPtr[2])
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < gAIScriptPtr[2])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
@@ -715,14 +714,14 @@ static void BattleAICmd_if_hp_less_than(void)
static void BattleAICmd_if_hp_more_than(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) > gAIScriptPtr[2])
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > gAIScriptPtr[2])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
@@ -730,14 +729,14 @@ static void BattleAICmd_if_hp_more_than(void)
static void BattleAICmd_if_hp_equal(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) == gAIScriptPtr[2])
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == gAIScriptPtr[2])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
@@ -745,14 +744,14 @@ static void BattleAICmd_if_hp_equal(void)
static void BattleAICmd_if_hp_not_equal(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) != gAIScriptPtr[2])
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != gAIScriptPtr[2])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
@@ -760,17 +759,17 @@ static void BattleAICmd_if_hp_not_equal(void)
static void BattleAICmd_if_status(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
status = AIScriptRead32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status1 & status) != 0)
+ if ((gBattleMons[battlerId].status1 & status) != 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -778,17 +777,17 @@ static void BattleAICmd_if_status(void)
static void BattleAICmd_if_not_status(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
status = AIScriptRead32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status1 & status) == 0)
+ if ((gBattleMons[battlerId].status1 & status) == 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -796,17 +795,17 @@ static void BattleAICmd_if_not_status(void)
static void BattleAICmd_if_status2(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
status = AIScriptRead32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status2 & status) != 0)
+ if ((gBattleMons[battlerId].status2 & status) != 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -814,17 +813,17 @@ static void BattleAICmd_if_status2(void)
static void BattleAICmd_if_not_status2(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
status = AIScriptRead32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status2 & status) == 0)
+ if ((gBattleMons[battlerId].status2 & status) == 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -832,17 +831,17 @@ static void BattleAICmd_if_not_status2(void)
static void BattleAICmd_if_status3(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
status = AIScriptRead32(gAIScriptPtr + 2);
- if ((gStatuses3[bank] & status) != 0)
+ if ((gStatuses3[battlerId] & status) != 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -850,17 +849,17 @@ static void BattleAICmd_if_status3(void)
static void BattleAICmd_if_not_status3(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
status = AIScriptRead32(gAIScriptPtr + 2);
- if ((gStatuses3[bank] & status) == 0)
+ if ((gStatuses3[battlerId] & status) == 0)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -868,15 +867,15 @@ static void BattleAICmd_if_not_status3(void)
static void BattleAICmd_if_side_affecting(void)
{
- u16 bank;
+ u16 battlerId;
u32 side, status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- side = GET_BATTLER_SIDE(bank);
+ side = GET_BATTLER_SIDE(battlerId);
status = AIScriptRead32(gAIScriptPtr + 2);
if ((gSideStatuses[side] & status) != 0)
@@ -887,15 +886,15 @@ static void BattleAICmd_if_side_affecting(void)
static void BattleAICmd_if_not_side_affecting(void)
{
- u16 bank;
+ u16 battlerId;
u32 side, status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- side = GET_BATTLER_SIDE(bank);
+ side = GET_BATTLER_SIDE(battlerId);
status = AIScriptRead32(gAIScriptPtr + 2);
if ((gSideStatuses[side] & status) == 0)
@@ -1123,9 +1122,9 @@ static void BattleAICmd_get_type(void)
gAIScriptPtr += 2;
}
-static u8 BattleAI_GetWantedBank(u8 bank)
+static u8 BattleAI_GetWantedBank(u8 battlerId)
{
- switch (bank)
+ switch (battlerId)
{
case AI_USER:
return sBattler_AI;
@@ -1141,9 +1140,9 @@ static u8 BattleAI_GetWantedBank(u8 bank)
static void BattleAICmd_is_of_type(void)
{
- u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
- if(gBattleMons[bank].type1 == gAIScriptPtr[2] || gBattleMons[bank].type2 == gAIScriptPtr[2])
+ if(gBattleMons[battlerId].type1 == gAIScriptPtr[2] || gBattleMons[battlerId].type2 == gAIScriptPtr[2])
{
AI_THINKING_STRUCT->funcResult = TRUE;
}
@@ -1277,7 +1276,7 @@ static void BattleAICmd_nullsub_2B(void)
static void BattleAICmd_count_usable_party_mons(void)
{
- u8 bank;
+ u8 battlerId;
u8 bankOnField1, bankOnField2;
struct Pokemon *party;
int i;
@@ -1285,11 +1284,11 @@ static void BattleAICmd_count_usable_party_mons(void)
AI_THINKING_STRUCT->funcResult = 0;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
@@ -1297,14 +1296,14 @@ static void BattleAICmd_count_usable_party_mons(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u32 position;
- bankOnField1 = gBattlerPartyIndexes[bank];
- position = GetBattlerPosition(bank) ^ BIT_FLANK;
+ bankOnField1 = gBattlerPartyIndexes[battlerId];
+ position = GetBattlerPosition(battlerId) ^ BIT_FLANK;
bankOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];
}
- else // in singles there's only one bank by side
+ else // in singles there's only one battlerId by side
{
- bankOnField1 = gBattlerPartyIndexes[bank];
- bankOnField2 = gBattlerPartyIndexes[bank];
+ bankOnField1 = gBattlerPartyIndexes[battlerId];
+ bankOnField2 = gBattlerPartyIndexes[battlerId];
}
for (i = 0; i < PARTY_SIZE; i++)
@@ -1335,110 +1334,110 @@ static void BattleAICmd_get_considered_move_effect(void)
static void BattleAICmd_get_ability(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gActiveBattler != bank)
+ if (gActiveBattler != battlerId)
{
- if (BATTLE_HISTORY->abilities[bank] != 0)
+ if (BATTLE_HISTORY->abilities[battlerId] != 0)
{
- AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[bank];
+ AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[battlerId];
gAIScriptPtr += 2;
return;
}
// abilities that prevent fleeing.
- if (gBattleMons[bank].ability == ABILITY_SHADOW_TAG
- || gBattleMons[bank].ability == ABILITY_MAGNET_PULL
- || gBattleMons[bank].ability == ABILITY_ARENA_TRAP)
+ if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
+ || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
+ || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
{
- AI_THINKING_STRUCT->funcResult = gBattleMons[bank].ability;
+ AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
gAIScriptPtr += 2;
return;
}
- if (gBaseStats[gBattleMons[bank].species].ability1 != ABILITY_NONE)
+ if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE)
{
- if (gBaseStats[gBattleMons[bank].species].ability2 != ABILITY_NONE)
+ if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE)
{
// AI has no knowledge of opponent, so it guesses which ability.
if (Random() & 1)
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability1;
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1;
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability2;
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2;
}
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability1; // it's definitely ability 1.
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1; // it's definitely ability 1.
}
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
}
}
else
{
// The AI knows its own ability.
- AI_THINKING_STRUCT->funcResult = gBattleMons[bank].ability;
+ AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
}
gAIScriptPtr += 2;
}
static void BattleAICmd_check_ability(void)
{
- u32 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u32 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
u32 ability = gAIScriptPtr[2];
if (gAIScriptPtr[1] == AI_TARGET || gAIScriptPtr[1] == AI_TARGET_PARTNER)
{
- if (BATTLE_HISTORY->abilities[bank] != 0)
+ if (BATTLE_HISTORY->abilities[battlerId] != 0)
{
- ability = BATTLE_HISTORY->abilities[bank];
+ ability = BATTLE_HISTORY->abilities[battlerId];
AI_THINKING_STRUCT->funcResult = ability;
}
// abilities that prevent fleeing.
- else if (gBattleMons[bank].ability == ABILITY_SHADOW_TAG
- || gBattleMons[bank].ability == ABILITY_MAGNET_PULL
- || gBattleMons[bank].ability == ABILITY_ARENA_TRAP)
+ else if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
+ || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
+ || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
{
- ability = gBattleMons[bank].ability;
+ ability = gBattleMons[battlerId].ability;
}
- else if (gBaseStats[gBattleMons[bank].species].ability1 != ABILITY_NONE)
+ else if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE)
{
- if (gBaseStats[gBattleMons[bank].species].ability2 != ABILITY_NONE)
+ if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE)
{
u8 abilityDummyVariable = ability; // needed to match
- if (gBaseStats[gBattleMons[bank].species].ability1 != abilityDummyVariable
- && gBaseStats[gBattleMons[bank].species].ability2 != abilityDummyVariable)
+ if (gBaseStats[gBattleMons[battlerId].species].ability1 != abilityDummyVariable
+ && gBaseStats[gBattleMons[battlerId].species].ability2 != abilityDummyVariable)
{
- ability = gBaseStats[gBattleMons[bank].species].ability1;
+ ability = gBaseStats[gBattleMons[battlerId].species].ability1;
}
else
ability = 0;
}
else
{
- ability = gBaseStats[gBattleMons[bank].species].ability1;
+ ability = gBaseStats[gBattleMons[battlerId].species].ability1;
}
}
else
{
- ability = gBaseStats[gBattleMons[bank].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
+ ability = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
}
}
else
{
// The AI knows its own or partner's ability.
- ability = gBattleMons[bank].ability;
+ ability = gBattleMons[battlerId].ability;
}
if (ability == 0)
{
@@ -1546,19 +1545,19 @@ static void BattleAICmd_if_status_in_party(void)
struct Pokemon *party;
int i;
u32 statusToCompareTo;
- u8 bank;
+ u8 battlerId;
switch(gAIScriptPtr[1])
{
case AI_USER:
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
break;
default:
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
break;
}
- party = (GetBattlerSide(bank) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
+ party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2);
@@ -1583,19 +1582,19 @@ static void BattleAICmd_if_status_not_in_party(void)
struct Pokemon *party;
int i;
u32 statusToCompareTo;
- u8 bank;
+ u8 battlerId;
switch(gAIScriptPtr[1])
{
case 1:
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
break;
default:
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
break;
}
- party = (GetBattlerSide(bank) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
+ party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2);
@@ -1646,14 +1645,14 @@ static void BattleAICmd_if_not_effect(void)
static void BattleAICmd_if_stat_level_less_than(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
@@ -1661,14 +1660,14 @@ static void BattleAICmd_if_stat_level_less_than(void)
static void BattleAICmd_if_stat_level_more_than(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
@@ -1676,14 +1675,14 @@ static void BattleAICmd_if_stat_level_more_than(void)
static void BattleAICmd_if_stat_level_equal(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
@@ -1691,14 +1690,14 @@ static void BattleAICmd_if_stat_level_equal(void)
static void BattleAICmd_if_stat_level_not_equal(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
@@ -1940,16 +1939,16 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void)
static void BattleAICmd_if_any_move_disabled_or_encored(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
if (gAIScriptPtr[2] == 0)
{
- if (gDisableStructs[bank].disabledMove == 0)
+ if (gDisableStructs[battlerId].disabledMove == 0)
{
gAIScriptPtr += 7;
return;
@@ -1962,7 +1961,7 @@ static void BattleAICmd_if_any_move_disabled_or_encored(void)
gAIScriptPtr += 7;
return;
}
- else if (gDisableStructs[bank].encoredMove != 0)
+ else if (gDisableStructs[battlerId].encoredMove != 0)
{
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
return;
@@ -2018,31 +2017,31 @@ static void BattleAICmd_watch(void)
static void BattleAICmd_get_hold_effect(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gActiveBattler != bank)
- AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[bank]);
+ if (gActiveBattler != battlerId)
+ AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[battlerId]);
else
- AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[bank].item);
+ AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
gAIScriptPtr += 2;
}
static void BattleAICmd_if_holds_item(void)
{
- u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
u16 item;
u8 var1, var2;
- if ((bank & BIT_SIDE) == (sBattler_AI & BIT_SIDE))
- item = gBattleMons[bank].item;
+ if ((battlerId & BIT_SIDE) == (sBattler_AI & BIT_SIDE))
+ item = gBattleMons[battlerId].item;
else
- item = BATTLE_HISTORY->itemEffects[bank];
+ item = BATTLE_HISTORY->itemEffects[battlerId];
// UB: doesn't properly read an unaligned u16
var2 = gAIScriptPtr[2];
@@ -2056,42 +2055,42 @@ static void BattleAICmd_if_holds_item(void)
static void BattleAICmd_get_gender(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[bank].species, gBattleMons[bank].personality);
+ AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerId].species, gBattleMons[battlerId].personality);
gAIScriptPtr += 2;
}
static void BattleAICmd_is_first_turn_for(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].isFirstTurn;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].isFirstTurn;
gAIScriptPtr += 2;
}
static void BattleAICmd_get_stockpile_count(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].stockpileCounter;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].stockpileCounter;
gAIScriptPtr += 2;
}
@@ -2105,18 +2104,18 @@ static void BattleAICmd_is_double_battle(void)
static void BattleAICmd_get_used_held_item(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
// This is likely a leftover from Ruby's code and its ugly ewram access
#ifdef NONMATCHING
- AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[bank];
+ AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[battlerId];
#else
- AI_THINKING_STRUCT->funcResult = *(u8*)((u8*)(gBattleStruct) + offsetof(struct BattleStruct, usedHeldItems) + (bank * 2));
+ AI_THINKING_STRUCT->funcResult = *(u8*)((u8*)(gBattleStruct) + offsetof(struct BattleStruct, usedHeldItems) + (battlerId * 2));
#endif // NONMATCHING
gAIScriptPtr += 2;
@@ -2145,14 +2144,14 @@ static void BattleAICmd_get_move_effect_from_result(void)
static void BattleAICmd_get_protect_count(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].protectUses;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].protectUses;
gAIScriptPtr += 2;
}
@@ -2255,9 +2254,9 @@ static void BattleAICmd_if_target_is_ally(void)
static void BattleAICmd_if_flash_fired(void)
{
- u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
- if (gBattleResources->flags->flags[bank] & UNKNOWN_FLAG_FLASH_FIRE)
+ if (gBattleResources->flags->flags[battlerId] & UNKNOWN_FLAG_FLASH_FIRE)
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index c3bb0d422..5426cc774 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -9,8 +9,6 @@
#include "util.h"
#include "constants/items.h"
-extern const struct BattleMove gBattleMoves[];
-extern const u8 gTypeEffectiveness[];
extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared
// this file's functions
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index a399adf25..cc6528f5f 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -32,7 +32,6 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
@@ -1414,7 +1413,7 @@ static void LinkOpponentHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -1478,7 +1477,7 @@ static void LinkOpponentHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
}
static void LinkOpponentHandlePrintSelectionString(void)
@@ -1831,7 +1830,7 @@ static void LinkOpponentHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 1734abe62..6ca50dc5c 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -31,7 +31,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
@@ -1238,7 +1237,7 @@ static void LinkPartnerHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -1302,7 +1301,7 @@ static void LinkPartnerHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
}
static void LinkPartnerHandlePrintSelectionString(void)
@@ -1666,7 +1665,7 @@ static void LinkPartnerHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 26e0191cb..e88b586b1 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "battle_ai_script_commands.h"
#include "pokemon.h"
#include "link.h"
@@ -35,7 +35,6 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
@@ -1563,7 +1562,7 @@ static void OpponentHandleChooseMove(void)
BtlController_EmitTwoReturnValues(1, 15, gBattlerTarget);
break;
default:
- if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_x10))
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
gBattlerTarget = gActiveBattler;
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
{
@@ -1585,7 +1584,7 @@ static void OpponentHandleChooseMove(void)
move = moveInfo->moves[chosenMoveId];
} while (move == MOVE_NONE);
- if (gBattleMoves[move].target & (MOVE_TARGET_USER | MOVE_TARGET_x10))
+ if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gActiveBattler << 8));
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (GetBattlerAtPosition(Random() & 2) << 8));
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 8847715f6..3a6aa4a6e 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -42,8 +42,6 @@ extern struct SpriteTemplate gUnknown_0202499C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const u8 gTypeNames[][7];
-extern const struct BattleMove gBattleMoves[];
extern const u8 gText_BattleSwitchWhich[];
extern const u8 gText_MoveInterfacePP[];
@@ -432,7 +430,7 @@ static void HandleInputChooseTarget(void)
case B_POSITION_PLAYER_RIGHT:
if (gActiveBattler != gMultiUsePlayerCursor)
i++;
- else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER)
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
i++;
break;
case B_POSITION_OPPONENT_LEFT:
@@ -474,7 +472,7 @@ static void HandleInputChooseTarget(void)
case B_POSITION_PLAYER_RIGHT:
if (gActiveBattler != gMultiUsePlayerCursor)
i++;
- else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER)
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
i++;
break;
case B_POSITION_OPPONENT_LEFT:
@@ -508,7 +506,7 @@ static void HandleInputChooseMove(void)
if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE)
{
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
- moveTarget = MOVE_TARGET_x10;
+ moveTarget = MOVE_TARGET_USER;
else
moveTarget = MOVE_TARGET_SELECTED;
}
@@ -517,26 +515,26 @@ static void HandleInputChooseMove(void)
moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
}
- if (moveTarget & MOVE_TARGET_x10)
+ if (moveTarget & MOVE_TARGET_USER)
gMultiUsePlayerCursor = gActiveBattler;
else
gMultiUsePlayerCursor = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE);
if (!gBattleBufferA[gActiveBattler][1]) // not a double battle
{
- if (moveTarget & MOVE_TARGET_USER && !gBattleBufferA[gActiveBattler][2])
+ if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleBufferA[gActiveBattler][2])
canSelectTarget++;
}
else // double battle
{
- if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_x10)))
+ if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
canSelectTarget++; // either selected or user
if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0)
{
canSelectTarget = FALSE;
}
- else if (!(moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
+ else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
{
gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler);
canSelectTarget = FALSE;
@@ -552,7 +550,7 @@ static void HandleInputChooseMove(void)
{
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
- if (moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
+ if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
gMultiUsePlayerCursor = gActiveBattler;
else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)])
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
@@ -881,7 +879,7 @@ static void sub_80586F8(void)
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
if (gBattleOutcome == B_OUTCOME_WON)
- sub_817E3F4();
+ TryPutLinkBattleTvShowOnAir();
FreeAllWindowBuffers();
}
}
@@ -894,7 +892,7 @@ static void sub_80586F8(void)
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
if (gBattleOutcome == B_OUTCOME_WON)
- sub_817E3F4();
+ TryPutLinkBattleTvShowOnAir();
FreeAllWindowBuffers();
}
}
@@ -2484,7 +2482,7 @@ static void PlayerHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -2548,7 +2546,7 @@ static void PlayerHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
sub_81A57E4(gActiveBattler, *stringId);
}
@@ -2575,7 +2573,7 @@ static void PlayerHandleChooseAction(void)
s32 i;
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
- sub_817F2A8();
+ BattleTv_ClearExplosionFaintCause();
BattleHandleAddTextPrinter(gText_BattleMenu, 2);
for (i = 0; i < 4; i++)
@@ -3069,7 +3067,7 @@ static void PlayerHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index d2f85f85e..7569604d8 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -31,7 +31,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
extern void sub_81358F4(void);
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
@@ -1521,7 +1520,7 @@ static void PlayerPartnerHandleChooseMove(void)
BattleAI_SetupAIData(0xF);
chosenMoveId = BattleAI_ChooseMoveOrAction();
- if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
gBattlerTarget = gActiveBattler;
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
{
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 2295c4a75..ded65828b 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "recorded_battle.h"
#include "pokemon.h"
#include "link.h"
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 0d06e26eb..c1e5447a4 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -34,7 +34,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 445feaf7a..0d18de0e4 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 3c8b1563f..8bd654c29 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -36,7 +36,6 @@ extern u8 gBattleBuffersTransferData[0x100];
static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {};
-extern const struct BattleMove gBattleMoves[];
extern void task00_08081A90(u8 taskId); // cable_club
extern void sub_81B8D64(u8 bank, u8 arg1); // party_menu
@@ -97,7 +96,6 @@ void SetUpBattleVarsAndBirchZigzagoon(void)
void sub_8032768(void)
{
s32 i;
- u8 *data;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
sub_8184DA4(1);
@@ -120,11 +118,11 @@ void sub_8032768(void)
sub_81B8D64(i, 0);
}
- for (i = 0; i < sizeof(gBattleStruct->field_1A4); i++)
- *(gBattleStruct->field_1A4 + i) = 0;
+ for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++)
+ *((u8*)(&gBattleStruct->tvMovePoints) + i) = 0;
- for (i = 0; i < sizeof(gBattleStruct->field_204); i++)
- *(gBattleStruct->field_204 + i) = 0;
+ for (i = 0; i < sizeof(gBattleStruct->tv); i++)
+ *((u8*)(&gBattleStruct->tv) + i) = 0;
}
static void InitSinglePlayerBtlControllers(void)
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 4dc88ab6a..d2c242553 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -28,7 +28,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern const struct BattleMove gBattleMoves[];
extern const u8 gUnknown_0831C604[];
extern const u8 * const gBattleAnims_VariousTable[];
extern const u8 * const gBattleAnims_Special[];
@@ -237,7 +236,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
if (moveInfo->moves[chosenMoveId] == MOVE_CURSE)
{
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
- var1 = MOVE_TARGET_x10;
+ var1 = MOVE_TARGET_USER;
else
var1 = MOVE_TARGET_SELECTED;
}
@@ -246,7 +245,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
var1 = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
}
- if (var1 & MOVE_TARGET_x10)
+ if (var1 & MOVE_TARGET_USER)
chosenMoveId |= (gActiveBattler << 8);
else if (var1 == MOVE_TARGET_SELECTED)
chosenMoveId |= (BattlePalaceGetTargetRetValue());
@@ -261,7 +260,7 @@ static u8 sub_805D4A8(u16 move)
switch (gBattleMoves[move].target)
{
case MOVE_TARGET_SELECTED:
- case MOVE_TARGET_USER:
+ case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_RANDOM:
case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY:
@@ -273,7 +272,7 @@ static u8 sub_805D4A8(u16 move)
case MOVE_TARGET_DEPENDS:
case MOVE_TARGET_OPPONENTS_FIELD:
return 2;
- case MOVE_TARGET_x10:
+ case MOVE_TARGET_USER:
return 1;
default:
return 0;
diff --git a/src/battle_main.c b/src/battle_main.c
index 78b69212d..9715221ba 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -81,7 +81,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern u8 gUnknown_0203CF00[];
-extern const struct BattleMove gBattleMoves[];
extern const u16 gBattleTextboxPalette[]; // battle textbox palette
extern const struct BgTemplate gUnknown_0831AA08[];
extern const struct WindowTemplate * const gUnknown_0831ABA0[];
@@ -301,6 +300,214 @@ u8 gNumberOfMovesToChoose;
u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
// rom const data
+
+// format: attacking type, defending type, damage multiplier
+// the multiplier is a (decimal) fixed-point number:
+// 20 is ×2.0 TYPE_MUL_SUPER_EFFECTIVE
+// 10 is ×1.0 TYPE_MUL_NORMAL
+// 05 is ×0.5 TYPE_MUL_NOT_EFFECTIVE
+// 00 is ×0.0 TYPE_MUL_NO_EFFECT
+const u8 gTypeEffectiveness[336] =
+{
+ TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT,
+ TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT,
+ TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT,
+ TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT,
+ TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT,
+ TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT,
+ TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
+ TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
+ TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT
+};
+
+const u8 gTypeNames[][TYPE_NAME_LENGTH + 1] =
+{
+ _("NORMAL"),
+ _("FIGHT"),
+ _("FLYING"),
+ _("POISON"),
+ _("GROUND"),
+ _("ROCK"),
+ _("BUG"),
+ _("GHOST"),
+ _("STEEL"),
+ _("???"),
+ _("FIRE"),
+ _("WATER"),
+ _("GRASS"),
+ _("ELECTR"),
+ _("PSYCHC"),
+ _("ICE"),
+ _("DRAGON"),
+ _("DARK"),
+};
+
+// This is a factor in how much money you get for beating a trainer.
+const struct TrainerMoney gTrainerMoneyTable[] =
+{
+ {TRAINER_CLASS_TEAM_AQUA, 5},
+ {TRAINER_CLASS_AQUA_ADMIN, 10},
+ {TRAINER_CLASS_AQUA_LEADER, 20},
+ {TRAINER_CLASS_AROMA_LADY, 10},
+ {TRAINER_CLASS_RUIN_MANIAC, 15},
+ {TRAINER_CLASS_INTERVIEWER, 12},
+ {TRAINER_CLASS_TUBER_1, 1},
+ {TRAINER_CLASS_TUBER_2, 1},
+ {TRAINER_CLASS_SIS_AND_BRO, 3},
+ {TRAINER_CLASS_COOLTRAINER_1, 12},
+ {TRAINER_CLASS_HEX_MANIAC, 6},
+ {TRAINER_CLASS_LADY, 50},
+ {TRAINER_CLASS_BEAUTY, 20},
+ {TRAINER_CLASS_RICH_BOY, 50},
+ {TRAINER_CLASS_POKEMANIAC, 15},
+ {TRAINER_CLASS_SWIMMER_M, 2},
+ {TRAINER_CLASS_BLACK_BELT, 8},
+ {TRAINER_CLASS_GUITARIST, 8},
+ {TRAINER_CLASS_KINDLER, 8},
+ {TRAINER_CLASS_CAMPER, 4},
+ {TRAINER_CLASS_OLD_COUPLE, 10},
+ {TRAINER_CLASS_BUG_MANIAC, 15},
+ {TRAINER_CLASS_PSYCHIC, 6},
+ {TRAINER_CLASS_GENTLEMAN, 20},
+ {TRAINER_CLASS_ELITE_FOUR, 25},
+ {TRAINER_CLASS_LEADER, 25},
+ {TRAINER_CLASS_SCHOOL_KID, 5},
+ {TRAINER_CLASS_SR_AND_JR, 4},
+ {TRAINER_CLASS_POKEFAN, 20},
+ {TRAINER_CLASS_EXPERT, 10},
+ {TRAINER_CLASS_YOUNGSTER, 4},
+ {TRAINER_CLASS_CHAMPION, 50},
+ {TRAINER_CLASS_FISHERMAN, 10},
+ {TRAINER_CLASS_TRIATHLETE, 10},
+ {TRAINER_CLASS_DRAGON_TAMER, 12},
+ {TRAINER_CLASS_BIRD_KEEPER, 8},
+ {TRAINER_CLASS_NINJA_BOY, 3},
+ {TRAINER_CLASS_BATTLE_GIRL, 6},
+ {TRAINER_CLASS_PARASOL_LADY, 10},
+ {TRAINER_CLASS_SWIMMER_F, 2},
+ {TRAINER_CLASS_PICNICKER, 4},
+ {TRAINER_CLASS_TWINS, 3},
+ {TRAINER_CLASS_SAILOR, 8},
+ {TRAINER_CLASS_COLLECTOR, 15},
+ {TRAINER_CLASS_PKMN_TRAINER_3, 15},
+ {TRAINER_CLASS_PKMN_BREEDER, 10},
+ {TRAINER_CLASS_PKMN_RANGER, 12},
+ {TRAINER_CLASS_TEAM_MAGMA, 5},
+ {TRAINER_CLASS_MAGMA_ADMIN, 10},
+ {TRAINER_CLASS_MAGMA_LEADER, 20},
+ {TRAINER_CLASS_LASS, 4},
+ {TRAINER_CLASS_BUG_CATCHER, 4},
+ {TRAINER_CLASS_HIKER, 10},
+ {TRAINER_CLASS_YOUNG_COUPLE, 8},
+ {TRAINER_CLASS_WINSTRATE, 10},
+ {0xFF, 5},
+};
+
+#include "data/text/abilities.h"
+
static void (* const sTurnActionsFuncsTable[])(void) =
{
HandleAction_UseMove, // B_ACTION_USE_MOVE
@@ -5133,7 +5340,7 @@ static void HandleAction_UseMove(void)
else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
&& gSideTimers[side].followmeTimer == 0
&& (gBattleMoves[gCurrentMove].power != 0
- || gBattleMoves[gCurrentMove].target != MOVE_TARGET_x10)
+ || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER)
&& gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD
&& gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
{
diff --git a/src/battle_message.c b/src/battle_message.c
index 9a4a062ad..8351b84d8 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -22,9 +22,7 @@ extern u8 gUnknown_0203C7B4;
extern struct StringInfoBattle *gStringInfo;
extern const u8 gMoveNames[LAST_MOVE_INDEX + 1][13];
-extern const u8 gAbilityNames[][13];
extern const u8 gTrainerClassNames[][13];
-extern const u8 gTypeNames[][7];
extern const u16 gUnknown_08D85620[];
// strings
@@ -516,375 +514,375 @@ const u8 gText_Trainer2LoseText[];
const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{
- gText_Trainer1LoseText,
- gText_PkmnGainedEXP,
- gText_PkmnGrewToLv,
- gText_PkmnLearnedMove,
- gText_TryToLearnMove1,
- gText_TryToLearnMove2,
- gText_TryToLearnMove3,
- gText_PkmnForgotMove,
- gText_StopLearningMove,
- gText_DidNotLearnMove,
- gText_PkmnLearnedMove2,
- gText_AttackMissed,
- gText_PkmnProtectedItself,
- gText_StatsWontIncrease2,
- gText_AvoidedDamage,
- gText_ItDoesntAffect,
- gText_AttackerFainted,
- gText_TargetFainted,
- gText_PlayerGotMoney,
- gText_PlayerWhiteout,
- gText_PlayerWhiteout2,
- gText_PreventsEscape,
- gText_HitXTimes,
- gText_PkmnFellAsleep,
- gText_PkmnMadeSleep,
- gText_PkmnAlreadyAsleep,
- gText_PkmnAlreadyAsleep2,
- gText_PkmnWasntAffected,
- gText_PkmnWasPoisoned,
- gText_PkmnPoisonedBy,
- gText_PkmnHurtByPoison,
- gText_PkmnAlreadyPoisoned,
- gText_PkmnBadlyPoisoned,
- gText_PkmnEnergyDrained,
- gText_PkmnWasBurned,
- gText_PkmnBurnedBy,
- gText_PkmnHurtByBurn,
- gText_PkmnWasFrozen,
- gText_PkmnFrozenBy,
- gText_PkmnIsFrozen,
- gText_PkmnWasDefrosted,
- gText_PkmnWasDefrosted2,
- gText_PkmnWasDefrostedBy,
- gText_PkmnWasParalyzed,
- gText_PkmnWasParalyzedBy,
- gText_PkmnIsParalyzed,
- gText_PkmnIsAlreadyParalyzed,
- gText_PkmnHealedParalysis,
- gText_PkmnDreamEaten,
- gText_StatsWontIncrease,
- gText_StatsWontDecrease,
- gText_TeamStoppedWorking,
- gText_FoeStoppedWorking,
- gText_PkmnIsConfused,
- gText_PkmnHealedConfusion,
- gText_PkmnWasConfused,
- gText_PkmnAlreadyConfused,
- gText_PkmnFellInLove,
- gText_PkmnInLove,
- gText_PkmnImmobilizedByLove,
- gText_PkmnBlownAway,
- gText_PkmnChangedType,
- gText_PkmnFlinched,
- gText_PkmnRegainedHealth,
- gText_PkmnHPFull,
- gText_PkmnRaisedSpDef,
- gText_PkmnRaisedDef,
- gText_PkmnCoveredByVeil,
- gText_PkmnUsedSafeguard,
- gText_PkmnSafeguardExpired,
- gText_PkmnWentToSleep,
- gText_PkmnSleptHealthy,
- gText_PkmnWhippedWhirlwind,
- gText_PkmnTookSunlight,
- gText_PkmnLoweredHead,
- gText_PkmnIsGlowing,
- gText_PkmnFlewHigh,
- gText_PkmnDugHole,
- gText_PkmnSqueezedByBind,
- gText_PkmnTrappedInVortex,
- gText_PkmnWrappedBy,
- gText_PkmnClamped,
- gText_PkmnHurtBy,
- gText_PkmnFreedFrom,
- gText_PkmnCrashed,
- gText_PkmnShroudedInMist,
- gText_PkmnProtectedByMist,
- gText_PkmnGettingPumped,
- gText_PkmnHitWithRecoil,
- gText_PkmnProtectedItself2,
- gText_PkmnBuffetedBySandstorm,
- gText_PkmnPeltedByHail,
- gText_PkmnSeeded,
- gText_PkmnEvadedAttack,
- gText_PkmnSappedByLeechSeed,
- gText_PkmnFastAsleep,
- gText_PkmnWokeUp,
- gText_PkmnUproarKeptAwake,
- gText_PkmnWokeUpInUproar,
- gText_PkmnCausedUproar,
- gText_PkmnMakingUproar,
- gText_PkmnCalmedDown,
- gText_PkmnCantSleepInUproar,
- gText_PkmnStockpiled,
- gText_PkmnCantStockpile,
- gText_PkmnCantSleepInUproar2,
- gText_UproarKeptPkmnAwake,
- gText_PkmnStayedAwakeUsing,
- gText_PkmnStoringEnergy,
- gText_PkmnUnleashedEnergy,
- gText_PkmnFatigueConfusion,
- gText_PkmnPickedUpItem,
- gText_PkmnUnaffected,
- gText_PkmnTransformedInto,
- gText_PkmnMadeSubstitute,
- gText_PkmnHasSubstitute,
- gText_SubstituteDamaged,
- gText_PkmnSubstituteFaded,
- gText_PkmnMustRecharge,
- gText_PkmnRageBuilding,
- gText_PkmnMoveWasDisabled,
- gText_PkmnMoveIsDisabled,
- gText_PkmnMoveDisabledNoMore,
- gText_PkmnGotEncore,
- gText_PkmnEncoreEnded,
- gText_PkmnTookAim,
- gText_PkmnSketchedMove,
- gText_PkmnTryingToTakeFoe,
- gText_PkmnTookFoe,
- gText_PkmnReducedPP,
- gText_PkmnStoleItem,
- gText_TargetCantEscapeNow,
- gText_PkmnFellIntoNightmare,
- gText_PkmnLockedInNightmare,
- gText_PkmnLaidCurse,
- gText_PkmnAfflictedByCurse,
- gText_SpikesScattered,
- gText_PkmnHurtBySpikes,
- gText_PkmnIdentified,
- gText_PkmnPerishCountFell,
- gText_PkmnBracedItself,
- gText_PkmnEnduredHit,
- gText_MagnitudeStrength,
- gText_PkmnCutHPMaxedAttack,
- gText_PkmnCopiedStatChanges,
- gText_PkmnGotFree,
- gText_PkmnShedLeechSeed,
- gText_PkmnBlewAwaySpikes,
- gText_PkmnFledFromBattle,
- gText_PkmnForesawAttack,
- gText_PkmnTookAttack,
- gText_PkmnAttack,
- gText_PkmnCenterAttention,
- gText_PkmnChargingPower,
- gText_NaturePowerTurnedInto,
- gText_PkmnStatusNormal,
- gText_PkmnHasNoMovesLeft,
- gText_PkmnSubjectedToTorment,
- gText_PkmnCantUseMoveTorment,
- gText_PkmnTighteningFocus,
- gText_PkmnFellForTaunt,
- gText_PkmnCantUseMoveTaunt,
- gText_PkmnReadyToHelp,
- gText_PkmnSwitchedItems,
- gText_PkmnCopiedFoe,
- gText_PkmnMadeWish,
- gText_PkmnWishCameTrue,
- gText_PkmnPlantedRoots,
- gText_PkmnAbsorbedNutrients,
- gText_PkmnAnchoredItself,
- gText_PkmnWasMadeDrowsy,
- gText_PkmnKnockedOff,
- gText_PkmnSwappedAbilities,
- gText_PkmnSealedOpponentMove,
- gText_PkmnCantUseMoveSealed,
- gText_PkmnWantsGrudge,
- gText_PkmnLostPPGrudge,
- gText_PkmnShroudedItself,
- gText_PkmnMoveBounced,
- gText_PkmnWaitsForTarget,
- gText_PkmnSnatchedMove,
- gText_PkmnMadeItRain,
- gText_PkmnRaisedSpeed,
- gText_PkmnProtectedBy,
- gText_PkmnPreventsUsage,
- gText_PkmnRestoredHPUsing,
- gText_PkmnChangedTypeWith,
- gText_PkmnPreventsParalysisWith,
- gText_PkmnPreventsRomanceWith,
- gText_PkmnPreventsPoisoningWith,
- gText_PkmnPreventsConfusionWith,
- gText_PkmnRaisedFirePowerWith,
- gText_PkmnAnchorsItselfWith,
- gText_PkmnCutsAttackWith,
- gText_PkmnPreventsStatLossWith,
- gText_PkmnHurtsWith,
- gText_PkmnTraced,
- gText_StatSharply,
- gText_StatRose,
- gText_StatHarshly,
- gText_StatFell,
- gText_PkmnsStatChanged,
- gText_PkmnsStatChanged2,
- gText_PkmnsStatChanged3,
- gText_PkmnsStatChanged4,
- gText_CriticalHit,
- gText_OneHitKO,
- gText_123Poof,
- gText_AndEllipsis,
- gText_NotVeryEffective,
- gText_SuperEffective,
- gText_GotAwaySafely,
- gText_WildPkmnFled,
- gText_NoRunningFromTrainers,
- gText_CantEscape,
- gText_DontLeaveBirch,
- gText_ButNothingHappened,
- gText_ButItFailed,
- gText_ItHurtConfusion,
- gText_MirrorMoveFailed,
- gText_StartedToRain,
- gText_DownpourStarted,
- gText_RainContinues,
- gText_DownpourContinues,
- gText_RainStopped,
- gText_SandstormBrewed,
- gText_SandstormRages,
- gText_SandstormSubsided,
- gText_SunlightGotBright,
- gText_SunlightStrong,
- gText_SunlightFaded,
- gText_StartedHail,
- gText_HailContinues,
- gText_HailStopped,
- gText_FailedToSpitUp,
- gText_FailedToSwallow,
- gText_WindBecameHeatWave,
- gText_StatChangesGone,
- gText_CoinsScattered,
- gText_TooWeakForSubstitute,
- gText_SharedPain,
- gText_BellChimed,
- gText_FaintInThree,
- gText_NoPPLeft,
- gText_ButNoPPLeft,
- gText_PlayerUsedItem,
- gText_WallyUsedItem,
- gText_TrainerBlockedBall,
- gText_DontBeAThief,
- gText_ItDodgedBall,
- gText_YouMissedPkmn,
- gText_PkmnBrokeFree,
- gText_ItAppearedCaught,
- gText_AarghAlmostHadIt,
- gText_ShootSoClose,
- gText_GotchaPkmnCaught,
- gText_GotchaPkmnCaught2,
- gText_GiveNicknameCaptured,
- gText_PkmnSentToPC,
- gText_PkmnDataAddedToDex,
- gText_ItIsRaining,
- gText_SandstormIsRaging,
- gText_CantEscape2,
- gText_PkmnIgnoresAsleep,
- gText_PkmnIgnoredOrders,
- gText_PkmnBeganToNap,
- gText_PkmnLoafing,
- gText_PkmnWontObey,
- gText_PkmnTurnedAway,
- gText_PkmnPretendNotNotice,
- gText_EnemyAboutToSwitchPkmn,
- gText_CreptCloser,
- gText_CantGetCloser,
- gText_PkmnWatchingCarefully,
- gText_PkmnCuriousAboutX,
- gText_PkmnEnthralledByX,
- gText_PkmnIgnoredX,
- gText_ThrewPokeblockAtPkmn,
- gText_OutOfSafariBalls,
- gText_PkmnsItemCuredParalysis,
- gText_PkmnsItemCuredPoison,
- gText_PkmnsItemHealedBurn,
- gText_PkmnsItemDefrostedIt,
- gText_PkmnsItemWokeIt,
- gText_PkmnsItemSnappedOut,
- gText_PkmnsItemCuredProblem,
- gText_PkmnsItemRestoredHealth,
- gText_PkmnsItemRestoredPP,
- gText_PkmnsItemRestoredStatus,
- gText_PkmnsItemRestoredHPALittle,
- gText_ItemAllowsOnlyYMove,
- gText_PkmnHungOnWithX,
- gText_EmptyString3,
- gText_PkmnsXPreventsBurns,
- gText_PkmnsXBlocksY,
- gText_PkmnsXRestoredHPALittle2,
- gText_PkmnsXWhippedUpSandstorm,
- gText_PkmnsXPreventsYLoss,
- gText_PkmnsXInfatuatedY,
- gText_PkmnsXMadeYIneffective,
- gText_PkmnsXCuredYProblem,
- gText_ItSuckedLiquidOoze,
- gText_PkmnTransformed,
- gText_ElectricityWeakened,
- gText_FireWeakened,
- gText_PkmnHidUnderwater,
- gText_PkmnSprangUp,
- gText_HMMovesCantBeForgotten,
- gText_XFoundOneY,
- gText_PlayerDefeatedLinkTrainerTrainer1,
- gText_SoothingAroma,
- gText_ItemsCantBeUsedNow,
- gText_ForXCommaYZ,
- gText_UsingXTheYOfZN,
- gText_PkmnUsedXToGetPumped,
- gText_PkmnsXMadeYUseless,
- gText_PkmnTrappedBySandTomb,
- gText_EmptyString4,
- gText_ABoosted,
- gText_PkmnsXIntensifiedSun,
- gText_PkmnMakesGroundMiss,
- gText_YouThrowABallNowRight,
- gText_PkmnsXTookAttack,
- gText_PkmnChoseXAsDestiny,
- gText_PkmnLostFocus,
- gText_UseNextPkmn,
- gText_PkmnFledUsingIts,
- gText_PkmnFledUsing,
- gText_PkmnWasDraggedOut,
- gText_PreventedFromWorking,
- gText_PkmnsItemNormalizedStatus,
- gText_Trainer1UsedItem,
- gText_BoxIsFull,
- gText_PkmnAvoidedAttack,
- gText_PkmnsXMadeItIneffective,
- gText_PkmnsXPreventsFlinching,
- gText_PkmnAlreadyHasBurn,
- gText_StatsWontDecrease2,
- gText_PkmnsXBlocksY2,
- gText_PkmnsXWoreOff,
- gText_PkmnRaisedDefALittle,
- gText_PkmnRaisedSpDefALittle,
- gText_TheWallShattered,
- gText_PkmnsXPreventsYsZ,
- gText_PkmnsXCuredItsYProblem,
- gText_AttackerCantEscape,
- gText_PkmnObtainedX,
- gText_PkmnObtainedX2,
- gText_PkmnObtainedXYObtainedZ,
- gText_ButNoEffect,
- gText_PkmnsXHadNoEffectOnY,
- gText_TwoInGameTrainersDefeated,
- gText_Trainer2LoseText,
- gText_PkmnIncapableOfPower,
- gText_GlintAppearsInEye,
- gText_PkmnGettingIntoPosition,
- gText_PkmnBeganGrowlingDeeply,
- gText_PkmnEagerForMore,
- gText_DefeatedOpponentByReferee,
- gText_LostToOpponentByReferee,
- gText_TiedOpponentByReferee,
- gText_QuestionForfeitMatch,
- gText_ForfeitedMatch,
- gText_PkmnTransferredSomeonesPC,
- gText_PkmnTransferredLanettesPC,
- gText_PkmnBoxSomeonesPCFull,
- gText_PkmnBoxLanettesPCFull,
- gText_Trainer1WinText,
- gText_Trainer2WinText,
+ gText_Trainer1LoseText, // 12
+ gText_PkmnGainedEXP, // 13
+ gText_PkmnGrewToLv, // 14
+ gText_PkmnLearnedMove, // 15
+ gText_TryToLearnMove1, // 16
+ gText_TryToLearnMove2, // 17
+ gText_TryToLearnMove3, // 18
+ gText_PkmnForgotMove, // 19
+ gText_StopLearningMove, // 20
+ gText_DidNotLearnMove, // 21
+ gText_PkmnLearnedMove2, // 22
+ gText_AttackMissed, // 23
+ gText_PkmnProtectedItself, // 24
+ gText_StatsWontIncrease2, // 25
+ gText_AvoidedDamage, // 26
+ gText_ItDoesntAffect, // 27
+ gText_AttackerFainted, // 28
+ gText_TargetFainted, // 29
+ gText_PlayerGotMoney, // 30
+ gText_PlayerWhiteout, // 31
+ gText_PlayerWhiteout2, // 32
+ gText_PreventsEscape, // 33
+ gText_HitXTimes, // 34
+ gText_PkmnFellAsleep, // 35
+ gText_PkmnMadeSleep, // 36
+ gText_PkmnAlreadyAsleep, // 37
+ gText_PkmnAlreadyAsleep2, // 38
+ gText_PkmnWasntAffected, // 39
+ gText_PkmnWasPoisoned, // 40
+ gText_PkmnPoisonedBy, // 41
+ gText_PkmnHurtByPoison, // 42
+ gText_PkmnAlreadyPoisoned, // 43
+ gText_PkmnBadlyPoisoned, // 44
+ gText_PkmnEnergyDrained, // 45
+ gText_PkmnWasBurned, // 46
+ gText_PkmnBurnedBy, // 47
+ gText_PkmnHurtByBurn, // 48
+ gText_PkmnWasFrozen, // 49
+ gText_PkmnFrozenBy, // 50
+ gText_PkmnIsFrozen, // 51
+ gText_PkmnWasDefrosted, // 52
+ gText_PkmnWasDefrosted2, // 53
+ gText_PkmnWasDefrostedBy, // 54
+ gText_PkmnWasParalyzed, // 55
+ gText_PkmnWasParalyzedBy, // 56
+ gText_PkmnIsParalyzed, // 57
+ gText_PkmnIsAlreadyParalyzed, // 58
+ gText_PkmnHealedParalysis, // 59
+ gText_PkmnDreamEaten, // 60
+ gText_StatsWontIncrease, // 61
+ gText_StatsWontDecrease, // 62
+ gText_TeamStoppedWorking, // 63
+ gText_FoeStoppedWorking, // 64
+ gText_PkmnIsConfused, // 65
+ gText_PkmnHealedConfusion, // 66
+ gText_PkmnWasConfused, // 67
+ gText_PkmnAlreadyConfused, // 68
+ gText_PkmnFellInLove, // 69
+ gText_PkmnInLove, // 70
+ gText_PkmnImmobilizedByLove, // 71
+ gText_PkmnBlownAway, // 72
+ gText_PkmnChangedType, // 73
+ gText_PkmnFlinched, // 74
+ gText_PkmnRegainedHealth, // 75
+ gText_PkmnHPFull, // 76
+ gText_PkmnRaisedSpDef, // 77
+ gText_PkmnRaisedDef, // 78
+ gText_PkmnCoveredByVeil, // 79
+ gText_PkmnUsedSafeguard, // 80
+ gText_PkmnSafeguardExpired, // 81
+ gText_PkmnWentToSleep, // 82
+ gText_PkmnSleptHealthy, // 83
+ gText_PkmnWhippedWhirlwind, // 84
+ gText_PkmnTookSunlight, // 85
+ gText_PkmnLoweredHead, // 86
+ gText_PkmnIsGlowing, // 87
+ gText_PkmnFlewHigh, // 88
+ gText_PkmnDugHole, // 89
+ gText_PkmnSqueezedByBind, // 90
+ gText_PkmnTrappedInVortex, // 91
+ gText_PkmnWrappedBy, // 92
+ gText_PkmnClamped, // 93
+ gText_PkmnHurtBy, // 94
+ gText_PkmnFreedFrom, // 95
+ gText_PkmnCrashed, // 96
+ gText_PkmnShroudedInMist, // 97
+ gText_PkmnProtectedByMist, // 98
+ gText_PkmnGettingPumped, // 99
+ gText_PkmnHitWithRecoil, // 100
+ gText_PkmnProtectedItself2, // 101
+ gText_PkmnBuffetedBySandstorm, // 102
+ gText_PkmnPeltedByHail, // 103
+ gText_PkmnSeeded, // 104
+ gText_PkmnEvadedAttack, // 105
+ gText_PkmnSappedByLeechSeed, // 106
+ gText_PkmnFastAsleep, // 107
+ gText_PkmnWokeUp, // 108
+ gText_PkmnUproarKeptAwake, // 109
+ gText_PkmnWokeUpInUproar, // 110
+ gText_PkmnCausedUproar, // 111
+ gText_PkmnMakingUproar, // 112
+ gText_PkmnCalmedDown, // 113
+ gText_PkmnCantSleepInUproar, // 114
+ gText_PkmnStockpiled, // 115
+ gText_PkmnCantStockpile, // 116
+ gText_PkmnCantSleepInUproar2, // 117
+ gText_UproarKeptPkmnAwake, // 118
+ gText_PkmnStayedAwakeUsing, // 119
+ gText_PkmnStoringEnergy, // 120
+ gText_PkmnUnleashedEnergy, // 121
+ gText_PkmnFatigueConfusion, // 122
+ gText_PkmnPickedUpItem, // 123
+ gText_PkmnUnaffected, // 124
+ gText_PkmnTransformedInto, // 125
+ gText_PkmnMadeSubstitute, // 126
+ gText_PkmnHasSubstitute, // 127
+ gText_SubstituteDamaged, // 128
+ gText_PkmnSubstituteFaded, // 129
+ gText_PkmnMustRecharge, // 130
+ gText_PkmnRageBuilding, // 131
+ gText_PkmnMoveWasDisabled, // 132
+ gText_PkmnMoveIsDisabled, // 133
+ gText_PkmnMoveDisabledNoMore, // 134
+ gText_PkmnGotEncore, // 135
+ gText_PkmnEncoreEnded, // 136
+ gText_PkmnTookAim, // 137
+ gText_PkmnSketchedMove, // 138
+ gText_PkmnTryingToTakeFoe, // 139
+ gText_PkmnTookFoe, // 140
+ gText_PkmnReducedPP, // 141
+ gText_PkmnStoleItem, // 142
+ gText_TargetCantEscapeNow, // 143
+ gText_PkmnFellIntoNightmare, // 144
+ gText_PkmnLockedInNightmare, // 145
+ gText_PkmnLaidCurse, // 146
+ gText_PkmnAfflictedByCurse, // 147
+ gText_SpikesScattered, // 148
+ gText_PkmnHurtBySpikes, // 149
+ gText_PkmnIdentified, // 150
+ gText_PkmnPerishCountFell, // 151
+ gText_PkmnBracedItself, // 152
+ gText_PkmnEnduredHit, // 153
+ gText_MagnitudeStrength, // 154
+ gText_PkmnCutHPMaxedAttack, // 155
+ gText_PkmnCopiedStatChanges, // 156
+ gText_PkmnGotFree, // 157
+ gText_PkmnShedLeechSeed, // 158
+ gText_PkmnBlewAwaySpikes, // 159
+ gText_PkmnFledFromBattle, // 160
+ gText_PkmnForesawAttack, // 161
+ gText_PkmnTookAttack, // 162
+ gText_PkmnAttack, // 163
+ gText_PkmnCenterAttention, // 164
+ gText_PkmnChargingPower, // 165
+ gText_NaturePowerTurnedInto, // 166
+ gText_PkmnStatusNormal, // 167
+ gText_PkmnHasNoMovesLeft, // 168
+ gText_PkmnSubjectedToTorment, // 169
+ gText_PkmnCantUseMoveTorment, // 170
+ gText_PkmnTighteningFocus, // 171
+ gText_PkmnFellForTaunt, // 172
+ gText_PkmnCantUseMoveTaunt, // 173
+ gText_PkmnReadyToHelp, // 174
+ gText_PkmnSwitchedItems, // 175
+ gText_PkmnCopiedFoe, // 176
+ gText_PkmnMadeWish, // 177
+ gText_PkmnWishCameTrue, // 178
+ gText_PkmnPlantedRoots, // 179
+ gText_PkmnAbsorbedNutrients, // 180
+ gText_PkmnAnchoredItself, // 181
+ gText_PkmnWasMadeDrowsy, // 182
+ gText_PkmnKnockedOff, // 183
+ gText_PkmnSwappedAbilities, // 184
+ gText_PkmnSealedOpponentMove, // 185
+ gText_PkmnCantUseMoveSealed, // 186
+ gText_PkmnWantsGrudge, // 187
+ gText_PkmnLostPPGrudge, // 188
+ gText_PkmnShroudedItself, // 189
+ gText_PkmnMoveBounced, // 190
+ gText_PkmnWaitsForTarget, // 191
+ gText_PkmnSnatchedMove, // 192
+ gText_PkmnMadeItRain, // 193
+ gText_PkmnRaisedSpeed, // 194
+ gText_PkmnProtectedBy, // 195
+ gText_PkmnPreventsUsage, // 196
+ gText_PkmnRestoredHPUsing, // 197
+ gText_PkmnChangedTypeWith, // 198
+ gText_PkmnPreventsParalysisWith, // 199
+ gText_PkmnPreventsRomanceWith, // 200
+ gText_PkmnPreventsPoisoningWith, // 201
+ gText_PkmnPreventsConfusionWith, // 202
+ gText_PkmnRaisedFirePowerWith, // 203
+ gText_PkmnAnchorsItselfWith, // 204
+ gText_PkmnCutsAttackWith, // 205
+ gText_PkmnPreventsStatLossWith, // 206
+ gText_PkmnHurtsWith, // 207
+ gText_PkmnTraced, // 208
+ gText_StatSharply, // 209
+ gText_StatRose, // 210
+ gText_StatHarshly, // 211
+ gText_StatFell, // 212
+ gText_PkmnsStatChanged, // 213
+ gText_PkmnsStatChanged2, // 214
+ gText_PkmnsStatChanged3, // 215
+ gText_PkmnsStatChanged4, // 216
+ gText_CriticalHit, // 217
+ gText_OneHitKO, // 218
+ gText_123Poof, // 219
+ gText_AndEllipsis, // 220
+ gText_NotVeryEffective, // 221
+ gText_SuperEffective, // 222
+ gText_GotAwaySafely, // 223
+ gText_WildPkmnFled, // 224
+ gText_NoRunningFromTrainers, // 225
+ gText_CantEscape, // 226
+ gText_DontLeaveBirch, // 227
+ gText_ButNothingHappened, // 228
+ gText_ButItFailed, // 229
+ gText_ItHurtConfusion, // 230
+ gText_MirrorMoveFailed, // 231
+ gText_StartedToRain, // 232
+ gText_DownpourStarted, // 233
+ gText_RainContinues, // 234
+ gText_DownpourContinues, // 235
+ gText_RainStopped, // 236
+ gText_SandstormBrewed, // 237
+ gText_SandstormRages, // 238
+ gText_SandstormSubsided, // 239
+ gText_SunlightGotBright, // 240
+ gText_SunlightStrong, // 241
+ gText_SunlightFaded, // 242
+ gText_StartedHail, // 243
+ gText_HailContinues, // 244
+ gText_HailStopped, // 245
+ gText_FailedToSpitUp, // 246
+ gText_FailedToSwallow, // 247
+ gText_WindBecameHeatWave, // 248
+ gText_StatChangesGone, // 249
+ gText_CoinsScattered, // 250
+ gText_TooWeakForSubstitute, // 251
+ gText_SharedPain, // 252
+ gText_BellChimed, // 253
+ gText_FaintInThree, // 254
+ gText_NoPPLeft, // 255
+ gText_ButNoPPLeft, // 256
+ gText_PlayerUsedItem, // 257
+ gText_WallyUsedItem, // 258
+ gText_TrainerBlockedBall, // 259
+ gText_DontBeAThief, // 260
+ gText_ItDodgedBall, // 261
+ gText_YouMissedPkmn, // 262
+ gText_PkmnBrokeFree, // 263
+ gText_ItAppearedCaught, // 264
+ gText_AarghAlmostHadIt, // 265
+ gText_ShootSoClose, // 266
+ gText_GotchaPkmnCaught, // 267
+ gText_GotchaPkmnCaught2, // 268
+ gText_GiveNicknameCaptured, // 269
+ gText_PkmnSentToPC, // 270
+ gText_PkmnDataAddedToDex, // 271
+ gText_ItIsRaining, // 272
+ gText_SandstormIsRaging, // 273
+ gText_CantEscape2, // 274
+ gText_PkmnIgnoresAsleep, // 275
+ gText_PkmnIgnoredOrders, // 276
+ gText_PkmnBeganToNap, // 277
+ gText_PkmnLoafing, // 278
+ gText_PkmnWontObey, // 279
+ gText_PkmnTurnedAway, // 280
+ gText_PkmnPretendNotNotice, // 281
+ gText_EnemyAboutToSwitchPkmn, // 282
+ gText_CreptCloser, // 283
+ gText_CantGetCloser, // 284
+ gText_PkmnWatchingCarefully, // 285
+ gText_PkmnCuriousAboutX, // 286
+ gText_PkmnEnthralledByX, // 287
+ gText_PkmnIgnoredX, // 288
+ gText_ThrewPokeblockAtPkmn, // 289
+ gText_OutOfSafariBalls, // 290
+ gText_PkmnsItemCuredParalysis, // 291
+ gText_PkmnsItemCuredPoison, // 292
+ gText_PkmnsItemHealedBurn, // 293
+ gText_PkmnsItemDefrostedIt, // 294
+ gText_PkmnsItemWokeIt, // 295
+ gText_PkmnsItemSnappedOut, // 296
+ gText_PkmnsItemCuredProblem, // 297
+ gText_PkmnsItemRestoredHealth, // 298
+ gText_PkmnsItemRestoredPP, // 299
+ gText_PkmnsItemRestoredStatus, // 300
+ gText_PkmnsItemRestoredHPALittle, // 301
+ gText_ItemAllowsOnlyYMove, // 302
+ gText_PkmnHungOnWithX, // 303
+ gText_EmptyString3, // 304
+ gText_PkmnsXPreventsBurns, // 305
+ gText_PkmnsXBlocksY, // 306
+ gText_PkmnsXRestoredHPALittle2, // 307
+ gText_PkmnsXWhippedUpSandstorm, // 308
+ gText_PkmnsXPreventsYLoss, // 309
+ gText_PkmnsXInfatuatedY, // 310
+ gText_PkmnsXMadeYIneffective, // 311
+ gText_PkmnsXCuredYProblem, // 312
+ gText_ItSuckedLiquidOoze, // 313
+ gText_PkmnTransformed, // 314
+ gText_ElectricityWeakened, // 315
+ gText_FireWeakened, // 316
+ gText_PkmnHidUnderwater, // 317
+ gText_PkmnSprangUp, // 318
+ gText_HMMovesCantBeForgotten, // 319
+ gText_XFoundOneY, // 320
+ gText_PlayerDefeatedLinkTrainerTrainer1, // 321
+ gText_SoothingAroma, // 322
+ gText_ItemsCantBeUsedNow, // 323
+ gText_ForXCommaYZ, // 324
+ gText_UsingXTheYOfZN, // 325
+ gText_PkmnUsedXToGetPumped, // 326
+ gText_PkmnsXMadeYUseless, // 327
+ gText_PkmnTrappedBySandTomb, // 328
+ gText_EmptyString4, // 329
+ gText_ABoosted, // 330
+ gText_PkmnsXIntensifiedSun, // 331
+ gText_PkmnMakesGroundMiss, // 332
+ gText_YouThrowABallNowRight, // 333
+ gText_PkmnsXTookAttack, // 334
+ gText_PkmnChoseXAsDestiny, // 335
+ gText_PkmnLostFocus, // 336
+ gText_UseNextPkmn, // 337
+ gText_PkmnFledUsingIts, // 338
+ gText_PkmnFledUsing, // 339
+ gText_PkmnWasDraggedOut, // 340
+ gText_PreventedFromWorking, // 341
+ gText_PkmnsItemNormalizedStatus, // 342
+ gText_Trainer1UsedItem, // 343
+ gText_BoxIsFull, // 344
+ gText_PkmnAvoidedAttack, // 345
+ gText_PkmnsXMadeItIneffective, // 346
+ gText_PkmnsXPreventsFlinching, // 347
+ gText_PkmnAlreadyHasBurn, // 348
+ gText_StatsWontDecrease2, // 349
+ gText_PkmnsXBlocksY2, // 350
+ gText_PkmnsXWoreOff, // 351
+ gText_PkmnRaisedDefALittle, // 352
+ gText_PkmnRaisedSpDefALittle, // 353
+ gText_TheWallShattered, // 354
+ gText_PkmnsXPreventsYsZ, // 355
+ gText_PkmnsXCuredItsYProblem, // 356
+ gText_AttackerCantEscape, // 357
+ gText_PkmnObtainedX, // 358
+ gText_PkmnObtainedX2, // 359
+ gText_PkmnObtainedXYObtainedZ, // 360
+ gText_ButNoEffect, // 361
+ gText_PkmnsXHadNoEffectOnY, // 362
+ gText_TwoInGameTrainersDefeated, // 363
+ gText_Trainer2LoseText, // 364
+ gText_PkmnIncapableOfPower, // 365
+ gText_GlintAppearsInEye, // 366
+ gText_PkmnGettingIntoPosition, // 367
+ gText_PkmnBeganGrowlingDeeply, // 368
+ gText_PkmnEagerForMore, // 369
+ gText_DefeatedOpponentByReferee, // 370
+ gText_LostToOpponentByReferee, // 371
+ gText_TiedOpponentByReferee, // 372
+ gText_QuestionForfeitMatch, // 373
+ gText_ForfeitedMatch, // 374
+ gText_PkmnTransferredSomeonesPC, // 375
+ gText_PkmnTransferredLanettesPC, // 376
+ gText_PkmnBoxSomeonesPCFull, // 377
+ gText_PkmnBoxLanettesPCFull, // 378
+ gText_Trainer1WinText, // 379
+ gText_Trainer2WinText, // 380
};
const u16 gMissStringIds[] =
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 2da48de49..b588970b7 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -48,15 +48,6 @@ extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-struct TrainerMoney
-{
- u8 classId;
- u8 value;
-};
-
-extern const struct BattleMove gBattleMoves[];
-extern const u8 gTypeEffectiveness[336];
-extern const struct TrainerMoney gTrainerMoneyTable[];
extern const u8* const gBattleScriptsForMoveEffects[];
// functions
@@ -4436,31 +4427,34 @@ static void atk47_setgraphicalstatchangevalues(void)
gBattlescriptCurrInstr++;
}
-#ifdef NONMATCHING
static void atk48_playstatchangeanimation(void)
{
u32 currStat = 0;
- s16 statAnimId = 0;
- s16 checkingStatAnimId = 0;
- s32 changeableStats = 0;
- u32 statsToCheck = 0;
+ u16 statAnimId = 0;
+ s32 changeableStatsCount = 0;
+ u8 statsToCheck = 0;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
statsToCheck = gBattlescriptCurrInstr[2];
if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down
{
- checkingStatAnimId = (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) ? 0x2D : 0x15;
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = 0x2D;
+ else
+ startingStatAnimId = 0x15;
+
while (statsToCheck != 0)
{
if (statsToCheck & 1)
{
- if (!(gBattlescriptCurrInstr[3] & ATK48_LOWER_FAIL_CHECK))
+ if (gBattlescriptCurrInstr[3] & ATK48_DONT_CHECK_LOWER)
{
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
{
- statAnimId = checkingStatAnimId;
- changeableStats++;
+ statAnimId = startingStatAnimId + currStat;
+ changeableStatsCount++;
}
}
else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
@@ -4471,15 +4465,15 @@ static void atk48_playstatchangeanimation(void)
{
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
{
- statAnimId = checkingStatAnimId;
- changeableStats++;
+ statAnimId = startingStatAnimId + currStat;
+ changeableStatsCount++;
}
}
}
- statsToCheck >>= 1, checkingStatAnimId++, currStat++;
+ statsToCheck >>= 1, currStat++;
}
- if (changeableStats > 1) // more than one stat, so the color is gray
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
statAnimId = 0x3A;
@@ -4489,18 +4483,23 @@ static void atk48_playstatchangeanimation(void)
}
else // goes up
{
- checkingStatAnimId = (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) ? 0x26 : 0xE;
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = 0x26;
+ else
+ startingStatAnimId = 0xE;
+
while (statsToCheck != 0)
{
if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC)
{
- statAnimId = checkingStatAnimId;
- changeableStats++;
+ statAnimId = startingStatAnimId + currStat;
+ changeableStatsCount++;
}
- statsToCheck >>= 1, checkingStatAnimId += 1, currStat++;
+ statsToCheck >>= 1, currStat++;
}
- if (changeableStats > 1) // more than one stat, so the color is gray
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
statAnimId = 0x38;
@@ -4509,15 +4508,15 @@ static void atk48_playstatchangeanimation(void)
}
}
- if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStats < 2)
+ if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount < 2)
{
gBattlescriptCurrInstr += 4;
}
- else if (changeableStats != 0 && gBattleScripting.field_1B == 0)
+ else if (changeableStatsCount != 0 && gBattleScripting.field_1B == 0)
{
BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
MarkBattlerForControllerExec(gActiveBattler);
- if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStats > 1)
+ if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount > 1)
gBattleScripting.field_1B = 1;
gBattlescriptCurrInstr += 4;
}
@@ -4526,261 +4525,6 @@ static void atk48_playstatchangeanimation(void)
gBattlescriptCurrInstr += 4;
}
}
-#else
-ASM_DIRECT
-static void atk48_playstatchangeanimation(void)
-{
- asm("\n\
- .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, 0x4\n\
- movs r7, 0\n\
- movs r0, 0\n\
- mov r8, r0\n\
- movs r3, 0\n\
- ldr r5, =gBattlescriptCurrInstr\n\
- ldr r0, [r5]\n\
- ldrb r0, [r0, 0x1]\n\
- str r3, [sp]\n\
- bl GetBattlerForBattleScript\n\
- ldr r2, =gActiveBattler\n\
- strb r0, [r2]\n\
- ldr r0, [r5]\n\
- ldrb r4, [r0, 0x2]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- ldr r3, [sp]\n\
- cmp r0, 0\n\
- beq _0804BAEC\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0x15\n\
- cmp r0, 0\n\
- beq _0804BA18\n\
- movs r1, 0x2D\n\
-_0804BA18:\n\
- cmp r4, 0\n\
- beq _0804BAC0\n\
- movs r0, 0x1\n\
- mov r10, r0\n\
- ldr r0, =gBattleMons + 0x18\n\
- mov r9, r0\n\
- lsls r5, r1, 16\n\
-_0804BA26:\n\
- adds r0, r4, 0\n\
- mov r1, r10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804BAB2\n\
- ldr r0, =gBattlescriptCurrInstr\n\
- ldr r0, [r0]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804BA58\n\
- ldr r0, =gActiveBattler\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- b _0804BAA0\n\
- .pool\n\
-_0804BA58:\n\
- ldr r6, =gActiveBattler\n\
- ldrb r0, [r6]\n\
- str r3, [sp]\n\
- bl GetBattlerPosition\n\
- mov r1, r10\n\
- ands r1, r0\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, =gSideTimers\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x4]\n\
- ldr r3, [sp]\n\
- cmp r0, 0\n\
- bne _0804BAB2\n\
- ldr r0, =gBattleMons\n\
- ldrb r2, [r6]\n\
- movs r1, 0x58\n\
- muls r2, r1\n\
- adds r0, r2, r0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1D\n\
- beq _0804BAB2\n\
- cmp r0, 0x49\n\
- beq _0804BAB2\n\
- cmp r0, 0x33\n\
- bne _0804BA96\n\
- cmp r7, 0x6\n\
- beq _0804BAB2\n\
-_0804BA96:\n\
- cmp r0, 0x34\n\
- bne _0804BA9E\n\
- cmp r7, 0x1\n\
- beq _0804BAB2\n\
-_0804BA9E:\n\
- adds r0, r7, r2\n\
-_0804BAA0:\n\
- add r0, r9\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0\n\
- ble _0804BAB2\n\
- lsrs r0, r5, 16\n\
- mov r8, r0\n\
- adds r3, 0x1\n\
-_0804BAB2:\n\
- lsrs r4, 1\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- adds r5, r1\n\
- adds r7, 0x1\n\
- cmp r4, 0\n\
- bne _0804BA26\n\
-_0804BAC0:\n\
- ldr r0, =gBattlescriptCurrInstr\n\
- mov r9, r0\n\
- cmp r3, 0x1\n\
- ble _0804BB4E\n\
- ldr r0, [r0]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0x39\n\
- mov r8, r1\n\
- cmp r0, 0\n\
- beq _0804BB4E\n\
- movs r0, 0x3A\n\
- b _0804BB4C\n\
- .pool\n\
-_0804BAEC:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0xE\n\
- cmp r0, 0\n\
- beq _0804BAF8\n\
- movs r1, 0x26\n\
-_0804BAF8:\n\
- mov r9, r5\n\
- cmp r4, 0\n\
- beq _0804BB34\n\
- ldr r6, =gBattleMons + 0x18\n\
- adds r5, r2, 0\n\
- lsls r2, r1, 16\n\
-_0804BB04:\n\
- movs r0, 0x1\n\
- ands r0, r4\n\
- cmp r0, 0\n\
- beq _0804BB26\n\
- ldrb r1, [r5]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0xB\n\
- bgt _0804BB26\n\
- lsrs r1, r2, 16\n\
- mov r8, r1\n\
- adds r3, 0x1\n\
-_0804BB26:\n\
- lsrs r4, 1\n\
- movs r0, 0x80\n\
- lsls r0, 9\n\
- adds r2, r0\n\
- adds r7, 0x1\n\
- cmp r4, 0\n\
- bne _0804BB04\n\
-_0804BB34:\n\
- cmp r3, 0x1\n\
- ble _0804BB4E\n\
- mov r1, r9\n\
- ldr r0, [r1]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0x37\n\
- mov r8, r1\n\
- cmp r0, 0\n\
- beq _0804BB4E\n\
- movs r0, 0x38\n\
-_0804BB4C:\n\
- mov r8, r0\n\
-_0804BB4E:\n\
- mov r1, r9\n\
- ldr r2, [r1]\n\
- ldrb r1, [r2, 0x3]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804BB6C\n\
- cmp r3, 0x1\n\
- bgt _0804BB6C\n\
- adds r0, r2, 0x4\n\
- mov r1, r9\n\
- b _0804BBBA\n\
- .pool\n\
-_0804BB6C:\n\
- cmp r3, 0\n\
- beq _0804BBB4\n\
- ldr r4, =gBattleScripting\n\
- ldrb r0, [r4, 0x1B]\n\
- cmp r0, 0\n\
- bne _0804BBB4\n\
- movs r0, 0\n\
- movs r1, 0x1\n\
- mov r2, r8\n\
- str r3, [sp]\n\
- bl BtlController_EmitBattleAnimation\n\
- ldr r0, =gActiveBattler\n\
- ldrb r0, [r0]\n\
- bl MarkBattlerForControllerExec\n\
- ldr r0, =gBattlescriptCurrInstr\n\
- ldr r0, [r0]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- ldr r3, [sp]\n\
- cmp r0, 0\n\
- beq _0804BBA4\n\
- cmp r3, 0x1\n\
- ble _0804BBA4\n\
- movs r0, 0x1\n\
- strb r0, [r4, 0x1B]\n\
-_0804BBA4:\n\
- ldr r1, =gBattlescriptCurrInstr\n\
- b _0804BBB6\n\
- .pool\n\
-_0804BBB4:\n\
- mov r1, r9\n\
-_0804BBB6:\n\
- ldr r0, [r1]\n\
- adds r0, 0x4\n\
-_0804BBBA:\n\
- str r0, [r1]\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided");
-}
-#endif // NONMATCHING
#define ATK49_LAST_CASE 17
@@ -5271,10 +5015,9 @@ static void atk4E_switchinanim(void)
static void atk4F_jumpifcantswitch(void)
{
- s32 val = 0;
- s32 compareVar = 0;
- struct Pokemon *party = NULL;
- s32 r7 = 0;
+ s32 i;
+ s32 lastMonId;
+ struct Pokemon *party;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
@@ -5294,20 +5037,20 @@ static void atk4F_jumpifcantswitch(void)
else
party = gPlayerParty;
- val = 0;
- if (2 & gActiveBattler)
- val = 3;
+ i = 0;
+ if (gActiveBattler & 2)
+ i = 3;
- for (compareVar = val + 3; val < compareVar; val++)
+ for (lastMonId = i + 3; i < lastMonId; i++)
{
- if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && GetMonData(&party[val], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != val)
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
break;
}
- if (val == compareVar)
+ if (i == lastMonId)
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
@@ -5320,18 +5063,18 @@ static void atk4F_jumpifcantswitch(void)
{
party = gPlayerParty;
- val = 0;
+ i = 0;
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
- val = 3;
+ i = 3;
}
else
{
party = gEnemyParty;
if (gActiveBattler == 1)
- val = 0;
+ i = 0;
else
- val = 3;
+ i = 3;
}
}
else
@@ -5341,22 +5084,21 @@ static void atk4F_jumpifcantswitch(void)
else
party = gPlayerParty;
-
- val = 0;
+ i = 0;
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
- val = 3;
+ i = 3;
}
- for (compareVar = val + 3; val < compareVar; val++)
+ for (lastMonId = i + 3; i < lastMonId; i++)
{
- if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && GetMonData(&party[val], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != val)
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
break;
}
- if (val == compareVar)
+ if (i == lastMonId)
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
@@ -5365,58 +5107,61 @@ static void atk4F_jumpifcantswitch(void)
{
party = gEnemyParty;
- val = 0;
- if (gActiveBattler == 3)
- val = 3;
+ i = 0;
+ if (gActiveBattler == B_POSITION_OPPONENT_RIGHT)
+ i = 3;
- for (compareVar = val + 3; val < compareVar; val++)
+ for (lastMonId = i + 3; i < lastMonId; i++)
{
- if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && GetMonData(&party[val], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != val)
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
break;
}
- if (val == compareVar)
+ if (i == lastMonId)
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
else
{
+ u8 battlerIn1, battlerIn2;
+
if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
{
- r7 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- compareVar = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
else
- compareVar = r7;
+ battlerIn2 = battlerIn1;
party = gEnemyParty;
}
else
{
- r7 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- compareVar = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
else
- compareVar = r7;
+ battlerIn2 = battlerIn1;
party = gPlayerParty;
}
- for (val = 0; val < 6; val++)
+
+ for (i = 0; i < PARTY_SIZE; i++)
{
- if (GetMonData(&party[val], MON_DATA_HP) != 0
- && GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && val != gBattlerPartyIndexes[r7] && val != gBattlerPartyIndexes[compareVar])
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && i != gBattlerPartyIndexes[battlerIn1] && i != gBattlerPartyIndexes[battlerIn2])
break;
}
- if (val == 6)
+ if (i == 6)
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 5b2bf4d98..fa1eb7edc 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -31,6 +31,7 @@
#include "string_util.h"
#include "overworld.h"
#include "field_weather.h"
+#include "gym_leader_rematch.h"
enum
{
@@ -66,7 +67,6 @@ extern void Overworld_ClearSavedMusic(void);
extern void CB2_WhiteOut(void);
extern void sub_80AF6F0(void);
extern void PlayBattleBGM(void);
-extern void sub_81DA57C(void);
extern u8 Overworld_GetFlashLevel(void);
extern u16 sub_81A9AA8(u8 localId);
extern u16 sub_81D6180(u8 localId);
@@ -252,84 +252,84 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] =
{
- {{0x0025, 0x0028, 0x0029, 0x002a, 0x002b}, 0x0000, 0x0021},
- {{0x02e1, 0x032c, 0x032d, 0x032e, 0x032f}, 0x0000, 0x0014},
- {{0x002c, 0x002f, 0x0030, 0x0031, 0x0032}, 0x0000, 0x001a},
- {{0x0039, 0x003c, 0x003d, 0x003e, 0x003f}, 0x0000, 0x0018},
- {{0x0040, 0x0043, 0x0044, 0x0045, 0x0046}, 0x0000, 0x0018},
- {{0x02af, 0x02b0, 0x02b1, 0x02b2, 0x02b3}, 0x0000, 0x0027},
- {{0x02ff, 0x033c, 0x033d, 0x033e, 0x033f}, 0x0000, 0x0024},
- {{0x005e, 0x0065, 0x0066, 0x0067, 0x0068}, 0x0000, 0x001a},
- {{0x004e, 0x0054, 0x0055, 0x0056, 0x0057}, 0x0000, 0x001a},
- {{0x006c, 0x006e, 0x006f, 0x0070, 0x0071}, 0x0018, 0x0014},
- {{0x0072, 0x0078, 0x0079, 0x007a, 0x007b}, 0x0000, 0x0013},
- {{0x0090, 0x034c, 0x034d, 0x034e, 0x034f}, 0x0018, 0x0038},
- {{0x007f, 0x0084, 0x0085, 0x0086, 0x0087}, 0x0000, 0x0024},
- {{0x0088, 0x008b, 0x008c, 0x008d, 0x008e}, 0x0000, 0x0013},
- {{0x008f, 0x0093, 0x0094, 0x0095, 0x0096}, 0x0000, 0x001d},
- {{0x009b, 0x00af, 0x00b0, 0x00b1, 0x00b2}, 0x0000, 0x0016},
- {{0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb}, 0x0000, 0x001e},
- {{0x02a0, 0x0338, 0x0339, 0x033a, 0x033b}, 0x0000, 0x002a},
- {{0x00c3, 0x0340, 0x0341, 0x0342, 0x0343}, 0x0000, 0x0026},
- {{0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8}, 0x0000, 0x0021},
- {{0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2}, 0x0000, 0x001d},
- {{0x00d8, 0x00db, 0x00dc, 0x00dd, 0x00de}, 0x0018, 0x000d},
- {{0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad}, 0x0018, 0x0001},
- {{0x00e2, 0x00e4, 0x00e5, 0x00e6, 0x00e7}, 0x0000, 0x0023},
- {{0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2}, 0x0000, 0x0026},
- {{0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd}, 0x0000, 0x0026},
- {{0x00fe, 0x0101, 0x0102, 0x0103, 0x0104}, 0x0000, 0x0024},
- {{0x0118, 0x011a, 0x011b, 0x011c, 0x011d}, 0x0000, 0x001f},
- {{0x0111, 0x0114, 0x0115, 0x0116, 0x0117}, 0x0000, 0x001f},
- {{0x011f, 0x0120, 0x0121, 0x0122, 0x0123}, 0x0000, 0x0020},
- {{0x012e, 0x012f, 0x0130, 0x0131, 0x0132}, 0x0000, 0x0019},
- {{0x0125, 0x0127, 0x0128, 0x0129, 0x012a}, 0x0000, 0x0012},
- {{0x0133, 0x0134, 0x0135, 0x0136, 0x0137}, 0x0000, 0x001e},
- {{0x0139, 0x013a, 0x013b, 0x013c, 0x013d}, 0x0018, 0x000c},
- {{0x013e, 0x0148, 0x0149, 0x014a, 0x014b}, 0x0000, 0x0011},
- {{0x0153, 0x015a, 0x015b, 0x015c, 0x015d}, 0x0000, 0x0015},
- {{0x0178, 0x017b, 0x017c, 0x017d, 0x017e}, 0x0000, 0x002b},
- {{0x0171, 0x0172, 0x0173, 0x0174, 0x0175}, 0x0000, 0x0020},
- {{0x0166, 0x0168, 0x0169, 0x016a, 0x016b}, 0x0000, 0x0019},
- {{0x016c, 0x016d, 0x016e, 0x016f, 0x0170}, 0x0000, 0x0020},
- {{0x0182, 0x0184, 0x0185, 0x0186, 0x0187}, 0x0000, 0x002b},
- {{0x0161, 0x0162, 0x0163, 0x0164, 0x0165}, 0x0000, 0x0019},
- {{0x0179, 0x0334, 0x0335, 0x0336, 0x0337}, 0x0000, 0x0029},
- {{0x0188, 0x0189, 0x018a, 0x018b, 0x018c}, 0x0018, 0x0001},
- {{0x0196, 0x0199, 0x019a, 0x019b, 0x019c}, 0x0000, 0x0023},
- {{0x01a3, 0x01a5, 0x01a6, 0x01a7, 0x01a8}, 0x0000, 0x001c},
- {{0x01ab, 0x01ae, 0x01af, 0x01b0, 0x01b1}, 0x0000, 0x001e},
- {{0x01b2, 0x01b5, 0x01b6, 0x01b7, 0x01b8}, 0x0000, 0x001c},
- {{0x01c1, 0x01d1, 0x01d2, 0x01d3, 0x01d4}, 0x0000, 0x0027},
- {{0x01da, 0x01dd, 0x01de, 0x01df, 0x01e0}, 0x0018, 0x000d},
- {{0x01e1, 0x01e2, 0x01e7, 0x01e8, 0x01e9}, 0x0000, 0x0012},
- {{0x01ec, 0x01f1, 0x01f2, 0x01f3, 0x01f4}, 0x0000, 0x0028},
- {{0x02e4, 0x0330, 0x0331, 0x0332, 0x0333}, 0x0000, 0x0017},
- {{0x0200, 0x0203, 0x0204, 0x0205, 0x0206}, 0x0000, 0x0019},
- {{0x0221, 0x0224, 0x0225, 0x0226, 0x0227}, 0x0000, 0x0020},
- {{0x021a, 0x021d, 0x021e, 0x021f, 0x0220}, 0x0000, 0x0020},
- {{0x0009, 0x0348, 0x0349, 0x034a, 0x034b}, 0x0018, 0x0011},
- {{0x022f, 0x0232, 0x0233, 0x0234, 0x0235}, 0x0000, 0x0022},
- {{0x0228, 0x022b, 0x022c, 0x022d, 0x022e}, 0x0000, 0x0022},
- {{0x025c, 0x025f, 0x0260, 0x0261, 0x0262}, 0x0000, 0x0013},
- {{0x026d, 0x026e, 0x026f, 0x0270, 0x0271}, 0x0018, 0x000b},
- {{0x0273, 0x027c, 0x027d, 0x027e, 0x027f}, 0x0000, 0x001b},
- {{0x0001, 0x0344, 0x0345, 0x0346, 0x0347}, 0x0018, 0x000c},
- {{0x0282, 0x0283, 0x0284, 0x0285, 0x0286}, 0x0018, 0x003e},
- {{0x0291, 0x0292, 0x0293, 0x0294, 0x0294}, 0x0018, 0x002b},
- {{0x0109, 0x0302, 0x0303, 0x0304, 0x0305}, 0x0000, 0x0003},
- {{0x010a, 0x0306, 0x0307, 0x0308, 0x0309}, 0x0000, 0x000b},
- {{0x010b, 0x030a, 0x030b, 0x030c, 0x030d}, 0x0000, 0x0002},
- {{0x010c, 0x030e, 0x030f, 0x0310, 0x0311}, 0x0000, 0x000c},
- {{0x010d, 0x0312, 0x0313, 0x0314, 0x0315}, 0x0000, 0x0000},
- {{0x010e, 0x0316, 0x0317, 0x0318, 0x0319}, 0x0000, 0x0004},
- {{0x010f, 0x031a, 0x031b, 0x031c, 0x031d}, 0x0000, 0x0006},
- {{0x0110, 0x031e, 0x031f, 0x0320, 0x0321}, 0x0000, 0x0007},
- {{0x0105, 0x0105, 0x0105, 0x0105, 0x0105}, 0x0000, 0x0008},
- {{0x0106, 0x0106, 0x0106, 0x0106, 0x0106}, 0x0000, 0x0008},
- {{0x0107, 0x0107, 0x0107, 0x0107, 0x0107}, 0x0000, 0x0008},
- {{0x0108, 0x0108, 0x0108, 0x0108, 0x0108}, 0x0000, 0x0008},
- {{0x014f, 0x014f, 0x014f, 0x014f, 0x014f}, 0x0000, 0x0008},
+ {{TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5}, 0x0, 0x21},
+ {{TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5}, 0x0, 0x14},
+ {{TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5}, 0x0, 0x1a},
+ {{TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5}, 0x0, 0x18},
+ {{TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5}, 0x0, 0x18},
+ {{TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5}, 0x0, 0x27},
+ {{TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5}, 0x0, 0x24},
+ {{TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5}, 0x0, 0x1a},
+ {{TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5}, 0x0, 0x1a},
+ {{TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5}, 0x18, 0x14},
+ {{TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6}, 0x0, 0x13},
+ {{TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5}, 0x18, 0x38},
+ {{TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5}, 0x0, 0x24},
+ {{TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5}, 0x0, 0x13},
+ {{TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5}, 0x0, 0x1d},
+ {{TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5}, 0x0, 0x16},
+ {{TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5}, 0x0, 0x1e},
+ {{TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5}, 0x0, 0x2a},
+ {{TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5}, 0x0, 0x26},
+ {{TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5}, 0x0, 0x21},
+ {{TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5}, 0x0, 0x1d},
+ {{TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5}, 0x18, 0xd},
+ {{TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5}, 0x18, 0x1},
+ {{TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5}, 0x0, 0x23},
+ {{TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5}, 0x0, 0x26},
+ {{TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5}, 0x0, 0x26},
+ {{TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5}, 0x0, 0x24},
+ {{TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5}, 0x0, 0x1f},
+ {{TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5}, 0x0, 0x1f},
+ {{TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5}, 0x0, 0x20},
+ {{TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5}, 0x0, 0x19},
+ {{TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5}, 0x0, 0x12},
+ {{TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5}, 0x0, 0x1e},
+ {{TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5}, 0x18, 0xc},
+ {{TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5}, 0x0, 0x11},
+ {{TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5}, 0x0, 0x15},
+ {{TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5}, 0x0, 0x2b},
+ {{TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5}, 0x0, 0x20},
+ {{TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5}, 0x0, 0x19},
+ {{TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5}, 0x0, 0x20},
+ {{TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5}, 0x0, 0x2b},
+ {{TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5}, 0x0, 0x19},
+ {{TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5}, 0x0, 0x29},
+ {{TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5}, 0x18, 0x1},
+ {{TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5}, 0x0, 0x23},
+ {{TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5}, 0x0, 0x1c},
+ {{TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5}, 0x0, 0x1e},
+ {{TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5}, 0x0, 0x1c},
+ {{TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5}, 0x0, 0x27},
+ {{TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5}, 0x18, 0xd},
+ {{TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6}, 0x0, 0x12},
+ {{TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5}, 0x0, 0x28},
+ {{TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5}, 0x0, 0x17},
+ {{TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5}, 0x0, 0x19},
+ {{TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5}, 0x0, 0x20},
+ {{TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5}, 0x0, 0x20},
+ {{TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5}, 0x18, 0x11},
+ {{TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5}, 0x0, 0x22},
+ {{TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5}, 0x0, 0x22},
+ {{TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5}, 0x0, 0x13},
+ {{TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5}, 0x18, 0xb},
+ {{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b},
+ {{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc},
+ {{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e},
+ {{TRAINER_WALLY_3, 0x292, 0x293, 0x294, 0x294}, 0x18, 0x2b},
+ {{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3},
+ {{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb},
+ {{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2},
+ {{TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5}, 0x0, 0xc},
+ {{TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5}, 0x0, 0x0},
+ {{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4},
+ {{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6},
+ {{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7},
+ {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8},
+ {{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8},
+ {{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8},
+ {{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8},
+ {{TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE}, 0x0, 0x8},
};
static const u16 sBadgeFlags[8] =
@@ -945,13 +945,13 @@ static void CB2_EndFirstBattle(void)
static void sub_80B1218(void)
{
if (GetGameStat(GAME_STAT_WILD_BATTLES) % 60 == 0)
- sub_81DA57C();
+ UpdateGymLeaderRematch();
}
static void sub_80B1234(void)
{
if (GetGameStat(GAME_STAT_TRAINER_BATTLES) % 20 == 0)
- sub_81DA57C();
+ UpdateGymLeaderRematch();
}
// why not just use the macros? maybe its because they didnt want to uncast const every time?
diff --git a/src/battle_tv.c b/src/battle_tv.c
new file mode 100644
index 000000000..777b4846f
--- /dev/null
+++ b/src/battle_tv.c
@@ -0,0 +1,1576 @@
+#include "global.h"
+#include "pokemon.h"
+#include "battle.h"
+#include "battle_tv.h"
+#include "constants/battle_string_ids.h"
+#include "constants/battle_anim.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "battle_message.h"
+#include "tv.h"
+
+extern struct StringInfoBattle *gStringInfo;
+
+// this file's functions
+static bool8 sub_817E0B8(u16 stringId);
+static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3);
+static void TrySetBattleSeminarShow(void);
+static void AddPointsOnFainting(bool8 targetFainted);
+static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot);
+static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride);
+
+// const rom data
+static const u16 sVariableDmgMoves[] =
+{
+ MOVE_COUNTER, MOVE_FISSURE, MOVE_BIDE, MOVE_MIRROR_COAT,
+ MOVE_HORN_DRILL, MOVE_FLAIL, MOVE_REVERSAL, MOVE_HIDDEN_POWER,
+ MOVE_SHEER_COLD, MOVE_FOCUS_PUNCH, MOVE_ERUPTION,
+ MOVE_WATER_SPOUT, MOVE_DREAM_EATER, MOVE_WEATHER_BALL,
+ MOVE_SNORE, MOVE_PAIN_SPLIT, MOVE_GUILLOTINE,
+ MOVE_FRUSTRATION, MOVE_RETURN, MOVE_ENDEAVOR,
+ MOVE_PRESENT, MOVE_REVENGE, 0xFFFF,
+ // those are handled by the function itself
+ MOVE_MAGNITUDE, MOVE_PSYWAVE, 0xFFFF
+};
+
+static const u16 sUnknown_0860A4E0[] =
+{
+ 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, 0x0005, 0x0004, 0x0005, 0x0001, 0x0003, 0x0001,
+ 0x0003, 0x0005, 0x0001, 0x0007, 0x0001, 0x0007, 0x0007, 0x0001, 0x0005, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001,
+ 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0007, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0004,
+ 0x0005, 0x0002, 0x0004, 0x0001, 0x0004, 0x0001, 0x0007, 0x0002, 0x0001, 0x0005, 0x0007, 0x0003, 0x0003, 0x0004, 0x0003, 0x0003,
+ 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0005, 0x0001, 0x0001, 0x0004, 0x0005, 0x0003, 0x0001, 0x0002, 0x0001, 0x0005,
+ 0x0004, 0x0003, 0x0006, 0x0004, 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001, 0x0001, 0x0007,
+ 0x0002, 0x0002, 0x0001, 0x0001, 0x0004, 0x0004, 0x0004, 0x0001, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0007, 0x0007,
+ 0x0006, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0001, 0x0001, 0x0004, 0x0004,
+ 0x0003, 0x0003, 0x0003, 0x0001, 0x0004, 0x0007, 0x0007, 0x0005, 0x0007, 0x0001, 0x0007, 0x0001, 0x0005, 0x0000, 0x0004, 0x0004,
+ 0x0004, 0x0004, 0x0004, 0x0002, 0x0002, 0x0006, 0x0003, 0x0006, 0x0004, 0x0004, 0x0002, 0x0005, 0x0002, 0x0001, 0x0001, 0x0006,
+ 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003
+};
+static const u16 sUnknown_0860A68C[] =
+{
+ 0x0004, 0xfffd, 0xfffa
+};
+static const u16 sUnknown_0860A692[] =
+{
+ 0x0004, 0x0004, 0x0006, 0x0006, 0x0007, 0x0006, 0x0002
+};
+static const u16 sUnknown_0860A6A0[] =
+{
+ 0x0091, 0x0003, 0x00fa, 0x0003, 0x00be, 0x0003, 0x0080, 0x0003, 0x006e, 0x0003, 0x0098, 0x0003, 0x0143, 0x0003, 0x0123, 0x0003,
+ 0x007f, 0x0003, 0x014a, 0x0003, 0x0039, 0x0003, 0x0134, 0x0003, 0x0038, 0x0003, 0x003d, 0x0003, 0x015a, 0x0000, 0x0037, 0x0003,
+ 0x0160, 0x0003, 0x0137, 0x0003, 0x0057, 0x0003, 0x004c, 0xfffc, 0x013b, 0xfffc, 0x00ac, 0xfffc, 0x0035, 0xfffc, 0x00dd, 0xfffc,
+ 0x007e, 0xfffc, 0x0101, 0xfffc, 0x0034, 0xfffc, 0x0133, 0xfffc, 0x012b, 0xfffc, 0x011c, 0xfffc, 0x0053, 0xfffc, 0x0007, 0xfffc,
+ 0x004c, 0xfffc, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A728[] =
+{
+ 0x013b, 0x0003, 0x00ac, 0x0003, 0x0035, 0x0003, 0x00dd, 0x0003, 0x007e, 0x0003, 0x0101, 0x0003, 0x0034, 0x0003, 0x0133, 0x0003,
+ 0x012b, 0x0003, 0x011c, 0x0003, 0x0053, 0x0003, 0x0007, 0x0003, 0x004c, 0x0005, 0x00eb, 0x0003, 0x00ea, 0x0003, 0x00ec, 0x0003,
+ 0x0137, 0x0003, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A770[] =
+{
+ 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A77C[] =
+{
+ 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A788[] =
+{
+ 0x0055, 0x0003, 0x0009, 0x0003, 0x00d1, 0x0003, 0x0054, 0x0003, 0x00c0, 0x0003, 0x015f, 0x0003, 0x0056, 0x0000, 0x0057, 0x0003,
+ 0x0158, 0x0003, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A7B0[] =
+{
+ 0x0005, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003
+};
+static const u16 sUnknown_0860A7BE[] =
+{
+ 0x0005, 0x0005, 0x0005, 0x0005, 0x0005
+};
+static const u16 sUnknown_0860A7C8[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7CA[] =
+{
+ 0x0005
+};
+static const u16 sUnknown_0860A7CC[] =
+{
+ 0x0005
+};
+static const u16 sUnknown_0860A7CE[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D0[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D2[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7D4[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D6[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7D8[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7DA[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7DC[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7DE[] =
+{
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
+};
+static const u16 sUnknown_0860A7EC[] =
+{
+ 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+};
+static const u16 sUnknown_0860A7FA[] =
+{
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
+};
+static const u16 sUnknown_0860A808[] =
+{
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
+};
+static const u16 sUnknown_0860A816[] =
+{
+ 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+};
+static const u16 sUnknown_0860A824[] =
+{
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe
+};
+
+static const u16 *const sPointsArray[] =
+{
+ sUnknown_0860A4E0,
+ sUnknown_0860A68C,
+ sUnknown_0860A692,
+ sUnknown_0860A6A0,
+ sUnknown_0860A728,
+ sUnknown_0860A770,
+ sUnknown_0860A77C,
+ sUnknown_0860A788,
+ sUnknown_0860A7B0,
+ sUnknown_0860A7BE,
+ sUnknown_0860A7C8,
+ sUnknown_0860A7CA,
+ sUnknown_0860A7CC,
+ sUnknown_0860A7CE,
+ sUnknown_0860A7D0,
+ sUnknown_0860A7D2,
+ sUnknown_0860A7D4,
+ sUnknown_0860A7D6,
+ sUnknown_0860A7D8,
+ sUnknown_0860A7DA,
+ sUnknown_0860A7DA,
+ sUnknown_0860A7DC,
+ sUnknown_0860A7DE,
+ sUnknown_0860A7EC,
+ sUnknown_0860A7FA,
+ sUnknown_0860A808,
+ sUnknown_0860A816,
+ sUnknown_0860A824
+};
+
+static const u16 sUnknown_0860A8A4[] =
+{
+ STRINGID_PKMNPERISHCOUNTFELL, STRINGID_PKMNWISHCAMETRUE, STRINGID_PKMNLOSTPPGRUDGE,
+ STRINGID_PKMNTOOKFOE, STRINGID_PKMNABSORBEDNUTRIENTS, STRINGID_PKMNANCHOREDITSELF,
+ STRINGID_PKMNAFFLICTEDBYCURSE, STRINGID_PKMNSAPPEDBYLEECHSEED, STRINGID_PKMNLOCKEDINNIGHTMARE,
+ STRINGID_PKMNHURTBY, STRINGID_PKMNHURTBYBURN, STRINGID_PKMNHURTBYPOISON,
+ STRINGID_PKMNHURTBYSPIKES, STRINGID_ATTACKERFAINTED, STRINGID_TARGETFAINTED,
+ STRINGID_PKMNHITWITHRECOIL, STRINGID_PKMNCRASHED, 0xFFFF
+};
+
+// code
+void BattleTv_SetDataBasedOnString(u16 stringId)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide, defSide, effSide, scriptingSide;
+ struct Pokemon *atkMon, *defMon;
+ u8 moveSlot;
+ u32 atkFlank, defFlank, effFlank;
+ u8 *perishCount;
+ u16 *statStringId, *finishedMoveId;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && stringId != STRINGID_ITDOESNTAFFECT && stringId != STRINGID_NOTVERYEFFECTIVE)
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ defSide = GetBattlerSide(gBattlerTarget);
+ effSide = GetBattlerSide(gEffectBattler);
+ scriptingSide = GetBattlerSide(gStringInfo->scrActive);
+
+ if (atkSide == B_SIDE_PLAYER)
+ atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ else
+ atkMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+
+ if (defSide == B_SIDE_PLAYER)
+ defMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ else
+ defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+
+ moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gStringInfo->currentMove);
+
+ if (moveSlot >= 4 && sub_817E0B8(stringId) && stringId > BATTLESTRINGS_ID_ADDER)
+ {
+ tvPtr->side[atkSide].faintCause = 15;
+ return;
+ }
+
+ perishCount = (u8 *)(gBattleTextBuff1 + 4);
+ statStringId = (u16 *)(gBattleTextBuff2 + 2);
+ finishedMoveId = (u16 *)(gBattleTextBuff1 + 2);
+
+ atkFlank = GetBattlerPosition(gBattlerAttacker) / 2;
+ defFlank = GetBattlerPosition(gBattlerTarget) / 2;
+ effFlank = GetBattlerPosition(gEffectBattler) / 2;
+
+ switch (stringId)
+ {
+ case STRINGID_ITDOESNTAFFECT:
+ AddMovePoints(1, moveSlot, 2, 0);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ TrySetBattleSeminarShow();
+ break;
+ case STRINGID_NOTVERYEFFECTIVE:
+ AddMovePoints(1, moveSlot, 1, 0);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && GetMonData(defMon, MON_DATA_HP, NULL) != 0)
+ TrySetBattleSeminarShow();
+ break;
+ case STRINGID_SUPEREFFECTIVE:
+ AddMovePoints(1, moveSlot, 0, 0);
+ break;
+ case STRINGID_PKMNFORESAWATTACK:
+ tvPtr->side[atkSide].futureSightMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].futureSightMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNCHOSEXASDESTINY:
+ tvPtr->side[atkSide].doomDesireMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].doomDesireMoveSlot = moveSlot;
+ break;
+ case STRINGID_FAINTINTHREE:
+ tvPtr->side[atkSide].perishSongMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].perishSongMoveSlot = moveSlot;
+ tvPtr->side[atkSide].perishSong = 1;
+ break;
+ case STRINGID_PKMNPERISHCOUNTFELL:
+ if (*perishCount == 0)
+ tvPtr->side[atkSide].faintCause = 10;
+ break;
+ case STRINGID_PKMNWISHCAMETRUE:
+ if (tvPtr->side[defSide].wishMonId != 0)
+ {
+ AddMovePoints(2, 3, defSide,
+ (tvPtr->side[defSide].wishMonId - 1) * 4 + tvPtr->side[defSide].wishMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNWANTSGRUDGE:
+ tvPtr->side[atkSide].grudgeMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].grudgeMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNLOSTPPGRUDGE:
+ if (tvPtr->side[defSide].grudgeMonId != 0)
+ {
+ AddMovePoints(2, 4, defSide,
+ (tvPtr->side[defSide].grudgeMonId - 1) * 4 + tvPtr->side[defSide].grudgeMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNTRYINGTOTAKEFOE:
+ tvPtr->side[atkSide].destinyBondMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].destinyBondMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNTOOKFOE:
+ if (tvPtr->side[defSide].destinyBondMonId != 0)
+ tvPtr->side[atkSide].faintCause = 11;
+ break;
+ case STRINGID_PKMNPLANTEDROOTS:
+ tvPtr->pos[atkSide][atkFlank].ingrainMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].ingrainMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNABSORBEDNUTRIENTS:
+ if (tvPtr->pos[atkSide][atkFlank].ingrainMonId != 0)
+ {
+ AddMovePoints(2, 6, atkSide,
+ (tvPtr->pos[atkSide][atkFlank].ingrainMonId - 1) * 4 + tvPtr->pos[atkSide][atkFlank].ingrainMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNANCHOREDITSELF:
+ if (tvPtr->pos[defSide][defFlank].ingrainMonId != 0)
+ {
+ AddMovePoints(2, 6, defSide,
+ (tvPtr->pos[defSide][defFlank].ingrainMonId - 1) * 4 + tvPtr->pos[defSide][defFlank].ingrainMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNTRANSFORMEDINTO:
+ gBattleStruct->anyMonHasTransformed = TRUE;
+ break;
+ case STRINGID_CRITICALHIT:
+ AddMovePoints(0x12, moveSlot, 0, 0);
+ break;
+ case STRINGID_PKMNSSTATCHANGED:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (*statStringId == STRINGID_STATSHARPLY)
+ AddMovePoints(0x17, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x16, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ break;
+ case STRINGID_PKMNSSTATCHANGED2:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (gBattlerAttacker == gBattlerTarget)
+ {
+ if (*statStringId == STRINGID_STATSHARPLY)
+ AddMovePoints(0x17, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x16, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ else
+ {
+ AddMovePoints(0x1B, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ }
+ break;
+ case STRINGID_PKMNSSTATCHANGED3:
+ if (gBattleTextBuff1[2] != 0)
+ AddMovePoints(0x18, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ break;
+ case STRINGID_PKMNSSTATCHANGED4:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (*statStringId == STRINGID_STATHARSHLY)
+ AddMovePoints(0x1A, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x19, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ break;
+ case STRINGID_PKMNLAIDCURSE:
+ tvPtr->pos[defSide][defFlank].curseMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].curseMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNAFFLICTEDBYCURSE:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL)
+ && tvPtr->pos[atkSide][atkFlank].curseMonId != 0)
+ {
+ AddMovePoints(8, 0, tvPtr->pos[atkSide][atkFlank].curseMonId - 1, tvPtr->pos[atkSide][atkFlank].curseMoveSlot);
+ tvPtr->side[atkSide].faintCause = 1;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNSEEDED:
+ tvPtr->pos[defSide][defFlank].leechSeedMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].leechSeedMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNSAPPEDBYLEECHSEED:
+ if (tvPtr->pos[atkSide][atkFlank].leechSeedMonId != 0)
+ {
+ AddMovePoints(8, 1, tvPtr->pos[atkSide][atkFlank].leechSeedMonId - 1, tvPtr->pos[atkSide][atkFlank].leechSeedMoveSlot);
+ tvPtr->side[atkSide].faintCause = 2;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNFELLINTONIGHTMARE:
+ tvPtr->pos[defSide][defFlank].nightmareMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].nightmareMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNLOCKEDINNIGHTMARE:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0
+ && tvPtr->pos[atkSide][atkFlank].nightmareMonId != 0)
+ {
+ AddMovePoints(8, 5, tvPtr->pos[atkSide][atkFlank].nightmareMonId - 1, tvPtr->pos[atkSide][atkFlank].nightmareMoveSlot);
+ tvPtr->side[atkSide].faintCause = 5;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNSQUEEZEDBYBIND:
+ case STRINGID_PKMNTRAPPEDINVORTEX:
+ case STRINGID_PKMNWRAPPEDBY:
+ case STRINGID_PKMNCLAMPED:
+ case STRINGID_PKMNTRAPPEDBYSANDTOMB:
+ tvPtr->pos[defSide][defFlank].wrapMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].wrapMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBY:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0
+ && tvPtr->pos[atkSide][atkFlank].wrapMonId != 0)
+ {
+ AddMovePoints(8, 6, tvPtr->pos[atkSide][atkFlank].wrapMonId - 1, tvPtr->pos[atkSide][atkFlank].wrapMoveSlot);
+ tvPtr->side[atkSide].faintCause = 6;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNWASBURNED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].brnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].brnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYBURN:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0)
+ {
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMonId != 0)
+ AddMovePoints(8, 4, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMoveSlot);
+ tvPtr->side[atkSide].faintCause = 4;
+ tvPtr->side[atkSide].faintCauseMonId = gBattlerPartyIndexes[gBattlerAttacker];
+ }
+ break;
+ case STRINGID_PKMNWASPOISONED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].psnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].psnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNBADLYPOISONED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].badPsnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].badPsnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYPOISON:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0)
+ {
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMonId != 0)
+ AddMovePoints(8, 2, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMoveSlot);
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMonId != 0)
+ AddMovePoints(8, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMoveSlot);
+ tvPtr->side[atkSide].faintCause = 3;
+ tvPtr->side[atkSide].faintCauseMonId = gBattlerPartyIndexes[gBattlerAttacker];
+ }
+ break;
+ case STRINGID_PKMNFELLINLOVE:
+ tvPtr->pos[defSide][defFlank].attractMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].attractMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNIMMOBILIZEDBYLOVE:
+ if (tvPtr->pos[atkSide][atkFlank].attractMonId != 0)
+ AddMovePoints(9, 0, tvPtr->pos[atkSide][atkFlank].attractMonId - 1, tvPtr->pos[atkSide][atkFlank].attractMoveSlot);
+ break;
+ case STRINGID_PKMNWASPARALYZED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].prlzMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].prlzMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNISPARALYZED:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMonId != 0)
+ AddMovePoints(9, 2, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMoveSlot);
+ break;
+ case STRINGID_PKMNFELLASLEEP:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].slpMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].slpMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNFASTASLEEP:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId != 0
+ && gStringInfo->currentMove != MOVE_SNORE
+ && gStringInfo->currentMove != MOVE_SLEEP_TALK)
+ AddMovePoints(9, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMoveSlot);
+ break;
+ case STRINGID_PKMNWASFROZEN:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].frzMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].frzMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNISFROZEN:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMonId != 0)
+ AddMovePoints(9, 4, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMoveSlot);
+ break;
+ case STRINGID_PKMNWASCONFUSED:
+ tvPtr->pos[effSide][effFlank].confusionMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[effSide][effFlank].confusionMoveSlot = moveSlot;
+ break;
+ case STRINGID_ITHURTCONFUSION:
+ if (tvPtr->pos[atkSide][atkFlank].confusionMonId != 0)
+ AddMovePoints(9, 1, tvPtr->pos[atkSide][atkFlank].confusionMonId - 1, tvPtr->pos[atkSide][atkFlank].confusionMoveSlot);
+ tvPtr->side[atkSide].faintCause = 12;
+ break;
+ case STRINGID_SPIKESSCATTERED:
+ tvPtr->side[defSide].spikesMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[defSide].spikesMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYSPIKES:
+ if (tvPtr->side[scriptingSide].spikesMonId != 0)
+ {
+ AddMovePoints(10, scriptingSide ^ BIT_SIDE, tvPtr->side[scriptingSide].spikesMonId - 1, tvPtr->side[scriptingSide].spikesMoveSlot);
+ tvPtr->side[scriptingSide].faintCause = 7;
+ }
+ break;
+ case STRINGID_PKMNBLEWAWAYSPIKES:
+ tvPtr->side[atkSide].spikesMonId = 0;
+ tvPtr->side[atkSide].spikesMoveSlot = 0;
+ break;
+ case STRINGID_FIREWEAKENED:
+ tvPtr->pos[atkSide][atkFlank].waterSportMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].waterSportMoveSlot = moveSlot;
+ break;
+ case STRINGID_ELECTRICITYWEAKENED:
+ tvPtr->pos[atkSide][atkFlank].mudSportMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = moveSlot;
+ break;
+ case STRINGID_ATTACKERFAINTED:
+ AddPointsOnFainting(FALSE);
+ case STRINGID_RETURNMON:
+ if (tvPtr->pos[atkSide][atkFlank].waterSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][atkFlank].waterSportMonId = 0;
+ tvPtr->pos[atkSide][atkFlank].waterSportMoveSlot = 0;
+ }
+ if (tvPtr->pos[atkSide][atkFlank].mudSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][atkFlank].mudSportMonId = 0;
+ tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = 0;
+ }
+ break;
+ case STRINGID_TARGETFAINTED:
+ AddPointsOnFainting(TRUE);
+ if (tvPtr->pos[atkSide][defFlank].waterSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][defFlank].waterSportMonId = 0;
+ tvPtr->pos[atkSide][defFlank].waterSportMoveSlot = 0;
+ }
+ if (tvPtr->pos[atkSide][defFlank].mudSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][defFlank].mudSportMonId = 0;
+ tvPtr->pos[atkSide][defFlank].mudSportMoveSlot = 0;
+ }
+ break;
+ case STRINGID_PKMNRAISEDDEF:
+ case STRINGID_PKMNRAISEDDEFALITTLE:
+ tvPtr->side[atkSide].reflectMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].reflectMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNRAISEDSPDEF:
+ case STRINGID_PKMNRAISEDSPDEFALITTLE:
+ tvPtr->side[atkSide].lightScreenMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].lightScreenMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNSXWOREOFF:
+ if (*finishedMoveId == MOVE_REFLECT)
+ {
+ tvPtr->side[atkSide].reflectMonId = 0;
+ tvPtr->side[atkSide].reflectMoveSlot = 0;
+ }
+ if (*finishedMoveId == MOVE_LIGHT_SCREEN)
+ {
+ tvPtr->side[atkSide].lightScreenMonId = 0;
+ tvPtr->side[atkSide].lightScreenMoveSlot = 0;
+ }
+ if (*finishedMoveId == MOVE_MIST)
+ {
+ tvPtr->side[atkSide].mistMonId = 0;
+ tvPtr->side[atkSide].mistMoveSlot = 0;
+ }
+ break;
+ case STRINGID_PKMNCOVEREDBYVEIL:
+ tvPtr->side[atkSide].safeguardMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].safeguardMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNUSEDSAFEGUARD:
+ if (tvPtr->side[defSide].safeguardMonId != 0)
+ AddMovePoints(15, 0, tvPtr->side[defSide].safeguardMonId - 1, tvPtr->side[defSide].safeguardMoveSlot);
+ break;
+ case STRINGID_PKMNSAFEGUARDEXPIRED:
+ tvPtr->side[atkSide].safeguardMonId = 0;
+ tvPtr->side[atkSide].safeguardMoveSlot = 0;
+ break;
+ case STRINGID_PKMNSHROUDEDINMIST:
+ tvPtr->side[atkSide].mistMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].mistMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNPROTECTEDBYMIST:
+ if (tvPtr->side[defSide].mistMonId != 0)
+ AddMovePoints(16, 0, tvPtr->side[defSide].mistMonId - 1, tvPtr->side[defSide].mistMoveSlot);
+ break;
+ case STRINGID_THEWALLSHATTERED:
+ tvPtr->side[defSide].reflectMonId = 0;
+ tvPtr->side[defSide].reflectMoveSlot = 0;
+ tvPtr->side[defSide].lightScreenMonId = 0;
+ tvPtr->side[defSide].lightScreenMoveSlot = 0;
+ AddMovePoints(17, 0, gBattlerPartyIndexes[gBattlerAttacker], moveSlot);
+ break;
+ case STRINGID_PKMNFLINCHED:
+ if (tvPtr->pos[atkSide][0].attackedByMonId != 0)
+ AddMovePoints(21, 0, tvPtr->pos[atkSide][0].attackedByMonId - 1, tvPtr->pos[atkSide][0].attackedByMoveSlot);
+ if (tvPtr->pos[atkSide][1].attackedByMonId != 0)
+ AddMovePoints(21, 0, tvPtr->pos[atkSide][1].attackedByMonId - 1, tvPtr->pos[atkSide][1].attackedByMoveSlot);
+ break;
+ case STRINGID_PKMNCRASHED:
+ case STRINGID_PKMNHITWITHRECOIL:
+ tvPtr->side[atkSide].faintCause = 14;
+ break;
+ }
+}
+
+static bool8 sub_817E0B8(u16 stringId)
+{
+ s32 i = 0;
+
+ do
+ {
+ if (sUnknown_0860A8A4[i] == stringId)
+ break;
+ i++;
+ } while (sUnknown_0860A8A4[i] != 0xFFFF);
+
+ if (sUnknown_0860A8A4[i] == 0xFFFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide, defSide;
+ u8 moveSlot;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ defSide = GetBattlerSide(gBattlerTarget);
+ moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, move);
+
+ if (moveSlot >= 4)
+ {
+ tvPtr->side[atkSide].faintCause = 15;
+ return;
+ }
+
+ tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMoveSlot = moveSlot;
+ tvPtr->side[atkSide].usedMoveSlot = moveSlot;
+ AddMovePoints(0, moveSlot, gBattleMoves[move].effect, 0);
+ AddPointsBasedOnWeather(weatherFlags, move, moveSlot);
+ if (disableStructPtr->chargeTimer1 != 0)
+ AddMovePoints(7, move, moveSlot, 0);
+
+ if (move == MOVE_WISH)
+ {
+ tvPtr->side[atkSide].wishMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].wishMoveSlot = moveSlot;
+ }
+ if (move == MOVE_SELF_DESTRUCT || move == MOVE_EXPLOSION)
+ {
+ tvPtr->side[atkSide ^ BIT_SIDE].explosionMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide ^ BIT_SIDE].explosionMoveSlot = moveSlot;
+ tvPtr->side[atkSide ^ BIT_SIDE].faintCause = 13;
+ tvPtr->side[atkSide ^ BIT_SIDE].explosion = 1;
+ }
+
+ AddMovePoints(13, gBattleMoves[move].type, gBattleMoves[move].power, 0);
+ AddMovePoints(14, gBattleMoves[move].type, gBattleMoves[move].power, 0);
+ AddMovePoints(11, gBattleMoves[move].type, 0, 0);
+ AddMovePoints(12, gBattleMoves[move].type, 0, 0);
+}
+
+void BattleTv_SetDataBasedOnAnimation(u8 animationId)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ switch (animationId)
+ {
+ case B_ANIM_FUTURE_SIGHT_HIT:
+ if (tvPtr->side[atkSide].futureSightMonId != 0)
+ {
+ AddMovePoints(2, 0, atkSide,
+ (tvPtr->side[atkSide].futureSightMonId - 1) * 4 + tvPtr->side[atkSide].futureSightMoveSlot);
+ tvPtr->side[atkSide].faintCause = 8;
+ }
+ break;
+ case B_ANIM_DOOM_DESIRE_HIT:
+ if (tvPtr->side[atkSide].doomDesireMonId != 0)
+ {
+ AddMovePoints(2, 1, atkSide,
+ (tvPtr->side[atkSide].doomDesireMonId - 1) * 4 + tvPtr->side[atkSide].doomDesireMoveSlot);
+ tvPtr->side[atkSide].faintCause = 9;
+ }
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+// for loop has an unused stack variable
+void TryPutLinkBattleTvShowOnAir(void)
+{
+ u16 playerBestSpecies = 0, opponentBestSpecies = 0;
+ s16 playerBestSum = 0, opponentBestSum = SHRT_MAX;
+ u8 playerBestMonId = 0, opponentBestMonId = 0;
+ struct BattleTvMovePoints *movePoints = NULL;
+ u8 countPlayer = 0, countOpponent = 0;
+ s16 sum = 0;
+ u16 species = 0;
+ u16 moveId = 0;
+ s32 i, j;
+
+ if (gBattleStruct->anyMonHasTransformed)
+ return;
+
+ movePoints = &gBattleStruct->tvMovePoints;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ countPlayer++;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ countOpponent++;
+ }
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) || countPlayer != countOpponent)
+ return;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
+ if (species != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG, NULL))
+ {
+ for (sum = 0, j = 0; j < 4; j++)
+ sum += movePoints->points[0][i * 4 + j];
+
+ if (playerBestSum < sum)
+ {
+ playerBestMonId = i;
+ playerBestSum = sum;
+ playerBestSpecies = species;
+ }
+ }
+
+ species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL);
+ if (species != SPECIES_NONE && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG, NULL))
+ {
+ for (sum = 0, j = 0; j < 4; j++)
+ sum += movePoints->points[1][i * 4 + j];
+
+ if (opponentBestSum == sum)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_EXP, NULL) > GetMonData(&gEnemyParty[opponentBestMonId], MON_DATA_EXP, NULL))
+ {
+ opponentBestMonId = i;
+ opponentBestSum = sum;
+ opponentBestSpecies = species;
+ }
+ }
+ else if (opponentBestSum > sum)
+ {
+ opponentBestMonId = i;
+ opponentBestSum = sum;
+ opponentBestSpecies = species;
+ }
+ }
+ }
+
+ for (sum = 0, i = 0, j = 0; j < 4; j++)
+ {
+ if (sum < movePoints->points[0][playerBestMonId * 4 + j])
+ {
+ sum = movePoints->points[0][playerBestMonId * 4 + j];
+ i = j;
+ }
+ }
+
+ moveId = GetMonData(&gPlayerParty[playerBestMonId], MON_DATA_MOVE1 + i, NULL);
+ if (playerBestSum == 0 || moveId == 0)
+ return;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if ((playerBestMonId < 3 && !sub_806D82C(gBattleScripting.multiplayerId))
+ || (playerBestMonId >= 3 && sub_806D82C(gBattleScripting.multiplayerId)))
+ {
+ j = (opponentBestMonId < 3) ? 0 : 1;
+ PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies);
+ }
+ }
+ else
+ {
+ PutBattleUpdateOnTheAir(gBattleScripting.multiplayerId ^ 1, moveId, playerBestSpecies, opponentBestSpecies);
+ }
+}
+
+#else
+ASM_DIRECT
+void TryPutLinkBattleTvShowOnAir(void)
+{
+ asm_unified(
+ "push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x20\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x8]\n\
+ ldr r3, =0x00007fff\n\
+ str r3, [sp, 0xC]\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x10]\n\
+ movs r7, 0\n\
+ str r7, [sp, 0x14]\n\
+ mov r8, r0\n\
+ ldr r0, =gBattleStruct\n\
+ ldr r1, [r0]\n\
+ adds r0, r1, 0\n\
+ adds r0, 0xB3\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0817E42A\n\
+ b _0817E670\n\
+_0817E42A:\n\
+ movs r2, 0xD2\n\
+ lsls r2, 1\n\
+ adds r2, r1\n\
+ mov r10, r2\n\
+ movs r6, 0\n\
+_0817E434:\n\
+ movs r0, 0x64\n\
+ adds r4, r6, 0\n\
+ muls r4, r0\n\
+ ldr r0, =gPlayerParty\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0817E454\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+_0817E454:\n\
+ ldr r5, =gEnemyParty\n\
+ adds r0, r4, r5\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0817E46A\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+_0817E46A:\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _0817E434\n\
+ ldr r0, =gBattleTypeFlags\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0817E47E\n\
+ b _0817E670\n\
+_0817E47E:\n\
+ cmp r8, r7\n\
+ beq _0817E484\n\
+ b _0817E670\n\
+_0817E484:\n\
+ movs r6, 0\n\
+ lsls r3, r6, 1\n\
+ str r3, [sp, 0x18]\n\
+ movs r4, 0x64\n\
+ mov r8, r4\n\
+_0817E48E:\n\
+ mov r1, r8\n\
+ muls r1, r6\n\
+ ldr r0, =gPlayerParty\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ adds r0, r6, 0x1\n\
+ mov r9, r0\n\
+ cmp r7, 0\n\
+ beq _0817E4EE\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0817E4EE\n\
+ movs r4, 0\n\
+ lsls r0, r6, 3\n\
+ mov r2, r10\n\
+ adds r1, r0, r2\n\
+ movs r3, 0x3\n\
+_0817E4C4:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ ldrh r4, [r1]\n\
+ adds r0, r4\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r1, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _0817E4C4\n\
+ ldr r1, [sp, 0x8]\n\
+ lsls r0, r1, 16\n\
+ lsls r1, r4, 16\n\
+ cmp r0, r1\n\
+ bge _0817E4EE\n\
+ lsls r0, r6, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x10]\n\
+ lsrs r1, 16\n\
+ str r1, [sp, 0x8]\n\
+ str r7, [sp]\n\
+_0817E4EE:\n\
+ mov r0, r8\n\
+ muls r0, r6\n\
+ ldr r2, =gEnemyParty\n\
+ adds r4, r0, r2\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ ldr r3, [sp, 0x8]\n\
+ lsls r3, 16\n\
+ str r3, [sp, 0x1C]\n\
+ cmp r7, 0\n\
+ beq _0817E5A0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0817E5A0\n\
+ movs r4, 0\n\
+ ldr r0, [sp, 0xC]\n\
+ lsls r2, r0, 16\n\
+ movs r3, 0x1\n\
+ lsls r1, r3, 1\n\
+ adds r1, 0x1\n\
+ lsls r1, 4\n\
+ lsls r0, r6, 3\n\
+ adds r0, r1\n\
+ mov r3, r10\n\
+ adds r1, r0, r3\n\
+ movs r3, 0x3\n\
+_0817E534:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ ldrh r4, [r1]\n\
+ adds r0, r4\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r1, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _0817E534\n\
+ asrs r1, r2, 16\n\
+ lsls r5, r4, 16\n\
+ asrs r0, r5, 16\n\
+ cmp r1, r0\n\
+ bne _0817E590\n\
+ mov r0, r8\n\
+ muls r0, r6\n\
+ ldr r1, =gEnemyParty\n\
+ adds r0, r1\n\
+ movs r1, 0x19\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ adds r4, r0, 0\n\
+ ldr r2, [sp, 0x14]\n\
+ mov r0, r8\n\
+ muls r0, r2\n\
+ ldr r3, =gEnemyParty\n\
+ adds r0, r3\n\
+ movs r1, 0x19\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r4, r0\n\
+ bls _0817E5A0\n\
+ b _0817E594\n\
+ .pool\n\
+_0817E590:\n\
+ cmp r1, r0\n\
+ ble _0817E5A0\n\
+_0817E594:\n\
+ lsls r0, r6, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x14]\n\
+ lsrs r5, 16\n\
+ str r5, [sp, 0xC]\n\
+ str r7, [sp, 0x4]\n\
+_0817E5A0:\n\
+ mov r6, r9\n\
+ cmp r6, 0x5\n\
+ bgt _0817E5A8\n\
+ b _0817E48E\n\
+_0817E5A8:\n\
+ movs r4, 0\n\
+ movs r6, 0\n\
+ movs r3, 0\n\
+ ldr r5, =gPlayerParty\n\
+ ldr r7, [sp, 0x10]\n\
+ lsls r0, r7, 3\n\
+ mov r1, r10\n\
+ adds r2, r0, r1\n\
+_0817E5B8:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ movs r7, 0\n\
+ ldrsh r1, [r2, r7]\n\
+ cmp r0, r1\n\
+ bge _0817E5C8\n\
+ ldrh r4, [r2]\n\
+ adds r6, r3, 0\n\
+_0817E5C8:\n\
+ adds r2, 0x2\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x3\n\
+ ble _0817E5B8\n\
+ movs r0, 0x64\n\
+ ldr r1, [sp, 0x10]\n\
+ muls r0, r1\n\
+ adds r0, r5\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xD\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ ldr r2, [sp, 0x1C]\n\
+ cmp r2, 0\n\
+ beq _0817E670\n\
+ cmp r4, 0\n\
+ beq _0817E670\n\
+ ldr r0, =gBattleTypeFlags\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0817E65C\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r3, 0x2\n\
+ bhi _0817E620\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r0, [r0]\n\
+ bl sub_806D82C\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _0817E630\n\
+ b _0817E670\n\
+ .pool\n\
+_0817E620:\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r0, [r0]\n\
+ bl sub_806D82C\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _0817E670\n\
+_0817E630:\n\
+ movs r3, 0\n\
+ ldr r7, [sp, 0x14]\n\
+ cmp r7, 0x2\n\
+ bls _0817E63A\n\
+ movs r3, 0x1\n\
+_0817E63A:\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ ldr r1, =gBattleScripting\n\
+ adds r1, 0x25\n\
+ ldrb r1, [r1]\n\
+ bl sub_806EF84\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r1, r4, 0\n\
+ ldr r2, [sp]\n\
+ ldr r3, [sp, 0x4]\n\
+ bl PutBattleUpdateOnTheAir\n\
+ b _0817E670\n\
+ .pool\n\
+_0817E65C:\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x1\n\
+ eors r0, r1\n\
+ adds r1, r4, 0\n\
+ ldr r2, [sp]\n\
+ ldr r3, [sp, 0x4]\n\
+ bl PutBattleUpdateOnTheAir\n\
+_0817E670:\n\
+ add sp, 0x20\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool");
+}
+#endif
+
+static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
+{
+ struct BattleTvMovePoints *movePoints = &gBattleStruct->tvMovePoints;
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+ u32 atkSide = GetBattlerSide(gBattlerAttacker);
+ u32 defSide = GetBattlerSide(gBattlerTarget);
+ const u16 *ptr;
+ s32 i;
+
+ switch (caseId)
+ {
+ case 0:
+ case 1:
+ case 18:
+ case 22 ... 27:
+ movePoints->points[atkSide][gBattlerPartyIndexes[gBattlerAttacker] * 4 + arg1] += sPointsArray[caseId][arg2];
+ break;
+ case 3 ... 7:
+ i = 0;
+ ptr = sPointsArray[caseId];
+ do
+ {
+ if (arg1 == ptr[i])
+ {
+ movePoints->points[atkSide][gBattlerPartyIndexes[gBattlerAttacker] * 4 + arg2] += ptr[i+1];
+ break;
+ }
+ i += 2;
+ } while (ptr[i] != 0xFFFF);
+ break;
+ case 19:
+ tvPtr->side[arg2 ^ 1].faintCause = 0;
+ movePoints->points[arg2][0 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 20:
+ tvPtr->side[arg2].faintCause = 0;
+ case 2:
+ movePoints->points[arg2][0 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 17:
+ movePoints->points[atkSide][arg2 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 8:
+ case 9:
+ case 15:
+ case 16:
+ case 21:
+ movePoints->points[atkSide ^ BIT_SIDE][arg2 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 10:
+ movePoints->points[arg1][arg2 * 4 + arg3] += sPointsArray[caseId][0];
+ break;
+ case 11:
+ if (tvPtr->pos[defSide][0].waterSportMonId != -(tvPtr->pos[defSide][1].waterSportMonId) && arg1 == 10)
+ {
+ if (tvPtr->pos[defSide][0].waterSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][0].waterSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][0].waterSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ if (tvPtr->pos[defSide][1].waterSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][1].waterSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][1].waterSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ }
+ break;
+ case 12:
+ if (tvPtr->pos[defSide][0].mudSportMonId != -(tvPtr->pos[defSide][1].mudSportMonId) && arg1 == 13)
+ {
+ if (tvPtr->pos[defSide][0].mudSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][0].mudSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][0].mudSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ if (tvPtr->pos[defSide][1].mudSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][1].mudSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][1].mudSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ }
+ break;
+ case 13:
+ if (arg1 <= 8 && arg2 != 0 && tvPtr->side[defSide].reflectMonId != 0)
+ {
+ u32 id = (tvPtr->side[defSide].reflectMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->side[defSide].reflectMoveSlot] += sPointsArray[caseId][0];
+ }
+ break;
+ case 14:
+ if (arg1 > 8 && arg2 != 0 && tvPtr->side[defSide].lightScreenMonId != 0)
+ {
+ u32 id = (tvPtr->side[defSide].lightScreenMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0];
+ }
+ break;
+ }
+}
+
+static void AddPointsOnFainting(bool8 targetFainted)
+{
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+ u32 atkSide = GetBattlerSide(gBattlerAttacker);
+ u32 defSide = GetBattlerSide(gBattlerTarget);
+ u32 atkArrId = tvPtr->side[atkSide].faintCauseMonId;
+ s32 i;
+
+ if (tvPtr->side[atkSide].faintCause != 0)
+ {
+ switch (tvPtr->side[atkSide].faintCause)
+ {
+ case 1:
+ if (tvPtr->pos[atkSide][atkArrId].curseMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].curseMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].curseMoveSlot);
+ }
+ break;
+ case 2:
+ if (tvPtr->pos[atkSide][atkArrId].leechSeedMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].leechSeedMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].leechSeedMoveSlot);
+ }
+ break;
+ case 3:
+ if (tvPtr->mon[atkSide][atkArrId].psnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].psnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].psnMoveSlot);
+ }
+ if (tvPtr->mon[atkSide][atkArrId].badPsnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].badPsnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].badPsnMoveSlot);
+ }
+ break;
+ case 4:
+ if (tvPtr->mon[atkSide][atkArrId].brnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].brnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].brnMoveSlot);
+ }
+ break;
+ case 5:
+ if (tvPtr->pos[atkSide][atkArrId].nightmareMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].nightmareMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].nightmareMoveSlot);
+ }
+ break;
+ case 6:
+ if (tvPtr->pos[atkSide][atkArrId].wrapMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].wrapMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].wrapMoveSlot);
+ }
+ break;
+ case 7:
+ if (tvPtr->side[atkSide].spikesMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide].spikesMonId - 1) * 4 + tvPtr->side[atkSide].spikesMoveSlot);
+ }
+ break;
+ case 8:
+ if (tvPtr->side[atkSide].futureSightMonId != 0)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (tvPtr->side[atkSide].futureSightMonId - 1) * 4 + tvPtr->side[atkSide].futureSightMoveSlot);
+ }
+ break;
+ case 9:
+ if (tvPtr->side[atkSide].doomDesireMonId != 0)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (tvPtr->side[atkSide].doomDesireMonId - 1) * 4 + tvPtr->side[atkSide].doomDesireMoveSlot);
+ }
+ break;
+ case 10:
+ if (tvPtr->side[atkSide].perishSong
+ && tvPtr->side[atkSide].perishSongMonId - 1 != gBattlerPartyIndexes[gBattlerAttacker])
+ {
+ AddMovePoints(19, 0, atkSide,
+ (tvPtr->side[atkSide].perishSongMonId - 1) * 4 + tvPtr->side[atkSide].perishSongMoveSlot);
+ }
+ if (tvPtr->side[atkSide ^ BIT_SIDE].perishSong)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].perishSongMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].perishSongMoveSlot);
+ }
+ break;
+ case 11:
+ if (tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMoveSlot);
+ }
+ break;
+ case 12:
+ for (i = 0; i < 2; i++)
+ {
+ if (tvPtr->pos[atkSide][i].confusionMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][i].confusionMonId - 1) * 4 + tvPtr->pos[atkSide][i].confusionMoveSlot);
+ }
+ }
+ break;
+ case 13:
+ if (tvPtr->side[atkSide].explosion)
+ {
+ AddMovePoints(19, 0, atkSide,
+ (tvPtr->side[atkSide].explosionMonId - 1) * 4 + tvPtr->side[atkSide].explosionMoveSlot);
+ }
+ if (tvPtr->side[atkSide ^ BIT_SIDE].explosion)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].explosionMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].explosionMoveSlot);
+ }
+ break;
+ case 14:
+ if (targetFainted == TRUE)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (gBattlerPartyIndexes[gBattlerAttacker]) * 4 + tvPtr->side[atkSide].usedMoveSlot);
+ }
+ break;
+ case 15:
+ break;
+ }
+ }
+ else
+ {
+ if (tvPtr->side[defSide].faintCause == 7)
+ {
+ if (tvPtr->side[defSide].spikesMonId != 0)
+ {
+ AddMovePoints(19, 0, defSide ^ BIT_SIDE,
+ (tvPtr->side[defSide].spikesMonId - 1) * 4 + tvPtr->side[defSide].spikesMoveSlot);
+ }
+ }
+ else
+ {
+ AddMovePoints(20, 0, atkSide,
+ (gBattlerPartyIndexes[gBattlerAttacker]) * 4 + tvPtr->side[atkSide].usedMoveSlot);
+ }
+ }
+}
+
+static void TrySetBattleSeminarShow(void)
+{
+ s32 i;
+ s32 dmgByMove[4];
+ u16 powerOverride;
+ u16 currMoveSaved;
+
+ if (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ return;
+ else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT)
+ return;
+ else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] <= 5)
+ return;
+ else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > 6)
+ return;
+ else if (gCurrentMove == MOVE_HIDDEN_POWER || gCurrentMove == MOVE_WEATHER_BALL)
+ return;
+ else if (gBattleTypeFlags & (BATTLE_TYPE_PALACE | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID))
+ return;
+ else if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]]].power == 0)
+ return;
+
+ i = 0;
+ currMoveSaved = gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]];
+ do
+ {
+ if (currMoveSaved == sVariableDmgMoves[i])
+ break;
+ i++;
+ } while (sVariableDmgMoves[i] != 0xFFFF);
+
+ if (sVariableDmgMoves[i] != 0xFFFF)
+ return;
+
+ dmgByMove[gMoveSelectionCursor[gBattlerAttacker]] = gBattleMoveDamage;
+ currMoveSaved = gCurrentMove;
+ for (i = 0; i < 4; i++)
+ {
+ gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
+ powerOverride = 0;
+ if (ShouldCalculateDamage(gCurrentMove, &dmgByMove[i], &powerOverride))
+ {
+ u8 moveResultFlags;
+ u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
+ sideStatus, powerOverride,
+ 0, gBattlerAttacker, gBattlerTarget);
+
+ if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+
+ moveResultFlags = TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
+ dmgByMove[i] = gBattleMoveDamage;
+ if (dmgByMove[i] == 0 && !(moveResultFlags & MOVE_RESULT_NO_EFFECT))
+ dmgByMove[i] = 1;
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gMoveSelectionCursor[gBattlerAttacker] && dmgByMove[i] > dmgByMove[gMoveSelectionCursor[gBattlerAttacker]])
+ {
+ u16 opponentSpecies, playerSpecies;
+ s32 bestMoveId;
+
+ if (gMoveSelectionCursor[gBattlerAttacker] != 0)
+ bestMoveId = 0;
+ else
+ bestMoveId = 1;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gMoveSelectionCursor[gBattlerAttacker] && dmgByMove[i] > dmgByMove[bestMoveId])
+ bestMoveId = i;
+ }
+
+ opponentSpecies = GetMonData(&gEnemyParty [gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES, NULL);
+ playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_SPECIES, NULL);
+ sub_80EE35C(opponentSpecies, playerSpecies, gMoveSelectionCursor[gBattlerAttacker], gBattleMons[gBattlerAttacker].moves, gBattleMons[gBattlerAttacker].moves[bestMoveId]);
+ break;
+ }
+ }
+
+ gBattleMoveDamage = dmgByMove[gMoveSelectionCursor[gBattlerAttacker]];
+ gCurrentMove = currMoveSaved;
+}
+
+static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride)
+{
+ if (gBattleMoves[moveId].power == 0)
+ {
+ *dmg = 0;
+ return FALSE;
+ }
+ else
+ {
+ s32 i = 0;
+ do
+ {
+ if (moveId == sVariableDmgMoves[i])
+ break;
+ i++;
+ } while (sVariableDmgMoves[i] != 0xFFFF);
+
+ if (sVariableDmgMoves[i] != 0xFFFF)
+ {
+ *dmg = 0;
+ return FALSE;
+ }
+ else if (moveId == MOVE_PSYWAVE)
+ {
+ *dmg = gBattleMons[gBattlerAttacker].level;
+ *dmg /= 2;
+ return FALSE;
+ }
+ else if (moveId == MOVE_MAGNITUDE)
+ {
+ *powerOverride = 10;
+ return TRUE;
+ }
+ else
+ {
+ return TRUE;
+ }
+ }
+}
+
+void BattleTv_ClearExplosionFaintCause(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+
+ tvPtr->side[B_SIDE_PLAYER].faintCause = 0;
+ tvPtr->side[B_SIDE_OPPONENT].faintCause = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].faintCauseMonId = 0;
+ tvPtr->side[B_SIDE_OPPONENT].faintCauseMonId = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosionMonId = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosionMonId = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosionMoveSlot = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosionMoveSlot = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosion = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosion = 0;
+ }
+}
+
+u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId)
+{
+ s32 i;
+ struct Pokemon *party;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ i = 0;
+ while (1)
+ {
+ if (i >= 4)
+ break;
+ if (GetMonData(&party[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + i, NULL) == moveId)
+ break;
+ i++;
+ }
+
+ return i;
+}
+
+static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot)
+{
+ if (weatherFlags & WEATHER_RAIN_ANY)
+ AddMovePoints(3, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_SUN_ANY)
+ AddMovePoints(4, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_SANDSTORM_ANY)
+ AddMovePoints(5, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_HAIL_ANY)
+ AddMovePoints(6, moveId, moveSlot, 0);
+}
diff --git a/src/battle_util.c b/src/battle_util.c
index a457ce15d..662e5b2a6 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -23,7 +23,6 @@
#include "link.h"
#include "berry.h"
-extern const struct BattleMove gBattleMoves[];
extern u8 weather_get_current(void);
@@ -3255,8 +3254,8 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
else
targetBank = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
break;
+ case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER:
- case MOVE_TARGET_x10:
targetBank = gBattlerAttacker;
break;
}
diff --git a/src/blit.c b/src/blit.c
new file mode 100644
index 000000000..b4d5f7de5
--- /dev/null
+++ b/src/blit.c
@@ -0,0 +1,209 @@
+#include "global.h"
+#include "blit.h"
+
+void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height)
+{
+ BlitBitmapRect4Bit(src, dst, srcX, srcY, dstX, dstY, width, height, 0xFF);
+}
+
+void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey)
+{
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierSrcY;
+ s32 multiplierDstY;
+ s32 loopSrcY, loopDstY;
+ s32 loopSrcX, loopDstX;
+ u8 *pixelsSrc;
+ u8 *pixelsDst;
+ s32 toOrr;
+ s32 toAnd;
+ s32 toShift;
+
+ if (dst->width - dstX < width)
+ xEnd = (dst->width - dstX) + srcX;
+ else
+ xEnd = srcX + width;
+
+ if (dst->height - dstY < height)
+ yEnd = (dst->height - dstY) + srcY;
+ else
+ yEnd = height + srcY;
+
+ multiplierSrcY = (src->width + (src->width & 7)) >> 3;
+ multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
+
+ if (colorKey == 0xFF)
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
+ pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
+ toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
+ toShift = ((loopDstX & 1) << 2);
+ toOrr <<= toShift;
+ toAnd = 0xF0 >> (toShift);
+ *pixelsDst = toOrr | (*pixelsDst & toAnd);
+ }
+ }
+ }
+ else
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
+ pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
+ toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
+ if (toOrr != colorKey)
+ {
+ toShift = ((loopDstX & 1) << 2);
+ toOrr <<= toShift;
+ toAnd = 0xF0 >> (toShift);
+ *pixelsDst = toOrr | (*pixelsDst & toAnd);
+ }
+ }
+ }
+ }
+}
+
+void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
+{
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierY;
+ s32 loopX, loopY;
+ s32 toOrr1, toOrr2;
+
+ xEnd = x + width;
+ if (xEnd > surface->width)
+ xEnd = surface->width;
+
+ yEnd = y + height;
+ if (yEnd > surface->height)
+ yEnd = surface->height;
+
+ multiplierY = (surface->width + (surface->width & 7)) >> 3;
+ toOrr1 = (u32)(fillValue << 0x1C) >> 0x18;
+ toOrr2 = (fillValue & 0xF);
+
+ for (loopY = y; loopY < yEnd; loopY++)
+ {
+ for (loopX = x; loopX < xEnd; loopX++)
+ {
+ u8 *pixels = surface->pixels + ((loopX >> 1) & 3) + ((loopX >> 3) << 5) + (((loopY >> 3) * multiplierY) << 5) + ((u32)(loopY << 0x1d) >> 0x1B);
+ if ((loopX << 0x1F) != 0)
+ *pixels = toOrr1 | (*pixels & 0xF);
+ else
+ *pixels = toOrr2 | (*pixels & 0xF0);
+ }
+ }
+}
+
+void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
+{
+ s32 palOffsetBits;
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierSrcY;
+ s32 multiplierDstY;
+ s32 loopSrcY, loopDstY;
+ s32 loopSrcX, loopDstX;
+ u8 *pixelsSrc;
+ u8 *pixelsDst;
+ s32 colorKeyBits;
+
+ palOffsetBits = (u32)(paletteOffset << 0x1C) >> 0x18;
+ colorKeyBits = (u32)(colorKey << 0x1C) >> 0x18;
+
+ if (dst->width - dstX < width)
+ xEnd = (dst->width - dstX) + srcX;
+ else
+ xEnd = width + srcX;
+
+ if (dst->height - dstY < height)
+ yEnd = (srcY + dst->height) - dstY;
+ else
+ yEnd = srcY + height;
+
+ multiplierSrcY = (src->width + (src->width & 7)) >> 3;
+ multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
+
+ if (colorKey == 0xFF)
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
+ if (loopSrcX & 1)
+ {
+ *pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
+ }
+ else
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ if (loopSrcX & 1)
+ {
+ if ((*pixelsSrc & 0xF0) != colorKeyBits)
+ {
+ pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
+ *pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
+ }
+ }
+ else
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ if ((*pixelsSrc & 0xF) != colorKey)
+ {
+ pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
+ *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
+ }
+ }
+ }
+ }
+ }
+}
+
+void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
+{
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierY;
+ s32 loopX, loopY;
+
+ xEnd = x + width;
+ if (xEnd > surface->width)
+ xEnd = surface->width;
+
+ yEnd = y + height;
+ if (yEnd > surface->height)
+ yEnd = surface->height;
+
+ multiplierY = (surface->width + (surface->width & 7)) >> 3;
+
+ for (loopY = y; loopY < yEnd; loopY++)
+ {
+ for (loopX = x; loopX < xEnd; loopX++)
+ {
+ u8 *pixels = surface->pixels + (loopX & 7) + ((loopX >> 3) << 6) + (((loopY >> 3) * multiplierY) << 6) + ((u32)(loopY << 0x1d) >> 0x1a);
+ *pixels = fillValue;
+ }
+ }
+}
diff --git a/src/gym_leader_rematch.c b/src/gym_leader_rematch.c
new file mode 100644
index 000000000..355ae5534
--- /dev/null
+++ b/src/gym_leader_rematch.c
@@ -0,0 +1,106 @@
+#include "global.h"
+#include "constants/flags.h"
+#include "random.h"
+#include "event_data.h"
+#include "battle_setup.h"
+#include "gym_leader_rematch.h"
+
+static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch);
+static s32 GetRematchIndex(u32 trainerIdx);
+
+static const u16 GymLeaderRematches_AfterNewMauville[] = {
+ REMATCH_ROXANNE,
+ REMATCH_BRAWLY,
+ REMATCH_WATTSON,
+ REMATCH_FLANNERY,
+ REMATCH_NORMAN,
+ REMATCH_WINONA,
+ REMATCH_TATE_AND_LIZA,
+ REMATCH_JUAN
+};
+
+static const u16 GymLeaderRematches_BeforeNewMauville[] = {
+ REMATCH_ROXANNE,
+ REMATCH_BRAWLY,
+ // Wattson isn't available at this time
+ REMATCH_FLANNERY,
+ REMATCH_NORMAN,
+ REMATCH_WINONA,
+ REMATCH_TATE_AND_LIZA,
+ REMATCH_JUAN
+};
+
+void UpdateGymLeaderRematch(void)
+{
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) && (Random() % 100) <= 30)
+ {
+ if (FlagGet(FLAG_WATTSON_REMATCH_AVAILABLE))
+ UpdateGymLeaderRematchFromArray(GymLeaderRematches_AfterNewMauville, ARRAY_COUNT(GymLeaderRematches_AfterNewMauville), 5);
+ else
+ UpdateGymLeaderRematchFromArray(GymLeaderRematches_BeforeNewMauville, ARRAY_COUNT(GymLeaderRematches_BeforeNewMauville), 1);
+ }
+}
+
+static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch)
+{
+ s32 whichLeader = 0;
+ s32 lowestRematchIndex = 5;
+ u32 i;
+ s32 rematchIndex;
+ for (i = 0; i < size; i++)
+ {
+ if (!gSaveBlock1Ptr->trainerRematches[data[i]])
+ {
+ rematchIndex = GetRematchIndex(data[i]);
+ if (lowestRematchIndex > rematchIndex)
+ lowestRematchIndex = rematchIndex;
+ whichLeader++;
+ }
+ }
+ if (whichLeader != 0 && lowestRematchIndex <= maxRematch)
+ {
+ whichLeader = 0;
+ for (i = 0; i < size; i++)
+ {
+ if (!gSaveBlock1Ptr->trainerRematches[data[i]])
+ {
+ rematchIndex = GetRematchIndex(data[i]);
+ if (rematchIndex == lowestRematchIndex)
+ whichLeader++;
+ }
+ }
+ if (whichLeader != 0)
+ {
+ whichLeader = Random() % whichLeader;
+ for (i = 0; i < size; i++)
+ {
+ if (!gSaveBlock1Ptr->trainerRematches[data[i]])
+ {
+ rematchIndex = GetRematchIndex(data[i]);
+ if (rematchIndex == lowestRematchIndex)
+ {
+ if (whichLeader == 0)
+ {
+ gSaveBlock1Ptr->trainerRematches[data[i]] = lowestRematchIndex;
+ break;
+ }
+ whichLeader--;
+ }
+ }
+ }
+ }
+ }
+}
+
+static s32 GetRematchIndex(u32 trainerIdx)
+{
+ s32 i;
+ for (i = 0; i < 5; i++)
+ {
+ if (!HasTrainerBeenFought(gRematchTable[trainerIdx].trainerIds[i]))
+ {
+ return i;
+ }
+ }
+ return 5;
+}
diff --git a/src/item_menu.c b/src/item_menu.c
index e88d1c2d3..9090a39c5 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -328,7 +328,6 @@ extern u8* gReturnToXStringsTable[];
extern u32 gUnknown_0203CE5E[];
extern u8 EventScript_2736B3[];
extern const u16 gUnknown_0860F074[];
-extern struct BattleMove gBattleMoves[];
void ResetBagScrollPositions(void)
{
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index 81a10f8a4..812f1f975 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -606,7 +606,6 @@ u8 sub_818E06C(void)
}
}
-#ifdef NONMATCHING
static u8 sub_818E13C(void)
{
u8 retval;
@@ -627,9 +626,11 @@ static u8 sub_818E13C(void)
len = sub_818E258(gUnknown_0203CD68->playerName);
if (len == sub_818E258(gSaveBlock2Ptr->playerName))
{
+ u8 *name = gUnknown_0203CD68->playerName;
for (i = 0; i < len; i ++)
{
- if (gUnknown_0203CD68->playerName[i] != gSaveBlock2Ptr->playerName[i])
+ name = gUnknown_0203CD68->playerName;
+ if (name[i] != gSaveBlock2Ptr->playerName[i])
{
retval = 2;
break;
@@ -640,85 +641,6 @@ static u8 sub_818E13C(void)
}
return retval;
}
-#else
-ASM_DIRECT static u8 sub_818E13C(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmovs r7, 0x1\n"
- "\tldr r5, =gUnknown_0203CD68\n"
- "\tldr r0, =gSaveBlock1Ptr\n"
- "\tldr r1, [r0]\n"
- "\tldr r2, =0x00003b58\n"
- "\tadds r0, r1, r2\n"
- "\tstr r0, [r5]\n"
- "\tldrb r0, [r0, 0x18]\n"
- "\tcmp r0, 0xFF\n"
- "\tbne _0818E174\n"
- "\tldr r0, =gStringVar1\n"
- "\tldr r1, =gText_Lady2\n"
- "\tbl StringCopy7\n"
- "\tmovs r7, 0\n"
- "\tb _0818E1DC\n"
- "\t.pool\n"
- "_0818E174:\n"
- "\tldr r4, =gStringVar1\n"
- "\tldr r0, =0x00003b70\n"
- "\tadds r1, r0\n"
- "\tadds r0, r4, 0\n"
- "\tbl StringCopy7\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0x2D\n"
- "\tldrb r1, [r0]\n"
- "\tadds r0, r4, 0\n"
- "\tbl ConvertInternationalString\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0x18\n"
- "\tbl sub_818E258\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r6, =gSaveBlock2Ptr\n"
- "\tldr r0, [r6]\n"
- "\tbl sub_818E258\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r4, r0\n"
- "\tbne _0818E1DC\n"
- "\tldr r0, [r5]\n"
- "\tmovs r2, 0\n"
- "\tcmp r2, r4\n"
- "\tbcs _0818E1DC\n"
- "\tldr r1, [r6]\n"
- "\tldrb r0, [r0, 0x18]\n"
- "\tldrb r1, [r1]\n"
- "\tcmp r0, r1\n"
- "\tbne _0818E1DA\n"
- "_0818E1BA:\n"
- "\tadds r0, r2, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r2, r0, 24\n"
- "\tcmp r2, r4\n"
- "\tbcs _0818E1DC\n"
- "\tldr r0, =gUnknown_0203CD68\n"
- "\tldr r1, [r0]\n"
- "\tadds r1, 0x18\n"
- "\tadds r1, r2\n"
- "\tldr r0, =gSaveBlock2Ptr\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r1]\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r1, r0\n"
- "\tbeq _0818E1BA\n"
- "_0818E1DA:\n"
- "\tmovs r7, 0x2\n"
- "_0818E1DC:\n"
- "\tadds r0, r7, 0\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1\n"
- "\t.pool");
-}
-#endif
static u8 sub_818E1F4(void)
{
diff --git a/src/pokemon.c b/src/pokemon.c
index 25d532204..800b7c0cd 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -67,7 +67,6 @@ extern const union AnimCmd *gUnknown_082FF70C[];
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[];
extern const union AnimCmd *const *const gUnknown_08305D0C[];
extern const union AnimCmd *const *const gUnknown_0830536C[];
-extern const struct BattleMove gBattleMoves[];
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
extern const struct UnknownPokemonStruct3 gUnknown_08610970[];
extern const struct CompressedSpritePalette gMonPaletteTable[];
@@ -110,6 +109,9 @@ EWRAM_DATA struct SpriteTemplate gUnknown_0202499C = {0};
EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
// const rom data
+#include "data/battle_moves.h"
+static const u8 sUnreferencedData[] = {0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00};
+
const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151};
const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358};
const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411};
@@ -2196,7 +2198,7 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
(var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \
}
-s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef)
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 battlerIdAtk, u8 battlerIdDef)
{
u32 i;
s32 damage = 0;
@@ -2226,8 +2228,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (attacker->item == ITEM_ENIGMA_BERRY)
{
- attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect;
- attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam;
+ attackerHoldEffect = gEnigmaBerries[battlerIdAtk].holdEffect;
+ attackerHoldEffectParam = gEnigmaBerries[battlerIdAtk].holdEffectParam;
}
else
{
@@ -2237,8 +2239,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (defender->item == ITEM_ENIGMA_BERRY)
{
- defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect;
- defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam;
+ defenderHoldEffect = gEnigmaBerries[battlerIdDef].holdEffect;
+ defenderHoldEffectParam = gEnigmaBerries[battlerIdDef].holdEffectParam;
}
else
{
@@ -2249,13 +2251,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER)
attack *= 2;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, bankAtk))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerIdAtk))
attack = (110 * attack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, bankDef))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef))
defense = (110 * defense) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankAtk))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk))
spAttack = (110 * spAttack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankDef))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef))
spDefense = (110 * spDefense) / 100;
for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++)
@@ -2440,7 +2442,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
}
// flash fire triggered
- if ((gBattleResources->flags->flags[bankAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
+ if ((gBattleResources->flags->flags[battlerIdAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
damage = (15 * damage) / 10;
}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 1e5245d70..3ebdc3d6d 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -115,8 +115,6 @@ extern u8 gText_Appeal[];
extern u8 gText_Jam[];
extern u8 gText_OTSlash[];
extern u8 gText_UnkCtrlF907F908[];
-extern u8 gAbilityNames[][13];
-extern u8 *gAbilityDescriptionPointers[];
extern u8 gText_XNature[];
extern u8 gText_XNatureHatchedAtYZ[];
extern u8 gText_XNatureHatchedSomewhereAt[];
@@ -146,7 +144,6 @@ extern u8 gText_OneDash[];
extern u8 gText_TwoDashes[];
extern u8 gText_ThreeDashes[];
extern u8 gUnknown_0861CE97[];
-extern struct BattleMove gBattleMoves[];
extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
extern bool8 sub_81A6BF4();
@@ -2539,7 +2536,7 @@ void sub_81C2554()
gUnknown_0203CF1C->unk40CB[i] |= 0xFF;
}
-void sub_81C25A4(u8 a, u8 *b, u8 c, u8 d, u8 e, u8 f)
+void sub_81C25A4(u8 a, const u8 *b, u8 c, u8 d, u8 e, u8 f)
{
AddTextPrinterParameterized2(a, 1, c, d, 0, e, gUnknown_0861CD2C[f], 0, b);
}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index b7e2474d4..a29e64979 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1612,7 +1612,7 @@ bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = sub_80EF370(v1);
+ u8 v2 = CountDigits(v1);
ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2);
return FALSE;
diff --git a/src/text.c b/src/text.c
index a2495d068..eacfd2a1f 100644
--- a/src/text.c
+++ b/src/text.c
@@ -4,18 +4,15 @@
#include "m4a.h"
#include "palette.h"
#include "sound.h"
+#include "constants/songs.h"
#include "string_util.h"
#include "window.h"
#include "text.h"
+#include "blit.h"
-extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-extern void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-extern void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
extern u8 GetKeypadIconWidth(u8 keypadIconId);
-extern void CopyWindowToVram(u8 windowId, u8 mode);
extern u16 Font6Func(struct TextPrinter *textPrinter);
extern u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
-extern void PlaySE(u16 songNum);
extern u8* UnkTextUtil_GetPtrI(u8 a1);
extern int sub_8197964();
@@ -27,7 +24,6 @@ static u16 gLastTextBgColor;
static u16 gLastTextFgColor;
static u16 gLastTextShadowColor;
-extern struct Main gMain;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
const struct FontInfo *gFonts;
@@ -1986,7 +1982,7 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
- PlaySE(5);
+ PlaySE(SE_SELECT);
}
}
return result;
@@ -2004,7 +2000,7 @@ bool16 TextPrinterWait(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
- PlaySE(5);
+ PlaySE(SE_SELECT);
}
}
return result;
diff --git a/src/tv.c b/src/tv.c
index 83cb18b3f..b7c2812fe 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -36,9 +36,7 @@
#include "decoration.h"
#include "secret_base.h"
#include "tv.h"
-
-extern const u8 gSpeciesNames[][11];
-extern const u8 gMoveNames[][13];
+#include "data2.h"
// Static type declarations
@@ -87,101 +85,100 @@ void tv_store_id_3x(TVShow *show);
void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx);
s8 FindEmptyTVSlotWithinFirstFiveShowsOfArray(TVShow *shows);
void FindActiveBroadcastByShowType_SetScriptResult(u8 kind);
-void InterviewBefore_BravoTrainerPkmnProfile(void);
-void InterviewBefore_NameRater(void);
+static void InterviewBefore_BravoTrainerPkmnProfile(void);
+static void InterviewBefore_NameRater(void);
u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies);
-void sub_80EFA88(void);
-void sub_80EF93C(TVShow *shows);
+static void sub_80EFA88(void);
+static void sub_80EF93C(TVShow *shows);
s8 sub_80EEE30(PokeNews *pokeNews);
bool8 sub_80EF0E4(u8 newsKind);
void ClearPokemonNewsI(u8 i);
-void sub_80F1254(TVShow *shows);
-void sub_80F12A4(TVShow *shows);
-void sub_80F0358(TVShow *player1, TVShow *player2, TVShow *player3, TVShow *player4);
-void sub_80F0C04(void);
-void sub_80F0708(void);
-void sub_80F0B64(void);
-s8 sub_80F06D0(TVShow *tvShows);
-bool8 sub_80F049C(TVShow *dest[], TVShow *src[], u8 idx);
-bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx);
-bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx);
-bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx);
-void sub_80F0B00(u8 showIdx);
-void sub_80F0B24(u16 species, u8 showIdx);
-void sub_80F0D60(PokeNews *player1, PokeNews *player2, PokeNews *player3, PokeNews *player4);
-void sub_80F0EEC(void);
-void sub_80F0F24(void);
-s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx);
-void sub_80F0E58(PokeNews *dest[], PokeNews *src[]);
-bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot);
+static void sub_80F1254(TVShow *shows);
+static void sub_80F12A4(TVShow *shows);
+static void sub_80F0358(TVShow *player1, TVShow *player2, TVShow *player3, TVShow *player4);
+static void sub_80F0C04(void);
+static void sub_80F0708(void);
+static void sub_80F0B64(void);
+static s8 sub_80F06D0(TVShow *tvShows);
+static bool8 sub_80F049C(TVShow *dest[], TVShow *src[], u8 idx);
+static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx);
+static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx);
+static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx);
+void SetTvShowInactive(u8 showIdx);
+static void sub_80F0B24(u16 species, u8 showIdx);
+static void sub_80F0D60(PokeNews *player1, PokeNews *player2, PokeNews *player3, PokeNews *player4);
+static void sub_80F0EEC(void);
+static void sub_80F0F24(void);
+static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx);
+static void sub_80F0E58(PokeNews *dest[], PokeNews *src[]);
+static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot);
void TVShowDone(void);
-void InterviewAfter_FanClubLetter(void);
-void InterviewAfter_RecentHappenings(void);
-void InterviewAfter_PkmnFanClubOpinions(void);
-void InterviewAfter_DummyShow4(void);
-void InterviewAfter_BravoTrainerPokemonProfile(void);
-void InterviewAfter_BravoTrainerBattleTowerProfile(void);
-void InterviewAfter_ContestLiveUpdates(void);
+static void InterviewAfter_FanClubLetter(void);
+static void InterviewAfter_RecentHappenings(void);
+static void InterviewAfter_PkmnFanClubOpinions(void);
+static void InterviewAfter_DummyShow4(void);
+static void InterviewAfter_BravoTrainerPokemonProfile(void);
+static void InterviewAfter_BravoTrainerBattleTowerProfile(void);
+static void InterviewAfter_ContestLiveUpdates(void);
void UpdateWorldOfMastersAndPutItOnTheAir(void);
void PutPokemonTodayFailedOnTheAir(void);
-void sub_80ED718(void);
-void sub_80EED88(void);
+static void sub_80ED718(void);
+static void sub_80EED88(void);
void TV_SortPurchasesByQuantity(void);
-void sub_80ED8B4(u16 days);
+static void sub_80ED8B4(u16 days);
void UpdateMassOutbreakTimeLeft(u16 days);
-void sub_80EF120(u16 days);
-void sub_80EDA48(u16 days);
-void sub_80EEB98(u16 days);
+static void sub_80EF120(u16 days);
+static void sub_80EDA48(u16 days);
+static void sub_80EEB98(u16 days);
void PutFishingAdviceShowOnTheAir(void);
-void sub_80EDA80(void);
u8 TV_MonDataIdxToRibbon(u8 monDataIdx);
-void sub_80EEBF4(u8 actionIdx);
+static void sub_80EEBF4(u8 actionIdx);
bool8 IsPriceDiscounted(u8 newsKind);
-void InterviewBefore_FanClubLetter(void);
-void InterviewBefore_RecentHappenings(void);
-void InterviewBefore_PkmnFanClubOpinions(void);
-void InterviewBefore_Dummy(void);
-void InterviewBefore_BravoTrainerBTProfile(void);
-void InterviewBefore_ContestLiveUpdates(void);
-void InterviewBefore_3CheersForPokeblocks(void);
-void InterviewBefore_FanClubSpecial(void);
+static void InterviewBefore_FanClubLetter(void);
+static void InterviewBefore_RecentHappenings(void);
+static void InterviewBefore_PkmnFanClubOpinions(void);
+static void InterviewBefore_Dummy(void);
+static void InterviewBefore_BravoTrainerBTProfile(void);
+static void InterviewBefore_ContestLiveUpdates(void);
+static void InterviewBefore_3CheersForPokeblocks(void);
+static void InterviewBefore_FanClubSpecial(void);
void ChangeBoxPokemonNickname_CB(void);
-void DoTVShowPokemonFanClubLetter(void);
-void DoTVShowRecentHappenings(void);
-void DoTVShowPokemonFanClubOpinions(void);
-void DoTVShowDummiedOut(void);
-void DoTVShowPokemonNewsMassOutbreak(void);
-void DoTVShowBravoTrainerPokemonProfile(void);
-void DoTVShowBravoTrainerBattleTower(void);
-void DoTVShowPokemonTodaySuccessfulCapture(void);
-void DoTVShowTodaysSmartShopper(void);
-void DoTVShowTheNameRaterShow(void);
-void DoTVShowPokemonContestLiveUpdates(void);
-void DoTVShowPokemonBattleUpdate(void);
-void DoTVShow3CheersForPokeblocks(void);
-void DoTVShowPokemonTodayFailedCapture(void);
-void DoTVShowPokemonAngler(void);
-void DoTVShowTheWorldOfMasters(void);
-void DoTVShowTodaysRivalTrainer(void);
-void DoTVShowDewfordTrendWatcherNetwork(void);
-void DoTVShowHoennTreasureInvestigators(void);
-void DoTVShowFindThatGamer(void);
-void DoTVShowBreakingNewsTV(void);
-void DoTVShowSecretBaseVisit(void);
-void DoTVShowPokemonLotteryWinnerFlashReport(void);
-void DoTVShowThePokemonBattleSeminar(void);
-void DoTVShowTrainerFanClubSpecial(void);
-void DoTVShowTrainerFanClub(void);
-void DoTVShowSpotTheCuties(void);
-void DoTVShowPokemonNewsBattleFrontier(void);
-void DoTVShowWhatsNo1InHoennToday(void);
-void DoTVShowSecretBaseSecrets(void);
-void DoTVShowSafariFanClub(void);
-void DoTVShowPokemonContestLiveUpdates2(void);
+static void DoTVShowPokemonFanClubLetter(void);
+static void DoTVShowRecentHappenings(void);
+static void DoTVShowPokemonFanClubOpinions(void);
+static void DoTVShowDummiedOut(void);
+static void DoTVShowPokemonNewsMassOutbreak(void);
+static void DoTVShowBravoTrainerPokemonProfile(void);
+static void DoTVShowBravoTrainerBattleTower(void);
+static void DoTVShowPokemonTodaySuccessfulCapture(void);
+static void DoTVShowTodaysSmartShopper(void);
+static void DoTVShowTheNameRaterShow(void);
+static void DoTVShowPokemonContestLiveUpdates(void);
+static void DoTVShowPokemonBattleUpdate(void);
+static void DoTVShow3CheersForPokeblocks(void);
+static void DoTVShowPokemonTodayFailedCapture(void);
+static void DoTVShowPokemonAngler(void);
+static void DoTVShowTheWorldOfMasters(void);
+static void DoTVShowTodaysRivalTrainer(void);
+static void DoTVShowDewfordTrendWatcherNetwork(void);
+static void DoTVShowHoennTreasureInvestigators(void);
+static void DoTVShowFindThatGamer(void);
+static void DoTVShowBreakingNewsTV(void);
+static void DoTVShowSecretBaseVisit(void);
+static void DoTVShowPokemonLotteryWinnerFlashReport(void);
+static void DoTVShowThePokemonBattleSeminar(void);
+static void DoTVShowTrainerFanClubSpecial(void);
+static void DoTVShowTrainerFanClub(void);
+static void DoTVShowSpotTheCuties(void);
+static void DoTVShowPokemonNewsBattleFrontier(void);
+static void DoTVShowWhatsNo1InHoennToday(void);
+static void DoTVShowSecretBaseSecrets(void);
+static void DoTVShowSafariFanClub(void);
+static void DoTVShowPokemonContestLiveUpdates2(void);
// .rodata
-const struct {
+static const struct {
u16 species;
u16 moves[4];
u8 level;
@@ -214,8 +211,7 @@ const struct {
}
};
-// TODO: Figure out what these are, and define constants in include/flags.h
-const u16 sGoldSymbolFlags[] = {
+static const u16 sGoldSymbolFlags[] = {
FLAG_SYS_TOWER_GOLD,
FLAG_SYS_DOME_GOLD,
FLAG_SYS_PALACE_GOLD,
@@ -225,7 +221,7 @@ const u16 sGoldSymbolFlags[] = {
FLAG_SYS_PYRAMID_GOLD
};
-const u16 sSilverSymbolFlags[] = {
+static const u16 sSilverSymbolFlags[] = {
FLAG_SYS_TOWER_SILVER,
FLAG_SYS_DOME_SILVER,
FLAG_SYS_PALACE_SILVER,
@@ -235,8 +231,7 @@ const u16 sSilverSymbolFlags[] = {
FLAG_SYS_PYRAMID_SILVER
};
-// TODO: Figure out what these are, and define constants in include/vars.h
-const u16 sNumberOneVarsAndThresholds[][2] = {
+static const u16 sNumberOneVarsAndThresholds[][2] = {
{VAR_DAILY_SLOTS, 100},
{VAR_DAILY_ROULETTE, 50},
{VAR_DAILY_WILDS, 100},
@@ -246,7 +241,7 @@ const u16 sNumberOneVarsAndThresholds[][2] = {
{VAR_DAILY_BP, 30}
};
-const u8 *const sPokeNewsTextGroup_Upcoming[] = {
+static const u8 *const sPokeNewsTextGroup_Upcoming[] = {
NULL,
gPokeNewsTextSlateport_Upcoming,
gPokeNewsTextGameCorner_Upcoming,
@@ -254,7 +249,7 @@ const u8 *const sPokeNewsTextGroup_Upcoming[] = {
gPokeNewsTextBlendMaster_Upcoming
};
-const u8 *const sPokeNewsTextGroup_Ongoing[] = {
+static const u8 *const sPokeNewsTextGroup_Ongoing[] = {
NULL,
gPokeNewsTextSlateport_Ongoing,
gPokeNewsTextGameCorner_Ongoing,
@@ -262,7 +257,7 @@ const u8 *const sPokeNewsTextGroup_Ongoing[] = {
gPokeNewsTextBlendMaster_Ongoing
};
-const u8 *const sPokeNewsTextGroup_Ending[] = {
+static const u8 *const sPokeNewsTextGroup_Ending[] = {
NULL,
gPokeNewsTextSlateport_Ending,
gPokeNewsTextGameCorner_Ending,
@@ -276,7 +271,7 @@ u8 *const gTVStringVarPtrs[] = {
gStringVar3
};
-const u8 *const sTVFanClubTextGroup[] = {
+static const u8 *const sTVFanClubTextGroup[] = {
gTVFanClubText00,
gTVFanClubText01,
gTVFanClubText02,
@@ -287,7 +282,7 @@ const u8 *const sTVFanClubTextGroup[] = {
gTVFanClubText07
};
-const u8 *const sTVRecentHappeninssTextGroup[] = {
+static const u8 *const sTVRecentHappeninssTextGroup[] = {
gTVRecentHappeningsText00,
gTVRecentHappeningsText01,
gTVRecentHappeningsText02,
@@ -296,7 +291,7 @@ const u8 *const sTVRecentHappeninssTextGroup[] = {
gTVRecentHappeningsText05
};
-const u8 *const sTVFanClubOpinionsTextGroup[] = {
+static const u8 *const sTVFanClubOpinionsTextGroup[] = {
gTVFanClubOpinionsText00,
gTVFanClubOpinionsText01,
gTVFanClubOpinionsText02,
@@ -304,11 +299,11 @@ const u8 *const sTVFanClubOpinionsTextGroup[] = {
gTVFanClubOpinionsText04
};
-const u8 *const sTVMassOutbreakTextGroup[] = {
+static const u8 *const sTVMassOutbreakTextGroup[] = {
gTVMassOutbreakText00
};
-const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
+static const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
gTVPokemonTodaySuccessfulText00,
gTVPokemonTodaySuccessfulText01,
gTVPokemonTodaySuccessfulText02,
@@ -323,7 +318,7 @@ const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
gTVPokemonTodaySuccessfulText11
};
-const u8 *const sTVTodaysSmartShopperTextGroup[] = {
+static const u8 *const sTVTodaysSmartShopperTextGroup[] = {
gTVTodaysSmartShopperText00,
gTVTodaysSmartShopperText01,
gTVTodaysSmartShopperText02,
@@ -339,7 +334,7 @@ const u8 *const sTVTodaysSmartShopperTextGroup[] = {
gTVTodaysSmartShopperText12
};
-const u8 *const sTVBravoTrainerTextGroup[] = {
+static const u8 *const sTVBravoTrainerTextGroup[] = {
gTVBravoTrainerText00,
gTVBravoTrainerText01,
gTVBravoTrainerText02,
@@ -351,7 +346,7 @@ const u8 *const sTVBravoTrainerTextGroup[] = {
gTVBravoTrainerText08
};
-const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
+static const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
gTV3CheersForPokeblocksText00,
gTV3CheersForPokeblocksText01,
gTV3CheersForPokeblocksText02,
@@ -360,7 +355,7 @@ const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
gTV3CheersForPokeblocksText05
};
-const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
+static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
gTVBravoTrainerBattleTowerText00,
gTVBravoTrainerBattleTowerText01,
gTVBravoTrainerBattleTowerText02,
@@ -378,7 +373,7 @@ const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
gTVBravoTrainerBattleTowerText14
};
-const u8 *const sTVContestLiveUpdatesTextGroup[] = {
+static const u8 *const sTVContestLiveUpdatesTextGroup[] = {
gTVContestLiveUpdatesText00,
gTVContestLiveUpdatesText01,
gTVContestLiveUpdatesText02,
@@ -414,7 +409,7 @@ const u8 *const sTVContestLiveUpdatesTextGroup[] = {
gTVContestLiveUpdatesText32
};
-const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
+static const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
gTVPokemonBattleUpdateText00,
gTVPokemonBattleUpdateText01,
gTVPokemonBattleUpdateText02,
@@ -425,7 +420,7 @@ const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
gTVPokemonBattleUpdateText07
};
-const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
+static const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
gTVTrainerFanClubSpecialText00,
gTVTrainerFanClubSpecialText01,
gTVTrainerFanClubSpecialText02,
@@ -434,7 +429,7 @@ const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
gTVTrainerFanClubSpecialText05
};
-const u8 *const sTVNameRaterTextGroup[] = {
+static const u8 *const sTVNameRaterTextGroup[] = {
gTVNameRaterText00,
gTVNameRaterText01,
gTVNameRaterText02,
@@ -456,14 +451,14 @@ const u8 *const sTVNameRaterTextGroup[] = {
gTVNameRaterText18
};
-const u8 *const sTVPokemonContestLiveUpdates2TextGroup[] = {
+static const u8 *const sTVPokemonContestLiveUpdates2TextGroup[] = {
gTVPokemonContestLiveUpdates2Text00,
gTVPokemonContestLiveUpdates2Text01,
gTVPokemonContestLiveUpdates2Text02,
gTVPokemonContestLiveUpdates2Text03
};
-const u8 *const sTVPokemonTodayFailedTextGroup[] = {
+static const u8 *const sTVPokemonTodayFailedTextGroup[] = {
gTVPokemonTodayFailedText00,
gTVPokemonTodayFailedText01,
gTVPokemonTodayFailedText02,
@@ -473,18 +468,18 @@ const u8 *const sTVPokemonTodayFailedTextGroup[] = {
gTVPokemonTodayFailedText06
};
-const u8 *const sTVPokemonAnslerTextGroup[] = {
+static const u8 *const sTVPokemonAnslerTextGroup[] = {
gTVPokemonAnglerText00,
gTVPokemonAnglerText01
};
-const u8 *const sTVWorldOfMastersTextGroup[] = {
+static const u8 *const sTVWorldOfMastersTextGroup[] = {
gTVWorldOfMastersText00,
gTVWorldOfMastersText01,
gTVWorldOfMastersText02
};
-const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
+static const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
gTVTodaysRivalTrainerText00,
gTVTodaysRivalTrainerText01,
gTVTodaysRivalTrainerText02,
@@ -498,7 +493,7 @@ const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
gTVTodaysRivalTrainerText10
};
-const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
+static const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
gTVDewfordTrendWatcherNetworkText00,
gTVDewfordTrendWatcherNetworkText01,
gTVDewfordTrendWatcherNetworkText02,
@@ -508,20 +503,20 @@ const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
gTVDewfordTrendWatcherNetworkText06
};
-const u8 *const sTVHoennTreasureInvestisatorsTextGroup[] = {
+static const u8 *const sTVHoennTreasureInvestisatorsTextGroup[] = {
gTVHoennTreasureInvestigatorsText00,
gTVHoennTreasureInvestigatorsText01,
gTVHoennTreasureInvestigatorsText02
};
-const u8 *const sTVFindThatGamerTextGroup[] = {
+static const u8 *const sTVFindThatGamerTextGroup[] = {
gTVFindThatGamerText00,
gTVFindThatGamerText01,
gTVFindThatGamerText02,
gTVFindThatGamerText03
};
-const u8 *const sTVBreakinsNewsTextGroup[] = {
+static const u8 *const sTVBreakinsNewsTextGroup[] = {
gTVBreakingNewsText00,
gTVBreakingNewsText01,
gTVBreakingNewsText02,
@@ -537,7 +532,7 @@ const u8 *const sTVBreakinsNewsTextGroup[] = {
gTVBreakingNewsText12
};
-const u8 *const sTVSecretBaseVisitTextGroup[] = {
+static const u8 *const sTVSecretBaseVisitTextGroup[] = {
gTVSecretBaseVisitText00,
gTVSecretBaseVisitText01,
gTVSecretBaseVisitText02,
@@ -554,11 +549,11 @@ const u8 *const sTVSecretBaseVisitTextGroup[] = {
gTVSecretBaseVisitText13
};
-const u8 *const sTVPokemonLotteryWinnerFlashReportTextGroup[] = {
+static const u8 *const sTVPokemonLotteryWinnerFlashReportTextGroup[] = {
gTVPokemonLotteryWinnerFlashReportText00
};
-const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
+static const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
gTVThePokemonBattleSeminarText00,
gTVThePokemonBattleSeminarText01,
gTVThePokemonBattleSeminarText02,
@@ -568,7 +563,7 @@ const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
gTVThePokemonBattleSeminarText06
};
-const u8 *const sTVTrainerFanClubTextGroup[] = {
+static const u8 *const sTVTrainerFanClubTextGroup[] = {
gTVTrainerFanClubText00,
gTVTrainerFanClubText01,
gTVTrainerFanClubText02,
@@ -583,7 +578,7 @@ const u8 *const sTVTrainerFanClubTextGroup[] = {
gTVTrainerFanClubText11
};
-const u8 *const sTVCutiesTextGroup[] = {
+static const u8 *const sTVCutiesTextGroup[] = {
gTVCutiesText00,
gTVCutiesText01,
gTVCutiesText02,
@@ -602,7 +597,7 @@ const u8 *const sTVCutiesTextGroup[] = {
gTVCutiesText15
};
-const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
+static const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
gTVPokemonNewsBattleFrontierText00,
gTVPokemonNewsBattleFrontierText01,
gTVPokemonNewsBattleFrontierText02,
@@ -624,7 +619,7 @@ const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
gTVPokemonNewsBattleFrontierText18
};
-const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
+static const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText00,
gTVWhatsNo1InHoennTodayText01,
gTVWhatsNo1InHoennTodayText02,
@@ -636,7 +631,7 @@ const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText08
};
-const u8 *const sTVSecretBaseSecretsTextGroup[] = {
+static const u8 *const sTVSecretBaseSecretsTextGroup[] = {
gTVSecretBaseSecretsText00,
gTVSecretBaseSecretsText01,
gTVSecretBaseSecretsText02,
@@ -682,7 +677,7 @@ const u8 *const sTVSecretBaseSecretsTextGroup[] = {
gTVSecretBaseSecretsText42
};
-const u8 *const sTVSafariFanClubTextGroup[] = {
+static const u8 *const sTVSafariFanClubTextGroup[] = {
gTVSafariFanClubText00,
gTVSafariFanClubText01,
gTVSafariFanClubText02,
@@ -696,7 +691,7 @@ const u8 *const sTVSafariFanClubTextGroup[] = {
gTVSafariFanClubText10
};
-const u8 *const sTVInSearchOfTrainersTextGroup[] = {
+static const u8 *const sTVInSearchOfTrainersTextGroup[] = {
gTVInSearchOfTrainersText00,
gTVInSearchOfTrainersText01,
gTVInSearchOfTrainersText02,
@@ -1253,7 +1248,7 @@ void tv_store_id_2x(TVShow *show)
show->common.trainerIdHi = id >> 8;
}
-void InterviewAfter_ContestLiveUpdates(void)
+static void InterviewAfter_ContestLiveUpdates(void)
{
TVShow *show;
TVShow *show2;
@@ -1281,7 +1276,7 @@ void InterviewAfter_ContestLiveUpdates(void)
}
}
-void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3)
+void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent)
{
TVShow *show;
u8 name[32];
@@ -1308,21 +1303,21 @@ void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3)
{
show->battleUpdate.battleType = 0;
}
- show->battleUpdate.move = a1;
- show->battleUpdate.species2 = a2;
- show->battleUpdate.species = a3;
- StringCopy(name, gLinkPlayers[a0].name);
+ show->battleUpdate.move = move;
+ show->battleUpdate.speciesPlayer = speciesPlayer;
+ show->battleUpdate.speciesOpponent = speciesOpponent;
+ StringCopy(name, gLinkPlayers[opponentLinkPlayerId].name);
StripExtCtrlCodes(name);
StringCopy(show->battleUpdate.linkOpponentName, name);
tv_store_id_2x(show);
show->battleUpdate.language = gGameLanguage;
- if (show->battleUpdate.language == LANGUAGE_JAPANESE || gLinkPlayers[a0].language == LANGUAGE_JAPANESE)
+ if (show->battleUpdate.language == LANGUAGE_JAPANESE || gLinkPlayers[opponentLinkPlayerId].language == LANGUAGE_JAPANESE)
{
show->battleUpdate.linkOpponentLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->battleUpdate.linkOpponentLanguage = gLinkPlayers[a0].language;
+ show->battleUpdate.linkOpponentLanguage = gLinkPlayers[opponentLinkPlayerId].language;
}
}
}
@@ -1472,7 +1467,7 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
}
}
-void InterviewAfter_BravoTrainerPokemonProfile(void)
+static void InterviewAfter_BravoTrainerPokemonProfile(void)
{
TVShow *show;
TVShow *show2;
@@ -1538,7 +1533,7 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 a0)
}
}
-void InterviewAfter_BravoTrainerBattleTowerProfile(void)
+static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
{
TVShow *show;
@@ -1671,7 +1666,7 @@ void PutLilycoveContestLadyShowOnTheAir(void)
}
}
-void InterviewAfter_FanClubLetter(void)
+static void InterviewAfter_FanClubLetter(void)
{
TVShow *show;
@@ -1684,7 +1679,7 @@ void InterviewAfter_FanClubLetter(void)
show->fanclubLetter.language = gGameLanguage;
}
-void InterviewAfter_RecentHappenings(void)
+static void InterviewAfter_RecentHappenings(void)
{
TVShow *show;
@@ -1697,7 +1692,7 @@ void InterviewAfter_RecentHappenings(void)
show->recentHappenings.language = gGameLanguage;
}
-void InterviewAfter_PkmnFanClubOpinions(void)
+static void InterviewAfter_PkmnFanClubOpinions(void)
{
TVShow *show;
@@ -1722,14 +1717,14 @@ void InterviewAfter_PkmnFanClubOpinions(void)
}
}
-void InterviewAfter_DummyShow4()
+static void InterviewAfter_DummyShow4(void)
{
TVShow *show;
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
}
-void sub_80ED718(void)
+static void sub_80ED718(void)
{
u8 i;
u16 outbreakIdx;
@@ -1794,7 +1789,6 @@ void EndMassOutbreak(void)
void UpdateTVShowsPerDay(u16 days)
{
-
sub_80ED8B4(days);
UpdateMassOutbreakTimeLeft(days);
sub_80EF120(days);
@@ -1802,7 +1796,7 @@ void UpdateTVShowsPerDay(u16 days)
sub_80EEB98(days);
}
-void sub_80ED8B4(u16 days)
+static void sub_80ED8B4(u16 days)
{
u8 i;
TVShow *show;
@@ -1872,7 +1866,7 @@ void PutFishingAdviceShowOnTheAir(void)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_FISHING_ADVICE, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
@@ -1892,7 +1886,7 @@ void SetPokemonAnglerSpecies(u16 species)
sPokemonAnglerSpecies = species;
}
-void sub_80EDA48(u16 days)
+static void sub_80EDA48(u16 days)
{
TVShow *show;
@@ -2088,7 +2082,7 @@ void sub_80EDE84(u16 nCoinsSpent)
sFindThatGamerCoinsSpent = nCoinsSpent;
}
-void sub_80EDE98(TVShow *show)
+static void sub_80EDE98(TVShow *show)
{
u8 i;
u8 j;
@@ -2153,7 +2147,7 @@ void sub_80EDE98(TVShow *show)
}
}
-void sub_80EDFB4(TVShow *show)
+static void sub_80EDFB4(TVShow *show)
{
u8 i;
u16 move;
@@ -2590,7 +2584,7 @@ void sub_80EEA70(void)
}
}
-void sub_80EEB98(u16 days)
+static void sub_80EEB98(u16 days)
{
u8 i;
@@ -2608,7 +2602,7 @@ void sub_80EEB98(u16 days)
}
}
-void sub_80EEBF4(u8 actionIdx)
+static void sub_80EEBF4(u8 actionIdx)
{
TVShow *show;
@@ -2664,7 +2658,7 @@ void sub_80EED60(u16 delta)
// PokeNews
-void sub_80EED88(void)
+static void sub_80EED88(void)
{
u8 newsKind;
@@ -2715,7 +2709,7 @@ void ClearPokemonNewsI(u8 i)
gSaveBlock1Ptr->pokeNews[i].days = 0;
}
-void sub_80EEEB8(void)
+static void sub_80EEEB8(void)
{
u8 i;
u8 j;
@@ -2845,7 +2839,7 @@ bool8 sub_80EF0E4(u8 newsKind)
return FALSE;
}
-void sub_80EF120(u16 days)
+static void sub_80EF120(u16 days)
{
u8 i;
@@ -2923,48 +2917,25 @@ void TV_PrintIntToStringVar(u8 varIdx, int value)
{
int nDigits;
- nDigits = sub_80EF370(value);
+ nDigits = CountDigits(value);
ConvertIntToDecimalStringN(gTVStringVarPtrs[varIdx], value, STR_CONV_MODE_LEFT_ALIGN, nDigits);
}
-size_t sub_80EF370(int value)
+size_t CountDigits(int value)
{
- if (value / 10 == 0)
- {
- return 1;
- }
- if (value / 100 == 0)
- {
- return 2;
- }
- if (value / 1000 == 0)
- {
- return 3;
- }
- if (value / 10000 == 0)
- {
- return 4;
- }
- if (value / 100000 == 0)
- {
- return 5;
- }
- if (value / 1000000 == 0)
- {
- return 6;
- }
- if (value / 10000000 == 0)
- {
- return 7;
- }
- if (value / 100000000 == 0)
- {
- return 8;
- }
+ if (value / 10 == 0) return 1;
+ if (value / 100 == 0) return 2;
+ if (value / 1000 == 0) return 3;
+ if (value / 10000 == 0) return 4;
+ if (value / 100000 == 0) return 5;
+ if (value / 1000000 == 0) return 6;
+ if (value / 10000000 == 0) return 7;
+ if (value / 100000000 == 0) return 8;
+
return 1;
}
-void sub_80EF40C(u8 varIdx, TVShow *show)
+static void sub_80EF40C(u8 varIdx, TVShow *show)
{
u8 i;
int price;
@@ -3095,7 +3066,7 @@ void InterviewBefore(void)
}
}
-void InterviewBefore_FanClubLetter(void)
+static void InterviewBefore_FanClubLetter(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_LETTER);
if (!gSpecialVar_Result)
@@ -3105,7 +3076,7 @@ void InterviewBefore_FanClubLetter(void)
}
}
-void InterviewBefore_RecentHappenings(void)
+static void InterviewBefore_RecentHappenings(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_RECENT_HAPPENINGS);
if (!gSpecialVar_Result)
@@ -3114,7 +3085,7 @@ void InterviewBefore_RecentHappenings(void)
}
}
-void InterviewBefore_PkmnFanClubOpinions(void)
+static void InterviewBefore_PkmnFanClubOpinions(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
if (!gSpecialVar_Result)
@@ -3126,17 +3097,17 @@ void InterviewBefore_PkmnFanClubOpinions(void)
}
}
-void InterviewBefore_Dummy(void)
+static void InterviewBefore_Dummy(void)
{
gSpecialVar_Result = TRUE;
}
-void InterviewBefore_NameRater(void)
+static void InterviewBefore_NameRater(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_NAME_RATER_SHOW);
}
-void InterviewBefore_BravoTrainerPkmnProfile(void)
+static void InterviewBefore_BravoTrainerPkmnProfile(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
if (!gSpecialVar_Result)
@@ -3145,17 +3116,17 @@ void InterviewBefore_BravoTrainerPkmnProfile(void)
}
}
-void InterviewBefore_ContestLiveUpdates(void)
+static void InterviewBefore_ContestLiveUpdates(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_CONTEST_LIVE_UPDATES);
}
-void InterviewBefore_3CheersForPokeblocks(void)
+static void InterviewBefore_3CheersForPokeblocks(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_3_CHEERS_FOR_POKEBLOCKS);
}
-void InterviewBefore_BravoTrainerBTProfile(void)
+static void InterviewBefore_BravoTrainerBTProfile(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
if (!gSpecialVar_Result)
@@ -3164,7 +3135,7 @@ void InterviewBefore_BravoTrainerBTProfile(void)
}
}
-void InterviewBefore_FanClubSpecial(void)
+static void InterviewBefore_FanClubSpecial(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_SPECIAL);
if (!gSpecialVar_Result)
@@ -3205,7 +3176,7 @@ void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
}
}
-void sub_80EF93C(TVShow *shows)
+static void sub_80EF93C(TVShow *shows)
{
u8 i;
u8 j;
@@ -3277,7 +3248,7 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
return species;
}
-void sub_80EFA88(void)
+static void sub_80EFA88(void)
{
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
gSpecialVar_0x8006 = sCurTVShowSlot;
@@ -3686,7 +3657,7 @@ void sub_80F01E8(void *src, u32 size, u8 masterIdx)
}
}
-void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVShow player4[25])
+static void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVShow player4[25])
{
u8 i;
u8 j;
@@ -3734,7 +3705,7 @@ void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVS
}
}
-bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
+static bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
{
u8 value;
u8 switchval;
@@ -3765,7 +3736,7 @@ bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
return FALSE;
}
-u8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
@@ -3782,7 +3753,7 @@ u8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-u8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
if ((linkTrainerId & 0xFF) == tv2->common.srcTrainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.srcTrainerIdHi)
@@ -3802,7 +3773,7 @@ u8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-u8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi)
@@ -3819,7 +3790,7 @@ u8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-s8 sub_80F06D0(TVShow *tvShows)
+static s8 sub_80F06D0(TVShow *tvShows)
{
u8 i;
@@ -3834,7 +3805,7 @@ s8 sub_80F06D0(TVShow *tvShows)
}
#ifdef NONMATCHING
-void sub_80F0708(void) // FIXME: register allocation shenanigans
+static void sub_80F0708(void) // FIXME: register allocation shenanigans
{
u16 i;
TVShow *show;
@@ -3850,8 +3821,8 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
break;
case TVSHOW_BATTLE_UPDATE:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.species2, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.species, i);
+ sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesPlayer, i);
+ sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesOpponent, i);
break;
case TVSHOW_FAN_CLUB_SPECIAL:
break;
@@ -3954,13 +3925,13 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
break;
default:
- sub_80F0B00(i);
+ SetTvShowInactive(i);
break;
}
}
}
#else
-ASM_DIRECT void sub_80F0708(void)
+ASM_DIRECT static void sub_80F0708(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
@@ -4377,7 +4348,7 @@ ASM_DIRECT void sub_80F0708(void)
"\tmov r2, r9\n"
"\tlsls r0, r2, 24\n"
"\tlsrs r0, 24\n"
- "\tbl sub_80F0B00\n"
+ "\tbl SetTvShowInactive\n"
"_080F0AE2_break:\n"
"\tmov r0, r9\n"
"\tadds r0, 0x1\n"
@@ -4398,12 +4369,12 @@ ASM_DIRECT void sub_80F0708(void)
}
#endif
-void sub_80F0B00(u8 showIdx)
+void SetTvShowInactive(u8 showIdx)
{
gSaveBlock1Ptr->tvShows[showIdx].common.active = FALSE;
}
-void sub_80F0B24(u16 species, u8 showIdx)
+static void sub_80F0B24(u16 species, u8 showIdx)
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0)
{
@@ -4411,7 +4382,7 @@ void sub_80F0B24(u16 species, u8 showIdx)
}
}
-void sub_80F0B64(void)
+static void sub_80F0B64(void)
{
u16 i;
@@ -4444,7 +4415,7 @@ void sub_80F0BB8(void)
}
}
-void sub_80F0C04(void)
+static void sub_80F0C04(void)
{
s8 i;
s8 ct;
@@ -4498,7 +4469,7 @@ void sub_80F0C7C(void *src, u32 size, u8 masterIdx)
}
}
-void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16], PokeNews player4[16])
+static void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16], PokeNews player4[16])
{
u8 i;
u8 j;
@@ -4530,7 +4501,7 @@ void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16
}
}
-void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
+static void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
{
PokeNews *ptr1;
PokeNews *ptr2;
@@ -4541,7 +4512,7 @@ void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
sub_80F0E84(ptr1, ptr2, sCurTVShowSlot);
}
-bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
+static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
{
u8 i;
u8 kind;
@@ -4563,7 +4534,7 @@ bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
return TRUE;
}
-s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
+static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
{
if (pokeNews[idx].kind == POKENEWS_NONE)
{
@@ -4572,7 +4543,7 @@ s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
return idx;
}
-void sub_80F0EEC(void)
+static void sub_80F0EEC(void)
{
u8 i;
@@ -4586,7 +4557,7 @@ void sub_80F0EEC(void)
sub_80EEEB8();
}
-void sub_80F0F24(void)
+static void sub_80F0F24(void)
{
u8 i;
@@ -4609,7 +4580,7 @@ else \
(langptr) = langfix; \
}
-void sub_80F0F64(TVShow *show, u32 language)
+static void sub_80F0F64(TVShow *show, u32 language)
{
int i;
TVShow **r4;
@@ -4691,7 +4662,7 @@ void sub_80F1208(TVShow *shows)
}
}
-void sub_80F1254(TVShow *shows)
+static void sub_80F1254(TVShow *shows)
{
TVShow *curShow;
@@ -4716,7 +4687,7 @@ u8 TV_GetStringLanguage(u8 *str)
return IsStringJapanese(str) ? LANGUAGE_JAPANESE : LANGUAGE_ENGLISH;
}
-void sub_80F12A4(TVShow *shows)
+static void sub_80F12A4(TVShow *shows)
{
TVShow *curShow;
@@ -4956,7 +4927,7 @@ void DoTVShow(void)
}
}
-void DoTVShowBravoTrainerPokemonProfile(void)
+static void DoTVShowBravoTrainerPokemonProfile(void)
{
TVShow *show;
u8 state;
@@ -5028,7 +4999,7 @@ void DoTVShowBravoTrainerPokemonProfile(void)
ShowFieldMessage(sTVBravoTrainerTextGroup[state]);
}
-void DoTVShowBravoTrainerBattleTower(void)
+static void DoTVShowBravoTrainerBattleTower(void)
{
TVShow *show;
u8 state;
@@ -5125,7 +5096,7 @@ void DoTVShowBravoTrainerBattleTower(void)
ShowFieldMessage(sTVBravoTrainerBattleTowerTextGroup[state]);
}
-void DoTVShowTodaysSmartShopper(void)
+static void DoTVShowTodaysSmartShopper(void)
{
TVShow *show;
u8 state;
@@ -5248,7 +5219,7 @@ void DoTVShowTodaysSmartShopper(void)
ShowFieldMessage(sTVTodaysSmartShopperTextGroup[state]);
}
-void DoTVShowTheNameRaterShow(void)
+static void DoTVShowTheNameRaterShow(void)
{
TVShow *show;
u8 state;
@@ -5346,7 +5317,7 @@ void DoTVShowTheNameRaterShow(void)
ShowFieldMessage(sTVNameRaterTextGroup[state]);
}
-void DoTVShowPokemonTodaySuccessfulCapture(void)
+static void DoTVShowPokemonTodaySuccessfulCapture(void)
{
TVShow *show;
u8 state;
@@ -5424,7 +5395,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void)
ShowFieldMessage(sTVPokemonTodaySuccessfulTextGroup[state]);
}
-void DoTVShowPokemonTodayFailedCapture(void)
+static void DoTVShowPokemonTodayFailedCapture(void)
{
TVShow *show;
u8 state;
@@ -5477,7 +5448,7 @@ void DoTVShowPokemonTodayFailedCapture(void)
ShowFieldMessage(sTVPokemonTodayFailedTextGroup[state]);
}
-void DoTVShowPokemonFanClubLetter(void)
+static void DoTVShowPokemonFanClubLetter(void)
{
TVShow *show;
u8 state;
@@ -5531,7 +5502,7 @@ void DoTVShowPokemonFanClubLetter(void)
ShowFieldMessage(sTVFanClubTextGroup[state]);
}
-void DoTVShowRecentHappenings(void)
+static void DoTVShowRecentHappenings(void)
{
TVShow *show;
u8 state;
@@ -5566,7 +5537,7 @@ void DoTVShowRecentHappenings(void)
ShowFieldMessage(sTVRecentHappeninssTextGroup[state]);
}
-void DoTVShowPokemonFanClubOpinions(void)
+static void DoTVShowPokemonFanClubOpinions(void)
{
TVShow *show;
u8 state;
@@ -5599,12 +5570,12 @@ void DoTVShowPokemonFanClubOpinions(void)
ShowFieldMessage(sTVFanClubOpinionsTextGroup[state]);
}
-void DoTVShowDummiedOut(void)
+static void DoTVShowDummiedOut(void)
{
}
-void DoTVShowPokemonNewsMassOutbreak(void)
+static void DoTVShowPokemonNewsMassOutbreak(void)
{
TVShow *show;
@@ -5616,7 +5587,7 @@ void DoTVShowPokemonNewsMassOutbreak(void)
ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]);
}
-void DoTVShowPokemonContestLiveUpdates(void)
+static void DoTVShowPokemonContestLiveUpdates(void)
{
TVShow *show;
u8 state;
@@ -5963,7 +5934,7 @@ void DoTVShowPokemonContestLiveUpdates(void)
ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]);
}
-void DoTVShowPokemonBattleUpdate(void)
+static void DoTVShowPokemonBattleUpdate(void)
{
TVShow *show;
u8 state;
@@ -6000,13 +5971,13 @@ void DoTVShowPokemonBattleUpdate(void)
break;
case 2:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species2]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
sTVShowState = 3;
break;
case 3:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesOpponent]);
sTVShowState = 4;
break;
case 4:
@@ -6021,21 +5992,21 @@ void DoTVShowPokemonBattleUpdate(void)
break;
case 6:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species2]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
sTVShowState = 7;
break;
case 7:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.species]);
+ StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.speciesOpponent]);
TVShowDone();
break;
}
ShowFieldMessage(sTVPokemonBattleUpdateTextGroup[state]);
}
-void DoTVShow3CheersForPokeblocks(void)
+static void DoTVShow3CheersForPokeblocks(void)
{
TVShow *show;
u8 state;
@@ -6206,7 +6177,7 @@ void DoTVShowInSearchOfTrainers(void)
ShowFieldMessage(sTVInSearchOfTrainersTextGroup[state]);
}
-void DoTVShowPokemonAngler(void)
+static void DoTVShowPokemonAngler(void)
{
TVShow *show;
u8 state;
@@ -6240,7 +6211,7 @@ void DoTVShowPokemonAngler(void)
ShowFieldMessage(sTVPokemonAnslerTextGroup[state]);
}
-void DoTVShowTheWorldOfMasters(void)
+static void DoTVShowTheWorldOfMasters(void)
{
TVShow *show;
u8 state;
@@ -6270,7 +6241,7 @@ void DoTVShowTheWorldOfMasters(void)
ShowFieldMessage(sTVWorldOfMastersTextGroup[state]);
}
-void DoTVShowTodaysRivalTrainer(void)
+static void DoTVShowTodaysRivalTrainer(void)
{
TVShow *show;
u8 state;
@@ -6419,7 +6390,7 @@ void DoTVShowTodaysRivalTrainer(void)
ShowFieldMessage(sTVTodaysRivalTrainerTextGroup[state]);
}
-void DoTVShowDewfordTrendWatcherNetwork(void)
+static void DoTVShowDewfordTrendWatcherNetwork(void)
{
TVShow *show;
u8 state;
@@ -6475,7 +6446,7 @@ void DoTVShowDewfordTrendWatcherNetwork(void)
ShowFieldMessage(sTVDewfordTrendWatcherNetworkTextGroup[state]);
}
-void DoTVShowHoennTreasureInvestigators(void)
+static void DoTVShowHoennTreasureInvestigators(void)
{
TVShow *show;
u8 state;
@@ -6519,7 +6490,7 @@ void DoTVShowHoennTreasureInvestigators(void)
ShowFieldMessage(sTVHoennTreasureInvestisatorsTextGroup[state]);
}
-void DoTVShowFindThatGamer(void)
+static void DoTVShowFindThatGamer(void)
{
TVShow *show;
u8 state;
@@ -6593,7 +6564,7 @@ void DoTVShowFindThatGamer(void)
ShowFieldMessage(sTVFindThatGamerTextGroup[state]);
}
-void DoTVShowBreakingNewsTV(void)
+static void DoTVShowBreakingNewsTV(void)
{
TVShow *show;
u8 state;
@@ -6696,7 +6667,7 @@ void DoTVShowBreakingNewsTV(void)
ShowFieldMessage(sTVBreakinsNewsTextGroup[state]);
}
-void DoTVShowSecretBaseVisit(void)
+static void DoTVShowSecretBaseVisit(void)
{
TVShow *show;
u8 state;
@@ -6792,7 +6763,7 @@ void DoTVShowSecretBaseVisit(void)
ShowFieldMessage(sTVSecretBaseVisitTextGroup[state]);
}
-void DoTVShowPokemonLotteryWinnerFlashReport(void)
+static void DoTVShowPokemonLotteryWinnerFlashReport(void)
{
TVShow *show;
u8 state;
@@ -6822,7 +6793,7 @@ void DoTVShowPokemonLotteryWinnerFlashReport(void)
ShowFieldMessage(sTVPokemonLotteryWinnerFlashReportTextGroup[state]);
}
-void DoTVShowThePokemonBattleSeminar(void)
+static void DoTVShowThePokemonBattleSeminar(void)
{
TVShow *show;
u8 state;
@@ -6886,7 +6857,7 @@ void DoTVShowThePokemonBattleSeminar(void)
ShowFieldMessage(sTVThePokemonBattleSeminarTextGroup[state]);
}
-void DoTVShowTrainerFanClubSpecial(void)
+static void DoTVShowTrainerFanClubSpecial(void)
{
TVShow *show;
u8 state;
@@ -6951,7 +6922,7 @@ void DoTVShowTrainerFanClubSpecial(void)
ShowFieldMessage(sTVTrainerFanClubSpecialTextGroup[state]);
}
-void DoTVShowTrainerFanClub(void)
+static void DoTVShowTrainerFanClub(void)
{
TVShow *show;
u8 state;
@@ -7038,7 +7009,7 @@ void DoTVShowTrainerFanClub(void)
ShowFieldMessage(sTVTrainerFanClubTextGroup[state]);
}
-void DoTVShowSpotTheCuties(void)
+static void DoTVShowSpotTheCuties(void)
{
TVShow *show;
u8 state;
@@ -7143,7 +7114,7 @@ void DoTVShowSpotTheCuties(void)
ShowFieldMessage(sTVCutiesTextGroup[state]);
}
-void DoTVShowPokemonNewsBattleFrontier(void)
+static void DoTVShowPokemonNewsBattleFrontier(void)
{
TVShow *show;
u8 state;
@@ -7292,7 +7263,7 @@ void DoTVShowPokemonNewsBattleFrontier(void)
ShowFieldMessage(sTVPokemonNewsBattleFrontierTextGroup[state]);
}
-void DoTVShowWhatsNo1InHoennToday(void)
+static void DoTVShowWhatsNo1InHoennToday(void)
{
TVShow *show;
u8 state;
@@ -7407,7 +7378,7 @@ u8 sub_80F51AC(TVShow *show, u8 a1)
return 0;
}
-void DoTVShowSecretBaseSecrets(void)
+static void DoTVShowSecretBaseSecrets(void)
{
TVShow *show;
u8 state;
@@ -7645,7 +7616,7 @@ void DoTVShowSecretBaseSecrets(void)
ShowFieldMessage(sTVSecretBaseSecretsTextGroup[state]);
}
-void DoTVShowSafariFanClub(void)
+static void DoTVShowSafariFanClub(void)
{
TVShow *show;
u8 state;
@@ -7732,7 +7703,7 @@ void DoTVShowSafariFanClub(void)
ShowFieldMessage(sTVSafariFanClubTextGroup[state]);
}
-void DoTVShowPokemonContestLiveUpdates2(void)
+static void DoTVShowPokemonContestLiveUpdates2(void)
{
TVShow *show;
u8 state;
diff --git a/src/window.c b/src/window.c
index 589557d43..9a52a5a20 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1,6 +1,8 @@
#include "global.h"
#include "window.h"
#include "malloc.h"
+#include "bg.h"
+#include "blit.h"
u32 filler_03002F58;
u32 filler_03002F5C;
@@ -15,19 +17,6 @@ EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0};
EWRAM_DATA static struct Window* sWindowPtr = NULL;
EWRAM_DATA static u16 sWindowSize = 0;
-extern void* GetBgTilemapBuffer(u8 bg);
-extern int DummiedOutFireRedLeafGreenTileAllocFunc(int, int, int, int);
-extern u16 GetBgAttribute(u8 bg, u8 attributeId);
-extern void SetBgTilemapBuffer(u8 bg, void *tilemap);
-extern void CopyBgTilemapBufferToVram(u8 bg);
-extern u8 LoadBgTiles(u8 bg, void *src, u16 size, u16 destOffset);
-extern void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, u16 tileNumDelta);
-extern void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
-extern void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey);
-extern void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey, u8 paletteNum);
-extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-extern void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-
static u8 GetNumActiveWindowsOnBg(u8 bgId);
static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId);
@@ -130,13 +119,13 @@ u16 AddWindow(const struct WindowTemplate *template)
u8 *allocatedTilemapBuffer;
int i;
- for (win = 0; win < 0x20; ++win)
+ for (win = 0; win < WINDOWS_MAX; ++win)
{
if ((bgLayer = gWindows[win].window.priority) == 0xFF)
break;
}
- if (win == 0x20)
+ if (win == WINDOWS_MAX)
return 0xFF;
bgLayer = template->priority;
@@ -199,13 +188,13 @@ int AddWindowWithoutTileMap(const struct WindowTemplate *template)
u8 bgLayer;
int allocatedBaseBlock;
- for (win = 0; win < 0x20; ++win)
+ for (win = 0; win < WINDOWS_MAX; ++win)
{
if (gWindows[win].window.priority == 0xFF)
break;
}
- if (win == 0x20)
+ if (win == WINDOWS_MAX)
return 0xFF;
bgLayer = template->priority;