summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2018-03-01 01:01:18 +0100
committerDizzyEggg <jajkodizzy@wp.pl>2018-03-01 01:01:18 +0100
commit988f0b7e19a4505bdd0e846550382661dcf53cc7 (patch)
tree0e1ccb1aaa62828adbcf2108c7d8c59909ff55c4
parentd29b9d268fe46322c740fe5ac440641834686f9d (diff)
parentbcef4e7d1c20bad3d4631c5a8314a8de8da80e49 (diff)
Merge branch 'master' into decompile_battle_link_817C95C
-rw-r--r--asm/battle_tower.s2
-rw-r--r--asm/blit.s823
-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_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.h33
-rw-r--r--include/battle_main.h30
-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/gym_leader_rematch.h87
-rw-r--r--include/pokemon.h1
-rw-r--r--ld_script.txt7
-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.c1
-rw-r--r--src/battle_controller_link_partner.c1
-rw-r--r--src/battle_controller_opponent.c5
-rw-r--r--src/battle_controller_player.c18
-rw-r--r--src/battle_controller_player_partner.c3
-rw-r--r--src/battle_controller_recorded_player.c1
-rw-r--r--src/battle_controllers.c1
-rw-r--r--src/battle_gfx_sfx_util.c9
-rw-r--r--src/battle_main.c211
-rw-r--r--src/battle_message.c2
-rw-r--r--src/battle_script_commands.c409
-rw-r--r--src/battle_setup.c162
-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.c4
-rw-r--r--src/pokemon_summary_screen.c5
-rw-r--r--src/text.c12
-rw-r--r--src/window.c23
55 files changed, 5205 insertions, 6363 deletions
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/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_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 731b5692e..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
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/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/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/ld_script.txt b/ld_script.txt
index ede1c7ad1..19d574394 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);
@@ -267,7 +267,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);
@@ -381,7 +381,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);
@@ -536,7 +535,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 6e6968786..cc6528f5f 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -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);
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 476a95ad1..6ca50dc5c 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_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_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 54d6434a3..e88b586b1 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -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 f25566dd5..3a6aa4a6e 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -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);
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_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_controllers.c b/src/battle_controllers.c
index 97f82ed0c..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
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 0358c0956..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
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_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 9c55fb84d..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};
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/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/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;