summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--asm/battle_link_817C95C.s4891
-rw-r--r--asm/battle_tower.s2
-rw-r--r--asm/blit.s823
-rw-r--r--asm/field_specials.s16
-rw-r--r--asm/fldeff_flash.s709
-rw-r--r--asm/fldeff_groundshake.s596
-rw-r--r--asm/fossil_specials.s887
-rw-r--r--asm/item_menu_icons.s637
-rw-r--r--asm/learn_move.s4
-rw-r--r--asm/list_menu.s1643
-rw-r--r--asm/player_pc.s20
-rw-r--r--asm/pokemon_summary_screen.s16
-rw-r--r--asm/rom_8011DC0.s20
-rw-r--r--asm/shop.s2
-rw-r--r--asm/trainer_rematch.s206
-rw-r--r--common_syms/list_menu.txt2
-rw-r--r--constants/battle_move_constants.inc15
-rw-r--r--constants/constants.inc1
-rw-r--r--data/battle_link_817C95C.s174
-rw-r--r--data/battle_moves.inc3906
-rw-r--r--data/data2b.s18
-rw-r--r--data/data2c.s18
-rw-r--r--data/event_scripts.s4
-rw-r--r--data/fldeff_flash.s81
-rw-r--r--data/fossil_special_fldeff_groundshake.s98
-rw-r--r--data/graphics/berries/berry_pic_table.inc45
-rw-r--r--data/item_menu_icons.s213
-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.h135
-rw-r--r--include/battle_link_817C95C.h11
-rw-r--r--include/battle_main.h30
-rw-r--r--include/battle_message.h51
-rw-r--r--include/battle_script_commands.h8
-rw-r--r--include/battle_tv.h11
-rw-r--r--include/battle_util.h28
-rw-r--r--include/blit.h10
-rw-r--r--include/braille_puzzles.h7
-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/event_scripts.h4
-rw-r--r--include/fldeff_groundshake.h7
-rw-r--r--include/global.tv.h4
-rw-r--r--include/graphics.h96
-rw-r--r--include/gym_leader_rematch.h87
-rw-r--r--include/item_menu.h41
-rw-r--r--include/item_menu_icons.h19
-rw-r--r--include/list_menu.h64
-rw-r--r--include/menu_indicators.h17
-rw-r--r--include/pokemon.h1
-rw-r--r--include/roulette_util.h17
-rw-r--r--include/strings.h3
-rw-r--r--include/tv.h41
-rw-r--r--ld_script.txt26
-rw-r--r--src/battle_ai_script_commands.c519
-rw-r--r--src/battle_ai_switch_items.c4
-rw-r--r--src/battle_anim.c224
-rw-r--r--src/battle_bg.c1
-rw-r--r--src/battle_controller_link_opponent.c61
-rw-r--r--src/battle_controller_link_partner.c57
-rw-r--r--src/battle_controller_opponent.c59
-rw-r--r--src/battle_controller_player.c146
-rw-r--r--src/battle_controller_player_partner.c99
-rw-r--r--src/battle_controller_recorded_opponent.c52
-rw-r--r--src/battle_controller_recorded_player.c49
-rw-r--r--src/battle_controller_safari.c4
-rw-r--r--src/battle_controller_wally.c51
-rw-r--r--src/battle_controllers.c45
-rw-r--r--src/battle_gfx_sfx_util.c9
-rw-r--r--src/battle_interface.c194
-rw-r--r--src/battle_main.c228
-rw-r--r--src/battle_message.c1946
-rw-r--r--src/battle_script_commands.c985
-rw-r--r--src/battle_setup.c169
-rw-r--r--src/battle_tv.c1576
-rw-r--r--src/battle_util.c59
-rw-r--r--src/battle_util2.c18
-rw-r--r--src/berry_blender.c4
-rw-r--r--src/berry_tag_screen.c6
-rw-r--r--src/birch_pc.c4
-rw-r--r--src/blit.c209
-rw-r--r--src/daycare.c27
-rw-r--r--src/decoration.c12
-rw-r--r--src/evolution_scene.c6
-rw-r--r--src/fldeff_flash.c367
-rw-r--r--src/fldeff_groundshake.c299
-rw-r--r--src/fldeff_softboiled.c18
-rw-r--r--src/fldeff_strength.c10
-rw-r--r--src/fldeff_sweetscent.c3
-rw-r--r--src/fossil_specials.c770
-rw-r--r--src/gym_leader_rematch.c106
-rwxr-xr-xsrc/item_menu.c255
-rw-r--r--src/item_menu_icons.c678
-rw-r--r--src/lilycove_lady.c84
-rw-r--r--src/list_menu.c633
-rw-r--r--src/pokeball.c190
-rw-r--r--src/pokeblock.c38
-rw-r--r--src/pokemon.c24
-rw-r--r--src/pokemon_summary_screen.c8
-rw-r--r--src/reshow_battle_screen.c21
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/secret_base.c16
-rw-r--r--src/text.c12
-rw-r--r--src/tv.c483
-rw-r--r--src/window.c23
-rw-r--r--sym_common.txt6
120 files changed, 12238 insertions, 19200 deletions
diff --git a/.travis.yml b/.travis.yml
index 2067d0fdf..e54c14e96 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,7 +13,7 @@ cache:
apt: true
install:
- pushd $HOME
- - travis_retry wget http://download.sourceforge.net/devkitpro/devkitARM_r47-x86_64-linux.tar.bz2
+ - travis_retry wget https://downloads.sourceforge.net/project/devkitpro/devkitARM/devkitARM_r47/devkitARM_r47-x86_64-linux.tar.bz2
- tar xf devkitARM*.tar.bz2
- travis_retry git clone https://github.com/pret/agbcc.git
- cd agbcc && ./build.sh && ./install.sh $TRAVIS_BUILD_DIR
diff --git a/asm/battle_link_817C95C.s b/asm/battle_link_817C95C.s
deleted file mode 100644
index 55d0bae39..000000000
--- a/asm/battle_link_817C95C.s
+++ /dev/null
@@ -1,4891 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_817C95C
-sub_817C95C: @ 817C95C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817C988
- ldr r0, [sp]
- cmp r0, 0x1B
- beq _0817C988
- cmp r0, 0xDD
- beq _0817C988
- bl _0817E0A6
-_0817C988:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r7, r0, r1
- ldr r5, =gBattlerAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gEffectBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =gStringInfo
- ldr r0, [r0]
- ldrb r0, [r0, 0x7]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- cmp r4, 0
- bne _0817CA00
- ldr r2, =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- b _0817CA10
- .pool
-_0817CA00:
- ldr r2, =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gEnemyParty
-_0817CA10:
- adds r1, r0
- str r1, [sp, 0x8]
- cmp r6, 0
- bne _0817CA3C
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- b _0817CA4C
- .pool
-_0817CA3C:
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gEnemyParty
-_0817CA4C:
- adds r1, r0
- str r1, [sp, 0xC]
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- ldr r1, =gStringInfo
- ldr r1, [r1]
- ldrh r1, [r1]
- bl GetBattlerMoveSlotId
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- cmp r0, 0x3
- bls _0817CA9C
- ldr r0, [sp]
- bl sub_817E0B8
- lsls r0, 24
- cmp r0, 0
- beq _0817CA9C
- ldr r2, [sp]
- cmp r2, 0xC
- bls _0817CA9C
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r1, [r0]
- movs r2, 0x1E
- bl _0817E0A2
- .pool
-_0817CA9C:
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- mov r8, r0
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r5, r0, 25
- ldr r0, =gEffectBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r3, r0, 25
- ldr r1, [sp]
- subs r1, 0x2
- movs r0, 0xB0
- lsls r0, 1
- cmp r1, r0
- bls _0817CAD2
- bl _0817E0A6
-_0817CAD2:
- lsls r0, r1, 2
- ldr r1, =_0817CAEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817CAEC:
- .4byte _0817DD7A
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D070
- .4byte _0817DD74
- .4byte _0817DD80
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DA68
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D7D8
- .4byte _0817E0A6
- .4byte _0817D8A4
- .4byte _0817E0A6
- .4byte _0817D838
- .4byte _0817E0A6
- .4byte _0817D704
- .4byte _0817E0A6
- .4byte _0817D76C
- .4byte _0817DB24
- .4byte _0817E0A6
- .4byte _0817DB90
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D9C2
- .4byte _0817E0A6
- .4byte _0817DA24
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DBD4
- .4byte _0817E0A6
- .4byte _0817D94C
- .4byte _0817E0A6
- .4byte _0817D994
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E040
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DE10
- .4byte _0817DDC8
- .4byte _0817DEDC
- .4byte _0817DF24
- .4byte _0817DF4E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D698
- .4byte _0817E0A6
- .4byte _0817E08E
- .4byte _0817DF70
- .4byte _0817DFBC
- .4byte _0817E0A6
- .4byte _0817E08E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D53C
- .4byte _0817E0A6
- .4byte _0817D584
- .4byte _0817DACC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D3A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D296
- .4byte _0817D2E4
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D5CE
- .4byte _0817D608
- .4byte _0817D498
- .4byte _0817D4E0
- .4byte _0817DC62
- .4byte _0817DC98
- .4byte _0817E0A6
- .4byte _0817D1B8
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DCDC
- .4byte _0817E0A6
- .4byte _0817D0DC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D1E0
- .4byte _0817D314
- .4byte _0817D354
- .4byte _0817D372
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D216
- .4byte _0817D260
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D3C0
- .4byte _0817D3F2
- .4byte _0817D440
- .4byte _0817D45C
- .4byte _0817D3B8
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D098
- .4byte _0817D0D4
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DC20
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D16C
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DD38
- .4byte _0817DCFC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D65E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D124
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DE58
- .4byte _0817DDC8
- .4byte _0817DE10
- .4byte _0817DFE6
-_0817D070:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0x2
- movs r3, 0
- bl sub_817E684
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817D08C
- bl _0817E0A6
-_0817D08C:
- bl sub_817EECC
- bl _0817E0A6
- .pool
-_0817D098:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0x1
- movs r3, 0
- bl sub_817E684
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817D0B4
- bl _0817E0A6
-_0817D0B4:
- ldr r0, [sp, 0xC]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D0C6
- bl _0817E0A6
-_0817D0C6:
- bl sub_817EECC
- bl _0817E0A6
- .pool
-_0817D0D4:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0
- b _0817D48E
-_0817D0DC:
- lsls r3, r4, 1
- adds r3, r4
- lsls r3, 2
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3, 0x50]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x50]
- adds r3, 0x55
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0xD
- negs r0, r0
- bl _0817DC0C
- .pool
-_0817D124:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x52
- movs r0, 0x7
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r4]
- movs r0, 0x1D
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x55
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D16C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r5, r7, r0
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r3, r5, 0
- adds r3, 0x52
- lsls r1, 5
- ldrb r2, [r3]
- movs r0, 0x1F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- adds r4, r5, 0
- adds r4, 0x55
- mov r0, r10
- lsls r2, r0, 6
- ldrb r1, [r4]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r2
- strb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x58
- ldrb r0, [r2]
- movs r1, 0x40
- bl _0817DFAC
- .pool
-_0817D1B8:
- ldr r1, =gBattleTextBuff1 + 4
- ldrb r0, [r1]
- cmp r0, 0
- beq _0817D1C4
- bl _0817E0A6
-_0817D1C4:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x14
- bl _0817E0A2
- .pool
-_0817D1E0:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r3, r7, r0
- adds r0, r3, 0
- adds r0, 0x53
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D1FA
- bl _0817E0A6
-_0817D1FA:
- adds r2, r6, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x56
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- bl _0817DB10
-_0817D216:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x53
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x56
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D260:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r3, r7, r0
- adds r0, r3, 0
- adds r0, 0x53
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817D27A
- bl _0817E0A6
-_0817D27A:
- adds r2, r6, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x56
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- bl _0817DBC2
-_0817D296:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r2, 0x56
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 7
- ldrh r3, [r2]
- ldr r0, =0xfffffe7f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2]
- bl _0817E0A6
- .pool
-_0817D2E4:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x56
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- bne _0817D2FC
- bl _0817E0A6
-_0817D2FC:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x16
- bl _0817E0A2
-_0817D314:
- mov r2, r8
- lsls r3, r2, 3
- lsls r0, r4, 4
- adds r3, r0
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r3, 0x35
- movs r0, 0x7
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- movs r2, 0x3
- mov r1, r10
- ands r1, r2
- lsls r1, 3
- movs r2, 0x19
- negs r2, r2
- bl _0817DC0C
- .pool
-_0817D354:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r0, r7, r0
- adds r0, 0x35
- ldrb r1, [r0]
- lsls r0, r1, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D36E
- bl _0817E0A6
-_0817D36E:
- adds r2, r4, 0
- b _0817D38C
-_0817D372:
- lsls r0, r5, 3
- lsls r1, r6, 4
- adds r0, r1
- adds r0, r7, r0
- adds r0, 0x35
- ldrb r1, [r0]
- lsls r0, r1, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D38A
- bl _0817E0A6
-_0817D38A:
- adds r2, r6, 0
-_0817D38C:
- subs r0, 0x1
- lsls r0, 2
- lsls r3, r1, 27
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0x6
- bl sub_817E684
- bl _0817E0A6
-_0817D3A6:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xB3
- movs r1, 0x1
- bl _0817E0A4
- .pool
-_0817D3B8:
- movs r0, 0x12
- mov r1, r10
- movs r2, 0
- b _0817D48E
-_0817D3C0:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D3CC
- bl _0817E0A6
-_0817D3CC:
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD1
- bne _0817D3E8
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x17
- b _0817D48C
- .pool
-_0817D3E8:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x16
- b _0817D48C
-_0817D3F2:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D3FE
- bl _0817E0A6
-_0817D3FE:
- ldr r0, =gBattlerAttacker
- ldr r1, =gBattlerTarget
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0817D436
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD1
- bne _0817D42C
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x17
- b _0817D48C
- .pool
-_0817D42C:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x16
- b _0817D48C
-_0817D436:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1B
- b _0817D48C
-_0817D440:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D44C
- bl _0817E0A6
-_0817D44C:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x18
- b _0817D48C
- .pool
-_0817D45C:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D468
- bl _0817E0A6
-_0817D468:
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD3
- bne _0817D484
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1A
- b _0817D48C
- .pool
-_0817D484:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x19
-_0817D48C:
- mov r1, r10
-_0817D48E:
- movs r3, 0
- bl sub_817E684
- bl _0817E0A6
-_0817D498:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x30
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x32
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D4E0:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D4F2
- bl _0817E0A6
-_0817D4F2:
- mov r2, r8
- lsls r0, r2, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D50E
- bl _0817E0A6
-_0817D50E:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0x2
- b _0817D6F2
-_0817D53C:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x30
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x32
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D584:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817D5A0
- bl _0817E0A6
-_0817D5A0:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x1
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- b _0817D6F2
-_0817D5CE:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r2, 0x30]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x30]
- adds r2, 0x32
- bl _0817DF0A
- .pool
-_0817D608:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D61A
- bl _0817E0A6
-_0817D61A:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- ldrh r0, [r1, 0x30]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- bne _0817D632
- bl _0817E0A6
-_0817D632:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsrs r3, 6
- movs r0, 0x8
- movs r1, 0x5
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0xA
- b _0817D6F2
-_0817D65E:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x31
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- bl _0817DF9E
- .pool
-_0817D698:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D6AA
- bl _0817E0A6
-_0817D6AA:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817D6C6
- bl _0817E0A6
-_0817D6C6:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x6
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0xC
-_0817D6F2:
- orrs r0, r2
- mov r2, r8
- lsls r3, r2, 5
- movs r2, 0x1F
- ands r0, r2
- orrs r0, r3
- strb r0, [r1]
- bl _0817E0A6
-_0817D704:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r2]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- mov r2, r10
- lsls r3, r2, 6
- ldrb r2, [r1, 0x2]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x2]
- bl _0817E0A6
- .pool
-_0817D76C:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D77E
- bl _0817E0A6
-_0817D77E:
- ldr r6, =gBattlerPartyIndexes
- ldr r5, =gBattlerAttacker
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- lsls r0, 2
- lsls r1, r4, 1
- adds r4, r1, r4
- lsls r1, r4, 3
- adds r0, r1
- adds r1, r7, r0
- ldrh r0, [r1]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- beq _0817D7B2
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsrs r3, 6
- movs r0, 0x8
- movs r1, 0x4
- bl sub_817E684
-_0817D7B2:
- lsls r3, r4, 2
- adds r3, r7, r3
- adds r3, 0x57
- ldrb r0, [r3]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r0
- movs r0, 0x8
- orrs r1, r0
- strb r1, [r3]
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r6
- b _0817D934
- .pool
-_0817D7D8:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x2]
- movs r0, 0xD
- negs r0, r0
- b _0817D88C
- .pool
-_0817D838:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r1, r9
- lsls r4, r1, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r2]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 4
- ldrb r3, [r1, 0x2]
- movs r0, 0x31
- negs r0, r0
-_0817D88C:
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x2]
- bl _0817E0A6
- .pool
-_0817D8A4:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D8B6
- bl _0817E0A6
-_0817D8B6:
- ldr r2, =gBattlerPartyIndexes
- mov r8, r2
- ldr r6, =gBattlerAttacker
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- lsls r0, 2
- lsls r1, r4, 1
- adds r5, r1, r4
- lsls r4, r5, 3
- adds r0, r4
- adds r1, r7, r0
- ldrb r0, [r1]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- beq _0817D8EE
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x2
- bl sub_817E684
-_0817D8EE:
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r4
- adds r1, r7, r0
- ldrb r0, [r1]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817D91A
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x3
- bl sub_817E684
-_0817D91A:
- lsls r3, r5, 2
- adds r3, r7, r3
- adds r3, 0x57
- ldrb r0, [r3]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r0
- movs r0, 0x6
- orrs r1, r0
- strb r1, [r3]
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
-_0817D934:
- ldrh r0, [r0]
- lsls r0, 5
- movs r2, 0x1F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3]
- b _0817E0A6
- .pool
-_0817D94C:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x31
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- b _0817DFAA
- .pool
-_0817D994:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- bne _0817D9AE
- b _0817E0A6
-_0817D9AE:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x9
- b _0817E086
-_0817D9C2:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r2, 0x1]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- ldrb r3, [r1, 0x3]
- movs r0, 0x4
- negs r0, r0
- b _0817DB76
- .pool
-_0817DA24:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldrb r0, [r1, 0x1]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817DA48
- b _0817E0A6
-_0817DA48:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x9
- movs r1, 0x2
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DA68:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r1, r9
- lsls r4, r1, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2, 0x1]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x3]
- movs r0, 0xD
- negs r0, r0
- b _0817DB76
- .pool
-_0817DACC:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldrb r0, [r1, 0x1]
- lsls r0, 25
- lsrs r2, r0, 29
- cmp r2, 0
- bne _0817DAF0
- b _0817E0A6
-_0817DAF0:
- ldr r0, =gStringInfo
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0xAD
- bne _0817DAFC
- b _0817E0A6
-_0817DAFC:
- cmp r0, 0xD6
- bne _0817DB02
- b _0817E0A6
-_0817DB02:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x9
-_0817DB10:
- movs r1, 0x3
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DB24:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r3, [r0]
- lsls r3, 2
- mov r2, r9
- lsls r4, r2, 1
- add r4, r9
- lsls r4, 3
- adds r3, r4
- adds r3, r7, r3
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 4
- ldrb r3, [r1, 0x3]
- movs r0, 0x31
- negs r0, r0
-_0817DB76:
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x3]
- b _0817E0A6
- .pool
-_0817DB90:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldr r0, [r1]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- bne _0817DBB4
- b _0817E0A6
-_0817DBB4:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x9
-_0817DBC2:
- movs r1, 0x4
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DBD4:
- lsls r3, 3
- mov r1, r9
- lsls r0, r1, 4
- adds r3, r0
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3, 0x30]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x30]
- adds r3, 0x33
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r2, [r3]
- movs r0, 0x31
- negs r0, r0
-_0817DC0C:
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- b _0817E0A6
- .pool
-_0817DC20:
- mov r2, r8
- lsls r0, r2, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r7, r0
- ldr r0, [r3, 0x30]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817DC4C
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r3, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x9
- movs r1, 0x1
- bl sub_817E684
-_0817DC4C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x18
- b _0817E0A2
-_0817DC62:
- lsls r2, r6, 1
- adds r2, r6
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
- b _0817DF9E
- .pool
-_0817DC98:
- ldr r1, [sp, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r4, r7, r0
- adds r0, r4, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r2, r0, 29
- cmp r2, 0
- bne _0817DCB2
- b _0817E0A6
-_0817DCB2:
- movs r0, 0x1
- eors r1, r0
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x54
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0xA
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0xE
- b _0817DFAC
-_0817DCDC:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x4
- negs r0, r0
- b _0817DF6A
-_0817DCFC:
- mov r0, r8
- lsls r2, r0, 3
- lsls r0, r4, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x34
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- mov r1, r10
- lsls r3, r1, 6
- b _0817DF0E
- .pool
-_0817DD38:
- mov r0, r8
- lsls r2, r0, 3
- lsls r0, r4, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r2, 0x34
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r2]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r10
- lsls r3, r1, 6
- movs r1, 0x3F
- b _0817DF12
- .pool
-_0817DD74:
- movs r0, 0
- bl sub_817EA80
-_0817DD7A:
- mov r2, r8
- lsls r0, r2, 3
- b _0817DD88
-_0817DD80:
- movs r0, 0x1
- bl sub_817EA80
- lsls r0, r5, 3
-_0817DD88:
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r4, r1, 0
- adds r4, 0x34
- ldrb r5, [r4]
- lsls r0, r5, 29
- cmp r0, 0
- beq _0817DDAE
- movs r0, 0x8
- negs r0, r0
- ands r0, r5
- strb r0, [r4]
- adds r2, r1, 0
- adds r2, 0x33
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
-_0817DDAE:
- ldrb r1, [r4]
- lsls r0, r1, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817DDBA
- b _0817E0A6
-_0817DDBA:
- movs r0, 0x39
- negs r0, r0
- ands r0, r1
- movs r1, 0x3F
- ands r0, r1
- strb r0, [r4]
- b _0817E0A6
-_0817DDC8:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- b _0817DFAA
- .pool
-_0817DE10:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r4]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r4]
- adds r2, 0x54
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- b _0817DFAA
- .pool
-_0817DE58:
- ldr r1, =gBattleTextBuff1 + 2
- ldrh r0, [r1]
- cmp r0, 0x73
- bne _0817DE82
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x39
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0817DE82:
- ldr r2, =gBattleTextBuff1 + 2
- ldrh r0, [r2]
- cmp r0, 0x71
- bne _0817DEAA
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrh r2, [r3]
- ldr r0, =0xfffffe3f
- ands r0, r2
- strh r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x31
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0817DEAA:
- ldr r1, =gBattleTextBuff1 + 2
- ldrh r0, [r1]
- cmp r0, 0x36
- beq _0817DEB4
- b _0817E0A6
-_0817DEB4:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r4, r1, 0
- adds r4, 0x51
- ldrb r2, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r2
- strb r0, [r4]
- adds r1, 0x55
- ldrb r2, [r1]
- movs r0, 0x4
- negs r0, r0
- b _0817DF6A
- .pool
-_0817DEDC:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x51
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
-_0817DF0A:
- mov r0, r10
- lsls r3, r0, 6
-_0817DF0E:
- ldrb r1, [r2]
- movs r0, 0x3F
-_0817DF12:
- ands r0, r1
- orrs r0, r3
- strb r0, [r2]
- b _0817E0A6
- .pool
-_0817DF24:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x51
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817DF3C
- b _0817E0A6
-_0817DF3C:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x54
- ldrb r3, [r0]
- lsrs r3, 6
- movs r0, 0xF
- b _0817E086
-_0817DF4E:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r4, r1, 0
- adds r4, 0x51
- ldrb r2, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- strb r0, [r4]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x3F
-_0817DF6A:
- ands r0, r2
- strb r0, [r1]
- b _0817E0A6
-_0817DF70:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x51
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x55
-_0817DF9E:
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x4
- negs r0, r0
-_0817DFAA:
- ands r0, r3
-_0817DFAC:
- orrs r0, r1
- strb r0, [r2]
- b _0817E0A6
- .pool
-_0817DFBC:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x51
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- beq _0817E0A6
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x10
- b _0817E086
-_0817DFE6:
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x39
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldrh r2, [r3]
- ldr r0, =0xfffffe3f
- ands r0, r2
- strh r0, [r3]
- ldrb r2, [r1]
- movs r0, 0x31
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0x11
- movs r1, 0
- mov r3, r10
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817E040:
- lsls r0, r4, 4
- adds r4, r7, r0
- adds r0, r4, 0
- adds r0, 0x35
- ldrb r0, [r0]
- lsrs r0, 5
- cmp r0, 0
- beq _0817E068
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x36
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x15
- movs r1, 0
- bl sub_817E684
-_0817E068:
- adds r0, r4, 0
- adds r0, 0x3D
- ldrb r0, [r0]
- lsrs r0, 5
- cmp r0, 0
- beq _0817E0A6
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x15
-_0817E086:
- movs r1, 0
- bl sub_817E684
- b _0817E0A6
-_0817E08E:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x1C
-_0817E0A2:
- orrs r1, r2
-_0817E0A4:
- strb r1, [r0]
-_0817E0A6:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_817C95C
-
- thumb_func_start sub_817E0B8
-sub_817E0B8: @ 817E0B8
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- movs r3, 0
- ldr r4, =gUnknown_0860A8A4
- ldr r6, =0x0000ffff
- adds r2, r4, 0
- adds r1, r4, 0
-_0817E0C8:
- ldrh r0, [r1]
- cmp r0, r5
- beq _0817E0DA
- adds r2, 0x2
- adds r1, 0x2
- adds r3, 0x1
- ldrh r0, [r2]
- cmp r0, r6
- bne _0817E0C8
-_0817E0DA:
- lsls r0, r3, 1
- adds r0, r4
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817E0F4
- movs r0, 0
- b _0817E0F6
- .pool
-_0817E0F4:
- movs r0, 0x1
-_0817E0F6:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_817E0B8
-
- thumb_func_start sub_817E0FC
-sub_817E0FC: @ 817E0FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- str r2, [sp, 0x4]
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817E122
- b _0817E310
-_0817E122:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r1, r0, r1
- str r1, [sp, 0x8]
- ldr r2, =gBattlerAttacker
- mov r10, r2
- ldrb r0, [r2]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r10
- ldrb r0, [r1]
- adds r1, r7, 0
- bl GetBattlerMoveSlotId
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _0817E184
- mov r2, r9
- lsls r0, r2, 1
- add r0, r9
- lsls r0, 2
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- adds r0, 0x57
- ldrb r1, [r0]
- movs r2, 0x1E
- orrs r1, r2
- strb r1, [r0]
- b _0817E310
- .pool
-_0817E184:
- mov r2, r10
- ldrb r0, [r2]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- lsls r0, 3
- lsls r4, 4
- adds r0, r4
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- mov r2, r10
- ldrb r1, [r2]
- lsls r1, 1
- ldr r2, =gBattlerPartyIndexes
- adds r1, r2
- ldrh r2, [r1]
- adds r2, 0x1
- adds r0, 0x35
- lsls r2, 5
- ldrb r3, [r0]
- movs r1, 0x1F
- ands r1, r3
- orrs r1, r2
- strb r1, [r0]
- mov r1, r10
- ldrb r0, [r1]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- lsls r0, 3
- adds r0, r4
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- adds r0, 0x36
- movs r1, 0x3
- mov r8, r6
- mov r2, r8
- ands r2, r1
- mov r8, r2
- ldrb r2, [r0]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- mov r2, r8
- orrs r1, r2
- strb r1, [r0]
- mov r1, r9
- lsls r0, r1, 1
- add r0, r9
- lsls r0, 2
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- str r0, [sp, 0xC]
- adds r5, r0, 0
- adds r5, 0x53
- lsls r2, r6, 6
- ldrb r1, [r5]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r2
- strb r0, [r5]
- ldr r1, =gBattleMoves
- lsls r4, r7, 1
- adds r0, r4, r7
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0
- adds r1, r6, 0
- movs r3, 0
- bl sub_817E684
- ldr r0, [sp]
- adds r1, r7, 0
- adds r2, r6, 0
- bl sub_817F394
- ldr r0, [sp, 0x4]
- ldrb r1, [r0, 0x12]
- movs r0, 0xF
- ands r0, r1
- str r4, [sp, 0x10]
- cmp r0, 0
- beq _0817E23C
- movs r0, 0x7
- adds r1, r7, 0
- adds r2, r6, 0
- movs r3, 0
- bl sub_817E684
-_0817E23C:
- ldr r0, =0x00000111
- cmp r7, r0
- bne _0817E272
- mov r1, r10
- ldrb r0, [r1]
- lsls r0, 1
- ldr r2, =gBattlerPartyIndexes
- adds r0, r2
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- ldrb r2, [r5]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5]
- ldr r2, [sp, 0xC]
- adds r2, 0x56
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- mov r1, r8
- orrs r0, r1
- strb r0, [r2]
-_0817E272:
- cmp r7, 0x78
- beq _0817E27A
- cmp r7, 0x99
- bne _0817E2D2
-_0817E27A:
- movs r0, 0x1
- mov r2, r9
- eors r0, r2
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, [sp, 0x8]
- adds r2, r0, r2
- mov r1, r10
- ldrb r0, [r1]
- lsls r0, 1
- ldr r1, =gBattlerPartyIndexes
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x58
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r8
- lsls r3, r1, 1
- movs r1, 0x7
- negs r1, r1
- ands r0, r1
- orrs r0, r3
- strb r0, [r4]
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x1A
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4]
-_0817E2D2:
- ldr r1, =gBattleMoves
- ldr r2, [sp, 0x10]
- adds r0, r2, r7
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x2]
- ldrb r5, [r0, 0x1]
- movs r0, 0xD
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xE
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xB
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xC
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl sub_817E684
-_0817E310:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E0FC
-
- thumb_func_start sub_817E32C
-sub_817E32C: @ 817E32C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817E3EE
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r4, r0, r1
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r5, 0x12
- beq _0817E36C
- cmp r5, 0x13
- beq _0817E3AA
- b _0817E3EE
- .pool
-_0817E36C:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0
- ldr r0, [r4, 0x50]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817E3EE
- subs r0, 0x1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x55
- ldrb r3, [r1]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x10
- b _0817E3EA
-_0817E3AA:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 29
- cmp r0, 0
- beq _0817E3EE
- subs r0, 0x1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x55
- ldrb r3, [r1]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0x1
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x12
-_0817E3EA:
- orrs r0, r1
- strb r0, [r2]
-_0817E3EE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_817E32C
-
- thumb_func_start sub_817E3F4
-sub_817E3F4: @ 817E3F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- movs r0, 0
- str r0, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r2, 0
- str r2, [sp, 0x8]
- ldr r3, =0x00007fff
- str r3, [sp, 0xC]
- movs r4, 0
- str r4, [sp, 0x10]
- movs r7, 0
- str r7, [sp, 0x14]
- mov r8, r0
- ldr r0, =gBattleStruct
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xB3
- ldrb r0, [r0]
- cmp r0, 0
- beq _0817E42A
- b _0817E670
-_0817E42A:
- movs r2, 0xD2
- lsls r2, 1
- adds r2, r1
- mov r10, r2
- movs r6, 0
-_0817E434:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r0, r4, r0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0817E454
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
-_0817E454:
- ldr r5, =gEnemyParty
- adds r0, r4, r5
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0817E46A
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_0817E46A:
- adds r6, 0x1
- cmp r6, 0x5
- ble _0817E434
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817E47E
- b _0817E670
-_0817E47E:
- cmp r8, r7
- beq _0817E484
- b _0817E670
-_0817E484:
- movs r6, 0
- lsls r3, r6, 1
- str r3, [sp, 0x18]
- movs r4, 0x64
- mov r8, r4
-_0817E48E:
- mov r1, r8
- muls r1, r6
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r6, 0x1
- mov r9, r0
- cmp r7, 0
- beq _0817E4EE
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817E4EE
- movs r4, 0
- lsls r0, r6, 3
- mov r2, r10
- adds r1, r0, r2
- movs r3, 0x3
-_0817E4C4:
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r4, [r1]
- adds r0, r4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0817E4C4
- ldr r1, [sp, 0x8]
- lsls r0, r1, 16
- lsls r1, r4, 16
- cmp r0, r1
- bge _0817E4EE
- lsls r0, r6, 24
- lsrs r0, 24
- str r0, [sp, 0x10]
- lsrs r1, 16
- str r1, [sp, 0x8]
- str r7, [sp]
-_0817E4EE:
- mov r0, r8
- muls r0, r6
- ldr r2, =gEnemyParty
- adds r4, r0, r2
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r3, [sp, 0x8]
- lsls r3, 16
- str r3, [sp, 0x1C]
- cmp r7, 0
- beq _0817E5A0
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817E5A0
- movs r4, 0
- ldr r0, [sp, 0xC]
- lsls r2, r0, 16
- movs r3, 0x1
- lsls r1, r3, 1
- adds r1, 0x1
- lsls r1, 4
- lsls r0, r6, 3
- adds r0, r1
- mov r3, r10
- adds r1, r0, r3
- movs r3, 0x3
-_0817E534:
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r4, [r1]
- adds r0, r4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0817E534
- asrs r1, r2, 16
- lsls r5, r4, 16
- asrs r0, r5, 16
- cmp r1, r0
- bne _0817E590
- mov r0, r8
- muls r0, r6
- ldr r1, =gEnemyParty
- adds r0, r1
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- ldr r2, [sp, 0x14]
- mov r0, r8
- muls r0, r2
- ldr r3, =gEnemyParty
- adds r0, r3
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- cmp r4, r0
- bls _0817E5A0
- b _0817E594
- .pool
-_0817E590:
- cmp r1, r0
- ble _0817E5A0
-_0817E594:
- lsls r0, r6, 24
- lsrs r0, 24
- str r0, [sp, 0x14]
- lsrs r5, 16
- str r5, [sp, 0xC]
- str r7, [sp, 0x4]
-_0817E5A0:
- mov r6, r9
- cmp r6, 0x5
- bgt _0817E5A8
- b _0817E48E
-_0817E5A8:
- movs r4, 0
- movs r6, 0
- movs r3, 0
- ldr r5, =gPlayerParty
- ldr r7, [sp, 0x10]
- lsls r0, r7, 3
- mov r1, r10
- adds r2, r0, r1
-_0817E5B8:
- lsls r0, r4, 16
- asrs r0, 16
- movs r7, 0
- ldrsh r1, [r2, r7]
- cmp r0, r1
- bge _0817E5C8
- ldrh r4, [r2]
- adds r6, r3, 0
-_0817E5C8:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x3
- ble _0817E5B8
- movs r0, 0x64
- ldr r1, [sp, 0x10]
- muls r0, r1
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0xD
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r2, [sp, 0x1C]
- cmp r2, 0
- beq _0817E670
- cmp r4, 0
- beq _0817E670
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0817E65C
- ldr r3, [sp, 0x10]
- cmp r3, 0x2
- bhi _0817E620
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r0, [r0]
- bl sub_806D82C
- lsls r0, 16
- cmp r0, 0
- beq _0817E630
- b _0817E670
- .pool
-_0817E620:
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r0, [r0]
- bl sub_806D82C
- lsls r0, 16
- cmp r0, 0
- beq _0817E670
-_0817E630:
- movs r3, 0
- ldr r7, [sp, 0x14]
- cmp r7, 0x2
- bls _0817E63A
- movs r3, 0x1
-_0817E63A:
- lsls r0, r3, 24
- lsrs r0, 24
- ldr r1, =gBattleScripting
- adds r1, 0x25
- ldrb r1, [r1]
- bl sub_806EF84
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- bl PutBattleUpdateOnTheAir
- b _0817E670
- .pool
-_0817E65C:
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- adds r1, r4, 0
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- bl PutBattleUpdateOnTheAir
-_0817E670:
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E3F4
-
- thumb_func_start sub_817E684
-sub_817E684: @ 817E684
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r5, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0xD2
- lsls r1, 1
- adds r1, r0
- mov r8, r1
- movs r2, 0x81
- lsls r2, 2
- adds r7, r0, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r3, r0, 24
- mov r0, r10
- cmp r0, 0x1B
- bls _0817E6D4
- b _0817EA6C
-_0817E6D4:
- lsls r0, 2
- ldr r1, =_0817E6F0
- adds r1, r0, r1
- ldr r1, [r1]
- mov r12, r0
- mov pc, r1
- .pool
- .align 2, 0
-_0817E6F0:
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E85C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E8A0
- .4byte _0817E8A0
- .4byte _0817E8CC
- .4byte _0817E8F0
- .4byte _0817E978
- .4byte _0817E9E0
- .4byte _0817EA28
- .4byte _0817E8A0
- .4byte _0817E8A0
- .4byte _0817E880
- .4byte _0817E760
- .4byte _0817E80A
- .4byte _0817E848
- .4byte _0817E8A0
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
-_0817E760:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r6
- lsls r1, 1
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r5, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E79C:
- ldr r1, =gUnknown_0860A834
- add r1, r12
- ldr r7, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r4
- lsls r2, r0, 4
- ldr r4, =0x0000ffff
- ldr r1, [r1]
- ldr r3, =gBattlerAttacker
- ldrh r0, [r1]
- cmp r6, r0
- bne _0817E7E0
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x2]
- ldrh r2, [r0]
- adds r1, r2
- strh r1, [r0]
- b _0817EA6C
- .pool
-_0817E7E0:
- adds r1, 0x4
- ldrh r0, [r1]
- cmp r0, r4
- bne _0817E7EA
- b _0817EA6C
-_0817E7EA:
- cmp r6, r0
- bne _0817E7E0
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x2]
- ldrh r5, [r0]
- adds r1, r5
- strh r1, [r0]
- b _0817EA6C
-_0817E80A:
- movs r0, 0x1
- adds r1, r5, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- mov r0, r9
- lsls r1, r0, 1
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E848:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
-_0817E85C:
- mov r0, r9
- lsls r1, r0, 1
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E880:
- lsls r1, r5, 2
- add r1, r9
- lsls r1, 1
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- b _0817EA64
- .pool
-_0817E8A0:
- lsls r2, r5, 2
- add r2, r9
- lsls r2, 1
- movs r1, 0x1
- eors r1, r4
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 4
- adds r2, r0
- add r2, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r1, [r0]
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- ldrh r1, [r2]
- adds r0, r1
- strh r0, [r2]
- b _0817EA6C
- .pool
-_0817E8CC:
- lsls r1, r5, 2
- add r1, r9
- lsls r1, 1
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E8F0:
- lsls r0, r3, 4
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x34
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- adds r4, r2, 0
- adds r4, 0x3C
- ldrb r0, [r4]
- lsls r0, 29
- lsrs r0, 29
- cmn r1, r0
- bne _0817E90E
- b _0817EA6C
-_0817E90E:
- cmp r6, 0xA
- beq _0817E914
- b _0817EA6C
-_0817E914:
- cmp r1, 0
- beq _0817E940
- subs r1, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x33
- ldrb r0, [r0]
- lsrs r0, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r5, [r1]
- adds r0, r5
- strh r0, [r1]
-_0817E940:
- ldrb r0, [r4]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817E94C
- b _0817EA6C
-_0817E94C:
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x3B
- ldrb r0, [r0]
- lsrs r0, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E978:
- lsls r1, r3, 4
- adds r1, r7, r1
- adds r0, r1, 0
- adds r0, 0x34
- ldrb r4, [r0]
- lsls r0, r4, 26
- lsrs r2, r0, 29
- adds r5, r1, 0
- adds r5, 0x3C
- ldrb r0, [r5]
- lsls r0, 26
- lsrs r0, 29
- cmn r2, r0
- beq _0817EA6C
- cmp r6, 0xD
- bne _0817EA6C
- cmp r2, 0
- beq _0817E9BE
- subs r1, r2, 0x1
- lsls r1, 2
- lsrs r0, r4, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
-_0817E9BE:
- ldrb r2, [r5]
- lsls r0, r2, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- lsrs r0, r2, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- b _0817EA5A
- .pool
-_0817E9E0:
- cmp r6, 0x8
- bhi _0817EA6C
- cmp r5, 0
- beq _0817EA6C
- lsls r0, r3, 1
- adds r3, r0, r3
- lsls r0, r3, 2
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x54
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 30
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817EA28:
- cmp r6, 0x8
- bls _0817EA6C
- cmp r5, 0
- beq _0817EA6C
- lsls r0, r3, 1
- adds r3, r0, r3
- lsls r0, r3, 2
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x50
- ldrh r0, [r0]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x54
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 30
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 4
-_0817EA5A:
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
-_0817EA64:
- ldrh r0, [r0]
- ldrh r5, [r1]
- adds r0, r5
-_0817EA6A:
- strh r0, [r1]
-_0817EA6C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E684
-
- thumb_func_start sub_817EA80
-sub_817EA80: @ 817EA80
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r5, r0, r1
- ldr r3, =gBattlerAttacker
- mov r8, r3
- ldrb r0, [r3]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r6, r5, r0
- adds r0, r6, 0
- adds r0, 0x57
- ldrb r0, [r0]
- lsrs r3, r0, 5
- lsls r0, 27
- lsrs r0, 28
- cmp r0, 0
- bne _0817EAC8
- b _0817EE50
-_0817EAC8:
- subs r0, 0x1
- cmp r0, 0xE
- bls _0817EAD0
- b _0817EEBC
-_0817EAD0:
- lsls r0, 2
- ldr r1, =_0817EAEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817EAEC:
- .4byte _0817EB28
- .4byte _0817EB54
- .4byte _0817EB80
- .4byte _0817EBD4
- .4byte _0817EBFE
- .4byte _0817EC26
- .4byte _0817EC4E
- .4byte _0817EC6C
- .4byte _0817EC9A
- .4byte _0817ECCC
- .4byte _0817ED54
- .4byte _0817ED82
- .4byte _0817EDC2
- .4byte _0817EE1C
- .4byte _0817EEBC
-_0817EB28:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EB40
- b _0817EEBC
-_0817EB40:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 28
- b _0817EE84
-_0817EB54:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EB6C
- b _0817EEBC
-_0817EB6C:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 26
- b _0817EE84
-_0817EB80:
- lsls r0, r3, 2
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 3
- adds r0, r1
- adds r5, r0
- ldrb r0, [r5]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- beq _0817EBB4
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r1, 0x1
- lsls r0, 2
- ldrb r3, [r5, 0x2]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817EBB4:
- ldrb r0, [r5]
- lsls r0, 26
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EBC0
- b _0817EEBC
-_0817EBC0:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r1, 0x1
- lsls r0, 2
- ldrb r3, [r5, 0x2]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817EBD4:
- lsls r0, r3, 2
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 3
- adds r0, r1
- adds r1, r5, r0
- ldrh r0, [r1]
- lsls r0, 23
- lsrs r3, r0, 29
- cmp r3, 0
- bne _0817EBEC
- b _0817EEBC
-_0817EBEC:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r3, 0x1
- lsls r0, 2
- ldrb r3, [r1, 0x2]
- lsrs r3, 6
- adds r3, r0
- b _0817EE88
-_0817EBFE:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- ldrh r0, [r3, 0x30]
- lsls r0, 23
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC12
- b _0817EEBC
-_0817EC12:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsrs r3, 6
- b _0817EE86
-_0817EC26:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC3E
- b _0817EEBC
-_0817EC3E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x33
- b _0817EE80
-_0817EC4E:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC66
- b _0817EEBC
-_0817EC66:
- movs r0, 0x1
- adds r2, r4, 0
- b _0817EE76
-_0817EC6C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- ldr r0, [r3, 0x50]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- bne _0817EC80
- b _0817EEBC
-_0817EC80:
- adds r2, r4, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
-_0817EC9A:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 29
- cmp r0, 0
- bne _0817ECB2
- b _0817EEBC
-_0817ECB2:
- adds r2, r4, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
-_0817ECCC:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x58
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- bge _0817ED14
- adds r0, r3, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsrs r0, 5
- subs r6, r0, 0x1
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- beq _0817ED14
- adds r2, r4, 0
- lsls r1, r6, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817ED14:
- movs r1, 0x1
- eors r1, r4
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r1, r5, r0
- adds r0, r1, 0
- adds r0, 0x58
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- blt _0817ED2E
- b _0817EEBC
-_0817ED2E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- adds r0, r1, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsrs r0, 5
- subs r0, 0x1
- lsls r0, 2
- adds r1, 0x55
- ldrb r3, [r1]
- lsrs r3, 6
- adds r3, r0
- b _0817EE88
- .pool
-_0817ED54:
- movs r0, 0x1
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5, r1
- adds r1, 0x56
- ldrb r0, [r1]
- lsls r0, 25
- lsrs r5, r0, 29
- cmp r5, 0
- bne _0817ED6E
- b _0817EEBC
-_0817ED6E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r5, 0x1
- lsls r0, 2
- ldrh r3, [r1]
- lsls r3, 23
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817ED82:
- lsls r2, r4, 4
- movs r1, 0x1
- adds r0, r4, 0
- eors r0, r1
- lsls r6, r0, 24
- adds r0, r5, 0
- adds r0, 0x30
- adds r4, r2, r0
- movs r5, 0x1
-_0817ED94:
- ldr r0, [r4]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817EDB8
- subs r0, 0x1
- lsls r0, 2
- ldrb r3, [r4, 0x3]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- lsrs r2, r6, 24
- bl sub_817E684
-_0817EDB8:
- adds r4, 0x8
- subs r5, 0x1
- cmp r5, 0
- bge _0817ED94
- b _0817EEBC
-_0817EDC2:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r5, r0
- adds r0, 0x58
- ldrb r3, [r0]
- lsls r0, r3, 31
- cmp r0, 0
- beq _0817EDF0
- adds r2, r4, 0
- lsls r0, r3, 26
- lsrs r0, 29
- subs r0, 0x1
- lsls r0, 2
- lsls r3, 29
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817EDF0:
- movs r0, 0x1
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5, r1
- adds r1, 0x58
- ldrb r1, [r1]
- lsls r0, r1, 31
- cmp r0, 0
- beq _0817EEBC
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r1, 26
- lsrs r0, 29
- subs r0, 0x1
- lsls r0, 2
- lsls r3, r1, 29
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817EE1C:
- cmp r7, 0x1
- bne _0817EEBC
- adds r2, r4, 0
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r5, r0
- adds r0, 0x53
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
- .pool
-_0817EE50:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x57
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 28
- cmp r0, 0x7
- bne _0817EE96
- adds r0, r3, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- beq _0817EEBC
- movs r0, 0x1
-_0817EE76:
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x54
-_0817EE80:
- ldrb r3, [r0]
- lsls r3, 30
-_0817EE84:
- lsrs r3, 30
-_0817EE86:
- adds r3, r1
-_0817EE88:
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
-_0817EE8E:
- movs r1, 0
- bl sub_817E684
- b _0817EEBC
-_0817EE96:
- adds r2, r4, 0
- ldr r1, =gBattlerPartyIndexes
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- adds r0, r6, 0
- adds r0, 0x53
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- movs r1, 0
- bl sub_817E684
-_0817EEBC:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817EA80
-
- thumb_func_start sub_817EECC
-sub_817EECC: @ 817EECC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- ldr r7, =gBattleTypeFlags
- ldr r0, [r7]
- ldr r1, =0x02000003
- ands r0, r1
- cmp r0, 0
- beq _0817EEE6
- b _0817F1FA
-_0817EEE6:
- ldr r4, =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0817EEF8
- b _0817F1FA
-_0817EEF8:
- ldr r5, =gBattleMons
- ldrb r4, [r4]
- movs r1, 0x58
- adds r6, r4, 0
- muls r6, r1
- adds r0, r6, r5
- ldrb r0, [r0, 0x1E]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x5
- bgt _0817EF10
- b _0817F1FA
-_0817EF10:
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r1
- adds r0, r5
- ldrb r0, [r0, 0x1F]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x6
- ble _0817EF24
- b _0817F1FA
-_0817EF24:
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- cmp r1, 0xED
- bne _0817EF2E
- b _0817F1FA
-_0817EF2E:
- ldr r0, =0x00000137
- cmp r1, r0
- bne _0817EF36
- b _0817F1FA
-_0817EF36:
- ldr r0, [r7]
- movs r1, 0xC8
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0817EF44
- b _0817F1FA
-_0817EF44:
- ldr r3, =gBattleMoves
- ldr r2, =gMoveSelectionCursor
- adds r0, r4, r2
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r6
- adds r1, r5, 0
- adds r1, 0xC
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x1]
- adds r6, r2, 0
- cmp r0, 0
- bne _0817EF6A
- b _0817F1FA
-_0817EF6A:
- movs r5, 0
- str r1, [sp, 0x24]
- ldr r1, =gUnknown_0860A4AC
- ldr r4, =0x0000ffff
- adds r3, r1, 0
- adds r2, r1, 0
-_0817EF76:
- ldr r0, [sp, 0x24]
- ldrh r7, [r2]
- cmp r0, r7
- beq _0817EF8A
- adds r3, 0x2
- adds r2, 0x2
- adds r5, 0x1
- ldrh r0, [r3]
- cmp r0, r4
- bne _0817EF76
-_0817EF8A:
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817EF98
- b _0817F1FA
-_0817EF98:
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 2
- mov r1, sp
- adds r1, r0
- adds r1, 0x10
- ldr r0, =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [r1]
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- str r1, [sp, 0x24]
- movs r5, 0
- add r3, sp, 0x20
- mov r10, r3
- mov r8, r0
- add r7, sp, 0x10
- ldr r4, =gBattlerTarget
- mov r9, r4
-_0817EFC2:
- lsls r1, r5, 1
- ldr r6, =gBattlerAttacker
- ldrb r0, [r6]
- movs r2, 0x58
- muls r0, r2
- adds r1, r0
- ldr r0, =gBattleMons
- adds r0, 0xC
- adds r1, r0
- ldrh r0, [r1]
- mov r3, r8
- strh r0, [r3]
- movs r6, 0
- mov r4, r10
- strh r6, [r4]
- ldrh r0, [r3]
- adds r1, r7, 0
- mov r2, r10
- bl sub_817F21C
- lsls r0, 24
- cmp r0, 0
- beq _0817F0B4
- ldr r4, =gSideStatuses
- mov r1, r9
- ldrb r0, [r1]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- movs r4, 0x58
- muls r0, r4
- ldr r6, =gBattleMons
- adds r0, r6
- mov r2, r9
- ldrb r1, [r2]
- muls r1, r4
- adds r1, r6
- mov r4, r8
- ldrh r2, [r4]
- mov r6, r10
- ldrh r4, [r6]
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r6, =gBattlerAttacker
- ldrb r4, [r6]
- str r4, [sp, 0x8]
- mov r6, r9
- ldrb r4, [r6]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- adds r3, r0, 0
- ldr r4, =gBattleMoveDamage
- str r3, [r4]
- ldr r1, =gStatuses3
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0817F06A
- ldr r2, =gBattleMoves
- mov r6, r8
- ldrh r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0817F06A
- lsls r0, r3, 1
- str r0, [r4]
-_0817F06A:
- ldr r0, =gProtectStructs
- ldr r6, =gBattlerAttacker
- ldrb r1, [r6]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 28
- cmp r0, 0
- bge _0817F08C
- ldr r4, =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0817F08C:
- mov r1, r8
- ldrh r0, [r1]
- ldrb r1, [r6]
- mov r3, r9
- ldrb r2, [r3]
- bl TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [r7]
- cmp r0, 0
- bne _0817F0B4
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0817F0B4
- movs r0, 0x1
- str r0, [r7]
-_0817F0B4:
- adds r7, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- ble _0817EFC2
- movs r5, 0
- ldr r3, =gBattlerAttacker
- ldr r6, =gMoveSelectionCursor
- ldr r4, =gBattlerPartyIndexes
- mov r8, r4
- movs r7, 0x64
- mov r9, r7
- mov r10, r6
-_0817F0CC:
- ldrb r0, [r3]
- adds r0, r6
- ldrb r2, [r0]
- cmp r5, r2
- bne _0817F0D8
- b _0817F1D4
-_0817F0D8:
- lsls r0, r5, 2
- mov r1, sp
- adds r1, r0
- adds r1, 0x10
- lsls r0, r2, 2
- add r0, sp
- adds r0, 0x10
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- ble _0817F1D4
- movs r7, 0x1
- cmp r2, 0
- beq _0817F0F6
- movs r7, 0
-_0817F0F6:
- movs r5, 0
- ldr r4, =gBattlerTarget
- ldr r6, =gEnemyParty
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- add r0, r10
- ldrb r3, [r0]
- add r2, sp, 0x10
-_0817F106:
- cmp r5, r3
- beq _0817F11A
- lsls r0, r7, 2
- add r0, sp
- adds r0, 0x10
- ldr r1, [r2]
- ldr r0, [r0]
- cmp r1, r0
- ble _0817F11A
- adds r7, r5, 0
-_0817F11A:
- adds r2, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- ble _0817F106
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, =gBattlerAttacker
- ldrb r3, [r4]
- mov r2, r10
- adds r0, r3, r2
- ldrb r2, [r0]
- movs r0, 0x58
- adds r4, r3, 0
- muls r4, r0
- ldr r5, =gBattleMons + 0xC
- adds r3, r4, r5
- lsls r0, r7, 1
- adds r0, r4
- adds r0, r5
- ldrh r0, [r0]
- str r0, [sp]
- adds r0, r6, 0
- bl sub_80EE35C
- b _0817F1DC
- .pool
-_0817F1D4:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _0817F1DC
- b _0817F0CC
-_0817F1DC:
- ldr r2, =gBattleMoveDamage
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- add r0, sp
- adds r0, 0x10
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, =gCurrentMove
- mov r3, sp
- ldrh r3, [r3, 0x24]
- strh r3, [r0]
-_0817F1FA:
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817EECC
-
- thumb_func_start sub_817F21C
-sub_817F21C: @ 817F21C
- push {r4-r7,lr}
- adds r6, r1, 0
- mov r12, r2
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, =gBattleMoves
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0817F286
- movs r4, 0
- ldr r5, =gUnknown_0860A4AC
- ldr r7, =0x0000ffff
- adds r3, r5, 0
- adds r1, r5, 0
-_0817F240:
- ldrh r0, [r1]
- cmp r2, r0
- beq _0817F252
- adds r3, 0x2
- adds r1, 0x2
- adds r4, 0x1
- ldrh r0, [r3]
- cmp r0, r7
- bne _0817F240
-_0817F252:
- lsls r0, r4, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817F270
- movs r0, 0
- str r0, [r6]
- b _0817F2A0
- .pool
-_0817F270:
- cmp r2, 0x95
- bne _0817F294
- ldr r2, =gBattleMons
- ldr r0, =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r0, [r0]
- asrs r0, 1
-_0817F286:
- str r0, [r6]
- movs r0, 0
- b _0817F2A0
- .pool
-_0817F294:
- cmp r2, 0xDE
- bne _0817F29E
- movs r0, 0xA
- mov r1, r12
- strh r0, [r1]
-_0817F29E:
- movs r0, 0x1
-_0817F2A0:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_817F21C
-
- thumb_func_start sub_817F2A8
-sub_817F2A8: @ 817F2A8
- push {r4,r5,lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817F324
- ldr r0, =gBattleStruct
- ldr r3, [r0]
- ldr r0, =0x0000025b
- adds r4, r3, r0
- ldrb r2, [r4]
- subs r1, 0x21
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldr r0, =0x00000267
- adds r2, r3, r0
- ldrb r0, [r2]
- ands r1, r0
- strb r1, [r2]
- ldrb r5, [r4]
- movs r1, 0x1F
- adds r0, r1, 0
- ands r0, r5
- strb r0, [r4]
- ldrb r0, [r2]
- ands r1, r0
- strb r1, [r2]
- movs r0, 0x97
- lsls r0, 2
- adds r4, r3, r0
- ldrb r2, [r4]
- movs r1, 0x39
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- movs r0, 0x9A
- lsls r0, 2
- adds r3, r0
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
- ldrb r2, [r4]
- movs r1, 0x7
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
- ldrb r2, [r4]
- movs r1, 0x2
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
-_0817F324:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817F2A8
-
- thumb_func_start GetBattlerMoveSlotId
-GetBattlerMoveSlotId: @ 817F33C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- ldr r6, =gEnemyParty
- cmp r0, 0
- bne _0817F356
- ldr r6, =gPlayerParty
-_0817F356:
- movs r4, 0
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r5, 1
- adds r5, r0, r1
- b _0817F36E
- .pool
-_0817F36C:
- adds r4, 0x1
-_0817F36E:
- cmp r4, 0x3
- bgt _0817F388
- ldrh r1, [r5]
- movs r0, 0x64
- muls r0, r1
- adds r0, r6, r0
- adds r1, r4, 0
- adds r1, 0xD
- movs r2, 0
- bl GetMonData
- cmp r0, r7
- bne _0817F36C
-_0817F388:
- lsls r0, r4, 24
- lsrs r0, 24
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetBattlerMoveSlotId
-
- thumb_func_start sub_817F394
-sub_817F394: @ 817F394
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- adds r4, r3, 0
- lsls r1, 16
- lsrs r1, 16
- adds r6, r1, 0
- lsls r2, 24
- lsrs r2, 24
- adds r5, r2, 0
- movs r0, 0x7
- ands r0, r3
- cmp r0, 0
- beq _0817F3B4
- movs r0, 0x3
- b _0817F3CA
-_0817F3B4:
- movs r0, 0x60
- ands r0, r3
- cmp r0, 0
- beq _0817F3C0
- movs r0, 0x4
- b _0817F3CA
-_0817F3C0:
- movs r0, 0x18
- ands r0, r3
- cmp r0, 0
- beq _0817F3D2
- movs r0, 0x5
-_0817F3CA:
- movs r3, 0
- bl sub_817E684
- b _0817F3E6
-_0817F3D2:
- movs r0, 0x80
- ands r4, r0
- cmp r4, 0
- beq _0817F3E6
- movs r0, 0x6
- adds r1, r6, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
-_0817F3E6:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_817F394
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index eb89d4d79..6cee2dc0a 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -3134,7 +3134,7 @@ _081639FC:
bl __umodsi3
cmp r0, 0
bne _08163A78
- bl sub_81DA57C
+ bl UpdateGymLeaderRematch
b _08163A78
.pool
_08163A2C:
diff --git a/asm/blit.s b/asm/blit.s
deleted file mode 100644
index 5df45e77e..000000000
--- a/asm/blit.s
+++ /dev/null
@@ -1,823 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BlitBitmapRect4BitWithoutColorKey
-@ void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height)
-BlitBitmapRect4BitWithoutColorKey: @ 8002BDC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- ldr r4, [sp, 0x2C]
- ldr r5, [sp, 0x30]
- ldr r6, [sp, 0x34]
- ldr r7, [sp, 0x38]
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- lsls r7, 16
- lsrs r7, 16
- str r4, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- str r7, [sp, 0xC]
- movs r4, 0xFF
- str r4, [sp, 0x10]
- bl BlitBitmapRect4Bit
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4BitWithoutColorKey
-
- thumb_func_start BlitBitmapRect4Bit
-@ void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey)
-BlitBitmapRect4Bit: @ 8002C20
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, [sp, 0x4C]
- ldr r1, [sp, 0x50]
- ldr r4, [sp, 0x54]
- ldr r5, [sp, 0x58]
- ldr r6, [sp, 0x5C]
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x8]
- lsls r3, 16
- lsrs r7, r3, 16
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- str r6, [sp, 0x10]
- ldr r0, [sp, 0x4]
- ldrh r3, [r0, 0x4]
- ldr r1, [sp, 0xC]
- subs r0, r3, r1
- adds r2, r4
- mov r8, r2
- cmp r0, r4
- bge _08002C74
- ldr r2, [sp, 0x8]
- adds r0, r2
- mov r8, r0
-_08002C74:
- ldr r4, [sp, 0x4]
- ldrh r0, [r4, 0x6]
- mov r1, r9
- subs r0, r1
- adds r2, r5, r7
- str r2, [sp, 0x14]
- cmp r0, r5
- bge _08002C88
- adds r0, r7
- str r0, [sp, 0x14]
-_08002C88:
- ldr r4, [sp]
- ldrh r1, [r4, 0x4]
- movs r2, 0x7
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x18]
- adds r0, r3, 0
- ands r0, r2
- adds r0, r3, r0
- asrs r0, 3
- str r0, [sp, 0x1C]
- ldr r0, [sp, 0x10]
- cmp r0, 0xFF
- bne _08002D46
- adds r3, r7, 0
- mov r1, r9
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002CB4
- b _08002DEE
-_08002CB4:
- ldr r5, [sp, 0x8]
- ldr r6, [sp, 0xC]
- adds r4, r3, 0x1
- str r4, [sp, 0x24]
- adds r0, r1, 0x1
- str r0, [sp, 0x28]
- cmp r5, r8
- bge _08002D3A
- movs r7, 0x3
- asrs r0, r3, 3
- ldr r2, [sp, 0x18]
- muls r0, r2
- lsls r0, 5
- mov r10, r0
- lsls r0, r3, 29
- lsrs r0, 27
- mov r9, r0
- asrs r0, r1, 3
- ldr r4, [sp, 0x1C]
- muls r0, r4
- lsls r0, 5
- mov r12, r0
- lsls r0, r1, 29
- lsrs r3, r0, 27
-_08002CE4:
- asrs r0, r5, 1
- ands r0, r7
- ldr r2, [sp]
- ldr r1, [r2]
- adds r1, r0
- asrs r0, r5, 3
- lsls r0, 5
- adds r1, r0
- add r1, r10
- mov r4, r9
- adds r2, r1, r4
- asrs r0, r6, 1
- ands r0, r7
- ldr r4, [sp, 0x4]
- ldr r1, [r4]
- adds r1, r0
- asrs r0, r6, 3
- lsls r0, 5
- adds r1, r0
- add r1, r12
- adds r4, r1, r3
- ldrb r2, [r2]
- adds r0, r5, 0
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- asrs r2, r0
- movs r0, 0xF
- ands r2, r0
- adds r0, r6, 0
- ands r0, r1
- lsls r1, r0, 2
- lsls r2, r1
- movs r0, 0xF0
- asrs r0, r1
- ldrb r1, [r4]
- ands r0, r1
- orrs r2, r0
- strb r2, [r4]
- adds r5, 0x1
- adds r6, 0x1
- cmp r5, r8
- blt _08002CE4
-_08002D3A:
- ldr r3, [sp, 0x24]
- ldr r1, [sp, 0x28]
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002CB4
- b _08002DEE
-_08002D46:
- adds r3, r7, 0
- mov r1, r9
- ldr r4, [sp, 0x14]
- cmp r3, r4
- bge _08002DEE
-_08002D50:
- ldr r5, [sp, 0x8]
- ldr r6, [sp, 0xC]
- adds r0, r3, 0x1
- str r0, [sp, 0x24]
- adds r2, r1, 0x1
- str r2, [sp, 0x28]
- cmp r5, r8
- bge _08002DE4
- movs r4, 0x3
- mov r9, r4
- asrs r0, r3, 3
- ldr r2, [sp, 0x18]
- muls r0, r2
- lsls r0, 5
- str r0, [sp, 0x20]
- lsls r0, r3, 29
- lsrs r0, 27
- mov r10, r0
- movs r3, 0x1
- asrs r0, r1, 3
- ldr r4, [sp, 0x1C]
- muls r0, r4
- lsls r0, 5
- mov r12, r0
- lsls r0, r1, 29
- lsrs r7, r0, 27
-_08002D84:
- asrs r0, r5, 1
- mov r1, r9
- ands r0, r1
- ldr r2, [sp]
- ldr r1, [r2]
- adds r1, r0
- asrs r0, r5, 3
- lsls r0, 5
- adds r1, r0
- ldr r4, [sp, 0x20]
- adds r1, r4
- mov r0, r10
- adds r2, r1, r0
- asrs r0, r6, 1
- mov r1, r9
- ands r0, r1
- ldr r4, [sp, 0x4]
- ldr r1, [r4]
- adds r1, r0
- asrs r0, r6, 3
- lsls r0, 5
- adds r1, r0
- add r1, r12
- adds r4, r1, r7
- ldrb r2, [r2]
- adds r0, r5, 0
- ands r0, r3
- lsls r0, 2
- asrs r2, r0
- movs r0, 0xF
- ands r2, r0
- ldr r0, [sp, 0x10]
- cmp r2, r0
- beq _08002DDC
- adds r0, r6, 0
- ands r0, r3
- lsls r1, r0, 2
- lsls r2, r1
- movs r0, 0xF0
- asrs r0, r1
- ldrb r1, [r4]
- ands r0, r1
- orrs r2, r0
- strb r2, [r4]
-_08002DDC:
- adds r5, 0x1
- adds r6, 0x1
- cmp r5, r8
- blt _08002D84
-_08002DE4:
- ldr r3, [sp, 0x24]
- ldr r1, [sp, 0x28]
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002D50
-_08002DEE:
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4Bit
-
- thumb_func_start FillBitmapRect4Bit
-@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-FillBitmapRect4Bit: @ 8002E00
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- ldr r0, [sp, 0x28]
- ldr r4, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- lsls r2, 16
- lsrs r2, 16
- adds r6, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r5, r4, 24
- adds r4, r1, r3
- mov r3, r9
- ldrh r1, [r3, 0x4]
- cmp r4, r1
- ble _08002E36
- adds r4, r1, 0
-_08002E36:
- adds r2, r0
- mov r12, r2
- mov r2, r9
- ldrh r0, [r2, 0x6]
- cmp r12, r0
- ble _08002E44
- mov r12, r0
-_08002E44:
- movs r0, 0x7
- ands r0, r1
- adds r0, r1, r0
- asrs r0, 3
- str r0, [sp, 0x4]
- lsls r0, r5, 28
- lsrs r0, 24
- mov r8, r0
- movs r3, 0xF
- mov r10, r3
- mov r0, r10
- ands r0, r5
- mov r10, r0
- adds r1, r6, 0
- cmp r1, r12
- bge _08002EB6
-_08002E64:
- ldr r3, [sp]
- adds r7, r1, 0x1
- cmp r3, r4
- bge _08002EB0
- asrs r0, r1, 3
- ldr r2, [sp, 0x4]
- muls r0, r2
- lsls r6, r0, 5
- lsls r0, r1, 29
- lsrs r5, r0, 27
-_08002E78:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- mov r0, r9
- ldr r1, [r0]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- adds r1, r6
- adds r2, r1, r5
- lsls r0, r3, 31
- cmp r0, 0
- beq _08002E9E
- ldrb r1, [r2]
- movs r0, 0xF
- ands r0, r1
- mov r1, r8
- b _08002EA6
-_08002E9E:
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- mov r1, r10
-_08002EA6:
- orrs r0, r1
- strb r0, [r2]
- adds r3, 0x1
- cmp r3, r4
- blt _08002E78
-_08002EB0:
- adds r1, r7, 0
- cmp r1, r12
- blt _08002E64
-_08002EB6:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FillBitmapRect4Bit
-
- thumb_func_start BlitBitmapRect4BitTo8Bit
-@ void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
-BlitBitmapRect4BitTo8Bit: @ 8002EC8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x3C
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, [sp, 0x5C]
- ldr r1, [sp, 0x60]
- ldr r5, [sp, 0x64]
- ldr r4, [sp, 0x68]
- ldr r6, [sp, 0x6C]
- ldr r7, [sp, 0x70]
- mov r8, r7
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x8]
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r6, 24
- lsrs r6, 24
- str r6, [sp, 0x10]
- mov r0, r8
- lsls r0, 28
- lsrs r0, 24
- str r0, [sp, 0x14]
- lsls r0, r6, 28
- lsrs r0, 24
- str r0, [sp, 0x28]
- ldr r1, [sp, 0x4]
- ldrh r0, [r1, 0x4]
- ldr r2, [sp, 0xC]
- subs r0, r2
- ldr r1, [sp, 0x8]
- adds r1, r5, r1
- str r1, [sp, 0x18]
- cmp r0, r5
- bge _08002F2E
- ldr r2, [sp, 0x8]
- adds r0, r2
- str r0, [sp, 0x18]
-_08002F2E:
- ldr r5, [sp, 0x4]
- ldrh r1, [r5, 0x6]
- subs r0, r1, r7
- cmp r0, r4
- bge _08002F40
- adds r0, r3, r1
- subs r0, r7
- str r0, [sp, 0x1C]
- b _08002F44
-_08002F40:
- adds r4, r3, r4
- str r4, [sp, 0x1C]
-_08002F44:
- ldr r0, [sp]
- ldrh r1, [r0, 0x4]
- movs r2, 0x7
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x20]
- ldr r5, [sp, 0x4]
- ldrh r1, [r5, 0x4]
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x24]
- ldr r0, [sp, 0x10]
- cmp r0, 0xFF
- bne _08003024
- adds r2, r3, 0
- adds r5, r7, 0
- ldr r1, [sp, 0x1C]
- cmp r2, r1
- blt _08002F74
- b _08003106
-_08002F74:
- ldr r3, [sp, 0x8]
- lsrs r3, 1
- str r3, [sp, 0x2C]
- movs r0, 0x3
- ands r3, r0
- str r3, [sp, 0x2C]
- ldr r7, [sp, 0x8]
- lsrs r0, r7, 3
- lsls r0, 5
- str r0, [sp, 0x30]
-_08002F88:
- ldr r0, [sp]
- ldr r1, [r0]
- ldr r3, [sp, 0x2C]
- adds r1, r3
- ldr r7, [sp, 0x30]
- adds r1, r7
- asrs r0, r2, 3
- ldr r3, [sp, 0x20]
- muls r0, r3
- lsls r0, 5
- mov r8, r0
- add r1, r8
- lsls r0, r2, 29
- lsrs r7, r0, 27
- adds r6, r1, r7
- ldr r3, [sp, 0x8]
- ldr r4, [sp, 0xC]
- adds r2, 0x1
- mov r10, r2
- adds r0, r5, 0x1
- str r0, [sp, 0x38]
- ldr r1, [sp, 0x18]
- cmp r3, r1
- bge _08003018
- asrs r0, r5, 3
- ldr r2, [sp, 0x24]
- muls r0, r2
- lsls r0, 6
- mov r12, r0
- lsls r0, r5, 29
- lsrs r0, 26
- mov r9, r0
-_08002FC8:
- movs r0, 0x7
- ands r0, r4
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r12
- mov r0, r9
- adds r5, r1, r0
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08002FEC
- ldrb r0, [r6]
- lsrs r0, 4
- b _08003008
-_08002FEC:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- ldr r0, [sp]
- ldr r1, [r0]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- add r1, r8
- adds r6, r1, r7
- ldrb r1, [r6]
- movs r0, 0xF
- ands r0, r1
-_08003008:
- ldr r1, [sp, 0x14]
- adds r0, r1, r0
- strb r0, [r5]
- adds r3, 0x1
- adds r4, 0x1
- ldr r2, [sp, 0x18]
- cmp r3, r2
- blt _08002FC8
-_08003018:
- mov r2, r10
- ldr r5, [sp, 0x38]
- ldr r3, [sp, 0x1C]
- cmp r2, r3
- blt _08002F88
- b _08003106
-_08003024:
- adds r2, r3, 0
- adds r5, r7, 0
- ldr r7, [sp, 0x1C]
- cmp r2, r7
- bge _08003106
- ldr r0, [sp, 0x8]
- lsrs r0, 1
- str r0, [sp, 0x34]
- movs r0, 0x3
- ldr r1, [sp, 0x34]
- ands r1, r0
- str r1, [sp, 0x34]
-_0800303C:
- ldr r3, [sp]
- ldr r1, [r3]
- ldr r7, [sp, 0x34]
- adds r1, r7
- ldr r3, [sp, 0x8]
- lsrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- asrs r0, r2, 3
- ldr r7, [sp, 0x20]
- muls r0, r7
- lsls r0, 5
- mov r8, r0
- add r1, r8
- lsls r0, r2, 29
- lsrs r7, r0, 27
- adds r6, r1, r7
- ldr r4, [sp, 0xC]
- adds r2, 0x1
- mov r10, r2
- adds r0, r5, 0x1
- str r0, [sp, 0x38]
- ldr r1, [sp, 0x18]
- cmp r3, r1
- bge _080030FC
- asrs r0, r5, 3
- ldr r2, [sp, 0x24]
- muls r0, r2
- lsls r0, 6
- mov r9, r0
- lsls r0, r5, 29
- lsrs r0, 26
- mov r12, r0
-_0800307E:
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _080030B2
- ldrb r2, [r6]
- movs r0, 0xF0
- ands r0, r2
- ldr r5, [sp, 0x28]
- cmp r0, r5
- beq _080030F2
- adds r0, r4, 0
- movs r1, 0x7
- ands r0, r1
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r9
- mov r0, r12
- adds r5, r1, r0
- lsrs r0, r2, 4
- ldr r1, [sp, 0x14]
- adds r0, r1, r0
- b _080030F0
-_080030B2:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- ldr r5, [sp]
- ldr r1, [r5]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- add r1, r8
- adds r6, r1, r7
- ldrb r0, [r6]
- movs r2, 0xF
- ands r2, r0
- ldr r0, [sp, 0x10]
- cmp r2, r0
- beq _080030F2
- adds r0, r4, 0
- movs r1, 0x7
- ands r0, r1
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r9
- mov r0, r12
- adds r5, r1, r0
- ldr r1, [sp, 0x14]
- adds r0, r1, r2
-_080030F0:
- strb r0, [r5]
-_080030F2:
- adds r3, 0x1
- adds r4, 0x1
- ldr r2, [sp, 0x18]
- cmp r3, r2
- blt _0800307E
-_080030FC:
- mov r2, r10
- ldr r5, [sp, 0x38]
- ldr r3, [sp, 0x1C]
- cmp r2, r3
- blt _0800303C
-_08003106:
- add sp, 0x3C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4BitTo8Bit
-
- thumb_func_start FillBitmapRect8Bit
-@ void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-FillBitmapRect8Bit: @ 8003118
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r8, r0
- ldr r0, [sp, 0x28]
- ldr r4, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 16
- lsrs r2, 16
- adds r6, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r4, 24
- mov r9, r4
- adds r5, r1, r3
- mov r3, r8
- ldrh r1, [r3, 0x4]
- cmp r5, r1
- ble _08003150
- adds r5, r1, 0
-_08003150:
- adds r7, r2, r0
- mov r2, r8
- ldrh r0, [r2, 0x6]
- cmp r7, r0
- ble _0800315C
- adds r7, r0, 0
-_0800315C:
- movs r0, 0x7
- ands r0, r1
- adds r0, r1, r0
- asrs r0, 3
- str r0, [sp]
- adds r1, r6, 0
- cmp r1, r7
- bge _080031AC
-_0800316C:
- mov r3, r10
- adds r6, r1, 0x1
- str r6, [sp, 0x4]
- cmp r3, r5
- bge _080031A6
- movs r0, 0x7
- mov r12, r0
- asrs r0, r1, 3
- ldr r2, [sp]
- muls r0, r2
- lsls r4, r0, 6
- lsls r0, r1, 29
- lsrs r2, r0, 26
-_08003186:
- adds r0, r3, 0
- mov r6, r12
- ands r0, r6
- mov r6, r8
- ldr r1, [r6]
- adds r1, r0
- asrs r0, r3, 3
- lsls r0, 6
- adds r1, r0
- adds r1, r4
- adds r1, r2
- mov r0, r9
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, r5
- blt _08003186
-_080031A6:
- ldr r1, [sp, 0x4]
- cmp r1, r7
- blt _0800316C
-_080031AC:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FillBitmapRect8Bit
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_specials.s b/asm/field_specials.s
index 29c6dc800..7e3185556 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -3388,7 +3388,7 @@ _0813980C:
_0813981C:
ldrh r5, [r2]
adds r0, r5, 0
- bl sub_80EF370
+ bl CountDigits
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -3408,7 +3408,7 @@ _0813983C:
adds r4, 0x4
ldrh r5, [r2]
adds r0, r5, 0
- bl sub_80EF370
+ bl CountDigits
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -4894,7 +4894,7 @@ sub_813A46C: @ 813A46C
lsrs r0, 24
mov r1, sp
movs r2, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldr r1, =gUnknown_0203AB68
mov r0, sp
ldrh r0, [r0]
@@ -4903,7 +4903,7 @@ sub_813A46C: @ 813A46C
lsls r0, 24
lsrs r0, 24
mov r1, sp
- bl sub_81AE838
+ bl ListMenuGetCurrentItemArrayId
ldrh r0, [r4, 0x1E]
ldr r5, =gUnknown_0203AB6A
ldrh r1, [r5]
@@ -5007,7 +5007,7 @@ sub_813A570: @ 813A570
lsls r0, 24
lsrs r0, 24
mov r1, sp
- bl sub_81AE838
+ bl ListMenuGetCurrentItemArrayId
ldrh r0, [r4, 0x1E]
mov r1, sp
ldrh r1, [r1]
@@ -5019,7 +5019,7 @@ sub_813A570: @ 813A570
lsrs r0, 24
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldr r0, =gUnknown_0203AB64
ldr r0, [r0]
bl Free
@@ -6012,7 +6012,7 @@ sub_813ADD4: @ 813ADD4
adds r4, 0x16
add r1, sp, 0x14
adds r2, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldrh r0, [r6, 0x22]
lsls r0, 24
lsrs r0, 24
@@ -6173,7 +6173,7 @@ sub_813AF48: @ 813AF48
lsrs r0, 24
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldr r0, =gUnknown_0203AB64
ldr r0, [r0]
bl Free
diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s
deleted file mode 100644
index e7e605abe..000000000
--- a/asm/fldeff_flash.s
+++ /dev/null
@@ -1,709 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetUpFieldMove_Flash
-SetUpFieldMove_Flash: @ 81370FC
- push {r4,lr}
- bl ShouldDoBrailleFlyEffect
- lsls r0, 24
- cmp r0, 0
- beq _08137134
- ldr r4, =gSpecialVar_Result
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =sub_8179918
- b _08137152
- .pool
-_08137134:
- ldr r0, =gMapHeader
- ldrb r0, [r0, 0x15]
- cmp r0, 0x1
- bne _08137170
- ldr r0, =0x00000888
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _08137170
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =hm2_flash
-_08137152:
- str r0, [r1]
- movs r0, 0x1
- b _08137172
- .pool
-_08137170:
- movs r0, 0
-_08137172:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end SetUpFieldMove_Flash
-
- thumb_func_start hm2_flash
-hm2_flash: @ 8137178
- push {r4,lr}
- bl oei_task_add
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r2, =sub_81371B4
- lsrs r1, r2, 16
- strh r1, [r0, 0x18]
- strh r2, [r0, 0x1A]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end hm2_flash
-
- thumb_func_start sub_81371B4
-sub_81371B4: @ 81371B4
- push {lr}
- movs r0, 0xCF
- bl PlaySE
- ldr r0, =0x00000888
- bl FlagSet
- ldr r0, =EventScript_2926F8
- bl ScriptContext1_SetupScript
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81371B4
-
- thumb_func_start sub_81371D4
-sub_81371D4: @ 81371D4
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_81371D4
-
- thumb_func_start sub_81371EC
-sub_81371EC: @ 81371EC
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_81371EC
-
- thumb_func_start c2_change_map
-c2_change_map: @ 8137200
- push {r4,lr}
- sub sp, 0x8
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, =0x040000d4
- mov r0, sp
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r4, 0
- str r4, [sp, 0x4]
- add r0, sp, 0x4
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r0, sp
- strh r4, [r0]
- str r0, [r1]
- ldr r0, =0x05000002
- str r0, [r1, 0x4]
- ldr r0, =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ResetPaletteFade
- bl ResetTasks
- bl ResetSpriteData
- ldr r3, =0x04000208
- ldrh r2, [r3]
- strh r4, [r3]
- ldr r4, =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r0, =sub_81371EC
- bl SetVBlankCallback
- ldr r0, =sub_81371D4
- bl SetMainCallback2
- bl sub_8137304
- lsls r0, 24
- cmp r0, 0
- bne _081372D2
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_081372D2:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_change_map
-
- thumb_func_start sub_8137304
-sub_8137304: @ 8137304
- push {r4-r7,lr}
- bl get_map_light_from_warp0
- lsls r0, 24
- lsrs r6, r0, 24
- bl Overworld_GetMapTypeOfSaveblockLocation
- lsls r0, 24
- lsrs r5, r0, 24
- movs r3, 0
- ldr r4, =gUnknown_085B27C8
- ldrb r0, [r4]
- cmp r0, 0
- beq _08137358
- adds r7, r4, 0
- adds r0, r4, 0x4
- mov r12, r0
-_08137326:
- lsls r2, r3, 3
- adds r1, r2, r7
- ldrb r0, [r1]
- cmp r0, r6
- bne _08137348
- ldrb r0, [r1, 0x1]
- cmp r0, r5
- bne _08137348
- mov r1, r12
- adds r0, r2, r1
- ldr r0, [r0]
- bl _call_via_r0
- movs r0, 0x1
- b _0813735A
- .pool
-_08137348:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08137326
-_08137358:
- movs r0, 0
-_0813735A:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8137304
-
- thumb_func_start sub_8137360
-sub_8137360: @ 8137360
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r0, 24
- lsrs r4, r1, 24
- movs r3, 0
- ldr r1, =gUnknown_085B27C8
- ldrb r0, [r1]
- cmp r0, 0
- beq _081373A0
- adds r6, r1, 0
-_08137376:
- lsls r0, r3, 3
- adds r2, r0, r6
- ldrb r0, [r2]
- cmp r0, r5
- bne _08137390
- ldrb r0, [r2, 0x1]
- cmp r0, r4
- bne _08137390
- ldrb r0, [r2, 0x2]
- b _081373A2
- .pool
-_08137390:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08137376
-_081373A0:
- movs r0, 0
-_081373A2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8137360
-
- thumb_func_start fade_type_for_given_maplight_pair
-fade_type_for_given_maplight_pair: @ 81373A8
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r0, 24
- lsrs r4, r1, 24
- movs r3, 0
- ldr r1, =gUnknown_085B27C8
- ldrb r0, [r1]
- cmp r0, 0
- beq _081373E8
- adds r6, r1, 0
-_081373BE:
- lsls r0, r3, 3
- adds r2, r0, r6
- ldrb r0, [r2]
- cmp r0, r5
- bne _081373D8
- ldrb r0, [r2, 0x1]
- cmp r0, r4
- bne _081373D8
- ldrb r0, [r2, 0x3]
- b _081373EA
- .pool
-_081373D8:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081373BE
-_081373E8:
- movs r0, 0
-_081373EA:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end fade_type_for_given_maplight_pair
-
- thumb_func_start sub_81373F0
-sub_81373F0: @ 81373F0
- push {lr}
- ldr r0, =sub_8137404
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81373F0
-
- thumb_func_start sub_8137404
-sub_8137404: @ 8137404
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =sub_8137420
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8137404
-
- thumb_func_start sub_8137420
-sub_8137420: @ 8137420
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gCaveTransitionTiles
- ldr r1, =0x0600c000
- bl LZ77UnCompVram
- ldr r0, =gCaveTransitionTilemap
- ldr r1, =0x0600f800
- bl LZ77UnCompVram
- ldr r0, =gCaveTransitionPalette_White
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085B28A0
- movs r1, 0xE0
- movs r2, 0x10
- bl LoadPalette
- ldr r1, =0x00003e41
- movs r0, 0x50
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r1, =0x00001f0c
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x8A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_81374C4
- str r1, [r0]
- movs r2, 0
- movs r1, 0x10
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8137420
-
- thumb_func_start sub_81374C4
-sub_81374C4: @ 81374C4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r4, [r5, 0xA]
- movs r0, 0x80
- lsls r0, 5
- adds r1, r4, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- cmp r4, 0x10
- bhi _081374F8
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _08137500
- .pool
-_081374F8:
- movs r0, 0
- strh r0, [r5, 0xC]
- ldr r0, =sub_813750C
- str r0, [r5]
-_08137500:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81374C4
-
- thumb_func_start sub_813750C
-sub_813750C: @ 813750C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =0x00001010
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r1
- ldrh r1, [r4, 0xC]
- cmp r1, 0x7
- bhi _08137554
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 1
- ldr r0, =gUnknown_085B28A0
- adds r0, r1, r0
- movs r2, 0x10
- subs r2, r1
- lsls r2, 16
- lsrs r2, 16
- movs r1, 0xE0
- bl LoadPalette
- b _08137566
- .pool
-_08137554:
- ldr r0, =gCaveTransitionPalette_White
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =sub_8137574
- str r0, [r4]
- movs r0, 0x8
- strh r0, [r4, 0xC]
-_08137566:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813750C
-
- thumb_func_start sub_8137574
-sub_8137574: @ 8137574
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r2, [r1, 0xC]
- movs r3, 0xC
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08137598
- subs r0, r2, 0x1
- strh r0, [r1, 0xC]
- b _081375A0
- .pool
-_08137598:
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_081375A0:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8137574
-
- thumb_func_start sub_81375A8
-sub_81375A8: @ 81375A8
- push {lr}
- ldr r0, =sub_81375BC
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81375A8
-
- thumb_func_start sub_81375BC
-sub_81375BC: @ 81375BC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =sub_81375D8
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81375BC
-
- thumb_func_start sub_81375D8
-sub_81375D8: @ 81375D8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gCaveTransitionTiles
- ldr r1, =0x0600c000
- bl LZ77UnCompVram
- ldr r0, =gCaveTransitionTilemap
- ldr r1, =0x0600f800
- bl LZ77UnCompVram
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r1, =0x00001f0c
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x8A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, =gCaveTransitionPalette_White
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gCaveTransitionPalette_Black
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_8137678
- str r1, [r0]
- movs r2, 0
- movs r1, 0x10
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- strh r2, [r0, 0xC]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81375D8
-
- thumb_func_start sub_8137678
-sub_8137678: @ 8137678
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r1, [r4, 0xC]
- cmp r1, 0xF
- bhi _081376B4
- adds r2, r1, 0x1
- adds r0, r2, 0x1
- strh r0, [r4, 0xC]
- movs r0, 0xF
- subs r0, r1
- lsls r0, 1
- ldr r1, =gUnknown_085B2890
- adds r0, r1
- lsls r2, 17
- lsrs r2, 16
- movs r1, 0xE0
- bl LoadPalette
- b _081376C8
- .pool
-_081376B4:
- ldr r1, =0x00001010
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, =0x00003e41
- movs r0, 0x50
- bl SetGpuReg
- ldr r0, =sub_81376DC
- str r0, [r4]
-_081376C8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8137678
-
- thumb_func_start sub_81376DC
-sub_81376DC: @ 81376DC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r0, [r5, 0xA]
- movs r1, 0x10
- subs r1, r0
- lsls r1, 16
- lsrs r4, r1, 16
- movs r0, 0x80
- lsls r0, 21
- adds r1, r0
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- cmp r4, 0
- beq _08137714
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _08137726
- .pool
-_08137714:
- ldr r0, =gCaveTransitionPalette_Black
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_08137726:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81376DC
diff --git a/asm/fldeff_groundshake.s b/asm/fldeff_groundshake.s
deleted file mode 100644
index 81d92430e..000000000
--- a/asm/fldeff_groundshake.s
+++ /dev/null
@@ -1,596 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81BE66C
-sub_81BE66C: @ 81BE66C
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xD0
- lsls r0, 5
- cmp r1, r0
- bne _081BE690
- movs r0, 0xA7
- lsls r0, 1
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- b _081BE692
- .pool
-_081BE690:
- movs r0, 0
-_081BE692:
- pop {r1}
- bx r1
- thumb_func_end sub_81BE66C
-
- thumb_func_start sub_81BE698
-sub_81BE698: @ 81BE698
- push {lr}
- ldr r0, =gUnknown_0203CF18
- ldr r0, [r0]
- adds r0, 0x4
- bl sub_8151E50
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE698
-
- thumb_func_start sub_81BE6AC
-sub_81BE6AC: @ 81BE6AC
- ldr r1, =gUnknown_0203CF18
- movs r0, 0
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81BE6AC
-
- thumb_func_start sub_81BE6B8
-sub_81BE6B8: @ 81BE6B8
- push {r4,lr}
- ldr r4, =gUnknown_0203CF18
- ldr r0, [r4]
- cmp r0, 0
- beq _081BE6CC
- movs r0, 0
- str r0, [r4]
- b _081BE718
- .pool
-_081BE6CC:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xD0
- lsls r0, 5
- cmp r1, r0
- bne _081BE718
- movs r0, 0xA7
- lsls r0, 1
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081BE718
- movs r0, 0xC8
- bl AllocZeroed
- str r0, [r4]
- adds r0, 0x4
- bl sub_8151B3C
- ldr r0, [r4]
- adds r0, 0x4
- ldr r1, =gUnknown_08617E18
- bl sub_8151B68
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0x1
- movs r2, 0x1
- bl sub_8151CA8
- ldr r0, =sub_81BE698
- movs r1, 0xFF
- bl CreateTask
- ldr r1, [r4]
- strb r0, [r1]
-_081BE718:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE6B8
-
- thumb_func_start sub_81BE72C
-sub_81BE72C: @ 81BE72C
- push {r4,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xD0
- lsls r0, 5
- cmp r1, r0
- bne _081BE788
- movs r0, 0xA7
- lsls r0, 1
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081BE788
- ldr r4, =gUnknown_0203CF18
- ldr r0, [r4]
- cmp r0, 0
- beq _081BE788
- ldr r0, =sub_81BE698
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- beq _081BE766
- ldr r0, [r4]
- ldrb r0, [r0]
- bl DestroyTask
-_081BE766:
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0x1
- movs r2, 0x1
- bl sub_8151D28
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0x1
- movs r2, 0x1
- bl sub_8151C50
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
-_081BE788:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE72C
-
- thumb_func_start sub_81BE79C
-sub_81BE79C: @ 81BE79C
- push {r4,lr}
- ldr r0, =0x000040cb
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- beq _081BE7B8
- movs r0, 0xA7
- lsls r0, 1
- bl FlagClear
- b _081BE7EE
- .pool
-_081BE7B8:
- bl Random
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x1
- ands r4, r0
- movs r0, 0x9D
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081BE7D4
- movs r4, 0x1
-_081BE7D4:
- cmp r4, 0
- beq _081BE7E6
- movs r0, 0xA7
- lsls r0, 1
- bl FlagSet
- bl sub_81BE6B8
- b _081BE7EE
-_081BE7E6:
- movs r0, 0xA7
- lsls r0, 1
- bl FlagClear
-_081BE7EE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81BE79C
-
- thumb_func_start sub_81BE7F4
-sub_81BE7F4: @ 81BE7F4
- push {lr}
- ldr r0, =sub_81BE808
- movs r1, 0x8
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE7F4
-
- thumb_func_start sub_81BE808
-sub_81BE808: @ 81BE808
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- movs r0, 0x2D
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- mov r0, sp
- ldrb r0, [r0]
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- ldr r4, =gMapObjects
- adds r2, r4
- ldr r3, =gSprites
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x26]
- adds r1, 0x4
- strh r1, [r0, 0x26]
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r2, 0x4]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- movs r4, 0x22
- ldrsh r2, [r0, r4]
- movs r4, 0x26
- ldrsh r0, [r0, r4]
- adds r2, r0
- ldrb r1, [r1, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r3, 0x22
- ldrsh r1, [r0, r3]
- movs r4, 0x26
- ldrsh r0, [r0, r4]
- adds r1, r0
- cmp r2, r1
- blt _081BE882
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_081BE882:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE808
-
- thumb_func_start sp136_strengh_sound
-sp136_strengh_sound: @ 81BE89C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- adds r4, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- ldr r0, =sub_81BE900
- movs r1, 0x9
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r4, [r1, 0x8]
- strh r0, [r1, 0xA]
- strh r5, [r1, 0xC]
- strh r6, [r1, 0xE]
- mov r0, r8
- strh r0, [r1, 0x10]
- movs r0, 0
- bl SetCameraPanningCallback
- movs r0, 0xD6
- bl PlaySE
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sp136_strengh_sound
-
- thumb_func_start sub_81BE900
-sub_81BE900: @ 81BE900
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl __modsi3
- cmp r0, 0
- bne _081BE95C
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x4]
- subs r0, 0x1
- strh r0, [r4, 0x4]
- ldrh r0, [r4]
- negs r0, r0
- strh r0, [r4]
- ldrh r0, [r4, 0x8]
- negs r0, r0
- strh r0, [r4, 0x8]
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x8
- ldrsh r1, [r4, r2]
- bl SetCameraPanning
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _081BE95C
- bl sub_81BE968
- adds r0, r5, 0
- bl DestroyTask
- bl InstallCameraPanAheadCallback
-_081BE95C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE900
-
- thumb_func_start sub_81BE968
-sub_81BE968: @ 81BE968
- push {lr}
- ldr r0, =sub_81BE9C0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _081BE988
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_081BE988:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE968
-
- thumb_func_start sub_81BE994
-sub_81BE994: @ 81BE994
- push {lr}
- ldr r0, =gUnknown_08617D94
- bl LoadSpriteSheets
- bl sub_81BEA20
- ldr r0, =sub_81BE9C0
- movs r1, 0x8
- bl CreateTask
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0x10
- movs r3, 0x3
- bl sp136_strengh_sound
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE994
-
- thumb_func_start sub_81BE9C0
-sub_81BE9C0: @ 81BE9C0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r3, r1, 3
- ldr r4, =gTasks + 0x8
- adds r2, r3, r4
- ldrh r0, [r2, 0x2]
- adds r0, 0x1
- strh r0, [r2, 0x2]
- lsls r0, 16
- movs r1, 0xFA
- lsls r1, 18
- cmp r0, r1
- beq _081BE9E6
- ldrh r0, [r2]
- cmp r0, 0x11
- bne _081BE9F0
-_081BE9E6:
- adds r0, r4, 0
- subs r0, 0x8
- adds r0, r3, r0
- ldr r1, =sub_81BEA00
- str r1, [r0]
-_081BE9F0:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE9C0
-
- thumb_func_start sub_81BEA00
-sub_81BEA00: @ 81BEA00
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0xFA
- lsls r0, 4
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81BEA00
-
- thumb_func_start sub_81BEA20
-sub_81BEA20: @ 81BEA20
- push {r4-r7,lr}
- movs r4, 0
- ldr r5, =gUnknown_08617D64
- adds r7, r5, 0x2
- ldr r6, =gSprites
-_081BEA2A:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 1
- adds r1, r0, r5
- ldrh r1, [r1]
- adds r1, 0x78
- lsls r1, 16
- asrs r1, 16
- adds r0, r7
- movs r3, 0
- ldrsh r2, [r0, r3]
- ldr r0, =gUnknown_08617E60
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r2, [r0, 0x5]
- movs r3, 0xD
- negs r3, r3
- adds r1, r3, 0
- ands r2, r1
- movs r1, 0xF
- ands r2, r1
- strb r2, [r0, 0x5]
- strh r4, [r0, 0x2E]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _081BEA2A
- movs r4, 0
- ldr r5, =gUnknown_08617D64
- adds r7, r5, 0x2
- ldr r6, =gSprites
-_081BEA78:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 1
- adds r1, r0, r5
- ldrh r1, [r1]
- adds r1, 0x73
- lsls r1, 16
- asrs r1, 16
- adds r0, r7
- ldrh r2, [r0]
- subs r2, 0x3
- lsls r2, 16
- asrs r2, 16
- ldr r0, =gUnknown_08617E34
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r2, [r0, 0x5]
- movs r3, 0xD
- negs r3, r3
- adds r1, r3, 0
- ands r2, r1
- movs r1, 0xF
- ands r2, r1
- strb r2, [r0, 0x5]
- strh r4, [r0, 0x2E]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _081BEA78
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEA20
-
- thumb_func_start sub_81BEAD8
-sub_81BEAD8: @ 81BEAD8
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- adds r0, 0x2
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r4, 0x26]
- movs r0, 0x22
- ldrsh r3, [r4, r0]
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- adds r3, r0
- ldr r2, =gUnknown_08617D64
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 1
- adds r2, 0x4
- adds r0, r2
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r3, r0
- ble _081BEB1A
- adds r0, r4, 0
- bl DestroySprite
- bl sub_81BE968
-_081BEB1A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEAD8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fossil_specials.s b/asm/fossil_specials.s
index 7956f814a..eb7cb8ada 100644
--- a/asm/fossil_specials.s
+++ b/asm/fossil_specials.s
@@ -5,893 +5,6 @@
.text
- thumb_func_start sub_81BEB24
-sub_81BEB24: @ 81BEB24
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, =gUnknown_08617DA4
-_081BEB2A:
- lsls r2, r4, 2
- adds r2, r5
- ldrb r0, [r2]
- adds r0, 0x7
- ldrb r1, [r2, 0x1]
- adds r1, 0x7
- ldrh r2, [r2, 0x2]
- bl MapGridSetMetatileIdAt
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x11
- bls _081BEB2A
- bl DrawWholeMapView
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB24
-
- thumb_func_start sub_81BEB54
-sub_81BEB54: @ 81BEB54
- push {lr}
- ldr r0, =sub_81BED50
- movs r1, 0x9
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB54
-
- thumb_func_start sub_81BEB68
-sub_81BEB68: @ 81BEB68
- push {lr}
- ldr r0, =sub_81BEBF4
- movs r1, 0x9
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB68
-
- thumb_func_start sub_81BEB7C
-sub_81BEB7C: @ 81BEB7C
- push {lr}
- ldr r0, =sub_81BF028
- movs r1, 0x9
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB7C
-
- thumb_func_start sub_81BEB90
-sub_81BEB90: @ 81BEB90
- push {r4,lr}
- ldr r4, =gUnknown_0203CF14
- ldr r0, [r4]
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, [r4]
- ldrh r1, [r0, 0x2]
- movs r0, 0x12
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB90
-
- thumb_func_start sub_81BEBB4
-sub_81BEBB4: @ 81BEBB4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r2, r1, r2
- ldrh r1, [r2, 0x8]
- movs r3, 0x8
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bne _081BEBEC
- ldr r0, =gUnknown_0203CF14
- ldr r1, [r0]
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
- movs r0, 0x2
- strh r0, [r2, 0x8]
- bl sub_81BEB90
- b _081BEBF0
- .pool
-_081BEBEC:
- subs r0, r1, 0x1
- strh r0, [r2, 0x8]
-_081BEBF0:
- pop {r0}
- bx r0
- thumb_func_end sub_81BEBB4
-
- thumb_func_start sub_81BEBF4
-sub_81BEBF4: @ 81BEBF4
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0x6
- bls _081BEC10
- b _081BED40
-_081BEC10:
- lsls r0, 2
- ldr r1, =_081BEC24
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BEC24:
- .4byte _081BEC40
- .4byte _081BEC50
- .4byte _081BEC88
- .4byte _081BECB0
- .4byte _081BECF8
- .4byte _081BED00
- .4byte _081BED1C
-_081BEC40:
- bl FreeAllWindowBuffers
- movs r0, 0
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- b _081BED04
-_081BEC50:
- ldr r4, =gUnknown_0203CF04
- movs r0, 0x92
- lsls r0, 4
- bl AllocZeroed
- str r0, [r4]
- ldr r4, =gUnknown_0203CF08
- movs r0, 0x80
- lsls r0, 4
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- b _081BECD8
- .pool
-_081BEC88:
- ldr r0, =gUnknown_08617274
- ldr r4, =gUnknown_0203CF04
- ldr r1, [r4]
- movs r2, 0x92
- lsls r2, 3
- bl CpuSet
- ldr r1, [r4]
- movs r2, 0x92
- lsls r2, 4
- movs r0, 0
- movs r3, 0
- bl LoadBgTiles
- b _081BECD8
- .pool
-_081BECB0:
- ldr r0, =gUnknown_0203CF08
- ldr r1, [r0]
- movs r0, 0
- bl SetBgTilemapBuffer
- ldr r1, =gUnknown_08617B94
- movs r0, 0x6
- str r0, [sp]
- movs r0, 0xC
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r2, 0xC
- movs r3, 0x1D
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
-_081BECD8:
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- b _081BED40
- .pool
-_081BECF8:
- movs r0, 0
- bl ShowBg
- b _081BED04
-_081BED00:
- bl sub_81BEB24
-_081BED04:
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _081BED40
- .pool
-_081BED1C:
- ldr r4, =gUnknown_0203CF14
- movs r0, 0x4
- bl Alloc
- str r0, [r4]
- movs r2, 0
- movs r1, 0x2
- strh r1, [r0]
- strh r2, [r0, 0x2]
- ldr r0, =sub_81BEBB4
- movs r1, 0xA
- bl CreateTask
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_081BED40:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEBF4
-
- thumb_func_start sub_81BED50
-sub_81BED50: @ 81BED50
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r10
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x8]
- subs r0, 0x1
- lsls r0, 16
- asrs r0, 16
- adds r6, r1, 0
- cmp r0, 0x7
- bls _081BED7C
- b _081BF002
-_081BED7C:
- lsls r0, 2
- ldr r1, =_081BED90
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BED90:
- .4byte _081BEDB0
- .4byte _081BF002
- .4byte _081BEDC4
- .4byte _081BEF64
- .4byte _081BEF94
- .4byte _081BEFD0
- .4byte _081BEFF0
- .4byte _081BEFF8
-_081BEDB0:
- ldr r4, =gUnknown_0203CF10
- movs r0, 0xC0
- lsls r0, 2
- bl AllocZeroed
- str r0, [r4]
- b _081BF002
- .pool
-_081BEDC4:
- mov r1, r10
- lsls r0, r1, 2
- adds r1, r0, r1
- lsls r1, 3
- adds r2, r1, r6
- ldrh r3, [r2, 0xE]
- movs r4, 0xE
- ldrsh r1, [r2, r4]
- str r0, [sp, 0x8]
- cmp r1, 0x5F
- bgt _081BEE8A
- movs r1, 0xA
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- ble _081BEE7C
- lsls r0, r3, 24
- lsrs r4, r0, 24
- movs r0, 0x30
- bl Alloc
- ldr r3, =gUnknown_0203CF10
- ldr r1, [r3]
- lsls r2, r4, 3
- adds r1, r2, r1
- str r0, [r1]
- movs r5, 0
- adds r4, r2, 0
-_081BEDFA:
- ldr r0, [r3]
- adds r0, r4, r0
- ldr r0, [r0]
- adds r0, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x2F
- bls _081BEDFA
- movs r5, 0
- ldr r7, =gUnknown_0203CF10
- adds r6, r2, 0
-_081BEE14:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x30
- bl __umodsi3
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x30
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [r7]
- adds r1, r6, r1
- ldr r1, [r1]
- adds r0, r1, r0
- ldrb r2, [r0]
- adds r1, r4
- ldrb r1, [r1]
- strb r1, [r0]
- ldr r0, [r7]
- adds r0, r6, r0
- ldr r0, [r0]
- adds r0, r4
- strb r2, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x2F
- bls _081BEE14
- ldr r0, =gTasks
- ldr r1, [sp, 0x8]
- add r1, r10
- lsls r1, 3
- adds r2, r1, r0
- ldrh r3, [r2, 0xE]
- movs r4, 0xE
- ldrsh r1, [r2, r4]
- adds r6, r0, 0
- cmp r1, 0x5F
- bgt _081BEE78
- adds r0, r3, 0x1
- strh r0, [r2, 0xE]
-_081BEE78:
- movs r0, 0
- strh r0, [r2, 0xA]
-_081BEE7C:
- ldr r1, [sp, 0x8]
- add r1, r10
- lsls r1, 3
- adds r1, r6
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_081BEE8A:
- ldr r0, [sp, 0x8]
- add r0, r10
- lsls r0, 3
- adds r0, r6
- ldrb r4, [r0, 0xE]
- ldrb r5, [r0, 0xC]
- lsls r0, r4, 16
- cmp r5, r4
- bcs _081BEF32
- str r0, [sp, 0xC]
-_081BEE9E:
- movs r6, 0
- adds r0, r5, 0x1
- str r0, [sp, 0x4]
- lsls r4, r5, 3
- movs r2, 0x5F
- subs r1, r2, r5
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 4
- mov r9, r0
-_081BEEB2:
- ldr r0, =gUnknown_0203CF04
- ldr r0, [r0]
- ldr r7, =gUnknown_0203CF10
- ldr r3, [r7]
- adds r3, r4, r3
- ldrb r2, [r3, 0x4]
- adds r1, r2, 0x1
- strb r1, [r3, 0x4]
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [r3]
- adds r1, r2
- ldrb r1, [r1]
- add r1, r9
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x1
- mov r8, r2
- str r2, [sp]
- movs r2, 0
- movs r3, 0x30
- bl sub_81BF2B8
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _081BEEB2
- ldr r0, [r7]
- adds r1, r4, r0
- ldrb r0, [r1, 0x4]
- cmp r0, 0x2F
- bls _081BEF24
- ldr r0, [r1]
- bl Free
- ldr r0, [r7]
- adds r0, r4, r0
- movs r1, 0
- str r1, [r0]
- ldr r1, [sp, 0x8]
- add r1, r10
- lsls r1, 3
- ldr r4, =gTasks
- adds r1, r4
- ldrh r0, [r1, 0xC]
- adds r0, 0x1
- strh r0, [r1, 0xC]
- mov r0, r8
- ands r5, r0
- cmp r5, 0x1
- bne _081BEF24
- ldr r0, =gUnknown_0203CF14
- ldr r1, [r0]
- ldrh r0, [r1, 0x2]
- subs r0, 0x1
- strh r0, [r1, 0x2]
-_081BEF24:
- ldr r1, [sp, 0x4]
- lsls r0, r1, 16
- lsrs r5, r0, 16
- ldr r2, [sp, 0xC]
- lsrs r0, r2, 16
- cmp r5, r0
- bcc _081BEE9E
-_081BEF32:
- ldr r0, =gUnknown_0203CF04
- ldr r1, [r0]
- movs r2, 0x92
- lsls r2, 4
- movs r0, 0
- movs r3, 0
- bl LoadBgTiles
- ldr r0, =gUnknown_0203CF10
- ldr r0, [r0]
- movs r4, 0xBE
- lsls r4, 2
- adds r0, r4
- ldrb r0, [r0, 0x4]
- cmp r0, 0x2F
- bhi _081BF002
- b _081BF014
- .pool
-_081BEF64:
- movs r0, 0
- bl UnsetBgTilemapBuffer
- ldr r0, =sub_81BEBB4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _081BEF7C
- bl DestroyTask
-_081BEF7C:
- ldr r0, =gUnknown_0203CF14
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1]
- strh r0, [r1, 0x2]
- bl sub_81BEB90
- b _081BF002
- .pool
-_081BEF94:
- ldr r4, =gUnknown_0203CF14
- ldr r0, [r4]
- bl Free
- movs r5, 0
- str r5, [r4]
- ldr r4, =gUnknown_0203CF10
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r4, =gUnknown_0203CF04
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r4, =gUnknown_0203CF08
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- b _081BF002
- .pool
-_081BEFD0:
- movs r0, 0xC
- movs r1, 0x2
- bl SetGpuRegBits
- movs r0, 0x8
- movs r1, 0
- bl SetGpuRegBits
- movs r0, 0
- movs r1, 0x7
- movs r2, 0
- bl SetBgAttribute
- bl sub_81971D0
- b _081BF002
-_081BEFF0:
- movs r0, 0
- bl ShowBg
- b _081BF002
-_081BEFF8:
- mov r0, r10
- bl DestroyTask
- bl EnableBothScriptContexts
-_081BF002:
- ldr r0, =gTasks
- mov r2, r10
- lsls r1, r2, 2
- add r1, r10
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_081BF014:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BED50
-
- thumb_func_start sub_81BF028
-sub_81BF028: @ 81BF028
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x8]
- subs r0, 0x1
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- bls _081BF04C
- b _081BF228
-_081BF04C:
- lsls r0, 2
- ldr r1, =_081BF060
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BF060:
- .4byte _081BF080
- .4byte _081BF0B4
- .4byte _081BF0DC
- .4byte _081BF0F0
- .4byte _081BF148
- .4byte _081BF170
- .4byte _081BF1CC
- .4byte _081BF224
-_081BF080:
- ldr r4, =gUnknown_0203CF0C
- movs r0, 0x14
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0x80
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1]
- movs r0, 0x8
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x4]
- movs r0, 0x80
- lsls r0, 2
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0xC]
- movs r0, 0
- strh r0, [r1, 0x10]
- b _081BF228
- .pool
-_081BF0B4:
- ldr r0, =gUnknown_0203CF0C
- ldr r0, [r0]
- ldr r1, [r0]
- movs r5, 0
- ldr r2, =gRootFossil_Gfx
-_081BF0BE:
- adds r0, r5, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r1, 0x1
- cmp r5, 0x7F
- bls _081BF0BE
- b _081BF228
- .pool
-_081BF0DC:
- ldr r0, =gUnknown_0203CF0C
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r1]
- movs r0, 0x80
- strh r0, [r1, 0x4]
- b _081BF228
- .pool
-_081BF0F0:
- mov r1, sp
- ldr r0, =gUnknown_08617E00
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldr r4, =gUnknown_0203CF0C
- ldr r0, [r4]
- ldr r0, [r0, 0x4]
- str r0, [sp, 0xC]
- movs r2, 0x10
- negs r2, r2
- mov r0, sp
- movs r1, 0x80
- movs r3, 0x1
- bl CreateSprite
- ldr r1, [r4]
- movs r3, 0
- strb r0, [r1, 0x8]
- ldr r2, =gSprites
- ldr r0, [r4]
- ldrb r1, [r0, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x28
- strb r3, [r0]
- ldr r3, [r4]
- ldrb r1, [r3, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x20]
- strh r1, [r0, 0x2E]
- ldrb r1, [r3, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x30]
-_081BF148:
- movs r5, 0
- ldr r2, =gUnknown_0203CF0C
-_081BF14C:
- ldr r0, [r2]
- ldr r1, [r0, 0xC]
- lsls r0, r5, 1
- adds r0, r1
- strh r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0xFF
- bls _081BF14C
- b _081BF228
- .pool
-_081BF170:
- movs r5, 0
- movs r6, 0xFF
- ldr r0, =0x000001ff
- mov r8, r0
-_081BF178:
- bl Random
- adds r4, r6, 0
- ands r4, r0
- bl Random
- adds r1, r6, 0
- ands r1, r0
- ldr r0, =gUnknown_0203CF0C
- ldr r3, [r0]
- ldr r0, [r3, 0xC]
- lsls r1, 1
- adds r1, r0
- ldrh r2, [r1]
- lsls r4, 1
- adds r4, r0
- ldrh r0, [r4]
- strh r0, [r1]
- strh r2, [r4]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r8
- bls _081BF178
- ldr r2, =gSprites
- ldrb r1, [r3, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_81BF248
- str r1, [r0]
- b _081BF228
- .pool
-_081BF1CC:
- ldr r3, =gSprites
- ldr r5, =gUnknown_0203CF0C
- ldr r0, [r5]
- ldrb r1, [r0, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BF238
- adds r0, r2, r3
- bl DestroySprite
- ldr r0, [r5]
- ldr r0, [r0, 0xC]
- bl Free
- ldr r0, [r5]
- movs r4, 0
- str r4, [r0, 0xC]
- ldr r0, [r0, 0x4]
- bl Free
- ldr r0, [r5]
- str r4, [r0, 0x4]
- ldr r0, [r0]
- bl Free
- ldr r0, [r5]
- str r4, [r0]
- bl Free
- str r4, [r5]
- b _081BF228
- .pool
-_081BF224:
- bl EnableBothScriptContexts
-_081BF228:
- ldr r0, =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_081BF238:
- add sp, 0x18
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BF028
-
- thumb_func_start sub_81BF248
-sub_81BF248: @ 81BF248
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldr r0, =gUnknown_0203CF0C
- ldr r0, [r0]
- ldrh r0, [r0, 0x10]
- cmp r0, 0xFF
- bls _081BF268
- ldr r0, =SpriteCallbackDummy
- str r0, [r5, 0x1C]
- b _081BF2B0
- .pool
-_081BF268:
- ldrh r1, [r5, 0x22]
- movs r2, 0x22
- ldrsh r0, [r5, r2]
- cmp r0, 0x5F
- ble _081BF2AC
- movs r4, 0
-_081BF274:
- ldr r0, =gUnknown_0203CF0C
- ldr r3, [r0]
- ldr r0, [r3]
- ldrh r1, [r3, 0x10]
- adds r2, r1, 0x1
- strh r2, [r3, 0x10]
- lsls r1, 16
- ldr r2, [r3, 0xC]
- lsrs r1, 15
- adds r1, r2
- ldrh r1, [r1]
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl sub_81BF2B8
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bls _081BF274
- adds r0, r5, 0
- movs r1, 0
- bl StartSpriteAnim
- b _081BF2B0
- .pool
-_081BF2AC:
- adds r0, r1, 0x1
- strh r0, [r5, 0x22]
-_081BF2B0:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81BF248
-
thumb_func_start sub_81BF2B8
sub_81BF2B8: @ 81BF2B8
push {r4-r7,lr}
diff --git a/asm/item_menu_icons.s b/asm/item_menu_icons.s
deleted file mode 100644
index 8068e37c2..000000000
--- a/asm/item_menu_icons.s
+++ /dev/null
@@ -1,637 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start RemoveBagObject
-@ void RemoveBagObject(u8 a1)
-RemoveBagObject: @ 80D4CA8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_0203CE54
- ldr r2, =0x00000804
- adds r1, r4, r2
- ldr r0, [r0]
- adds r5, r0, r1
- ldrb r0, [r5]
- cmp r0, 0xFF
- beq _080D4CEE
- adds r4, 0x64
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- movs r0, 0xFF
- strb r0, [r5]
-_080D4CEE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RemoveBagObject
-
- thumb_func_start AddBagVisualObject
-@ void AddBagVisualObject(u8 bagPocketId)
-AddBagVisualObject: @ 80D4D00
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gUnknown_0203CE54
- ldr r4, [r0]
- ldr r0, =0x00000804
- adds r4, r0
- ldr r0, =gUnknown_0857FB4C
- movs r1, 0x44
- movs r2, 0x42
- movs r3, 0
- bl CreateSprite
- strb r0, [r4]
- adds r0, r5, 0
- movs r1, 0
- bl SetBagVisualPocketId
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AddBagVisualObject
-
- thumb_func_start SetBagVisualPocketId
-@ void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
-SetBagVisualPocketId: @ 80D4D38
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r2, =0x00000804
- adds r0, r2
- ldrb r2, [r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r2, =gSprites
- adds r2, r0, r2
- cmp r1, 0
- beq _080D4D84
- ldr r0, =0x0000fffb
- strh r0, [r2, 0x26]
- ldr r0, =ObjectCB_BagVisualSwitchingPockets
- str r0, [r2, 0x1C]
- adds r0, r3, 0x1
- strh r0, [r2, 0x2E]
- adds r0, r2, 0
- movs r1, 0
- bl StartSpriteAnim
- b _080D4D90
- .pool
-_080D4D84:
- adds r1, r3, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r2, 0
- bl StartSpriteAnim
-_080D4D90:
- pop {r0}
- bx r0
- thumb_func_end SetBagVisualPocketId
-
- thumb_func_start ObjectCB_BagVisualSwitchingPockets
-@ void ObjectCB_BagVisualSwitchingPockets(struct obj *object)
-ObjectCB_BagVisualSwitchingPockets: @ 80D4D94
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x26]
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080D4DA8
- adds r0, r1, 0x1
- strh r0, [r4, 0x26]
- b _080D4DB8
-_080D4DA8:
- ldrh r1, [r4, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- ldr r0, =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_080D4DB8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ObjectCB_BagVisualSwitchingPockets
-
- thumb_func_start ShakeBagVisual
-@ void ShakeBagVisual()
-ShakeBagVisual: @ 80D4DC4
- push {r4,lr}
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000804
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r4, r0, r1
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080D4DF4
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- ldr r0, =ObjectCB_ShakeBagVisual
- str r0, [r4, 0x1C]
-_080D4DF4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ShakeBagVisual
-
- thumb_func_start ObjectCB_ShakeBagVisual
-@ void ObjectCB_ShakeBagVisual(struct obj *object)
-ObjectCB_ShakeBagVisual: @ 80D4E0C
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080D4E28
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- ldr r0, =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_080D4E28:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ObjectCB_ShakeBagVisual
-
- thumb_func_start AddSwitchPocketRotatingBallObject
-@ void AddSwitchPocketRotatingBallObject(u16 rotationDirection)
-AddSwitchPocketRotatingBallObject: @ 80D4E34
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- ldr r0, =gUnknown_0203CE54
- ldr r4, [r0]
- ldr r0, =0x00000805
- adds r4, r0
- ldr r0, =gUnknown_0857FBA0
- bl LoadSpriteSheet
- ldr r0, =gUnknown_0857FBA8
- bl LoadSpritePalette
- ldr r0, =gUnknown_0857FBB0
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl CreateSprite
- strb r0, [r4]
- ldr r2, =gSprites
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r5, [r0, 0x2E]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AddSwitchPocketRotatingBallObject
-
- thumb_func_start update_switch_pocket_rotating_ball_coords
-@ void update_switch_pocket_rotating_ball_coords(struct obj *object)
-update_switch_pocket_rotating_ball_coords: @ 80D4E8C
- ldrh r2, [r0, 0x30]
- ldrh r1, [r0, 0x34]
- adds r1, 0x1
- movs r3, 0x1
- ands r1, r3
- subs r2, r1
- adds r1, r0, 0
- adds r1, 0x28
- strb r2, [r1]
- ldrh r2, [r0, 0x30]
- ldrh r1, [r0, 0x34]
- adds r1, 0x1
- ands r1, r3
- subs r2, r1
- adds r0, 0x29
- strb r2, [r0]
- bx lr
- thumb_func_end update_switch_pocket_rotating_ball_coords
-
- thumb_func_start ObjectCB_SwitchPocketRotatingBallInit
-@ void ObjectCB_SwitchPocketRotatingBallInit(struct obj *object)
-ObjectCB_SwitchPocketRotatingBallInit: @ 80D4EB0
- push {r4,lr}
- adds r4, r0, 0
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1]
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _080D4ED8
- ldr r0, =gUnknown_0857FB98
- b _080D4EDA
- .pool
-_080D4ED8:
- ldr r0, =gUnknown_0857FB9C
-_080D4EDA:
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r4, 0x30]
- adds r0, r4, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r4, 0x30]
- adds r0, r4, 0
- bl update_switch_pocket_rotating_ball_coords
- ldr r0, =ObjectCB_SwitchPocketRotatingBallContinue
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ObjectCB_SwitchPocketRotatingBallInit
-
- thumb_func_start ObjectCB_SwitchPocketRotatingBallContinue
-@ void ObjectCB_SwitchPocketRotatingBallContinue(struct obj *object)
-ObjectCB_SwitchPocketRotatingBallContinue: @ 80D4F14
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl update_switch_pocket_rotating_ball_coords
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0x10
- bne _080D4F32
- movs r0, 0x1
- bl RemoveBagObject
-_080D4F32:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ObjectCB_SwitchPocketRotatingBallContinue
-
- thumb_func_start AddBagItemIconObject
-@ void AddBagItemIconObject(u16 itemId, u8 a2)
-AddBagItemIconObject: @ 80D4F38
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- lsrs r4, r1, 24
- ldr r0, =gUnknown_0203CE54
- ldr r2, =0x00000806
- adds r1, r4, r2
- ldr r0, [r0]
- adds r5, r0, r1
- ldrb r0, [r5]
- cmp r0, 0xFF
- bne _080D4F86
- adds r4, 0x66
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r6, 0
- bl AddItemIconSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080D4F86
- strb r2, [r5]
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x18
- strh r1, [r0, 0x24]
- movs r1, 0x58
- strh r1, [r0, 0x26]
-_080D4F86:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AddBagItemIconObject
-
- thumb_func_start RemoveBagItemIconObject
-@ void RemoveBagItemIconObject(u8 a1)
-RemoveBagItemIconObject: @ 80D4F98
- push {lr}
- lsls r0, 24
- movs r1, 0x80
- lsls r1, 18
- adds r0, r1
- lsrs r0, 24
- bl RemoveBagObject
- pop {r0}
- bx r0
- thumb_func_end RemoveBagItemIconObject
-
- thumb_func_start sub_80D4FAC
-sub_80D4FAC: @ 80D4FAC
- push {lr}
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000808
- adds r0, r1
- movs r1, 0x8
- bl sub_8122344
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D4FAC
-
- thumb_func_start sub_80D4FC8
-sub_80D4FC8: @ 80D4FC8
- push {lr}
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000808
- adds r0, r1
- movs r1, 0x8
- bl sub_81223FC
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D4FC8
-
- thumb_func_start sub_80D4FEC
-sub_80D4FEC: @ 80D4FEC
- push {lr}
- adds r3, r0, 0
- lsls r3, 24
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000808
- adds r0, r1
- lsrs r3, 4
- movs r1, 0x80
- lsls r1, 13
- adds r3, r1
- lsrs r3, 16
- movs r1, 0x88
- movs r2, 0x78
- bl sub_8122448
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D4FEC
-
- thumb_func_start sub_80D5018
-sub_80D5018: @ 80D5018
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r4, r1, 0
- movs r2, 0x80
- lsls r2, 4
- adds r0, r4, 0
- movs r1, 0
- bl memset
- movs r0, 0x80
- lsls r0, 1
- adds r4, r0
- movs r7, 0
-_080D5036:
- adds r4, 0x20
- movs r5, 0
- adds r1, r7, 0x1
- mov r8, r1
-_080D503E:
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0x20
- bl memcpy
- adds r4, 0x20
- adds r6, 0x20
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080D503E
- cmp r7, 0x5
- beq _080D505C
- adds r4, 0x20
-_080D505C:
- mov r1, r8
- lsls r0, r1, 24
- lsrs r7, r0, 24
- cmp r7, 0x5
- bls _080D5036
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D5018
-
- thumb_func_start sub_80D5070
-sub_80D5070: @ 80D5070
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- cmp r4, 0x2A
- bne _080D5082
- bl IsEnigmaBerryValid
-_080D5082:
- ldr r5, =gBerryPicTable
- lsls r4, 3
- adds r0, r5, 0x4
- adds r0, r4, r0
- ldr r0, [r0]
- str r0, [sp]
- ldr r1, =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r1
- ldr r1, =0x00007544
- orrs r0, r1
- str r0, [sp, 0x4]
- mov r0, sp
- bl LoadCompressedObjectPalette
- adds r4, r5
- ldr r0, [r4]
- ldr r4, =0x0201d000
- adds r1, r4, 0
- bl LZDecompressWram
- ldr r0, =0xfffff000
- adds r1, r4, r0
- adds r0, r4, 0
- bl sub_80D5018
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D5070
-
- thumb_func_start CreateBerryTagSprite
-CreateBerryTagSprite: @ 80D50D4
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- bl sub_80D5070
- ldr r0, =gUnknown_0857FBEC
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end CreateBerryTagSprite
-
- thumb_func_start FreeBerryTagSpritePalette
-FreeBerryTagSpritePalette: @ 80D510C
- push {lr}
- ldr r0, =0x00007544
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .pool
- thumb_func_end FreeBerryTagSpritePalette
-
- thumb_func_start sub_80D511C
-sub_80D511C: @ 80D511C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r8, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, =0x00007544
- bl FreeSpritePaletteByTag
- adds r0, r4, 0
- bl sub_80D5070
- ldr r0, =gUnknown_0857FC7C
- adds r1, r5, 0
- adds r2, r6, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- adds r4, r1, 0
- mov r0, r8
- cmp r0, 0x1
- bne _080D5172
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_080D5172:
- adds r0, r4, 0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D511C
-
- thumb_func_start CreateBerryFlavorCircleSprite
-CreateBerryFlavorCircleSprite: @ 80D518C
- push {lr}
- adds r1, r0, 0
- ldr r0, =gUnknown_0857FE10
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x74
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end CreateBerryFlavorCircleSprite
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/learn_move.s b/asm/learn_move.s
index 56f6f84c7..a33bd11b6 100644
--- a/asm/learn_move.s
+++ b/asm/learn_move.s
@@ -903,7 +903,7 @@ sub_8160EA0: @ 8160EA0
ldrb r0, [r0]
ldr r1, =gUnknown_0203BC38
adds r2, r1, 0x2
- bl sub_81AE6C8
+ bl DestroyListMenuTask
bl FreeAllWindowBuffers
ldr r0, [r4]
bl Free
@@ -988,7 +988,7 @@ sub_8160F50: @ 8160F50
ldr r4, =gUnknown_0203BC38
adds r2, r4, 0x2
adds r1, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r5, r0
diff --git a/asm/list_menu.s b/asm/list_menu.s
deleted file mode 100644
index 58719093c..000000000
--- a/asm/list_menu.s
+++ /dev/null
@@ -1,1643 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ListMenuDummyTask
-@ void ListMenuDummyTask(u8 taskId)
-ListMenuDummyTask: @ 81AE458
- bx lr
- thumb_func_end ListMenuDummyTask
-
- thumb_func_start DoMysteryGiftListMenu
-@ int DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, int a3, int a4, int a5)
-DoMysteryGiftListMenu: @ 81AE45C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r12, r0
- str r1, [sp]
- ldr r0, [sp, 0x28]
- lsls r2, 24
- lsrs r6, r2, 24
- mov r10, r6
- lsls r3, 16
- lsrs r7, r3, 16
- str r7, [sp, 0x4]
- lsls r0, 16
- mov r8, r0
- lsrs r0, 16
- mov r9, r0
- ldr r5, =gUnknown_0203CE84
- ldrb r4, [r5, 0x4]
- cmp r4, 0x1
- beq _081AE4F4
- cmp r4, 0x1
- ble _081AE492
- cmp r4, 0x2
- beq _081AE558
-_081AE492:
- mov r0, r12
- bl AddWindow
- strb r0, [r5, 0x5]
- cmp r6, 0x1
- beq _081AE4B0
- cmp r6, 0x2
- bne _081AE4C0
- ldrb r0, [r5, 0x5]
- mov r1, r9
- lsls r2, r1, 24
- lsrs r2, 24
- adds r1, r7, 0
- bl sub_809882C
-_081AE4B0:
- ldrb r0, [r5, 0x5]
- mov r3, r8
- lsrs r2, r3, 20
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [sp, 0x4]
- bl sub_8098858
-_081AE4C0:
- ldr r0, =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, [sp]
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldr r4, =gUnknown_0203CE84
- ldrb r1, [r4, 0x5]
- strb r1, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- strb r0, [r4, 0x6]
- ldrb r0, [r4, 0x5]
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0x1
- strb r0, [r4, 0x4]
- b _081AE570
- .pool
-_081AE4F4:
- ldrb r0, [r5, 0x6]
- bl ListMenuHandleInputGetItemId
- str r0, [r5]
- ldr r1, =gMain
- ldrh r0, [r1, 0x2E]
- ands r4, r0
- cmp r4, 0
- beq _081AE50A
- movs r0, 0x2
- strb r0, [r5, 0x4]
-_081AE50A:
- ldrh r1, [r1, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081AE51E
- movs r0, 0x2
- negs r0, r0
- str r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x4]
-_081AE51E:
- ldrb r0, [r5, 0x4]
- cmp r0, 0x2
- bne _081AE570
- cmp r6, 0
- bne _081AE534
- ldrb r0, [r5, 0x5]
- bl ClearWindowTilemap
- b _081AE546
- .pool
-_081AE534:
- mov r4, r10
- cmp r4, 0
- blt _081AE546
- cmp r4, 0x2
- bgt _081AE546
- ldrb r0, [r5, 0x5]
- movs r1, 0
- bl sub_819746C
-_081AE546:
- ldr r0, =gUnknown_0203CE84
- ldrb r0, [r0, 0x5]
- movs r1, 0x1
- bl CopyWindowToVram
- b _081AE570
- .pool
-_081AE558:
- ldrb r0, [r5, 0x6]
- movs r1, 0
- movs r2, 0
- bl sub_81AE6C8
- ldrb r0, [r5, 0x5]
- bl RemoveWindow
- movs r0, 0
- strb r0, [r5, 0x4]
- ldr r0, [r5]
- b _081AE574
-_081AE570:
- movs r0, 0x1
- negs r0, r0
-_081AE574:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end DoMysteryGiftListMenu
-
- thumb_func_start ListMenuInit
-@ u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
-ListMenuInit: @ 81AE584
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- bl ListMenuInitInternal
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r5, 0x10]
- bl PutWindowTilemap
- ldrb r0, [r5, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ListMenuInit
-
- thumb_func_start Unused_ListMenuInit2
-@ u8 Unused_ListMenuInit2(struct ListMenuTemplate *listMenuTemplate, int a2, u16 scrollOffset, u16 selectedRow)
-Unused_ListMenuInit2: @ 81AE5B0
- push {r4-r7,lr}
- sub sp, 0x8
- adds r6, r0, 0
- adds r4, r1, 0
- adds r1, r2, 0
- adds r2, r3, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- bl ListMenuInitInternal
- lsls r0, 24
- lsrs r7, r0, 24
- ldrb r0, [r4, 0x4]
- cmp r0, 0xFF
- beq _081AE5F0
- adds r5, r4, 0
-_081AE5D4:
- ldrb r0, [r6, 0x10]
- ldrb r1, [r5]
- ldrb r2, [r5, 0x1]
- ldrb r3, [r5, 0x2]
- ldrb r4, [r5, 0x3]
- str r4, [sp]
- ldrb r4, [r5, 0x4]
- str r4, [sp, 0x4]
- bl PutWindowRectTilemapOverridePalette
- adds r5, 0x8
- ldrb r0, [r5, 0x4]
- cmp r0, 0xFF
- bne _081AE5D4
-_081AE5F0:
- ldrb r0, [r6, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- adds r0, r7, 0
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end Unused_ListMenuInit2
-
- thumb_func_start ListMenuHandleInputGetItemId
-@ int ListMenuHandleInputGetItemId(u8 taskId)
-ListMenuHandleInputGetItemId: @ 81AE604
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r3, r1, r0
- ldr r2, =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081AE638
- ldrh r0, [r3, 0x18]
- ldrh r1, [r3, 0x1A]
- adds r0, r1
- ldr r1, [r3]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- b _081AE6C2
- .pool
-_081AE638:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081AE646
- movs r0, 0x2
- negs r0, r0
- b _081AE6C2
-_081AE646:
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _081AE65A
- adds r0, r3, 0
- movs r1, 0x1
- movs r2, 0x1
- movs r3, 0
- b _081AE6BA
-_081AE65A:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _081AE66A
- adds r0, r3, 0
- movs r1, 0x1
- movs r2, 0x1
- b _081AE6B8
-_081AE66A:
- ldrb r0, [r3, 0x16]
- lsrs r0, 6
- cmp r0, 0x1
- beq _081AE680
- cmp r0, 0x1
- ble _081AE67A
- cmp r0, 0x2
- beq _081AE68C
-_081AE67A:
- movs r2, 0
- movs r0, 0
- b _081AE6A0
-_081AE680:
- movs r0, 0x20
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0x10
- b _081AE69A
-_081AE68C:
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0x80
- lsls r0, 1
-_081AE69A:
- ands r0, r1
- lsls r0, 16
- lsrs r0, 16
-_081AE6A0:
- cmp r2, 0
- beq _081AE6AE
- ldrb r2, [r3, 0xE]
- adds r0, r3, 0
- movs r1, 0x1
- movs r3, 0
- b _081AE6BA
-_081AE6AE:
- cmp r0, 0
- beq _081AE6BE
- ldrb r2, [r3, 0xE]
- adds r0, r3, 0
- movs r1, 0x1
-_081AE6B8:
- movs r3, 0x1
-_081AE6BA:
- bl ListMenuChangeSelection
-_081AE6BE:
- movs r0, 0x1
- negs r0, r0
-_081AE6C2:
- pop {r1}
- bx r1
- thumb_func_end ListMenuHandleInputGetItemId
-
- thumb_func_start sub_81AE6C8
-sub_81AE6C8: @ 81AE6C8
- push {r4,lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r1, r0, r1
- cmp r3, 0
- beq _081AE6E4
- ldrh r0, [r1, 0x18]
- strh r0, [r3]
-_081AE6E4:
- cmp r2, 0
- beq _081AE6EC
- ldrh r0, [r1, 0x1A]
- strh r0, [r2]
-_081AE6EC:
- ldrb r0, [r1, 0x1E]
- cmp r0, 0xFF
- beq _081AE6FC
- ldrb r1, [r1, 0x17]
- lsrs r1, 6
- subs r1, 0x2
- bl ListMenuRemoveCursorObject
-_081AE6FC:
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE6C8
-
- thumb_func_start sub_81AE70C
-sub_81AE70C: @ 81AE70C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldrb r0, [r4, 0x10]
- ldrb r2, [r4, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- bl FillWindowPixelBuffer
- ldrh r1, [r4, 0x18]
- ldrh r3, [r4, 0xE]
- adds r0, r4, 0
- movs r2, 0
- bl ListMenuPrintEntries
- adds r0, r4, 0
- bl ListMenuDrawCursor
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE70C
-
- thumb_func_start sub_81AE750
-sub_81AE750: @ 81AE750
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- lsrs r1, 20
- ldrb r6, [r4, 0x14]
- movs r5, 0xF
- adds r0, r5, 0
- ands r0, r6
- orrs r0, r1
- strb r0, [r4, 0x14]
- ands r2, r5
- ldrb r1, [r4, 0x15]
- movs r0, 0x10
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- lsrs r3, 20
- ands r0, r5
- orrs r0, r3
- strb r0, [r4, 0x15]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE750
-
- thumb_func_start sub_81AE794
-sub_81AE794: @ 81AE794
- push {r4,r5,lr}
- adds r3, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldrb r0, [r4, 0x10]
- movs r1, 0x1
- adds r2, r3, 0
- bl SetWindowAttribute
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- adds r2, r5, 0
- bl SetWindowAttribute
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE794
-
- thumb_func_start sub_81AE7D0
-sub_81AE7D0: @ 81AE7D0
- push {r4-r7,lr}
- sub sp, 0x20
- mov r12, r2
- ldr r5, [sp, 0x34]
- lsls r3, 16
- lsrs r3, 16
- adds r4, r3, 0
- mov r3, sp
- ldm r0!, {r2,r6,r7}
- stm r3!, {r2,r6,r7}
- ldm r0!, {r2,r6,r7}
- stm r3!, {r2,r6,r7}
- mov r0, sp
- movs r3, 0
- strh r1, [r0, 0x18]
- mov r1, r12
- strh r1, [r0, 0x1A]
- strb r3, [r0, 0x1C]
- strb r3, [r0, 0x1D]
- cmp r4, 0x40
- bne _081AE804
- movs r1, 0
- movs r2, 0x1
- movs r3, 0
- bl ListMenuChangeSelection
-_081AE804:
- cmp r4, 0x80
- bne _081AE814
- mov r0, sp
- movs r1, 0
- movs r2, 0x1
- movs r3, 0x1
- bl ListMenuChangeSelection
-_081AE814:
- cmp r5, 0
- beq _081AE81E
- mov r0, sp
- ldrh r0, [r0, 0x18]
- strh r0, [r5]
-_081AE81E:
- ldr r2, [sp, 0x38]
- cmp r2, 0
- beq _081AE82A
- mov r0, sp
- ldrh r0, [r0, 0x1A]
- strh r0, [r2]
-_081AE82A:
- movs r0, 0x1
- negs r0, r0
- add sp, 0x20
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81AE7D0
-
- thumb_func_start sub_81AE838
-sub_81AE838: @ 81AE838
- push {lr}
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- cmp r2, 0
- beq _081AE856
- ldrh r0, [r1, 0x1A]
- ldrh r1, [r1, 0x18]
- adds r0, r1
- strh r0, [r2]
-_081AE856:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE838
-
- thumb_func_start sub_81AE860
-sub_81AE860: @ 81AE860
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- cmp r3, 0
- beq _081AE87A
- ldrh r0, [r1, 0x18]
- strh r0, [r3]
-_081AE87A:
- cmp r2, 0
- beq _081AE882
- ldrh r0, [r1, 0x1A]
- strh r0, [r2]
-_081AE882:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE860
-
- thumb_func_start ListMenuGetYCoordForPrintingArrowCursor
-@ u8 ListMenuGetYCoordForPrintingArrowCursor(u8 taskId)
-ListMenuGetYCoordForPrintingArrowCursor: @ 81AE88C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldrb r0, [r4, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r4, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x1A]
- adds r2, r1, 0
- muls r2, r0
- adds r1, r2, 0
- ldrb r0, [r4, 0x14]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ListMenuGetYCoordForPrintingArrowCursor
-
- thumb_func_start ListMenuInitInternal
-@ u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
-ListMenuInitInternal: @ 81AE8D4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- ldr r0, =ListMenuDummyTask
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r7, r0, r1
- adds r0, r7, 0
- ldm r4!, {r1-r3}
- stm r0!, {r1-r3}
- ldm r4!, {r1-r3}
- stm r0!, {r1-r3}
- movs r1, 0
- strh r5, [r7, 0x18]
- strh r6, [r7, 0x1A]
- strb r1, [r7, 0x1C]
- strb r1, [r7, 0x1D]
- movs r0, 0xFF
- strb r0, [r7, 0x1E]
- strb r1, [r7, 0x1F]
- ldr r3, =gUnknown_03006300
- ldrb r1, [r7, 0x14]
- movs r5, 0xF
- lsrs r1, 4
- ldrb r4, [r3]
- movs r2, 0x10
- negs r2, r2
- adds r0, r2, 0
- ands r0, r4
- orrs r0, r1
- strb r0, [r3]
- ldrb r1, [r7, 0x15]
- lsls r1, 28
- lsrs r1, 24
- ands r0, r5
- orrs r0, r1
- strb r0, [r3]
- ldrb r0, [r7, 0x15]
- lsrs r0, 4
- ands r5, r0
- ldrb r0, [r3, 0x1]
- ands r2, r0
- orrs r2, r5
- strb r2, [r3, 0x1]
- ldrb r1, [r7, 0x16]
- lsls r1, 29
- lsrs r1, 17
- ldr r0, [r3]
- ldr r2, =0xfffc0fff
- ands r0, r2
- orrs r0, r1
- str r0, [r3]
- ldrb r0, [r7, 0x17]
- lsls r0, 26
- lsrs r0, 26
- strb r0, [r3, 0x3]
- ldrh r0, [r7, 0xC]
- ldrh r1, [r7, 0xE]
- cmp r0, r1
- bcs _081AE96C
- strh r0, [r7, 0xE]
-_081AE96C:
- ldrb r0, [r7, 0x10]
- ldrb r2, [r7, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- bl FillWindowPixelBuffer
- ldrh r1, [r7, 0x18]
- ldrh r3, [r7, 0xE]
- adds r0, r7, 0
- movs r2, 0
- bl ListMenuPrintEntries
- adds r0, r7, 0
- bl ListMenuDrawCursor
- adds r0, r7, 0
- movs r1, 0x1
- bl ListMenuCallSelectionChangedCallback
- mov r0, r8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ListMenuInitInternal
-
- thumb_func_start ListMenuPrint
-@ void ListMenuPrint(struct ListMenu *listMenu, u8 *str, u8 x, u8 y)
-ListMenuPrint: @ 81AE9B4
- push {r4-r7,lr}
- sub sp, 0x18
- adds r4, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r12, r3
- ldr r5, =gUnknown_03006300
- ldrb r1, [r5, 0x3]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _081AEA20
- add r1, sp, 0x14
- ldr r2, [r5]
- lsls r0, r2, 24
- lsrs r0, 28
- movs r3, 0
- strb r0, [r1]
- lsls r0, r2, 28
- lsrs r0, 28
- strb r0, [r1, 0x1]
- lsls r0, r2, 20
- lsrs r0, 28
- strb r0, [r1, 0x2]
- ldrb r0, [r4, 0x10]
- lsls r1, r2, 1
- lsrs r1, 25
- lsls r2, 14
- lsrs r2, 26
- str r2, [sp]
- str r3, [sp, 0x4]
- add r2, sp, 0x14
- str r2, [sp, 0x8]
- movs r2, 0x1
- negs r2, r2
- str r2, [sp, 0xC]
- str r6, [sp, 0x10]
- adds r2, r7, 0
- mov r3, r12
- bl AddTextPrinterParameterized2
- ldrb r1, [r5, 0x3]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r5, 0x3]
- b _081AEA5E
- .pool
-_081AEA20:
- add r2, sp, 0x14
- ldrb r1, [r4, 0x15]
- lsls r0, r1, 28
- lsrs r0, 28
- strb r0, [r2]
- ldrb r0, [r4, 0x14]
- lsrs r0, 4
- strb r0, [r2, 0x1]
- adds r0, r2, 0
- lsls r1, 24
- lsrs r1, 28
- strb r1, [r0, 0x2]
- ldrb r0, [r4, 0x10]
- ldrb r1, [r4, 0x17]
- lsls r1, 26
- lsrs r1, 26
- ldrb r2, [r4, 0x16]
- lsls r2, 29
- lsrs r2, 29
- str r2, [sp]
- str r3, [sp, 0x4]
- add r2, sp, 0x14
- str r2, [sp, 0x8]
- movs r2, 0x1
- negs r2, r2
- str r2, [sp, 0xC]
- str r6, [sp, 0x10]
- adds r2, r7, 0
- mov r3, r12
- bl AddTextPrinterParameterized2
-_081AEA5E:
- add sp, 0x18
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuPrint
-
- thumb_func_start ListMenuPrintEntries
-@ void ListMenuPrintEntries(struct ListMenu *listMenu, u16 startIndex, u16 yOffset, u16 count)
-ListMenuPrintEntries: @ 81AEA68
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp]
- lsls r3, 16
- lsrs r3, 16
- mov r10, r3
- ldrb r0, [r4, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r4, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r0, 0
- mov r8, r0
- cmp r8, r10
- bge _081AEB10
-_081AEAAA:
- ldr r0, [r4]
- mov r2, r9
- lsls r1, r2, 3
- adds r0, r1, r0
- ldr r2, [r0, 0x4]
- movs r0, 0x3
- negs r0, r0
- adds r5, r1, 0
- cmp r2, r0
- beq _081AEAC2
- ldrb r6, [r4, 0x12]
- b _081AEAC4
-_081AEAC2:
- ldrb r6, [r4, 0x11]
-_081AEAC4:
- ldr r0, [sp]
- add r0, r8
- ldr r2, [sp, 0x4]
- adds r1, r0, 0
- muls r1, r2
- ldrb r0, [r4, 0x14]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r1
- lsls r0, 24
- lsrs r2, r0, 24
- adds r7, r2, 0
- ldr r3, [r4, 0x8]
- cmp r3, 0
- beq _081AEAEE
- ldrb r0, [r4, 0x10]
- ldr r1, [r4]
- adds r1, r5, r1
- ldr r1, [r1, 0x4]
- bl _call_via_r3
-_081AEAEE:
- ldr r0, [r4]
- adds r0, r5, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r2, r6, 0
- adds r3, r7, 0
- bl ListMenuPrint
- mov r0, r9
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- movs r0, 0x1
- add r8, r0
- cmp r8, r10
- blt _081AEAAA
-_081AEB10:
- 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 ListMenuPrintEntries
-
- thumb_func_start ListMenuDrawCursor
-@ void ListMenuDrawCursor(struct ListMenu *listMenu)
-ListMenuDrawCursor: @ 81AEB20
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r6, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r6, 0x13]
- mov r8, r1
- ldrh r1, [r6, 0x1A]
- muls r1, r0
- ldrb r0, [r6, 0x14]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldrb r0, [r6, 0x17]
- lsrs r0, 6
- cmp r0, 0x1
- beq _081AEC0C
- cmp r0, 0x1
- bgt _081AEB66
- cmp r0, 0
- beq _081AEB70
- b _081AEC0C
-_081AEB66:
- cmp r0, 0x2
- beq _081AEB84
- cmp r0, 0x3
- beq _081AEBCC
- b _081AEC0C
-_081AEB70:
- ldr r1, =gText_SelectorArrow2
- adds r0, r6, 0
- mov r2, r8
- adds r3, r7, 0
- bl ListMenuPrint
- b _081AEC0C
- .pool
-_081AEB84:
- ldrb r0, [r6, 0x1E]
- cmp r0, 0xFF
- bne _081AEB94
- adds r0, r6, 0
- movs r1, 0
- bl ListMenuAddCursorObject
- strb r0, [r6, 0x1E]
-_081AEB94:
- ldrb r5, [r6, 0x1E]
- ldrb r0, [r6, 0x10]
- movs r1, 0x1
- bl GetWindowAttribute
- adds r4, r0, 0
- lsls r4, 19
- ldr r0, =0xffff0000
- adds r4, r0
- lsrs r4, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x2
- bl GetWindowAttribute
- adds r2, r0, 0
- lsls r2, 3
- adds r2, r7
- subs r2, 0x1
- lsls r2, 16
- lsrs r2, 16
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0
- bl ListMenuUpdateCursorObject
- b _081AEC0C
- .pool
-_081AEBCC:
- ldrb r0, [r6, 0x1E]
- cmp r0, 0xFF
- bne _081AEBDC
- adds r0, r6, 0
- movs r1, 0x1
- bl ListMenuAddCursorObject
- strb r0, [r6, 0x1E]
-_081AEBDC:
- ldrb r5, [r6, 0x1E]
- ldrb r0, [r6, 0x10]
- movs r1, 0x1
- bl GetWindowAttribute
- adds r4, r0, 0
- lsls r4, 3
- add r4, r8
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x2
- bl GetWindowAttribute
- adds r2, r0, 0
- lsls r2, 3
- adds r2, r7
- lsls r2, 16
- lsrs r2, 16
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0x1
- bl ListMenuUpdateCursorObject
-_081AEC0C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuDrawCursor
-
- thumb_func_start ListMenuAddCursorObject
-ListMenuAddCursorObject: @ 81AEC18
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- adds r5, r1, 0
- mov r1, sp
- movs r0, 0
- strb r0, [r1]
- movs r0, 0xA0
- strb r0, [r1, 0x1]
- ldrb r0, [r4, 0x10]
- movs r1, 0x3
- bl GetWindowAttribute
- mov r1, sp
- lsls r0, 3
- adds r0, 0x2
- strh r0, [r1, 0x2]
- ldrb r0, [r4, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- mov r1, sp
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x2
- strh r0, [r1, 0x4]
- movs r0, 0x80
- lsls r0, 7
- strh r0, [r1, 0x6]
- ldr r0, =0x0000ffff
- strh r0, [r1, 0x8]
- movs r0, 0xF
- strb r0, [r1, 0xA]
- mov r0, sp
- adds r1, r5, 0
- bl ListMenuAddCursorObjectInternal
- lsls r0, 24
- lsrs r0, 24
- add sp, 0xC
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ListMenuAddCursorObject
-
- thumb_func_start ListMenuErasePrintedCursor
-ListMenuErasePrintedCursor: @ 81AEC78
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r7, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- ldrb r1, [r7, 0x17]
- lsrs r0, r1, 6
- cmp r0, 0
- bne _081AECF4
- lsls r0, r1, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- adds r4, r0, 0
- ldrb r0, [r7, 0x16]
- lsls r0, 26
- lsrs r0, 29
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r7, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0
- bl GetMenuCursorDimensionByFont
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldrb r0, [r7, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetMenuCursorDimensionByFont
- lsls r0, 24
- lsrs r0, 24
- ldrb r6, [r7, 0x10]
- ldrb r2, [r7, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- ldrb r2, [r7, 0x13]
- mov r3, r8
- muls r3, r4
- adds r4, r3, 0
- ldrb r3, [r7, 0x14]
- lsls r3, 28
- lsrs r3, 28
- adds r3, r4
- lsls r3, 16
- lsrs r3, 16
- str r5, [sp]
- str r0, [sp, 0x4]
- adds r0, r6, 0
- bl FillWindowPixelRect
-_081AECF4:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuErasePrintedCursor
-
- thumb_func_start ListMenuUpdateSelectedRowIndexAndScrollOffset
-@ u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(int, bool8 movingDown)
-ListMenuUpdateSelectedRowIndexAndScrollOffset: @ 81AED00
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- ldrh r3, [r4, 0x1A]
- ldrh r5, [r4, 0x18]
- cmp r1, 0
- bne _081AED74
- ldrh r0, [r4, 0xE]
- cmp r0, 0x1
- bne _081AED18
- movs r2, 0
- b _081AED2A
-_081AED18:
- ldrh r0, [r4, 0xE]
- lsrs r2, r0, 1
- movs r1, 0x1
- ands r1, r0
- adds r2, r1
- subs r0, r2
- subs r0, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
-_081AED2A:
- cmp r5, 0
- bne _081AED50
- cmp r3, 0
- beq _081AEDB6
- ldr r1, [r4]
- movs r2, 0x3
- negs r2, r2
-_081AED38:
- subs r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- cmp r0, r2
- bne _081AEDBA
- cmp r3, 0
- bne _081AED38
- b _081AEDB6
-_081AED50:
- cmp r3, r2
- bls _081AED70
- ldr r1, [r4]
- movs r6, 0x3
- negs r6, r6
-_081AED5A:
- subs r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- cmp r0, r6
- bne _081AEDBA
- cmp r3, r2
- bhi _081AED5A
-_081AED70:
- subs r0, r5, 0x1
- b _081AEDE2
-_081AED74:
- ldrh r0, [r4, 0xE]
- cmp r0, 0x1
- bne _081AED7E
- movs r2, 0
- b _081AED88
-_081AED7E:
- ldrh r0, [r4, 0xE]
- lsrs r2, r0, 1
- movs r1, 0x1
- ands r1, r0
- adds r2, r1
-_081AED88:
- adds r1, r0, 0
- ldrh r0, [r4, 0xC]
- subs r0, r1
- cmp r5, r0
- bne _081AEDC0
- subs r0, r1, 0x1
- cmp r3, r0
- bge _081AEDB6
- ldr r2, [r4]
- movs r6, 0x3
- negs r6, r6
- adds r1, r0, 0
-_081AEDA0:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r2
- ldr r0, [r0, 0x4]
- cmp r0, r6
- bne _081AEDBA
- cmp r3, r1
- blt _081AEDA0
-_081AEDB6:
- movs r0, 0
- b _081AEDE8
-_081AEDBA:
- strh r3, [r4, 0x1A]
- movs r0, 0x1
- b _081AEDE8
-_081AEDC0:
- cmp r3, r2
- bcs _081AEDE0
- ldr r1, [r4]
- movs r6, 0x3
- negs r6, r6
-_081AEDCA:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- cmp r0, r6
- bne _081AEDBA
- cmp r3, r2
- bcc _081AEDCA
-_081AEDE0:
- adds r0, r5, 0x1
-_081AEDE2:
- strh r2, [r4, 0x1A]
- strh r0, [r4, 0x18]
- movs r0, 0x2
-_081AEDE8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end ListMenuUpdateSelectedRowIndexAndScrollOffset
-
- thumb_func_start ListMenuScroll
-@ void ListMenuScroll(struct ListMenu *listMenu, int a2, bool8 movingDown)
-ListMenuScroll: @ 81AEDF0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- adds r7, r5, 0
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldrh r0, [r6, 0xE]
- cmp r5, r0
- bcc _081AEE2A
- ldrb r0, [r6, 0x10]
- ldrb r2, [r6, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- bl FillWindowPixelBuffer
- ldrh r1, [r6, 0x18]
- ldrh r3, [r6, 0xE]
- adds r0, r6, 0
- movs r2, 0
- bl ListMenuPrintEntries
- b _081AEF1A
-_081AEE2A:
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r6, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r8
- cmp r1, 0
- bne _081AEEBC
- ldrb r0, [r6, 0x10]
- adds r2, r5, 0
- muls r2, r4
- lsls r2, 24
- lsrs r2, 24
- ldrb r1, [r6, 0x15]
- lsls r1, 28
- lsrs r3, r1, 4
- orrs r3, r1
- lsrs r3, 24
- movs r1, 0x1
- bl ScrollWindow
- ldrh r1, [r6, 0x18]
- adds r0, r6, 0
- movs r2, 0
- adds r3, r5, 0
- bl ListMenuPrintEntries
- ldrh r0, [r6, 0xE]
- adds r1, r0, 0
- muls r1, r4
- adds r0, r1, 0
- ldrb r4, [r6, 0x14]
- lsls r4, 28
- lsrs r4, 28
- adds r4, r0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x3
- bl GetWindowAttribute
- adds r5, r0, 0
- lsls r5, 19
- lsrs r5, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x4
- bl GetWindowAttribute
- lsls r0, 3
- subs r0, r4
- lsls r0, 16
- lsrs r0, 16
- ldrb r3, [r6, 0x10]
- ldrb r2, [r6, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- str r5, [sp]
- str r0, [sp, 0x4]
- adds r0, r3, 0
- movs r2, 0
- adds r3, r4, 0
- bl FillWindowPixelRect
- b _081AEF1A
-_081AEEBC:
- ldrb r0, [r6, 0x10]
- adds r2, r7, 0
- muls r2, r4
- lsls r2, 24
- lsrs r2, 24
- ldrb r1, [r6, 0x15]
- lsls r1, 28
- lsrs r3, r1, 4
- orrs r3, r1
- lsrs r3, 24
- movs r1, 0
- bl ScrollWindow
- ldrh r2, [r6, 0xE]
- subs r2, r7
- ldrh r1, [r6, 0x18]
- adds r1, r2
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- adds r0, r6, 0
- adds r3, r7, 0
- bl ListMenuPrintEntries
- ldrb r0, [r6, 0x10]
- movs r1, 0x3
- bl GetWindowAttribute
- lsls r0, 19
- lsrs r0, 16
- ldrb r3, [r6, 0x10]
- ldrb r2, [r6, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- str r0, [sp]
- ldrb r0, [r6, 0x14]
- lsls r0, 28
- lsrs r0, 28
- str r0, [sp, 0x4]
- adds r0, r3, 0
- movs r2, 0
- movs r3, 0
- bl FillWindowPixelRect
-_081AEF1A:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuScroll
-
- thumb_func_start ListMenuChangeSelection
-@ bool8 ListMenuChangeSelection(struct ListMenu *listMenu, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown)
-ListMenuChangeSelection: @ 81AEF28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- ldrh r0, [r4, 0x1A]
- mov r10, r0
- movs r7, 0
- movs r5, 0
- movs r0, 0
- cmp r7, r8
- bcs _081AEF90
-_081AEF56:
- adds r6, r0, 0x1
- b _081AEF76
-_081AEF5A:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r4, 0x18]
- ldrh r1, [r4, 0x1A]
- adds r0, r1
- ldr r1, [r4]
- lsls r0, 3
- adds r0, r1
- ldr r1, [r0, 0x4]
- movs r0, 0x3
- negs r0, r0
- cmp r1, r0
- bne _081AEF88
-_081AEF76:
- adds r0, r4, 0
- mov r1, r9
- bl ListMenuUpdateSelectedRowIndexAndScrollOffset
- lsls r0, 24
- lsrs r0, 24
- orrs r5, r0
- cmp r0, 0x2
- beq _081AEF5A
-_081AEF88:
- lsls r0, r6, 24
- lsrs r0, 24
- cmp r0, r8
- bcc _081AEF56
-_081AEF90:
- ldr r0, [sp]
- cmp r0, 0
- beq _081AEFEE
- cmp r5, 0x1
- beq _081AEFA6
- cmp r5, 0x1
- ble _081AEFA2
- cmp r5, 0x3
- ble _081AEFC6
-_081AEFA2:
- movs r0, 0x1
- b _081AEFF0
-_081AEFA6:
- adds r0, r4, 0
- mov r1, r10
- bl ListMenuErasePrintedCursor
- adds r0, r4, 0
- bl ListMenuDrawCursor
- adds r0, r4, 0
- movs r1, 0
- bl ListMenuCallSelectionChangedCallback
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- b _081AEFEE
-_081AEFC6:
- adds r0, r4, 0
- mov r1, r10
- bl ListMenuErasePrintedCursor
- adds r0, r4, 0
- adds r1, r7, 0
- mov r2, r9
- bl ListMenuScroll
- adds r0, r4, 0
- bl ListMenuDrawCursor
- adds r0, r4, 0
- movs r1, 0
- bl ListMenuCallSelectionChangedCallback
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
-_081AEFEE:
- movs r0, 0
-_081AEFF0:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end ListMenuChangeSelection
-
- thumb_func_start ListMenuCallSelectionChangedCallback
-@ void ListMenuCallSelectionChangedCallback(struct ListMenu *listMenu, u8 a2)
-ListMenuCallSelectionChangedCallback: @ 81AF000
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- ldr r3, [r2, 0x4]
- cmp r3, 0
- beq _081AF022
- ldrh r0, [r2, 0x18]
- ldrh r1, [r2, 0x1A]
- adds r0, r1
- ldr r1, [r2]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- adds r1, r4, 0
- bl _call_via_r3
-_081AF022:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ListMenuCallSelectionChangedCallback
-
- thumb_func_start sub_81AF028
-sub_81AF028: @ 81AF028
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r6, =gUnknown_03006300
- movs r5, 0xF
- ands r0, r5
- ldrb r3, [r6]
- mov r8, r3
- movs r4, 0x10
- negs r4, r4
- adds r3, r4, 0
- mov r7, r8
- ands r3, r7
- orrs r3, r0
- lsrs r1, 20
- ands r3, r5
- orrs r3, r1
- strb r3, [r6]
- ands r2, r5
- ldrb r0, [r6, 0x1]
- ands r4, r0
- orrs r4, r2
- strb r4, [r6, 0x1]
- ldrb r0, [r6, 0x3]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r6, 0x3]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AF028
-
- thumb_func_start sub_81AF078
-sub_81AF078: @ 81AF078
- push {lr}
- lsls r1, 24
- cmp r1, 0
- bne _081AF086
- movs r0, 0x5
- bl PlaySE
-_081AF086:
- pop {r0}
- bx r0
- thumb_func_end sub_81AF078
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/player_pc.s b/asm/player_pc.s
index 8a329a2fe..6fe4b3b85 100644
--- a/asm/player_pc.s
+++ b/asm/player_pc.s
@@ -1021,7 +1021,7 @@ sub_816B674: @ 816B674
mov r8, r1
adds r1, r7, 0
mov r2, r8
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r6, r0
@@ -1050,7 +1050,7 @@ _0816B6EA:
ldrb r0, [r4, 0xA]
adds r1, r7, 0
mov r2, r8
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl schedule_bg_copy_tilemap_to_vram
mov r1, r8
@@ -1129,7 +1129,7 @@ sub_816B798: @ 816B798
ldrb r0, [r4, 0xA]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl schedule_bg_copy_tilemap_to_vram
bl sub_81D1EC0
@@ -2476,7 +2476,7 @@ sub_816C30C: @ 816C30C
ldr r1, =gUnknown_0203BCBA
subs r4, r1, 0x2
adds r2, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldrh r1, [r4, 0x2]
ldrh r0, [r4]
adds r1, r0
@@ -2497,7 +2497,7 @@ _0816C35C:
ldrb r0, [r4, 0xA]
ldr r1, =gUnknown_0203BCBA
subs r2, r1, 0x2
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r6, r0
@@ -2584,7 +2584,7 @@ sub_816C400: @ 816C400
ldrb r0, [r5, 0xA]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldr r0, =gUnknown_0203BCC4
ldr r0, [r0]
movs r1, 0xCD
@@ -2691,7 +2691,7 @@ sub_816C4FC: @ 816C4FC
ldrb r0, [r4, 0xA]
ldr r1, =gUnknown_0203BCBA
subs r2, r1, 0x2
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
b _0816C57E
.pool
_0816C530:
@@ -2702,7 +2702,7 @@ _0816C530:
ldr r1, =gUnknown_0203BCBA
subs r4, r1, 0x2
adds r2, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldr r0, =gUnknown_0203BCC4
ldr r0, [r0]
movs r1, 0xCD
@@ -2776,7 +2776,7 @@ sub_816C5A0: @ 816C5A0
ldrb r0, [r2, 0xA]
adds r1, r4, 0x2
adds r2, r4, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
cmp r5, 0
bne _0816C60A
ldr r1, =gUnknown_0203BCC4
@@ -3359,7 +3359,7 @@ sub_816CB04: @ 816CB04
ldrb r0, [r5, 0xA]
adds r1, r4, 0x2
adds r2, r4, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
bl sub_816C110
bl sub_816C140
bl sub_816BD04
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 14dc569fe..3b41afb55 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -3469,7 +3469,7 @@ sub_81C5B4C: @ 81C5B4C
ldr r4, =gUnknown_0203CF38
subs r2, r4, 0x2
adds r1, r4, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldr r0, =gUnknown_0203CF2C
ldr r0, [r0]
ldr r0, [r0]
@@ -3545,7 +3545,7 @@ _081C5C12:
adds r1, r4, 0
adds r1, 0x8
adds r2, r4, 0x6
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldrh r1, [r4, 0x8]
ldrh r0, [r4, 0x6]
adds r1, r0
@@ -3572,7 +3572,7 @@ _081C5C5C:
mov r8, r1
mov r2, r8
subs r2, 0x2
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r6, r0
@@ -4642,7 +4642,7 @@ sub_81C65CC: @ 81C65CC
ldrb r0, [r4]
adds r1, r6, 0
adds r2, r7, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
bl sub_81C5924
bl sub_81C59BC
bl sub_81C5314
@@ -4953,7 +4953,7 @@ sub_81C68B0: @ 81C68B0
ldrb r0, [r4]
ldr r1, =gUnknown_0203CF38
subs r2, r1, 0x2
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
b _081C6940
.pool
_081C68F8:
@@ -4964,7 +4964,7 @@ _081C68F8:
ldr r4, =gUnknown_0203CF38
subs r2, r4, 0x2
adds r1, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0
bl sub_81C7028
subs r4, 0x8
@@ -5054,7 +5054,7 @@ _081C69A8:
ldrb r0, [r5]
adds r1, r7, 0
mov r2, r8
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r3, 0x2
ldrsh r0, [r5, r3]
cmp r0, r4
@@ -5109,7 +5109,7 @@ sub_81C6A14: @ 81C6A14
ldrb r0, [r4]
adds r1, r5, 0
adds r2, r7, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0x2
ldrsh r2, [r4, r0]
ldrh r0, [r5]
diff --git a/asm/rom_8011DC0.s b/asm/rom_8011DC0.s
index b069ec58e..4d50a5271 100644
--- a/asm/rom_8011DC0.s
+++ b/asm/rom_8011DC0.s
@@ -1192,7 +1192,7 @@ sub_8012F64: @ 8012F64
ldrb r0, [r4, 0x12]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r4, 0x10]
bl ClearWindowTilemap
ldrb r0, [r4, 0xF]
@@ -2394,7 +2394,7 @@ _08013A8C:
ldrb r0, [r6, 0xE]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r6, 0xC]
bl ClearWindowTilemap
ldrb r0, [r6, 0xB]
@@ -4511,7 +4511,7 @@ _08014E16:
ldrb r0, [r5, 0x12]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r5, 0xF]
@@ -4567,7 +4567,7 @@ _08014EA8:
ldrb r0, [r5, 0x12]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r5, 0xF]
@@ -4923,7 +4923,7 @@ _08015204:
ldrb r0, [r7, 0xE]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r7, 0xD]
@@ -5292,7 +5292,7 @@ _08015564:
ldrb r0, [r5, 0xE]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r5, 0xB]
@@ -8545,7 +8545,7 @@ _08017228:
ldrb r0, [r4]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r5]
movs r1, 0x1
bl sub_819746C
@@ -8565,7 +8565,7 @@ _08017264:
ldrb r0, [r6]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r5]
movs r1, 0x1
bl sub_819746C
@@ -8669,7 +8669,7 @@ _0801733E:
ldrb r0, [r4]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r6]
bl RemoveWindow
mov r7, r9
@@ -8691,7 +8691,7 @@ _08017368:
ldrb r0, [r1]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r6]
bl RemoveWindow
mov r3, r9
diff --git a/asm/shop.s b/asm/shop.s
index c42af8ef1..ae60eb364 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -1985,7 +1985,7 @@ _080E0AEA:
adds r1, r2, r3
subs r3, 0x2
adds r2, r3
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r5, r0
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/common_syms/list_menu.txt b/common_syms/list_menu.txt
new file mode 100644
index 000000000..a346edeef
--- /dev/null
+++ b/common_syms/list_menu.txt
@@ -0,0 +1,2 @@
+gUnknown_03006300
+gMultiuseListMenuTemplate
diff --git a/constants/battle_move_constants.inc b/constants/battle_move_constants.inc
deleted file mode 100644
index a05da3db3..000000000
--- a/constants/battle_move_constants.inc
+++ /dev/null
@@ -1,15 +0,0 @@
- .set TARGET_SELECTED_POKEMON, 0
-
- .set F_TARGET_SPECIAL, 1 << 0
- .set F_TARGET_RANDOM, 1 << 2
- .set F_TARGET_BOTH_ENEMIES, 1 << 3
- .set F_TARGET_USER, 1 << 4
- .set F_TARGET_ALL_EXCEPT_USER, 1 << 5
- .set F_TARGET_ENEMY_SIDE, 1 << 6
-
- .set F_MAKES_CONTACT, 1 << 0
- .set F_AFFECTED_BY_PROTECT, 1 << 1
- .set F_AFFECTED_BY_MAGIC_COAT, 1 << 2
- .set F_AFFECTED_BY_SNATCH, 1 << 3
- .set F_MIRROR_MOVE_COMPATIBLE, 1 << 4
- .set F_AFFECTED_BY_KINGS_ROCK, 1 << 5
diff --git a/constants/constants.inc b/constants/constants.inc
index 10d582eb1..28f2b2658 100644
--- a/constants/constants.inc
+++ b/constants/constants.inc
@@ -3,7 +3,6 @@
.include "constants/contest_constants.inc"
.include "constants/pokemon_data_constants.inc"
.include "constants/item_data_constants.inc"
- .include "constants/battle_move_constants.inc"
.include "constants/battle_frontier_constants.inc"
.include "constants/map_constants.inc"
.include "constants/berry_constants.inc"
diff --git a/data/battle_link_817C95C.s b/data/battle_link_817C95C.s
deleted file mode 100644
index 24f70c79c..000000000
--- a/data/battle_link_817C95C.s
+++ /dev/null
@@ -1,174 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 1
-gUnknown_0860A4AC:: @ 860A4AC
- .2byte 0x0044, 0x005a, 0x0075, 0x00f3, 0x0020, 0x00af, 0x00b3, 0x00ed, 0x0149, 0x0108, 0x011c, 0x0143, 0x008a, 0x0137, 0x00ad, 0x00dc
- .2byte 0x000c, 0x00da, 0x00d8, 0x011b, 0x00d9, 0x0117, 0xffff, 0x00de, 0x0095, 0xffff
-
- .align 1
-gUnknown_0860A4E0:: @ 860A4E0
- .2byte 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, 0x0005, 0x0004, 0x0005, 0x0001, 0x0003, 0x0001
- .2byte 0x0003, 0x0005, 0x0001, 0x0007, 0x0001, 0x0007, 0x0007, 0x0001, 0x0005, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001
- .2byte 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0007, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0004
- .2byte 0x0005, 0x0002, 0x0004, 0x0001, 0x0004, 0x0001, 0x0007, 0x0002, 0x0001, 0x0005, 0x0007, 0x0003, 0x0003, 0x0004, 0x0003, 0x0003
- .2byte 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0005, 0x0001, 0x0001, 0x0004, 0x0005, 0x0003, 0x0001, 0x0002, 0x0001, 0x0005
- .2byte 0x0004, 0x0003, 0x0006, 0x0004, 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001, 0x0001, 0x0007
- .2byte 0x0002, 0x0002, 0x0001, 0x0001, 0x0004, 0x0004, 0x0004, 0x0001, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0007, 0x0007
- .2byte 0x0006, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0001, 0x0001, 0x0004, 0x0004
- .2byte 0x0003, 0x0003, 0x0003, 0x0001, 0x0004, 0x0007, 0x0007, 0x0005, 0x0007, 0x0001, 0x0007, 0x0001, 0x0005, 0x0000, 0x0004, 0x0004
- .2byte 0x0004, 0x0004, 0x0004, 0x0002, 0x0002, 0x0006, 0x0003, 0x0006, 0x0004, 0x0004, 0x0002, 0x0005, 0x0002, 0x0001, 0x0001, 0x0006
- .2byte 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003
-
- .align 1
-gUnknown_0860A68C:: @ 860A68C
- .2byte 0x0004, 0xfffd, 0xfffa
-
- .align 1
-gUnknown_0860A692:: @ 860A692
- .2byte 0x0004, 0x0004, 0x0006, 0x0006, 0x0007, 0x0006, 0x0002
-
- .align 1
-gUnknown_0860A6A0:: @ 860A6A0
- .2byte 0x0091, 0x0003, 0x00fa, 0x0003, 0x00be, 0x0003, 0x0080, 0x0003, 0x006e, 0x0003, 0x0098, 0x0003, 0x0143, 0x0003, 0x0123, 0x0003
- .2byte 0x007f, 0x0003, 0x014a, 0x0003, 0x0039, 0x0003, 0x0134, 0x0003, 0x0038, 0x0003, 0x003d, 0x0003, 0x015a, 0x0000, 0x0037, 0x0003
- .2byte 0x0160, 0x0003, 0x0137, 0x0003, 0x0057, 0x0003, 0x004c, 0xfffc, 0x013b, 0xfffc, 0x00ac, 0xfffc, 0x0035, 0xfffc, 0x00dd, 0xfffc
- .2byte 0x007e, 0xfffc, 0x0101, 0xfffc, 0x0034, 0xfffc, 0x0133, 0xfffc, 0x012b, 0xfffc, 0x011c, 0xfffc, 0x0053, 0xfffc, 0x0007, 0xfffc
- .2byte 0x004c, 0xfffc, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A728:: @ 860A728
- .2byte 0x013b, 0x0003, 0x00ac, 0x0003, 0x0035, 0x0003, 0x00dd, 0x0003, 0x007e, 0x0003, 0x0101, 0x0003, 0x0034, 0x0003, 0x0133, 0x0003
- .2byte 0x012b, 0x0003, 0x011c, 0x0003, 0x0053, 0x0003, 0x0007, 0x0003, 0x004c, 0x0005, 0x00eb, 0x0003, 0x00ea, 0x0003, 0x00ec, 0x0003
- .2byte 0x0137, 0x0003, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A770:: @ 860A770
- .2byte 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A77C:: @ 860A77C
- .2byte 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A788:: @ 860A788
- .2byte 0x0055, 0x0003, 0x0009, 0x0003, 0x00d1, 0x0003, 0x0054, 0x0003, 0x00c0, 0x0003, 0x015f, 0x0003, 0x0056, 0x0000, 0x0057, 0x0003
- .2byte 0x0158, 0x0003, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A7B0:: @ 860A7B0
- .2byte 0x0005, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003
-
- .align 1
-gUnknown_0860A7BE:: @ 860A7BE
- .2byte 0x0005, 0x0005, 0x0005, 0x0005, 0x0005
-
- .align 1
-gUnknown_0860A7C8:: @ 860A7C8
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7CA:: @ 860A7CA
- .2byte 0x0005
-
- .align 1
-gUnknown_0860A7CC:: @ 860A7CC
- .2byte 0x0005
-
- .align 1
-gUnknown_0860A7CE:: @ 860A7CE
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D0:: @ 860A7D0
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D2:: @ 860A7D2
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7D4:: @ 860A7D4
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D6:: @ 860A7D6
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7D8:: @ 860A7D8
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7DA:: @ 860A7DA
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7DC:: @ 860A7DC
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7DE:: @ 860A7DE
- .2byte 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
-
- .align 1
-gUnknown_0860A7EC:: @ 860A7EC
- .2byte 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
-
- .align 1
-gUnknown_0860A7FA:: @ 860A7FA
- .2byte 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
-
- .align 1
-gUnknown_0860A808:: @ 860A808
- .2byte 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
-
- .align 1
-gUnknown_0860A816:: @ 860A816
- .2byte 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
-
- .align 1
-gUnknown_0860A824:: @ 860A824
- .2byte 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe
-
- .align 2
-gUnknown_0860A834:: @ 860A834
- .4byte gUnknown_0860A4E0
- .4byte gUnknown_0860A68C
- .4byte gUnknown_0860A692
- .4byte gUnknown_0860A6A0
- .4byte gUnknown_0860A728
- .4byte gUnknown_0860A770
- .4byte gUnknown_0860A77C
- .4byte gUnknown_0860A788
- .4byte gUnknown_0860A7B0
- .4byte gUnknown_0860A7BE
- .4byte gUnknown_0860A7C8
- .4byte gUnknown_0860A7CA
- .4byte gUnknown_0860A7CC
- .4byte gUnknown_0860A7CE
- .4byte gUnknown_0860A7D0
- .4byte gUnknown_0860A7D2
- .4byte gUnknown_0860A7D4
- .4byte gUnknown_0860A7D6
- .4byte gUnknown_0860A7D8
- .4byte gUnknown_0860A7DA
- .4byte gUnknown_0860A7DA
- .4byte gUnknown_0860A7DC
- .4byte gUnknown_0860A7DE
- .4byte gUnknown_0860A7EC
- .4byte gUnknown_0860A7FA
- .4byte gUnknown_0860A808
- .4byte gUnknown_0860A816
- .4byte gUnknown_0860A824
-
- .align 1
-gUnknown_0860A8A4:: @ 860A8A4
- .2byte 0x0097, 0x00b2, 0x00bc, 0x008c, 0x00b4, 0x00b5, 0x0093, 0x006a, 0x0091, 0x005e, 0x0030, 0x002a, 0x0095, 0x001c, 0x001d, 0x0064
- .2byte 0x0060, 0xffff
-
diff --git a/data/battle_moves.inc b/data/battle_moves.inc
deleted file mode 100644
index c5c090546..000000000
--- a/data/battle_moves.inc
+++ /dev/null
@@ -1,3906 +0,0 @@
- .align 2
-gBattleMoves:: @ 831C898
-@ -
- .byte 0x00 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 0 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Pound
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Karate Chop
- .byte 0x2b @ effect
- .byte 50 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double Slap
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Comet Punch
- .byte 0x1d @ effect
- .byte 18 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mega Punch
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Pay Day
- .byte 0x22 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Punch
- .byte 0x04 @ effect
- .byte 75 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Ice Punch
- .byte 0x05 @ effect
- .byte 75 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thunder Punch
- .byte 0x06 @ effect
- .byte 75 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Scratch
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vice Grip
- .byte 0x00 @ effect
- .byte 55 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Guillotine
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Razor Wind
- .byte 0x27 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Swords Dance
- .byte 0x32 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Cut
- .byte 0x00 @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Gust
- .byte 0x95 @ effect
- .byte 40 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Wing Attack
- .byte 0x00 @ effect
- .byte 60 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Whirlwind
- .byte 0x1c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -6 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fly
- .byte 0x9b @ effect
- .byte 70 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Bind
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slam
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vine Whip
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Stomp
- .byte 0x96 @ effect
- .byte 65 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double Kick
- .byte 0x2c @ effect
- .byte 30 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mega Kick
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Jump Kick
- .byte 0x2d @ effect
- .byte 70 @ power
- .byte TYPE_FIGHTING
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rolling Kick
- .byte 0x1f @ effect
- .byte 60 @ power
- .byte TYPE_FIGHTING
- .byte 85 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sand-Attack
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Headbutt
- .byte 0x1f @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Horn Attack
- .byte 0x00 @ effect
- .byte 65 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Fury Attack
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Horn Drill
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Tackle
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Body Slam
- .byte 0x06 @ effect
- .byte 85 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Wrap
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Take Down
- .byte 0x30 @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thrash
- .byte 0x1b @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double-Edge
- .byte 0xc6 @ effect
- .byte 120 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Tail Whip
- .byte 0x13 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Sting
- .byte 0x02 @ effect
- .byte 15 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Twineedle
- .byte 0x4d @ effect
- .byte 25 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Pin Missile
- .byte 0x1d @ effect
- .byte 14 @ power
- .byte TYPE_BUG
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leer
- .byte 0x13 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bite
- .byte 0x1f @ effect
- .byte 60 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Growl
- .byte 0x12 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Roar
- .byte 0x1c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -6 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sing
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Supersonic
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sonic Boom
- .byte 0x82 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Disable
- .byte 0x56 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Acid
- .byte 0x45 @ effect
- .byte 40 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Ember
- .byte 0x04 @ effect
- .byte 40 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flamethrower
- .byte 0x04 @ effect
- .byte 95 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mist
- .byte 0x2e @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Water Gun
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hydro Pump
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_WATER
- .byte 80 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Surf
- .byte 0x00 @ effect
- .byte 95 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Ice Beam
- .byte 0x05 @ effect
- .byte 95 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Blizzard
- .byte 0x05 @ effect
- .byte 120 @ power
- .byte TYPE_ICE
- .byte 70 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psybeam
- .byte 0x4c @ effect
- .byte 65 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bubble Beam
- .byte 0x46 @ effect
- .byte 65 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aurora Beam
- .byte 0x44 @ effect
- .byte 65 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hyper Beam
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Peck
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Drill Peck
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Submission
- .byte 0x30 @ effect
- .byte 80 @ power
- .byte TYPE_FIGHTING
- .byte 80 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Low Kick
- .byte 0xc4 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Counter
- .byte 0x59 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte -5 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_MAKES_CONTACT @ misc. flags
-
-@ Seismic Toss
- .byte 0x57 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Strength
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Absorb
- .byte 0x03 @ effect
- .byte 20 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mega Drain
- .byte 0x03 @ effect
- .byte 40 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leech Seed
- .byte 0x54 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Growth
- .byte 0x0d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Razor Leaf
- .byte 0x2b @ effect
- .byte 55 @ power
- .byte TYPE_GRASS
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Solar Beam
- .byte 0x97 @ effect
- .byte 120 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Powder
- .byte 0x42 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 75 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Stun Spore
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 75 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sleep Powder
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Petal Dance
- .byte 0x1b @ effect
- .byte 70 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ String Shot
- .byte 0x14 @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 95 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dragon Rage
- .byte 0x29 @ effect
- .byte 1 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Spin
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_FIRE
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder Shock
- .byte 0x06 @ effect
- .byte 40 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunderbolt
- .byte 0x06 @ effect
- .byte 95 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder Wave
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder
- .byte 0x98 @ effect
- .byte 120 @ power
- .byte TYPE_ELECTRIC
- .byte 70 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rock Throw
- .byte 0x00 @ effect
- .byte 50 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Earthquake
- .byte 0x93 @ effect
- .byte 100 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fissure
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_GROUND
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dig
- .byte 0x9b @ effect
- .byte 60 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Toxic
- .byte 0x21 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Confusion
- .byte 0x4c @ effect
- .byte 50 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psychic
- .byte 0x48 @ effect
- .byte 90 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hypnosis
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 60 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Meditate
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Agility
- .byte 0x34 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Quick Attack
- .byte 0x67 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rage
- .byte 0x51 @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Teleport
- .byte 0x99 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Night Shade
- .byte 0x57 @ effect
- .byte 1 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mimic
- .byte 0x52 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Screech
- .byte 0x3b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Double Team
- .byte 0x10 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Recover
- .byte 0x20 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Harden
- .byte 0x0b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Minimize
- .byte 0x6c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Smokescreen
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Confuse Ray
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Withdraw
- .byte 0x0b @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Defense Curl
- .byte 0x9c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Barrier
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Light Screen
- .byte 0x23 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Haze
- .byte 0x19 @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Reflect
- .byte 0x41 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Focus Energy
- .byte 0x2f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Bide
- .byte 0x1a @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Metronome
- .byte 0x53 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Mirror Move
- .byte 0x09 @ effect
- .byte 0 @ power
- .byte TYPE_FLYING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Self-Destruct
- .byte 0x07 @ effect
- .byte 200 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Egg Bomb
- .byte 0x00 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Lick
- .byte 0x06 @ effect
- .byte 20 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Smog
- .byte 0x02 @ effect
- .byte 20 @ power
- .byte TYPE_POISON
- .byte 70 @ accuracy
- .byte 20 @ PP
- .byte 40 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sludge
- .byte 0x02 @ effect
- .byte 65 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bone Club
- .byte 0x1f @ effect
- .byte 65 @ power
- .byte TYPE_GROUND
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Blast
- .byte 0x04 @ effect
- .byte 120 @ power
- .byte TYPE_FIRE
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Waterfall
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Clamp
- .byte 0x2a @ effect
- .byte 35 @ power
- .byte TYPE_WATER
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Swift
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Skull Bash
- .byte 0x91 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spike Cannon
- .byte 0x1d @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Constrict
- .byte 0x46 @ effect
- .byte 10 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Amnesia
- .byte 0x36 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Kinesis
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Soft-Boiled
- .byte 0x9d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hi Jump Kick
- .byte 0x2d @ effect
- .byte 85 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Glare
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dream Eater
- .byte 0x08 @ effect
- .byte 100 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Gas
- .byte 0x42 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 55 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Barrage
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leech Life
- .byte 0x03 @ effect
- .byte 20 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Lovely Kiss
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sky Attack
- .byte 0x4b @ effect
- .byte 140 @ power
- .byte TYPE_FLYING
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Transform
- .byte 0x39 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Bubble
- .byte 0x46 @ effect
- .byte 20 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dizzy Punch
- .byte 0x4c @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spore
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flash
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 70 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psywave
- .byte 0x58 @ effect
- .byte 1 @ power
- .byte TYPE_PSYCHIC
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Splash
- .byte 0x55 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Acid Armor
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Crabhammer
- .byte 0x2b @ effect
- .byte 90 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Explosion
- .byte 0x07 @ effect
- .byte 250 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fury Swipes
- .byte 0x1d @ effect
- .byte 18 @ power
- .byte TYPE_NORMAL
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Bonemerang
- .byte 0x2c @ effect
- .byte 50 @ power
- .byte TYPE_GROUND
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rest
- .byte 0x25 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Rock Slide
- .byte 0x1f @ effect
- .byte 75 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hyper Fang
- .byte 0x1f @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sharpen
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Conversion
- .byte 0x1e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Tri Attack
- .byte 0x24 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Super Fang
- .byte 0x28 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slash
- .byte 0x2b @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Substitute
- .byte 0x4f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Struggle
- .byte 0x30 @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 1 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sketch
- .byte 0x5f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 1 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Triple Kick
- .byte 0x68 @ effect
- .byte 10 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thief
- .byte 0x69 @ effect
- .byte 40 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spider Web
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mind Reader
- .byte 0x5e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Nightmare
- .byte 0x6b @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flame Wheel
- .byte 0x7d @ effect
- .byte 60 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Snore
- .byte 0x5c @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Curse
- .byte 0x6d @ effect
- .byte 0 @ power
- .byte TYPE_MYSTERY
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Flail
- .byte 0x63 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Conversion 2
- .byte 0x5d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Aeroblast
- .byte 0x2b @ effect
- .byte 100 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cotton Spore
- .byte 0x3c @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Reversal
- .byte 0x63 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spite
- .byte 0x64 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Powder Snow
- .byte 0x05 @ effect
- .byte 40 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Protect
- .byte 0x6f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Mach Punch
- .byte 0x67 @ effect
- .byte 40 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Scary Face
- .byte 0x3c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Faint Attack
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_DARK
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sweet Kiss
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Belly Drum
- .byte 0x8e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Sludge Bomb
- .byte 0x02 @ effect
- .byte 90 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mud-Slap
- .byte 0x49 @ effect
- .byte 20 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Octazooka
- .byte 0x49 @ effect
- .byte 65 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Spikes
- .byte 0x70 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ENEMY_SIDE
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Zap Cannon
- .byte 0x06 @ effect
- .byte 100 @ power
- .byte TYPE_ELECTRIC
- .byte 50 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Foresight
- .byte 0x71 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Destiny Bond
- .byte 0x62 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Perish Song
- .byte 0x72 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Icy Wind
- .byte 0x46 @ effect
- .byte 55 @ power
- .byte TYPE_ICE
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Detect
- .byte 0x6f @ effect
- .byte 0 @ power
- .byte TYPE_FIGHTING
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Bone Rush
- .byte 0x1d @ effect
- .byte 25 @ power
- .byte TYPE_GROUND
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Lock-On
- .byte 0x5e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Outrage
- .byte 0x1b @ effect
- .byte 90 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sandstorm
- .byte 0x73 @ effect
- .byte 0 @ power
- .byte TYPE_ROCK
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Giga Drain
- .byte 0x03 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Endure
- .byte 0x74 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Charm
- .byte 0x3a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rollout
- .byte 0x75 @ effect
- .byte 30 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ False Swipe
- .byte 0x65 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Swagger
- .byte 0x76 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Milk Drink
- .byte 0x9d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Spark
- .byte 0x06 @ effect
- .byte 65 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Fury Cutter
- .byte 0x77 @ effect
- .byte 10 @ power
- .byte TYPE_BUG
- .byte 95 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Steel Wing
- .byte 0x8a @ effect
- .byte 70 @ power
- .byte TYPE_STEEL
- .byte 90 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mean Look
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Attract
- .byte 0x78 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sleep Talk
- .byte 0x61 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Heal Bell
- .byte 0x66 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Return
- .byte 0x79 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Present
- .byte 0x7a @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Frustration
- .byte 0x7b @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Safeguard
- .byte 0x7c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Pain Split
- .byte 0x5b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sacred Fire
- .byte 0x7d @ effect
- .byte 100 @ power
- .byte TYPE_FIRE
- .byte 95 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Magnitude
- .byte 0x7e @ effect
- .byte 1 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dynamic Punch
- .byte 0x4c @ effect
- .byte 100 @ power
- .byte TYPE_FIGHTING
- .byte 50 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Megahorn
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_BUG
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Dragon Breath
- .byte 0x06 @ effect
- .byte 60 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Baton Pass
- .byte 0x7f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Encore
- .byte 0x5a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Pursuit
- .byte 0x80 @ effect
- .byte 40 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rapid Spin
- .byte 0x81 @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sweet Scent
- .byte 0x18 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Iron Tail
- .byte 0x45 @ effect
- .byte 100 @ power
- .byte TYPE_STEEL
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Metal Claw
- .byte 0x8b @ effect
- .byte 50 @ power
- .byte TYPE_STEEL
- .byte 95 @ accuracy
- .byte 35 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vital Throw
- .byte 0x4e @ effect
- .byte 70 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Morning Sun
- .byte 0x84 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Synthesis
- .byte 0x85 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Moonlight
- .byte 0x86 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hidden Power
- .byte 0x87 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cross Chop
- .byte 0x2b @ effect
- .byte 100 @ power
- .byte TYPE_FIGHTING
- .byte 80 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Twister
- .byte 0x92 @ effect
- .byte 40 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rain Dance
- .byte 0x88 @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Sunny Day
- .byte 0x89 @ effect
- .byte 0 @ power
- .byte TYPE_FIRE
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Crunch
- .byte 0x48 @ effect
- .byte 80 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mirror Coat
- .byte 0x90 @ effect
- .byte 1 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte -5 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags
-
-@ Psych Up
- .byte 0x8f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Extreme Speed
- .byte 0x67 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Ancient Power
- .byte 0x8c @ effect
- .byte 60 @ power
- .byte TYPE_ROCK
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Shadow Ball
- .byte 0x48 @ effect
- .byte 80 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Future Sight
- .byte 0x94 @ effect
- .byte 80 @ power
- .byte TYPE_PSYCHIC
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Rock Smash
- .byte 0x45 @ effect
- .byte 20 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Whirlpool
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_WATER
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Beat Up
- .byte 0x9a @ effect
- .byte 10 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fake Out
- .byte 0x9e @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Uproar
- .byte 0x9f @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Stockpile
- .byte 0xa0 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Spit Up
- .byte 0xa1 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Swallow
- .byte 0xa2 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Heat Wave
- .byte 0x04 @ effect
- .byte 100 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hail
- .byte 0xa4 @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Torment
- .byte 0xa5 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flatter
- .byte 0xa6 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Will-O-Wisp
- .byte 0xa7 @ effect
- .byte 0 @ power
- .byte TYPE_FIRE
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Memento
- .byte 0xa8 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Facade
- .byte 0xa9 @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Focus Punch
- .byte 0xaa @ effect
- .byte 150 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -3 @ priority
- .4byte F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Smelling Salt
- .byte 0xab @ effect
- .byte 60 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Follow Me
- .byte 0xac @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Nature Power
- .byte 0xad @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Charge
- .byte 0xae @ effect
- .byte 0 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Taunt
- .byte 0xaf @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Helping Hand
- .byte 0xb0 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 5 @ priority
- .4byte 0 @ misc. flags
-
-@ Trick
- .byte 0xb1 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Role Play
- .byte 0xb2 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Wish
- .byte 0xb3 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Assist
- .byte 0xb4 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Ingrain
- .byte 0xb5 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Superpower
- .byte 0xb6 @ effect
- .byte 120 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Magic Coat
- .byte 0xb7 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 4 @ priority
- .4byte 0 @ misc. flags
-
-@ Recycle
- .byte 0xb8 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Revenge
- .byte 0xb9 @ effect
- .byte 60 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -4 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Brick Break
- .byte 0xba @ effect
- .byte 75 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Yawn
- .byte 0xbb @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Knock Off
- .byte 0xbc @ effect
- .byte 20 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Endeavor
- .byte 0xbd @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Eruption
- .byte 0xbe @ effect
- .byte 150 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Skill Swap
- .byte 0xbf @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Imprison
- .byte 0xc0 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Refresh
- .byte 0xc1 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Grudge
- .byte 0xc2 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Snatch
- .byte 0xc3 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 4 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags
-
-@ Secret Power
- .byte 0xc5 @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dive
- .byte 0x9b @ effect
- .byte 60 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Arm Thrust
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Camouflage
- .byte 0xd5 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Tail Glow
- .byte 0x35 @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Luster Purge
- .byte 0x48 @ effect
- .byte 70 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mist Ball
- .byte 0x47 @ effect
- .byte 70 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Feather Dance
- .byte 0x3a @ effect
- .byte 0 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Teeter Dance
- .byte 0xc7 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Blaze Kick
- .byte 0xc8 @ effect
- .byte 85 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mud Sport
- .byte 0xc9 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Ice Ball
- .byte 0x75 @ effect
- .byte 30 @ power
- .byte TYPE_ICE
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Needle Arm
- .byte 0x96 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slack Off
- .byte 0x20 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hyper Voice
- .byte 0x00 @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Fang
- .byte 0xca @ effect
- .byte 50 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Crush Claw
- .byte 0x45 @ effect
- .byte 75 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 10 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Blast Burn
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hydro Cannon
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_WATER
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Meteor Mash
- .byte 0x8b @ effect
- .byte 100 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Astonish
- .byte 0x96 @ effect
- .byte 30 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Weather Ball
- .byte 0xcb @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aromatherapy
- .byte 0x66 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Fake Tears
- .byte 0x3e @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Air Cutter
- .byte 0x2b @ effect
- .byte 55 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Overheat
- .byte 0xcc @ effect
- .byte 140 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Odor Sleuth
- .byte 0x71 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rock Tomb
- .byte 0x46 @ effect
- .byte 50 @ power
- .byte TYPE_ROCK
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Silver Wind
- .byte 0x8c @ effect
- .byte 60 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Metal Sound
- .byte 0x3e @ effect
- .byte 0 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Grass Whistle
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 55 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Tickle
- .byte 0xcd @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cosmic Power
- .byte 0xce @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Water Spout
- .byte 0xbe @ effect
- .byte 150 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Signal Beam
- .byte 0x4c @ effect
- .byte 75 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Shadow Punch
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_GHOST
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Extrasensory
- .byte 0x96 @ effect
- .byte 80 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sky Uppercut
- .byte 0xcf @ effect
- .byte 85 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sand Tomb
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_GROUND
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sheer Cold
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_ICE
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Muddy Water
- .byte 0x49 @ effect
- .byte 95 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bullet Seed
- .byte 0x1d @ effect
- .byte 10 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aerial Ace
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_FLYING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Icicle Spear
- .byte 0x1d @ effect
- .byte 10 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Iron Defense
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_STEEL
- .byte 0 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Block
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Howl
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Dragon Claw
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Frenzy Plant
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_GRASS
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bulk Up
- .byte 0xd0 @ effect
- .byte 0 @ power
- .byte TYPE_FIGHTING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Bounce
- .byte 0x9b @ effect
- .byte 85 @ power
- .byte TYPE_FLYING
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mud Shot
- .byte 0x46 @ effect
- .byte 55 @ power
- .byte TYPE_GROUND
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Tail
- .byte 0xd1 @ effect
- .byte 50 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Covet
- .byte 0x69 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Volt Tackle
- .byte 0xc6 @ effect
- .byte 120 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Magical Leaf
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Water Sport
- .byte 0xd2 @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Calm Mind
- .byte 0xd3 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Leaf Blade
- .byte 0x2b @ effect
- .byte 70 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Dragon Dance
- .byte 0xd4 @ effect
- .byte 0 @ power
- .byte TYPE_DRAGON
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Rock Blast
- .byte 0x1d @ effect
- .byte 25 @ power
- .byte TYPE_ROCK
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Shock Wave
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_ELECTRIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Water Pulse
- .byte 0x4c @ effect
- .byte 60 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Doom Desire
- .byte 0x94 @ effect
- .byte 120 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Psycho Boost
- .byte 0xcc @ effect
- .byte 140 @ power
- .byte TYPE_PSYCHIC
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
diff --git a/data/data2b.s b/data/data2b.s
index b65087d7a..8d759b0b2 100644
--- a/data/data2b.s
+++ b/data/data2b.s
@@ -4866,21 +4866,3 @@ gUnknown_0831ACDC:: @ 831ACDC
.align 2
gUnknown_0831ACE0:: @ 831ACE0
.byte 0xe0, 0xf0, 0xf0, 0xe0, 0xe0, 0x00, 0x00, 0x00
-
-@ 831ACE8
- .include "data/type_effectiveness.inc"
-
-@ 831AE38
- .include "data/text/type_names.inc"
-
-@ 831AEB8
- .include "data/trainer_money.inc"
-
-@ 831AF98
- .include "data/text/ability_descriptions.inc"
-
-@ 831B6DB
- .include "data/text/ability_names.inc"
-
-@ 831BAD4
- .include "data/text/ability_description_pointers.inc"
diff --git a/data/data2c.s b/data/data2c.s
deleted file mode 100644
index 8d134ccb2..000000000
--- a/data/data2c.s
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "constants/abilities.h"
-#include "constants/items.h"
-#include "constants/moves.h"
-#include "constants/species.h"
-#include "constants/pokemon.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-
-@ 831C898
- .include "data/battle_moves.inc"
-
-@ 0x31d93c
-@ unreferenced unknown data
- .byte 0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 6668f0d1f..42c5aa1ad 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -1161,7 +1161,7 @@ EventScript_2715DE:: @ 82715DE
setflag FLAG_0x376
setflag FLAG_0x374
setflag FLAG_0x375
- setflag FLAG_0x3C1
+ setflag FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION
setflag FLAG_0x378
setflag FLAG_0x2F0
setflag FLAG_0x2F5
@@ -1177,7 +1177,7 @@ EventScript_2715DE:: @ 82715DE
setflag FLAG_0x38F
setflag FLAG_0x393
setflag FLAG_0x358
- setflag FLAG_0x390
+ setflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
setflag FLAG_0x2FD
setflag FLAG_0x398
setflag FLAG_0x399
diff --git a/data/fldeff_flash.s b/data/fldeff_flash.s
deleted file mode 100644
index 3c3071b37..000000000
--- a/data/fldeff_flash.s
+++ /dev/null
@@ -1,81 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_085B27C8:: @ 85B27C8
- .byte 0x01, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x02, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x03, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x05, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x06, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x07, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x08, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x09, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x04, 0x01, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x02, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x03, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x05, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x06, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x07, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x08, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x09, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x00, 0x00, 0x00, 0x00
- .4byte NULL
-
- .align 2
-gCaveTransitionPalette_White:: @ 85B2850
- .incbin "graphics/misc/cave_transition_white.gbapal"
-
- .align 2
-gCaveTransitionPalette_Black:: @ 85B2870
- .incbin "graphics/misc/cave_transition_black.gbapal"
-
- .align 2
-gUnknown_085B2890:: @ 85B2890
- .incbin "graphics/misc/85B2890.gbapal"
-
- .align 2
-gUnknown_085B28A0:: @ 85B28A0
- .incbin "graphics/misc/85B28A0.gbapal"
-
- .align 2
-gCaveTransitionTilemap:: @ 85B28B0
- .incbin "graphics/misc/cave_transition_map.bin.lz"
-
- .align 2
-gCaveTransitionTiles:: @ 85B2A90
- .incbin "graphics/misc/cave_transition.4bpp.lz"
diff --git a/data/fossil_special_fldeff_groundshake.s b/data/fossil_special_fldeff_groundshake.s
deleted file mode 100644
index 8fa546ce8..000000000
--- a/data/fossil_special_fldeff_groundshake.s
+++ /dev/null
@@ -1,98 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_08617274:: @ 8617274
- .space 0x20
- .incbin "graphics/misc/mirage_tower.4bpp"
-
- .align 2
-gUnknown_08617B94:: @ 8617B94
- .incbin "graphics/misc/mirage_tower.bin"
-
- .align 2
-gRootFossil_Pal:: @ 8617C24
- .incbin "graphics/misc/fossil.gbapal"
-
- .align 2
-gRootFossil_Gfx:: @ 8617C44
- .incbin "graphics/misc/fossil.4bpp"
-
- .align 2
-gMirageTowerCrumbles_Gfx:: @ 8617CC4
- .incbin "graphics/misc/mirage_tower_crumbles.4bpp"
-
- .align 2
-gMirageTowerCrumbles_Palette:: @ 8617D44
- .incbin "graphics/misc/mirage_tower_crumbles.gbapal"
-
- .align 1
-gUnknown_08617D64:: @ 8617D64
- .2byte 0x0000, 0x000a, 0x0041, 0x0011, 0x0003, 0x0032, 0xfff4, 0x0000, 0x004b, 0x000a, 0x000f, 0x005a, 0x0007, 0x0008, 0x0041, 0xffee
- .2byte 0x0005, 0x004b, 0x0016, 0xfff6, 0x0037, 0xffe8, 0xfffc, 0x0041
-
- .align 2
-gUnknown_08617D94:: @ 8617D94
- obj_tiles gMirageTowerCrumbles_Gfx, 0x0080, 0x0fa0
- null_obj_tiles
-
- .align 2
-gUnknown_08617DA4:: @ 8617DA4
- .byte 0x12, 0x35, 0x51, 0x02, 0x13, 0x35, 0x51, 0x02, 0x14, 0x35, 0x51, 0x02, 0x12, 0x36, 0x51, 0x02, 0x13, 0x36, 0x51, 0x02, 0x14, 0x36, 0x51, 0x02, 0x12, 0x37, 0x51, 0x02, 0x13, 0x37, 0x51, 0x02
- .byte 0x14, 0x37, 0x51, 0x02, 0x12, 0x38, 0x51, 0x02, 0x13, 0x38, 0x51, 0x02, 0x14, 0x38, 0x51, 0x02, 0x12, 0x39, 0x59, 0x02, 0x13, 0x39, 0x59, 0x02, 0x14, 0x39, 0x59, 0x02, 0x12, 0x3a, 0x21, 0x01
- .byte 0x13, 0x3a, 0x21, 0x01, 0x14, 0x3a, 0x21, 0x01
-
- .align 2
-gSpriteAnim_8617DEC:: @ 8617DEC
- .2byte 0x0000, 0x0001, 0xffff, 0x0000
-
- .align 2
-gOamData_8617DF4:: @ 8617DF4
- .2byte 0x0000, 0x4000, 0x3000, 0x0000
-
- .align 2
-gSpriteAnimTable_8617DFC:: @ 8617DFC
- .4byte gSpriteAnim_8617DEC
-
- .align 2
-gUnknown_08617E00:: @ 8617E00
- spr_template 0xffff, 0xffff, gOamData_8617DF4, gSpriteAnimTable_8617DFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gUnknown_08617E18:: @ 8617E18
- .byte 0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b
-
- .align 2
-gSpriteAnim_8617E20:: @ 8617E20
- .2byte 0x0000, 0x000c, 0xfffe, 0x0000
-
- .align 2
-gSpriteAnimTable_8617E28:: @ 8617E28
- .4byte gSpriteAnim_8617E20
-
- .align 2
-gUnknown_08617E2C:: @ 8617E2C
- .2byte 0x0000, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_08617E34:: @ 8617E34
- spr_template 0x0fa0, 0xffff, gUnknown_08617E2C, gSpriteAnimTable_8617E28, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
-
- .align 2
-gSpriteAnim_8617E4C:: @ 8617E4C
- .2byte 0x0000, 0x000c, 0xfffe, 0x0000
-
- .align 2
-gSpriteAnim_8617E54:: @ 8617E54
- .4byte gSpriteAnim_8617E4C
-
- .align 2
-gOamData_8617E58:: @ 8617E58
- .2byte 0x0000, 0x4000, 0x0000, 0x0000
-
- .align 2
-gUnknown_08617E60:: @ 8617E60
- spr_template 0x0fa0, 0xffff, gOamData_8617E58, gSpriteAnim_8617E54, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
-
diff --git a/data/graphics/berries/berry_pic_table.inc b/data/graphics/berries/berry_pic_table.inc
deleted file mode 100644
index 12d4267a0..000000000
--- a/data/graphics/berries/berry_pic_table.inc
+++ /dev/null
@@ -1,45 +0,0 @@
- .align 2
-gBerryPicTable:: @ 857FC94
- .4byte gBerryPic_Cheri, gBerryPalette_Cheri
- .4byte gBerryPic_Chesto, gBerryPalette_Chesto
- .4byte gBerryPic_Pecha, gBerryPalette_Pecha
- .4byte gBerryPic_Rawst, gBerryPalette_Rawst
- .4byte gBerryPic_Aspear, gBerryPalette_Aspear
- .4byte gBerryPic_Leppa, gBerryPalette_Leppa
- .4byte gBerryPic_Oran, gBerryPalette_Oran
- .4byte gBerryPic_Persim, gBerryPalette_Persim
- .4byte gBerryPic_Lum, gBerryPalette_Lum
- .4byte gBerryPic_Sitrus, gBerryPalette_Sitrus
- .4byte gBerryPic_Figy, gBerryPalette_Figy
- .4byte gBerryPic_Wiki, gBerryPalette_Wiki
- .4byte gBerryPic_Mago, gBerryPalette_Mago
- .4byte gBerryPic_Aguav, gBerryPalette_Aguav
- .4byte gBerryPic_Iapapa, gBerryPalette_Iapapa
- .4byte gBerryPic_Razz, gBerryPalette_Razz
- .4byte gBerryPic_Bluk, gBerryPalette_Bluk
- .4byte gBerryPic_Nanab, gBerryPalette_Nanab
- .4byte gBerryPic_Wepear, gBerryPalette_Wepear
- .4byte gBerryPic_Pinap, gBerryPalette_Pinap
- .4byte gBerryPic_Pomeg, gBerryPalette_Pomeg
- .4byte gBerryPic_Kelpsy, gBerryPalette_Kelpsy
- .4byte gBerryPic_Qualot, gBerryPalette_Qualot
- .4byte gBerryPic_Hondew, gBerryPalette_Hondew
- .4byte gBerryPic_Grepa, gBerryPalette_Grepa
- .4byte gBerryPic_Tamato, gBerryPalette_Tamato
- .4byte gBerryPic_Cornn, gBerryPalette_Cornn
- .4byte gBerryPic_Magost, gBerryPalette_Magost
- .4byte gBerryPic_Rabuta, gBerryPalette_Rabuta
- .4byte gBerryPic_Nomel, gBerryPalette_Nomel
- .4byte gBerryPic_Spelon, gBerryPalette_Spelon
- .4byte gBerryPic_Pamtre, gBerryPalette_Pamtre
- .4byte gBerryPic_Watmel, gBerryPalette_Watmel
- .4byte gBerryPic_Durin, gBerryPalette_Durin
- .4byte gBerryPic_Belue, gBerryPalette_Belue
- .4byte gBerryPic_Liechi, gBerryPalette_Liechi
- .4byte gBerryPic_Ganlon, gBerryPalette_Ganlon
- .4byte gBerryPic_Salac, gBerryPalette_Salac
- .4byte gBerryPic_Petaya, gBerryPalette_Petaya
- .4byte gBerryPic_Apicot, gBerryPalette_Apicot
- .4byte gBerryPic_Lansat, gBerryPalette_Lansat
- .4byte gBerryPic_Starf, gBerryPalette_Starf
- .4byte gBerryPic_Enigma, gBerryPalette_Enigma
diff --git a/data/item_menu_icons.s b/data/item_menu_icons.s
index 36f339b09..30cb7e66b 100644
--- a/data/item_menu_icons.s
+++ b/data/item_menu_icons.s
@@ -4,219 +4,6 @@
.section .rodata
- .align 2
-gUnknown_0857F564:: @ 857F564
- .incbin "graphics/interface/bag_spinner.gbapal"
-
- .align 2
-gUnknown_0857F584:: @ 857F584
- .incbin "graphics/interface/bag_spinner.4bpp"
-
- .align 2
-gUnknown_0857F604:: @ 857F604
- .incbin "graphics/unused/cherry.4bpp"
-
- .align 2
-gUnknown_0857FA84:: @ 857FA84
- .incbin "graphics/unused/cherry.gbapal"
-
- .align 2
-gOamData_857FAA4:: @ 857FAA4
- .2byte 0x0100, 0xc000, 0x0400, 0x0000
-
- .align 2
-gSpriteAnim_857FAAC:: @ 857FAAC
- .2byte 0x0000, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FAB4:: @ 857FAB4
- .2byte 0x0040, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FABC:: @ 857FABC
- .2byte 0x0080, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FAC4:: @ 857FAC4
- .2byte 0x00c0, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FACC:: @ 857FACC
- .2byte 0x0100, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FAD4:: @ 857FAD4
- .2byte 0x0140, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FADC:: @ 857FADC
- .4byte gSpriteAnim_857FAAC
- .4byte gSpriteAnim_857FAB4
- .4byte gSpriteAnim_857FAC4
- .4byte gSpriteAnim_857FACC
- .4byte gSpriteAnim_857FAD4
- .4byte gSpriteAnim_857FABC
-
- .align 2
-gSpriteAffineAnim_857FAF4:: @ 857FAF4
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_857FB04:: @ 857FB04
- .2byte 0x0000, 0x0000, 0x02fe, 0x0000, 0x0000, 0x0000, 0x0402, 0x0000, 0x0000, 0x0000, 0x04fe, 0x0000, 0x0000, 0x0000, 0x0202, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnimTable_857FB2C:: @ 857FB2C
- .4byte gSpriteAffineAnim_857FAF4
- .4byte gSpriteAffineAnim_857FB04
-
- .align 2
-gUnknown_0857FB34:: @ 857FB34
- obj_tiles gBagMaleTiles, 0x3000, 0x0064
-
- .align 2
-gUnknown_0857FB3C:: @ 857FB3C
- obj_tiles gBagFemaleTiles, 0x3000, 0x0064
-
- .align 2
-gUnknown_0857FB44:: @ 857FB44
- obj_pal gBagPalette, 0x0064
-
- .align 2
-gUnknown_0857FB4C:: @ 857FB4C
- spr_template 0x0064, 0x0064, gOamData_857FAA4, gSpriteAnimTable_857FADC, NULL, gSpriteAffineAnimTable_857FB2C, SpriteCallbackDummy
-
- .align 2
-gOamData_857FB64:: @ 857FB64
- .2byte 0x0000, 0x4800, 0x0800, 0x0000
-
- .align 2
-gSpriteAnim_857FB6C:: @ 857FB6C
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FB74:: @ 857FB74
- .4byte gSpriteAnim_857FB6C
-
- .align 2
-gSpriteAffineAnim_857FB78:: @ 857FB78
- .2byte 0x0000, 0x0000, 0x1008, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_857FB88:: @ 857FB88
- .2byte 0x0000, 0x0000, 0x10f8, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_0857FB98:: @ 857FB98
- .4byte gSpriteAffineAnim_857FB78
-
- .align 2
-gUnknown_0857FB9C:: @ 857FB9C
- .4byte gSpriteAffineAnim_857FB88
-
- .align 2
-gUnknown_0857FBA0:: @ 857FBA0
- obj_tiles gUnknown_0857F584, 0x0080, 0x0065
-
- .align 2
-gUnknown_0857FBA8:: @ 857FBA8
- obj_pal gUnknown_0857F564, 0x0065
-
- .align 2
-gUnknown_0857FBB0:: @ 857FBB0
- spr_template 0x0065, 0x0065, gOamData_857FB64, gSpriteAnimTable_857FB74, NULL, gUnknown_0857FB98, ObjectCB_SwitchPocketRotatingBallInit
-
- .align 2
-gOamData_857FBC8:: @ 857FBC8
- .2byte 0x0000, 0xc000, 0x7400, 0x0000
-
- .align 2
-gOamData_857FBD0:: @ 857FBD0
- .2byte 0x0300, 0xc000, 0x7000, 0x0000
-
- .align 2
-gSpriteAnim_857FBD8:: @ 857FBD8
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FBE0:: @ 857FBE0
- .4byte gSpriteAnim_857FBD8
-
- .align 2
-gOamData_857FBE4:: @ 857FBE4
- .2byte 0xc000, 0x0201, 0x0800, 0x0000
-
- .align 2
-gUnknown_0857FBEC:: @ 857FBEC
- spr_template 0xffff, 0x7544, gOamData_857FBC8, gSpriteAnimTable_857FBE0, gOamData_857FBE4, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gSpriteAffineAnim_857FC04:: @ 857FC04
- .2byte 0xffff, 0xffff, 0x60fd, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0xfffe, 0xfffe, 0x40ff, 0x0000, 0xfff8, 0x0000, 0x1000, 0x0000
- .2byte 0x0000, 0xfff8, 0x1000, 0x0000, 0x0100, 0x0100, 0x0000, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_857FC3C:: @ 857FC3C
- .2byte 0xffff, 0xffff, 0x6003, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0xfffe, 0xfffe, 0x4001, 0x0000, 0xfff8, 0x0000, 0x1000, 0x0000
- .2byte 0x0000, 0xfff8, 0x1000, 0x0000, 0x0100, 0x0100, 0x0000, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnimTable_857FC74:: @ 857FC74
- .4byte gSpriteAffineAnim_857FC04
- .4byte gSpriteAffineAnim_857FC3C
-
- .align 2
-gUnknown_0857FC7C:: @ 857FC7C
- spr_template 0xffff, 0x7544, gOamData_857FBD0, gSpriteAnimTable_857FBE0, gOamData_857FBE4, gSpriteAffineAnimTable_857FC74, SpriteCallbackDummy
-
-@ 857FC94
- .include "data/graphics/berries/berry_pic_table.inc"
-
- .align 2
-gUnknown_0857FDEC:: @ 857FDEC
- obj_tiles gBerryCheckCircle_Gfx, 0x0800, 0x2710
-
- .align 2
-gUnknown_0857FDF4:: @ 857FDF4
- obj_pal gUnknown_08D9BEF0, 0x2710
-
- .align 2
-gOamData_857FDFC:: @ 857FDFC
- .2byte 0x0000, 0xc000, 0x0400, 0x0000
-
- .align 2
-gSpriteAnim_857FE04:: @ 857FE04
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FE0C:: @ 857FE0C
- .4byte gSpriteAnim_857FE04
-
- .align 2
-gUnknown_0857FE10:: @ 857FE10
- spr_template 0x2710, 0x2710, gOamData_857FDFC, gSpriteAnimTable_857FE0C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gUnknown_0857FE28:: @ 857FE28
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5860
-
- .align 2
-gUnknown_0857FE40:: @ 857FE40
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D58F8
-
- .align 2
-gUnknown_0857FE58:: @ 857FE58
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5968
-
- .align 2
-gUnknown_0857FE70:: @ 857FE70
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5A94
-
- .align 2
-gUnknown_0857FE88:: @ 857FE88
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5B48
-
@ 857FEA0
.include "data/text/item_descriptions.inc"
diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc
index 1c48e9710..40578a907 100644
--- a/data/scripts/maps/MauvilleCity.inc
+++ b/data/scripts/maps/MauvilleCity.inc
@@ -5,18 +5,18 @@ MauvilleCity_MapScripts:: @ 81DF385
MauvilleCity_MapScript1_1DF38B: @ 81DF38B
setflag FLAG_VISITED_MAUVILLE_CITY
clearflag FLAG_0x09D
- clearflag FLAG_0x3C1
+ clearflag FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION
setflag FLAG_SYS_TV_START
clearflag FLAG_0x063
setvar VAR_0x4093, 0
- checkflag FLAG_0x0D1
+ checkflag FLAG_GOT_TM24_FROM_WATTSON
call_if 1, MauvilleCity_EventScript_1DF3A9
end
MauvilleCity_EventScript_1DF3A9:: @ 81DF3A9
- clearflag FLAG_0x391
- setflag FLAG_0x390
- setflag FLAG_0x05B
+ clearflag FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON
+ setflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
+ setflag FLAG_WATTSON_REMATCH_AVAILABLE
return
MauvilleCity_EventScript_1DF3B3:: @ 81DF3B3
@@ -424,15 +424,15 @@ MauvilleCity_Movement_1DF72F: @ 81DF72F
MauvilleCity_EventScript_1DF73A:: @ 81DF73A
lock
faceplayer
- checkflag FLAG_0x0D1
+ checkflag FLAG_GOT_TM24_FROM_WATTSON
goto_eq MauvilleCity_EventScript_1DF7B0
compare VAR_0x40BA, 2
goto_eq MauvilleCity_EventScript_1DF784
- checkflag FLAG_0x0D0
+ checkflag FLAG_GOT_BASEMENT_KEY_FROM_WATTSON
goto_eq MauvilleCity_EventScript_1DF77A
msgbox MauvilleCity_Text_1DFFE4, 4
giveitem_std ITEM_BASEMENT_KEY
- setflag FLAG_0x0D0
+ setflag FLAG_GOT_BASEMENT_KEY_FROM_WATTSON
msgbox MauvilleCity_Text_1E0154, 4
release
end
@@ -447,7 +447,7 @@ MauvilleCity_EventScript_1DF784:: @ 81DF784
giveitem_std ITEM_TM24
compare VAR_RESULT, 0
goto_eq MauvilleCity_EventScript_272054
- setflag FLAG_0x0D1
+ setflag FLAG_GOT_TM24_FROM_WATTSON
msgbox MauvilleCity_Text_1E02AA, 4
release
end
diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc
index 627ae904c..2751e345e 100644
--- a/data/scripts/maps/PetalburgCity_Gym.inc
+++ b/data/scripts/maps/PetalburgCity_Gym.inc
@@ -423,8 +423,8 @@ PetalburgCity_Gym_EventScript_204E3B:: @ 8204E3B
setflag FLAG_BADGE05_GET
special sub_813B9A0
call PetalburgCity_Gym_EventScript_2721F8
- setflag FLAG_0x391
- clearflag FLAG_0x390
+ setflag FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON
+ clearflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
setvar VAR_0x8008, 5
call PetalburgCity_Gym_EventScript_271F43
clearflag FLAG_0x3AC
diff --git a/data/text/ability_description_pointers.inc b/data/text/ability_description_pointers.inc
deleted file mode 100644
index 41d3e84ef..000000000
--- a/data/text/ability_description_pointers.inc
+++ /dev/null
@@ -1,80 +0,0 @@
- .align 2
-gAbilityDescriptionPointers:: @ 831BAD4
- .4byte gNoneAbilityDescription
- .4byte gStenchAbilityDescription
- .4byte gDrizzleAbilityDescription
- .4byte gSpeedBoostAbilityDescription
- .4byte gBattleArmorAbilityDescription
- .4byte gSturdyAbilityDescription
- .4byte gDampAbilityDescription
- .4byte gLimberAbilityDescription
- .4byte gSandVeilAbilityDescription
- .4byte gStaticAbilityDescription
- .4byte gVoltAbsorbAbilityDescription
- .4byte gWaterAbsorbAbilityDescription
- .4byte gObliviousAbilityDescription
- .4byte gCloudNineAbilityDescription
- .4byte gCompoundEyesAbilityDescription
- .4byte gInsomniaAbilityDescription
- .4byte gColorChangeAbilityDescription
- .4byte gImmunityAbilityDescription
- .4byte gFlashFireAbilityDescription
- .4byte gShieldDustAbilityDescription
- .4byte gOwnTempoAbilityDescription
- .4byte gSuctionCupsAbilityDescription
- .4byte gIntimidateAbilityDescription
- .4byte gShadowTagAbilityDescription
- .4byte gRoughSkinAbilityDescription
- .4byte gWonderGuardAbilityDescription
- .4byte gLevitateAbilityDescription
- .4byte gEffectSporeAbilityDescription
- .4byte gSynchronizeAbilityDescription
- .4byte gClearBodyAbilityDescription
- .4byte gNaturalCureAbilityDescription
- .4byte gLightningRodAbilityDescription
- .4byte gSereneGraceAbilityDescription
- .4byte gSwiftSwimAbilityDescription
- .4byte gChlorophyllAbilityDescription
- .4byte gIlluminateAbilityDescription
- .4byte gTraceAbilityDescription
- .4byte gHugePowerAbilityDescription
- .4byte gPoisonPointAbilityDescription
- .4byte gInnerFocusAbilityDescription
- .4byte gMagmaArmorAbilityDescription
- .4byte gWaterVeilAbilityDescription
- .4byte gMagnetPullAbilityDescription
- .4byte gSoundproofAbilityDescription
- .4byte gRainDishAbilityDescription
- .4byte gSandStreamAbilityDescription
- .4byte gPressureAbilityDescription
- .4byte gThickFatAbilityDescription
- .4byte gEarlyBirdAbilityDescription
- .4byte gFlameBodyAbilityDescription
- .4byte gRunAwayAbilityDescription
- .4byte gKeenEyeAbilityDescription
- .4byte gHyperCutterAbilityDescription
- .4byte gPickupAbilityDescription
- .4byte gTruantAbilityDescription
- .4byte gHustleAbilityDescription
- .4byte gCuteCharmAbilityDescription
- .4byte gPlusAbilityDescription
- .4byte gMinusAbilityDescription
- .4byte gForecastAbilityDescription
- .4byte gStickyHoldAbilityDescription
- .4byte gShedSkinAbilityDescription
- .4byte gGutsAbilityDescription
- .4byte gMarvelScaleAbilityDescription
- .4byte gLiquidOozeAbilityDescription
- .4byte gOvergrowAbilityDescription
- .4byte gBlazeAbilityDescription
- .4byte gTorrentAbilityDescription
- .4byte gSwarmAbilityDescription
- .4byte gRockHeadAbilityDescription
- .4byte gDroughtAbilityDescription
- .4byte gArenaTrapAbilityDescription
- .4byte gVitalSpiritAbilityDescription
- .4byte gWhiteSmokeAbilityDescription
- .4byte gPurePowerAbilityDescription
- .4byte gShellArmorAbilityDescription
- .4byte gCacophonyAbilityDescription
- .4byte gAirLockAbilityDescription
diff --git a/data/text/ability_descriptions.inc b/data/text/ability_descriptions.inc
deleted file mode 100644
index fe8305542..000000000
--- a/data/text/ability_descriptions.inc
+++ /dev/null
@@ -1,233 +0,0 @@
-gNoneAbilityDescription:: @ 831AF98
- .string "No special ability.$"
-
-gStenchAbilityDescription:: @ 831AFAC
- .string "Helps repel wild POKéMON.$"
-
-gDrizzleAbilityDescription:: @ 831AFC6
- .string "Summons rain in battle.$"
-
-gSpeedBoostAbilityDescription:: @ 831AFDE
- .string "Gradually boosts SPEED.$"
-
-gBattleArmorAbilityDescription:: @ 831AFF6
- .string "Blocks critical hits.$"
-
-gSturdyAbilityDescription:: @ 831B00C
- .string "Negates 1-hit KO attacks.$"
-
-gDampAbilityDescription:: @ 831B026
- .string "Prevents self-destruction.$"
-
-gLimberAbilityDescription:: @ 831B041
- .string "Prevents paralysis.$"
-
-gSandVeilAbilityDescription:: @ 831B055
- .string "Ups evasion in a sandstorm.$"
-
-gStaticAbilityDescription:: @ 831B071
- .string "Paralyzes on contact.$"
-
-gVoltAbsorbAbilityDescription:: @ 831B087
- .string "Turns electricity into HP.$"
-
-gWaterAbsorbAbilityDescription:: @ 831B0A2
- .string "Changes water into HP.$"
-
-gObliviousAbilityDescription:: @ 831B0B9
- .string "Prevents attraction.$"
-
-gCloudNineAbilityDescription:: @ 831B0CE
- .string "Negates weather effects.$"
-
-gCompoundEyesAbilityDescription:: @ 831B0E7
- .string "Raises accuracy.$"
-
-gInsomniaAbilityDescription:: @ 831B0F8
- .string "Prevents sleep.$"
-
-gColorChangeAbilityDescription:: @ 831B108
- .string "Changes type to foe’s move.$"
-
-gImmunityAbilityDescription:: @ 831B124
- .string "Prevents poisoning.$"
-
-gFlashFireAbilityDescription:: @ 831B138
- .string "Powers up if hit by fire.$"
-
-gShieldDustAbilityDescription:: @ 831B152
- .string "Prevents added effects.$"
-
-gOwnTempoAbilityDescription:: @ 831B16A
- .string "Prevents confusion.$"
-
-gSuctionCupsAbilityDescription:: @ 831B17E
- .string "Firmly anchors the body.$"
-
-gIntimidateAbilityDescription:: @ 831B197
- .string "Lowers the foe’s ATTACK.$"
-
-gShadowTagAbilityDescription:: @ 831B1B0
- .string "Prevents the foe’s escape.$"
-
-gRoughSkinAbilityDescription:: @ 831B1CB
- .string "Hurts to touch.$"
-
-gWonderGuardAbilityDescription:: @ 831B1DB
- .string "“Super effective” hits.$"
-
-gLevitateAbilityDescription:: @ 831B1F3
- .string "Not hit by GROUND attacks.$"
-
-gEffectSporeAbilityDescription:: @ 831B20E
- .string "Leaves spores on contact.$"
-
-gSynchronizeAbilityDescription:: @ 831B228
- .string "Passes on status problems.$"
-
-gClearBodyAbilityDescription:: @ 831B243
- .string "Prevents ability reduction.$"
-
-gNaturalCureAbilityDescription:: @ 831B25F
- .string "Heals upon switching out.$"
-
-gLightningRodAbilityDescription:: @ 831B279
- .string "Draws electrical moves.$"
-
-gSereneGraceAbilityDescription:: @ 831B291
- .string "Promotes added effects.$"
-
-gSwiftSwimAbilityDescription:: @ 831B2A9
- .string "Raises SPEED in rain.$"
-
-gChlorophyllAbilityDescription:: @ 831B2BF
- .string "Raises SPEED in sunshine.$"
-
-gIlluminateAbilityDescription:: @ 831B2D9
- .string "Encounter rate increases.$"
-
-gTraceAbilityDescription:: @ 831B2F3
- .string "Copies special ability.$"
-
-gHugePowerAbilityDescription:: @ 831B30B
- .string "Raises ATTACK.$"
-
-gPoisonPointAbilityDescription:: @ 831B31A
- .string "Poisons foe on contact.$"
-
-gInnerFocusAbilityDescription:: @ 831B332
- .string "Prevents flinching.$"
-
-gMagmaArmorAbilityDescription:: @ 831B346
- .string "Prevents freezing.$"
-
-gWaterVeilAbilityDescription:: @ 831B359
- .string "Prevents burns.$"
-
-gMagnetPullAbilityDescription:: @ 831B369
- .string "Traps STEEL-type POKéMON.$"
-
-gSoundproofAbilityDescription:: @ 831B383
- .string "Avoids sound-based moves.$"
-
-gRainDishAbilityDescription:: @ 831B39D
- .string "Slight HP recovery in rain.$"
-
-gSandStreamAbilityDescription:: @ 831B3B9
- .string "Summons a sandstorm.$"
-
-gPressureAbilityDescription:: @ 831B3CE
- .string "Raises foe’s PP usage.$"
-
-gThickFatAbilityDescription:: @ 831B3E5
- .string "Heat-and-cold protection.$"
-
-gEarlyBirdAbilityDescription:: @ 831B3FF
- .string "Awakens quickly from sleep.$"
-
-gFlameBodyAbilityDescription:: @ 831B41B
- .string "Burns the foe on contact.$"
-
-gRunAwayAbilityDescription:: @ 831B435
- .string "Makes escaping easier.$"
-
-gKeenEyeAbilityDescription:: @ 831B44C
- .string "Prevents loss of accuracy.$"
-
-gHyperCutterAbilityDescription:: @ 831B467
- .string "Prevents ATTACK reduction.$"
-
-gPickupAbilityDescription:: @ 831B482
- .string "May pick up items.$"
-
-gTruantAbilityDescription:: @ 831B495
- .string "Moves only every two turns.$"
-
-gHustleAbilityDescription:: @ 831B4B1
- .string "Trades accuracy for power.$"
-
-gCuteCharmAbilityDescription:: @ 831B4CC
- .string "Infatuates on contact.$"
-
-gPlusAbilityDescription:: @ 831B4E3
- .string "Powers up with MINUS.$"
-
-gMinusAbilityDescription:: @ 831B4F9
- .string "Powers up with PLUS.$"
-
-gForecastAbilityDescription:: @ 831B50E
- .string "Changes with the weather.$"
-
-gStickyHoldAbilityDescription:: @ 831B528
- .string "Prevents item theft.$"
-
-gShedSkinAbilityDescription:: @ 831B53D
- .string "Heals the body by shedding.$"
-
-gGutsAbilityDescription:: @ 831B559
- .string "Ups ATTACK if suffering.$"
-
-gMarvelScaleAbilityDescription:: @ 831B572
- .string "Ups DEFENSE if suffering.$"
-
-gLiquidOozeAbilityDescription:: @ 831B58C
- .string "Draining causes injury.$"
-
-gOvergrowAbilityDescription:: @ 831B5A4
- .string "Ups GRASS moves in a pinch.$"
-
-gBlazeAbilityDescription:: @ 831B5C0
- .string "Ups FIRE moves in a pinch.$"
-
-gTorrentAbilityDescription:: @ 831B5DB
- .string "Ups WATER moves in a pinch.$"
-
-gSwarmAbilityDescription:: @ 831B5F7
- .string "Ups BUG moves in a pinch.$"
-
-gRockHeadAbilityDescription:: @ 831B611
- .string "Prevents recoil damage.$"
-
-gDroughtAbilityDescription:: @ 831B629
- .string "Summons sunlight in battle.$"
-
-gArenaTrapAbilityDescription:: @ 831B645
- .string "Prevents fleeing.$"
-
-gVitalSpiritAbilityDescription:: @ 831B657
- .string "Prevents sleep.$"
-
-gWhiteSmokeAbilityDescription:: @ 831B667
- .string "Prevents ability reduction.$"
-
-gPurePowerAbilityDescription:: @ 831B683
- .string "Raises ATTACK.$"
-
-gShellArmorAbilityDescription:: @ 831B692
- .string "Blocks critical hits.$"
-
-gCacophonyAbilityDescription:: @ 831B6A8
- .string "Avoids sound-based moves.$"
-
-gAirLockAbilityDescription:: @ 831B6C2
- .string "Negates weather effects.$"
diff --git a/data/text/ability_names.inc b/data/text/ability_names.inc
deleted file mode 100644
index a630b8080..000000000
--- a/data/text/ability_names.inc
+++ /dev/null
@@ -1,79 +0,0 @@
-gAbilityNames:: @ 831B6DB
- .string "-------$", 13
- .string "STENCH$", 13
- .string "DRIZZLE$", 13
- .string "SPEED BOOST$", 13
- .string "BATTLE ARMOR$", 13
- .string "STURDY$", 13
- .string "DAMP$", 13
- .string "LIMBER$", 13
- .string "SAND VEIL$", 13
- .string "STATIC$", 13
- .string "VOLT ABSORB$", 13
- .string "WATER ABSORB$", 13
- .string "OBLIVIOUS$", 13
- .string "CLOUD NINE$", 13
- .string "COMPOUNDEYES$", 13
- .string "INSOMNIA$", 13
- .string "COLOR CHANGE$", 13
- .string "IMMUNITY$", 13
- .string "FLASH FIRE$", 13
- .string "SHIELD DUST$", 13
- .string "OWN TEMPO$", 13
- .string "SUCTION CUPS$", 13
- .string "INTIMIDATE$", 13
- .string "SHADOW TAG$", 13
- .string "ROUGH SKIN$", 13
- .string "WONDER GUARD$", 13
- .string "LEVITATE$", 13
- .string "EFFECT SPORE$", 13
- .string "SYNCHRONIZE$", 13
- .string "CLEAR BODY$", 13
- .string "NATURAL CURE$", 13
- .string "LIGHTNINGROD$", 13
- .string "SERENE GRACE$", 13
- .string "SWIFT SWIM$", 13
- .string "CHLOROPHYLL$", 13
- .string "ILLUMINATE$", 13
- .string "TRACE$", 13
- .string "HUGE POWER$", 13
- .string "POISON POINT$", 13
- .string "INNER FOCUS$", 13
- .string "MAGMA ARMOR$", 13
- .string "WATER VEIL$", 13
- .string "MAGNET PULL$", 13
- .string "SOUNDPROOF$", 13
- .string "RAIN DISH$", 13
- .string "SAND STREAM$", 13
- .string "PRESSURE$", 13
- .string "THICK FAT$", 13
- .string "EARLY BIRD$", 13
- .string "FLAME BODY$", 13
- .string "RUN AWAY$", 13
- .string "KEEN EYE$", 13
- .string "HYPER CUTTER$", 13
- .string "PICKUP$", 13
- .string "TRUANT$", 13
- .string "HUSTLE$", 13
- .string "CUTE CHARM$", 13
- .string "PLUS$", 13
- .string "MINUS$", 13
- .string "FORECAST$", 13
- .string "STICKY HOLD$", 13
- .string "SHED SKIN$", 13
- .string "GUTS$", 13
- .string "MARVEL SCALE$", 13
- .string "LIQUID OOZE$", 13
- .string "OVERGROW$", 13
- .string "BLAZE$", 13
- .string "TORRENT$", 13
- .string "SWARM$", 13
- .string "ROCK HEAD$", 13
- .string "DROUGHT$", 13
- .string "ARENA TRAP$", 13
- .string "VITAL SPIRIT$", 13
- .string "WHITE SMOKE$", 13
- .string "PURE POWER$", 13
- .string "SHELL ARMOR$", 13
- .string "CACOPHONY$", 13
- .string "AIR LOCK$", 13
diff --git a/data/text/type_names.inc b/data/text/type_names.inc
deleted file mode 100644
index c79e705c2..000000000
--- a/data/text/type_names.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-gTypeNames:: @ 831AE38
- .string "NORMAL$", 7
- .string "FIGHT$", 7
- .string "FLYING$", 7
- .string "POISON$", 7
- .string "GROUND$", 7
- .string "ROCK$", 7
- .string "BUG$", 7
- .string "GHOST$", 7
- .string "STEEL$", 7
- .string "???$", 7
- .string "FIRE$", 7
- .string "WATER$", 7
- .string "GRASS$", 7
- .string "ELECTR$", 7
- .string "PSYCHC$", 7
- .string "ICE$", 7
- .string "DRAGON$", 7
- .string "DARK$", 7
diff --git a/data/trainer_money.inc b/data/trainer_money.inc
deleted file mode 100644
index 5b8032d95..000000000
--- a/data/trainer_money.inc
+++ /dev/null
@@ -1,59 +0,0 @@
-@ This is a factor in how much money you get for beating a trainer.
- .align 2
-gTrainerMoneyTable:: @ 831AEB8
- .byte TRAINER_CLASS_TEAM_AQUA, 5, 0, 0
- .byte TRAINER_CLASS_AQUA_ADMIN, 10, 0, 0
- .byte TRAINER_CLASS_AQUA_LEADER, 20, 0, 0
- .byte TRAINER_CLASS_AROMA_LADY, 10, 0, 0
- .byte TRAINER_CLASS_RUIN_MANIAC, 15, 0, 0
- .byte TRAINER_CLASS_INTERVIEWER, 12, 0, 0
- .byte TRAINER_CLASS_TUBER_1, 1, 0, 0
- .byte TRAINER_CLASS_TUBER_2, 1, 0, 0
- .byte TRAINER_CLASS_SIS_AND_BRO, 3, 0, 0
- .byte TRAINER_CLASS_COOLTRAINER_1, 12, 0, 0
- .byte TRAINER_CLASS_HEX_MANIAC, 6, 0, 0
- .byte TRAINER_CLASS_LADY, 50, 0, 0
- .byte TRAINER_CLASS_BEAUTY, 20, 0, 0
- .byte TRAINER_CLASS_RICH_BOY, 50, 0, 0
- .byte TRAINER_CLASS_POKEMANIAC, 15, 0, 0
- .byte TRAINER_CLASS_SWIMMER_M, 2, 0, 0
- .byte TRAINER_CLASS_BLACK_BELT, 8, 0, 0
- .byte TRAINER_CLASS_GUITARIST, 8, 0, 0
- .byte TRAINER_CLASS_KINDLER, 8, 0, 0
- .byte TRAINER_CLASS_CAMPER, 4, 0, 0
- .byte TRAINER_CLASS_OLD_COUPLE, 10, 0, 0
- .byte TRAINER_CLASS_BUG_MANIAC, 15, 0, 0
- .byte TRAINER_CLASS_PSYCHIC, 6, 0, 0
- .byte TRAINER_CLASS_GENTLEMAN, 20, 0, 0
- .byte TRAINER_CLASS_ELITE_FOUR, 25, 0, 0
- .byte TRAINER_CLASS_LEADER, 25, 0, 0
- .byte TRAINER_CLASS_SCHOOL_KID, 5, 0, 0
- .byte TRAINER_CLASS_SR_AND_JR, 4, 0, 0
- .byte TRAINER_CLASS_POKEFAN, 20, 0, 0
- .byte TRAINER_CLASS_EXPERT, 10, 0, 0
- .byte TRAINER_CLASS_YOUNGSTER, 4, 0, 0
- .byte TRAINER_CLASS_CHAMPION, 50, 0, 0
- .byte TRAINER_CLASS_FISHERMAN, 10, 0, 0
- .byte TRAINER_CLASS_TRIATHLETE, 10, 0, 0
- .byte TRAINER_CLASS_DRAGON_TAMER, 12, 0, 0
- .byte TRAINER_CLASS_BIRD_KEEPER, 8, 0, 0
- .byte TRAINER_CLASS_NINJA_BOY, 3, 0, 0
- .byte TRAINER_CLASS_BATTLE_GIRL, 6, 0, 0
- .byte TRAINER_CLASS_PARASOL_LADY, 10, 0, 0
- .byte TRAINER_CLASS_SWIMMER_F, 2, 0, 0
- .byte TRAINER_CLASS_PICNICKER, 4, 0, 0
- .byte TRAINER_CLASS_TWINS, 3, 0, 0
- .byte TRAINER_CLASS_SAILOR, 8, 0, 0
- .byte TRAINER_CLASS_COLLECTOR, 15, 0, 0
- .byte TRAINER_CLASS_PKMN_TRAINER_3, 15, 0, 0
- .byte TRAINER_CLASS_PKMN_BREEDER, 10, 0, 0
- .byte TRAINER_CLASS_PKMN_RANGER, 12, 0, 0
- .byte TRAINER_CLASS_TEAM_MAGMA, 5, 0, 0
- .byte TRAINER_CLASS_MAGMA_ADMIN, 10, 0, 0
- .byte TRAINER_CLASS_MAGMA_LEADER, 20, 0, 0
- .byte TRAINER_CLASS_LASS, 4, 0, 0
- .byte TRAINER_CLASS_BUG_CATCHER, 4, 0, 0
- .byte TRAINER_CLASS_HIKER, 10, 0, 0
- .byte TRAINER_CLASS_YOUNG_COUPLE, 8, 0, 0
- .byte TRAINER_CLASS_WINSTRATE, 10, 0, 0
- .byte -1, 5, 0, 0
diff --git a/data/trainer_rematch.s b/data/trainer_rematch.s
deleted file mode 100644
index e3a05ba8b..000000000
--- a/data/trainer_rematch.s
+++ /dev/null
@@ -1,10 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_0862AD34:: @ 862AD34
- .2byte 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048
-
-gUnknown_0862AD44:: @ 862AD44
- .2byte 0x0041, 0x0042, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0000
diff --git a/data/type_effectiveness.inc b/data/type_effectiveness.inc
deleted file mode 100644
index 0739199c2..000000000
--- a/data/type_effectiveness.inc
+++ /dev/null
@@ -1,119 +0,0 @@
-@ format: attacking type, defending type, damage multiplier
-@ the multiplier is a (decimal) fixed-point number:
-@ 20 is ×2.0
-@ 05 is ×0.5
-@ 00 is ×0
-
-gTypeEffectiveness:: @ 831ACE8
- .byte TYPE_NORMAL, TYPE_ROCK, 5
- .byte TYPE_NORMAL, TYPE_STEEL, 5
- .byte TYPE_FIRE, TYPE_FIRE, 5
- .byte TYPE_FIRE, TYPE_WATER, 5
- .byte TYPE_FIRE, TYPE_GRASS, 20
- .byte TYPE_FIRE, TYPE_ICE, 20
- .byte TYPE_FIRE, TYPE_BUG, 20
- .byte TYPE_FIRE, TYPE_ROCK, 5
- .byte TYPE_FIRE, TYPE_DRAGON, 5
- .byte TYPE_FIRE, TYPE_STEEL, 20
- .byte TYPE_WATER, TYPE_FIRE, 20
- .byte TYPE_WATER, TYPE_WATER, 5
- .byte TYPE_WATER, TYPE_GRASS, 5
- .byte TYPE_WATER, TYPE_GROUND, 20
- .byte TYPE_WATER, TYPE_ROCK, 20
- .byte TYPE_WATER, TYPE_DRAGON, 5
- .byte TYPE_ELECTRIC, TYPE_WATER, 20
- .byte TYPE_ELECTRIC, TYPE_ELECTRIC, 5
- .byte TYPE_ELECTRIC, TYPE_GRASS, 5
- .byte TYPE_ELECTRIC, TYPE_GROUND, 0
- .byte TYPE_ELECTRIC, TYPE_FLYING, 20
- .byte TYPE_ELECTRIC, TYPE_DRAGON, 5
- .byte TYPE_GRASS, TYPE_FIRE, 5
- .byte TYPE_GRASS, TYPE_WATER, 20
- .byte TYPE_GRASS, TYPE_GRASS, 5
- .byte TYPE_GRASS, TYPE_POISON, 5
- .byte TYPE_GRASS, TYPE_GROUND, 20
- .byte TYPE_GRASS, TYPE_FLYING, 5
- .byte TYPE_GRASS, TYPE_BUG, 5
- .byte TYPE_GRASS, TYPE_ROCK, 20
- .byte TYPE_GRASS, TYPE_DRAGON, 5
- .byte TYPE_GRASS, TYPE_STEEL, 5
- .byte TYPE_ICE, TYPE_WATER, 5
- .byte TYPE_ICE, TYPE_GRASS, 20
- .byte TYPE_ICE, TYPE_ICE, 5
- .byte TYPE_ICE, TYPE_GROUND, 20
- .byte TYPE_ICE, TYPE_FLYING, 20
- .byte TYPE_ICE, TYPE_DRAGON, 20
- .byte TYPE_ICE, TYPE_STEEL, 5
- .byte TYPE_ICE, TYPE_FIRE, 5
- .byte TYPE_FIGHTING, TYPE_NORMAL, 20
- .byte TYPE_FIGHTING, TYPE_ICE, 20
- .byte TYPE_FIGHTING, TYPE_POISON, 5
- .byte TYPE_FIGHTING, TYPE_FLYING, 5
- .byte TYPE_FIGHTING, TYPE_PSYCHIC, 5
- .byte TYPE_FIGHTING, TYPE_BUG, 5
- .byte TYPE_FIGHTING, TYPE_ROCK, 20
- .byte TYPE_FIGHTING, TYPE_DARK, 20
- .byte TYPE_FIGHTING, TYPE_STEEL, 20
- .byte TYPE_POISON, TYPE_GRASS, 20
- .byte TYPE_POISON, TYPE_POISON, 5
- .byte TYPE_POISON, TYPE_GROUND, 5
- .byte TYPE_POISON, TYPE_ROCK, 5
- .byte TYPE_POISON, TYPE_GHOST, 5
- .byte TYPE_POISON, TYPE_STEEL, 0
- .byte TYPE_GROUND, TYPE_FIRE, 20
- .byte TYPE_GROUND, TYPE_ELECTRIC, 20
- .byte TYPE_GROUND, TYPE_GRASS, 5
- .byte TYPE_GROUND, TYPE_POISON, 20
- .byte TYPE_GROUND, TYPE_FLYING, 0
- .byte TYPE_GROUND, TYPE_BUG, 5
- .byte TYPE_GROUND, TYPE_ROCK, 20
- .byte TYPE_GROUND, TYPE_STEEL, 20
- .byte TYPE_FLYING, TYPE_ELECTRIC, 5
- .byte TYPE_FLYING, TYPE_GRASS, 20
- .byte TYPE_FLYING, TYPE_FIGHTING, 20
- .byte TYPE_FLYING, TYPE_BUG, 20
- .byte TYPE_FLYING, TYPE_ROCK, 5
- .byte TYPE_FLYING, TYPE_STEEL, 5
- .byte TYPE_PSYCHIC, TYPE_FIGHTING, 20
- .byte TYPE_PSYCHIC, TYPE_POISON, 20
- .byte TYPE_PSYCHIC, TYPE_PSYCHIC, 5
- .byte TYPE_PSYCHIC, TYPE_DARK, 0
- .byte TYPE_PSYCHIC, TYPE_STEEL, 5
- .byte TYPE_BUG, TYPE_FIRE, 5
- .byte TYPE_BUG, TYPE_GRASS, 20
- .byte TYPE_BUG, TYPE_FIGHTING, 5
- .byte TYPE_BUG, TYPE_POISON, 5
- .byte TYPE_BUG, TYPE_FLYING, 5
- .byte TYPE_BUG, TYPE_PSYCHIC, 20
- .byte TYPE_BUG, TYPE_GHOST, 5
- .byte TYPE_BUG, TYPE_DARK, 20
- .byte TYPE_BUG, TYPE_STEEL, 5
- .byte TYPE_ROCK, TYPE_FIRE, 20
- .byte TYPE_ROCK, TYPE_ICE, 20
- .byte TYPE_ROCK, TYPE_FIGHTING, 5
- .byte TYPE_ROCK, TYPE_GROUND, 5
- .byte TYPE_ROCK, TYPE_FLYING, 20
- .byte TYPE_ROCK, TYPE_BUG, 20
- .byte TYPE_ROCK, TYPE_STEEL, 5
- .byte TYPE_GHOST, TYPE_NORMAL, 0
- .byte TYPE_GHOST, TYPE_PSYCHIC, 20
- .byte TYPE_GHOST, TYPE_DARK, 5
- .byte TYPE_GHOST, TYPE_STEEL, 5
- .byte TYPE_GHOST, TYPE_GHOST, 20
- .byte TYPE_DRAGON, TYPE_DRAGON, 20
- .byte TYPE_DRAGON, TYPE_STEEL, 5
- .byte TYPE_DARK, TYPE_FIGHTING, 5
- .byte TYPE_DARK, TYPE_PSYCHIC, 20
- .byte TYPE_DARK, TYPE_GHOST, 20
- .byte TYPE_DARK, TYPE_DARK, 5
- .byte TYPE_DARK, TYPE_STEEL, 5
- .byte TYPE_STEEL, TYPE_FIRE, 5
- .byte TYPE_STEEL, TYPE_WATER, 5
- .byte TYPE_STEEL, TYPE_ELECTRIC, 5
- .byte TYPE_STEEL, TYPE_ICE, 20
- .byte TYPE_STEEL, TYPE_ROCK, 20
- .byte TYPE_STEEL, TYPE_STEEL, 5
- .byte 0xFE, 0xFE, 0
- .byte TYPE_NORMAL, TYPE_GHOST, 0
- .byte TYPE_FIGHTING, TYPE_GHOST, 0
- .byte 0xFF, 0xFF, 0
diff --git a/data/unk_transition.s b/data/unk_transition.s
index 2dc54e22d..db5744d08 100644
--- a/data/unk_transition.s
+++ b/data/unk_transition.s
@@ -3,6 +3,7 @@
.section .rodata
+ .align 2, 0
gUnknown_0862AD54:: @ 862AD54
.incbin "graphics/battle_transitions/frontier_transition.4bpp.lz"
diff --git a/include/battle.h b/include/battle.h
index 5225b72e3..ae8a1c98a 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -3,9 +3,9 @@
// should they be included here or included individually by every file?
#include "constants/battle.h"
+#include "battle_main.h"
#include "battle_util.h"
#include "battle_script_commands.h"
-#include "battle_main.h"
#include "battle_ai_switch_items.h"
#include "battle_gfx_sfx_util.h"
#include "battle_util2.h"
@@ -66,29 +66,14 @@
#define MSG_DISPLAY 0x7
#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8
-#define MOVE_TARGET_SELECTED 0x0
-#define MOVE_TARGET_DEPENDS 0x1
-#define MOVE_TARGET_USER 0x2
-#define MOVE_TARGET_RANDOM 0x4
-#define MOVE_TARGET_x10 0x10
-#define MOVE_TARGET_BOTH 0x8
-#define MOVE_TARGET_FOES_AND_ALLY 0x20
-#define MOVE_TARGET_OPPONENTS_FIELD 0x40
-
-// defines for the u8 array gTypeEffectiveness
-#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
-#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
-#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
-
-// defines for the gTypeEffectiveness multipliers
-#define TYPE_MUL_NO_EFFECT 0
-#define TYPE_MUL_NOT_EFFECTIVE 5
-#define TYPE_MUL_NORMAL 10
-#define TYPE_MUL_SUPER_EFFECTIVE 20
-
-// special type table Ids
-#define TYPE_FORESIGHT 0xFE
-#define TYPE_ENDTABLE 0xFF
+#define MOVE_TARGET_SELECTED 0x0
+#define MOVE_TARGET_DEPENDS 0x1
+#define MOVE_TARGET_USER_OR_SELECTED 0x2
+#define MOVE_TARGET_RANDOM 0x4
+#define MOVE_TARGET_BOTH 0x8
+#define MOVE_TARGET_USER 0x10
+#define MOVE_TARGET_FOES_AND_ALLY 0x20
+#define MOVE_TARGET_OPPONENTS_FIELD 0x40
#define BATTLE_BUFFER_LINK_SIZE 0x1000
@@ -368,6 +353,91 @@ struct BattleResults
u8 catchAttempts[11]; // 0x36
};
+struct BattleTv_Side
+{
+ u32 spikesMonId:3;
+ u32 reflectMonId:3;
+ u32 lightScreenMonId:3;
+ u32 safeguardMonId:3;
+ u32 mistMonId:3;
+ u32 futureSightMonId:3;
+ u32 doomDesireMonId:3;
+ u32 perishSongMonId:3;
+ u32 wishMonId:3;
+ u32 grudgeMonId:3;
+ u32 usedMoveSlot:2;
+ u32 spikesMoveSlot:2;
+ u32 reflectMoveSlot:2;
+ u32 lightScreenMoveSlot:2;
+ u32 safeguardMoveSlot:2;
+ u32 mistMoveSlot:2;
+ u32 futureSightMoveSlot:2;
+ u32 doomDesireMoveSlot:2;
+ u32 perishSongMoveSlot:2;
+ u32 wishMoveSlot:2;
+ u32 grudgeMoveSlot:2;
+ u32 destinyBondMonId:3;
+ u32 destinyBondMoveSlot:2;
+ u32 faintCause:4;
+ u32 faintCauseMonId:3;
+ u32 explosion:1;
+ u32 explosionMoveSlot:2;
+ u32 explosionMonId:3;
+ u32 perishSong:1;
+};
+
+struct BattleTv_Position
+{
+ u32 curseMonId:3;
+ u32 leechSeedMonId:3;
+ u32 nightmareMonId:3;
+ u32 wrapMonId:3;
+ u32 attractMonId:3;
+ u32 confusionMonId:3;
+ u32 curseMoveSlot:2;
+ u32 leechSeedMoveSlot:2;
+ u32 nightmareMoveSlot:2;
+ u32 wrapMoveSlot:2;
+ u32 attractMoveSlot:2;
+ u32 confusionMoveSlot:2;
+ u32 waterSportMoveSlot:2;
+ u32 waterSportMonId:3;
+ u32 mudSportMonId:3;
+ u32 mudSportMoveSlot:2;
+ u32 ingrainMonId:3;
+ u32 ingrainMoveSlot:2;
+ u32 attackedByMonId:3;
+ u32 attackedByMoveSlot:2;
+};
+
+struct BattleTv_Mon
+{
+ u32 psnMonId:3;
+ u32 badPsnMonId:3;
+ u32 brnMonId:3;
+ u32 prlzMonId:3;
+ u32 slpMonId:3;
+ u32 frzMonId:3;
+ u32 psnMoveSlot:2;
+ u32 badPsnMoveSlot:2;
+ u32 brnMoveSlot:2;
+ u32 prlzMoveSlot:2;
+ u32 slpMoveSlot:2;
+ u32 frzMoveSlot:2;
+};
+
+struct BattleTv
+{
+ struct BattleTv_Mon mon[2][6]; // [side][partyId]
+ struct BattleTv_Position pos[2][2]; // [side][flank]
+ struct BattleTv_Side side[2]; // [side]
+};
+
+struct BattleTvMovePoints
+{
+ s16 points[2][PARTY_SIZE * 4];
+};
+
struct BattleStruct
{
u8 turnEffectsTracker;
@@ -447,7 +517,7 @@ struct BattleStruct
u8 field_B0;
u8 hpScale;
u8 synchronizeMoveEffect;
- u8 field_B3;
+ bool8 anyMonHasTransformed;
void (*savedCallback)(void);
u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
@@ -472,9 +542,9 @@ struct BattleStruct
u8 wishPerishSongBattlerId;
bool8 overworldWeatherDone;
u8 atkCancellerTracker;
- u8 field_1A4[96];
- u8 field_204[104];
- u8 field_26C[40];
+ struct BattleTvMovePoints tvMovePoints;
+ struct BattleTv tv;
+ u8 notSureWhatFieldLol[0x28];
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_298[8];
u8 field_2A0;
@@ -493,6 +563,15 @@ struct BattleStruct
#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
+
+#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type))
+#define SET_BATTLER_TYPE(battlerId, type) \
+{ \
+ gBattleMons[battlerId].type1 = type; \
+ gBattleMons[battlerId].type2 = type; \
+}
+
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
diff --git a/include/battle_link_817C95C.h b/include/battle_link_817C95C.h
deleted file mode 100644
index cb2cb0b27..000000000
--- a/include/battle_link_817C95C.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GUARD_BATTLE_LINK_817C95C_H
-#define GUARD_BATTLE_LINK_817C95C_H
-
-void sub_817C95C(u16 stringId);
-void sub_817E0FC(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
-void sub_817E32C(u8 animationId);
-void sub_817E3F4(void);
-void sub_817F2A8(void);
-u8 GetBattlerMoveSlotId(u8 bank, u16 move);
-
-#endif // GUARD_BATTLE_LINK_817C95C_H
diff --git a/include/battle_main.h b/include/battle_main.h
index d7a522f17..a725b631f 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -1,6 +1,30 @@
#ifndef GUARD_BATTLE_MAIN_H
#define GUARD_BATTLE_MAIN_H
+struct TrainerMoney
+{
+ u8 classId;
+ u8 value;
+};
+
+#define TYPE_NAME_LENGTH 6
+#define ABILITY_NAME_LENGTH 12
+
+// defines for the u8 array gTypeEffectiveness
+#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
+#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
+#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
+
+// defines for the gTypeEffectiveness multipliers
+#define TYPE_MUL_NO_EFFECT 0
+#define TYPE_MUL_NOT_EFFECTIVE 5
+#define TYPE_MUL_NORMAL 10
+#define TYPE_MUL_SUPER_EFFECTIVE 20
+
+// special type table Ids
+#define TYPE_FORESIGHT 0xFE
+#define TYPE_ENDTABLE 0xFF
+
void CB2_InitBattle(void);
void BattleMainCB2(void);
void CB2_QuitRecordedBattle(void);
@@ -42,6 +66,12 @@ void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
bool8 TryRunFromBattle(u8 battlerId);
+extern const u8 gTypeEffectiveness[336];
+extern const u8 gTypeNames[][TYPE_NAME_LENGTH + 1];
+extern const struct TrainerMoney gTrainerMoneyTable[];
+extern const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1];
+extern const u8 *const gAbilityDescriptionPointers[];
+
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
extern const u8 gStatusConditionString_ParalysisJpn[8];
diff --git a/include/battle_message.h b/include/battle_message.h
index a68ad1551..bf9b590af 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -229,13 +229,62 @@ extern const u8* const gPokeblockWasTooXStringTable[];
extern const u8* const gRefereeStringsTable[];
extern const u8* const gStatNamesTable2[];
+extern const u8 gText_PkmnIsEvolving[];
+extern const u8 gText_CongratsPkmnEvolved[];
+extern const u8 gText_PkmnStoppedEvolving[];
+extern const u8 gText_EllipsisQuestionMark[];
+extern const u8 gText_WhatWillPkmnDo[];
+extern const u8 gText_WhatWillPkmnDo2[];
+extern const u8 gText_WhatWillWallyDo[];
+extern const u8 gText_LinkStandby[];
+extern const u8 gText_BattleMenu[];
+extern const u8 gText_SafariZoneMenu[];
+extern const u8 gText_MoveInterfacePP[];
+extern const u8 gText_MoveInterfaceType[];
+extern const u8 gText_MoveInterfacePpType[];
+extern const u8 gText_MoveInterfaceDynamicColors[];
+extern const u8 gText_WhichMoveToForget4[];
+extern const u8 gText_BattleYesNoChoice[];
+extern const u8 gText_BattleSwitchWhich[];
+extern const u8 gText_BattleSwitchWhich2[];
+extern const u8 gText_BattleSwitchWhich3[];
+extern const u8 gText_BattleSwitchWhich4[];
+extern const u8 gText_BattleSwitchWhich5[];
+extern const u8 gText_SafariBalls[];
+extern const u8 gText_SafariBallLeft[];
+extern const u8 gText_SpaceAndSpace[];
+extern const u8 gText_CommaSpace[];
+extern const u8 gText_Space2[];
+extern const u8 gText_ScrollTextUp[];
+extern const u8 gText_NewLine[];
+extern const u8 gText_Are[];
+extern const u8 gText_Are2[];
extern const u8 gText_BadEgg[];
+extern const u8 gText_BattleWallyName[];
+extern const u8 gText_Win[];
+extern const u8 gText_Loss[];
+extern const u8 gText_Draw[];
extern const u8 gText_StatRose[];
extern const u8 gText_PkmnsStatChanged2[];
extern const u8 gText_PkmnGettingPumped[];
extern const u8 gText_PkmnShroudedInMist[];
-extern const u8 gText_BattleWallyName[];
extern const u8 gText_PkmnsXPreventsSwitching[];
+extern const u8 gText_TheGreatNewHope[];
+extern const u8 gText_WillChampinshipDreamComeTrue[];
+extern const u8 gText_AFormerChampion[];
+extern const u8 gText_ThePreviousChampion[];
+extern const u8 gText_TheUnbeatenChampion[];
+extern const u8 gText_PlayerMon1Name[];
+extern const u8 gText_Vs[];
+extern const u8 gText_OpponentMon1Name[];
+extern const u8 gText_Mind[];
+extern const u8 gText_Skill[];
+extern const u8 gText_Body[];
+extern const u8 gText_Judgement[];
+extern const u8 gText_EmptyString3[];
+extern const u8 gText_RecordBattleToPass[];
+extern const u8 gText_BattleRecordedOnPass[];
+extern const u8 gText_BattleTourney[];
extern const u16 gMissStringIds[];
extern const u16 gTrappingMoves[];
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 6c84d1f0f..142ac1f7b 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -4,16 +4,16 @@
#define WINDOW_CLEAR 0x1
#define WINDOW_x80 0x80
-void AI_CalcDmg(u8 bankAtk, u8 bankDef);
-u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
+void AI_CalcDmg(u8 battlerIdAtk, u8 battlerIdDef);
+u8 TypeCalc(u16 move, u8 battlerIdAtk, u8 battlerIdDef);
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
-u8 GetBattlerTurnOrderNum(u8 bank);
+u8 GetBattlerTurnOrderNum(u8 battlerId);
void SetMoveEffect(bool8 primary, u8 certain);
void BattleDestroyYesNoCursorAt(u8 cursorPosition);
void BattleCreateYesNoCursorAt(u8 cursorPosition);
void BufferMoveToLearnIntoBattleTextBuff2(void);
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
-bool8 UproarWakeUpCheck(u8 bank);
+bool8 UproarWakeUpCheck(u8 battlerId);
extern void (* const gBattleScriptingCommandsTable[])(void);
extern const u8 gUnknown_0831C494[][4];
diff --git a/include/battle_tv.h b/include/battle_tv.h
new file mode 100644
index 000000000..72466d73b
--- /dev/null
+++ b/include/battle_tv.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_BATTLE_TV_H
+#define GUARD_BATTLE_TV_H
+
+void BattleTv_SetDataBasedOnString(u16 stringId);
+void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
+void BattleTv_SetDataBasedOnAnimation(u8 animationId);
+void TryPutLinkBattleTvShowOnAir(void);
+void BattleTv_ClearExplosionFaintCause(void);
+u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId);
+
+#endif // GUARD_BATTLE_TV_H
diff --git a/include/battle_util.h b/include/battle_util.h
index d992faa47..e5c1aaf18 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -49,36 +49,36 @@ void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
void PressurePPLoseOnUsingImprision(u8 bankAtk);
void MarkAllBattlersForControllerExec(void); // unused
-void MarkBattlerForControllerExec(u8 bank);
+void MarkBattlerForControllerExec(u8 battlerId);
void sub_803F850(u8 arg0);
-void CancelMultiTurnMoves(u8 bank);
-bool8 WasUnableToUseMove(u8 bank);
-void PrepareStringBattle(u16 stringId, u8 bank);
+void CancelMultiTurnMoves(u8 battlerId);
+bool8 WasUnableToUseMove(u8 battlerId);
+void PrepareStringBattle(u16 stringId, u8 battlerId);
void ResetSentPokesToOpponentValue(void);
-void sub_803F9EC(u8 bank);
-void sub_803FA70(u8 bank);
+void sub_803F9EC(u8 battlerId);
+void sub_803FA70(u8 battlerId);
void BattleScriptPush(const u8* bsPtr);
void BattleScriptPushCursor(void);
void BattleScriptPop(void);
u8 TrySetCantSelectMoveBattleScript(void);
-u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check);
+u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check);
bool8 AreAllMovesUnusable(void);
-u8 GetImprisonedMovesCount(u8 bank, u16 move);
+u8 GetImprisonedMovesCount(u8 battlerId, u16 move);
u8 UpdateTurnCounters(void);
u8 TurnBasedEffects(void);
bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void);
void TryClearRageStatuses(void);
u8 AtkCanceller_UnableToUseMove(void);
-bool8 sub_80423F4(u8 bank, u8 r1, u8 r2);
-u8 CastformDataTypeChange(u8 bank);
-u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg);
+bool8 sub_80423F4(u8 battlerId, u8 r1, u8 r2);
+u8 CastformDataTypeChange(u8 battlerId);
+u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
void BattleScriptExecute(const u8* BS_ptr);
void BattleScriptPushCursorAndCallback(const u8* BS_ptr);
-u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn);
-void ClearFuryCutterDestinyBondGrudge(u8 bank);
+u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn);
+void ClearFuryCutterDestinyBondGrudge(u8 battlerId);
void HandleAction_RunBattleScript(void);
-u8 GetMoveTarget(u16 move, u8 useMoveTarget);
+u8 GetMoveTarget(u16 move, u8 setTarget);
u8 IsMonDisobedient(void);
#endif // GUARD_BATTLE_UTIL_H
diff --git a/include/blit.h b/include/blit.h
new file mode 100644
index 000000000..e7f384cc8
--- /dev/null
+++ b/include/blit.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_BLIT_H
+#define GUARD_BLIT_H
+
+void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height);
+void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey);
+void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
+void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset);
+void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
+
+#endif // GUARD_BLIT_H
diff --git a/include/braille_puzzles.h b/include/braille_puzzles.h
new file mode 100644
index 000000000..780abeeba
--- /dev/null
+++ b/include/braille_puzzles.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_BRAILLE_PUZZLES_H
+#define GUARD_BRAILLE_PUZZLES_H
+
+bool8 ShouldDoBrailleFlyEffect(void);
+void sub_8179918(void);
+
+#endif // GUARD_BRAILLE_PUZZLES_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/event_scripts.h b/include/event_scripts.h
index a835782ed..4c5dfd544 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -22,6 +22,7 @@ extern const u8 EventScript_2713D1[];
extern const u8 EventScript_2766A2[];
extern const u8 EventScript_2766A6[];
+
extern const u8 gTVBravoTrainerText00[];
extern const u8 gTVBravoTrainerText01[];
extern const u8 gTVBravoTrainerText02[];
@@ -381,6 +382,9 @@ extern const u8 SecretBase_RedCave1_Text_2751E1[];
extern const u8 SecretBase_RedCave1_Text_2754F6[];
extern const u8 SecretBase_RedCave1_Text_2758CC[];
+//field effects
extern const u8 FieryPath_EventScript_2908FD[];
extern const u8 EventScript_290CAE[];
+extern const u8 EventScript_2926F8[];
+
#endif //GUARD_EVENT_SCRIPTS_H
diff --git a/include/fldeff_groundshake.h b/include/fldeff_groundshake.h
deleted file mode 100644
index 685a6d27c..000000000
--- a/include/fldeff_groundshake.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef GUARD_FLDEFF_GROUNDSHAKE_H
-#define GUARD_FLDEFF_GROUNDSHAKE_H
-
-void sub_81BE6B8(void);
-void sub_81BE72C(void);
-
-#endif // GUARD_FLDEFF_GROUNDSHAKE_H
diff --git a/include/global.tv.h b/include/global.tv.h
index 5f65aa8e0..81f181cf3 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -188,11 +188,11 @@ typedef union // size = 0x24
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
- /*0x02*/ u16 species;
+ /*0x02*/ u16 speciesOpponent;
/*0x04*/ u8 playerName[8];
/*0x0C*/ u8 linkOpponentName[8];
/*0x14*/ u16 move;
- /*0x16*/ u16 species2;
+ /*0x16*/ u16 speciesPlayer;
/*0x18*/ u8 battleType;
/*0x19*/ u8 language;
/*0x1A*/ u8 linkOpponentLanguage;
diff --git a/include/graphics.h b/include/graphics.h
index e0c9431ac..9afcb75ad 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2719,12 +2719,18 @@ extern const u16 gFireRedMenuElements2_Pal[16];
extern const u16 gFireRedMenuElements3_Pal[16];
extern const u8 gFireRedMenuElements_Gfx[];
-//item menu graphics
+// item menu graphics
extern const u8 gBagScreen_Gfx[];
extern const u16 gBagScreenFemale_Pal[];
extern const u16 gBagScreenMale_Pal[];
extern const u8 gBagMenuHMIcon_Gfx[];
+// item menu icons graphics
+extern const u8 gBagMaleTiles[];
+extern const u8 gBagFemaleTiles[];
+extern const u8 gBagPalette[];
+extern const u8 gBerryCheckCircle_Gfx[];
+
//intro graphics
extern const u8 gIntro1SparkleGfx[];
extern const u8 gIntro1FlygonGfx[];
@@ -2767,6 +2773,94 @@ extern const u16 gIntro2BrendanNoTurnPal[];
extern const u16 gIntro2FlygonPal[];
extern const u8 gIntro2FlygonGfx[];
+// berry pics
+extern const u8 gBerryPic_Cheri[];
+extern const u8 gBerryPalette_Cheri[];
+extern const u8 gBerryPic_Chesto[];
+extern const u8 gBerryPalette_Chesto[];
+extern const u8 gBerryPic_Pecha[];
+extern const u8 gBerryPalette_Pecha[];
+extern const u8 gBerryPic_Rawst[];
+extern const u8 gBerryPalette_Rawst[];
+extern const u8 gBerryPic_Aspear[];
+extern const u8 gBerryPalette_Aspear[];
+extern const u8 gBerryPic_Leppa[];
+extern const u8 gBerryPalette_Leppa[];
+extern const u8 gBerryPic_Oran[];
+extern const u8 gBerryPalette_Oran[];
+extern const u8 gBerryPic_Persim[];
+extern const u8 gBerryPalette_Persim[];
+extern const u8 gBerryPic_Lum[];
+extern const u8 gBerryPalette_Lum[];
+extern const u8 gBerryPic_Sitrus[];
+extern const u8 gBerryPalette_Sitrus[];
+extern const u8 gBerryPic_Figy[];
+extern const u8 gBerryPalette_Figy[];
+extern const u8 gBerryPic_Wiki[];
+extern const u8 gBerryPalette_Wiki[];
+extern const u8 gBerryPic_Mago[];
+extern const u8 gBerryPalette_Mago[];
+extern const u8 gBerryPic_Aguav[];
+extern const u8 gBerryPalette_Aguav[];
+extern const u8 gBerryPic_Iapapa[];
+extern const u8 gBerryPalette_Iapapa[];
+extern const u8 gBerryPic_Razz[];
+extern const u8 gBerryPalette_Razz[];
+extern const u8 gBerryPic_Bluk[];
+extern const u8 gBerryPalette_Bluk[];
+extern const u8 gBerryPic_Nanab[];
+extern const u8 gBerryPalette_Nanab[];
+extern const u8 gBerryPic_Wepear[];
+extern const u8 gBerryPalette_Wepear[];
+extern const u8 gBerryPic_Pinap[];
+extern const u8 gBerryPalette_Pinap[];
+extern const u8 gBerryPic_Pomeg[];
+extern const u8 gBerryPalette_Pomeg[];
+extern const u8 gBerryPic_Kelpsy[];
+extern const u8 gBerryPalette_Kelpsy[];
+extern const u8 gBerryPic_Qualot[];
+extern const u8 gBerryPalette_Qualot[];
+extern const u8 gBerryPic_Hondew[];
+extern const u8 gBerryPalette_Hondew[];
+extern const u8 gBerryPic_Grepa[];
+extern const u8 gBerryPalette_Grepa[];
+extern const u8 gBerryPic_Tamato[];
+extern const u8 gBerryPalette_Tamato[];
+extern const u8 gBerryPic_Cornn[];
+extern const u8 gBerryPalette_Cornn[];
+extern const u8 gBerryPic_Magost[];
+extern const u8 gBerryPalette_Magost[];
+extern const u8 gBerryPic_Rabuta[];
+extern const u8 gBerryPalette_Rabuta[];
+extern const u8 gBerryPic_Nomel[];
+extern const u8 gBerryPalette_Nomel[];
+extern const u8 gBerryPic_Spelon[];
+extern const u8 gBerryPalette_Spelon[];
+extern const u8 gBerryPic_Pamtre[];
+extern const u8 gBerryPalette_Pamtre[];
+extern const u8 gBerryPic_Watmel[];
+extern const u8 gBerryPalette_Watmel[];
+extern const u8 gBerryPic_Durin[];
+extern const u8 gBerryPalette_Durin[];
+extern const u8 gBerryPic_Belue[];
+extern const u8 gBerryPalette_Belue[];
+extern const u8 gBerryPic_Liechi[];
+extern const u8 gBerryPalette_Liechi[];
+extern const u8 gBerryPic_Ganlon[];
+extern const u8 gBerryPalette_Ganlon[];
+extern const u8 gBerryPic_Salac[];
+extern const u8 gBerryPalette_Salac[];
+extern const u8 gBerryPic_Petaya[];
+extern const u8 gBerryPalette_Petaya[];
+extern const u8 gBerryPic_Apicot[];
+extern const u8 gBerryPalette_Apicot[];
+extern const u8 gBerryPic_Lansat[];
+extern const u8 gBerryPalette_Lansat[];
+extern const u8 gBerryPic_Starf[];
+extern const u8 gBerryPalette_Starf[];
+extern const u8 gBerryPic_Enigma[];
+extern const u8 gBerryPalette_Enigma[];
+
//credits
extern const u8 gCreditsCopyrightEnd_Gfx[];
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/item_menu.h b/include/item_menu.h
index 5c1b26faa..9cffaa6c7 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -4,17 +4,48 @@
// Exported type declarations
struct BagStruct
{
- void *func;
- u8 unk4;
+ void (*bagCallback)(void);
+ u8 location;
u8 pocket;
u8 unk6[2];
- u16 unk8[5];
- u16 unk12[5];
- void *unk1C;
+ u16 cursorPosition[5];
+ u16 scrollPosition[5];
};
extern struct BagStruct gUnknown_0203CE58;
+struct UnkBagStruct
+{
+ void (*unk0)(void);
+ u8 unk4[0x800];
+ u8 unk804[12];
+ u8 unk810[7];
+ u8 unk817;
+ u8 unk818;
+ u8 unk819;
+ u8 unk81A;
+ u8 unk81B:4;
+ u8 unk81B_1:2;
+ u8 unk81B_3:1;
+ u8 unk81B_2:1;
+ u8 filler3[2];
+ u8 unk81E;
+ u8 unk81F;
+ const u8* unk820;
+ u8 unk824;
+ u8 unk825;
+ u8 filler[2];
+ u8 unk828;
+ u8 unk829[5];
+ u8 unk82E[6];
+ s16 unk834;
+ u8 filler4[0xE];
+ u8 unk844[32][32];
+ u8 filler2[4];
+};
+
+extern struct UnkBagStruct *gUnknown_0203CE54;
+
// Exported RAM declarations
extern u16 gSpecialVar_ItemId;
diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h
index 56e012421..aee7599df 100644
--- a/include/item_menu_icons.h
+++ b/include/item_menu_icons.h
@@ -1,16 +1,25 @@
#ifndef GUARD_ITEM_MENU_ICONS
#define GUARD_ITEM_MENU_ICONS
+extern const struct CompressedSpriteSheet gUnknown_0857FB34;
+extern const struct CompressedSpriteSheet gUnknown_0857FB3C;
+extern const struct CompressedSpritePalette gUnknown_0857FB44;
extern const struct CompressedSpriteSheet gUnknown_0857FDEC;
extern const struct CompressedSpritePalette gUnknown_0857FDF4;
-u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3);
+void RemoveBagSprite(u8 id);
+void AddBagVisualSprite(u8 bagPocketId);
+void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets);
+void ShakeBagVisual(void);
+void AddSwitchPocketRotatingBallSprite(s16 rotationDirection);
+void AddBagItemIconSprite(u16 itemId, u8 id);
+void RemoveBagItemIconSprite(u8 id);
+void sub_80D4FAC(void);
+void sub_80D4FC8(u8 arg0);
+void sub_80D4FEC(u8 arg0);
u8 CreateBerryTagSprite(u8 id, s16 x, s16 y);
void FreeBerryTagSpritePalette(void);
+u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine);
u8 CreateBerryFlavorCircleSprite(s16 x);
-void sub_80D4FAC(void);
-void RemoveBagItemIconObject(u8);
-void sub_80D4FEC(u8);
-void sub_80D4FC8(u8);
#endif // GUARD_ITEM_MENU_ICONS
diff --git a/include/list_menu.h b/include/list_menu.h
index 77d00bf97..0aa66a524 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -4,9 +4,11 @@
#define LIST_NOTHING_CHOSEN -1
#define LIST_B_PRESSED -2
-// Exported type declarations
+#define LIST_NO_MULTIPLE_SCROLL 0
+#define LIST_MULTIPLE_SCROLL_DPAD 1
+#define LIST_MULTIPLE_SCROLL_L_R 2
-// Exported RAM declarations
+struct ListMenu;
struct ListMenuItem
{
@@ -14,33 +16,31 @@ struct ListMenuItem
s32 id;
};
-struct ListMenu;
-
struct ListMenuTemplate
{
const struct ListMenuItem *items;
- void (* moveCursorFunc)(u32, bool8, struct ListMenu *);
- void (* unk_08)(u8, s32, u8);
+ void (* moveCursorFunc)(s32, bool8, struct ListMenu *);
+ void (* unk_08)(u8 windowId, s32 itemId, u8 y);
u16 totalItems;
u16 maxShowed;
- u8 unk_10;
+ u8 windowId;
u8 unk_11;
u8 unk_12;
- u8 cursor_Y;
- u32 upText_Y:4; // x1, x2, x4, x8 = xF
- u32 cursorColor:4; // x10, x20, x40, x80 = xF0
- u32 fillColor:4; // x100, x200, x400, x800 = xF00
- u32 cursorShadowColor:4; // x1000, x2000, x4000, x8000 = xF000
- u32 unk_16_0:1; // x10000
- u32 spaceBetweenItems:6; // x20000, x40000, x80000, x100000, x200000, x400000 = x7E0000
- u32 unk_16_7:1; // x800000
- u32 unk_17_0:6; // x1000000, x2000000, x4000000, x8000000, x10000000, x20000000 = x3F000000
- u32 cursorKind:2; // x40000000, x80000000
+ u8 cursor_X;
+ u8 upText_Y:4; // x1, x2, x4, x8 = xF
+ u8 cursorPal:4; // x10, x20, x40, x80 = xF0
+ u8 fillValue:4; // x1, x2, x4, x8 = xF
+ u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0
+ u8 lettersSpacing:3;
+ u8 unk_16_3:3;
+ u8 scrollMultiple:2; // x40, x80 = xC0
+ u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F
+ u8 cursorKind:2; // x40, x80
};
struct ListMenu
{
- struct ListMenuTemplate _template;
+ struct ListMenuTemplate template;
u16 scrollOffset;
u16 selectedRow;
u8 unk_1C;
@@ -49,14 +49,30 @@ struct ListMenu
u8 unk_1F;
};
-extern struct ListMenuTemplate gMultiuseListMenuTemplate;
+struct UnknownListMenuWindowStruct
+{
+ u8 x;
+ u8 y;
+ u8 width;
+ u8 height;
+ u8 palNum;
+};
-// Exported ROM declarations
+extern struct ListMenuTemplate gMultiuseListMenuTemplate;
-u8 ListMenuInit(struct ListMenuTemplate *template, u16 cursorPage, u16 cursorPosition);
+s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
+u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
+u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow);
s32 ListMenuHandleInputGetItemId(u8 listTaskId);
-void sub_81AE860(u8 listTaskId, u16 *a1, u16 *a2);
-void sub_81AE6C8(u8 listTaskId, u16 *a1, u16 *a2);
-u8 ListMenuGetYCoordForPrintingArrowCursor(u8);
+void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
+void sub_81AE70C(u8 listTaskId);
+void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
+void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y);
+s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow);
+void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId);
+void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
+u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId);
+void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
+void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list);
#endif //GUARD_LIST_MENU_H
diff --git a/include/menu_indicators.h b/include/menu_indicators.h
index b82e48725..a099cffab 100644
--- a/include/menu_indicators.h
+++ b/include/menu_indicators.h
@@ -7,16 +7,31 @@
// Exported ROM declarations
-struct ArrowStruct {
+struct ArrowStruct
+{
u8 unk0[6];
u16 unk6[4];
u8 unkE;
};
+struct CursorStruct
+{
+ u8 unk0;
+ u8 unk1;
+ u16 unk2;
+ u16 unk4;
+ u16 unk6;
+ u16 unk8;
+ u8 unkA;
+};
+
void Task_ScrollIndicatorArrowPairOnMainMenu(u8);
u8 AddScrollIndicatorArrowPairParametrized(u8, u8, u8, u8, s32, u16, u16, u16 *);
void RemoveScrollIndicatorArrowPair(u8);
u8 AddScrollIndicatorArrowPair(const struct ArrowStruct*, void*);
void sub_81AF15C(u8, u8, u8);
+void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind);
+void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind);
+u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind);
#endif //GUARD_MENU_INDICATORS_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 6df9ce313..cd79a217d 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -468,6 +468,7 @@ extern struct Pokemon gEnemyParty[PARTY_SIZE];
extern struct SpriteTemplate gUnknown_0202499C;
extern struct PokemonStorage* gPokemonStoragePtr;
+extern const struct BattleMove gBattleMoves[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
extern const struct BaseStats gBaseStats[];
diff --git a/include/roulette_util.h b/include/roulette_util.h
new file mode 100644
index 000000000..f59c4e44c
--- /dev/null
+++ b/include/roulette_util.h
@@ -0,0 +1,17 @@
+#ifndef GUARD_ROULETTE_UTIL_H
+#define GUARD_ROULETTE_UTIL_H
+
+// structures
+struct InnerStruct203CF18
+{
+ u8 filler[0xC4];
+};
+
+void sub_8151B68(struct InnerStruct203CF18 *, const u8*);
+void sub_8151B3C(struct InnerStruct203CF18 *);
+void sub_8151CA8(struct InnerStruct203CF18 *, u8, u8);
+void sub_8151C50(struct InnerStruct203CF18 *, u8, u8);
+void sub_8151D28(struct InnerStruct203CF18 *, u8, u8);
+void sub_8151E50(struct InnerStruct203CF18 *);
+
+#endif // GUARD_ROULETTE_UTIL_H
diff --git a/include/strings.h b/include/strings.h
index 70b2777e1..ceb994900 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -112,9 +112,6 @@ extern const u8 gText_Cancel4[];
extern const u8 gText_IsThisTheCorrectTime[];
extern const u8 gText_PkmnFainted3[];
extern const u8 gText_Coins[];
-extern const u8 gText_Draw[];
-extern const u8 gText_Loss[];
-extern const u8 gText_Win[];
extern const u8 gText_Var1AteTheVar2[];
extern const u8 gText_Var1HappilyAteVar2[];
diff --git a/include/tv.h b/include/tv.h
index eca11385e..19c900ba8 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -4,17 +4,46 @@
extern u8 *const gTVStringVarPtrs[3];
void ClearTVShowData(void);
-void PutPokemonTodayCaughtOnAir(void);
+void sub_80EE184(void);
+void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove);
+void sub_80EE8C8(u16 winStreak, u8 facility);
+void DoTVShow(void);
+void DoTVShowInSearchOfTrainers(void);
+void sub_80EDCE8(void);
+void sub_80EE2CC(void);
+void sub_80EE72C(void);
+void sub_80EED10(void);
+void sub_80EED34(void);
+void sub_80EED60(u16 delta);
+void sub_80F01B8(void);
+void sub_80F01E8(void *src, u32 size, u8 masterIdx);
+void sub_80EE4DC(struct Pokemon *pokemon, u8 ribbonMonDataIdx);
u32 GetPlayerIDAsU32(void);
bool8 GetPriceReduction(u8 newsKind);
+void sub_80F14F8(TVShow *shows);
+size_t CountDigits(int value);
u8 GetRibbonCount(struct Pokemon *pokemon);
-void TV_PutSecretBaseVisitOnTheAir(void);
-void sub_80EE184(void);
+void sub_80EDE70(u16 nCoinsSpent);
+void sub_80EDE84(u16 nCoinsSpent);
+void sub_80EDD78(u16 nCoinsPaidOut);
void sub_80EEA70(void);
-void sub_80F14F8(TVShow *shows);
-size_t sub_80EF370(int value);
-bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
+void sub_80EDB44(void);
+void sub_80EDC60(const u16 *words);
+void sub_80EDA80(void);
+void sub_80F0C7C(void *src, u32 size, u8 masterIdx);
+void sub_80F0BB8(void);
+void sub_80ED950(bool8 flag);
+void sub_80EEC80(void);
+void sub_80EECA4(void);
+void sub_80EECC8(void);
+void sub_80EECEC(void);
+void sub_80F1208(TVShow *shows);
+void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed);
void SetPokemonAnglerSpecies(u16 species);
void UpdateTVShowsPerDay(u16 days);
+void PutPokemonTodayCaughtOnAir(void);
+void TV_PutSecretBaseVisitOnTheAir(void);
+bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
+void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent);
#endif //GUARD_TV_H
diff --git a/ld_script.txt b/ld_script.txt
index 4c7b40dd9..7ead2a863 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);
@@ -136,7 +136,7 @@ SECTIONS {
asm/fldeff_cut.o(.text);
src/mail_data.o(.text);
asm/map_name_popup.o(.text);
- asm/item_menu_icons.o(.text);
+ src/item_menu_icons.o(.text);
asm/battle_anim_80D51AC.o(.text);
src/item.o(.text);
asm/item.o(.text);
@@ -180,7 +180,7 @@ SECTIONS {
src/wallclock.o(.text);
asm/rom6.o(.text);
src/pokeblock.o(.text);
- asm/fldeff_flash.o(.text);
+ src/fldeff_flash.o(.text);
asm/post_battle_event_funcs.o(.text);
src/time_events.o(.text);
src/birch_pc.o(.text);
@@ -236,7 +236,7 @@ SECTIONS {
src/evolution_graphics.o(.text);
src/bard_music.o(.text);
src/fldeff_teleport.o(.text);
- asm/battle_link_817C95C.o(.text);
+ src/battle_tv.o(.text);
src/pokemon_animation.o(.text);
src/recorded_battle.o(.text);
src/battle_controller_recorded_opponent.o(.text);
@@ -247,7 +247,7 @@ SECTIONS {
src/menu.o(.text);
asm/battle_frontier_2.o(.text);
src/item_menu.o(.text);
- asm/list_menu.o(.text);
+ src/list_menu.o(.text);
asm/menu_indicators.o(.text);
src/unk_text_util.o(.text);
src/save_location.o(.text);
@@ -258,7 +258,8 @@ SECTIONS {
src/multiboot.o(.text);
src/unk_81BAD84.o(.text);
src/battle_controller_player_partner.o(.text);
- asm/fldeff_groundshake.o(.text);
+ src/fldeff_groundshake.o(.text);
+ src/fossil_specials.o(.text);
asm/fossil_specials.o(.text);
src/berry_fix_program.o(.text);
src/pokemon_summary_screen.o(.text);
@@ -267,7 +268,7 @@ SECTIONS {
src/rayquaza_scene.o(.text);
src/walda_phrase.o(.text);
asm/contest_link_81D9DE4.o(.text);
- asm/trainer_rematch.o(.text);
+ src/gym_leader_rematch.o(.text);
src/unk_transition.o(.text);
src/international_string_util.o(.text);
asm/international_string_util.o(.text);
@@ -381,7 +382,6 @@ SECTIONS {
data/smokescreen.o(.rodata);
src/battle_controller_opponent.o(.rodata);
src/battle_controller_link_opponent.o(.rodata);
- data/data2c.o(.rodata);
src/pokemon.o(.rodata);
src/trig.o(.rodata);
src/util.o(.rodata);
@@ -433,6 +433,7 @@ SECTIONS {
src/pokemon_icon.o(.rodata);
data/fldeff_cut.o(.rodata);
data/map_name_popup.o(.rodata);
+ src/item_menu_icons.o(.rodata);
data/item_menu_icons.o(.rodata);
data/contest.o(.rodata);
data/shop.o(.rodata);
@@ -469,7 +470,7 @@ SECTIONS {
data/starter_choose.o(.rodata);
src/wallclock.o(.rodata);
src/pokeblock.o(.rodata);
- data/fldeff_flash.o(.rodata);
+ src/fldeff_flash.o(.rodata);
src/time_events.o(.rodata);
data/field_specials.o(.rodata);
data/battle_records.o(.rodata);
@@ -511,7 +512,7 @@ SECTIONS {
src/intro_credits_graphics.o(.rodata);
src/evolution_graphics.o(.rodata);
src/bard_music.o(.rodata);
- data/battle_link_817C95C.o(.rodata);
+ src/battle_tv.o(.rodata);
src/pokemon_animation.o(.rodata);
src/battle_controller_recorded_opponent.o(.rodata);
src/battle_controller_recorded_player.o(.rodata);
@@ -530,13 +531,14 @@ SECTIONS {
src/unk_text_util_2.o(.rodata);
src/unk_81BAD84.o(.rodata);
src/battle_controller_player_partner.o(.rodata);
- data/fossil_special_fldeff_groundshake.o(.rodata);
+ src/fossil_specials.o(.rodata);
+ src/fldeff_groundshake.o(.rodata);
src/berry_fix_program.o(.rodata);
data/pokemon_summary_screen.o(.rodata);
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..e1a9168a9 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -12,10 +12,6 @@
#include "util.h"
#include "constants/battle_ai.h"
-#define AIScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
-#define AIScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8)
-#define AIScriptReadPtr(ptr) (const u8*) AIScriptRead32(ptr)
-
#define AI_ACTION_DONE 0x0001
#define AI_ACTION_FLEE 0x0002
#define AI_ACTION_WATCH 0x0004
@@ -45,7 +41,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 +341,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 +615,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)
@@ -653,7 +648,7 @@ static void BattleAICmd_if_random_less_than(void)
u16 random = Random();
if (random % 256 < gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -663,7 +658,7 @@ static void BattleAICmd_if_random_greater_than(void)
u16 random = Random();
if (random % 256 > gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -673,7 +668,7 @@ static void BattleAICmd_if_random_equal(void)
u16 random = Random();
if (random % 256 == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -683,7 +678,7 @@ static void BattleAICmd_if_random_not_equal(void)
u16 random = Random();
if (random % 256 != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -700,206 +695,206 @@ 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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
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);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status1 & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status1 & status) != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
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);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status1 & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status1 & status) == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
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);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status2 & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status2 & status) != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
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);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status2 & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status2 & status) == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
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);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gStatuses3[bank] & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gStatuses3[battlerId] & status) != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
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);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gStatuses3[bank] & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gStatuses3[battlerId] & status) == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
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);
- status = AIScriptRead32(gAIScriptPtr + 2);
+ side = GET_BATTLER_SIDE(battlerId);
+ status = T1_READ_32(gAIScriptPtr + 2);
if ((gSideStatuses[side] & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
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);
- status = AIScriptRead32(gAIScriptPtr + 2);
+ side = GET_BATTLER_SIDE(battlerId);
+ status = T1_READ_32(gAIScriptPtr + 2);
if ((gSideStatuses[side] & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
@@ -907,7 +902,7 @@ static void BattleAICmd_if_not_side_affecting(void)
static void BattleAICmd_if_less_than(void)
{
if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -915,7 +910,7 @@ static void BattleAICmd_if_less_than(void)
static void BattleAICmd_if_more_than(void)
{
if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -923,7 +918,7 @@ static void BattleAICmd_if_more_than(void)
static void BattleAICmd_if_equal(void)
{
if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -931,80 +926,80 @@ static void BattleAICmd_if_equal(void)
static void BattleAICmd_if_not_equal(void)
{
if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
static void BattleAICmd_if_less_than_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult < *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_more_than_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult > *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_equal_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult == *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_not_equal_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult != *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_move(void)
{
- u16 move = AIScriptRead16(gAIScriptPtr + 1);
+ u16 move = T1_READ_16(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->moveConsidered == move)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_not_move(void)
{
- u16 move = AIScriptRead16(gAIScriptPtr + 1);
+ u16 move = T1_READ_16(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->moveConsidered != move)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_in_bytes(void)
{
- const u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFF)
{
if (AI_THINKING_STRUCT->funcResult == *ptr)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
return;
}
ptr++;
@@ -1014,7 +1009,7 @@ static void BattleAICmd_if_in_bytes(void)
static void BattleAICmd_if_not_in_bytes(void)
{
- const u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFF)
{
@@ -1025,18 +1020,18 @@ static void BattleAICmd_if_not_in_bytes(void)
}
ptr++;
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
}
static void BattleAICmd_if_in_hwords(void)
{
- const u16 *ptr = (const u16 *)AIScriptReadPtr(gAIScriptPtr + 1);
+ const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFFFF)
{
if (AI_THINKING_STRUCT->funcResult == *ptr)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
return;
}
ptr++;
@@ -1046,7 +1041,7 @@ static void BattleAICmd_if_in_hwords(void)
static void BattleAICmd_if_not_in_hwords(void)
{
- const u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1);
+ const u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFFFF)
{
@@ -1057,7 +1052,7 @@ static void BattleAICmd_if_not_in_hwords(void)
}
ptr++;
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
}
static void BattleAICmd_if_user_has_attacking_move(void)
@@ -1073,7 +1068,7 @@ static void BattleAICmd_if_user_has_attacking_move(void)
if (i == 4)
gAIScriptPtr += 5;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_if_user_has_no_attacking_moves(void)
@@ -1089,7 +1084,7 @@ static void BattleAICmd_if_user_has_no_attacking_moves(void)
if (i != 4)
gAIScriptPtr += 5;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_get_turn_count(void)
@@ -1123,9 +1118,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 +1136,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;
}
@@ -1238,7 +1233,7 @@ static void BattleAICmd_get_last_used_bank_move(void)
static void BattleAICmd_if_equal_(void) // same as if_equal
{
if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1246,7 +1241,7 @@ static void BattleAICmd_if_equal_(void) // same as if_equal
static void BattleAICmd_if_not_equal_(void) // same as if_not_equal
{
if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1254,7 +1249,7 @@ static void BattleAICmd_if_not_equal_(void) // same as if_not_equal
static void BattleAICmd_if_user_goes(void)
{
if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1262,7 +1257,7 @@ static void BattleAICmd_if_user_goes(void)
static void BattleAICmd_if_user_doesnt_go(void)
{
if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1277,7 +1272,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 +1280,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 +1292,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 +1330,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)
{
@@ -1528,7 +1523,7 @@ static void BattleAICmd_if_type_effectiveness(void)
damageVar = gBattleMoveDamage;
if (damageVar == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1546,21 +1541,21 @@ 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);
+ statusToCompareTo = T1_READ_32(gAIScriptPtr + 2);
for (i = 0; i < PARTY_SIZE; i++)
{
@@ -1570,7 +1565,7 @@ static void BattleAICmd_if_status_in_party(void)
if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
return;
}
}
@@ -1583,21 +1578,21 @@ 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);
+ statusToCompareTo = T1_READ_32(gAIScriptPtr + 2);
for (i = 0; i < PARTY_SIZE; i++)
{
@@ -1611,7 +1606,7 @@ static void BattleAICmd_if_status_not_in_party(void)
}
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
}
static void BattleAICmd_get_weather(void)
@@ -1631,7 +1626,7 @@ static void BattleAICmd_get_weather(void)
static void BattleAICmd_if_effect(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1639,67 +1634,67 @@ static void BattleAICmd_if_effect(void)
static void BattleAICmd_if_not_effect(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
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])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
@@ -1728,7 +1723,7 @@ static void BattleAICmd_if_can_faint(void)
gBattleMoveDamage = 1;
if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -1755,7 +1750,7 @@ static void BattleAICmd_if_cant_faint(void)
// this macro is missing the damage 0 = 1 assumption.
if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -1780,7 +1775,7 @@ static void BattleAICmd_if_has_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
case AI_USER_PARTNER:
@@ -1804,7 +1799,7 @@ static void BattleAICmd_if_has_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
case AI_TARGET:
@@ -1821,7 +1816,7 @@ static void BattleAICmd_if_has_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
}
@@ -1848,7 +1843,7 @@ static void BattleAICmd_if_doesnt_have_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
case AI_TARGET:
@@ -1865,7 +1860,7 @@ static void BattleAICmd_if_doesnt_have_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
}
@@ -1887,7 +1882,7 @@ static void BattleAICmd_if_has_move_with_effect(void)
if (i == 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
case AI_TARGET:
case AI_TARGET_PARTNER:
@@ -1900,7 +1895,7 @@ static void BattleAICmd_if_has_move_with_effect(void)
if (i == 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
}
}
@@ -1921,7 +1916,7 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void)
if (i != 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
case AI_TARGET:
case AI_TARGET_PARTNER:
@@ -1933,28 +1928,28 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void)
if (i != 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
}
}
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;
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
return;
}
else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1.
@@ -1962,9 +1957,9 @@ 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);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
return;
}
gAIScriptPtr += 7;
@@ -1977,7 +1972,7 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void)
case 0:
if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -1985,7 +1980,7 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void)
case 1:
if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2006,7 +2001,7 @@ static void BattleAICmd_if_random_safari_flee(void)
u8 safariFleeRate = gBattleStruct->field_7B * 5; // safari flee rate, from 0-20
if ((u8)(Random() % 100) < safariFleeRate)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -2018,80 +2013,80 @@ 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];
var1 = gAIScriptPtr[3];
if ((var1 | var2) == item)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
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 +2100,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 +2140,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;
}
@@ -2184,12 +2179,12 @@ static void BattleAICmd_nullsub_57(void)
static void BattleAICmd_call(void)
{
AIStackPushVar(gAIScriptPtr + 5);
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_goto(void)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_end(void)
@@ -2205,7 +2200,7 @@ static void BattleAICmd_if_level_cond(void)
case 0: // greater than
if (gBattleMons[sBattler_AI].level > gBattleMons[gBattlerTarget].level)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2213,7 +2208,7 @@ static void BattleAICmd_if_level_cond(void)
case 1: // less than
if (gBattleMons[sBattler_AI].level < gBattleMons[gBattlerTarget].level)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2221,7 +2216,7 @@ static void BattleAICmd_if_level_cond(void)
case 2: // equal
if (gBattleMons[sBattler_AI].level == gBattleMons[gBattlerTarget].level)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2232,7 +2227,7 @@ static void BattleAICmd_if_level_cond(void)
static void BattleAICmd_if_target_taunted(void)
{
if (gDisableStructs[gBattlerTarget].tauntTimer1 != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -2240,7 +2235,7 @@ static void BattleAICmd_if_target_taunted(void)
static void BattleAICmd_if_target_not_taunted(void)
{
if (gDisableStructs[gBattlerTarget].tauntTimer1 == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -2248,17 +2243,17 @@ static void BattleAICmd_if_target_not_taunted(void)
static void BattleAICmd_if_target_is_ally(void)
{
if ((sBattler_AI & BIT_SIDE) == (gBattlerTarget & BIT_SIDE))
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
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)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ if (gBattleResources->flags->flags[battlerId] & UNKNOWN_FLAG_FLASH_FIRE)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index c3bb0d422..83ad2b4fd 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -9,10 +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
static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng);
static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 7606f701d..7a5197740 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -19,10 +19,6 @@
// sprites start at 10000 and thus must be subtracted of 10000 to account for the true index.
#define GET_TRUE_SPRITE_INDEX(i) ((i - 10000))
-#define SCRIPT_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
-#define SCRIPT_READ_32(ptr) (((ptr)[0]) + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
-#define SCRIPT_READ_PTR(ptr) ((const u8*)(SCRIPT_READ_32(ptr)))
-
#define ANIM_SPRITE_INDEX_COUNT 8
extern u16 gBattle_WIN0H;
@@ -352,7 +348,7 @@ static void ScriptCmd_loadspritegfx(void)
u16 index;
sBattleAnimScriptPtr++;
- index = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ index = T1_READ_16(sBattleAnimScriptPtr);
LoadCompressedObjectPicUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]);
LoadCompressedObjectPaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]);
sBattleAnimScriptPtr += 2;
@@ -366,7 +362,7 @@ static void ScriptCmd_unloadspritegfx(void)
u16 index;
sBattleAnimScriptPtr++;
- index = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ index = T1_READ_16(sBattleAnimScriptPtr);
FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag);
FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag);
sBattleAnimScriptPtr += 2;
@@ -382,7 +378,7 @@ static void ScriptCmd_createsprite(void)
s16 subpriority;
sBattleAnimScriptPtr++;
- template = (const struct SpriteTemplate *)(SCRIPT_READ_32(sBattleAnimScriptPtr));
+ template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr));
sBattleAnimScriptPtr += 4;
argVar = sBattleAnimScriptPtr[0];
@@ -392,7 +388,7 @@ static void ScriptCmd_createsprite(void)
sBattleAnimScriptPtr++;
for (i = 0; i < argsCount; i++)
{
- gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 2;
}
@@ -433,7 +429,7 @@ static void ScriptCmd_createvisualtask(void)
sBattleAnimScriptPtr++;
- taskFunc = (TaskFunc)SCRIPT_READ_32(sBattleAnimScriptPtr);
+ taskFunc = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 4;
taskPriority = sBattleAnimScriptPtr[0];
@@ -444,7 +440,7 @@ static void ScriptCmd_createvisualtask(void)
for (i = 0; i < numArgs; i++)
{
- gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 2;
}
@@ -542,26 +538,26 @@ static void ScriptCmd_end(void)
static void ScriptCmd_playse(void)
{
sBattleAnimScriptPtr++;
- PlaySE(SCRIPT_READ_16(sBattleAnimScriptPtr));
+ PlaySE(T1_READ_16(sBattleAnimScriptPtr));
sBattleAnimScriptPtr += 2;
}
-#define t1_MONBG_BANK 0
+#define t1_MONBG_BATTLER 0
#define t1_MON_IN_BG2 1
#define t1_CREATE_ANOTHER_TASK 2
#define t1_IS_SECONDMON_BG 3
-#define t2_BANK_SPRITE_ID 0
+#define t2_BATTLER_SPRITE_ID 0
#define t2_MON_IN_BG2 5
-#define t2_MONBG_BANK 6
+#define t2_MONBG_BATTLER 6
static void sub_80A40F4(u8 taskId)
{
u8 newTaskId;
s16 *selfData = gTasks[taskId].data;
- u8 bankSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BANK]];
- gSprites[bankSpriteId].invisible = 1;
+ u8 battlerSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BATTLER]];
+ gSprites[battlerSpriteId].invisible = 1;
if (!selfData[t1_CREATE_ANOTHER_TASK])
{
@@ -570,9 +566,9 @@ static void sub_80A40F4(u8 taskId)
}
newTaskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10);
- gTasks[newTaskId].data[t2_BANK_SPRITE_ID] = bankSpriteId;
- gTasks[newTaskId].data[1] = gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x;
- gTasks[newTaskId].data[2] = gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y;
+ gTasks[newTaskId].data[t2_BATTLER_SPRITE_ID] = battlerSpriteId;
+ gTasks[newTaskId].data[1] = gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x;
+ gTasks[newTaskId].data[2] = gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y;
if (!selfData[t1_MON_IN_BG2])
{
@@ -586,7 +582,7 @@ static void sub_80A40F4(u8 taskId)
}
gTasks[newTaskId].data[t2_MON_IN_BG2] = selfData[t1_MON_IN_BG2];
- gTasks[newTaskId].data[t2_MONBG_BANK] = selfData[t1_MONBG_BANK];
+ gTasks[newTaskId].data[t2_MONBG_BATTLER] = selfData[t1_MONBG_BATTLER];
sMonAnimTaskIdArray[selfData[t1_IS_SECONDMON_BG]] = newTaskId;
DestroyAnimVisualTask(taskId);
}
@@ -595,48 +591,48 @@ static void ScriptCmd_monbg(void)
{
bool8 toBG_2;
u8 taskId;
- u8 bank;
+ u8 battlerId;
u8 animBank;
sBattleAnimScriptPtr++;
animBank = sBattleAnimScriptPtr[0];
if (animBank & ANIM_TARGET)
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
else
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
- if (IsBattlerSpriteVisible(bank))
+ if (IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
taskId = CreateTask(sub_80A40F4, 10);
gAnimVisualTaskCount++;
- gTasks[taskId].data[t1_MONBG_BANK] = bank;
+ gTasks[taskId].data[t1_MONBG_BATTLER] = battlerId;
gTasks[taskId].data[t1_MON_IN_BG2] = toBG_2;
gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE;
gTasks[taskId].data[t1_IS_SECONDMON_BG] = 0;
}
- bank ^= BIT_FLANK;
- if (IsBattlerSpriteVisible(bank))
+ battlerId ^= BIT_FLANK;
+ if (IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
taskId = CreateTask(sub_80A40F4, 10);
gAnimVisualTaskCount++;
- gTasks[taskId].data[0] = bank;
+ gTasks[taskId].data[0] = battlerId;
gTasks[taskId].data[1] = toBG_2;
gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE;
gTasks[taskId].data[t1_IS_SECONDMON_BG] = 1;
@@ -647,33 +643,33 @@ static void ScriptCmd_monbg(void)
gAnimScriptCallback = WaitAnimFrameCount;
}
-bool8 IsBattlerSpriteVisible(u8 bank)
+bool8 IsBattlerSpriteVisible(u8 battlerId)
{
if (IsContest())
{
- if (bank == gBattleAnimAttacker)
+ if (battlerId == gBattleAnimAttacker)
return TRUE;
else
return FALSE;
}
- if (!IsBattlerSpritePresent(bank))
+ if (!IsBattlerSpritePresent(battlerId))
return FALSE;
if (IsContest())
return TRUE; // this line wont ever be reached.
- if (!gBattleSpritesDataPtr->battlerData[bank].invisible || !gSprites[gBattlerSpriteIds[bank]].invisible)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible)
return TRUE;
return FALSE;
}
-void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible)
+void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
{
struct UnknownAnimStruct2 unknownStruct;
- u8 bankSpriteId;
+ u8 battlerSpriteId;
if (!toBG_2)
{
- u8 bankIdentity;
+ u8 battlerPosition;
if (IsContest() == TRUE)
{
@@ -694,28 +690,28 @@ void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible)
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0);
- bankSpriteId = gBattlerSpriteIds[bank];
+ battlerSpriteId = gBattlerSpriteIds[battlerId];
- gBattle_BG1_X = -(gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x) + 0x20;
+ gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->field_0))
gBattle_BG1_X--;
- gBattle_BG1_Y = -(gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y) + 0x20;
+ gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
if (setSpriteInvisible)
- gSprites[gBattlerSpriteIds[bank]].invisible = 1;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 1;
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
- LoadPalette(&gPlttBufferUnfaded[0x100 + bank * 16], unknownStruct.unk8 * 16, 0x20);
- CpuCopy32(&gPlttBufferUnfaded[0x100 + bank * 16], (void*)(BG_PLTT + unknownStruct.unk8 * 32), 0x20);
+ LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], unknownStruct.unk8 * 16, 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + unknownStruct.unk8 * 32), 0x20);
if (IsContest())
- bankIdentity = 0;
+ battlerPosition = 0;
else
- bankIdentity = GetBattlerPosition(bank);
+ battlerPosition = GetBattlerPosition(battlerId);
- sub_8118FBC(1, 0, 0, bankIdentity, unknownStruct.unk8, unknownStruct.unk0, unknownStruct.unk4, unknownStruct.unkA);
+ sub_8118FBC(1, 0, 0, battlerPosition, unknownStruct.unk8, unknownStruct.unk0, unknownStruct.unk4, unknownStruct.unkA);
if (IsContest())
sub_80A46A0();
@@ -731,21 +727,21 @@ void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible)
SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 1);
SetAnimBgAttribute(2, BG_ANIM_AREA_OVERFLOW_MODE, 0);
- bankSpriteId = gBattlerSpriteIds[bank];
+ battlerSpriteId = gBattlerSpriteIds[battlerId];
- gBattle_BG2_X = -(gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x) + 0x20;
- gBattle_BG2_Y = -(gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y) + 0x20;
+ gBattle_BG2_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
+ gBattle_BG2_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
if (setSpriteInvisible)
- gSprites[gBattlerSpriteIds[bank]].invisible = 1;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 1;
SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
- LoadPalette(&gPlttBufferUnfaded[0x100 + bank * 16], 0x90, 0x20);
- CpuCopy32(&gPlttBufferUnfaded[0x100 + bank * 16], (void*)(BG_PLTT + 0x120), 0x20);
+ LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20);
- sub_8118FBC(2, 0, 0, GetBattlerPosition(bank), unknownStruct.unk8, unknownStruct.unk0 + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.unkA);
+ sub_8118FBC(2, 0, 0, GetBattlerPosition(battlerId), unknownStruct.unk8, unknownStruct.unk0 + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.unkA);
}
}
@@ -852,7 +848,7 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
static void ScriptCmd_clearmonbg(void)
{
u8 animBankId;
- u8 bank;
+ u8 battlerId;
u8 taskId;
sBattleAnimScriptPtr++;
@@ -864,20 +860,20 @@ static void ScriptCmd_clearmonbg(void)
animBankId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
else
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
if (sMonAnimTaskIdArray[0] != 0xFF)
- gSprites[gBattlerSpriteIds[bank]].invisible = 0;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
if (animBankId > 1 && sMonAnimTaskIdArray[1] != 0xFF)
- gSprites[gBattlerSpriteIds[bank ^ BIT_FLANK]].invisible = 0;
+ gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else
animBankId = 0;
taskId = CreateTask(sub_80A4980, 5);
gTasks[taskId].data[0] = animBankId;
- gTasks[taskId].data[2] = bank;
+ gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++;
}
@@ -913,7 +909,7 @@ static void sub_80A4980(u8 taskId)
static void ScriptCmd_monbg_22(void)
{
bool8 toBG_2;
- u8 bank;
+ u8 battlerId;
u8 animBankId;
sBattleAnimScriptPtr++;
@@ -926,31 +922,31 @@ static void ScriptCmd_monbg_22(void)
animBankId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
else
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
- if (IsBattlerSpriteVisible(bank))
+ if (IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
}
- bank ^= BIT_FLANK;
- if (animBankId > 1 && IsBattlerSpriteVisible(bank))
+ battlerId ^= BIT_FLANK;
+ if (animBankId > 1 && IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
}
sBattleAnimScriptPtr++;
@@ -959,7 +955,7 @@ static void ScriptCmd_monbg_22(void)
static void ScriptCmd_clearmonbg_23(void)
{
u8 animBankId;
- u8 bank;
+ u8 battlerId;
u8 taskId;
sBattleAnimScriptPtr++;
@@ -971,20 +967,20 @@ static void ScriptCmd_clearmonbg_23(void)
animBankId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
else
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
- if (IsBattlerSpriteVisible(bank))
- gSprites[gBattlerSpriteIds[bank]].invisible = 0;
- if (animBankId > 1 && IsBattlerSpriteVisible(bank ^ BIT_FLANK))
- gSprites[gBattlerSpriteIds[bank ^ BIT_FLANK]].invisible = 0;
+ if (IsBattlerSpriteVisible(battlerId))
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
+ if (animBankId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK))
+ gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else
animBankId = 0;
taskId = CreateTask(sub_80A4BB0, 5);
gTasks[taskId].data[0] = animBankId;
- gTasks[taskId].data[2] = bank;
+ gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++;
}
@@ -995,30 +991,30 @@ static void sub_80A4BB0(u8 taskId)
if (gTasks[taskId].data[1] != 1)
{
bool8 toBG_2;
- u8 bank = gTasks[taskId].data[2];
- u8 position = GetBattlerPosition(bank);
+ u8 battlerId = gTasks[taskId].data[2];
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- if (IsBattlerSpriteVisible(bank))
+ if (IsBattlerSpriteVisible(battlerId))
sub_80A477C(toBG_2);
- if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(bank ^ BIT_FLANK))
+ if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK))
sub_80A477C(toBG_2 ^ 1);
DestroyTask(taskId);
}
}
-#undef t1_MONBG_BANK
+#undef t1_MONBG_BATTLER
#undef t1_MON_IN_BG2
#undef t1_CREATE_ANOTHER_TASK
#undef t1_IS_SECONDMON_BG
-#undef t2_BANK_SPRITE_ID
+#undef t2_BATTLER_SPRITE_ID
#undef t2_MON_IN_BG2
-#undef t2_MONBG_BANK
+#undef t2_MONBG_BATTLER
static void ScriptCmd_setalpha(void)
{
@@ -1052,7 +1048,7 @@ static void ScriptCmd_call(void)
{
sBattleAnimScriptPtr++;
sBattleAnimScriptRetAddr = sBattleAnimScriptPtr + 4;
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
}
static void ScriptCmd_return(void)
@@ -1069,7 +1065,7 @@ static void ScriptCmd_setarg(void)
sBattleAnimScriptPtr++;
argId = sBattleAnimScriptPtr[0];
sBattleAnimScriptPtr++;
- value = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ value = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr = addr + 4;
gBattleAnimArgs[argId] = value;
}
@@ -1079,7 +1075,7 @@ static void ScriptCmd_choosetwoturnanim(void)
sBattleAnimScriptPtr++;
if (gAnimMoveTurn & 1)
sBattleAnimScriptPtr += 4;
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
}
static void ScriptCmd_jumpifmoveturn(void)
@@ -1090,7 +1086,7 @@ static void ScriptCmd_jumpifmoveturn(void)
sBattleAnimScriptPtr++;
if (toCheck == gAnimMoveTurn)
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
else
sBattleAnimScriptPtr += 4;
}
@@ -1098,7 +1094,7 @@ static void ScriptCmd_jumpifmoveturn(void)
static void ScriptCmd_goto(void)
{
sBattleAnimScriptPtr++;
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
}
// Uses of this function that rely on a TRUE return are expecting inBattle to not be ticked as defined in contest behavior. As a result, if misused, this function cannot reliably discern between field and contest status and could result in undefined behavior.
@@ -1354,7 +1350,7 @@ static void ScriptCmd_playsewithpan(void)
s8 pan;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
pan = sBattleAnimScriptPtr[2];
PlaySE12WithPanning(songId, BattleAnimAdjustPanning(pan));
sBattleAnimScriptPtr += 3;
@@ -1385,7 +1381,7 @@ static void ScriptCmd_panse_1B(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songNum = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songNum = T1_READ_16(sBattleAnimScriptPtr);
currentPanArg = sBattleAnimScriptPtr[2];
incrementPan = sBattleAnimScriptPtr[3];
incrementPanArg = sBattleAnimScriptPtr[4];
@@ -1457,7 +1453,7 @@ static void ScriptCmd_panse_26(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
currentPan = sBattleAnimScriptPtr[2];
targetPan = sBattleAnimScriptPtr[3];
incrementPan = sBattleAnimScriptPtr[4];
@@ -1484,7 +1480,7 @@ static void ScriptCmd_panse_27(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
currentPanArg = sBattleAnimScriptPtr[2];
targetPanArg = sBattleAnimScriptPtr[3];
incrementPanArg = sBattleAnimScriptPtr[4];
@@ -1528,7 +1524,7 @@ static void ScriptCmd_loopsewithpan(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
panningArg = sBattleAnimScriptPtr[2];
framesToWait = sBattleAnimScriptPtr[3];
numberOfPlays = sBattleAnimScriptPtr[4];
@@ -1585,7 +1581,7 @@ static void ScriptCmd_waitplaysewithpan(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
panningArg = sBattleAnimScriptPtr[2];
framesToWait = sBattleAnimScriptPtr[3];
panning = BattleAnimAdjustPanning(panningArg);
@@ -1620,13 +1616,13 @@ static void ScriptCmd_createsoundtask(void)
s32 i;
sBattleAnimScriptPtr++;
- func = (TaskFunc)SCRIPT_READ_32(sBattleAnimScriptPtr);
+ func = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 4;
numArgs = sBattleAnimScriptPtr[0];
sBattleAnimScriptPtr++;
for (i = 0; i < numArgs; i++)
{
- gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 2;
}
taskId = CreateTask(func, 1);
@@ -1669,10 +1665,10 @@ static void ScriptCmd_jumpargeq(void)
sBattleAnimScriptPtr++;
argId = sBattleAnimScriptPtr[0];
- valueToCheck = SCRIPT_READ_16(sBattleAnimScriptPtr + 1);
+ valueToCheck = T1_READ_16(sBattleAnimScriptPtr + 1);
if (valueToCheck == gBattleAnimArgs[argId])
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr + 3);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr + 3);
else
sBattleAnimScriptPtr += 7;
}
@@ -1681,7 +1677,7 @@ static void ScriptCmd_jumpifcontest(void)
{
sBattleAnimScriptPtr++;
if (IsContest())
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
else
sBattleAnimScriptPtr += 4;
}
@@ -1689,19 +1685,19 @@ static void ScriptCmd_jumpifcontest(void)
static void ScriptCmd_monbgprio_28(void)
{
u8 wantedBank;
- u8 bank;
- u8 bankIdentity;
+ u8 battlerId;
+ u8 battlerPosition;
wantedBank = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
if (wantedBank != ANIM_ATTACKER)
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
else
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
- bankIdentity = GetBattlerPosition(bank);
- if (!IsContest() && (bankIdentity == B_POSITION_PLAYER_LEFT || bankIdentity == B_POSITION_OPPONENT_RIGHT))
+ battlerPosition = GetBattlerPosition(battlerId);
+ if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT))
{
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2);
@@ -1721,20 +1717,20 @@ static void ScriptCmd_monbgprio_29(void)
static void ScriptCmd_monbgprio_2A(void)
{
u8 wantedBank;
- u8 bankIdentity;
- u8 bank;
+ u8 battlerPosition;
+ u8 battlerId;
wantedBank = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget))
{
if (wantedBank != ANIM_ATTACKER)
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
else
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
- bankIdentity = GetBattlerPosition(bank);
- if (!IsContest() && (bankIdentity == B_POSITION_PLAYER_LEFT || bankIdentity == B_POSITION_OPPONENT_RIGHT))
+ battlerPosition = GetBattlerPosition(battlerId);
+ if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT))
{
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2);
diff --git a/src/battle_bg.c b/src/battle_bg.c
index f493bafea..d4bfd297a 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -14,7 +14,6 @@
#include "trig.h"
#include "sound.h"
#include "constants/songs.h"
-#include "strings.h"
#include "window.h"
#include "text_window.h"
#include "menu.h"
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index a399adf25..a4aac55e2 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -32,9 +32,8 @@ 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_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
extern u16 sub_8068B48(void);
@@ -104,7 +103,7 @@ static void LinkOpponentBufferExecCompleted(void);
static void sub_8064DD0(void);
static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst);
static void SetLinkOpponentMonData(u8 monId);
-static void sub_8066494(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void LinkOpponentDoMoveAnimation(void);
static void sub_8067618(u8 taskId);
@@ -1160,36 +1159,36 @@ static void LinkOpponentHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_8064F40;
}
-static void sub_8066494(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
}
static void LinkOpponentHandleReturnMonToBall(void)
@@ -1338,7 +1337,7 @@ static void LinkOpponentHandleTrainerSlide(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; // this line is redundant, because LinkOpponentBufferExecCompleted changes the battle bank function
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; // this line is redundant, because LinkOpponentBufferExecCompleted changes the battle battlerId function
LinkOpponentBufferExecCompleted();
}
@@ -1414,7 +1413,7 @@ static void LinkOpponentHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -1478,7 +1477,7 @@ static void LinkOpponentHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
}
static void LinkOpponentHandlePrintSelectionString(void)
@@ -1549,11 +1548,11 @@ static void LinkOpponentHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1831,7 +1830,7 @@ static void LinkOpponentHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 1734abe62..d742d5df2 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -31,9 +31,8 @@ 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_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -102,7 +101,7 @@ static void LinkPartnerBufferExecCompleted(void);
static void sub_814B554(void);
static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst);
static void SetLinkPartnerMonData(u8 monId);
-static void sub_814CC98(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void LinkPartnerDoMoveAnimation(void);
static void sub_814DCCC(u8 taskId);
@@ -1046,35 +1045,35 @@ static void LinkPartnerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_814B69C;
}
-static void sub_814CC98(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void LinkPartnerHandleReturnMonToBall(void)
@@ -1238,7 +1237,7 @@ static void LinkPartnerHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -1302,7 +1301,7 @@ static void LinkPartnerHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
}
static void LinkPartnerHandlePrintSelectionString(void)
@@ -1373,11 +1372,11 @@ static void LinkPartnerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1666,7 +1665,7 @@ static void LinkPartnerHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 26e0191cb..64cf16b86 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "battle_ai_script_commands.h"
#include "pokemon.h"
#include "link.h"
@@ -35,11 +35,10 @@ 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_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
-extern void sub_81A57E4(u8 bank, u16 stringId);
+extern void sub_81A57E4(u8 battlerId, u16 stringId);
extern u8 sub_81A4CB0(void);
extern u8 sub_81D5588(u16 trainerId);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -109,7 +108,7 @@ static void OpponentBufferExecCompleted(void);
static void sub_805FC80(void);
static u32 GetOpponentMonData(u8 monId, u8 *dst);
static void SetOpponentMonData(u8 monId);
-static void sub_80613DC(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void OpponentDoMoveAnimation(void);
static void sub_806280C(struct Sprite *sprite);
@@ -1154,36 +1153,36 @@ static void OpponentHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_805FDF0;
}
-static void sub_80613DC(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
}
static void OpponentHandleReturnMonToBall(void)
@@ -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));
@@ -1698,11 +1697,11 @@ static void OpponentHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 8847715f6..e0694029a 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -42,22 +42,12 @@ 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[];
-extern const u8 gText_MoveInterfaceType[];
-extern const u8 gText_LinkStandby[];
-extern const u8 gText_BattleMenu[];
-extern const u8 gText_WhatWillPkmnDo[];
-extern const u8 gText_BattleYesNoChoice[];
-
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_81B89AC(u8 arg0);
extern void sub_81AABB0(void);
extern void sub_806A068(u16, u8);
-extern void sub_81A57E4(u8 bank, u16 stringId);
+extern void sub_81A57E4(u8 battlerId, u16 stringId);
extern void sub_81851A8(u8 *);
// this file's functions
@@ -140,7 +130,7 @@ static void sub_80595A4(u8 taskId);
static void PrintLinkStandbyMsg(void);
static u32 CopyPlayerMonData(u8 monId, u8 *dst);
static void SetPlayerMonData(u8 monId);
-static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void PlayerDoMoveAnimation(void);
static void task05_08033660(u8 taskId);
@@ -432,7 +422,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 +464,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 +498,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 +507,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 +542,7 @@ static void HandleInputChooseMove(void)
{
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
- if (moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
+ if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
gMultiUsePlayerCursor = gActiveBattler;
else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)])
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
@@ -881,7 +871,7 @@ static void sub_80586F8(void)
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
if (gBattleOutcome == B_OUTCOME_WON)
- sub_817E3F4();
+ TryPutLinkBattleTvShowOnAir();
FreeAllWindowBuffers();
}
}
@@ -894,7 +884,7 @@ static void sub_80586F8(void)
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
if (gBattleOutcome == B_OUTCOME_WON)
- sub_817E3F4();
+ TryPutLinkBattleTvShowOnAir();
FreeAllWindowBuffers();
}
}
@@ -1159,10 +1149,10 @@ static void CompleteOnInactiveTextPrinter(void)
static void Task_GiveExpToMon(u8 taskId)
{
u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[bank]) // give exp without the expbar
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar
{
struct Pokemon *mon = &gPlayerParty[monId];
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1178,12 +1168,12 @@ static void Task_GiveExpToMon(u8 taskId)
CalculateMonStats(mon);
gainedExp -= nextLvlExp - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
if (IsDoubleBattle() == TRUE
- && ((u16)(monId) == gBattlerPartyIndexes[bank] || (u16)(monId) == gBattlerPartyIndexes[bank ^ BIT_FLANK]))
+ && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
gTasks[taskId].func = sub_8059544;
else
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
@@ -1192,7 +1182,7 @@ static void Task_GiveExpToMon(u8 taskId)
{
currExp += gainedExp;
SetMonData(mon, MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -1206,7 +1196,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
struct Pokemon *mon = &gPlayerParty[monIndex];
u8 level = GetMonData(mon, MON_DATA_LEVEL);
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1216,7 +1206,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
exp -= currLvlExp;
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
- SetBattleBarStruct(bank, gHealthboxSpriteIds[bank], expToNextLvl, exp, -gainedExp);
+ SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
PlaySE(SE_EXP);
gTasks[taskId].func = sub_8059400;
}
@@ -1231,11 +1221,11 @@ static void sub_8059400(u8 taskId)
{
u8 monId = gTasks[taskId].tExpTask_monId;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 r4;
- r4 = sub_8074AA0(bank, gHealthboxSpriteIds[bank], EXP_BAR, 0);
- SetHealthboxSpriteVisible(gHealthboxSpriteIds[bank]);
+ r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
if (r4 == -1)
{
u8 level;
@@ -1257,7 +1247,7 @@ static void sub_8059400(u8 taskId)
CalculateMonStats(&gPlayerParty[monId]);
gainedExp -= expOnNextLvl - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
gTasks[taskId].func = sub_8059544;
@@ -1266,7 +1256,7 @@ static void sub_8059400(u8 taskId)
{
currExp += gainedExp;
SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -1275,30 +1265,30 @@ static void sub_8059400(u8 taskId)
static void sub_8059544(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
u8 monIndex = gTasks[taskId].tExpTask_monId;
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- bank ^= BIT_FLANK;
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ battlerId ^= BIT_FLANK;
- InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP);
+ InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
gTasks[taskId].func = sub_80595A4;
}
static void sub_80595A4(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
- if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive)
+ if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
else
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL);
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
}
@@ -1307,12 +1297,12 @@ static void sub_80595A4(u8 taskId)
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
{
u8 monIndex;
- u8 bank;
+ u8 battlerId;
monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- bank = gTasks[taskId].tExpTask_bank;
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ battlerId = gTasks[taskId].tExpTask_bank;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
@@ -2201,35 +2191,35 @@ static void PlayerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_805902C;
}
-static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void PlayerHandleReturnMonToBall(void)
@@ -2484,7 +2474,7 @@ static void PlayerHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -2548,7 +2538,7 @@ static void PlayerHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
sub_81A57E4(gActiveBattler, *stringId);
}
@@ -2575,7 +2565,7 @@ static void PlayerHandleChooseAction(void)
s32 i;
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
- sub_817F2A8();
+ BattleTv_ClearExplosionFaintCause();
BattleHandleAddTextPrinter(gText_BattleMenu, 2);
for (i = 0; i < 4; i++)
@@ -2751,11 +2741,11 @@ static void PlayerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -2964,13 +2954,13 @@ static void PlayerHandleIntroTrainerBallThrow(void)
void sub_805CC00(struct Sprite *sprite)
{
- u8 bank = sprite->data[5];
+ u8 battlerId = sprite->data[5];
FreeSpriteOamMatrix(sprite);
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
DestroySprite(sprite);
- BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[bank]], bank);
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], 0);
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
}
static void task05_08033660(u8 taskId)
@@ -3069,7 +3059,7 @@ static void PlayerHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index d2f85f85e..f18f582f7 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -31,10 +31,9 @@ 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);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -108,7 +107,7 @@ static void sub_81BB688(u8 taskId);
static void sub_81BB9A0(void);
static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst);
static void SetPlayerPartnerMonData(u8 monId);
-static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void PlayerPartnerDoMoveAnimation(void);
static void sub_81BE2C8(u8 taskId);
@@ -325,10 +324,10 @@ static void CompleteOnInactiveTextPrinter(void)
static void Task_GiveExpToMon(u8 taskId)
{
u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[bank]) // give exp without the expbar
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar
{
struct Pokemon *mon = &gPlayerParty[monId];
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -344,12 +343,12 @@ static void Task_GiveExpToMon(u8 taskId)
CalculateMonStats(mon);
gainedExp -= nextLvlExp - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
if (IsDoubleBattle() == TRUE
- && ((u16)(monId) == gBattlerPartyIndexes[bank] || (u16)(monId) == gBattlerPartyIndexes[bank ^ BIT_FLANK]))
+ && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
gTasks[taskId].func = sub_81BB628;
else
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
@@ -358,7 +357,7 @@ static void Task_GiveExpToMon(u8 taskId)
{
currExp += gainedExp;
SetMonData(mon, MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -372,7 +371,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
struct Pokemon *mon = &gPlayerParty[monIndex];
u8 level = GetMonData(mon, MON_DATA_LEVEL);
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -382,7 +381,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
exp -= currLvlExp;
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
- SetBattleBarStruct(bank, gHealthboxSpriteIds[bank], expToNextLvl, exp, -gainedExp);
+ SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
PlaySE(SE_EXP);
gTasks[taskId].func = sub_81BB4E4;
}
@@ -397,11 +396,11 @@ static void sub_81BB4E4(u8 taskId)
{
u8 monId = gTasks[taskId].tExpTask_monId;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 r4;
- r4 = sub_8074AA0(bank, gHealthboxSpriteIds[bank], EXP_BAR, 0);
- SetHealthboxSpriteVisible(gHealthboxSpriteIds[bank]);
+ r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
if (r4 == -1)
{
u8 level;
@@ -423,7 +422,7 @@ static void sub_81BB4E4(u8 taskId)
CalculateMonStats(&gPlayerParty[monId]);
gainedExp -= expOnNextLvl - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
gTasks[taskId].func = sub_81BB628;
@@ -432,7 +431,7 @@ static void sub_81BB4E4(u8 taskId)
{
currExp += gainedExp;
SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -441,30 +440,30 @@ static void sub_81BB4E4(u8 taskId)
static void sub_81BB628(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
u8 monIndex = gTasks[taskId].tExpTask_monId;
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- bank ^= BIT_FLANK;
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ battlerId ^= BIT_FLANK;
- InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP);
+ InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
gTasks[taskId].func = sub_81BB688;
}
static void sub_81BB688(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
- if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive)
+ if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
else
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL);
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
}
@@ -473,12 +472,12 @@ static void sub_81BB688(u8 taskId)
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
{
u8 monIndex;
- u8 bank;
+ u8 battlerId;
monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- bank = gTasks[taskId].tExpTask_bank;
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ battlerId = gTasks[taskId].tExpTask_bank;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
@@ -1233,35 +1232,35 @@ static void PlayerPartnerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_81BBAE8;
}
-static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void PlayerPartnerHandleReturnMonToBall(void)
@@ -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)
{
@@ -1626,11 +1625,11 @@ static void PlayerPartnerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 2295c4a75..4d1ccbaca 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "recorded_battle.h"
#include "pokemon.h"
#include "link.h"
@@ -35,7 +35,7 @@ extern u8 gUnknown_0203C7B4;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u16 sub_8068B48(void);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -104,7 +104,7 @@ static void RecordedOpponentBufferExecCompleted(void);
static void sub_8186F14(void);
static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst);
static void SetRecordedOpponentMonData(u8 monId);
-static void sub_81885D8(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void RecordedOpponentDoMoveAnimation(void);
static void sub_8189548(u8 taskId);
@@ -1144,35 +1144,35 @@ static void RecordedOpponentHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_8187084;
}
-static void sub_81885D8(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
}
static void RecordedOpponentHandleReturnMonToBall(void)
@@ -1490,11 +1490,11 @@ static void RecordedOpponentHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 0d06e26eb..b16c3f307 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -34,9 +34,8 @@ 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_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -104,7 +103,7 @@ static void RecordedPlayerBufferExecCompleted(void);
static void sub_818A328(void);
static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst);
static void SetRecordedPlayerMonData(u8 monId);
-static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void RecordedPlayerDoMoveAnimation(void);
static void sub_818CC24(u8 taskId);
@@ -1130,35 +1129,35 @@ static void RecordedPlayerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_818A470;
}
-static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void RecordedPlayerHandleReturnMonToBall(void)
@@ -1513,11 +1512,11 @@ static void RecordedPlayerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index 39eab24ee..09776f150 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -23,15 +23,11 @@
#include "pokeblock.h"
#include "item_use.h"
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const u8 gText_SafariZoneMenu[];
-extern const u8 gText_WhatWillPkmnDo2[];
-
extern void sub_81358F4(void);
// this file's functions
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 445feaf7a..ca7b2fd44 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -37,10 +37,7 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const u8 gText_WhatWillWallyDo[];
-extern const u8 gText_BattleMenu[];
-
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
// this file's functions
@@ -1460,31 +1457,31 @@ static void WallyHandleIntroTrainerBallThrow(void)
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
}
-static void sub_816AA80(u8 bank)
+static void sub_816AA80(u8 battlerId)
{
u16 species;
- gBattleSpritesDataPtr->battlerData[bank].transformSpecies = 0;
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
- gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
-
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
-
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
-
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = 0;
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
+
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
+
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
+
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void sub_816AC04(u8 taskId)
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 3c8b1563f..2b918d018 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -12,34 +12,14 @@
#include "constants/abilities.h"
#include "battle_message.h"
-extern u32 gBattleExecBuffer;
-extern void (*gBattleBankFunc[4])(void);
-extern u8 gBanksByIdentity[4];
-extern u8 gActionSelectionCursor[4];
-extern u8 gMoveSelectionCursor[4];
-extern u8 gNoOfAllBanks;
-extern u8 gActiveBank;
-extern u16 gBattlePartyID[4];
-extern u8 gBattleBufferA[4][0x200];
-extern u8 gBattleBufferB[4][0x200];
extern u8 gUnknown_02022D08;
extern u8 gUnknown_02022D09;
extern u8 gUnknown_02022D0A;
-extern u8 gBankAttacker;
-extern u8 gBankTarget;
-extern u8 gAbsentBankFlags;
-extern u8 gEffectBank;
-extern struct BattlePokemon gBattleMons[4];
-extern u16 gLastUsedMove;
-extern u8 gStringBank;
-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
+extern void sub_81B8D64(u8 battlerId, u8 arg1); // party_menu
// this file's funcionts
static void CreateTasksForSendRecvLinkBuffers(void);
@@ -97,7 +77,6 @@ void SetUpBattleVarsAndBirchZigzagoon(void)
void sub_8032768(void)
{
s32 i;
- u8 *data;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
sub_8184DA4(1);
@@ -120,11 +99,11 @@ void sub_8032768(void)
sub_81B8D64(i, 0);
}
- for (i = 0; i < sizeof(gBattleStruct->field_1A4); i++)
- *(gBattleStruct->field_1A4 + i) = 0;
+ for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++)
+ *((u8*)(&gBattleStruct->tvMovePoints) + i) = 0;
- for (i = 0; i < sizeof(gBattleStruct->field_204); i++)
- *(gBattleStruct->field_204 + i) = 0;
+ for (i = 0; i < sizeof(gBattleStruct->tv); i++)
+ *((u8*)(&gBattleStruct->tv) + i) = 0;
}
static void InitSinglePlayerBtlControllers(void)
@@ -887,7 +866,7 @@ void sub_8033648(void)
static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
{
u16 blockSize;
- u8 bank;
+ u8 battlerId;
u8 var;
if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
@@ -898,17 +877,17 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
gTasks[taskId].data[12] = 0;
gTasks[taskId].data[15] = 0;
}
- bank = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BANK];
+ battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BANK];
blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0])
{
case 0:
- if (gBattleControllerExecFlags & gBitTable[bank])
+ if (gBattleControllerExecFlags & gBitTable[battlerId])
return;
- memcpy(gBattleBufferA[bank], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
- sub_803F850(bank);
+ memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
+ sub_803F850(battlerId);
if (!(gBattleTypeFlags & BATTLE_TYPE_WILD))
{
@@ -919,11 +898,11 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
}
break;
case 1:
- memcpy(gBattleBufferB[bank], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
+ memcpy(gBattleBufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
break;
case 2:
var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA];
- gBattleControllerExecFlags &= ~(gBitTable[bank] << (var * 4));
+ gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4));
break;
}
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_interface.c b/src/battle_interface.c
index 96462ec04..0a8bf3ed7 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -21,6 +21,7 @@
#include "safari_zone.h"
#include "battle_anim.h"
#include "constants/rgb.h"
+#include "data2.h"
struct TestingBar
{
@@ -154,7 +155,6 @@ enum
};
extern const u8 * const gNatureNamePointers[];
-extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
// strings
extern const u8 gText_Slash[];
@@ -162,8 +162,6 @@ extern const u8 gText_HighlightDarkGrey[];
extern const u8 gText_DynColor2[];
extern const u8 gText_DynColor2Male[];
extern const u8 gText_DynColor1Female[];
-extern const u8 gText_SafariBalls[];
-extern const u8 gText_SafariBallLeft[];
// graphics
extern const u8 gBattleInterface_BallStatusBarGfx[];
@@ -198,10 +196,10 @@ static void SpriteCB_StatusSummaryBar(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite);
-static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank);
+static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId);
static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5);
static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale);
-static void sub_8074B9C(u8 bank, u8 whichBar);
+static void sub_8074B9C(u8 battlerId, u8 whichBar);
static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5);
static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
@@ -1034,13 +1032,13 @@ static void sub_8072924(struct Sprite *sprite)
sprite->pos2.y = gSprites[otherSpriteId].pos2.y;
}
-void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue)
+void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue)
{
- gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId = healthboxSpriteId;
- gBattleSpritesDataPtr->battleBars[bank].maxValue = maxVal;
- gBattleSpritesDataPtr->battleBars[bank].currentValue = currVal;
- gBattleSpritesDataPtr->battleBars[bank].receivedValue = receivedValue;
- gBattleSpritesDataPtr->battleBars[bank].field_10 = -32768;
+ gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId = healthboxSpriteId;
+ gBattleSpritesDataPtr->battleBars[battlerId].maxValue = maxVal;
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue = currVal;
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue = receivedValue;
+ gBattleSpritesDataPtr->battleBars[battlerId].field_10 = -32768;
}
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId)
@@ -1281,12 +1279,12 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
}
else
{
- u8 bank;
+ u8 battlerId;
memcpy(text, sUnknown_0832C3D8, sizeof(sUnknown_0832C3D8));
- bank = gSprites[healthboxSpriteId].data[6];
+ battlerId = gSprites[healthboxSpriteId].data[6];
- if (gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars) // don't print text if only bars are visible
+ if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible
{
u8 var = 4;
u8 r7;
@@ -1327,7 +1325,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
}
else
{
- if (GetBattlerSide(bank) == B_SIDE_PLAYER) // impossible to reach part, because the bank is from the opponent's side
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // impossible to reach part, because the battlerId is from the opponent's side
{
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116),
(void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * 32),
@@ -1469,7 +1467,7 @@ void SwapHpBarsWithHpText(void)
}
}
-u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart)
+u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart)
{
bool8 isOpponent;
s16 bar_X, bar_Y, bar_pos2_X, bar_data0;
@@ -1478,9 +1476,9 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
u8 ballIconSpritesIds[6];
u8 taskId;
- if (!arg2 || GetBattlerPosition(bank) != B_POSITION_OPPONENT_RIGHT)
+ if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT)
{
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
isOpponent = FALSE;
bar_X = 136, bar_Y = 96;
@@ -1559,7 +1557,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
gSprites[ballIconSpritesIds[i]].data[2] = isOpponent;
}
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
@@ -1658,7 +1656,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
}
taskId = CreateTask(TaskDummy, 5);
- gTasks[taskId].data[0] = bank;
+ gTasks[taskId].data[0] = battlerId;
gTasks[taskId].data[1] = barSpriteId;
for (i = 0; i < 6; i++)
@@ -1680,12 +1678,12 @@ void sub_8073C30(u8 taskId)
u8 sp[6];
u8 r7;
u8 r10;
- u8 bank;
+ u8 battlerId;
s32 i;
r7 = gTasks[taskId].data[10];
r10 = gTasks[taskId].data[1];
- bank = gTasks[taskId].data[0];
+ battlerId = gTasks[taskId].data[0];
for (i = 0; i < 6; i++)
sp[i] = gTasks[taskId].data[3 + i];
@@ -1704,7 +1702,7 @@ void sub_8073C30(u8 taskId)
{
for (i = 0; i < 6; i++)
{
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
gSprites[sp[5 - i]].data[1] = 7 * i;
gSprites[sp[5 - i]].data[3] = 0;
@@ -1752,7 +1750,7 @@ static void sub_8073E64(u8 taskId)
u8 sp[6];
s32 i;
- u8 bank = gTasks[taskId].data[0];
+ u8 battlerId = gTasks[taskId].data[0];
gTasks[taskId].data[15]--;
if (gTasks[taskId].data[15] == -1)
{
@@ -1780,7 +1778,7 @@ static void sub_8073E64(u8 taskId)
}
else if (gTasks[taskId].data[15] == -3)
{
- gBattleSpritesDataPtr->healthBoxesData[bank].flag_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyTask(taskId);
@@ -1792,7 +1790,7 @@ static void sub_8073F98(u8 taskId)
u8 sp[6];
s32 i;
- u8 bank = gTasks[taskId].data[0];
+ u8 battlerId = gTasks[taskId].data[0];
gTasks[taskId].data[15]--;
if (gTasks[taskId].data[15] >= 0)
{
@@ -1813,7 +1811,7 @@ static void sub_8073F98(u8 taskId)
}
else if (gTasks[taskId].data[15] == -3)
{
- gBattleSpritesDataPtr->healthBoxesData[bank].flag_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyTask(taskId);
@@ -1976,17 +1974,17 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
{
- u8 bank, healthboxSpriteId_2;
+ u8 battlerId, healthboxSpriteId_2;
if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
return;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
return;
- bank = gSprites[healthboxSpriteId].data[6];
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ battlerId = gSprites[healthboxSpriteId].data[6];
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
return;
- if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
+ if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
return;
healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5];
@@ -2000,17 +1998,17 @@ static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
{
s32 i;
- u8 bank, healthboxSpriteId_2;
+ u8 battlerId, healthboxSpriteId_2;
u32 status, pltAdder;
const u8 *statusGfxPtr;
s16 tileNumAdder;
u8 statusPalId;
- bank = gSprites[healthboxSpriteId].data[6];
+ battlerId = gSprites[healthboxSpriteId].data[6];
healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5];
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
- status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_STATUS);
+ status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS);
if (!IsDoubleBattle())
tileNumAdder = 0x1A;
else
@@ -2018,33 +2016,33 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
}
else
{
- status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_STATUS);
+ status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS);
tileNumAdder = 0x11;
}
if (status & STATUS1_SLEEP)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_SLP_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_SLP_BANK0, battlerId));
statusPalId = PAL_STATUS_SLP;
}
else if (status & STATUS1_PSN_ANY)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PSN_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PSN_BANK0, battlerId));
statusPalId = PAL_STATUS_PSN;
}
else if (status & STATUS1_BURN)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_BRN_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_BRN_BANK0, battlerId));
statusPalId = PAL_STATUS_BRN;
}
else if (status & STATUS1_FREEZE)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_FRZ_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_FRZ_BANK0, battlerId));
statusPalId = PAL_STATUS_FRZ;
}
else if (status & STATUS1_PARALYSIS)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PRZ_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PRZ_BANK0, battlerId));
statusPalId = PAL_STATUS_PAR;
}
else
@@ -2054,7 +2052,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
for (i = 0; i < 3; i++)
CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * 32), 32);
- if (!gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 64);
TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE);
@@ -2062,14 +2060,14 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
}
pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16;
- pltAdder += bank + 12;
+ pltAdder += battlerId + 12;
FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2);
CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2);
CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * 32), 96);
- if (IsDoubleBattle() == TRUE || GetBattlerSide(bank) == B_SIDE_OPPONENT)
+ if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
{
- if (!gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
{
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 32);
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 1) * 32), 32);
@@ -2078,58 +2076,58 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE);
}
-static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank)
+static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId)
{
u8 ret = statusElementId;
switch (statusElementId)
{
case HEALTHBOX_GFX_STATUS_PSN_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_PSN_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_PSN_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_PSN_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_PSN_BANK3;
break;
case HEALTHBOX_GFX_STATUS_PRZ_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK3;
break;
case HEALTHBOX_GFX_STATUS_SLP_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_SLP_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_SLP_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_SLP_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_SLP_BANK3;
break;
case HEALTHBOX_GFX_STATUS_FRZ_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK3;
break;
case HEALTHBOX_GFX_STATUS_BRN_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_BRN_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_BRN_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_BRN_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_BRN_BANK3;
@@ -2170,10 +2168,10 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId)
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId)
{
s32 maxHp, currHp;
- u8 bank = gSprites[healthboxSpriteId].data[6];
+ u8 battlerId = gSprites[healthboxSpriteId].data[6];
if (elementId == HEALTHBOX_ALL && !IsDoubleBattle())
- GetBattlerSide(bank); // pointless function call
+ GetBattlerSide(battlerId); // pointless function call
if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
{
@@ -2190,8 +2188,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
LoadBattleBarGfx(0);
maxHp = GetMonData(mon, MON_DATA_MAX_HP);
currHp = GetMonData(mon, MON_DATA_HP);
- SetBattleBarStruct(bank, healthboxSpriteId, maxHp, currHp, 0);
- sub_8074AA0(bank, healthboxSpriteId, HEALTH_BAR, 0);
+ SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
+ sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
}
isDoubles = IsDoubleBattle();
if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL))
@@ -2208,8 +2206,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level];
currExpBarValue = exp - currLevelExp;
maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp;
- SetBattleBarStruct(bank, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
- sub_8074AA0(bank, healthboxSpriteId, EXP_BAR, 0);
+ SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
+ sub_8074AA0(battlerId, healthboxSpriteId, EXP_BAR, 0);
}
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
UpdateNickInHealthbox(healthboxSpriteId, mon);
@@ -2229,8 +2227,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
LoadBattleBarGfx(0);
maxHp = GetMonData(mon, MON_DATA_MAX_HP);
currHp = GetMonData(mon, MON_DATA_HP);
- SetBattleBarStruct(bank, healthboxSpriteId, maxHp, currHp, 0);
- sub_8074AA0(bank, healthboxSpriteId, HEALTH_BAR, 0);
+ SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
+ sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
}
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
UpdateNickInHealthbox(healthboxSpriteId, mon);
@@ -2239,44 +2237,44 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
}
}
-s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
+s32 sub_8074AA0(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
{
s32 var;
if (whichBar == HEALTH_BAR) // health bar
{
- var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
6, 1);
}
else // exp bar
{
- u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- gBattleSpritesDataPtr->battleBars[bank].maxValue, 8);
+ u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8);
if (expFraction == 0)
expFraction = 1;
- expFraction = abs(gBattleSpritesDataPtr->battleBars[bank].receivedValue / expFraction);
+ expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction);
- var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
8, expFraction);
}
- if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars))
- sub_8074B9C(bank, whichBar);
+ if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars))
+ sub_8074B9C(battlerId, whichBar);
if (var == -1)
- gBattleSpritesDataPtr->battleBars[bank].field_10 = 0;
+ gBattleSpritesDataPtr->battleBars[battlerId].field_10 = 0;
return var;
}
-static void sub_8074B9C(u8 bank, u8 whichBar)
+static void sub_8074B9C(u8 battlerId, u8 whichBar)
{
u8 array[8];
u8 subRet, level;
@@ -2286,10 +2284,10 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
switch (whichBar)
{
case HEALTH_BAR:
- subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
array, 6);
barElementId = 3;
if (subRet <= 0x18)
@@ -2300,7 +2298,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
}
for (i = 0; i < 6; i++)
{
- u8 healthboxSpriteId_2 = gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].data[5];
+ u8 healthboxSpriteId_2 = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].data[5];
if (i < 2)
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
(void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 2 + i) * 32), 32);
@@ -2310,12 +2308,12 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
}
break;
case EXP_BAR:
- sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
array, 8);
- level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_LEVEL);
+ level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_LEVEL);
if (level == MAX_MON_LEVEL)
{
for (i = 0; i < 8; i++)
@@ -2325,10 +2323,10 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
{
if (i < 4)
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].oam.tileNum + 0x24 + i) * 32), 32);
+ (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * 32), 32);
else
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].oam.tileNum) * 32), 32);
+ (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * 32), 32);
}
break;
}
diff --git a/src/battle_main.c b/src/battle_main.c
index 78b69212d..70eebed85 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[];
@@ -95,12 +94,8 @@ extern const struct ScanlineEffectParams gUnknown_0831AC70;
// strings
extern const u8 gText_LinkStandby3[];
-extern const u8 gText_RecordBattleToPass[];
-extern const u8 gText_BattleYesNoChoice[];
extern const u8 gText_BattleRecordCouldntBeSaved[];
-extern const u8 gText_BattleRecordedOnPass[];
extern const u8 gText_ShedinjaJapaneseName[];
-extern const u8 gText_EmptyString3[];
extern const u8 gText_Poison[];
extern const u8 gText_Sleep[];
extern const u8 gText_Paralysis[];
@@ -301,6 +296,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
@@ -3387,7 +3590,6 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void)
gBattleMainFunc = BattleIntroRecordMonsToDex;
}
-
#else
ASM_DIRECT
static void BattleIntroOpponent1SendsOutMonAnimation(void)
@@ -3474,7 +3676,6 @@ _0803B2F2:\n\
.pool\n\
.syntax divided");
}
-
#endif // NONMATCHING
static void BattleIntroRecordMonsToDex(void)
@@ -3835,8 +4036,7 @@ u8 IsRunningFromBattleImpossible(void)
}
if (side != GetBattlerSide(i)
&& gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE
- && gBattleMons[gActiveBattler].type1 != TYPE_FLYING
- && gBattleMons[gActiveBattler].type2 != TYPE_FLYING
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
&& gBattleMons[i].ability == ABILITY_ARENA_TRAP)
{
gBattleScripting.battler = i;
@@ -3846,7 +4046,7 @@ u8 IsRunningFromBattleImpossible(void)
}
}
i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0);
- if (i != 0 && (gBattleMons[gActiveBattler].type1 == TYPE_STEEL || gBattleMons[gActiveBattler].type2 == TYPE_STEEL))
+ if (i != 0 && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))
{
gBattleScripting.battler = i - 1;
gLastUsedAbility = gBattleMons[i - 1].ability;
@@ -4033,12 +4233,10 @@ static void HandleTurnActionSelectionState(void)
}
else if ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_SHADOW_TAG, 0, 0))
|| ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_ARENA_TRAP, 0, 0))
- && gBattleMons[gActiveBattler].type1 != TYPE_FLYING
- && gBattleMons[gActiveBattler].type2 != TYPE_FLYING
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
&& gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
|| ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
- && (gBattleMons[gActiveBattler].type1 == TYPE_STEEL
- || gBattleMons[gActiveBattler].type2 == TYPE_STEEL)))
+ && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
{
BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | 4, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
}
@@ -5133,7 +5331,7 @@ static void HandleAction_UseMove(void)
else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
&& gSideTimers[side].followmeTimer == 0
&& (gBattleMoves[gCurrentMove].power != 0
- || gBattleMoves[gCurrentMove].target != MOVE_TARGET_x10)
+ || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER)
&& gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD
&& gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
{
diff --git a/src/battle_message.c b/src/battle_message.c
index 9a4a062ad..1f338db92 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
@@ -59,832 +57,832 @@ EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
// const rom data
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
-const u8 gText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}");
-const u8 gText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p");
-const u8 gText_EmptyString4[] = _("");
-const u8 gText_ABoosted[] = _(" a boosted");
-const u8 gText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p");
-const u8 gText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p");
-const u8 gText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p");
-const u8 gText_TryToLearnMove2[] = _("But, {B_BUFF1} can’t learn\nmore than four moves.\p");
-const u8 gText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?");
-const u8 gText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p");
-const u8 gText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?");
-const u8 gText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p");
-const u8 gText_UseNextPkmn[] = _("Use next POKéMON?");
-const u8 gText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}’s\nattack missed!");
-const u8 gText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!");
-const u8 gText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!");
-const u8 gText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!");
-const u8 gText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!");
-const u8 gText_ItDoesntAffect[] = _("It doesn’t affect\n{B_DEF_NAME_WITH_PREFIX}…");
-const u8 gText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p");
-const u8 gText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p");
-const u8 gText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p");
-const u8 gText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p");
-const u8 gText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
-const u8 gText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p");
-const u8 gText_CantEscape2[] = _("Can’t escape!\p");
-const u8 gText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can’t escape!");
-const u8 gText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!");
-const u8 gText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!");
-const u8 gText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!");
-const u8 gText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!");
-const u8 gText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!");
-const u8 gText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn’t affected!");
-const u8 gText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!");
-const u8 gText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!");
-const u8 gText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned.");
-const u8 gText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!");
-const u8 gText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!");
-const u8 gText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!");
-const u8 gText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!");
-const u8 gText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn.");
-const u8 gText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!");
-const u8 gText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!");
-const u8 gText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!");
-const u8 gText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!");
-const u8 gText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!");
-const u8 gText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!");
-const u8 gText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!");
-const u8 gText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!");
-const u8 gText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can’t move!");
-const u8 gText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!");
-const u8 gText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!");
-const u8 gText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}’s\ndream was eaten!");
-const u8 gText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!");
-const u8 gText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go lower!");
-const u8 gText_TeamStoppedWorking[] = _("Your team’s {B_BUFF1}\nstopped working!");
-const u8 gText_FoeStoppedWorking[] = _("The foe’s {B_BUFF1}\nstopped working!");
-const u8 gText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!");
-const u8 gText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!");
-const u8 gText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!");
-const u8 gText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!");
-const u8 gText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!");
-const u8 gText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!");
-const u8 gText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!");
-const u8 gText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!");
-const u8 gText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!");
-const u8 gText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!");
-const u8 gText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nHP is full!");
-const u8 gText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF!");
-const u8 gText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF a little!");
-const u8 gText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE!");
-const u8 gText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE a little!");
-const u8 gText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}’s party is covered\nby a veil!");
-const u8 gText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}’s party is protected\nby SAFEGUARD!");
-const u8 gText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}’s party is no longer\nprotected by SAFEGUARD!");
-const u8 gText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!");
-const u8 gText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!");
-const u8 gText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!");
-const u8 gText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!");
-const u8 gText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!");
-const u8 gText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!");
-const u8 gText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!");
-const u8 gText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!");
-const u8 gText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!");
-const u8 gText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!");
-const u8 gText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}’s BIND!");
-const u8 gText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!");
-const u8 gText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!");
-const u8 gText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!");
-const u8 gText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!");
-const u8 gText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!");
+static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}");
+static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p");
+static const u8 sText_EmptyString4[] = _("");
+static const u8 sText_ABoosted[] = _(" a boosted");
+static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p");
+static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p");
+static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p");
+static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can’t learn\nmore than four moves.\p");
+static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?");
+static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p");
+static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?");
+static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p");
+static const u8 sText_UseNextPkmn[] = _("Use next POKéMON?");
+static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}’s\nattack missed!");
+static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!");
+static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!");
+static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!");
+static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!");
+static const u8 sText_ItDoesntAffect[] = _("It doesn’t affect\n{B_DEF_NAME_WITH_PREFIX}…");
+static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p");
+static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p");
+static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p");
+static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p");
+static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
+static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p");
+static const u8 sText_CantEscape2[] = _("Can’t escape!\p");
+static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can’t escape!");
+static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!");
+static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!");
+static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!");
+static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!");
+static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!");
+static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn’t affected!");
+static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!");
+static const u8 sText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!");
+static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned.");
+static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!");
+static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!");
+static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!");
+static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!");
+static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn.");
+static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!");
+static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!");
+static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!");
+static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!");
+static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!");
+static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!");
+static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!");
+static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can’t move!");
+static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!");
+static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!");
+static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}’s\ndream was eaten!");
+static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!");
+static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go lower!");
+static const u8 sText_TeamStoppedWorking[] = _("Your team’s {B_BUFF1}\nstopped working!");
+static const u8 sText_FoeStoppedWorking[] = _("The foe’s {B_BUFF1}\nstopped working!");
+static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!");
+static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!");
+static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!");
+static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!");
+static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!");
+static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!");
+static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!");
+static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!");
+static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!");
+static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!");
+static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nHP is full!");
+static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF!");
+static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF a little!");
+static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE!");
+static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE a little!");
+static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}’s party is covered\nby a veil!");
+static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}’s party is protected\nby SAFEGUARD!");
+static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}’s party is no longer\nprotected by SAFEGUARD!");
+static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!");
+static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!");
+static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!");
+static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!");
+static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!");
+static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!");
+static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!");
+static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!");
+static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!");
+static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!");
+static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}’s BIND!");
+static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!");
+static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!");
+static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!");
+static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!");
+static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!");
const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_PREFIX2} became\nshrouded in MIST!");
-const u8 gText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!");
+static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!");
const u8 gText_PkmnGettingPumped[] = _("{B_ATK_NAME_WITH_PREFIX} is getting\npumped!");
-const u8 gText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!");
-const u8 gText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!");
-const u8 gText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!");
-const u8 gText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!");
-const u8 gText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}’s {B_BUFF1}\nwore off!");
-const u8 gText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!");
-const u8 gText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!");
-const u8 gText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}’s health is\nsapped by LEECH SEED!");
-const u8 gText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep.");
-const u8 gText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!");
-const u8 gText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s UPROAR\nkept it awake!");
-const u8 gText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!");
-const u8 gText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!");
-const u8 gText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!");
-const u8 gText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down.");
-const u8 gText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
-const u8 gText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!");
-const u8 gText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can’t\nSTOCKPILE any more!");
-const u8 gText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
-const u8 gText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!");
-const u8 gText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!");
-const u8 gText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!");
-const u8 gText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!");
-const u8 gText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!");
-const u8 gText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p");
-const u8 gText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!");
-const u8 gText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!");
-const u8 gText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!");
-const u8 gText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!");
-const u8 gText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p");
-const u8 gText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nSUBSTITUTE faded!\p");
-const u8 gText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!");
-const u8 gText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}’s RAGE\nis building!");
-const u8 gText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwas disabled!");
-const u8 gText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!");
-const u8 gText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!");
-const u8 gText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}’s ENCORE\nended!");
-const u8 gText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!");
-const u8 gText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!");
-const u8 gText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!");
-const u8 gText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}’s\n{B_BUFF1} by {B_BUFF2}!");
-const u8 gText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
-const u8 gText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can’t\nescape now!");
-const u8 gText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!");
-const u8 gText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!");
-const u8 gText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!");
-const u8 gText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent’s side!");
-const u8 gText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!");
-const u8 gText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}’s PERISH count\nfell to {B_BUFF1}!");
-const u8 gText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!");
-const u8 gText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!");
-const u8 gText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!");
-const u8 gText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!");
-const u8 gText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s stat changes!");
-const u8 gText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!");
-const u8 gText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!");
-const u8 gText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!");
-const u8 gText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!");
-const u8 gText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!");
-const u8 gText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!");
-const u8 gText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!");
-const u8 gText_PkmnAttack[] = _("{B_BUFF1}’s attack!");
-const u8 gText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!");
-const u8 gText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!");
-const u8 gText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!");
-const u8 gText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}’s status\nreturned to normal!");
-const u8 gText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!");
-const u8 gText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!");
-const u8 gText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!");
-const u8 gText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!");
-const u8 gText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.");
-const u8 gText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
-const u8 gText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
-const u8 gText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!");
-const u8 gText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!");
-const u8 gText_PkmnWishCameTrue[] = _("{B_BUFF1}’s WISH\ncame true!");
-const u8 gText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!");
-const u8 gText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!");
-const u8 gText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!");
-const u8 gText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!");
-const u8 gText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
-const u8 gText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!");
-const u8 gText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent’s move(s)!");
-const u8 gText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!");
-const u8 gText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} lost\nall its PP due to the GRUDGE!");
-const u8 gText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!");
-const u8 gText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!");
-const u8 gText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!");
-const u8 gText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s move!");
-const u8 gText_ElectricityWeakened[] = _("Electricity’s power was\nweakened!");
-const u8 gText_FireWeakened[] = _("Fire’s power was\nweakened!");
-const u8 gText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!");
-const u8 gText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!");
-const u8 gText_ItemsCantBeUsedNow[] = _("Items can’t be used now.{PAUSE 64}");
-const u8 gText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}");
-const u8 gText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!");
-const u8 gText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn’t move!");
-const u8 gText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p");
-const u8 gText_TheWallShattered[] = _("The wall shattered!");
-const u8 gText_ButNoEffect[] = _("But it had no effect!");
-const u8 gText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p");
-const u8 gText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nis disabled!\p");
-const u8 gText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the same\nmove in a row due to the TORMENT!\p");
-const u8 gText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use\n{B_CURRENT_MOVE} after the TAUNT!\p");
-const u8 gText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the\nsealed {B_CURRENT_MOVE}!\p");
-const u8 gText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it rain!");
-const u8 gText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!");
-const u8 gText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!");
-const u8 gText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!");
-const u8 gText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!");
-const u8 gText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!");
-const u8 gText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!");
-const u8 gText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents paralysis!");
-const u8 gText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents romance!");
-const u8 gText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents poisoning!");
-const u8 gText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents confusion!");
-const u8 gText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its FIRE power!");
-const u8 gText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!");
-const u8 gText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}’s ATTACK!");
-const u8 gText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!");
-const u8 gText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}’s {B_BUFF2}!");
-const u8 gText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents burns!");
-const u8 gText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!");
-const u8 gText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!");
-const u8 gText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nrestored its HP a little!");
-const u8 gText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!");
-const u8 gText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nintensified the sun’s rays!");
-const u8 gText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!");
-const u8 gText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!");
-const u8 gText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
-const u8 gText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!");
-const u8 gText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!");
-const u8 gText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ntook the attack!");
+static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!");
+static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!");
+static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!");
+static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!");
+static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}’s {B_BUFF1}\nwore off!");
+static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!");
+static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!");
+static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}’s health is\nsapped by LEECH SEED!");
+static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep.");
+static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!");
+static const u8 sText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s UPROAR\nkept it awake!");
+static const u8 sText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!");
+static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!");
+static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!");
+static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down.");
+static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
+static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!");
+static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can’t\nSTOCKPILE any more!");
+static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
+static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!");
+static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!");
+static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!");
+static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!");
+static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!");
+static const u8 sText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p");
+static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!");
+static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!");
+static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!");
+static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!");
+static const u8 sText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p");
+static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nSUBSTITUTE faded!\p");
+static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!");
+static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}’s RAGE\nis building!");
+static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwas disabled!");
+static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!");
+static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!");
+static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}’s ENCORE\nended!");
+static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!");
+static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!");
+static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!");
+static const u8 sText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}’s\n{B_BUFF1} by {B_BUFF2}!");
+static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
+static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can’t\nescape now!");
+static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!");
+static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!");
+static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!");
+static const u8 sText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent’s side!");
+static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!");
+static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}’s PERISH count\nfell to {B_BUFF1}!");
+static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!");
+static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!");
+static const u8 sText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!");
+static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!");
+static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s stat changes!");
+static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!");
+static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!");
+static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!");
+static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!");
+static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!");
+static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!");
+static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!");
+static const u8 sText_PkmnAttack[] = _("{B_BUFF1}’s attack!");
+static const u8 sText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!");
+static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!");
+static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!");
+static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}’s status\nreturned to normal!");
+static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!");
+static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!");
+static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!");
+static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!");
+static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.");
+static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
+static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
+static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!");
+static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!");
+static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}’s WISH\ncame true!");
+static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!");
+static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!");
+static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!");
+static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!");
+static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
+static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!");
+static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent’s move(s)!");
+static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!");
+static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} lost\nall its PP due to the GRUDGE!");
+static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!");
+static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!");
+static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s move!");
+static const u8 sText_ElectricityWeakened[] = _("Electricity’s power was\nweakened!");
+static const u8 sText_FireWeakened[] = _("Fire’s power was\nweakened!");
+static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!");
+static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!");
+static const u8 sText_ItemsCantBeUsedNow[] = _("Items can’t be used now.{PAUSE 64}");
+static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}");
+static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!");
+static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn’t move!");
+static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p");
+static const u8 sText_TheWallShattered[] = _("The wall shattered!");
+static const u8 sText_ButNoEffect[] = _("But it had no effect!");
+static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p");
+static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nis disabled!\p");
+static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the same\nmove in a row due to the TORMENT!\p");
+static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use\n{B_CURRENT_MOVE} after the TAUNT!\p");
+static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the\nsealed {B_CURRENT_MOVE}!\p");
+static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it rain!");
+static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!");
+static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!");
+static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!");
+static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!");
+static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!");
+static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents paralysis!");
+static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents romance!");
+static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents poisoning!");
+static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents confusion!");
+static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its FIRE power!");
+static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!");
+static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}’s ATTACK!");
+static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!");
+static const u8 sText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}’s {B_BUFF2}!");
+static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents burns!");
+static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nrestored its HP a little!");
+static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!");
+static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nintensified the sun’s rays!");
+static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!");
+static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!");
+static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
+static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!");
+static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!");
+static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ntook the attack!");
const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}’s {B_LAST_ABILITY}\nprevents switching!\p");
-const u8 gText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s\l{B_BUFF1} from working!");
-const u8 gText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!");
-const u8 gText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents flinching!");
-const u8 gText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY} from working!");
-const u8 gText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
-const u8 gText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!");
-const u8 gText_StatSharply[] = _("sharply ");
+static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s\l{B_BUFF1} from working!");
+static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!");
+static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents flinching!");
+static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY} from working!");
+static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
+static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!");
+static const u8 sText_StatSharply[] = _("sharply ");
const u8 gText_StatRose[] = _("rose!");
-const u8 gText_StatHarshly[] = _("harshly ");
-const u8 gText_StatFell[] = _("fell!");
-const u8 gText_PkmnsStatChanged[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
+static const u8 sText_StatHarshly[] = _("harshly ");
+static const u8 sText_StatFell[] = _("fell!");
+static const u8 sText_PkmnsStatChanged[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
const u8 gText_PkmnsStatChanged2[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
-const u8 gText_UsingXTheYOfZN[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}");
-const u8 gText_PkmnsStatChanged3[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
-const u8 gText_PkmnsStatChanged4[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
-const u8 gText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}’s stats won’t\ngo any higher!");
-const u8 gText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}’s stats won’t\ngo any lower!");
-const u8 gText_CriticalHit[] = _("A critical hit!");
-const u8 gText_OneHitKO[] = _("It’s a one-hit KO!");
-const u8 gText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
-const u8 gText_AndEllipsis[] = _("And…\p");
-const u8 gText_HMMovesCantBeForgotten[] = _("HM moves can’t be\nforgotten now.\p");
-const u8 gText_NotVeryEffective[] = _("It’s not very effective…");
-const u8 gText_SuperEffective[] = _("It’s super effective!");
-const u8 gText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p");
-const u8 gText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
-const u8 gText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
-const u8 gText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!");
-const u8 gText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_20}!");
-const u8 gText_TwoLinkTrainersDefeated[] = _("Player beat {B_20}\nand {B_21}!");
-const u8 gText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_20}!");
-const u8 gText_PlayerLostToTwo[] = _("Player lost to {B_20}\nand {B_21}!");
-const u8 gText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_20}!");
-const u8 gText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_20} and {B_21}!");
-const u8 gText_WildFled[] = _("{PLAY_SE 0x0011}{B_20} fled!");
-const u8 gText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_20} and\n{B_21} fled!");
-const u8 gText_NoRunningFromTrainers[] = _("No! There’s no running\nfrom a TRAINER battle!\p");
-const u8 gText_CantEscape[] = _("Can’t escape!\p");
-const u8 gText_DontLeaveBirch[] = _("PROF. BIRCH: Don’t leave me like this!\p");
-const u8 gText_ButNothingHappened[] = _("But nothing happened!");
-const u8 gText_ButItFailed[] = _("But it failed!");
-const u8 gText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!");
-const u8 gText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!");
-const u8 gText_StartedToRain[] = _("It started to rain!");
-const u8 gText_DownpourStarted[] = _("A downpour started!");
-const u8 gText_RainContinues[] = _("Rain continues to fall.");
-const u8 gText_DownpourContinues[] = _("The downpour continues.");
-const u8 gText_RainStopped[] = _("The rain stopped.");
-const u8 gText_SandstormBrewed[] = _("A sandstorm brewed!");
-const u8 gText_SandstormRages[] = _("The sandstorm rages.");
-const u8 gText_SandstormSubsided[] = _("The sandstorm subsided.");
-const u8 gText_SunlightGotBright[] = _("The sunlight got bright!");
-const u8 gText_SunlightStrong[] = _("The sunlight is strong.");
-const u8 gText_SunlightFaded[] = _("The sunlight faded.");
-const u8 gText_StartedHail[] = _("It started to hail!");
-const u8 gText_HailContinues[] = _("Hail continues to fall.");
-const u8 gText_HailStopped[] = _("The hail stopped.");
-const u8 gText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!");
-const u8 gText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!");
-const u8 gText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!");
-const u8 gText_StatChangesGone[] = _("All stat changes were\neliminated!");
-const u8 gText_CoinsScattered[] = _("Coins scattered everywhere!");
-const u8 gText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!");
-const u8 gText_SharedPain[] = _("The battlers shared\ntheir pain!");
-const u8 gText_BellChimed[] = _("A bell chimed!");
-const u8 gText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!");
-const u8 gText_NoPPLeft[] = _("There’s no PP left for\nthis move!\p");
-const u8 gText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!");
-const u8 gText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!");
-const u8 gText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!");
-const u8 gText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!");
-const u8 gText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!");
-const u8 gText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won’t\nobey!");
-const u8 gText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!");
-const u8 gText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!");
-const u8 gText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?");
-const u8 gText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!");
-const u8 gText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p");
-const u8 gText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!");
-const u8 gText_CantGetCloser[] = _("{B_PLAYER_NAME} can’t get any closer!");
-const u8 gText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!");
-const u8 gText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!");
-const u8 gText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!");
-const u8 gText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!");
-const u8 gText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!");
-const u8 gText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p");
-const u8 gText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p");
-const u8 gText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
-const u8 gText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
-const u8 gText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}");
-const u8 gText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p");
-const u8 gText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p");
-const u8 gText_LinkTrainerWantsToBattle[] = _("{B_20}\nwants to battle!");
-const u8 gText_TwoLinkTrainersWantToBattle[] = _("{B_20} and {B_21}\nwant to battle!");
-const u8 gText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!");
-const u8 gText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
-const u8 gText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!");
-const u8 gText_LinkTrainerSentOutPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME}!");
-const u8 gText_LinkTrainerSentOutTwoPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
-const u8 gText_TwoLinkTrainersSentOutPkmn[] = _("{B_20} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_21} sent out {B_LINK_OPPONENT_MON2_NAME}!");
-const u8 gText_LinkTrainerSentOutPkmn2[] = _("{B_20} sent out\n{B_BUFF1}!");
-const u8 gText_LinkTrainerMultiSentOutPkmn[] = _("{B_22} sent out\n{B_BUFF1}!");
-const u8 gText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!");
-const u8 gText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!");
-const u8 gText_GoPkmn2[] = _("Go! {B_BUFF1}!");
-const u8 gText_DoItPkmn[] = _("Do it! {B_BUFF1}!");
-const u8 gText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!");
-const u8 gText_YourFoesWeakGetEmPkmn[] = _("Your foe’s weak!\nGet ’em, {B_BUFF1}!");
-const u8 gText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_1F} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!");
-const u8 gText_PkmnThatsEnough[] = _("{B_BUFF1}, that’s enough!\nCome back!");
-const u8 gText_PkmnComeBack[] = _("{B_BUFF1}, come back!");
-const u8 gText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!");
-const u8 gText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!");
-const u8 gText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!");
-const u8 gText_LinkTrainer1WithdrewPkmn[] = _("{B_20} withdrew\n{B_BUFF1}!");
-const u8 gText_LinkTrainer2WithdrewPkmn[] = _("{B_22} withdrew\n{B_BUFF1}!");
-const u8 gText_WildPkmnPrefix[] = _("Wild ");
-const u8 gText_FoePkmnPrefix[] = _("Foe ");
-const u8 gText_EmptyString8[] = _( "");
-const u8 gText_FoePkmnPrefix2[] = _("Foe");
-const u8 gText_AllyPkmnPrefix[] = _("Ally");
-const u8 gText_FoePkmnPrefix3[] = _("Foe");
-const u8 gText_AllyPkmnPrefix2[] = _("Ally");
-const u8 gText_FoePkmnPrefix4[] = _("Foe");
-const u8 gText_AllyPkmnPrefix3[] = _("Ally");
-const u8 gText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}");
-const u8 gText_ExclamationMark[] = _("!");
-const u8 gText_ExclamationMark2[] = _("!");
-const u8 gText_ExclamationMark3[] = _("!");
-const u8 gText_ExclamationMark4[] = _("!");
-const u8 gText_ExclamationMark5[] = _("!");
-const u8 gText_HP2[] = _("HP");
-const u8 gText_Attack2[] = _("ATTACK");
-const u8 gText_Defense2[] = _("DEFENSE");
-const u8 gText_Speed[] = _("SPEED");
-const u8 gText_SpAtk2[] = _("SP. ATK");
-const u8 gText_SpDef2[] = _("SP. DEF");
-const u8 gText_Accuracy[] = _("accuracy");
-const u8 gText_Evasiveness[] = _("evasiveness");
+static const u8 sText_UsingXTheYOfZN[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}");
+static const u8 sText_PkmnsStatChanged3[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
+static const u8 sText_PkmnsStatChanged4[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
+static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}’s stats won’t\ngo any higher!");
+static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}’s stats won’t\ngo any lower!");
+static const u8 sText_CriticalHit[] = _("A critical hit!");
+static const u8 sText_OneHitKO[] = _("It’s a one-hit KO!");
+static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
+static const u8 sText_AndEllipsis[] = _("And…\p");
+static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can’t be\nforgotten now.\p");
+static const u8 sText_NotVeryEffective[] = _("It’s not very effective…");
+static const u8 sText_SuperEffective[] = _("It’s super effective!");
+static const u8 sText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p");
+static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
+static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
+static const u8 sText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!");
+static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_20}!");
+static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_20}\nand {B_21}!");
+static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_20}!");
+static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_20}\nand {B_21}!");
+static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_20}!");
+static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_20} and {B_21}!");
+static const u8 sText_WildFled[] = _("{PLAY_SE 0x0011}{B_20} fled!");
+static const u8 sText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_20} and\n{B_21} fled!");
+static const u8 sText_NoRunningFromTrainers[] = _("No! There’s no running\nfrom a TRAINER battle!\p");
+static const u8 sText_CantEscape[] = _("Can’t escape!\p");
+static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don’t leave me like this!\p");
+static const u8 sText_ButNothingHappened[] = _("But nothing happened!");
+static const u8 sText_ButItFailed[] = _("But it failed!");
+static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!");
+static const u8 sText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!");
+static const u8 sText_StartedToRain[] = _("It started to rain!");
+static const u8 sText_DownpourStarted[] = _("A downpour started!");
+static const u8 sText_RainContinues[] = _("Rain continues to fall.");
+static const u8 sText_DownpourContinues[] = _("The downpour continues.");
+static const u8 sText_RainStopped[] = _("The rain stopped.");
+static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!");
+static const u8 sText_SandstormRages[] = _("The sandstorm rages.");
+static const u8 sText_SandstormSubsided[] = _("The sandstorm subsided.");
+static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!");
+static const u8 sText_SunlightStrong[] = _("The sunlight is strong.");
+static const u8 sText_SunlightFaded[] = _("The sunlight faded.");
+static const u8 sText_StartedHail[] = _("It started to hail!");
+static const u8 sText_HailContinues[] = _("Hail continues to fall.");
+static const u8 sText_HailStopped[] = _("The hail stopped.");
+static const u8 sText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!");
+static const u8 sText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!");
+static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!");
+static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!");
+static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!");
+static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!");
+static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!");
+static const u8 sText_BellChimed[] = _("A bell chimed!");
+static const u8 sText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!");
+static const u8 sText_NoPPLeft[] = _("There’s no PP left for\nthis move!\p");
+static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!");
+static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!");
+static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!");
+static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!");
+static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!");
+static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won’t\nobey!");
+static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!");
+static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!");
+static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?");
+static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!");
+static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p");
+static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!");
+static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can’t get any closer!");
+static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!");
+static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!");
+static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!");
+static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!");
+static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!");
+static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p");
+static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}");
+static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p");
+static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p");
+static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_20}\nwants to battle!");
+static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_20} and {B_21}\nwant to battle!");
+static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!");
+static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
+static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!");
+static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME}!");
+static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
+static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_20} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_21} sent out {B_LINK_OPPONENT_MON2_NAME}!");
+static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_20} sent out\n{B_BUFF1}!");
+static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_22} sent out\n{B_BUFF1}!");
+static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!");
+static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!");
+static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!");
+static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!");
+static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!");
+static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe’s weak!\nGet ’em, {B_BUFF1}!");
+static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_1F} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!");
+static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that’s enough!\nCome back!");
+static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!");
+static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!");
+static const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!");
+static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!");
+static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_20} withdrew\n{B_BUFF1}!");
+static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_22} withdrew\n{B_BUFF1}!");
+static const u8 sText_WildPkmnPrefix[] = _("Wild ");
+static const u8 sText_FoePkmnPrefix[] = _("Foe ");
+static const u8 sText_EmptyString8[] = _( "");
+static const u8 sText_FoePkmnPrefix2[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix[] = _("Ally");
+static const u8 sText_FoePkmnPrefix3[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix2[] = _("Ally");
+static const u8 sText_FoePkmnPrefix4[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix3[] = _("Ally");
+static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}");
+static const u8 sText_ExclamationMark[] = _("!");
+static const u8 sText_ExclamationMark2[] = _("!");
+static const u8 sText_ExclamationMark3[] = _("!");
+static const u8 sText_ExclamationMark4[] = _("!");
+static const u8 sText_ExclamationMark5[] = _("!");
+static const u8 sText_HP2[] = _("HP");
+static const u8 sText_Attack2[] = _("ATTACK");
+static const u8 sText_Defense2[] = _("DEFENSE");
+static const u8 sText_Speed[] = _("SPEED");
+static const u8 sText_SpAtk2[] = _("SP. ATK");
+static const u8 sText_SpDef2[] = _("SP. DEF");
+static const u8 sText_Accuracy[] = _("accuracy");
+static const u8 sText_Evasiveness[] = _("evasiveness");
const u8 * const gStatNamesTable[] =
{
- gText_HP2, gText_Attack2, gText_Defense2,
- gText_Speed, gText_SpAtk2, gText_SpDef2,
- gText_Accuracy, gText_Evasiveness
+ sText_HP2, sText_Attack2, sText_Defense2,
+ sText_Speed, sText_SpAtk2, sText_SpDef2,
+ sText_Accuracy, sText_Evasiveness
};
-const u8 gText_PokeblockWasTooSpicy[] = _("was too spicy!");
-const u8 gText_PokeblockWasTooDry[] = _("was too dry!");
-const u8 gText_PokeblockWasTooSweet[] = _("was too sweet!");
-const u8 gText_PokeblockWasTooBitter[] = _("was too bitter!");
-const u8 gText_PokeblockWasTooSour[] = _("was too sour!");
+static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!");
+static const u8 sText_PokeblockWasTooDry[] = _("was too dry!");
+static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!");
+static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!");
+static const u8 sText_PokeblockWasTooSour[] = _("was too sour!");
const u8 * const gPokeblockWasTooXStringTable[] =
{
- gText_PokeblockWasTooSpicy, gText_PokeblockWasTooDry,
- gText_PokeblockWasTooSweet, gText_PokeblockWasTooBitter,
- gText_PokeblockWasTooSour
+ sText_PokeblockWasTooSpicy, sText_PokeblockWasTooDry,
+ sText_PokeblockWasTooSweet, sText_PokeblockWasTooBitter,
+ sText_PokeblockWasTooSour
};
-const u8 gText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
-const u8 gText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!");
-const u8 gText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!");
-const u8 gText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!");
-const u8 gText_DontBeAThief[] = _("Don’t be a thief!");
-const u8 gText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!");
-const u8 gText_YouMissedPkmn[] = _("You missed the POKéMON!");
-const u8 gText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
-const u8 gText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
-const u8 gText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
-const u8 gText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
-const u8 gText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p");
-const u8 gText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}");
-const u8 gText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
-const u8 gText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
-const u8 gText_Someones[] = _("someone’s");
-const u8 gText_Lanettes[] = _("LANETTE’s");
-const u8 gText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}’s data was\nadded to the POKéDEX.\p");
-const u8 gText_ItIsRaining[] = _("It is raining.");
-const u8 gText_SandstormIsRaging[] = _("A sandstorm is raging.");
-const u8 gText_BoxIsFull[] = _("The BOX is full!\nYou can’t catch any more!\p");
-const u8 gText_EnigmaBerry[] = _("ENIGMA BERRY");
-const u8 gText_BerrySuffix[] = _(" BERRY");
-const u8 gText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured paralysis!");
-const u8 gText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured poison!");
-const u8 gText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nhealed its burn!");
-const u8 gText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ndefrosted it!");
-const u8 gText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nwoke it from its sleep!");
-const u8 gText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nsnapped it out of confusion!");
-const u8 gText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!");
-const u8 gText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nnormalized its status!");
-const u8 gText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored health!");
-const u8 gText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored {B_BUFF1}’s PP!");
-const u8 gText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its status!");
-const u8 gText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its HP a little!");
-const u8 gText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p");
-const u8 gText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!");
+static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
+static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!");
+static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!");
+static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!");
+static const u8 sText_DontBeAThief[] = _("Don’t be a thief!");
+static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!");
+static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!");
+static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
+static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
+static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
+static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
+static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p");
+static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}");
+static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
+static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
+static const u8 sText_Someones[] = _("someone’s");
+static const u8 sText_Lanettes[] = _("LANETTE’s");
+static const u8 sText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}’s data was\nadded to the POKéDEX.\p");
+static const u8 sText_ItIsRaining[] = _("It is raining.");
+static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging.");
+static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can’t catch any more!\p");
+static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY");
+static const u8 sText_BerrySuffix[] = _(" BERRY");
+static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured paralysis!");
+static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured poison!");
+static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nhealed its burn!");
+static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ndefrosted it!");
+static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nwoke it from its sleep!");
+static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nsnapped it out of confusion!");
+static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!");
+static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nnormalized its status!");
+static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored health!");
+static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored {B_BUFF1}’s PP!");
+static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its status!");
+static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its HP a little!");
+static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p");
+static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!");
const u8 gText_EmptyString3[] = _("");
-const u8 gText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I’ll do my best!");
+static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I’ll do my best!");
// early declaration of strings
-const u8 gText_PkmnIncapableOfPower[];
-const u8 gText_GlintAppearsInEye[];
-const u8 gText_PkmnGettingIntoPosition[];
-const u8 gText_PkmnBeganGrowlingDeeply[];
-const u8 gText_PkmnEagerForMore[];
-const u8 gText_DefeatedOpponentByReferee[];
-const u8 gText_LostToOpponentByReferee[];
-const u8 gText_TiedOpponentByReferee[];
-const u8 gText_QuestionForfeitMatch[];
-const u8 gText_ForfeitedMatch[];
-const u8 gText_Trainer1WinText[];
-const u8 gText_Trainer2WinText[];
-const u8 gText_TwoInGameTrainersDefeated[];
-const u8 gText_Trainer2LoseText[];
+static const u8 sText_PkmnIncapableOfPower[];
+static const u8 sText_GlintAppearsInEye[];
+static const u8 sText_PkmnGettingIntoPosition[];
+static const u8 sText_PkmnBeganGrowlingDeeply[];
+static const u8 sText_PkmnEagerForMore[];
+static const u8 sText_DefeatedOpponentByReferee[];
+static const u8 sText_LostToOpponentByReferee[];
+static const u8 sText_TiedOpponentByReferee[];
+static const u8 sText_QuestionForfeitMatch[];
+static const u8 sText_ForfeitedMatch[];
+static const u8 sText_Trainer1WinText[];
+static const u8 sText_Trainer2WinText[];
+static const u8 sText_TwoInGameTrainersDefeated[];
+static const u8 sText_Trainer2LoseText[];
const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{
- gText_Trainer1LoseText,
- gText_PkmnGainedEXP,
- gText_PkmnGrewToLv,
- gText_PkmnLearnedMove,
- gText_TryToLearnMove1,
- gText_TryToLearnMove2,
- gText_TryToLearnMove3,
- gText_PkmnForgotMove,
- gText_StopLearningMove,
- gText_DidNotLearnMove,
- gText_PkmnLearnedMove2,
- gText_AttackMissed,
- gText_PkmnProtectedItself,
- gText_StatsWontIncrease2,
- gText_AvoidedDamage,
- gText_ItDoesntAffect,
- gText_AttackerFainted,
- gText_TargetFainted,
- gText_PlayerGotMoney,
- gText_PlayerWhiteout,
- gText_PlayerWhiteout2,
- gText_PreventsEscape,
- gText_HitXTimes,
- gText_PkmnFellAsleep,
- gText_PkmnMadeSleep,
- gText_PkmnAlreadyAsleep,
- gText_PkmnAlreadyAsleep2,
- gText_PkmnWasntAffected,
- gText_PkmnWasPoisoned,
- gText_PkmnPoisonedBy,
- gText_PkmnHurtByPoison,
- gText_PkmnAlreadyPoisoned,
- gText_PkmnBadlyPoisoned,
- gText_PkmnEnergyDrained,
- gText_PkmnWasBurned,
- gText_PkmnBurnedBy,
- gText_PkmnHurtByBurn,
- gText_PkmnWasFrozen,
- gText_PkmnFrozenBy,
- gText_PkmnIsFrozen,
- gText_PkmnWasDefrosted,
- gText_PkmnWasDefrosted2,
- gText_PkmnWasDefrostedBy,
- gText_PkmnWasParalyzed,
- gText_PkmnWasParalyzedBy,
- gText_PkmnIsParalyzed,
- gText_PkmnIsAlreadyParalyzed,
- gText_PkmnHealedParalysis,
- gText_PkmnDreamEaten,
- gText_StatsWontIncrease,
- gText_StatsWontDecrease,
- gText_TeamStoppedWorking,
- gText_FoeStoppedWorking,
- gText_PkmnIsConfused,
- gText_PkmnHealedConfusion,
- gText_PkmnWasConfused,
- gText_PkmnAlreadyConfused,
- gText_PkmnFellInLove,
- gText_PkmnInLove,
- gText_PkmnImmobilizedByLove,
- gText_PkmnBlownAway,
- gText_PkmnChangedType,
- gText_PkmnFlinched,
- gText_PkmnRegainedHealth,
- gText_PkmnHPFull,
- gText_PkmnRaisedSpDef,
- gText_PkmnRaisedDef,
- gText_PkmnCoveredByVeil,
- gText_PkmnUsedSafeguard,
- gText_PkmnSafeguardExpired,
- gText_PkmnWentToSleep,
- gText_PkmnSleptHealthy,
- gText_PkmnWhippedWhirlwind,
- gText_PkmnTookSunlight,
- gText_PkmnLoweredHead,
- gText_PkmnIsGlowing,
- gText_PkmnFlewHigh,
- gText_PkmnDugHole,
- gText_PkmnSqueezedByBind,
- gText_PkmnTrappedInVortex,
- gText_PkmnWrappedBy,
- gText_PkmnClamped,
- gText_PkmnHurtBy,
- gText_PkmnFreedFrom,
- gText_PkmnCrashed,
- gText_PkmnShroudedInMist,
- gText_PkmnProtectedByMist,
- gText_PkmnGettingPumped,
- gText_PkmnHitWithRecoil,
- gText_PkmnProtectedItself2,
- gText_PkmnBuffetedBySandstorm,
- gText_PkmnPeltedByHail,
- gText_PkmnSeeded,
- gText_PkmnEvadedAttack,
- gText_PkmnSappedByLeechSeed,
- gText_PkmnFastAsleep,
- gText_PkmnWokeUp,
- gText_PkmnUproarKeptAwake,
- gText_PkmnWokeUpInUproar,
- gText_PkmnCausedUproar,
- gText_PkmnMakingUproar,
- gText_PkmnCalmedDown,
- gText_PkmnCantSleepInUproar,
- gText_PkmnStockpiled,
- gText_PkmnCantStockpile,
- gText_PkmnCantSleepInUproar2,
- gText_UproarKeptPkmnAwake,
- gText_PkmnStayedAwakeUsing,
- gText_PkmnStoringEnergy,
- gText_PkmnUnleashedEnergy,
- gText_PkmnFatigueConfusion,
- gText_PkmnPickedUpItem,
- gText_PkmnUnaffected,
- gText_PkmnTransformedInto,
- gText_PkmnMadeSubstitute,
- gText_PkmnHasSubstitute,
- gText_SubstituteDamaged,
- gText_PkmnSubstituteFaded,
- gText_PkmnMustRecharge,
- gText_PkmnRageBuilding,
- gText_PkmnMoveWasDisabled,
- gText_PkmnMoveIsDisabled,
- gText_PkmnMoveDisabledNoMore,
- gText_PkmnGotEncore,
- gText_PkmnEncoreEnded,
- gText_PkmnTookAim,
- gText_PkmnSketchedMove,
- gText_PkmnTryingToTakeFoe,
- gText_PkmnTookFoe,
- gText_PkmnReducedPP,
- gText_PkmnStoleItem,
- gText_TargetCantEscapeNow,
- gText_PkmnFellIntoNightmare,
- gText_PkmnLockedInNightmare,
- gText_PkmnLaidCurse,
- gText_PkmnAfflictedByCurse,
- gText_SpikesScattered,
- gText_PkmnHurtBySpikes,
- gText_PkmnIdentified,
- gText_PkmnPerishCountFell,
- gText_PkmnBracedItself,
- gText_PkmnEnduredHit,
- gText_MagnitudeStrength,
- gText_PkmnCutHPMaxedAttack,
- gText_PkmnCopiedStatChanges,
- gText_PkmnGotFree,
- gText_PkmnShedLeechSeed,
- gText_PkmnBlewAwaySpikes,
- gText_PkmnFledFromBattle,
- gText_PkmnForesawAttack,
- gText_PkmnTookAttack,
- gText_PkmnAttack,
- gText_PkmnCenterAttention,
- gText_PkmnChargingPower,
- gText_NaturePowerTurnedInto,
- gText_PkmnStatusNormal,
- gText_PkmnHasNoMovesLeft,
- gText_PkmnSubjectedToTorment,
- gText_PkmnCantUseMoveTorment,
- gText_PkmnTighteningFocus,
- gText_PkmnFellForTaunt,
- gText_PkmnCantUseMoveTaunt,
- gText_PkmnReadyToHelp,
- gText_PkmnSwitchedItems,
- gText_PkmnCopiedFoe,
- gText_PkmnMadeWish,
- gText_PkmnWishCameTrue,
- gText_PkmnPlantedRoots,
- gText_PkmnAbsorbedNutrients,
- gText_PkmnAnchoredItself,
- gText_PkmnWasMadeDrowsy,
- gText_PkmnKnockedOff,
- gText_PkmnSwappedAbilities,
- gText_PkmnSealedOpponentMove,
- gText_PkmnCantUseMoveSealed,
- gText_PkmnWantsGrudge,
- gText_PkmnLostPPGrudge,
- gText_PkmnShroudedItself,
- gText_PkmnMoveBounced,
- gText_PkmnWaitsForTarget,
- gText_PkmnSnatchedMove,
- gText_PkmnMadeItRain,
- gText_PkmnRaisedSpeed,
- gText_PkmnProtectedBy,
- gText_PkmnPreventsUsage,
- gText_PkmnRestoredHPUsing,
- gText_PkmnChangedTypeWith,
- gText_PkmnPreventsParalysisWith,
- gText_PkmnPreventsRomanceWith,
- gText_PkmnPreventsPoisoningWith,
- gText_PkmnPreventsConfusionWith,
- gText_PkmnRaisedFirePowerWith,
- gText_PkmnAnchorsItselfWith,
- gText_PkmnCutsAttackWith,
- gText_PkmnPreventsStatLossWith,
- gText_PkmnHurtsWith,
- gText_PkmnTraced,
- gText_StatSharply,
- gText_StatRose,
- gText_StatHarshly,
- gText_StatFell,
- gText_PkmnsStatChanged,
- gText_PkmnsStatChanged2,
- gText_PkmnsStatChanged3,
- gText_PkmnsStatChanged4,
- gText_CriticalHit,
- gText_OneHitKO,
- gText_123Poof,
- gText_AndEllipsis,
- gText_NotVeryEffective,
- gText_SuperEffective,
- gText_GotAwaySafely,
- gText_WildPkmnFled,
- gText_NoRunningFromTrainers,
- gText_CantEscape,
- gText_DontLeaveBirch,
- gText_ButNothingHappened,
- gText_ButItFailed,
- gText_ItHurtConfusion,
- gText_MirrorMoveFailed,
- gText_StartedToRain,
- gText_DownpourStarted,
- gText_RainContinues,
- gText_DownpourContinues,
- gText_RainStopped,
- gText_SandstormBrewed,
- gText_SandstormRages,
- gText_SandstormSubsided,
- gText_SunlightGotBright,
- gText_SunlightStrong,
- gText_SunlightFaded,
- gText_StartedHail,
- gText_HailContinues,
- gText_HailStopped,
- gText_FailedToSpitUp,
- gText_FailedToSwallow,
- gText_WindBecameHeatWave,
- gText_StatChangesGone,
- gText_CoinsScattered,
- gText_TooWeakForSubstitute,
- gText_SharedPain,
- gText_BellChimed,
- gText_FaintInThree,
- gText_NoPPLeft,
- gText_ButNoPPLeft,
- gText_PlayerUsedItem,
- gText_WallyUsedItem,
- gText_TrainerBlockedBall,
- gText_DontBeAThief,
- gText_ItDodgedBall,
- gText_YouMissedPkmn,
- gText_PkmnBrokeFree,
- gText_ItAppearedCaught,
- gText_AarghAlmostHadIt,
- gText_ShootSoClose,
- gText_GotchaPkmnCaught,
- gText_GotchaPkmnCaught2,
- gText_GiveNicknameCaptured,
- gText_PkmnSentToPC,
- gText_PkmnDataAddedToDex,
- gText_ItIsRaining,
- gText_SandstormIsRaging,
- gText_CantEscape2,
- gText_PkmnIgnoresAsleep,
- gText_PkmnIgnoredOrders,
- gText_PkmnBeganToNap,
- gText_PkmnLoafing,
- gText_PkmnWontObey,
- gText_PkmnTurnedAway,
- gText_PkmnPretendNotNotice,
- gText_EnemyAboutToSwitchPkmn,
- gText_CreptCloser,
- gText_CantGetCloser,
- gText_PkmnWatchingCarefully,
- gText_PkmnCuriousAboutX,
- gText_PkmnEnthralledByX,
- gText_PkmnIgnoredX,
- gText_ThrewPokeblockAtPkmn,
- gText_OutOfSafariBalls,
- gText_PkmnsItemCuredParalysis,
- gText_PkmnsItemCuredPoison,
- gText_PkmnsItemHealedBurn,
- gText_PkmnsItemDefrostedIt,
- gText_PkmnsItemWokeIt,
- gText_PkmnsItemSnappedOut,
- gText_PkmnsItemCuredProblem,
- gText_PkmnsItemRestoredHealth,
- gText_PkmnsItemRestoredPP,
- gText_PkmnsItemRestoredStatus,
- gText_PkmnsItemRestoredHPALittle,
- gText_ItemAllowsOnlyYMove,
- gText_PkmnHungOnWithX,
- gText_EmptyString3,
- gText_PkmnsXPreventsBurns,
- gText_PkmnsXBlocksY,
- gText_PkmnsXRestoredHPALittle2,
- gText_PkmnsXWhippedUpSandstorm,
- gText_PkmnsXPreventsYLoss,
- gText_PkmnsXInfatuatedY,
- gText_PkmnsXMadeYIneffective,
- gText_PkmnsXCuredYProblem,
- gText_ItSuckedLiquidOoze,
- gText_PkmnTransformed,
- gText_ElectricityWeakened,
- gText_FireWeakened,
- gText_PkmnHidUnderwater,
- gText_PkmnSprangUp,
- gText_HMMovesCantBeForgotten,
- gText_XFoundOneY,
- gText_PlayerDefeatedLinkTrainerTrainer1,
- gText_SoothingAroma,
- gText_ItemsCantBeUsedNow,
- gText_ForXCommaYZ,
- gText_UsingXTheYOfZN,
- gText_PkmnUsedXToGetPumped,
- gText_PkmnsXMadeYUseless,
- gText_PkmnTrappedBySandTomb,
- gText_EmptyString4,
- gText_ABoosted,
- gText_PkmnsXIntensifiedSun,
- gText_PkmnMakesGroundMiss,
- gText_YouThrowABallNowRight,
- gText_PkmnsXTookAttack,
- gText_PkmnChoseXAsDestiny,
- gText_PkmnLostFocus,
- gText_UseNextPkmn,
- gText_PkmnFledUsingIts,
- gText_PkmnFledUsing,
- gText_PkmnWasDraggedOut,
- gText_PreventedFromWorking,
- gText_PkmnsItemNormalizedStatus,
- gText_Trainer1UsedItem,
- gText_BoxIsFull,
- gText_PkmnAvoidedAttack,
- gText_PkmnsXMadeItIneffective,
- gText_PkmnsXPreventsFlinching,
- gText_PkmnAlreadyHasBurn,
- gText_StatsWontDecrease2,
- gText_PkmnsXBlocksY2,
- gText_PkmnsXWoreOff,
- gText_PkmnRaisedDefALittle,
- gText_PkmnRaisedSpDefALittle,
- gText_TheWallShattered,
- gText_PkmnsXPreventsYsZ,
- gText_PkmnsXCuredItsYProblem,
- gText_AttackerCantEscape,
- gText_PkmnObtainedX,
- gText_PkmnObtainedX2,
- gText_PkmnObtainedXYObtainedZ,
- gText_ButNoEffect,
- gText_PkmnsXHadNoEffectOnY,
- gText_TwoInGameTrainersDefeated,
- gText_Trainer2LoseText,
- gText_PkmnIncapableOfPower,
- gText_GlintAppearsInEye,
- gText_PkmnGettingIntoPosition,
- gText_PkmnBeganGrowlingDeeply,
- gText_PkmnEagerForMore,
- gText_DefeatedOpponentByReferee,
- gText_LostToOpponentByReferee,
- gText_TiedOpponentByReferee,
- gText_QuestionForfeitMatch,
- gText_ForfeitedMatch,
- gText_PkmnTransferredSomeonesPC,
- gText_PkmnTransferredLanettesPC,
- gText_PkmnBoxSomeonesPCFull,
- gText_PkmnBoxLanettesPCFull,
- gText_Trainer1WinText,
- gText_Trainer2WinText,
+ sText_Trainer1LoseText, // 12
+ sText_PkmnGainedEXP, // 13
+ sText_PkmnGrewToLv, // 14
+ sText_PkmnLearnedMove, // 15
+ sText_TryToLearnMove1, // 16
+ sText_TryToLearnMove2, // 17
+ sText_TryToLearnMove3, // 18
+ sText_PkmnForgotMove, // 19
+ sText_StopLearningMove, // 20
+ sText_DidNotLearnMove, // 21
+ sText_PkmnLearnedMove2, // 22
+ sText_AttackMissed, // 23
+ sText_PkmnProtectedItself, // 24
+ sText_StatsWontIncrease2, // 25
+ sText_AvoidedDamage, // 26
+ sText_ItDoesntAffect, // 27
+ sText_AttackerFainted, // 28
+ sText_TargetFainted, // 29
+ sText_PlayerGotMoney, // 30
+ sText_PlayerWhiteout, // 31
+ sText_PlayerWhiteout2, // 32
+ sText_PreventsEscape, // 33
+ sText_HitXTimes, // 34
+ sText_PkmnFellAsleep, // 35
+ sText_PkmnMadeSleep, // 36
+ sText_PkmnAlreadyAsleep, // 37
+ sText_PkmnAlreadyAsleep2, // 38
+ sText_PkmnWasntAffected, // 39
+ sText_PkmnWasPoisoned, // 40
+ sText_PkmnPoisonedBy, // 41
+ sText_PkmnHurtByPoison, // 42
+ sText_PkmnAlreadyPoisoned, // 43
+ sText_PkmnBadlyPoisoned, // 44
+ sText_PkmnEnergyDrained, // 45
+ sText_PkmnWasBurned, // 46
+ sText_PkmnBurnedBy, // 47
+ sText_PkmnHurtByBurn, // 48
+ sText_PkmnWasFrozen, // 49
+ sText_PkmnFrozenBy, // 50
+ sText_PkmnIsFrozen, // 51
+ sText_PkmnWasDefrosted, // 52
+ sText_PkmnWasDefrosted2, // 53
+ sText_PkmnWasDefrostedBy, // 54
+ sText_PkmnWasParalyzed, // 55
+ sText_PkmnWasParalyzedBy, // 56
+ sText_PkmnIsParalyzed, // 57
+ sText_PkmnIsAlreadyParalyzed, // 58
+ sText_PkmnHealedParalysis, // 59
+ sText_PkmnDreamEaten, // 60
+ sText_StatsWontIncrease, // 61
+ sText_StatsWontDecrease, // 62
+ sText_TeamStoppedWorking, // 63
+ sText_FoeStoppedWorking, // 64
+ sText_PkmnIsConfused, // 65
+ sText_PkmnHealedConfusion, // 66
+ sText_PkmnWasConfused, // 67
+ sText_PkmnAlreadyConfused, // 68
+ sText_PkmnFellInLove, // 69
+ sText_PkmnInLove, // 70
+ sText_PkmnImmobilizedByLove, // 71
+ sText_PkmnBlownAway, // 72
+ sText_PkmnChangedType, // 73
+ sText_PkmnFlinched, // 74
+ sText_PkmnRegainedHealth, // 75
+ sText_PkmnHPFull, // 76
+ sText_PkmnRaisedSpDef, // 77
+ sText_PkmnRaisedDef, // 78
+ sText_PkmnCoveredByVeil, // 79
+ sText_PkmnUsedSafeguard, // 80
+ sText_PkmnSafeguardExpired, // 81
+ sText_PkmnWentToSleep, // 82
+ sText_PkmnSleptHealthy, // 83
+ sText_PkmnWhippedWhirlwind, // 84
+ sText_PkmnTookSunlight, // 85
+ sText_PkmnLoweredHead, // 86
+ sText_PkmnIsGlowing, // 87
+ sText_PkmnFlewHigh, // 88
+ sText_PkmnDugHole, // 89
+ sText_PkmnSqueezedByBind, // 90
+ sText_PkmnTrappedInVortex, // 91
+ sText_PkmnWrappedBy, // 92
+ sText_PkmnClamped, // 93
+ sText_PkmnHurtBy, // 94
+ sText_PkmnFreedFrom, // 95
+ sText_PkmnCrashed, // 96
+ gText_PkmnShroudedInMist, // 97
+ sText_PkmnProtectedByMist, // 98
+ gText_PkmnGettingPumped, // 99
+ sText_PkmnHitWithRecoil, // 100
+ sText_PkmnProtectedItself2, // 101
+ sText_PkmnBuffetedBySandstorm, // 102
+ sText_PkmnPeltedByHail, // 103
+ sText_PkmnSeeded, // 104
+ sText_PkmnEvadedAttack, // 105
+ sText_PkmnSappedByLeechSeed, // 106
+ sText_PkmnFastAsleep, // 107
+ sText_PkmnWokeUp, // 108
+ sText_PkmnUproarKeptAwake, // 109
+ sText_PkmnWokeUpInUproar, // 110
+ sText_PkmnCausedUproar, // 111
+ sText_PkmnMakingUproar, // 112
+ sText_PkmnCalmedDown, // 113
+ sText_PkmnCantSleepInUproar, // 114
+ sText_PkmnStockpiled, // 115
+ sText_PkmnCantStockpile, // 116
+ sText_PkmnCantSleepInUproar2, // 117
+ sText_UproarKeptPkmnAwake, // 118
+ sText_PkmnStayedAwakeUsing, // 119
+ sText_PkmnStoringEnergy, // 120
+ sText_PkmnUnleashedEnergy, // 121
+ sText_PkmnFatigueConfusion, // 122
+ sText_PkmnPickedUpItem, // 123
+ sText_PkmnUnaffected, // 124
+ sText_PkmnTransformedInto, // 125
+ sText_PkmnMadeSubstitute, // 126
+ sText_PkmnHasSubstitute, // 127
+ sText_SubstituteDamaged, // 128
+ sText_PkmnSubstituteFaded, // 129
+ sText_PkmnMustRecharge, // 130
+ sText_PkmnRageBuilding, // 131
+ sText_PkmnMoveWasDisabled, // 132
+ sText_PkmnMoveIsDisabled, // 133
+ sText_PkmnMoveDisabledNoMore, // 134
+ sText_PkmnGotEncore, // 135
+ sText_PkmnEncoreEnded, // 136
+ sText_PkmnTookAim, // 137
+ sText_PkmnSketchedMove, // 138
+ sText_PkmnTryingToTakeFoe, // 139
+ sText_PkmnTookFoe, // 140
+ sText_PkmnReducedPP, // 141
+ sText_PkmnStoleItem, // 142
+ sText_TargetCantEscapeNow, // 143
+ sText_PkmnFellIntoNightmare, // 144
+ sText_PkmnLockedInNightmare, // 145
+ sText_PkmnLaidCurse, // 146
+ sText_PkmnAfflictedByCurse, // 147
+ sText_SpikesScattered, // 148
+ sText_PkmnHurtBySpikes, // 149
+ sText_PkmnIdentified, // 150
+ sText_PkmnPerishCountFell, // 151
+ sText_PkmnBracedItself, // 152
+ sText_PkmnEnduredHit, // 153
+ sText_MagnitudeStrength, // 154
+ sText_PkmnCutHPMaxedAttack, // 155
+ sText_PkmnCopiedStatChanges, // 156
+ sText_PkmnGotFree, // 157
+ sText_PkmnShedLeechSeed, // 158
+ sText_PkmnBlewAwaySpikes, // 159
+ sText_PkmnFledFromBattle, // 160
+ sText_PkmnForesawAttack, // 161
+ sText_PkmnTookAttack, // 162
+ sText_PkmnAttack, // 163
+ sText_PkmnCenterAttention, // 164
+ sText_PkmnChargingPower, // 165
+ sText_NaturePowerTurnedInto, // 166
+ sText_PkmnStatusNormal, // 167
+ sText_PkmnHasNoMovesLeft, // 168
+ sText_PkmnSubjectedToTorment, // 169
+ sText_PkmnCantUseMoveTorment, // 170
+ sText_PkmnTighteningFocus, // 171
+ sText_PkmnFellForTaunt, // 172
+ sText_PkmnCantUseMoveTaunt, // 173
+ sText_PkmnReadyToHelp, // 174
+ sText_PkmnSwitchedItems, // 175
+ sText_PkmnCopiedFoe, // 176
+ sText_PkmnMadeWish, // 177
+ sText_PkmnWishCameTrue, // 178
+ sText_PkmnPlantedRoots, // 179
+ sText_PkmnAbsorbedNutrients, // 180
+ sText_PkmnAnchoredItself, // 181
+ sText_PkmnWasMadeDrowsy, // 182
+ sText_PkmnKnockedOff, // 183
+ sText_PkmnSwappedAbilities, // 184
+ sText_PkmnSealedOpponentMove, // 185
+ sText_PkmnCantUseMoveSealed, // 186
+ sText_PkmnWantsGrudge, // 187
+ sText_PkmnLostPPGrudge, // 188
+ sText_PkmnShroudedItself, // 189
+ sText_PkmnMoveBounced, // 190
+ sText_PkmnWaitsForTarget, // 191
+ sText_PkmnSnatchedMove, // 192
+ sText_PkmnMadeItRain, // 193
+ sText_PkmnRaisedSpeed, // 194
+ sText_PkmnProtectedBy, // 195
+ sText_PkmnPreventsUsage, // 196
+ sText_PkmnRestoredHPUsing, // 197
+ sText_PkmnChangedTypeWith, // 198
+ sText_PkmnPreventsParalysisWith, // 199
+ sText_PkmnPreventsRomanceWith, // 200
+ sText_PkmnPreventsPoisoningWith, // 201
+ sText_PkmnPreventsConfusionWith, // 202
+ sText_PkmnRaisedFirePowerWith, // 203
+ sText_PkmnAnchorsItselfWith, // 204
+ sText_PkmnCutsAttackWith, // 205
+ sText_PkmnPreventsStatLossWith, // 206
+ sText_PkmnHurtsWith, // 207
+ sText_PkmnTraced, // 208
+ sText_StatSharply, // 209
+ gText_StatRose, // 210
+ sText_StatHarshly, // 211
+ sText_StatFell, // 212
+ sText_PkmnsStatChanged, // 213
+ gText_PkmnsStatChanged2, // 214
+ sText_PkmnsStatChanged3, // 215
+ sText_PkmnsStatChanged4, // 216
+ sText_CriticalHit, // 217
+ sText_OneHitKO, // 218
+ sText_123Poof, // 219
+ sText_AndEllipsis, // 220
+ sText_NotVeryEffective, // 221
+ sText_SuperEffective, // 222
+ sText_GotAwaySafely, // 223
+ sText_WildPkmnFled, // 224
+ sText_NoRunningFromTrainers, // 225
+ sText_CantEscape, // 226
+ sText_DontLeaveBirch, // 227
+ sText_ButNothingHappened, // 228
+ sText_ButItFailed, // 229
+ sText_ItHurtConfusion, // 230
+ sText_MirrorMoveFailed, // 231
+ sText_StartedToRain, // 232
+ sText_DownpourStarted, // 233
+ sText_RainContinues, // 234
+ sText_DownpourContinues, // 235
+ sText_RainStopped, // 236
+ sText_SandstormBrewed, // 237
+ sText_SandstormRages, // 238
+ sText_SandstormSubsided, // 239
+ sText_SunlightGotBright, // 240
+ sText_SunlightStrong, // 241
+ sText_SunlightFaded, // 242
+ sText_StartedHail, // 243
+ sText_HailContinues, // 244
+ sText_HailStopped, // 245
+ sText_FailedToSpitUp, // 246
+ sText_FailedToSwallow, // 247
+ sText_WindBecameHeatWave, // 248
+ sText_StatChangesGone, // 249
+ sText_CoinsScattered, // 250
+ sText_TooWeakForSubstitute, // 251
+ sText_SharedPain, // 252
+ sText_BellChimed, // 253
+ sText_FaintInThree, // 254
+ sText_NoPPLeft, // 255
+ sText_ButNoPPLeft, // 256
+ sText_PlayerUsedItem, // 257
+ sText_WallyUsedItem, // 258
+ sText_TrainerBlockedBall, // 259
+ sText_DontBeAThief, // 260
+ sText_ItDodgedBall, // 261
+ sText_YouMissedPkmn, // 262
+ sText_PkmnBrokeFree, // 263
+ sText_ItAppearedCaught, // 264
+ sText_AarghAlmostHadIt, // 265
+ sText_ShootSoClose, // 266
+ sText_GotchaPkmnCaught, // 267
+ sText_GotchaPkmnCaught2, // 268
+ sText_GiveNicknameCaptured, // 269
+ sText_PkmnSentToPC, // 270
+ sText_PkmnDataAddedToDex, // 271
+ sText_ItIsRaining, // 272
+ sText_SandstormIsRaging, // 273
+ sText_CantEscape2, // 274
+ sText_PkmnIgnoresAsleep, // 275
+ sText_PkmnIgnoredOrders, // 276
+ sText_PkmnBeganToNap, // 277
+ sText_PkmnLoafing, // 278
+ sText_PkmnWontObey, // 279
+ sText_PkmnTurnedAway, // 280
+ sText_PkmnPretendNotNotice, // 281
+ sText_EnemyAboutToSwitchPkmn, // 282
+ sText_CreptCloser, // 283
+ sText_CantGetCloser, // 284
+ sText_PkmnWatchingCarefully, // 285
+ sText_PkmnCuriousAboutX, // 286
+ sText_PkmnEnthralledByX, // 287
+ sText_PkmnIgnoredX, // 288
+ sText_ThrewPokeblockAtPkmn, // 289
+ sText_OutOfSafariBalls, // 290
+ sText_PkmnsItemCuredParalysis, // 291
+ sText_PkmnsItemCuredPoison, // 292
+ sText_PkmnsItemHealedBurn, // 293
+ sText_PkmnsItemDefrostedIt, // 294
+ sText_PkmnsItemWokeIt, // 295
+ sText_PkmnsItemSnappedOut, // 296
+ sText_PkmnsItemCuredProblem, // 297
+ sText_PkmnsItemRestoredHealth, // 298
+ sText_PkmnsItemRestoredPP, // 299
+ sText_PkmnsItemRestoredStatus, // 300
+ sText_PkmnsItemRestoredHPALittle, // 301
+ sText_ItemAllowsOnlyYMove, // 302
+ sText_PkmnHungOnWithX, // 303
+ gText_EmptyString3, // 304
+ sText_PkmnsXPreventsBurns, // 305
+ sText_PkmnsXBlocksY, // 306
+ sText_PkmnsXRestoredHPALittle2, // 307
+ sText_PkmnsXWhippedUpSandstorm, // 308
+ sText_PkmnsXPreventsYLoss, // 309
+ sText_PkmnsXInfatuatedY, // 310
+ sText_PkmnsXMadeYIneffective, // 311
+ sText_PkmnsXCuredYProblem, // 312
+ sText_ItSuckedLiquidOoze, // 313
+ sText_PkmnTransformed, // 314
+ sText_ElectricityWeakened, // 315
+ sText_FireWeakened, // 316
+ sText_PkmnHidUnderwater, // 317
+ sText_PkmnSprangUp, // 318
+ sText_HMMovesCantBeForgotten, // 319
+ sText_XFoundOneY, // 320
+ sText_PlayerDefeatedLinkTrainerTrainer1, // 321
+ sText_SoothingAroma, // 322
+ sText_ItemsCantBeUsedNow, // 323
+ sText_ForXCommaYZ, // 324
+ sText_UsingXTheYOfZN, // 325
+ sText_PkmnUsedXToGetPumped, // 326
+ sText_PkmnsXMadeYUseless, // 327
+ sText_PkmnTrappedBySandTomb, // 328
+ sText_EmptyString4, // 329
+ sText_ABoosted, // 330
+ sText_PkmnsXIntensifiedSun, // 331
+ sText_PkmnMakesGroundMiss, // 332
+ sText_YouThrowABallNowRight, // 333
+ sText_PkmnsXTookAttack, // 334
+ sText_PkmnChoseXAsDestiny, // 335
+ sText_PkmnLostFocus, // 336
+ sText_UseNextPkmn, // 337
+ sText_PkmnFledUsingIts, // 338
+ sText_PkmnFledUsing, // 339
+ sText_PkmnWasDraggedOut, // 340
+ sText_PreventedFromWorking, // 341
+ sText_PkmnsItemNormalizedStatus, // 342
+ sText_Trainer1UsedItem, // 343
+ sText_BoxIsFull, // 344
+ sText_PkmnAvoidedAttack, // 345
+ sText_PkmnsXMadeItIneffective, // 346
+ sText_PkmnsXPreventsFlinching, // 347
+ sText_PkmnAlreadyHasBurn, // 348
+ sText_StatsWontDecrease2, // 349
+ sText_PkmnsXBlocksY2, // 350
+ sText_PkmnsXWoreOff, // 351
+ sText_PkmnRaisedDefALittle, // 352
+ sText_PkmnRaisedSpDefALittle, // 353
+ sText_TheWallShattered, // 354
+ sText_PkmnsXPreventsYsZ, // 355
+ sText_PkmnsXCuredItsYProblem, // 356
+ sText_AttackerCantEscape, // 357
+ sText_PkmnObtainedX, // 358
+ sText_PkmnObtainedX2, // 359
+ sText_PkmnObtainedXYObtainedZ, // 360
+ sText_ButNoEffect, // 361
+ sText_PkmnsXHadNoEffectOnY, // 362
+ sText_TwoInGameTrainersDefeated, // 363
+ sText_Trainer2LoseText, // 364
+ sText_PkmnIncapableOfPower, // 365
+ sText_GlintAppearsInEye, // 366
+ sText_PkmnGettingIntoPosition, // 367
+ sText_PkmnBeganGrowlingDeeply, // 368
+ sText_PkmnEagerForMore, // 369
+ sText_DefeatedOpponentByReferee, // 370
+ sText_LostToOpponentByReferee, // 371
+ sText_TiedOpponentByReferee, // 372
+ sText_QuestionForfeitMatch, // 373
+ sText_ForfeitedMatch, // 374
+ gText_PkmnTransferredSomeonesPC, // 375
+ gText_PkmnTransferredLanettesPC, // 376
+ gText_PkmnBoxSomeonesPCFull, // 377
+ gText_PkmnBoxLanettesPCFull, // 378
+ sText_Trainer1WinText, // 379
+ sText_Trainer2WinText, // 380
};
const u16 gMissStringIds[] =
@@ -1176,16 +1174,16 @@ const u8 gText_BattleSwitchWhich3[] = _("{UP_ARROW}");
const u8 gText_BattleSwitchWhich4[] = _("{ESCAPE 4}");
const u8 gText_BattleSwitchWhich5[] = _("-");
-const u8 gText_HP[] = _("HP");
-const u8 gText_Attack[] = _("ATTACK");
-const u8 gText_Defense[] = _("DEFENSE");
-const u8 gText_SpAtk[] = _("SP. ATK");
-const u8 gText_SpDef[] = _("SP. DEF");
+static const u8 sText_HP[] = _("HP");
+static const u8 sText_Attack[] = _("ATTACK");
+static const u8 sText_Defense[] = _("DEFENSE");
+static const u8 sText_SpAtk[] = _("SP. ATK");
+static const u8 sText_SpDef[] = _("SP. DEF");
const u8 * const gStatNamesTable2[] =
{
- gText_HP, gText_SpAtk, gText_Attack,
- gText_SpDef, gText_Defense, gText_Speed
+ sText_HP, sText_SpAtk, sText_Attack,
+ sText_SpDef, sText_Defense, sText_Speed
};
const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GREY}SAFARI BALLS");
@@ -1202,10 +1200,10 @@ const u8 gText_BattleWallyName[] = _("WALLY");
const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win");
const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss");
const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw");
-const u8 gText_SpaceIs[] = _(" is");
-const u8 gText_ApostropheS[] = _("’s");
+static const u8 sText_SpaceIs[] = _(" is");
+static const u8 sText_ApostropheS[] = _("’s");
-const u8 gText_UnknownMoveTypes[][17] =
+static const u8 sATypeMove_Table[][17] =
{
_("a NORMAL move"),
_("a FIGHTING move"),
@@ -1228,17 +1226,17 @@ const u8 gText_UnknownMoveTypes[][17] =
};
const u8 gText_BattleTourney[] = _("BATTLE TOURNEY");
-const u8 gText_Round1[] = _("Round 1");
-const u8 gText_Round2[] = _("Round 2");
-const u8 gText_Semifinal[] = _("Semifinal");
-const u8 gText_Final[] = _("Final");
+static const u8 sText_Round1[] = _("Round 1");
+static const u8 sText_Round2[] = _("Round 2");
+static const u8 sText_Semifinal[] = _("Semifinal");
+static const u8 sText_Final[] = _("Final");
const u8 * const gRoundsStringTable[] =
{
- gText_Round1,
- gText_Round2,
- gText_Semifinal,
- gText_Final
+ sText_Round1,
+ sText_Round2,
+ sText_Semifinal,
+ sText_Final
};
const u8 gText_TheGreatNewHope[] = _("The great new hope!\p");
@@ -1253,17 +1251,17 @@ const u8 gText_Mind[] = _("Mind");
const u8 gText_Skill[] = _("Skill");
const u8 gText_Body[] = _("Body");
const u8 gText_Judgement[] = _("{B_BUFF1}{CLEAR 13}Judgment{CLEAR 13}{B_BUFF2}");
-const u8 gText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!");
-const u8 gText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!");
-const u8 gText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p");
-const u8 gText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!");
-const u8 gText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p");
-const u8 gText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}");
-const u8 gText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!");
-const u8 gText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s eyes!");
-const u8 gText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!");
-const u8 gText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
-const u8 gText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
+static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!");
+static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!");
+static const u8 sText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p");
+static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!");
+static const u8 sText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p");
+static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}");
+static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!");
+static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s eyes!");
+static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!");
+static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
+static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
const u16 gStringIds_85CCF0A[] =
{
@@ -1271,43 +1269,43 @@ const u16 gStringIds_85CCF0A[] =
STRINGID_PKMNBEGANGROWLINGDEEPLY, STRINGID_PKMNEAGERFORMORE
};
-const u8 gText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
-const u8 gText_RefThatsIt[] = _("REFEREE: That’s it! We will now go to\njudging to determine the winner!");
-const u8 gText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p");
-const u8 gText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p");
-const u8 gText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p");
-const u8 gText_RefJudgement1[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}’s {B_PLAYER_MON1_NAME}!\p");
-const u8 gText_RefJudgement2[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}’s {B_OPPONENT_MON1_NAME}!\p");
-const u8 gText_RefJudgement3[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p");
-const u8 gText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
-const u8 gText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
-const u8 gText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
-const u8 gText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!");
+static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
+static const u8 sText_RefThatsIt[] = _("REFEREE: That’s it! We will now go to\njudging to determine the winner!");
+static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p");
+static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p");
+static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p");
+static const u8 sText_RefJudgement1[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}’s {B_PLAYER_MON1_NAME}!\p");
+static const u8 sText_RefJudgement2[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}’s {B_OPPONENT_MON1_NAME}!\p");
+static const u8 sText_RefJudgement3[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p");
+static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
+static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
+static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
+static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!");
const u8 * const gRefereeStringsTable[] =
{
- gText_RefIfNothingIsDecided,
- gText_RefThatsIt,
- gText_RefJudgeMind,
- gText_RefJudgeSkill,
- gText_RefJudgeBody,
- gText_RefJudgement1,
- gText_RefJudgement2,
- gText_RefJudgement3,
- gText_RefCommenceBattle,
+ sText_RefIfNothingIsDecided,
+ sText_RefThatsIt,
+ sText_RefJudgeMind,
+ sText_RefJudgeSkill,
+ sText_RefJudgeBody,
+ sText_RefJudgement1,
+ sText_RefJudgement2,
+ sText_RefJudgement3,
+ sText_RefCommenceBattle,
};
-const u8 gText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?");
-const u8 gText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!");
-const u8 gText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
-const u8 gText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}");
-const u8 gText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
-const u8 gText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
-const u8 gText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
+static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?");
+static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!");
+static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
+static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}");
+static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
+static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
+static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?");
const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}’s battle result was recorded\non the FRONTIER PASS.");
-const u8 gText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}");
-const u8 gText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}");
+static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}");
+static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}");
// This is four lists of moves which use a different attack string in Japanese
// to the default. See the documentation for sub_814F950 for more detail.
@@ -1444,45 +1442,45 @@ void BufferStringBattle(u16 stringID)
{
if (gBattleTypeFlags & BATTLE_TYPE_x800000)
{
- stringPtr = gText_TwoTrainersWantToBattle;
+ stringPtr = sText_TwoTrainersWantToBattle;
}
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- stringPtr = gText_TwoLinkTrainersWantToBattlePause;
+ stringPtr = sText_TwoLinkTrainersWantToBattlePause;
else
- stringPtr = gText_TwoLinkTrainersWantToBattle;
+ stringPtr = sText_TwoLinkTrainersWantToBattle;
}
else
{
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
- stringPtr = gText_Trainer1WantsToBattle;
+ stringPtr = sText_Trainer1WantsToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- stringPtr = gText_LinkTrainerWantsToBattlePause;
+ stringPtr = sText_LinkTrainerWantsToBattlePause;
else
- stringPtr = gText_LinkTrainerWantsToBattle;
+ stringPtr = sText_LinkTrainerWantsToBattle;
}
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
- stringPtr = gText_TwoTrainersWantToBattle;
+ stringPtr = sText_TwoTrainersWantToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- stringPtr = gText_TwoTrainersWantToBattle;
+ stringPtr = sText_TwoTrainersWantToBattle;
else
- stringPtr = gText_Trainer1WantsToBattle;
+ stringPtr = sText_Trainer1WantsToBattle;
}
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
- stringPtr = gText_WildPkmnAppeared2;
+ stringPtr = sText_WildPkmnAppeared2;
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles
- stringPtr = gText_TwoWildPkmnAppeared;
+ stringPtr = sText_TwoWildPkmnAppeared;
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
- stringPtr = gText_WildPkmnAppearedPause;
+ stringPtr = sText_WildPkmnAppearedPause;
else
- stringPtr = gText_WildPkmnAppeared;
+ stringPtr = sText_WildPkmnAppeared;
}
break;
case STRINGID_INTROSENDOUT: // poke first send-out
@@ -1491,17 +1489,17 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
- stringPtr = gText_InGamePartnerSentOutZGoN;
+ stringPtr = sText_InGamePartnerSentOutZGoN;
else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- stringPtr = gText_GoTwoPkmn;
+ stringPtr = sText_GoTwoPkmn;
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_LinkPartnerSentOutPkmnGoPkmn;
+ stringPtr = sText_LinkPartnerSentOutPkmnGoPkmn;
else
- stringPtr = gText_GoTwoPkmn;
+ stringPtr = sText_GoTwoPkmn;
}
else
{
- stringPtr = gText_GoPkmn;
+ stringPtr = sText_GoPkmn;
}
}
else
@@ -1509,24 +1507,24 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- stringPtr = gText_TwoTrainersSentPkmn;
+ stringPtr = sText_TwoTrainersSentPkmn;
else if (gBattleTypeFlags & BATTLE_TYPE_x800000)
- stringPtr = gText_TwoTrainersSentPkmn;
+ stringPtr = sText_TwoTrainersSentPkmn;
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_TwoLinkTrainersSentOutPkmn;
+ stringPtr = sText_TwoLinkTrainersSentOutPkmn;
else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
- stringPtr = gText_LinkTrainerSentOutTwoPkmn;
+ stringPtr = sText_LinkTrainerSentOutTwoPkmn;
else
- stringPtr = gText_Trainer1SentOutTwoPkmn;
+ stringPtr = sText_Trainer1SentOutTwoPkmn;
}
else
{
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
- stringPtr = gText_Trainer1SentOutPkmn;
+ stringPtr = sText_Trainer1SentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
- stringPtr = gText_Trainer1SentOutPkmn;
+ stringPtr = sText_Trainer1SentOutPkmn;
else
- stringPtr = gText_LinkTrainerSentOutPkmn;
+ stringPtr = sText_LinkTrainerSentOutPkmn;
}
}
break;
@@ -1534,26 +1532,26 @@ void BufferStringBattle(u16 stringID)
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
if (*(&gBattleStruct->hpScale) == 0)
- stringPtr = gText_PkmnThatsEnough;
+ stringPtr = sText_PkmnThatsEnough;
else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- stringPtr = gText_PkmnComeBack;
+ stringPtr = sText_PkmnComeBack;
else if (*(&gBattleStruct->hpScale) == 2)
- stringPtr = gText_PkmnOkComeBack;
+ stringPtr = sText_PkmnOkComeBack;
else
- stringPtr = gText_PkmnGoodComeBack;
+ stringPtr = sText_PkmnGoodComeBack;
}
else
{
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_800 || gBattleTypeFlags & BATTLE_TYPE_x2000000)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_LinkTrainer2WithdrewPkmn;
+ stringPtr = sText_LinkTrainer2WithdrewPkmn;
else
- stringPtr = gText_LinkTrainer1WithdrewPkmn;
+ stringPtr = sText_LinkTrainer1WithdrewPkmn;
}
else
{
- stringPtr = gText_Trainer1WithdrewPkmn;
+ stringPtr = sText_Trainer1WithdrewPkmn;
}
}
break;
@@ -1561,13 +1559,13 @@ void BufferStringBattle(u16 stringID)
if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER)
{
if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- stringPtr = gText_GoPkmn2;
+ stringPtr = sText_GoPkmn2;
else if (*(&gBattleStruct->hpScale) == 1)
- stringPtr = gText_DoItPkmn;
+ stringPtr = sText_DoItPkmn;
else if (*(&gBattleStruct->hpScale) == 2)
- stringPtr = gText_GoForItPkmn;
+ stringPtr = sText_GoForItPkmn;
else
- stringPtr = gText_YourFoesWeakGetEmPkmn;
+ stringPtr = sText_YourFoesWeakGetEmPkmn;
}
else
{
@@ -1576,18 +1574,18 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_x800000)
{
if (gBattleScripting.battler == 1)
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
else
- stringPtr = gText_Trainer2SentOutPkmn;
+ stringPtr = sText_Trainer2SentOutPkmn;
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_LinkTrainerMultiSentOutPkmn;
+ stringPtr = sText_LinkTrainerMultiSentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
else
- stringPtr = gText_LinkTrainerSentOutPkmn2;
+ stringPtr = sText_LinkTrainerSentOutPkmn2;
}
}
else
@@ -1595,13 +1593,13 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
{
if (gBattleScripting.battler == 1)
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
else
- stringPtr = gText_Trainer2SentOutPkmn;
+ stringPtr = sText_Trainer2SentOutPkmn;
}
else
{
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
}
}
}
@@ -1610,12 +1608,12 @@ void BufferStringBattle(u16 stringID)
sub_814F8F8(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names?
if (gStringInfo->currentMove > LAST_MOVE_INDEX)
- StringCopy(gBattleTextBuff2, gText_UnknownMoveTypes[*(&gBattleStruct->stringMoveType)]);
+ StringCopy(gBattleTextBuff2, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]);
else
StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
sub_814F950(gBattleTextBuff2);
- stringPtr = gText_AttackerUsedX;
+ stringPtr = sText_AttackerUsedX;
break;
case STRINGID_BATTLEEND: // battle end
if (gBattleTextBuff1[0] & B_OUTCOME_LINK_BATTLE_RAN)
@@ -1625,11 +1623,11 @@ void BufferStringBattle(u16 stringID)
gBattleTextBuff1[0] ^= (B_OUTCOME_LOST | B_OUTCOME_WON);
if (gBattleTextBuff1[0] == B_OUTCOME_LOST || gBattleTextBuff1[0] == B_OUTCOME_DREW)
- stringPtr = gText_GotAwaySafely;
+ stringPtr = sText_GotAwaySafely;
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_TwoWildFled;
+ stringPtr = sText_TwoWildFled;
else
- stringPtr = gText_WildFled;
+ stringPtr = sText_WildFled;
}
else
{
@@ -1642,15 +1640,15 @@ void BufferStringBattle(u16 stringID)
{
case B_OUTCOME_WON:
if (gBattleTypeFlags & BATTLE_TYPE_x800000)
- stringPtr = gText_TwoInGameTrainersDefeated;
+ stringPtr = sText_TwoInGameTrainersDefeated;
else
- stringPtr = gText_TwoLinkTrainersDefeated;
+ stringPtr = sText_TwoLinkTrainersDefeated;
break;
case B_OUTCOME_LOST:
- stringPtr = gText_PlayerLostToTwo;
+ stringPtr = sText_PlayerLostToTwo;
break;
case B_OUTCOME_DREW:
- stringPtr = gText_PlayerBattledToDrawVsTwo;
+ stringPtr = sText_PlayerBattledToDrawVsTwo;
break;
}
}
@@ -1659,13 +1657,13 @@ void BufferStringBattle(u16 stringID)
switch (gBattleTextBuff1[0])
{
case B_OUTCOME_WON:
- stringPtr = gText_PlayerDefeatedLinkTrainerTrainer1;
+ stringPtr = sText_PlayerDefeatedLinkTrainerTrainer1;
break;
case B_OUTCOME_LOST:
- stringPtr = gText_PlayerLostAgainstTrainer1;
+ stringPtr = sText_PlayerLostAgainstTrainer1;
break;
case B_OUTCOME_DREW:
- stringPtr = gText_PlayerBattledToDrawTrainer1;
+ stringPtr = sText_PlayerBattledToDrawTrainer1;
break;
}
}
@@ -1674,13 +1672,13 @@ void BufferStringBattle(u16 stringID)
switch (gBattleTextBuff1[0])
{
case B_OUTCOME_WON:
- stringPtr = gText_PlayerDefeatedLinkTrainer;
+ stringPtr = sText_PlayerDefeatedLinkTrainer;
break;
case B_OUTCOME_LOST:
- stringPtr = gText_PlayerLostAgainstLinkTrainer;
+ stringPtr = sText_PlayerLostAgainstLinkTrainer;
break;
case B_OUTCOME_DREW:
- stringPtr = gText_PlayerBattledToDrawLinkTrainer;
+ stringPtr = sText_PlayerBattledToDrawLinkTrainer;
break;
}
}
@@ -1707,7 +1705,7 @@ u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src)
BattleStringExpandPlaceholders(src, gDisplayedStringBattle);
}
-static const u8* TryGetStatusString(u8* src)
+static const u8* TryGetStatusString(u8 *src)
{
u32 i;
u8 status[8];
@@ -1738,13 +1736,13 @@ static const u8* TryGetStatusString(u8* src)
return NULL;
}
-#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \
- if (GetBattlerSide(bank) != B_SIDE_PLAYER) \
+#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \
{ \
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
- toCpy = gText_FoePkmnPrefix; \
+ toCpy = sText_FoePkmnPrefix; \
else \
- toCpy = gText_WildPkmnPrefix; \
+ toCpy = sText_WildPkmnPrefix; \
while (*toCpy != EOS) \
{ \
dst[dstID] = *toCpy; \
@@ -1760,10 +1758,10 @@ static const u8* TryGetStatusString(u8* src)
StringGetEnd10(text); \
toCpy = text;
-u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
+u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{
u32 dstID = 0; // if they used dstID, why not use srcID as well?
- const u8* toCpy = NULL;
+ const u8 *toCpy = NULL;
u8 text[30];
u8 multiplayerID;
s32 i;
@@ -1868,7 +1866,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
StringGetEnd10(text);
toCpy = text;
break;
- case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only bank 0/1
+ case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1
HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker,
gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker))])
break;
@@ -1887,24 +1885,24 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
case B_TXT_DEF_NAME_WITH_PREFIX: // target name with prefix
HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
break;
- case B_TXT_EFF_NAME_WITH_PREFIX: // effect bank name with prefix
+ case B_TXT_EFF_NAME_WITH_PREFIX: // effect battlerId name with prefix
HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
break;
- case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active bank name with prefix
+ case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battlerId name with prefix
HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
break;
- case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active bank name with prefix
+ case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battlerId name with prefix
HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler])
break;
case B_TXT_CURRENT_MOVE: // current move name
if (gStringInfo->currentMove > LAST_MOVE_INDEX)
- toCpy = gText_UnknownMoveTypes[gBattleStruct->stringMoveType];
+ toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->currentMove];
break;
case B_TXT_LAST_MOVE: // originally used move name
if (gStringInfo->originallyUsedMove > LAST_MOVE_INDEX)
- toCpy = gText_UnknownMoveTypes[gBattleStruct->stringMoveType];
+ toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->originallyUsedMove];
break;
@@ -1919,12 +1917,12 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|| (gBattleScripting.multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE)))
{
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
- StringAppend(text, gText_BerrySuffix);
+ StringAppend(text, sText_BerrySuffix);
toCpy = text;
}
else
{
- toCpy = gText_EnigmaBerry;
+ toCpy = sText_EnigmaBerry;
}
}
else
@@ -1932,11 +1930,11 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
{
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
- StringAppend(text, gText_BerrySuffix);
+ StringAppend(text, sText_BerrySuffix);
toCpy = text;
}
else
- toCpy = gText_EnigmaBerry;
+ toCpy = sText_EnigmaBerry;
}
}
else
@@ -1963,7 +1961,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
case B_TXT_SCR_ACTIVE_ABILITY: // scripting active ability
toCpy = gAbilityNames[gBattlerAbilities[gBattleScripting.battler]];
break;
- case B_TXT_EFF_ABILITY: // effect bank ability
+ case B_TXT_EFF_ABILITY: // effect battlerId ability
toCpy = gAbilityNames[gBattlerAbilities[gEffectBattler]];
break;
case B_TXT_TRAINER1_CLASS: // trainer class name
@@ -2074,45 +2072,45 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
break;
case B_TXT_PC_CREATOR_NAME: // lanette pc
if (FlagGet(FLAG_SYS_PC_LANETTE))
- toCpy = gText_Lanettes;
+ toCpy = sText_Lanettes;
else
- toCpy = gText_Someones;
+ toCpy = sText_Someones;
break;
case B_TXT_ATK_PREFIX2:
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix2;
+ toCpy = sText_AllyPkmnPrefix2;
else
- toCpy = gText_FoePkmnPrefix3;
+ toCpy = sText_FoePkmnPrefix3;
break;
case B_TXT_DEF_PREFIX2:
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix2;
+ toCpy = sText_AllyPkmnPrefix2;
else
- toCpy = gText_FoePkmnPrefix3;
+ toCpy = sText_FoePkmnPrefix3;
break;
case B_TXT_ATK_PREFIX1:
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix;
+ toCpy = sText_AllyPkmnPrefix;
else
- toCpy = gText_FoePkmnPrefix2;
+ toCpy = sText_FoePkmnPrefix2;
break;
case B_TXT_DEF_PREFIX1:
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix;
+ toCpy = sText_AllyPkmnPrefix;
else
- toCpy = gText_FoePkmnPrefix2;
+ toCpy = sText_FoePkmnPrefix2;
break;
case B_TXT_ATK_PREFIX3:
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix3;
+ toCpy = sText_AllyPkmnPrefix3;
else
- toCpy = gText_FoePkmnPrefix4;
+ toCpy = sText_FoePkmnPrefix4;
break;
case B_TXT_DEF_PREFIX3:
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix3;
+ toCpy = sText_AllyPkmnPrefix3;
else
- toCpy = gText_FoePkmnPrefix4;
+ toCpy = sText_FoePkmnPrefix4;
break;
case B_TXT_TRAINER2_CLASS:
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2258,9 +2256,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- StringAppend(dst, gText_FoePkmnPrefix);
+ StringAppend(dst, sText_FoePkmnPrefix);
else
- StringAppend(dst, gText_WildPkmnPrefix);
+ StringAppend(dst, sText_WildPkmnPrefix);
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
}
@@ -2301,10 +2299,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
{
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
- StringAppend(dst, gText_BerrySuffix);
+ StringAppend(dst, sText_BerrySuffix);
}
else
- StringAppend(dst, gText_EnigmaBerry);
+ StringAppend(dst, sText_EnigmaBerry);
}
else
CopyItemName(hword, dst);
@@ -2337,29 +2335,29 @@ static void sub_814F8F8(u8* textBuff)
if (counter >= 0)
{
if (counter <= 2)
- StringCopy(textBuff, gText_SpaceIs); // is
+ StringCopy(textBuff, sText_SpaceIs); // is
else if (counter <= 4)
- StringCopy(textBuff, gText_ApostropheS); // 's
+ StringCopy(textBuff, sText_ApostropheS); // 's
}
}
// Appends "!" to the text buffer `dst`. In the original Japanese this looked
// into the table of moves at sUnknownMoveTable and varied the line accordingly.
//
-// gText_ExclamationMark was a plain "!", used for any attack not on the list.
+// sText_ExclamationMark was a plain "!", used for any attack not on the list.
// It resulted in the translation "<NAME>'s <ATTACK>!".
//
-// gText_ExclamationMark2 was "を つかった!". This resulted in the translation
+// sText_ExclamationMark2 was "を つかった!". This resulted in the translation
// "<NAME> used <ATTACK>!", which was used for all attacks in English.
//
-// gText_ExclamationMark3 was "した!". This was used for those moves whose
+// sText_ExclamationMark3 was "した!". This was used for those moves whose
// names were verbs, such as Recover, and resulted in translations like "<NAME>
// recovered itself!".
//
-// gText_ExclamationMark4 was "を した!" This resulted in a translation of
+// sText_ExclamationMark4 was "を した!" This resulted in a translation of
// "<NAME> did an <ATTACK>!".
//
-// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of
+// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of
// "<NAME>'s <ATTACK> attack!".
static void sub_814F950(u8* dst)
{
@@ -2380,19 +2378,19 @@ static void sub_814F950(u8* dst)
switch (counter)
{
case 0:
- StringCopy(dst, gText_ExclamationMark);
+ StringCopy(dst, sText_ExclamationMark);
break;
case 1:
- StringCopy(dst, gText_ExclamationMark2);
+ StringCopy(dst, sText_ExclamationMark2);
break;
case 2:
- StringCopy(dst, gText_ExclamationMark3);
+ StringCopy(dst, sText_ExclamationMark3);
break;
case 3:
- StringCopy(dst, gText_ExclamationMark4);
+ StringCopy(dst, sText_ExclamationMark4);
break;
case 4:
- StringCopy(dst, gText_ExclamationMark5);
+ StringCopy(dst, sText_ExclamationMark5);
break;
}
}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 2da48de49..d1a18e38f 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
@@ -80,24 +71,8 @@ extern u8 Overworld_GetMapTypeOfSaveblockLocation(void);
extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void);
-// strings
-extern const u8 gText_BattleYesNoChoice[];
-
-// read via orr
-#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
-#define BSScriptRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
-#define BSScriptReadPtr(ptr) ((void *)BSScriptRead32(ptr))
-
-// read via add
-#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
-#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
-#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr))
-
#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
-#define TARGET_TURN_DAMAGED (gSpecialStatuses[gBattlerTarget].physicalDmg != 0 \
- || gSpecialStatuses[gBattlerTarget].specialDmg != 0)
-
// this file's functions
static bool8 IsTwoTurnsMove(u16 move);
static void TrySetDestinyBondToHappen(void);
@@ -1034,7 +1009,7 @@ static void atk00_attackcanceler(void)
RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
}
else if (DEFENDER_IS_PROTECTED
- && (gCurrentMove != MOVE_CURSE || (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST))
+ && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
&& ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))))
{
CancelMultiTurnMoves(gBattlerAttacker);
@@ -1057,7 +1032,7 @@ static void JumpIfMoveFailed(u8 adder, u16 move)
{
gLastLandedMoves[gBattlerTarget] = 0;
gLastHitByType[gBattlerTarget] = 0;
- BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -1142,14 +1117,14 @@ static bool8 AccuracyCalcHelper(u16 move)
static void atk01_accuracycheck(void)
{
- u16 move = BS2ScriptRead16(gBattlescriptCurrInstr + 5);
+ u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
if (move == 0xFFFE || move == 0xFFFF)
{
if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
gBattlescriptCurrInstr += 7;
else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else if (!JumpIfMoveAffectedByProtect(0))
gBattlescriptCurrInstr += 7;
}
@@ -1408,7 +1383,7 @@ static void atk06_typecalc(void)
GET_MOVE_TYPE(gCurrentMove, moveType);
// check stab
- if (gBattleMons[gBattlerAttacker].type1 == moveType || gBattleMons[gBattlerAttacker].type2 == moveType)
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType))
{
gBattleMoveDamage = gBattleMoveDamage * 15;
gBattleMoveDamage = gBattleMoveDamage / 10;
@@ -1586,7 +1561,7 @@ u8 TypeCalc(u16 move, u8 attacker, u8 defender)
moveType = gBattleMoves[move].type;
// check stab
- if (gBattleMons[attacker].type1 == moveType || gBattleMons[attacker].type2 == moveType)
+ if (IS_BATTLER_OF_TYPE(attacker, moveType))
{
gBattleMoveDamage = gBattleMoveDamage * 15;
gBattleMoveDamage = gBattleMoveDamage / 10;
@@ -2167,7 +2142,7 @@ static void atk10_printstring(void)
{
if (gBattleControllerExecFlags == 0)
{
- u16 var = BS2ScriptRead16(gBattlescriptCurrInstr + 1);
+ u16 var = T2_READ_16(gBattlescriptCurrInstr + 1);
PrepareStringBattle(var, gBattlerAttacker);
gBattlescriptCurrInstr += 3;
gBattleCommunication[MSG_DISPLAY] = 1;
@@ -2178,7 +2153,7 @@ static void atk11_printselectionstring(void)
{
gActiveBattler = gBattlerAttacker;
- BtlController_EmitPrintSelectionString(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ BtlController_EmitPrintSelectionString(0, T2_READ_16(gBattlescriptCurrInstr + 1));
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 3;
@@ -2195,7 +2170,7 @@ static void atk12_waitmessage(void)
}
else
{
- u16 toWait = BS2ScriptRead16(gBattlescriptCurrInstr + 1);
+ u16 toWait = T2_READ_16(gBattlescriptCurrInstr + 1);
if (++gPauseCounterBattle >= toWait)
{
gPauseCounterBattle = 0;
@@ -2210,7 +2185,7 @@ static void atk13_printfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
- const u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1);
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
PrepareStringBattle(*ptr, gBattlerAttacker);
@@ -2224,7 +2199,7 @@ static void atk14_printselectionstringfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
- const u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1);
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
gActiveBattler = gBattlerAttacker;
@@ -2344,8 +2319,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON
- || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
+ if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2355,13 +2329,9 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
RESET_RETURN
}
- if (gBattleMons[gEffectBattler].type1 == TYPE_POISON)
- break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_POISON)
- break;
- if (gBattleMons[gEffectBattler].type1 == TYPE_STEEL)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON))
break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
break;
if (gBattleMons[gEffectBattler].status1)
break;
@@ -2390,8 +2360,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBattler].type1 == TYPE_FIRE
- || gBattleMons[gEffectBattler].type2 == TYPE_FIRE)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2401,9 +2370,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
RESET_RETURN
}
- if (gBattleMons[gEffectBattler].type1 == TYPE_FIRE)
- break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_FIRE)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE))
break;
if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL)
break;
@@ -2415,9 +2382,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
case STATUS1_FREEZE:
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY)
noSunCanFreeze = FALSE;
- if (gBattleMons[gEffectBattler].type1 == TYPE_ICE)
- break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_ICE)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ICE))
break;
if (gBattleMons[gEffectBattler].status1)
break;
@@ -2479,8 +2444,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON
- || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
+ if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2492,10 +2456,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
if (gBattleMons[gEffectBattler].status1)
break;
- if (gBattleMons[gEffectBattler].type1 != TYPE_POISON
- && gBattleMons[gEffectBattler].type2 != TYPE_POISON
- && gBattleMons[gEffectBattler].type1 != TYPE_STEEL
- && gBattleMons[gEffectBattler].type2 != TYPE_STEEL)
+ if (!IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) && !IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
{
if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
break;
@@ -3012,7 +2973,7 @@ static void atk19_tryfaintmon(void)
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
{
- BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
BattleScriptPop();
gBattlescriptCurrInstr = BS_ptr;
@@ -3122,8 +3083,8 @@ static void atk1B_cleareffectsonfaint(void)
static void atk1C_jumpifstatus(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp)
gBattlescriptCurrInstr = jumpPtr;
@@ -3134,8 +3095,8 @@ static void atk1C_jumpifstatus(void)
static void atk1D_jumpifstatus2(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp)
gBattlescriptCurrInstr = jumpPtr;
@@ -3147,7 +3108,7 @@ static void atk1E_jumpifability(void)
{
u8 battlerId;
u8 ability = gBattlescriptCurrInstr[2];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE)
{
@@ -3201,8 +3162,8 @@ static void atk1F_jumpifsideaffecting(void)
else
side = GET_BATTLER_SIDE(gBattlerTarget);
- flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2);
- jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4);
+ flags = T2_READ_16(gBattlescriptCurrInstr + 2);
+ jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4);
if (gSideStatuses[side] & flags)
gBattlescriptCurrInstr = jumpPtr;
@@ -3245,7 +3206,7 @@ static void atk20_jumpifstat(void)
}
if (ret)
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5);
else
gBattlescriptCurrInstr += 9;
}
@@ -3256,8 +3217,8 @@ static void atk21_jumpifstatus3condition(void)
const u8 *jumpPtr;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
- jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7);
+ flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
if (gBattlescriptCurrInstr[6])
{
@@ -3279,9 +3240,9 @@ static void atk22_jumpiftype(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u8 type = gBattlescriptCurrInstr[2];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
- if (gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type)
+ if (IS_BATTLER_OF_TYPE(battlerId, type))
gBattlescriptCurrInstr = jumpPtr;
else
gBattlescriptCurrInstr += 7;
@@ -3629,14 +3590,14 @@ static void atk24(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (foundOpponent + foundPlayer > 1)
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
else
{
if (foundOpponent != 0 && foundPlayer != 0)
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -3970,20 +3931,20 @@ static void atk27_decrementmultihit(void)
if (--gMultiHitCounter == 0)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atk28_goto(void)
{
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atk29_jumpifbyte(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
+ const u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2);
u8 value = gBattlescriptCurrInstr[6];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
gBattlescriptCurrInstr += 11;
@@ -4019,9 +3980,9 @@ static void atk29_jumpifbyte(void)
static void atk2A_jumpifhalfword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
- u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 6);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8);
+ const u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 6);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8);
gBattlescriptCurrInstr += 12;
@@ -4057,9 +4018,9 @@ static void atk2A_jumpifhalfword(void)
static void atk2B_jumpifword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
- u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+ const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u32 value = T1_READ_32(gBattlescriptCurrInstr + 6);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
gBattlescriptCurrInstr += 14;
@@ -4094,10 +4055,10 @@ static void atk2B_jumpifword(void)
static void atk2C_jumpifarrayequal(void)
{
- const u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
u32 size = gBattlescriptCurrInstr[9];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
u8 i;
for (i = 0; i < size; i++)
@@ -4117,10 +4078,10 @@ static void atk2C_jumpifarrayequal(void)
static void atk2D_jumpifarraynotequal(void)
{
u8 equalBytes = 0;
- const u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
u32 size = gBattlescriptCurrInstr[9];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
u8 i;
for (i = 0; i < size; i++)
@@ -4140,7 +4101,7 @@ static void atk2D_jumpifarraynotequal(void)
static void atk2E_setbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte = gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
@@ -4148,22 +4109,22 @@ static void atk2E_setbyte(void)
static void atk2F_addbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte += gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void atk30_subbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte -= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void atk31_copyarray(void)
{
- u8* dest = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* src = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
s32 size = gBattlescriptCurrInstr[9];
s32 i;
@@ -4177,9 +4138,9 @@ static void atk31_copyarray(void)
static void atk32_copyarraywithindex(void)
{
- u8* dest = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* src = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
- const u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9);
+ u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ const u8* index = T2_READ_PTR(gBattlescriptCurrInstr + 9);
s32 size = gBattlescriptCurrInstr[13];
s32 i;
@@ -4193,15 +4154,15 @@ static void atk32_copyarraywithindex(void)
static void atk33_orbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte |= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void atk34_orhalfword(void)
{
- u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5);
+ u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
*memHword |= val;
gBattlescriptCurrInstr += 7;
@@ -4209,8 +4170,8 @@ static void atk34_orhalfword(void)
static void atk35_orword(void)
{
- u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5);
+ u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
*memWord |= val;
gBattlescriptCurrInstr += 9;
@@ -4218,15 +4179,15 @@ static void atk35_orword(void)
static void atk36_bicbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte &= ~(gBattlescriptCurrInstr[5]);
gBattlescriptCurrInstr += 6;
}
static void atk37_bichalfword(void)
{
- u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5);
+ u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
*memHword &= ~val;
gBattlescriptCurrInstr += 7;
@@ -4234,8 +4195,8 @@ static void atk37_bichalfword(void)
static void atk38_bicword(void)
{
- u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5);
+ u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
*memWord &= ~val;
gBattlescriptCurrInstr += 9;
@@ -4245,7 +4206,7 @@ static void atk39_pause(void)
{
if (gBattleControllerExecFlags == 0)
{
- u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 1);
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 1);
if (++gPauseCounterBattle >= value)
{
gPauseCounterBattle = 0;
@@ -4304,7 +4265,7 @@ static void atk3F_end3(void) // pops the main function stack
static void atk41_call(void)
{
BattleScriptPush(gBattlescriptCurrInstr + 5);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atk42_jumpiftype2(void)
@@ -4312,7 +4273,7 @@ static void atk42_jumpiftype2(void)
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
else
gBattlescriptCurrInstr += 7;
}
@@ -4320,7 +4281,7 @@ static void atk42_jumpiftype2(void)
static void atk43_jumpifabilitypresent(void)
{
if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0))
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -4335,7 +4296,7 @@ static void atk45_playanimation(void)
const u16* argumentPtr;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE
|| gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE
@@ -4377,8 +4338,8 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
const u8* animationIdPtr;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- animationIdPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
- argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
if (*animationIdPtr == B_ANIM_STATS_CHANGE
|| *animationIdPtr == B_ANIM_SNATCH_MOVE
@@ -4436,31 +4397,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 +4435,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 +4453,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 +4478,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 +4495,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 +4985,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));
@@ -5282,7 +4995,7 @@ static void atk4F_jumpifcantswitch(void)
&& ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
|| (gStatuses3[gActiveBattler] & STATUS3_ROOTED)))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
}
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
@@ -5294,21 +5007,21 @@ 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)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -5320,18 +5033,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,23 +5054,22 @@ 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)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -5365,59 +5077,62 @@ 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)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(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)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == 6)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -5442,7 +5157,7 @@ static void atk50_openpartyscreen(void)
battlerId = 0;
flags = 0;
- jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
if (gBattlescriptCurrInstr[1] == 5)
{
@@ -5802,8 +5517,7 @@ static void atk52_switchineffects(void)
if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED)
&& (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES)
- && gBattleMons[gActiveBattler].type1 != TYPE_FLYING
- && gBattleMons[gActiveBattler].type2 != TYPE_FLYING
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
&& gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
{
u8 spikesDmg;
@@ -5883,7 +5597,7 @@ static void atk53_trainerslidein(void)
static void atk54_playse(void)
{
gActiveBattler = gBattlerAttacker;
- BtlController_EmitPlaySE(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ BtlController_EmitPlaySE(0, T2_READ_16(gBattlescriptCurrInstr + 1));
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 3;
@@ -5892,7 +5606,7 @@ static void atk54_playse(void)
static void atk55_fanfare(void)
{
gActiveBattler = gBattlerAttacker;
- BtlController_EmitPlayFanfareOrBGM(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1), FALSE);
+ BtlController_EmitPlayFanfareOrBGM(0, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 3;
@@ -5927,8 +5641,8 @@ static void atk58_returntoball(void)
static void atk59_handlelearnnewmove(void)
{
- const u8 *jumpPtr1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8 *jumpPtr2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
+ const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5);
u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]);
while (ret == 0xFFFE)
@@ -6045,7 +5759,7 @@ static void atk5A_yesnoboxlearnmove(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId)
@@ -6115,7 +5829,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
PlaySE(SE_SELECT);
if (gBattleCommunication[1] != 0)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
@@ -6124,7 +5838,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
}
break;
@@ -6349,7 +6063,7 @@ static void atk65_status2animation(void)
if (gBattleControllerExecFlags == 0)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- wantedToAnimate = BSScriptRead32(gBattlescriptCurrInstr + 2);
+ wantedToAnimate = T1_READ_32(gBattlescriptCurrInstr + 2);
if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
&& gDisableStructs[gActiveBattler].substituteHP == 0
&& !(gHitMarker & HITMARKER_NO_ANIMATIONS))
@@ -6368,7 +6082,7 @@ static void atk66_chosenstatusanimation(void)
if (gBattleControllerExecFlags == 0)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- wantedStatus = BSScriptRead32(gBattlescriptCurrInstr + 3);
+ wantedStatus = T1_READ_32(gBattlescriptCurrInstr + 3);
if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
&& gDisableStructs[gActiveBattler].substituteHP == 0
&& !(gHitMarker & HITMARKER_NO_ANIMATIONS))
@@ -6819,7 +6533,7 @@ static void atk71_buffermovetolearn(void)
static void atk72_jumpifplayerran(void)
{
if (TryRunFromBattle(gBattlerFainted))
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -7148,7 +6862,7 @@ static void atk79_setatkhptozero(void)
static void atk7A_jumpifnexttargetvalid(void)
{
- const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
@@ -7173,7 +6887,7 @@ static void atk7A_jumpifnexttargetvalid(void)
static void atk7B_tryhealhalfhealth(void)
{
- const u8* failPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gBattlescriptCurrInstr[5] == BS_ATTACKER)
gBattlerTarget = gBattlerAttacker;
@@ -7283,7 +6997,7 @@ static void atk7F_setseeded(void)
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
}
- else if (gBattleMons[gBattlerTarget].type1 == TYPE_GRASS || gBattleMons[gBattlerTarget].type2 == TYPE_GRASS)
+ else if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
@@ -7322,7 +7036,7 @@ static void atk80_manipulatedamage(void)
static void atk81_trysetrest(void)
{
- const u8 *failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
gActiveBattler = gBattlerTarget = gBattlerAttacker;
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP * (-1);
@@ -7346,7 +7060,7 @@ static void atk81_trysetrest(void)
static void atk82_jumpifnotfirstturn(void)
{
- const u8* failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].isFirstTurn)
gBattlescriptCurrInstr += 5;
@@ -7388,7 +7102,7 @@ bool8 UproarWakeUpCheck(u8 battlerId)
static void atk84_jumpifcantmakeasleep(void)
{
- const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (UproarWakeUpCheck(gBattlerTarget))
{
@@ -7428,7 +7142,7 @@ static void atk85_stockpile(void)
static void atk86_stockpiletobasedamage(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
{
gBattlescriptCurrInstr = jumpPtr;
@@ -7454,7 +7168,7 @@ static void atk86_stockpiletobasedamage(void)
static void atk87_stockpiletohpheal(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
{
@@ -7664,7 +7378,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
static void atk89_statbuffchange(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_CHANGE_WORKED)
gBattlescriptCurrInstr += 6;
}
@@ -7736,7 +7450,7 @@ static bool8 TryDoForceSwitchOut(void)
u16 random = Random() & 0xFF;
if ((u32)((random * (gBattleMons[gBattlerAttacker].level + gBattleMons[gBattlerTarget].level) >> 8) + 1) <= (gBattleMons[gBattlerTarget].level / 4))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
return FALSE;
}
*(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
@@ -7866,7 +7580,7 @@ static void atk8F_forcerandomswitch(void)
if (validMons <= minNeeded)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -7927,7 +7641,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
if (moveType == TYPE_MYSTERY)
{
- if (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST)
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
moveType = TYPE_GHOST;
else
moveType = TYPE_NORMAL;
@@ -7941,7 +7655,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
if (moveChecked == validMoves)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -7954,7 +7668,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
if (moveType == TYPE_MYSTERY)
{
- if (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST)
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
moveType = TYPE_GHOST;
else
moveType = TYPE_NORMAL;
@@ -7962,10 +7676,8 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
}
while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2);
- gBattleMons[gBattlerAttacker].type1 = moveType;
- gBattleMons[gBattlerAttacker].type2 = moveType;
-
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType)
+ SET_BATTLER_TYPE(gBattlerAttacker, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
gBattlescriptCurrInstr += 5;
}
@@ -8092,7 +7804,7 @@ static void atk93_tryKO(void)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
}
@@ -8149,8 +7861,7 @@ static void atk96_weatherdamage(void)
}
if (gBattleWeather & WEATHER_HAIL)
{
- if (gBattleMons[gBattlerAttacker].type1 != TYPE_ICE
- && gBattleMons[gBattlerAttacker].type2 != TYPE_ICE
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
&& !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
&& !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
{
@@ -8210,7 +7921,7 @@ static void atk97_tryinfatuating(void)
|| GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS
|| GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -8374,7 +8085,7 @@ static void atk9D_mimicattackcopy(void)
|| gLastMoves[gBattlerTarget] == 0
|| gLastMoves[gBattlerTarget] == 0xFFFF)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -8402,7 +8113,7 @@ static void atk9D_mimicattackcopy(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
}
@@ -8477,7 +8188,7 @@ static void atkA1_counterdamagecalculator(void)
else
{
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8500,7 +8211,7 @@ static void atkA2_mirrorcoatdamagecalculator(void) // a copy of atkA1 with the p
else
{
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8525,7 +8236,7 @@ static void atkA3_disablelastusedattack(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8557,7 +8268,7 @@ static void atkA4_trysetencore(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8581,7 +8292,7 @@ static void atkA5_painsplitdmgcalc(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8590,12 +8301,12 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
if (gLastLandedMoves[gBattlerAttacker] == 0
|| gLastLandedMoves[gBattlerAttacker] == 0xFFFF)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker])
&& gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -8609,13 +8320,10 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBattlerAttacker]
&& TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE
- && gBattleMons[gBattlerAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i)
- && gBattleMons[gBattlerAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i))
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
{
- gBattleMons[gBattlerAttacker].type1 = TYPE_EFFECT_DEF_TYPE(i);
- gBattleMons[gBattlerAttacker].type2 = TYPE_EFFECT_DEF_TYPE(i);
-
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i))
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i));
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i));
gBattlescriptCurrInstr += 5;
return;
@@ -8632,12 +8340,9 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
default:
if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBattlerAttacker]
&& TYPE_EFFECT_MULTIPLIER(j) <= 5
- && gBattleMons[gBattlerAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i)
- && gBattleMons[gBattlerAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i))
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
{
- gBattleMons[gBattlerAttacker].type1 = TYPE_EFFECT_DEF_TYPE(rands);
- gBattleMons[gBattlerAttacker].type2 = TYPE_EFFECT_DEF_TYPE(rands);
-
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(rands));
PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(rands))
gBattlescriptCurrInstr += 5;
@@ -8647,7 +8352,7 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
}
}
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8681,7 +8386,7 @@ static void atkA8_copymovepermanently(void) // sketch
if (i != 4)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else // sketch worked
{
@@ -8708,7 +8413,7 @@ static void atkA8_copymovepermanently(void) // sketch
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8789,7 +8494,7 @@ static void atkA9_trychoosesleeptalkmove(void)
gCurrMovePos = movePosition;
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gBattlerTarget = GetMoveTarget(gRandomMove, 0);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8874,12 +8579,12 @@ static void atkAD_tryspiteppreduce(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8983,7 +8688,7 @@ static void atkAF_cursetarget(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9003,7 +8708,7 @@ static void atkB0_trysetspikes(void)
if (gSideTimers[targetSide].spikesAmount == 3)
{
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9042,7 +8747,7 @@ static void atkB2_trysetperishsong(void)
PressurePPLoseOnUsingPerishSong(gBattlerAttacker);
if (notAffectedCount == gBattlersCount)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -9086,7 +8791,7 @@ static void atkB4_jumpifconfusedandstatmaxed(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
&& gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 0xC)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -9264,7 +8969,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9304,7 +9009,7 @@ static void atkBC_maxattackhalvehp(void) // belly drum
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9384,185 +9089,39 @@ static void atkC0_recoverbasedonsunlight(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
-#ifdef NONMATCHING
static void atkC1_hiddenpowercalc(void)
{
- u32 powerBits = 0;
- u32 typeBits = 0;
+ u8 powerBits;
+ u8 typeBits;
- powerBits |= ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1);
- powerBits |= ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0);
- powerBits |= ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1);
- powerBits |= ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2);
- powerBits |= ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3);
- powerBits |= ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
+ powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1)
+ | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0)
+ | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1)
+ | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2)
+ | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3)
+ | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
- typeBits |= ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0);
- typeBits |= ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1);
- typeBits |= ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2);
- typeBits |= ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3);
- typeBits |= ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4);
- typeBits |= ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5);
+ typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0)
+ | ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1)
+ | ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2)
+ | ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3)
+ | ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4)
+ | ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5);
gDynamicBasePower = (40 * powerBits) / 63 + 30;
gBattleStruct->dynamicMoveType = (15 * typeBits) / 63 + 1;
- if (gBattleStruct->dynamicMoveType > 8)
+ if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY)
gBattleStruct->dynamicMoveType++;
gBattleStruct->dynamicMoveType |= 0xC0;
gBattlescriptCurrInstr++;
}
-#else
-ASM_DIRECT
-static void atkC1_hiddenpowercalc(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- ldr r2, =gBattleMons\n\
- ldr r0, =gBattlerAttacker\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- adds r4, r1, 0\n\
- muls r4, r0\n\
- adds r4, r2\n\
- ldrb r0, [r4, 0x14]\n\
- mov r10, r0\n\
- mov r7, r10\n\
- lsls r7, 27\n\
- adds r0, r7, 0\n\
- lsrs r0, 27\n\
- mov r10, r0\n\
- movs r1, 0x2\n\
- mov r2, r10\n\
- ands r2, r1\n\
- asrs r2, 1\n\
- ldrh r7, [r4, 0x14]\n\
- mov r9, r7\n\
- mov r0, r9\n\
- lsls r0, 22\n\
- mov r9, r0\n\
- lsrs r3, r0, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- orrs r2, r0\n\
- ldrb r7, [r4, 0x15]\n\
- mov r8, r7\n\
- mov r0, r8\n\
- lsls r0, 25\n\
- mov r8, r0\n\
- lsrs r3, r0, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 1\n\
- orrs r2, r0\n\
- ldr r6, [r4, 0x14]\n\
- lsls r6, 12\n\
- lsrs r3, r6, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 2\n\
- orrs r2, r0\n\
- ldrh r5, [r4, 0x16]\n\
- lsls r5, 23\n\
- lsrs r3, r5, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 3\n\
- orrs r2, r0\n\
- ldrb r3, [r4, 0x17]\n\
- lsls r3, 26\n\
- lsrs r0, r3, 27\n\
- ands r1, r0\n\
- lsls r1, 4\n\
- orrs r2, r1\n\
- movs r1, 0x1\n\
- adds r4, r1, 0\n\
- mov r7, r10\n\
- ands r4, r7\n\
- mov r0, r9\n\
- lsrs r0, 27\n\
- mov r9, r0\n\
- adds r0, r1, 0\n\
- mov r7, r9\n\
- ands r0, r7\n\
- lsls r0, 1\n\
- orrs r4, r0\n\
- mov r0, r8\n\
- lsrs r0, 27\n\
- mov r8, r0\n\
- adds r0, r1, 0\n\
- mov r7, r8\n\
- ands r0, r7\n\
- lsls r0, 2\n\
- orrs r4, r0\n\
- lsrs r6, 27\n\
- adds r0, r1, 0\n\
- ands r0, r6\n\
- lsls r0, 3\n\
- orrs r4, r0\n\
- lsrs r5, 27\n\
- adds r0, r1, 0\n\
- ands r0, r5\n\
- lsls r0, 4\n\
- orrs r4, r0\n\
- lsrs r3, 27\n\
- ands r1, r3\n\
- lsls r1, 5\n\
- orrs r4, r1\n\
- ldr r5, =gDynamicBasePower\n\
- lsls r0, r2, 2\n\
- adds r0, r2\n\
- lsls r0, 3\n\
- movs r1, 0x3F\n\
- bl __divsi3\n\
- adds r0, 0x1E\n\
- strh r0, [r5]\n\
- ldr r6, =gBattleStruct\n\
- ldr r5, [r6]\n\
- lsls r0, r4, 4\n\
- subs r0, r4\n\
- movs r1, 0x3F\n\
- bl __divsi3\n\
- adds r0, 0x1\n\
- strb r0, [r5, 0x13]\n\
- ldr r1, [r6]\n\
- ldrb r0, [r1, 0x13]\n\
- cmp r0, 0x8\n\
- bls _080544F0\n\
- adds r0, 0x1\n\
- strb r0, [r1, 0x13]\n\
-_080544F0:\n\
- ldr r2, [r6]\n\
- ldrb r0, [r2, 0x13]\n\
- movs r1, 0xC0\n\
- orrs r0, r1\n\
- strb r0, [r2, 0x13]\n\
- ldr r1, =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x1\n\
- str r0, [r1]\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided");
-}
-#endif // NONMATCHING
-
static void atkC2_selectfirstvalidtarget(void)
{
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
@@ -9579,7 +9138,7 @@ static void atkC3_trysetfutureattack(void)
{
if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9614,7 +9173,7 @@ static void atkC4_trydobeatup(void)
if (gBattleMons[gBattlerTarget].hp == 0)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9644,9 +9203,9 @@ static void atkC4_trydobeatup(void)
gBattleCommunication[0]++;
}
else if (beforeLoop != 0)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5);
}
}
@@ -9719,7 +9278,7 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
&& gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0
&& gBattleCommunication[6] != 1)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9767,7 +9326,7 @@ static void atkCD_cureifburnedparalysedorpoisoned(void) // refresh
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9775,7 +9334,7 @@ static void atkCE_settorment(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9789,7 +9348,7 @@ static void atkCF_jumpifnodamage(void)
if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atkD0_settaunt(void)
@@ -9802,7 +9361,7 @@ static void atkD0_settaunt(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9820,7 +9379,7 @@ static void atkD1_trysethelpinghand(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9835,7 +9394,7 @@ static void atkD2_tryswapitems(void) // trick
| BATTLE_TYPE_SECRET_BASE
| BATTLE_TYPE_x2000000))))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9851,7 +9410,7 @@ static void atkD2_tryswapitems(void) // trick
&& (gWishFutureKnock.knockedOffPokes[sideAttacker] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]
|| gWishFutureKnock.knockedOffPokes[sideTarget] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
// can't swap if two pokemon don't have an item
// or if either of them is an enigma berry or a mail
@@ -9861,7 +9420,7 @@ static void atkD2_tryswapitems(void) // trick
|| IS_ITEM_MAIL(gBattleMons[gBattlerAttacker].item)
|| IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
// check if ability prevents swapping
else if (gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD)
@@ -9922,7 +9481,7 @@ static void atkD3_trycopyability(void) // role play
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9939,7 +9498,7 @@ static void atkD4_trywish(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
}
break;
case 1: // heal effect
@@ -9951,7 +9510,7 @@ static void atkD4_trywish(void)
gBattleMoveDamage *= -1;
if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
@@ -9963,7 +9522,7 @@ static void atkD5_trysetroots(void) // ingrain
{
if (gStatuses3[gBattlerAttacker] & STATUS3_ROOTED)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9990,7 +9549,7 @@ static void atkD7_setyawn(void)
if (gStatuses3[gBattlerTarget] & STATUS3_YAWN
|| gBattleMons[gBattlerTarget].status1 & STATUS1_ANY)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10003,7 +9562,7 @@ static void atkD8_setdamagetohealthdifference(void)
{
if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10032,7 +9591,7 @@ static void atkDA_tryswapabilities(void) // skill swap
|| gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD
|| gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10048,7 +9607,7 @@ static void atkDB_tryimprision(void)
{
if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10082,7 +9641,7 @@ static void atkDB_tryimprision(void)
}
}
if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10090,7 +9649,7 @@ static void atkDC_trysetgrudge(void)
{
if (gStatuses3[gBattlerAttacker] & STATUS3_GRUDGE)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10165,7 +9724,7 @@ static void atkDE_asistattackselect(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10175,7 +9734,7 @@ static void atkDF_trysetmagiccoat(void)
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10189,7 +9748,7 @@ static void atkE0_trysetsnatch(void) // snatch
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10216,7 +9775,7 @@ static void atkE1_trygetintimidatetarget(void)
}
if (gBattlerTarget >= gBattlersCount)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -10242,7 +9801,7 @@ static void atkE3_jumpifhasnohp(void)
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattleMons[gActiveBattler].hp == 0)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -10410,7 +9969,7 @@ static void atkE8_settypebasedhalvers(void) // water and mud sport
if (worked)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atkE9_setweatherballtype(void)
@@ -10453,25 +10012,22 @@ static void atkEA_tryrecycleitem(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
static void atkEB_settypetoterrain(void)
{
- if (gBattleMons[gBattlerAttacker].type1 != sTerrainToType[gBattleTerrain]
- && gBattleMons[gBattlerAttacker].type2 != sTerrainToType[gBattleTerrain])
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
{
- gBattleMons[gBattlerAttacker].type1 = sTerrainToType[gBattleTerrain];
- gBattleMons[gBattlerAttacker].type2 = sTerrainToType[gBattleTerrain];
-
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain])
+ SET_BATTLER_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]);
gBattlescriptCurrInstr += 5;
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10493,7 +10049,7 @@ static void atkEC_pursuitrelated(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10569,10 +10125,7 @@ static void atkEF_handleballthrow(void)
switch (gLastUsedItem)
{
case ITEM_NET_BALL:
- if (gBattleMons[gBattlerTarget].type1 == TYPE_WATER
- || gBattleMons[gBattlerTarget].type2 == TYPE_WATER
- || gBattleMons[gBattlerTarget].type1 == TYPE_BUG
- || gBattleMons[gBattlerTarget].type2 == TYPE_BUG)
+ if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG))
ballMultiplier = 30;
else
ballMultiplier = 10;
@@ -10719,7 +10272,7 @@ static void atkF1_trysetcaughtmondexflags(void)
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10911,14 +10464,14 @@ static void atkF3_trygivecaughtmonnick(void)
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active )
{
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
break;
case 4:
if (CalculatePlayerPartyCount() == 6)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
break;
}
}
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 5b2bf4d98..97e8f7041 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -31,6 +31,8 @@
#include "string_util.h"
#include "overworld.h"
#include "field_weather.h"
+#include "gym_leader_rematch.h"
+#include "field_map_obj_helpers.h"
enum
{
@@ -55,19 +57,12 @@ extern bool8 InBattlePyramid(void);
extern bool8 InBattlePike(void);
extern bool32 InTrainerHill(void);
extern bool32 FieldPoisonEffectIsRunning(void);
-extern void overworld_free_bg_tilemaps(void);
extern void prev_quest_postbuffer_cursor_backup_reset(void);
extern void ResetPoisonStepCounter(void);
extern void sub_81BE72C(void);
-extern void FreezeMapObjects(void);
extern void sub_808BCF4(void);
extern void sub_80EECC8(void);
-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);
extern bool8 GetBattlePyramidTrainerFlag(u8 mapObjId);
@@ -252,84 +247,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 +940,13 @@ static void CB2_EndFirstBattle(void)
static void sub_80B1218(void)
{
if (GetGameStat(GAME_STAT_WILD_BATTLES) % 60 == 0)
- sub_81DA57C();
+ UpdateGymLeaderRematch();
}
static void sub_80B1234(void)
{
if (GetGameStat(GAME_STAT_TRAINER_BATTLES) % 20 == 0)
- sub_81DA57C();
+ UpdateGymLeaderRematch();
}
// why not just use the macros? maybe its because they didnt want to uncast const every time?
diff --git a/src/battle_tv.c b/src/battle_tv.c
new file mode 100644
index 000000000..777b4846f
--- /dev/null
+++ b/src/battle_tv.c
@@ -0,0 +1,1576 @@
+#include "global.h"
+#include "pokemon.h"
+#include "battle.h"
+#include "battle_tv.h"
+#include "constants/battle_string_ids.h"
+#include "constants/battle_anim.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "battle_message.h"
+#include "tv.h"
+
+extern struct StringInfoBattle *gStringInfo;
+
+// this file's functions
+static bool8 sub_817E0B8(u16 stringId);
+static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3);
+static void TrySetBattleSeminarShow(void);
+static void AddPointsOnFainting(bool8 targetFainted);
+static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot);
+static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride);
+
+// const rom data
+static const u16 sVariableDmgMoves[] =
+{
+ MOVE_COUNTER, MOVE_FISSURE, MOVE_BIDE, MOVE_MIRROR_COAT,
+ MOVE_HORN_DRILL, MOVE_FLAIL, MOVE_REVERSAL, MOVE_HIDDEN_POWER,
+ MOVE_SHEER_COLD, MOVE_FOCUS_PUNCH, MOVE_ERUPTION,
+ MOVE_WATER_SPOUT, MOVE_DREAM_EATER, MOVE_WEATHER_BALL,
+ MOVE_SNORE, MOVE_PAIN_SPLIT, MOVE_GUILLOTINE,
+ MOVE_FRUSTRATION, MOVE_RETURN, MOVE_ENDEAVOR,
+ MOVE_PRESENT, MOVE_REVENGE, 0xFFFF,
+ // those are handled by the function itself
+ MOVE_MAGNITUDE, MOVE_PSYWAVE, 0xFFFF
+};
+
+static const u16 sUnknown_0860A4E0[] =
+{
+ 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, 0x0005, 0x0004, 0x0005, 0x0001, 0x0003, 0x0001,
+ 0x0003, 0x0005, 0x0001, 0x0007, 0x0001, 0x0007, 0x0007, 0x0001, 0x0005, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001,
+ 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0007, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0004,
+ 0x0005, 0x0002, 0x0004, 0x0001, 0x0004, 0x0001, 0x0007, 0x0002, 0x0001, 0x0005, 0x0007, 0x0003, 0x0003, 0x0004, 0x0003, 0x0003,
+ 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0005, 0x0001, 0x0001, 0x0004, 0x0005, 0x0003, 0x0001, 0x0002, 0x0001, 0x0005,
+ 0x0004, 0x0003, 0x0006, 0x0004, 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001, 0x0001, 0x0007,
+ 0x0002, 0x0002, 0x0001, 0x0001, 0x0004, 0x0004, 0x0004, 0x0001, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0007, 0x0007,
+ 0x0006, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0001, 0x0001, 0x0004, 0x0004,
+ 0x0003, 0x0003, 0x0003, 0x0001, 0x0004, 0x0007, 0x0007, 0x0005, 0x0007, 0x0001, 0x0007, 0x0001, 0x0005, 0x0000, 0x0004, 0x0004,
+ 0x0004, 0x0004, 0x0004, 0x0002, 0x0002, 0x0006, 0x0003, 0x0006, 0x0004, 0x0004, 0x0002, 0x0005, 0x0002, 0x0001, 0x0001, 0x0006,
+ 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003
+};
+static const u16 sUnknown_0860A68C[] =
+{
+ 0x0004, 0xfffd, 0xfffa
+};
+static const u16 sUnknown_0860A692[] =
+{
+ 0x0004, 0x0004, 0x0006, 0x0006, 0x0007, 0x0006, 0x0002
+};
+static const u16 sUnknown_0860A6A0[] =
+{
+ 0x0091, 0x0003, 0x00fa, 0x0003, 0x00be, 0x0003, 0x0080, 0x0003, 0x006e, 0x0003, 0x0098, 0x0003, 0x0143, 0x0003, 0x0123, 0x0003,
+ 0x007f, 0x0003, 0x014a, 0x0003, 0x0039, 0x0003, 0x0134, 0x0003, 0x0038, 0x0003, 0x003d, 0x0003, 0x015a, 0x0000, 0x0037, 0x0003,
+ 0x0160, 0x0003, 0x0137, 0x0003, 0x0057, 0x0003, 0x004c, 0xfffc, 0x013b, 0xfffc, 0x00ac, 0xfffc, 0x0035, 0xfffc, 0x00dd, 0xfffc,
+ 0x007e, 0xfffc, 0x0101, 0xfffc, 0x0034, 0xfffc, 0x0133, 0xfffc, 0x012b, 0xfffc, 0x011c, 0xfffc, 0x0053, 0xfffc, 0x0007, 0xfffc,
+ 0x004c, 0xfffc, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A728[] =
+{
+ 0x013b, 0x0003, 0x00ac, 0x0003, 0x0035, 0x0003, 0x00dd, 0x0003, 0x007e, 0x0003, 0x0101, 0x0003, 0x0034, 0x0003, 0x0133, 0x0003,
+ 0x012b, 0x0003, 0x011c, 0x0003, 0x0053, 0x0003, 0x0007, 0x0003, 0x004c, 0x0005, 0x00eb, 0x0003, 0x00ea, 0x0003, 0x00ec, 0x0003,
+ 0x0137, 0x0003, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A770[] =
+{
+ 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A77C[] =
+{
+ 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A788[] =
+{
+ 0x0055, 0x0003, 0x0009, 0x0003, 0x00d1, 0x0003, 0x0054, 0x0003, 0x00c0, 0x0003, 0x015f, 0x0003, 0x0056, 0x0000, 0x0057, 0x0003,
+ 0x0158, 0x0003, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A7B0[] =
+{
+ 0x0005, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003
+};
+static const u16 sUnknown_0860A7BE[] =
+{
+ 0x0005, 0x0005, 0x0005, 0x0005, 0x0005
+};
+static const u16 sUnknown_0860A7C8[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7CA[] =
+{
+ 0x0005
+};
+static const u16 sUnknown_0860A7CC[] =
+{
+ 0x0005
+};
+static const u16 sUnknown_0860A7CE[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D0[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D2[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7D4[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D6[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7D8[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7DA[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7DC[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7DE[] =
+{
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
+};
+static const u16 sUnknown_0860A7EC[] =
+{
+ 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+};
+static const u16 sUnknown_0860A7FA[] =
+{
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
+};
+static const u16 sUnknown_0860A808[] =
+{
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
+};
+static const u16 sUnknown_0860A816[] =
+{
+ 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+};
+static const u16 sUnknown_0860A824[] =
+{
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe
+};
+
+static const u16 *const sPointsArray[] =
+{
+ sUnknown_0860A4E0,
+ sUnknown_0860A68C,
+ sUnknown_0860A692,
+ sUnknown_0860A6A0,
+ sUnknown_0860A728,
+ sUnknown_0860A770,
+ sUnknown_0860A77C,
+ sUnknown_0860A788,
+ sUnknown_0860A7B0,
+ sUnknown_0860A7BE,
+ sUnknown_0860A7C8,
+ sUnknown_0860A7CA,
+ sUnknown_0860A7CC,
+ sUnknown_0860A7CE,
+ sUnknown_0860A7D0,
+ sUnknown_0860A7D2,
+ sUnknown_0860A7D4,
+ sUnknown_0860A7D6,
+ sUnknown_0860A7D8,
+ sUnknown_0860A7DA,
+ sUnknown_0860A7DA,
+ sUnknown_0860A7DC,
+ sUnknown_0860A7DE,
+ sUnknown_0860A7EC,
+ sUnknown_0860A7FA,
+ sUnknown_0860A808,
+ sUnknown_0860A816,
+ sUnknown_0860A824
+};
+
+static const u16 sUnknown_0860A8A4[] =
+{
+ STRINGID_PKMNPERISHCOUNTFELL, STRINGID_PKMNWISHCAMETRUE, STRINGID_PKMNLOSTPPGRUDGE,
+ STRINGID_PKMNTOOKFOE, STRINGID_PKMNABSORBEDNUTRIENTS, STRINGID_PKMNANCHOREDITSELF,
+ STRINGID_PKMNAFFLICTEDBYCURSE, STRINGID_PKMNSAPPEDBYLEECHSEED, STRINGID_PKMNLOCKEDINNIGHTMARE,
+ STRINGID_PKMNHURTBY, STRINGID_PKMNHURTBYBURN, STRINGID_PKMNHURTBYPOISON,
+ STRINGID_PKMNHURTBYSPIKES, STRINGID_ATTACKERFAINTED, STRINGID_TARGETFAINTED,
+ STRINGID_PKMNHITWITHRECOIL, STRINGID_PKMNCRASHED, 0xFFFF
+};
+
+// code
+void BattleTv_SetDataBasedOnString(u16 stringId)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide, defSide, effSide, scriptingSide;
+ struct Pokemon *atkMon, *defMon;
+ u8 moveSlot;
+ u32 atkFlank, defFlank, effFlank;
+ u8 *perishCount;
+ u16 *statStringId, *finishedMoveId;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && stringId != STRINGID_ITDOESNTAFFECT && stringId != STRINGID_NOTVERYEFFECTIVE)
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ defSide = GetBattlerSide(gBattlerTarget);
+ effSide = GetBattlerSide(gEffectBattler);
+ scriptingSide = GetBattlerSide(gStringInfo->scrActive);
+
+ if (atkSide == B_SIDE_PLAYER)
+ atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ else
+ atkMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+
+ if (defSide == B_SIDE_PLAYER)
+ defMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ else
+ defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+
+ moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gStringInfo->currentMove);
+
+ if (moveSlot >= 4 && sub_817E0B8(stringId) && stringId > BATTLESTRINGS_ID_ADDER)
+ {
+ tvPtr->side[atkSide].faintCause = 15;
+ return;
+ }
+
+ perishCount = (u8 *)(gBattleTextBuff1 + 4);
+ statStringId = (u16 *)(gBattleTextBuff2 + 2);
+ finishedMoveId = (u16 *)(gBattleTextBuff1 + 2);
+
+ atkFlank = GetBattlerPosition(gBattlerAttacker) / 2;
+ defFlank = GetBattlerPosition(gBattlerTarget) / 2;
+ effFlank = GetBattlerPosition(gEffectBattler) / 2;
+
+ switch (stringId)
+ {
+ case STRINGID_ITDOESNTAFFECT:
+ AddMovePoints(1, moveSlot, 2, 0);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ TrySetBattleSeminarShow();
+ break;
+ case STRINGID_NOTVERYEFFECTIVE:
+ AddMovePoints(1, moveSlot, 1, 0);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && GetMonData(defMon, MON_DATA_HP, NULL) != 0)
+ TrySetBattleSeminarShow();
+ break;
+ case STRINGID_SUPEREFFECTIVE:
+ AddMovePoints(1, moveSlot, 0, 0);
+ break;
+ case STRINGID_PKMNFORESAWATTACK:
+ tvPtr->side[atkSide].futureSightMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].futureSightMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNCHOSEXASDESTINY:
+ tvPtr->side[atkSide].doomDesireMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].doomDesireMoveSlot = moveSlot;
+ break;
+ case STRINGID_FAINTINTHREE:
+ tvPtr->side[atkSide].perishSongMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].perishSongMoveSlot = moveSlot;
+ tvPtr->side[atkSide].perishSong = 1;
+ break;
+ case STRINGID_PKMNPERISHCOUNTFELL:
+ if (*perishCount == 0)
+ tvPtr->side[atkSide].faintCause = 10;
+ break;
+ case STRINGID_PKMNWISHCAMETRUE:
+ if (tvPtr->side[defSide].wishMonId != 0)
+ {
+ AddMovePoints(2, 3, defSide,
+ (tvPtr->side[defSide].wishMonId - 1) * 4 + tvPtr->side[defSide].wishMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNWANTSGRUDGE:
+ tvPtr->side[atkSide].grudgeMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].grudgeMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNLOSTPPGRUDGE:
+ if (tvPtr->side[defSide].grudgeMonId != 0)
+ {
+ AddMovePoints(2, 4, defSide,
+ (tvPtr->side[defSide].grudgeMonId - 1) * 4 + tvPtr->side[defSide].grudgeMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNTRYINGTOTAKEFOE:
+ tvPtr->side[atkSide].destinyBondMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].destinyBondMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNTOOKFOE:
+ if (tvPtr->side[defSide].destinyBondMonId != 0)
+ tvPtr->side[atkSide].faintCause = 11;
+ break;
+ case STRINGID_PKMNPLANTEDROOTS:
+ tvPtr->pos[atkSide][atkFlank].ingrainMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].ingrainMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNABSORBEDNUTRIENTS:
+ if (tvPtr->pos[atkSide][atkFlank].ingrainMonId != 0)
+ {
+ AddMovePoints(2, 6, atkSide,
+ (tvPtr->pos[atkSide][atkFlank].ingrainMonId - 1) * 4 + tvPtr->pos[atkSide][atkFlank].ingrainMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNANCHOREDITSELF:
+ if (tvPtr->pos[defSide][defFlank].ingrainMonId != 0)
+ {
+ AddMovePoints(2, 6, defSide,
+ (tvPtr->pos[defSide][defFlank].ingrainMonId - 1) * 4 + tvPtr->pos[defSide][defFlank].ingrainMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNTRANSFORMEDINTO:
+ gBattleStruct->anyMonHasTransformed = TRUE;
+ break;
+ case STRINGID_CRITICALHIT:
+ AddMovePoints(0x12, moveSlot, 0, 0);
+ break;
+ case STRINGID_PKMNSSTATCHANGED:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (*statStringId == STRINGID_STATSHARPLY)
+ AddMovePoints(0x17, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x16, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ break;
+ case STRINGID_PKMNSSTATCHANGED2:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (gBattlerAttacker == gBattlerTarget)
+ {
+ if (*statStringId == STRINGID_STATSHARPLY)
+ AddMovePoints(0x17, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x16, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ else
+ {
+ AddMovePoints(0x1B, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ }
+ break;
+ case STRINGID_PKMNSSTATCHANGED3:
+ if (gBattleTextBuff1[2] != 0)
+ AddMovePoints(0x18, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ break;
+ case STRINGID_PKMNSSTATCHANGED4:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (*statStringId == STRINGID_STATHARSHLY)
+ AddMovePoints(0x1A, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x19, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ break;
+ case STRINGID_PKMNLAIDCURSE:
+ tvPtr->pos[defSide][defFlank].curseMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].curseMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNAFFLICTEDBYCURSE:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL)
+ && tvPtr->pos[atkSide][atkFlank].curseMonId != 0)
+ {
+ AddMovePoints(8, 0, tvPtr->pos[atkSide][atkFlank].curseMonId - 1, tvPtr->pos[atkSide][atkFlank].curseMoveSlot);
+ tvPtr->side[atkSide].faintCause = 1;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNSEEDED:
+ tvPtr->pos[defSide][defFlank].leechSeedMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].leechSeedMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNSAPPEDBYLEECHSEED:
+ if (tvPtr->pos[atkSide][atkFlank].leechSeedMonId != 0)
+ {
+ AddMovePoints(8, 1, tvPtr->pos[atkSide][atkFlank].leechSeedMonId - 1, tvPtr->pos[atkSide][atkFlank].leechSeedMoveSlot);
+ tvPtr->side[atkSide].faintCause = 2;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNFELLINTONIGHTMARE:
+ tvPtr->pos[defSide][defFlank].nightmareMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].nightmareMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNLOCKEDINNIGHTMARE:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0
+ && tvPtr->pos[atkSide][atkFlank].nightmareMonId != 0)
+ {
+ AddMovePoints(8, 5, tvPtr->pos[atkSide][atkFlank].nightmareMonId - 1, tvPtr->pos[atkSide][atkFlank].nightmareMoveSlot);
+ tvPtr->side[atkSide].faintCause = 5;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNSQUEEZEDBYBIND:
+ case STRINGID_PKMNTRAPPEDINVORTEX:
+ case STRINGID_PKMNWRAPPEDBY:
+ case STRINGID_PKMNCLAMPED:
+ case STRINGID_PKMNTRAPPEDBYSANDTOMB:
+ tvPtr->pos[defSide][defFlank].wrapMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].wrapMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBY:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0
+ && tvPtr->pos[atkSide][atkFlank].wrapMonId != 0)
+ {
+ AddMovePoints(8, 6, tvPtr->pos[atkSide][atkFlank].wrapMonId - 1, tvPtr->pos[atkSide][atkFlank].wrapMoveSlot);
+ tvPtr->side[atkSide].faintCause = 6;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNWASBURNED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].brnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].brnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYBURN:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0)
+ {
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMonId != 0)
+ AddMovePoints(8, 4, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMoveSlot);
+ tvPtr->side[atkSide].faintCause = 4;
+ tvPtr->side[atkSide].faintCauseMonId = gBattlerPartyIndexes[gBattlerAttacker];
+ }
+ break;
+ case STRINGID_PKMNWASPOISONED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].psnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].psnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNBADLYPOISONED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].badPsnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].badPsnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYPOISON:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0)
+ {
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMonId != 0)
+ AddMovePoints(8, 2, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMoveSlot);
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMonId != 0)
+ AddMovePoints(8, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMoveSlot);
+ tvPtr->side[atkSide].faintCause = 3;
+ tvPtr->side[atkSide].faintCauseMonId = gBattlerPartyIndexes[gBattlerAttacker];
+ }
+ break;
+ case STRINGID_PKMNFELLINLOVE:
+ tvPtr->pos[defSide][defFlank].attractMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].attractMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNIMMOBILIZEDBYLOVE:
+ if (tvPtr->pos[atkSide][atkFlank].attractMonId != 0)
+ AddMovePoints(9, 0, tvPtr->pos[atkSide][atkFlank].attractMonId - 1, tvPtr->pos[atkSide][atkFlank].attractMoveSlot);
+ break;
+ case STRINGID_PKMNWASPARALYZED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].prlzMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].prlzMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNISPARALYZED:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMonId != 0)
+ AddMovePoints(9, 2, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMoveSlot);
+ break;
+ case STRINGID_PKMNFELLASLEEP:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].slpMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].slpMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNFASTASLEEP:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId != 0
+ && gStringInfo->currentMove != MOVE_SNORE
+ && gStringInfo->currentMove != MOVE_SLEEP_TALK)
+ AddMovePoints(9, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMoveSlot);
+ break;
+ case STRINGID_PKMNWASFROZEN:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].frzMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].frzMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNISFROZEN:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMonId != 0)
+ AddMovePoints(9, 4, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMoveSlot);
+ break;
+ case STRINGID_PKMNWASCONFUSED:
+ tvPtr->pos[effSide][effFlank].confusionMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[effSide][effFlank].confusionMoveSlot = moveSlot;
+ break;
+ case STRINGID_ITHURTCONFUSION:
+ if (tvPtr->pos[atkSide][atkFlank].confusionMonId != 0)
+ AddMovePoints(9, 1, tvPtr->pos[atkSide][atkFlank].confusionMonId - 1, tvPtr->pos[atkSide][atkFlank].confusionMoveSlot);
+ tvPtr->side[atkSide].faintCause = 12;
+ break;
+ case STRINGID_SPIKESSCATTERED:
+ tvPtr->side[defSide].spikesMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[defSide].spikesMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYSPIKES:
+ if (tvPtr->side[scriptingSide].spikesMonId != 0)
+ {
+ AddMovePoints(10, scriptingSide ^ BIT_SIDE, tvPtr->side[scriptingSide].spikesMonId - 1, tvPtr->side[scriptingSide].spikesMoveSlot);
+ tvPtr->side[scriptingSide].faintCause = 7;
+ }
+ break;
+ case STRINGID_PKMNBLEWAWAYSPIKES:
+ tvPtr->side[atkSide].spikesMonId = 0;
+ tvPtr->side[atkSide].spikesMoveSlot = 0;
+ break;
+ case STRINGID_FIREWEAKENED:
+ tvPtr->pos[atkSide][atkFlank].waterSportMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].waterSportMoveSlot = moveSlot;
+ break;
+ case STRINGID_ELECTRICITYWEAKENED:
+ tvPtr->pos[atkSide][atkFlank].mudSportMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = moveSlot;
+ break;
+ case STRINGID_ATTACKERFAINTED:
+ AddPointsOnFainting(FALSE);
+ case STRINGID_RETURNMON:
+ if (tvPtr->pos[atkSide][atkFlank].waterSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][atkFlank].waterSportMonId = 0;
+ tvPtr->pos[atkSide][atkFlank].waterSportMoveSlot = 0;
+ }
+ if (tvPtr->pos[atkSide][atkFlank].mudSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][atkFlank].mudSportMonId = 0;
+ tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = 0;
+ }
+ break;
+ case STRINGID_TARGETFAINTED:
+ AddPointsOnFainting(TRUE);
+ if (tvPtr->pos[atkSide][defFlank].waterSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][defFlank].waterSportMonId = 0;
+ tvPtr->pos[atkSide][defFlank].waterSportMoveSlot = 0;
+ }
+ if (tvPtr->pos[atkSide][defFlank].mudSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][defFlank].mudSportMonId = 0;
+ tvPtr->pos[atkSide][defFlank].mudSportMoveSlot = 0;
+ }
+ break;
+ case STRINGID_PKMNRAISEDDEF:
+ case STRINGID_PKMNRAISEDDEFALITTLE:
+ tvPtr->side[atkSide].reflectMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].reflectMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNRAISEDSPDEF:
+ case STRINGID_PKMNRAISEDSPDEFALITTLE:
+ tvPtr->side[atkSide].lightScreenMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].lightScreenMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNSXWOREOFF:
+ if (*finishedMoveId == MOVE_REFLECT)
+ {
+ tvPtr->side[atkSide].reflectMonId = 0;
+ tvPtr->side[atkSide].reflectMoveSlot = 0;
+ }
+ if (*finishedMoveId == MOVE_LIGHT_SCREEN)
+ {
+ tvPtr->side[atkSide].lightScreenMonId = 0;
+ tvPtr->side[atkSide].lightScreenMoveSlot = 0;
+ }
+ if (*finishedMoveId == MOVE_MIST)
+ {
+ tvPtr->side[atkSide].mistMonId = 0;
+ tvPtr->side[atkSide].mistMoveSlot = 0;
+ }
+ break;
+ case STRINGID_PKMNCOVEREDBYVEIL:
+ tvPtr->side[atkSide].safeguardMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].safeguardMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNUSEDSAFEGUARD:
+ if (tvPtr->side[defSide].safeguardMonId != 0)
+ AddMovePoints(15, 0, tvPtr->side[defSide].safeguardMonId - 1, tvPtr->side[defSide].safeguardMoveSlot);
+ break;
+ case STRINGID_PKMNSAFEGUARDEXPIRED:
+ tvPtr->side[atkSide].safeguardMonId = 0;
+ tvPtr->side[atkSide].safeguardMoveSlot = 0;
+ break;
+ case STRINGID_PKMNSHROUDEDINMIST:
+ tvPtr->side[atkSide].mistMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].mistMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNPROTECTEDBYMIST:
+ if (tvPtr->side[defSide].mistMonId != 0)
+ AddMovePoints(16, 0, tvPtr->side[defSide].mistMonId - 1, tvPtr->side[defSide].mistMoveSlot);
+ break;
+ case STRINGID_THEWALLSHATTERED:
+ tvPtr->side[defSide].reflectMonId = 0;
+ tvPtr->side[defSide].reflectMoveSlot = 0;
+ tvPtr->side[defSide].lightScreenMonId = 0;
+ tvPtr->side[defSide].lightScreenMoveSlot = 0;
+ AddMovePoints(17, 0, gBattlerPartyIndexes[gBattlerAttacker], moveSlot);
+ break;
+ case STRINGID_PKMNFLINCHED:
+ if (tvPtr->pos[atkSide][0].attackedByMonId != 0)
+ AddMovePoints(21, 0, tvPtr->pos[atkSide][0].attackedByMonId - 1, tvPtr->pos[atkSide][0].attackedByMoveSlot);
+ if (tvPtr->pos[atkSide][1].attackedByMonId != 0)
+ AddMovePoints(21, 0, tvPtr->pos[atkSide][1].attackedByMonId - 1, tvPtr->pos[atkSide][1].attackedByMoveSlot);
+ break;
+ case STRINGID_PKMNCRASHED:
+ case STRINGID_PKMNHITWITHRECOIL:
+ tvPtr->side[atkSide].faintCause = 14;
+ break;
+ }
+}
+
+static bool8 sub_817E0B8(u16 stringId)
+{
+ s32 i = 0;
+
+ do
+ {
+ if (sUnknown_0860A8A4[i] == stringId)
+ break;
+ i++;
+ } while (sUnknown_0860A8A4[i] != 0xFFFF);
+
+ if (sUnknown_0860A8A4[i] == 0xFFFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide, defSide;
+ u8 moveSlot;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ defSide = GetBattlerSide(gBattlerTarget);
+ moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, move);
+
+ if (moveSlot >= 4)
+ {
+ tvPtr->side[atkSide].faintCause = 15;
+ return;
+ }
+
+ tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMoveSlot = moveSlot;
+ tvPtr->side[atkSide].usedMoveSlot = moveSlot;
+ AddMovePoints(0, moveSlot, gBattleMoves[move].effect, 0);
+ AddPointsBasedOnWeather(weatherFlags, move, moveSlot);
+ if (disableStructPtr->chargeTimer1 != 0)
+ AddMovePoints(7, move, moveSlot, 0);
+
+ if (move == MOVE_WISH)
+ {
+ tvPtr->side[atkSide].wishMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].wishMoveSlot = moveSlot;
+ }
+ if (move == MOVE_SELF_DESTRUCT || move == MOVE_EXPLOSION)
+ {
+ tvPtr->side[atkSide ^ BIT_SIDE].explosionMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide ^ BIT_SIDE].explosionMoveSlot = moveSlot;
+ tvPtr->side[atkSide ^ BIT_SIDE].faintCause = 13;
+ tvPtr->side[atkSide ^ BIT_SIDE].explosion = 1;
+ }
+
+ AddMovePoints(13, gBattleMoves[move].type, gBattleMoves[move].power, 0);
+ AddMovePoints(14, gBattleMoves[move].type, gBattleMoves[move].power, 0);
+ AddMovePoints(11, gBattleMoves[move].type, 0, 0);
+ AddMovePoints(12, gBattleMoves[move].type, 0, 0);
+}
+
+void BattleTv_SetDataBasedOnAnimation(u8 animationId)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ switch (animationId)
+ {
+ case B_ANIM_FUTURE_SIGHT_HIT:
+ if (tvPtr->side[atkSide].futureSightMonId != 0)
+ {
+ AddMovePoints(2, 0, atkSide,
+ (tvPtr->side[atkSide].futureSightMonId - 1) * 4 + tvPtr->side[atkSide].futureSightMoveSlot);
+ tvPtr->side[atkSide].faintCause = 8;
+ }
+ break;
+ case B_ANIM_DOOM_DESIRE_HIT:
+ if (tvPtr->side[atkSide].doomDesireMonId != 0)
+ {
+ AddMovePoints(2, 1, atkSide,
+ (tvPtr->side[atkSide].doomDesireMonId - 1) * 4 + tvPtr->side[atkSide].doomDesireMoveSlot);
+ tvPtr->side[atkSide].faintCause = 9;
+ }
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+// for loop has an unused stack variable
+void TryPutLinkBattleTvShowOnAir(void)
+{
+ u16 playerBestSpecies = 0, opponentBestSpecies = 0;
+ s16 playerBestSum = 0, opponentBestSum = SHRT_MAX;
+ u8 playerBestMonId = 0, opponentBestMonId = 0;
+ struct BattleTvMovePoints *movePoints = NULL;
+ u8 countPlayer = 0, countOpponent = 0;
+ s16 sum = 0;
+ u16 species = 0;
+ u16 moveId = 0;
+ s32 i, j;
+
+ if (gBattleStruct->anyMonHasTransformed)
+ return;
+
+ movePoints = &gBattleStruct->tvMovePoints;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ countPlayer++;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ countOpponent++;
+ }
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) || countPlayer != countOpponent)
+ return;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
+ if (species != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG, NULL))
+ {
+ for (sum = 0, j = 0; j < 4; j++)
+ sum += movePoints->points[0][i * 4 + j];
+
+ if (playerBestSum < sum)
+ {
+ playerBestMonId = i;
+ playerBestSum = sum;
+ playerBestSpecies = species;
+ }
+ }
+
+ species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL);
+ if (species != SPECIES_NONE && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG, NULL))
+ {
+ for (sum = 0, j = 0; j < 4; j++)
+ sum += movePoints->points[1][i * 4 + j];
+
+ if (opponentBestSum == sum)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_EXP, NULL) > GetMonData(&gEnemyParty[opponentBestMonId], MON_DATA_EXP, NULL))
+ {
+ opponentBestMonId = i;
+ opponentBestSum = sum;
+ opponentBestSpecies = species;
+ }
+ }
+ else if (opponentBestSum > sum)
+ {
+ opponentBestMonId = i;
+ opponentBestSum = sum;
+ opponentBestSpecies = species;
+ }
+ }
+ }
+
+ for (sum = 0, i = 0, j = 0; j < 4; j++)
+ {
+ if (sum < movePoints->points[0][playerBestMonId * 4 + j])
+ {
+ sum = movePoints->points[0][playerBestMonId * 4 + j];
+ i = j;
+ }
+ }
+
+ moveId = GetMonData(&gPlayerParty[playerBestMonId], MON_DATA_MOVE1 + i, NULL);
+ if (playerBestSum == 0 || moveId == 0)
+ return;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if ((playerBestMonId < 3 && !sub_806D82C(gBattleScripting.multiplayerId))
+ || (playerBestMonId >= 3 && sub_806D82C(gBattleScripting.multiplayerId)))
+ {
+ j = (opponentBestMonId < 3) ? 0 : 1;
+ PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies);
+ }
+ }
+ else
+ {
+ PutBattleUpdateOnTheAir(gBattleScripting.multiplayerId ^ 1, moveId, playerBestSpecies, opponentBestSpecies);
+ }
+}
+
+#else
+ASM_DIRECT
+void TryPutLinkBattleTvShowOnAir(void)
+{
+ asm_unified(
+ "push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x20\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x8]\n\
+ ldr r3, =0x00007fff\n\
+ str r3, [sp, 0xC]\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x10]\n\
+ movs r7, 0\n\
+ str r7, [sp, 0x14]\n\
+ mov r8, r0\n\
+ ldr r0, =gBattleStruct\n\
+ ldr r1, [r0]\n\
+ adds r0, r1, 0\n\
+ adds r0, 0xB3\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0817E42A\n\
+ b _0817E670\n\
+_0817E42A:\n\
+ movs r2, 0xD2\n\
+ lsls r2, 1\n\
+ adds r2, r1\n\
+ mov r10, r2\n\
+ movs r6, 0\n\
+_0817E434:\n\
+ movs r0, 0x64\n\
+ adds r4, r6, 0\n\
+ muls r4, r0\n\
+ ldr r0, =gPlayerParty\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0817E454\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+_0817E454:\n\
+ ldr r5, =gEnemyParty\n\
+ adds r0, r4, r5\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0817E46A\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+_0817E46A:\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _0817E434\n\
+ ldr r0, =gBattleTypeFlags\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0817E47E\n\
+ b _0817E670\n\
+_0817E47E:\n\
+ cmp r8, r7\n\
+ beq _0817E484\n\
+ b _0817E670\n\
+_0817E484:\n\
+ movs r6, 0\n\
+ lsls r3, r6, 1\n\
+ str r3, [sp, 0x18]\n\
+ movs r4, 0x64\n\
+ mov r8, r4\n\
+_0817E48E:\n\
+ mov r1, r8\n\
+ muls r1, r6\n\
+ ldr r0, =gPlayerParty\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ adds r0, r6, 0x1\n\
+ mov r9, r0\n\
+ cmp r7, 0\n\
+ beq _0817E4EE\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0817E4EE\n\
+ movs r4, 0\n\
+ lsls r0, r6, 3\n\
+ mov r2, r10\n\
+ adds r1, r0, r2\n\
+ movs r3, 0x3\n\
+_0817E4C4:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ ldrh r4, [r1]\n\
+ adds r0, r4\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r1, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _0817E4C4\n\
+ ldr r1, [sp, 0x8]\n\
+ lsls r0, r1, 16\n\
+ lsls r1, r4, 16\n\
+ cmp r0, r1\n\
+ bge _0817E4EE\n\
+ lsls r0, r6, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x10]\n\
+ lsrs r1, 16\n\
+ str r1, [sp, 0x8]\n\
+ str r7, [sp]\n\
+_0817E4EE:\n\
+ mov r0, r8\n\
+ muls r0, r6\n\
+ ldr r2, =gEnemyParty\n\
+ adds r4, r0, r2\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ ldr r3, [sp, 0x8]\n\
+ lsls r3, 16\n\
+ str r3, [sp, 0x1C]\n\
+ cmp r7, 0\n\
+ beq _0817E5A0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0817E5A0\n\
+ movs r4, 0\n\
+ ldr r0, [sp, 0xC]\n\
+ lsls r2, r0, 16\n\
+ movs r3, 0x1\n\
+ lsls r1, r3, 1\n\
+ adds r1, 0x1\n\
+ lsls r1, 4\n\
+ lsls r0, r6, 3\n\
+ adds r0, r1\n\
+ mov r3, r10\n\
+ adds r1, r0, r3\n\
+ movs r3, 0x3\n\
+_0817E534:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ ldrh r4, [r1]\n\
+ adds r0, r4\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r1, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _0817E534\n\
+ asrs r1, r2, 16\n\
+ lsls r5, r4, 16\n\
+ asrs r0, r5, 16\n\
+ cmp r1, r0\n\
+ bne _0817E590\n\
+ mov r0, r8\n\
+ muls r0, r6\n\
+ ldr r1, =gEnemyParty\n\
+ adds r0, r1\n\
+ movs r1, 0x19\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ adds r4, r0, 0\n\
+ ldr r2, [sp, 0x14]\n\
+ mov r0, r8\n\
+ muls r0, r2\n\
+ ldr r3, =gEnemyParty\n\
+ adds r0, r3\n\
+ movs r1, 0x19\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r4, r0\n\
+ bls _0817E5A0\n\
+ b _0817E594\n\
+ .pool\n\
+_0817E590:\n\
+ cmp r1, r0\n\
+ ble _0817E5A0\n\
+_0817E594:\n\
+ lsls r0, r6, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x14]\n\
+ lsrs r5, 16\n\
+ str r5, [sp, 0xC]\n\
+ str r7, [sp, 0x4]\n\
+_0817E5A0:\n\
+ mov r6, r9\n\
+ cmp r6, 0x5\n\
+ bgt _0817E5A8\n\
+ b _0817E48E\n\
+_0817E5A8:\n\
+ movs r4, 0\n\
+ movs r6, 0\n\
+ movs r3, 0\n\
+ ldr r5, =gPlayerParty\n\
+ ldr r7, [sp, 0x10]\n\
+ lsls r0, r7, 3\n\
+ mov r1, r10\n\
+ adds r2, r0, r1\n\
+_0817E5B8:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ movs r7, 0\n\
+ ldrsh r1, [r2, r7]\n\
+ cmp r0, r1\n\
+ bge _0817E5C8\n\
+ ldrh r4, [r2]\n\
+ adds r6, r3, 0\n\
+_0817E5C8:\n\
+ adds r2, 0x2\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x3\n\
+ ble _0817E5B8\n\
+ movs r0, 0x64\n\
+ ldr r1, [sp, 0x10]\n\
+ muls r0, r1\n\
+ adds r0, r5\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xD\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ ldr r2, [sp, 0x1C]\n\
+ cmp r2, 0\n\
+ beq _0817E670\n\
+ cmp r4, 0\n\
+ beq _0817E670\n\
+ ldr r0, =gBattleTypeFlags\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0817E65C\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r3, 0x2\n\
+ bhi _0817E620\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r0, [r0]\n\
+ bl sub_806D82C\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _0817E630\n\
+ b _0817E670\n\
+ .pool\n\
+_0817E620:\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r0, [r0]\n\
+ bl sub_806D82C\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _0817E670\n\
+_0817E630:\n\
+ movs r3, 0\n\
+ ldr r7, [sp, 0x14]\n\
+ cmp r7, 0x2\n\
+ bls _0817E63A\n\
+ movs r3, 0x1\n\
+_0817E63A:\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ ldr r1, =gBattleScripting\n\
+ adds r1, 0x25\n\
+ ldrb r1, [r1]\n\
+ bl sub_806EF84\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r1, r4, 0\n\
+ ldr r2, [sp]\n\
+ ldr r3, [sp, 0x4]\n\
+ bl PutBattleUpdateOnTheAir\n\
+ b _0817E670\n\
+ .pool\n\
+_0817E65C:\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x1\n\
+ eors r0, r1\n\
+ adds r1, r4, 0\n\
+ ldr r2, [sp]\n\
+ ldr r3, [sp, 0x4]\n\
+ bl PutBattleUpdateOnTheAir\n\
+_0817E670:\n\
+ add sp, 0x20\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool");
+}
+#endif
+
+static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
+{
+ struct BattleTvMovePoints *movePoints = &gBattleStruct->tvMovePoints;
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+ u32 atkSide = GetBattlerSide(gBattlerAttacker);
+ u32 defSide = GetBattlerSide(gBattlerTarget);
+ const u16 *ptr;
+ s32 i;
+
+ switch (caseId)
+ {
+ case 0:
+ case 1:
+ case 18:
+ case 22 ... 27:
+ movePoints->points[atkSide][gBattlerPartyIndexes[gBattlerAttacker] * 4 + arg1] += sPointsArray[caseId][arg2];
+ break;
+ case 3 ... 7:
+ i = 0;
+ ptr = sPointsArray[caseId];
+ do
+ {
+ if (arg1 == ptr[i])
+ {
+ movePoints->points[atkSide][gBattlerPartyIndexes[gBattlerAttacker] * 4 + arg2] += ptr[i+1];
+ break;
+ }
+ i += 2;
+ } while (ptr[i] != 0xFFFF);
+ break;
+ case 19:
+ tvPtr->side[arg2 ^ 1].faintCause = 0;
+ movePoints->points[arg2][0 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 20:
+ tvPtr->side[arg2].faintCause = 0;
+ case 2:
+ movePoints->points[arg2][0 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 17:
+ movePoints->points[atkSide][arg2 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 8:
+ case 9:
+ case 15:
+ case 16:
+ case 21:
+ movePoints->points[atkSide ^ BIT_SIDE][arg2 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 10:
+ movePoints->points[arg1][arg2 * 4 + arg3] += sPointsArray[caseId][0];
+ break;
+ case 11:
+ if (tvPtr->pos[defSide][0].waterSportMonId != -(tvPtr->pos[defSide][1].waterSportMonId) && arg1 == 10)
+ {
+ if (tvPtr->pos[defSide][0].waterSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][0].waterSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][0].waterSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ if (tvPtr->pos[defSide][1].waterSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][1].waterSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][1].waterSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ }
+ break;
+ case 12:
+ if (tvPtr->pos[defSide][0].mudSportMonId != -(tvPtr->pos[defSide][1].mudSportMonId) && arg1 == 13)
+ {
+ if (tvPtr->pos[defSide][0].mudSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][0].mudSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][0].mudSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ if (tvPtr->pos[defSide][1].mudSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][1].mudSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][1].mudSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ }
+ break;
+ case 13:
+ if (arg1 <= 8 && arg2 != 0 && tvPtr->side[defSide].reflectMonId != 0)
+ {
+ u32 id = (tvPtr->side[defSide].reflectMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->side[defSide].reflectMoveSlot] += sPointsArray[caseId][0];
+ }
+ break;
+ case 14:
+ if (arg1 > 8 && arg2 != 0 && tvPtr->side[defSide].lightScreenMonId != 0)
+ {
+ u32 id = (tvPtr->side[defSide].lightScreenMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0];
+ }
+ break;
+ }
+}
+
+static void AddPointsOnFainting(bool8 targetFainted)
+{
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+ u32 atkSide = GetBattlerSide(gBattlerAttacker);
+ u32 defSide = GetBattlerSide(gBattlerTarget);
+ u32 atkArrId = tvPtr->side[atkSide].faintCauseMonId;
+ s32 i;
+
+ if (tvPtr->side[atkSide].faintCause != 0)
+ {
+ switch (tvPtr->side[atkSide].faintCause)
+ {
+ case 1:
+ if (tvPtr->pos[atkSide][atkArrId].curseMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].curseMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].curseMoveSlot);
+ }
+ break;
+ case 2:
+ if (tvPtr->pos[atkSide][atkArrId].leechSeedMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].leechSeedMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].leechSeedMoveSlot);
+ }
+ break;
+ case 3:
+ if (tvPtr->mon[atkSide][atkArrId].psnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].psnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].psnMoveSlot);
+ }
+ if (tvPtr->mon[atkSide][atkArrId].badPsnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].badPsnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].badPsnMoveSlot);
+ }
+ break;
+ case 4:
+ if (tvPtr->mon[atkSide][atkArrId].brnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].brnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].brnMoveSlot);
+ }
+ break;
+ case 5:
+ if (tvPtr->pos[atkSide][atkArrId].nightmareMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].nightmareMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].nightmareMoveSlot);
+ }
+ break;
+ case 6:
+ if (tvPtr->pos[atkSide][atkArrId].wrapMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].wrapMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].wrapMoveSlot);
+ }
+ break;
+ case 7:
+ if (tvPtr->side[atkSide].spikesMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide].spikesMonId - 1) * 4 + tvPtr->side[atkSide].spikesMoveSlot);
+ }
+ break;
+ case 8:
+ if (tvPtr->side[atkSide].futureSightMonId != 0)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (tvPtr->side[atkSide].futureSightMonId - 1) * 4 + tvPtr->side[atkSide].futureSightMoveSlot);
+ }
+ break;
+ case 9:
+ if (tvPtr->side[atkSide].doomDesireMonId != 0)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (tvPtr->side[atkSide].doomDesireMonId - 1) * 4 + tvPtr->side[atkSide].doomDesireMoveSlot);
+ }
+ break;
+ case 10:
+ if (tvPtr->side[atkSide].perishSong
+ && tvPtr->side[atkSide].perishSongMonId - 1 != gBattlerPartyIndexes[gBattlerAttacker])
+ {
+ AddMovePoints(19, 0, atkSide,
+ (tvPtr->side[atkSide].perishSongMonId - 1) * 4 + tvPtr->side[atkSide].perishSongMoveSlot);
+ }
+ if (tvPtr->side[atkSide ^ BIT_SIDE].perishSong)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].perishSongMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].perishSongMoveSlot);
+ }
+ break;
+ case 11:
+ if (tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMoveSlot);
+ }
+ break;
+ case 12:
+ for (i = 0; i < 2; i++)
+ {
+ if (tvPtr->pos[atkSide][i].confusionMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][i].confusionMonId - 1) * 4 + tvPtr->pos[atkSide][i].confusionMoveSlot);
+ }
+ }
+ break;
+ case 13:
+ if (tvPtr->side[atkSide].explosion)
+ {
+ AddMovePoints(19, 0, atkSide,
+ (tvPtr->side[atkSide].explosionMonId - 1) * 4 + tvPtr->side[atkSide].explosionMoveSlot);
+ }
+ if (tvPtr->side[atkSide ^ BIT_SIDE].explosion)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].explosionMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].explosionMoveSlot);
+ }
+ break;
+ case 14:
+ if (targetFainted == TRUE)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (gBattlerPartyIndexes[gBattlerAttacker]) * 4 + tvPtr->side[atkSide].usedMoveSlot);
+ }
+ break;
+ case 15:
+ break;
+ }
+ }
+ else
+ {
+ if (tvPtr->side[defSide].faintCause == 7)
+ {
+ if (tvPtr->side[defSide].spikesMonId != 0)
+ {
+ AddMovePoints(19, 0, defSide ^ BIT_SIDE,
+ (tvPtr->side[defSide].spikesMonId - 1) * 4 + tvPtr->side[defSide].spikesMoveSlot);
+ }
+ }
+ else
+ {
+ AddMovePoints(20, 0, atkSide,
+ (gBattlerPartyIndexes[gBattlerAttacker]) * 4 + tvPtr->side[atkSide].usedMoveSlot);
+ }
+ }
+}
+
+static void TrySetBattleSeminarShow(void)
+{
+ s32 i;
+ s32 dmgByMove[4];
+ u16 powerOverride;
+ u16 currMoveSaved;
+
+ if (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ return;
+ else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT)
+ return;
+ else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] <= 5)
+ return;
+ else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > 6)
+ return;
+ else if (gCurrentMove == MOVE_HIDDEN_POWER || gCurrentMove == MOVE_WEATHER_BALL)
+ return;
+ else if (gBattleTypeFlags & (BATTLE_TYPE_PALACE | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID))
+ return;
+ else if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]]].power == 0)
+ return;
+
+ i = 0;
+ currMoveSaved = gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]];
+ do
+ {
+ if (currMoveSaved == sVariableDmgMoves[i])
+ break;
+ i++;
+ } while (sVariableDmgMoves[i] != 0xFFFF);
+
+ if (sVariableDmgMoves[i] != 0xFFFF)
+ return;
+
+ dmgByMove[gMoveSelectionCursor[gBattlerAttacker]] = gBattleMoveDamage;
+ currMoveSaved = gCurrentMove;
+ for (i = 0; i < 4; i++)
+ {
+ gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
+ powerOverride = 0;
+ if (ShouldCalculateDamage(gCurrentMove, &dmgByMove[i], &powerOverride))
+ {
+ u8 moveResultFlags;
+ u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
+ sideStatus, powerOverride,
+ 0, gBattlerAttacker, gBattlerTarget);
+
+ if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+
+ moveResultFlags = TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
+ dmgByMove[i] = gBattleMoveDamage;
+ if (dmgByMove[i] == 0 && !(moveResultFlags & MOVE_RESULT_NO_EFFECT))
+ dmgByMove[i] = 1;
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gMoveSelectionCursor[gBattlerAttacker] && dmgByMove[i] > dmgByMove[gMoveSelectionCursor[gBattlerAttacker]])
+ {
+ u16 opponentSpecies, playerSpecies;
+ s32 bestMoveId;
+
+ if (gMoveSelectionCursor[gBattlerAttacker] != 0)
+ bestMoveId = 0;
+ else
+ bestMoveId = 1;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gMoveSelectionCursor[gBattlerAttacker] && dmgByMove[i] > dmgByMove[bestMoveId])
+ bestMoveId = i;
+ }
+
+ opponentSpecies = GetMonData(&gEnemyParty [gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES, NULL);
+ playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_SPECIES, NULL);
+ sub_80EE35C(opponentSpecies, playerSpecies, gMoveSelectionCursor[gBattlerAttacker], gBattleMons[gBattlerAttacker].moves, gBattleMons[gBattlerAttacker].moves[bestMoveId]);
+ break;
+ }
+ }
+
+ gBattleMoveDamage = dmgByMove[gMoveSelectionCursor[gBattlerAttacker]];
+ gCurrentMove = currMoveSaved;
+}
+
+static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride)
+{
+ if (gBattleMoves[moveId].power == 0)
+ {
+ *dmg = 0;
+ return FALSE;
+ }
+ else
+ {
+ s32 i = 0;
+ do
+ {
+ if (moveId == sVariableDmgMoves[i])
+ break;
+ i++;
+ } while (sVariableDmgMoves[i] != 0xFFFF);
+
+ if (sVariableDmgMoves[i] != 0xFFFF)
+ {
+ *dmg = 0;
+ return FALSE;
+ }
+ else if (moveId == MOVE_PSYWAVE)
+ {
+ *dmg = gBattleMons[gBattlerAttacker].level;
+ *dmg /= 2;
+ return FALSE;
+ }
+ else if (moveId == MOVE_MAGNITUDE)
+ {
+ *powerOverride = 10;
+ return TRUE;
+ }
+ else
+ {
+ return TRUE;
+ }
+ }
+}
+
+void BattleTv_ClearExplosionFaintCause(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+
+ tvPtr->side[B_SIDE_PLAYER].faintCause = 0;
+ tvPtr->side[B_SIDE_OPPONENT].faintCause = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].faintCauseMonId = 0;
+ tvPtr->side[B_SIDE_OPPONENT].faintCauseMonId = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosionMonId = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosionMonId = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosionMoveSlot = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosionMoveSlot = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosion = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosion = 0;
+ }
+}
+
+u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId)
+{
+ s32 i;
+ struct Pokemon *party;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ i = 0;
+ while (1)
+ {
+ if (i >= 4)
+ break;
+ if (GetMonData(&party[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + i, NULL) == moveId)
+ break;
+ i++;
+ }
+
+ return i;
+}
+
+static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot)
+{
+ if (weatherFlags & WEATHER_RAIN_ANY)
+ AddMovePoints(3, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_SUN_ANY)
+ AddMovePoints(4, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_SANDSTORM_ANY)
+ AddMovePoints(5, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_HAIL_ANY)
+ AddMovePoints(6, moveId, moveSlot, 0);
+}
diff --git a/src/battle_util.c b/src/battle_util.c
index a457ce15d..172ec6659 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -23,8 +23,6 @@
#include "link.h"
#include "berry.h"
-extern const struct BattleMove gBattleMoves[];
-
extern u8 weather_get_current(void);
// rom const data
@@ -1665,36 +1663,31 @@ u8 CastformDataTypeChange(u8 battler)
u8 formChange = 0;
if (gBattleMons[battler].species != SPECIES_CASTFORM || gBattleMons[battler].ability != ABILITY_FORECAST || gBattleMons[battler].hp == 0)
return CASTFORM_NO_CHANGE;
- if (!WEATHER_HAS_EFFECT && gBattleMons[battler].type1 != TYPE_NORMAL && gBattleMons[battler].type2 != TYPE_NORMAL)
+ if (!WEATHER_HAS_EFFECT && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
{
- gBattleMons[battler].type1 = TYPE_NORMAL;
- gBattleMons[battler].type2 = TYPE_NORMAL;
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
return CASTFORM_TO_NORMAL;
}
if (!WEATHER_HAS_EFFECT)
return CASTFORM_NO_CHANGE;
- if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL)) && gBattleMons[battler].type1 != TYPE_NORMAL && gBattleMons[battler].type2 != TYPE_NORMAL)
+ if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
{
- gBattleMons[battler].type1 = TYPE_NORMAL;
- gBattleMons[battler].type2 = TYPE_NORMAL;
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
formChange = CASTFORM_TO_NORMAL;
}
- if (gBattleWeather & WEATHER_SUN_ANY && gBattleMons[battler].type1 != TYPE_FIRE && gBattleMons[battler].type2 != TYPE_FIRE)
+ if (gBattleWeather & WEATHER_SUN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE))
{
- gBattleMons[battler].type1 = TYPE_FIRE;
- gBattleMons[battler].type2 = TYPE_FIRE;
+ SET_BATTLER_TYPE(battler, TYPE_FIRE);
formChange = CASTFORM_TO_FIRE;
}
- if (gBattleWeather & WEATHER_RAIN_ANY && gBattleMons[battler].type1 != TYPE_WATER && gBattleMons[battler].type2 != TYPE_WATER)
+ if (gBattleWeather & WEATHER_RAIN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER))
{
- gBattleMons[battler].type1 = TYPE_WATER;
- gBattleMons[battler].type2 = TYPE_WATER;
+ SET_BATTLER_TYPE(battler, TYPE_WATER);
formChange = CASTFORM_TO_WATER;
}
- if (gBattleWeather & WEATHER_HAIL && gBattleMons[battler].type1 != TYPE_ICE && gBattleMons[battler].type2 != TYPE_ICE)
+ if (gBattleWeather & WEATHER_HAIL_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE))
{
- gBattleMons[battler].type1 = TYPE_ICE;
- gBattleMons[battler].type2 = TYPE_ICE;
+ SET_BATTLER_TYPE(battler, TYPE_ICE);
formChange = CASTFORM_TO_ICE;
}
return formChange;
@@ -2024,14 +2017,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& move != MOVE_STRUGGLE
&& gBattleMoves[move].power != 0
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
- && gBattleMons[battler].type1 != moveType
- && gBattleMons[battler].type2 != moveType
+ && TARGET_TURN_DAMAGED
+ && !IS_BATTLER_OF_TYPE(battler, moveType)
&& gBattleMons[battler].hp != 0)
{
- gBattleMons[battler].type1 = moveType;
- gBattleMons[battler].type2 = moveType;
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType)
+ SET_BATTLER_TYPE(battler, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ColorChangeActivates;
effect++;
@@ -2041,7 +2032,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT))
{
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
@@ -2056,7 +2047,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 10) == 0)
{
@@ -2079,7 +2070,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 3) == 0)
{
@@ -2094,7 +2085,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 3) == 0)
{
@@ -2110,7 +2101,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (Random() % 3) == 0)
{
gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
@@ -2125,7 +2116,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& gBattleMons[gBattlerTarget].hp != 0
&& (Random() % 3) == 0
&& gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS
@@ -3135,7 +3126,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
case HOLD_EFFECT_FLINCH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (Random() % 100) < atkQuality
&& gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED
&& gBattleMons[gBattlerTarget].hp)
@@ -3187,14 +3178,14 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands
gBattleScriptingCommandsTable[*gBattlescriptCurrInstr]();
}
-u8 GetMoveTarget(u16 move, u8 useMoveTarget)
+u8 GetMoveTarget(u16 move, u8 setTarget)
{
u8 targetBank = 0;
u8 moveTarget;
u8 side;
- if (useMoveTarget)
- moveTarget = useMoveTarget - 1;
+ if (setTarget)
+ moveTarget = setTarget - 1;
else
moveTarget = gBattleMoves[move].target;
@@ -3255,8 +3246,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/battle_util2.c b/src/battle_util2.c
index c1bbabc85..1d2f1e95b 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -76,26 +76,26 @@ void FreeBattleResources(void)
void AdjustFriendshipOnBattleFaint(u8 battlerId)
{
- u8 opposingBank;
+ u8 opposingBattlerId;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- u8 opposingBank2;
+ u8 opposingBattlerId2;
- opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- opposingBank2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ opposingBattlerId2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
- if (gBattleMons[opposingBank2].level > gBattleMons[opposingBank].level)
- opposingBank = opposingBank2;
+ if (gBattleMons[opposingBattlerId2].level > gBattleMons[opposingBattlerId].level)
+ opposingBattlerId = opposingBattlerId2;
}
else
{
- opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
}
- if (gBattleMons[opposingBank].level > gBattleMons[battlerId].level)
+ if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level)
{
- if (gBattleMons[opposingBank].level - gBattleMons[battlerId].level > 29)
+ if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29)
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 8);
else
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 1ac52dd6c..9e6a0fef7 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -29,6 +29,7 @@
#include "pokeblock.h"
#include "trig.h"
#include "tv.h"
+#include "item_menu.h"
#define BLENDER_SCORE_BEST 0
#define BLENDER_SCORE_GOOD 1
@@ -128,7 +129,6 @@ struct BerryBlenderData
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern u16 gSpecialVar_ItemId;
extern u8 gInGameOpponentsNo;
extern u8 gUnknown_020322D5;
extern u8 gResultsWindowId;
@@ -155,13 +155,11 @@ extern void sub_81978B0(u16);
extern void sub_800A418(void);
extern u8 sub_800A9D8(void);
extern bool8 sub_800A4D8(u8);
-extern void sub_8197DF8(u8 windowId, bool8 copyToVram);
extern void sub_809882C(u8, u16, u8);
extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
extern void sub_81AABF0(void (*callback)(void));
extern void sub_800B4C0(void);
extern void ClearLinkCallback(void);
-extern void CB2_ReturnToFieldContinueScript(void);
extern void sub_8153430(void);
extern bool8 sub_8153474(void);
extern void sub_80EECEC(void);
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index f86f350bf..1a0d1bce0 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -515,7 +515,7 @@ static void Task_HandleInput(u8 taskId)
static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
{
s16 *data = gTasks[taskId].data;
- s16 currPocketPosition = gUnknown_0203CE58.unk12[3] + gUnknown_0203CE58.unk8[3];
+ s16 currPocketPosition = gUnknown_0203CE58.scrollPosition[3] + gUnknown_0203CE58.cursorPosition[3];
u32 newPocketPosition = currPocketPosition + toMove;
if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(BAG_BERRIES, newPocketPosition) != 0)
{
@@ -533,8 +533,8 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
static void HandleBagCursorPositionChange(s8 toMove)
{
- u16 *scrollPos = &gUnknown_0203CE58.unk12[3];
- u16 *cursorPos = &gUnknown_0203CE58.unk8[3];
+ u16 *scrollPos = &gUnknown_0203CE58.scrollPosition[3];
+ u16 *cursorPos = &gUnknown_0203CE58.cursorPosition[3];
if (toMove > 0)
{
if (*cursorPos < 4 || BagGetItemIdByPocketPosition(BAG_BERRIES, *scrollPos + 8) == 0)
diff --git a/src/birch_pc.c b/src/birch_pc.c
index 0f44824f7..3148832be 100644
--- a/src/birch_pc.c
+++ b/src/birch_pc.c
@@ -5,10 +5,6 @@
#include "constants/species.h"
#include "strings.h"
-extern u16 gSpecialVar_0x8004;
-extern u16 gSpecialVar_0x8005;
-extern u16 gSpecialVar_0x8006;
-
bool16 ScriptGetPokedexInfo(void)
{
if (gSpecialVar_0x8004 == 0) // is national dex not present?
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/daycare.c b/src/daycare.c
index 36e8b208d..d567ff79a 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -41,11 +41,10 @@ extern const u8 gDaycareText_PlayOther[];
extern u8 GetCursorSelectionMonId(void);
extern u16 ItemIdToBattleMoveId(u16);
extern s32 ListMenuHandleInputGetItemId(u8);
-extern void sub_81AE6C8(u8, u16*, u16*);
+extern void DestroyListMenuTask(u8, u16*, u16*);
extern void sub_819746C(u8, bool8);
extern void NewMenuHelpers_DrawStdWindowFrame(u8, bool8);
extern void sub_81B9328(void);
-extern void sub_81AF078(u32, bool8, struct ListMenu *);
extern void CB2_ReturnToField(void);
// this file's functions
@@ -79,18 +78,18 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
.unk_08 = DaycarePrintMonInfo,
.totalItems = 3,
.maxShowed = 3,
- .unk_10 = 0,
+ .windowId = 0,
.unk_11 = 0,
.unk_12 = 8,
- .cursor_Y = 0,
+ .cursor_X = 0,
.upText_Y = 1,
- .cursorColor = 2,
- .fillColor = 1,
- .cursorShadowColor = 3,
- .unk_16_0 = TRUE,
- .spaceBetweenItems = 0,
- .unk_16_7 = FALSE,
- .unk_17_0 = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 1,
+ .unk_16_3 = 0,
+ .scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
+ .fontId = 1,
.cursorKind = 0
};
@@ -1271,7 +1270,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
gSpecialVar_Result = 2;
break;
}
- sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL);
+ DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
sub_819746C(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
@@ -1280,7 +1279,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
gSpecialVar_Result = 2;
- sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL);
+ DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
sub_819746C(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
@@ -1299,7 +1298,7 @@ void ShowDaycareLevelMenu(void)
NewMenuHelpers_DrawStdWindowFrame(windowId, FALSE);
menuTemplate = sDaycareListMenuLevelTemplate;
- menuTemplate.unk_10 = windowId;
+ menuTemplate.windowId = windowId;
listMenuTaskId = ListMenuInit(&menuTemplate, 0, 0);
CopyWindowToVram(windowId, 3);
diff --git a/src/decoration.c b/src/decoration.c
index e4d867a34..ffa1c3a68 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -113,7 +113,7 @@ void sub_812719C(u8 taskId);
void sub_81271CC(u8 taskId);
void sub_8127268(u8 taskId);
void sub_8127454(u8 *dest, u16 decorId);
-void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu);
+void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu);
void sub_81274A0(u8 a0, s32 a1, u8 a2);
void sub_8127620(u8 taskId);
void sub_812764C(u8 taskId);
@@ -801,7 +801,7 @@ void sub_8127330(u8 taskId)
sDecorPCBuffer->items[i].name = sDecorPCBuffer->names[i];
sDecorPCBuffer->items[i].id = -2;
gMultiuseListMenuTemplate = gUnknown_085A6BD0;
- gMultiuseListMenuTemplate.unk_10 = sDecorMenuWindowIndices[1];
+ gMultiuseListMenuTemplate.windowId = sDecorMenuWindowIndices[1];
gMultiuseListMenuTemplate.totalItems = sDecorPCBuffer->unk_520;
gMultiuseListMenuTemplate.items = sDecorPCBuffer->items;
gMultiuseListMenuTemplate.maxShowed = sDecorPCBuffer->unk_521;
@@ -813,7 +813,7 @@ void sub_8127454(u8 *dest, u16 decorId)
StringAppend(dest, gDecorations[decorId].name);
}
-void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu)
+void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu)
{
if (flag != TRUE)
{
@@ -892,7 +892,7 @@ void sub_812764C(u8 taskId)
if (!gPaletteFade.active)
{
input = ListMenuHandleInputGetItemId(data[13]);
- sub_81AE860(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
+ ListMenuGetScrollAndRow(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
switch (input)
{
case -1:
@@ -905,7 +905,7 @@ void sub_812764C(u8 taskId)
PlaySE(SE_SELECT);
gCurDecorationIndex = input;
sub_8127554();
- sub_81AE6C8(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
+ DestroyListMenuTask(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
sub_8126A58(1);
sub_81277A8();
free(sDecorPCBuffer);
@@ -1074,7 +1074,7 @@ void sub_8127A8C(u8 taskId)
data = gTasks[taskId].data;
sub_8127554();
sub_81277A8();
- sub_81AE6C8(data[13], NULL, NULL);
+ DestroyListMenuTask(data[13], NULL, NULL);
free(sDecorPCBuffer);
sub_8126E44(taskId);
}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 1b929c9bd..74eac32de 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -49,7 +49,6 @@ extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
extern bool8 gAffineAnimsDisabled;
-extern u16 gMoveToLearn;
extern const u8 gSpeciesNames[][11];
#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
@@ -59,11 +58,6 @@ extern const struct WindowTemplate gUnknown_0833900C;
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
// strings
-extern const u8 gText_PkmnIsEvolving[];
-extern const u8 gText_CongratsPkmnEvolved[];
-extern const u8 gText_BattleYesNoChoice[];
-extern const u8 gText_PkmnStoppedEvolving[];
-extern const u8 gText_EllipsisQuestionMark[];
extern const u8 gText_CommunicationStandby5[];
extern void sub_80356D0(void);
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
new file mode 100644
index 000000000..4f3a091ce
--- /dev/null
+++ b/src/fldeff_flash.c
@@ -0,0 +1,367 @@
+#include "global.h"
+#include "constants/songs.h"
+#include "braille_puzzles.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "field_effect.h"
+#include "gpu_regs.h"
+#include "gba/io_reg.h"
+#include "main.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "overworld.h"
+#include "rom6.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+
+// structures
+struct FlashStruct
+{
+ u8 unk0;
+ u8 unk1;
+ bool8 unk2;
+ bool8 unk3;
+ void (*func)(void);
+};
+
+// static functions
+static void hm2_flash(void);
+static void sub_81371B4(void);
+static bool8 sub_8137304(void);
+static void sub_81373F0(void);
+static void sub_8137404(u8 taskId);
+static void sub_8137420(u8 taskId);
+static void sub_81374C4(u8 taskId);
+static void sub_813750C(u8 taskId);
+static void sub_8137574(u8 taskId);
+static void sub_81375A8(void);
+static void sub_81375BC(u8 taskId);
+static void sub_81375D8(u8 taskId);
+static void sub_8137678(u8 taskId);
+static void sub_81376DC(u8 taskId);
+
+// rodata
+static const struct FlashStruct gUnknown_085B27C8[] =
+{
+ {1, 4, 1, 0, sub_81375A8},
+ {2, 4, 1, 0, sub_81375A8},
+ {3, 4, 1, 0, sub_81375A8},
+ {5, 4, 1, 0, sub_81375A8},
+ {6, 4, 1, 0, sub_81375A8},
+ {7, 4, 1, 0, sub_81375A8},
+ {8, 4, 1, 0, sub_81375A8},
+ {9, 4, 1, 0, sub_81375A8},
+ {4, 1, 0, 1, sub_81373F0},
+ {4, 2, 0, 1, sub_81373F0},
+ {4, 3, 0, 1, sub_81373F0},
+ {4, 5, 0, 1, sub_81373F0},
+ {4, 6, 0, 1, sub_81373F0},
+ {4, 7, 0, 1, sub_81373F0},
+ {4, 8, 0, 1, sub_81373F0},
+ {4, 9, 0, 1, sub_81373F0},
+ {0, 0, 0, 0, NULL},
+};
+
+static const u16 gCaveTransitionPalette_White[] = INCBIN_U16("graphics/misc/cave_transition_white.gbapal");
+static const u16 gCaveTransitionPalette_Black[] = INCBIN_U16("graphics/misc/cave_transition_black.gbapal");
+
+static const u16 gUnknown_085B2890[] = INCBIN_U16("graphics/misc/85B2890.gbapal");
+static const u16 gUnknown_085B28A0[] = INCBIN_U16("graphics/misc/85B28A0.gbapal");
+static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz");
+static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz");
+
+// text
+bool8 SetUpFieldMove_Flash(void)
+{
+ if (ShouldDoBrailleFlyEffect())
+ {
+ gSpecialVar_Result = GetCursorSelectionMonId();
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = sub_8179918;
+ return TRUE;
+ }
+ else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
+ {
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = hm2_flash;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void hm2_flash(void)
+{
+ u8 taskId = oei_task_add();
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ gTasks[taskId].data[8] = (uintptr_t)sub_81371B4 >> 16;
+ gTasks[taskId].data[9] = (uintptr_t)sub_81371B4;
+}
+
+static void sub_81371B4(void)
+{
+ PlaySE(SE_W115);
+ FlagSet(FLAG_SYS_USE_FLASH);
+ ScriptContext1_SetupScript(EventScript_2926F8);
+}
+
+static void sub_81371D4(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_81371EC(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void c2_change_map(void)
+{
+ u16 ime;
+
+ SetVBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+ ResetPaletteFade();
+ ResetTasks();
+ ResetSpriteData();
+ ime = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = ime;
+ SetVBlankCallback(sub_81371EC);
+ SetMainCallback2(sub_81371D4);
+ if (!sub_8137304())
+ SetMainCallback2(gMain.savedCallback);
+}
+
+static bool8 sub_8137304(void)
+{
+ u8 i;
+ u8 v0 = get_map_light_from_warp0();
+ u8 v1 = Overworld_GetMapTypeOfSaveblockLocation();
+
+ for (i = 0; gUnknown_085B27C8[i].unk0; i++)
+ {
+ if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
+ {
+ gUnknown_085B27C8[i].func();
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 sub_8137360(u8 a1, u8 a2)
+{
+ u8 i;
+ u8 v0 = a1;
+ u8 v1 = a2;
+
+ for (i = 0; gUnknown_085B27C8[i].unk0; i++)
+ {
+ if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
+ {
+ return gUnknown_085B27C8[i].unk2;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 fade_type_for_given_maplight_pair(u8 a1, u8 a2)
+{
+ u8 i;
+ u8 v0 = a1;
+ u8 v1 = a2;
+
+ for (i = 0; gUnknown_085B27C8[i].unk0; i++)
+ {
+ if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
+ {
+ return gUnknown_085B27C8[i].unk3;
+ }
+ }
+
+ return FALSE;
+}
+
+static void sub_81373F0(void)
+{
+ CreateTask(sub_8137404, 0);
+}
+
+static void sub_8137404(u8 taskId)
+{
+ gTasks[taskId].func = sub_8137420;
+}
+
+static void sub_8137420(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000);
+ LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800);
+ LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20);
+ LoadPalette(gUnknown_085B28A0, 0xE0, 0x10);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0
+ | BLDCNT_EFFECT_BLEND
+ | BLDCNT_TGT2_BG1
+ | BLDCNT_TGT2_BG2
+ | BLDCNT_TGT2_BG3
+ | BLDCNT_TGT2_OBJ
+ | BLDCNT_TGT2_BD);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(3)
+ | BGCNT_SCREENBASE(31)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_OBJ_ON);
+ gTasks[taskId].func = sub_81374C4;
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = 0;
+}
+
+static void sub_81374C4(u8 taskId)
+{
+ u16 count = gTasks[taskId].data[1];
+ u16 blend = count + 0x1000;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, blend);
+ if (count <= 0x10)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_813750C;
+ }
+}
+
+static void sub_813750C(u8 taskId)
+{
+ u16 count;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16));
+ count = gTasks[taskId].data[2];
+
+ if (count < 8)
+ {
+ gTasks[taskId].data[2]++;
+ LoadPalette(&gUnknown_085B28A0[count], 0xE0, 16 - 2 * count);
+ }
+ else
+ {
+ LoadPalette(gCaveTransitionPalette_White, 0, 0x20);
+ gTasks[taskId].func = sub_8137574;
+ gTasks[taskId].data[2] = 8;
+ }
+}
+
+static void sub_8137574(u8 taskId)
+{
+ if (gTasks[taskId].data[2])
+ gTasks[taskId].data[2]--;
+ else
+ SetMainCallback2(gMain.savedCallback);
+}
+
+static void sub_81375A8(void)
+{
+ CreateTask(sub_81375BC, 0);
+}
+
+static void sub_81375BC(u8 taskId)
+{
+ gTasks[taskId].func = sub_81375D8;
+}
+
+static void sub_81375D8(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000);
+ LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(3)
+ | BGCNT_SCREENBASE(31)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_OBJ_ON);
+ LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20);
+ LoadPalette(gCaveTransitionPalette_Black, 0, 0x20);
+ gTasks[taskId].func = sub_8137678;
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+}
+
+static void sub_8137678(u8 taskId)
+{
+ u16 count = gTasks[taskId].data[2];
+
+ if (count < 16)
+ {
+ gTasks[taskId].data[2]++;
+ gTasks[taskId].data[2]++;
+ LoadPalette(&gUnknown_085B2890[15 - count], 0xE0, 2 * (count + 1));
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16));
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0
+ | BLDCNT_EFFECT_BLEND
+ | BLDCNT_TGT2_BG1
+ | BLDCNT_TGT2_BG2
+ | BLDCNT_TGT2_BG3
+ | BLDCNT_TGT2_OBJ
+ | BLDCNT_TGT2_BD);
+ gTasks[taskId].func = sub_81376DC;
+ }
+}
+
+static void sub_81376DC(u8 taskId)
+{
+ u16 count = 16 - gTasks[taskId].data[1];
+ u16 blend = count + 0x1000;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, blend);
+ if (count)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ LoadPalette(gCaveTransitionPalette_Black, 0, 0x20);
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c
new file mode 100644
index 000000000..bee4d2c4b
--- /dev/null
+++ b/src/fldeff_groundshake.c
@@ -0,0 +1,299 @@
+#include "global.h"
+#include "global.fieldmap.h"
+#include "constants/flags.h"
+#include "constants/songs.h"
+#include "event_data.h"
+#include "field_camera.h"
+#include "field_map_obj.h"
+#include "malloc.h"
+#include "random.h"
+#include "roulette_util.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+
+// structures
+struct Struct203CF18 {
+ u8 taskId;
+ struct InnerStruct203CF18 unk4;
+}; //size = 0xC8
+
+// extern data
+extern const struct SpriteSheet gUnknown_08617D94[];
+extern const s16 gUnknown_08617D64[][3];
+
+// static functions
+static void sub_81BE808(u8 taskId);
+static void sub_81BE900(u8 taskId);
+static void sub_81BE968(void);
+static void sub_81BE9C0(u8 taskId);
+static void sub_81BEA00(u8 taskId);
+static void sub_81BEA20(void);
+static void sub_81BEAD8(struct Sprite* sprite);
+
+// rodata
+static const u8 gUnknown_08617E18[] = {0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b};
+
+static const union AnimCmd gSpriteAnim_8617E20[] =
+{
+ ANIMCMD_FRAME(0, 12),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8617E28[] =
+{
+ gSpriteAnim_8617E20,
+};
+
+static const struct OamData gUnknown_08617E2C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate gUnknown_08617E34 = {
+ 0x0FA0, 0xFFFF, &gUnknown_08617E2C, gSpriteAnimTable_8617E28, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
+};
+
+static const union AnimCmd gSpriteAnim_8617E4C[] =
+{
+ ANIMCMD_FRAME(0, 12),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gSpriteAnim_8617E54[] =
+{
+ gSpriteAnim_8617E4C,
+};
+
+static const struct OamData gSpriteAnim_8617E58 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate gUnknown_08617E60 = {
+ 0x0FA0, 0xFFFF, &gSpriteAnim_8617E58, gSpriteAnim_8617E54, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
+};
+
+// ewram
+EWRAM_DATA struct Struct203CF18 *gUnknown_0203CF18 = NULL;
+
+// text
+bool8 sub_81BE66C(void)
+{
+ if (!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A))
+ return 0;
+ return FlagGet(FLAG_0x14E);
+}
+
+void sub_81BE698(u8 taskId)
+{
+ sub_8151E50(&(gUnknown_0203CF18->unk4));
+}
+
+void sub_81BE6AC(void)
+{
+ gUnknown_0203CF18 = NULL;
+}
+
+void sub_81BE6B8(void)
+{
+ if(gUnknown_0203CF18 != NULL)
+ {
+ gUnknown_0203CF18 = NULL;
+ return;
+ }
+ if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E))
+ return;
+
+ gUnknown_0203CF18 = (struct Struct203CF18 *)AllocZeroed(sizeof(struct Struct203CF18));
+ sub_8151B3C(&(gUnknown_0203CF18->unk4));
+ sub_8151B68(&(gUnknown_0203CF18->unk4), gUnknown_08617E18);
+ sub_8151CA8(&(gUnknown_0203CF18->unk4), 1, 1);
+ gUnknown_0203CF18->taskId = CreateTask(sub_81BE698, 0xFF);
+}
+
+void sub_81BE72C(void)
+{
+ if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E) || gUnknown_0203CF18 == NULL)
+ return;
+ if(FuncIsActiveTask(sub_81BE698))
+ DestroyTask(gUnknown_0203CF18->taskId);
+ sub_8151D28(&(gUnknown_0203CF18->unk4), 1, 1);
+ sub_8151C50(&(gUnknown_0203CF18->unk4), 1, 1);
+ Free(gUnknown_0203CF18);
+ gUnknown_0203CF18 = NULL;
+}
+
+void sub_81BE79C(void)
+{
+ u16 rand;
+ bool8 chance;
+
+ if(VarGet(VAR_0x40CB) != 0)
+ {
+ FlagClear(FLAG_0x14E);
+ return;
+ }
+ rand = Random();
+ chance = rand & 1;
+ if(FlagGet(FLAG_0x09D) == TRUE)
+ chance = TRUE;
+ if(chance)
+ {
+ FlagSet(FLAG_0x14E);
+ sub_81BE6B8();
+ return;
+ }
+ FlagClear(FLAG_0x14E);
+}
+
+void sub_81BE7F4(void)
+{
+ CreateTask(sub_81BE808, 0x8);
+}
+
+static void sub_81BE808(u8 taskId)
+{
+ u8 mapObjectIdBuffer;
+ struct MapObject *fieldMapObject;
+ struct MapObject *playerAvatarMapObject;
+
+ TryGetFieldObjectIdByLocalIdAndMap(0x2D, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectIdBuffer);
+ fieldMapObject = &(gMapObjects[mapObjectIdBuffer]);
+ gSprites[fieldMapObject->spriteId].pos2.y += 4;
+ playerAvatarMapObject = &(gMapObjects[gPlayerAvatar.mapObjectId]);
+
+ if((gSprites[fieldMapObject->spriteId].pos1.y + gSprites[fieldMapObject->spriteId].pos2.y) >=
+ (gSprites[playerAvatarMapObject->spriteId].pos1.y + gSprites[playerAvatarMapObject->spriteId].pos2.y))
+ {
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+}
+
+static void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d)
+{
+ u8 taskId;
+
+ taskId = CreateTask(sub_81BE900, 0x9);
+ gTasks[taskId].data[0] = b;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = c;
+ gTasks[taskId].data[3] = d;
+ gTasks[taskId].data[4] = a;
+ SetCameraPanningCallback(NULL);
+ PlaySE(SE_W070);
+}
+
+static void sub_81BE900(u8 taskId)
+{
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ data[1]++;
+ if((data[1] % data[3]) == 0)
+ {
+ data[1] = 0;
+ data[2]--;
+ data[0] = -data[0];
+ data[4] = -data[4];
+ SetCameraPanning(data[0], data[4]);
+ if(!data[2])
+ {
+ sub_81BE968();
+ DestroyTask(taskId);
+ InstallCameraPanAheadCallback();
+ }
+ }
+}
+
+static void sub_81BE968(void)
+{
+ u8 taskId;
+
+ taskId = FindTaskIdByFunc(sub_81BE9C0);
+ if(taskId != 0xFF)
+ gTasks[taskId].data[0]++;
+}
+
+void sub_81BE994(void)
+{
+ LoadSpriteSheets(gUnknown_08617D94);
+ sub_81BEA20();
+ CreateTask(sub_81BE9C0, 0x8);
+ sp136_strengh_sound(2, 1, 16, 3);
+}
+
+static void sub_81BE9C0(u8 taskId)
+{
+ u16 *data;
+
+ data = gTasks[taskId].data;
+ data[1]++;
+ if(data[1] == 1000 || data[0] == 17)
+ gTasks[taskId].func = sub_81BEA00;
+}
+
+static void sub_81BEA00(u8 taskId)
+{
+ FreeSpriteTilesByTag(4000);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+static void sub_81BEA20(void)
+{
+ u8 i;
+ u8 spriteId;
+
+ for(i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08617E60, gUnknown_08617D64[i][0] + 120, gUnknown_08617D64[i][1], 8);
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].oam.paletteNum = 0;
+ gSprites[spriteId].data[0] = i;
+ }
+ for(i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08617E34, gUnknown_08617D64[i][0] + 115, gUnknown_08617D64[i][1] - 3, 8);
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].oam.paletteNum = 0;
+ gSprites[spriteId].data[0] = i;
+ }
+}
+
+static void sub_81BEAD8(struct Sprite* sprite)
+{
+ sprite->data[1] += 2;
+ sprite->pos2.y = (sprite->data[1] / 2);
+ if(((sprite->pos1.y) + (sprite->pos2.y)) > gUnknown_08617D64[sprite->data[0]][2])
+ {
+ DestroySprite(sprite);
+ sub_81BE968();
+ }
+}
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index b61cf9f32..d0a40a9a9 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -9,10 +9,10 @@
#include "strings.h"
#include "task.h"
-void sub_816166C(u8 taskId);
-void sub_81617B8(u8 taskId);
-void sub_81616C0(u8 taskId);
-void sub_8161724(u8 taskId);
+static void sub_816166C(u8 taskId);
+static void sub_81616C0(u8 taskId);
+static void sub_8161724(u8 taskId);
+static void sub_81617B8(u8 taskId);
bool8 SetUpFieldMove_SoftBoiled(void)
{
@@ -63,13 +63,13 @@ void sub_81615A8(u8 taskId)
sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C);
}
-void sub_816166C(u8 taskId)
+static void sub_816166C(u8 taskId)
{
PlaySE(SE_KAIFUKU);
sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAX_HP)/5, sub_81616C0);
}
-void sub_81616C0(u8 taskId)
+static void sub_81616C0(u8 taskId)
{
GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unkA], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
@@ -78,7 +78,7 @@ void sub_81616C0(u8 taskId)
gTasks[taskId].func = sub_8161724;
}
-void sub_8161724(u8 taskId)
+static void sub_8161724(u8 taskId)
{
if(sub_81B1BD4() == 1)
return;
@@ -92,7 +92,7 @@ void sub_8161724(u8 taskId)
gTasks[taskId].func = sub_81B1370;
}
-void sub_8161784(u8 taskId)
+static void sub_8161784(u8 taskId)
{
if(sub_81B1BD4() == 1)
return;
@@ -100,7 +100,7 @@ void sub_8161784(u8 taskId)
gTasks[taskId].func = sub_81B1370;
}
-void sub_81617B8(u8 taskId)
+static void sub_81617B8(u8 taskId)
{
PlaySE(SE_SELECT);
sub_81B1B5C(&gText_CantBeUsedOnPkmn, 0);
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index c1965d983..162479c73 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -7,9 +7,11 @@
#include "script.h"
#include "task.h"
-void FldEff_UseStrength(void);
-void sub_8145E74(void);
+// static functions
+static void FldEff_UseStrength(void);
+static void sub_8145E74(void);
+// text
bool8 SetUpFieldMove_Strength(void)
{
if (npc_before_player_of_type(87) == TRUE)
@@ -22,7 +24,7 @@ bool8 SetUpFieldMove_Strength(void)
return FALSE;
}
-void FldEff_UseStrength(void)
+static void FldEff_UseStrength(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
ScriptContext1_SetupScript(FieryPath_EventScript_2908FD);
@@ -37,7 +39,7 @@ bool8 sub_8145E2C(void)
return FALSE;
}
-void sub_8145E74(void)
+static void sub_8145E74(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
EnableBothScriptContexts();
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index 3dfcd640d..100e440a5 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -6,7 +6,6 @@
#include "field_effect.h"
#include "field_player_avatar.h"
#include "field_screen.h"
-#include "fldeff_groundshake.h"
#include "palette.h"
#include "party_menu.h"
#include "rom6.h"
@@ -20,6 +19,8 @@ void hm2_sweet_scent(void);
void sub_8159F5C(void);
void sub_8159FEC(u8 taskId);
void sub_815A090(u8 taskId);
+void sub_81BE6B8(void);
+void sub_81BE72C(void);
bool8 SetUpFieldMove_SweetScent(void)
{
diff --git a/src/fossil_specials.c b/src/fossil_specials.c
new file mode 100644
index 000000000..95fafc17b
--- /dev/null
+++ b/src/fossil_specials.c
@@ -0,0 +1,770 @@
+#include "global.h"
+#include "constants/flags.h"
+#include "constants/songs.h"
+#include "bg.h"
+#include "event_data.h"
+#include "field_camera.h"
+#include "field_map_obj.h"
+#include "fieldmap.h"
+#include "global.fieldmap.h"
+#include "gpu_regs.h"
+#include "malloc.h"
+#include "menu.h"
+#include "random.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "window.h"
+
+#define MIRAGE_TOWER_GFX_LENGTH (sizeof(gUnknown_08617274) + sizeof(gMirageTower_Gfx))
+#define MIRAGE_TOWER_PALETTE_LENGTH 0x800
+#define ROOT_FOSSIL_GFX_LENGTH sizeof(gRootFossil_Gfx)
+#define ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH 0x100
+
+//struct
+struct Struct8617DA4 {
+ u8 x;
+ u8 y;
+ u16 tileId;
+};
+
+struct Struct203CF10 {
+ u8 *buffer;
+ u8 curr_buffer_index;
+};
+
+struct DynamicSpriteFrameImage{
+ u8 *data;
+ u16 size;
+};
+
+struct Struct203CF0C {
+ u8 *frameImageTiles;
+ struct DynamicSpriteFrameImage *frameImage;
+ u8 spriteId;
+ u16 *unkC;
+ u16 unk10;
+};
+
+// static functions
+static void sub_81BED50(u8 taskId);
+static void sub_81BEBF4(u8 taskId);
+static void sub_81BF028(u8 taskId);
+static void sub_81BF248(struct Sprite *);
+/*static*/ void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e);
+
+// .rodata
+static const u8 gUnknown_08617274[] = {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00};
+static const u8 gMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp");
+static const u16 gUnknown_08617B94[] = INCBIN_U16("graphics/misc/mirage_tower.bin");
+static const u16 gRootFossil_Pal[] = INCBIN_U16("graphics/misc/fossil.gbapal");
+static const u8 gRootFossil_Gfx[] = INCBIN_U8("graphics/misc/fossil.4bpp");
+static const u8 gMirageTowerCrumbles_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower_crumbles.4bpp");
+static const u16 gMirageTowerCrumbles_Palette[] = INCBIN_U16("graphics/misc/mirage_tower_crumbles.gbapal");
+
+const s16 gUnknown_08617D64[][3] =
+ {
+ { 0, 10, 65},
+ { 17, 3, 50},
+ {-12, 0, 75},
+ { 10, 15, 90},
+ { 7, 8, 65},
+ {-18, 5, 75},
+ { 22, -10, 55},
+ {-24, -4, 65},
+ };
+
+const struct SpriteSheet gUnknown_08617D94[] =
+{
+ {gMirageTowerCrumbles_Gfx, 0x0080, 0x0fa0},
+ {NULL}
+};
+
+static const struct Struct8617DA4 gUnknown_08617DA4[] =
+ {
+ {0x12, 0x35, 0x251},
+ {0x13, 0x35, 0x251},
+ {0x14, 0x35, 0x251},
+ {0x12, 0x36, 0x251},
+ {0x13, 0x36, 0x251},
+ {0x14, 0x36, 0x251},
+ {0x12, 0x37, 0x251},
+ {0x13, 0x37, 0x251},
+ {0x14, 0x37, 0x251},
+ {0x12, 0x38, 0x251},
+ {0x13, 0x38, 0x251},
+ {0x14, 0x38, 0x251},
+ {0x12, 0x39, 0x259},
+ {0x13, 0x39, 0x259},
+ {0x14, 0x39, 0x259},
+ {0x12, 0x3A, 0x121},
+ {0x13, 0x3A, 0x121},
+ {0x14, 0x3A, 0x121},
+ };
+
+static const union AnimCmd gSpriteAnim_8617DEC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const struct OamData gOamData_8617DF4 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 3,
+ .affineParam = 0,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8617DFC[] =
+{
+ gSpriteAnim_8617DEC,
+};
+
+static const struct SpriteTemplate gUnknown_08617E00 = {
+ 0xFFFF, 0xFFFF, &gOamData_8617DF4, gSpriteAnimTable_8617DFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+// ewram
+EWRAM_DATA u8* gUnknown_0203CF04 = NULL;
+EWRAM_DATA u8* gUnknown_0203CF08 = NULL;
+EWRAM_DATA struct Struct203CF0C *gUnknown_0203CF0C = NULL;
+EWRAM_DATA struct Struct203CF10 *gUnknown_0203CF10 = NULL;
+EWRAM_DATA u16 *gUnknown_0203CF14 = NULL;
+
+// iwram
+IWRAM_DATA u16 gUnknown_030012A8[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+
+// text
+void sub_81BEB24(void)
+{
+ u8 i;
+ for(i = 0; i < (sizeof(gUnknown_08617DA4)/sizeof(gUnknown_08617DA4[0])); i++)
+ MapGridSetMetatileIdAt(gUnknown_08617DA4[i].x + 7, gUnknown_08617DA4[i].y + 7, gUnknown_08617DA4[i].tileId);
+ DrawWholeMapView();
+}
+
+void sub_81BEB54(void)
+{
+ CreateTask(sub_81BED50, 0x9);
+}
+
+void sub_81BEB68(void)
+{
+ CreateTask(sub_81BEBF4, 0x9);
+}
+
+void sub_81BEB7C(void)
+{
+ CreateTask(sub_81BF028, 0x9);
+}
+
+void sub_81BEB90(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gUnknown_0203CF14[0]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gUnknown_0203CF14[1]);
+}
+
+void sub_81BEBB4(u8 taskId)
+{
+ if(!(gTasks[taskId].data[0]))
+ {
+ gUnknown_0203CF14[0] = -gUnknown_0203CF14[0];
+ gTasks[taskId].data[0] = 2;
+ sub_81BEB90();
+ }
+ else
+ gTasks[taskId].data[0]--;
+}
+
+static void sub_81BEBF4(u8 taskId)
+{
+ u8 zero;
+
+ switch(gTasks[taskId].data[0])
+ {
+ case 0:
+ FreeAllWindowBuffers();
+ SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 2);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gUnknown_0203CF04 = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH);
+ gUnknown_0203CF08 = (u8 *)AllocZeroed(MIRAGE_TOWER_PALETTE_LENGTH);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ CpuSet(gUnknown_08617274, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH / 2);
+ LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ SetBgTilemapBuffer(0, gUnknown_0203CF08);
+ CopyToBgTilemapBufferRect_ChangePalette(0, &gUnknown_08617B94, 12, 29, 6, 12, 17);
+ CopyBgTilemapBufferToVram(0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ ShowBg(0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ sub_81BEB24();
+ gTasks[taskId].data[0]++;
+ break;
+ case 6:
+ gUnknown_0203CF14 = (u16 *)Alloc(4);
+ zero = 0;
+ gUnknown_0203CF14[0] = 2;
+ gUnknown_0203CF14[1] = zero;
+ CreateTask(sub_81BEBB4, 0xA);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+#define OUTER_BUFFER_LENGTH 0x60
+#define INNER_BUFFER_LENGTH 0x30
+static void sub_81BED50(u8 taskId)
+{
+ u8 anotherTaskId, j;
+
+
+ switch(gTasks[taskId].data[0])
+ {
+ case 1:
+ gUnknown_0203CF10 = (struct Struct203CF10 *)AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct Struct203CF10));
+ break;
+ case 3:
+ {
+ u16 i;
+ u16 left;
+ u32 index, next;
+
+ index = (u16)gTasks[taskId].data[3];
+ if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
+ {
+ if(gTasks[taskId].data[1] > 1)
+ {
+ index = (u8)index;
+ gUnknown_0203CF10[index].buffer = (u8 *)Alloc(INNER_BUFFER_LENGTH);
+ for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
+ gUnknown_0203CF10[index].buffer[i] = i;
+ for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
+ {
+ u16 rand1, rand2, temp;
+
+ rand1 = Random() % 0x30;
+ rand2 = Random() % 0x30;
+ temp = gUnknown_0203CF10[index].buffer[rand2];
+ gUnknown_0203CF10[index].buffer[rand2] = gUnknown_0203CF10[index].buffer[rand1];
+ gUnknown_0203CF10[index].buffer[rand1] = temp;
+ }
+ if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
+ gTasks[taskId].data[3]++;
+ gTasks[taskId].data[1] = 0;
+ }
+ gTasks[taskId].data[1]++;
+ }
+ index = (u8)gTasks[taskId].data[3];
+ for(left = (u8)gTasks[taskId].data[2]; left < (u16)index; left = next)
+ {
+ j = 0;
+ next = left + 1;
+ while(!j)
+ {
+ sub_81BF2B8(gUnknown_0203CF04, ((((OUTER_BUFFER_LENGTH - 1) - left) * INNER_BUFFER_LENGTH) + gUnknown_0203CF10[left].buffer[(gUnknown_0203CF10[left].curr_buffer_index)++]), 0, INNER_BUFFER_LENGTH, 1);
+ j++;
+ }
+ if(gUnknown_0203CF10[left].curr_buffer_index > (INNER_BUFFER_LENGTH - 1))
+ {
+ FREE_AND_SET_NULL(gUnknown_0203CF10[left].buffer);
+ gTasks[taskId].data[2]++;
+ if((left % 2) == 1)
+ gUnknown_0203CF14[1]--;
+ }
+ }
+ LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0);
+ if(gUnknown_0203CF10[OUTER_BUFFER_LENGTH - 1].curr_buffer_index > (INNER_BUFFER_LENGTH - 1))
+ break;
+ return;
+ }
+ case 4:
+ UnsetBgTilemapBuffer(0);
+ anotherTaskId = FindTaskIdByFunc(sub_81BEBB4);
+ if(anotherTaskId != 0xFF)
+ DestroyTask(anotherTaskId);
+ gUnknown_0203CF14[1] = gUnknown_0203CF14[0] = 0;
+ sub_81BEB90();
+ break;
+ case 5:
+ FREE_AND_SET_NULL(gUnknown_0203CF14);
+ FREE_AND_SET_NULL(gUnknown_0203CF10);
+ FREE_AND_SET_NULL(gUnknown_0203CF04);
+ FREE_AND_SET_NULL(gUnknown_0203CF08);
+ break;
+ case 6:
+ SetGpuRegBits(REG_OFFSET_BG2CNT, 0x2);
+ SetGpuRegBits(REG_OFFSET_BG0CNT, 0x0);
+ SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 0);
+ sub_81971D0();
+ break;
+ case 7:
+ ShowBg(0);
+ break;
+ case 8:
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+ gTasks[taskId].data[0]++;
+}
+
+#else
+ASM_DIRECT
+static void sub_81BED50(u8 taskId)
+{
+ 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, 0x10\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r1, =gTasks\n\
+ lsls r0, 2\n\
+ add r0, r10\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x8]\n\
+ subs r0, 0x1\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ adds r6, r1, 0\n\
+ cmp r0, 0x7\n\
+ bls _081BED7C\n\
+ b _081BF002\n\
+ _081BED7C:\n\
+ lsls r0, 2\n\
+ ldr r1, =_081BED90\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .pool\n\
+ .align 2, 0\n\
+ _081BED90:\n\
+ .4byte _081BEDB0\n\
+ .4byte _081BF002\n\
+ .4byte _081BEDC4\n\
+ .4byte _081BEF64\n\
+ .4byte _081BEF94\n\
+ .4byte _081BEFD0\n\
+ .4byte _081BEFF0\n\
+ .4byte _081BEFF8\n\
+ _081BEDB0:\n\
+ ldr r4, =gUnknown_0203CF10\n\
+ movs r0, 0xC0\n\
+ lsls r0, 2\n\
+ bl AllocZeroed\n\
+ str r0, [r4]\n\
+ b _081BF002\n\
+ .pool\n\
+ _081BEDC4:\n\
+ mov r1, r10\n\
+ lsls r0, r1, 2\n\
+ adds r1, r0, r1\n\
+ lsls r1, 3\n\
+ adds r2, r1, r6\n\
+ ldrh r3, [r2, 0xE]\n\
+ movs r4, 0xE\n\
+ ldrsh r1, [r2, r4]\n\
+ str r0, [sp, 0x8]\n\
+ cmp r1, 0x5F\n\
+ bgt _081BEE8A\n\
+ movs r1, 0xA\n\
+ ldrsh r0, [r2, r1]\n\
+ cmp r0, 0x1\n\
+ ble _081BEE7C\n\
+ lsls r0, r3, 24\n\
+ lsrs r4, r0, 24\n\
+ movs r0, 0x30\n\
+ bl Alloc\n\
+ ldr r3, =gUnknown_0203CF10\n\
+ ldr r1, [r3]\n\
+ lsls r2, r4, 3\n\
+ adds r1, r2, r1\n\
+ str r0, [r1]\n\
+ movs r5, 0\n\
+ adds r4, r2, 0\n\
+ _081BEDFA:\n\
+ ldr r0, [r3]\n\
+ adds r0, r4, r0\n\
+ ldr r0, [r0]\n\
+ adds r0, r5\n\
+ strb r5, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x2F\n\
+ bls _081BEDFA\n\
+ movs r5, 0\n\
+ ldr r7, =gUnknown_0203CF10\n\
+ adds r6, r2, 0\n\
+ _081BEE14:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x30\n\
+ bl __umodsi3\n\
+ adds r4, r0, 0\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x30\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r1, [r7]\n\
+ adds r1, r6, r1\n\
+ ldr r1, [r1]\n\
+ adds r0, r1, r0\n\
+ ldrb r2, [r0]\n\
+ adds r1, r4 \n\
+ ldrb r1, [r1]\n\
+ strb r1, [r0]\n\
+ ldr r0, [r7]\n\
+ adds r0, r6, r0\n\
+ ldr r0, [r0]\n\
+ adds r0, r4\n\
+ strb r2, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x2F\n\
+ bls _081BEE14\n\
+ ldr r0, =gTasks\n\
+ ldr r1, [sp, 0x8]\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ adds r2, r1, r0\n\
+ ldrh r3, [r2, 0xE]\n\
+ movs r4, 0xE\n\
+ ldrsh r1, [r2, r4]\n\
+ adds r6, r0, 0\n\
+ cmp r1, 0x5F\n\
+ bgt _081BEE78\n\
+ adds r0, r3, 0x1\n\
+ strh r0, [r2, 0xE]\n\
+ _081BEE78:\n\
+ movs r0, 0\n\
+ strh r0, [r2, 0xA]\n\
+ _081BEE7C:\n\
+ ldr r1, [sp, 0x8]\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ adds r1, r6\n\
+ ldrh r0, [r1, 0xA]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0xA]\n\
+ _081BEE8A:\n\
+ ldr r0, [sp, 0x8]\n\
+ add r0, r10\n\
+ lsls r0, 3\n\
+ adds r0, r6\n\
+ ldrb r4, [r0, 0xE]\n\
+ ldrb r5, [r0, 0xC]\n\
+ lsls r0, r4, 16\n\
+ cmp r5, r4\n\
+ bcs _081BEF32\n\
+ str r0, [sp, 0xC]\n\
+ _081BEE9E:\n\
+ movs r6, 0\n\
+ adds r0, r5, 0x1\n\
+ str r0, [sp, 0x4]\n\
+ lsls r4, r5, 3\n\
+ movs r2, 0x5F\n\
+ subs r1, r2, r5\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 4\n\
+ mov r9, r0\n\
+ _081BEEB2:\n\
+ ldr r0, =gUnknown_0203CF04\n\
+ ldr r0, [r0]\n\
+ ldr r7, =gUnknown_0203CF10\n\
+ ldr r3, [r7]\n\
+ adds r3, r4, r3\n\
+ ldrb r2, [r3, 0x4]\n\
+ adds r1, r2, 0x1\n\
+ strb r1, [r3, 0x4]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ ldr r1, [r3]\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ add r1, r9\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ movs r2, 0x1\n\
+ mov r8, r2\n\
+ str r2, [sp]\n\
+ movs r2, 0\n\
+ movs r3, 0x30\n\
+ bl sub_81BF2B8\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0\n\
+ beq _081BEEB2\n\
+ ldr r0, [r7]\n\
+ adds r1, r4, r0\n\
+ ldrb r0, [r1, 0x4]\n\
+ cmp r0, 0x2F\n\
+ bls _081BEF24\n\
+ ldr r0, [r1]\n\
+ bl Free\n\
+ ldr r0, [r7]\n\
+ adds r0, r4, r0\n\
+ movs r1, 0\n\
+ str r1, [r0]\n\
+ ldr r1, [sp, 0x8]\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ ldr r4, =gTasks\n\
+ adds r1, r4\n\
+ ldrh r0, [r1, 0xC]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0xC]\n\
+ mov r0, r8\n\
+ ands r5, r0\n\
+ cmp r5, 0x1\n\
+ bne _081BEF24\n\
+ ldr r0, =gUnknown_0203CF14\n\
+ ldr r1, [r0]\n\
+ ldrh r0, [r1, 0x2]\n\
+ subs r0, 0x1\n\
+ strh r0, [r1, 0x2]\n\
+ _081BEF24:\n\
+ ldr r1, [sp, 0x4]\n\
+ lsls r0, r1, 16\n\
+ lsrs r5, r0, 16\n\
+ ldr r2, [sp, 0xC]\n\
+ lsrs r0, r2, 16\n\
+ cmp r5, r0\n\
+ bcc _081BEE9E\n\
+ _081BEF32:\n\
+ ldr r0, =gUnknown_0203CF04\n\
+ ldr r1, [r0]\n\
+ movs r2, 0x92\n\
+ lsls r2, 4\n\
+ movs r0, 0\n\
+ movs r3, 0\n\
+ bl LoadBgTiles\n\
+ ldr r0, =gUnknown_0203CF10\n\
+ ldr r0, [r0]\n\
+ movs r4, 0xBE\n\
+ lsls r4, 2\n\
+ adds r0, r4\n\
+ ldrb r0, [r0, 0x4]\n\
+ cmp r0, 0x2F\n\
+ bhi _081BF002\n\
+ b _081BF014\n\
+ .pool\n\
+ _081BEF64:\n\
+ movs r0, 0\n\
+ bl UnsetBgTilemapBuffer\n\
+ ldr r0, =sub_81BEBB4\n\
+ bl FindTaskIdByFunc\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0xFF\n\
+ beq _081BEF7C\n\
+ bl DestroyTask\n\
+ _081BEF7C:\n\
+ ldr r0, =gUnknown_0203CF14\n\
+ ldr r1, [r0]\n\
+ movs r0, 0\n\
+ strh r0, [r1]\n\
+ strh r0, [r1, 0x2]\n\
+ bl sub_81BEB90\n\
+ b _081BF002\n\
+ .pool\n\
+ _081BEF94:\n\
+ ldr r4, =gUnknown_0203CF14\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ movs r5, 0\n\
+ str r5, [r4]\n\
+ ldr r4, =gUnknown_0203CF10\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ str r5, [r4]\n\
+ ldr r4, =gUnknown_0203CF04\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ str r5, [r4]\n\
+ ldr r4, =gUnknown_0203CF08\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ str r5, [r4]\n\
+ b _081BF002\n\
+ .pool\n\
+ _081BEFD0:\n\
+ movs r0, 0xC\n\
+ movs r1, 0x2\n\
+ bl SetGpuRegBits\n\
+ movs r0, 0x8\n\
+ movs r1, 0\n\
+ bl SetGpuRegBits\n\
+ movs r0, 0\n\
+ movs r1, 0x7\n\
+ movs r2, 0\n\
+ bl SetBgAttribute\n\
+ bl sub_81971D0\n\
+ b _081BF002\n\
+ _081BEFF0:\n\
+ movs r0, 0\n\
+ bl ShowBg\n\
+ b _081BF002\n\
+ _081BEFF8:\n\
+ mov r0, r10\n\
+ bl DestroyTask\n\
+ bl EnableBothScriptContexts\n\
+ _081BF002:\n\
+ ldr r0, =gTasks\n\
+ mov r2, r10\n\
+ lsls r1, r2, 2\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ ldrh r0, [r1, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0x8]\n\
+ _081BF014:\n\
+ add sp, 0x10\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void sub_81BF028(u8 taskId)
+{
+ u16 i;
+
+ switch(gTasks[taskId].data[0])
+ {
+ case 1:
+ gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(sizeof(struct Struct203CF0C));
+ gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_LENGTH);
+ gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *) AllocZeroed(sizeof(struct DynamicSpriteFrameImage));
+ gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16));
+ gUnknown_0203CF0C->unk10 = 0;
+ break;
+ case 2:
+ {
+ u8 *buffer;
+ buffer = gUnknown_0203CF0C->frameImageTiles;
+ for(i = 0; i < ROOT_FOSSIL_GFX_LENGTH; i++, buffer++)
+ *buffer = gRootFossil_Gfx[i];
+ }
+ break;
+ case 3:
+ gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles;
+ gUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_LENGTH;
+ break;
+ case 4:
+ {
+ u8 spriteId, zero;
+ struct SpriteTemplate fossilTemplate;
+
+ fossilTemplate = gUnknown_08617E00;
+ fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage);
+ spriteId = CreateSprite(&fossilTemplate, 128, -16, 1);
+ gUnknown_0203CF0C->spriteId = spriteId;
+ zero = 0;
+ gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero;
+ gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x;
+ gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1;
+ }
+ case 5:
+ for(i = 0; i < ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH; i++)
+ gUnknown_0203CF0C->unkC[i] = i;
+ break;
+ case 6:
+ {
+ u16 rand1, rand2, temp, j;
+ j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1;
+ for(i = 0; i <= j; i++)
+ {
+ rand1 = Random() % 0x100;
+ rand2 = Random() % 0x100;
+ j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1;
+ temp = gUnknown_0203CF0C->unkC[rand2];
+ gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1];
+ gUnknown_0203CF0C->unkC[rand1] = temp;
+ }
+ gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248;
+ break;
+ }
+ case 7:
+ if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy)
+ return;
+ DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]);
+ FREE_AND_SET_NULL(gUnknown_0203CF0C->unkC);;
+ FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImage);
+ FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImageTiles);
+ FREE_AND_SET_NULL(gUnknown_0203CF0C);
+ break;
+ case 8:
+ EnableBothScriptContexts();
+ }
+ ++gTasks[taskId].data[0];
+}
+
+static void sub_81BF248(struct Sprite *sprite)
+{
+ if (gUnknown_0203CF0C->unk10 >= (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH))
+ {
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else if (sprite->pos1.y >= 0x60)
+ {
+ u8 i;
+ for (i = 0; i < 2; i++)
+ {
+ sub_81BF2B8(gUnknown_0203CF0C->frameImageTiles, gUnknown_0203CF0C->unkC[gUnknown_0203CF0C->unk10++], 0, 16, 0);
+ }
+ StartSpriteAnim(sprite, 0);
+ }
+ else
+ {
+ sprite->pos1.y++;
+ }
+}
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..8c05f0828 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "item_menu.h"
#include "battle.h"
#include "battle_controllers.h"
#include "battle_frontier_2.h"
@@ -58,7 +59,6 @@ void load_bag_item_list_buffers(u8);
void bag_menu_print_pocket_names(u8*, u8*);
void bag_menu_copy_pocket_name_to_window(u32);
void bag_menu_draw_pocket_indicator_square(u8, u8);
-void AddBagVisualObject(u8);
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void);
void bag_menu_add_list_scroll_arrow_indicators_maybe(void);
void bag_menu_prepare_tmhm_move_window(void);
@@ -67,9 +67,8 @@ void Task_WallyTutorialBagMenu(u8);
void Task_BagMenu(u8);
void get_name(s8*, u16);
u16 ItemIdToBattleMoveId(u16);
-void ShakeBagVisual(void);
u16 BagGetItemIdByPocketPosition(u8, u16);
-void AddBagItemIconObject(u16, u8);
+void AddBagItemIconSprite(u16, u8);
void bag_menu_print_description_box_text(int);
void bag_menu_print_cursor(u8, u8);
void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
@@ -86,9 +85,6 @@ u8 GetSwitchBagPocketDirection(void);
void SwitchBagPocket(u8, s16, u16);
bool8 sub_81AC2C0(void);
void bag_menu_swap_items(u8);
-void SetBagVisualPocketId(u8, u8);
-void RemoveBagObject(u8);
-void AddSwitchPocketRotatingBallObject(s16);
void sub_81AC10C(u8);
void sub_81AC3C0(u8);
void sub_81AC498(u8);
@@ -128,7 +124,7 @@ void sub_81ABAC4(void);
void sub_81ABAE0(void);
u8 sub_81AB1F0(u8);
void sub_81AC23C(u8);
-void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu*);
+void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu*);
void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a);
void ItemMenu_UseOutOfBattle(u8 taskId);
void ItemMenu_Toss(u8 taskId);
@@ -251,46 +247,6 @@ const struct WindowTemplate gUnknown_086141AC[] = {
// .text
-struct BagStruct {
- void (*bagCallback)(void);
- u8 location;
- u8 pocket;
- u8 unk6[2];
- u16 cursorPosition[5];
- u16 scrollPosition[5];
-};
-
-struct UnkBagStruct {
- MainCallback unk0;
- u8 unk4[0x800];
- u8 unk804;
- u8 unk805;
- u8 unk806[10];
- u8 unk810[7];
- u8 unk817;
- u8 unk818;
- u8 unk819;
- u8 unk81A;
- u8 unk81B:4;
- u8 unk81B_1:2;
- u8 unk81B_3:1;
- u8 unk81B_2:1;
- u8 filler3[2];
- u8 unk81E;
- u8 unk81F;
- const u8* unk820;
- u8 unk824;
- u8 unk825;
- u8 filler[2];
- u8 unk828;
- u8 unk829[5];
- u8 unk82E[6];
- s16 unk834;
- u8 filler4[0xE];
- u8 unk844[32][32];
- u8 filler2[4];
-};
-
struct ListBuffer1 {
struct ListMenuItem subBuffers[65];
};
@@ -319,16 +275,12 @@ void (*gFieldCallback)(void);
extern u8 *gPocketNamesStringsTable[];
extern u8 gUnknown_08D9A88C[];
-extern struct CompressedSpriteSheet gUnknown_0857FB34;
-extern struct CompressedSpriteSheet gUnknown_0857FB3C;
-extern struct CompressedSpritePalette gUnknown_0857FB44;
extern struct ListMenuTemplate gUnknown_08613F9C;
-extern u8 gMoveNames[][0xD];
+extern const u8 gMoveNames[][0xD];
extern u8* gReturnToXStringsTable[];
extern u32 gUnknown_0203CE5E[];
-extern u8 EventScript_2736B3[];
+extern const u8 EventScript_2736B3[];
extern const u16 gUnknown_0860F074[];
-extern struct BattleMove gBattleMoves[];
void ResetBagScrollPositions(void)
{
@@ -412,7 +364,7 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)
gUnknown_0203CE54->unk81A = 0xFF;
gUnknown_0203CE54->unk81E = -1;
gUnknown_0203CE54->unk81F = -1;
- memset(&gUnknown_0203CE54->unk804, 0xFF, 12);
+ memset(gUnknown_0203CE54->unk804, 0xFF, sizeof(gUnknown_0203CE54->unk804));
memset(gUnknown_0203CE54->unk810, 0xFF, 10);
SetMainCallback2(CB2_Bag);
}
@@ -518,7 +470,7 @@ bool8 setup_bag_menu(void)
gMain.state++;
break;
case 15:
- AddBagVisualObject(gUnknown_0203CE58.pocket);
+ AddBagVisualSprite(gUnknown_0203CE58.pocket);
gMain.state++;
break;
case 16:
@@ -689,7 +641,7 @@ void get_name(s8 *dest, u16 itemId)
}
}
-void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu *unused)
+void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu *unused)
{
if (b != 1)
{
@@ -698,11 +650,11 @@ void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu *unused)
}
if (gUnknown_0203CE54->unk81A == 0xFF)
{
- RemoveBagItemIconObject(1 ^ gUnknown_0203CE54->unk81B_1);
+ RemoveBagItemIconSprite(1 ^ gUnknown_0203CE54->unk81B_1);
if (a != -2)
- AddBagItemIconObject(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1);
+ AddBagItemIconSprite(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1);
else
- AddBagItemIconObject(-1, gUnknown_0203CE54->unk81B_1);
+ AddBagItemIconSprite(-1, gUnknown_0203CE54->unk81B_1);
gUnknown_0203CE54->unk81B_1 ^= 1;
if (!gUnknown_0203CE54->unk81B_3)
bag_menu_print_description_box_text(a);
@@ -831,7 +783,7 @@ void task_close_bag_menu_2(u8 taskId)
s16* data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
if (gUnknown_0203CE54->unk0 != 0)
SetMainCallback2(gUnknown_0203CE54->unk0);
else
@@ -916,7 +868,7 @@ void bag_menu_inits_lists_menu(u8 taskId)
u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
bag_menu_RemoveBagItem_message_window(4);
- sub_81AE6C8(data[0], scrollPos, cursorPos);
+ DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
sub_81ABA88(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
@@ -968,7 +920,7 @@ void Task_BagMenu(u8 taskId)
{
if (sub_81AC2C0() == 1)
{
- sub_81AE860(data[0], scrollPos, cursorPos);
+ ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1)
{
PlaySE(SE_SELECT);
@@ -980,7 +932,7 @@ void Task_BagMenu(u8 taskId)
else
{
int r4 = ListMenuHandleInputGetItemId(data[0]);
- sub_81AE860(data[0], scrollPos, cursorPos);
+ ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
switch (r4)
{
case -1:
@@ -1039,7 +991,6 @@ u8 GetSwitchBagPocketDirection(void)
return 0;
}
-
void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
{
if (deltaBagPocketId == 1 && *bagPocketId == 4)
@@ -1050,13 +1001,11 @@ void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
*bagPocketId += deltaBagPocketId;
}
-#ifdef NONMATCHING
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
{
s16* data = gTasks[taskId].data;
u8 pocketId;
-
data[13] = 0;
data[12] = 0;
data[11] = deltaBagPocketId;
@@ -1064,9 +1013,9 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
{
ClearWindowTilemap(0);
ClearWindowTilemap(1);
- sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
schedule_bg_copy_tilemap_to_vram(0);
- gSprites[gUnknown_0203CE54->unk806[gUnknown_0203CE54->unk81B_1 ^ 1]].invisible = 1;
+ gSprites[gUnknown_0203CE54->unk804[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = 1;
sub_81AB824();
}
pocketId = gUnknown_0203CE58.pocket;
@@ -1086,160 +1035,10 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
schedule_bg_copy_tilemap_to_vram(2);
SetBagVisualPocketId(pocketId, 1);
- RemoveBagObject(1);
- AddSwitchPocketRotatingBallObject(deltaBagPocketId);
+ RemoveBagSprite(1);
+ AddSwitchPocketRotatingBallSprite(deltaBagPocketId);
SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func);
}
-#else
-__attribute__((naked))
-void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- sub sp, 0xC\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 16\n\
- lsrs r5, r1, 16\n\
- lsls r2, 16\n\
- lsls r0, r6, 2\n\
- adds r0, r6\n\
- lsls r0, 3\n\
- ldr r1, =gTasks + 0x8\n\
- adds r4, r0, r1\n\
- movs r0, 0\n\
- strh r0, [r4, 0x1A]\n\
- strh r0, [r4, 0x18]\n\
- strh r5, [r4, 0x16]\n\
- cmp r2, 0\n\
- bne _081AC026\n\
- movs r0, 0\n\
- bl ClearWindowTilemap\n\
- movs r0, 0x1\n\
- bl ClearWindowTilemap\n\
- ldrb r0, [r4]\n\
- ldr r3, =gUnknown_0203CE58\n\
- ldrb r2, [r3, 0x5]\n\
- lsls r2, 1\n\
- adds r1, r3, 0\n\
- adds r1, 0x12\n\
- adds r1, r2, r1\n\
- adds r3, 0x8\n\
- adds r2, r3\n\
- bl sub_81AE6C8\n\
- movs r0, 0\n\
- bl schedule_bg_copy_tilemap_to_vram\n\
- ldr r3, =gSprites\n\
- ldr r0, =gUnknown_0203CE54\n\
- ldr r2, [r0]\n\
- ldr r1, =0x0000081b\n\
- adds r0, r2, r1\n\
- ldrb r1, [r0]\n\
- lsls r1, 26\n\
- lsrs r1, 30\n\
- movs r0, 0x1\n\
- eors r0, r1\n\
- adds r2, r0\n\
- ldr r0, =0x00000806\n\
- adds r2, r0\n\
- ldrb r1, [r2]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- adds r0, 0x3E\n\
- ldrb r1, [r0]\n\
- movs r2, 0x4\n\
- orrs r1, r2\n\
- strb r1, [r0]\n\
- bl sub_81AB824\n\
-_081AC026:\n\
- ldr r4, =gUnknown_0203CE58\n\
- ldrb r1, [r4, 0x5]\n\
- add r0, sp, 0x8\n\
- strb r1, [r0]\n\
- lsls r1, r5, 24\n\
- asrs r1, 24\n\
- bl ChangeBagPocketId\n\
- lsls r0, r5, 16\n\
- asrs r1, r0, 16\n\
- adds r5, r0, 0\n\
- cmp r1, 0x1\n\
- bne _081AC07C\n\
- ldr r2, =gPocketNamesStringsTable\n\
- ldrb r0, [r4, 0x5]\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldr r0, [r0]\n\
- add r1, sp, 0x8\n\
- ldrb r1, [r1]\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- ldr r1, [r1]\n\
- bl bag_menu_print_pocket_names\n\
- movs r0, 0\n\
- bl bag_menu_copy_pocket_name_to_window\n\
- b _081AC09A\n\
- .pool\n\
-_081AC07C:\n\
- ldr r2, =gPocketNamesStringsTable\n\
- add r0, sp, 0x8\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldr r0, [r0]\n\
- ldrb r1, [r4, 0x5]\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- ldr r1, [r1]\n\
- bl bag_menu_print_pocket_names\n\
- movs r0, 0x8\n\
- bl bag_menu_copy_pocket_name_to_window\n\
-_081AC09A:\n\
- ldr r0, =gUnknown_0203CE58\n\
- ldrb r0, [r0, 0x5]\n\
- movs r1, 0\n\
- bl bag_menu_draw_pocket_indicator_square\n\
- add r0, sp, 0x8\n\
- ldrb r0, [r0]\n\
- movs r1, 0x1\n\
- bl bag_menu_draw_pocket_indicator_square\n\
- movs r0, 0xF\n\
- str r0, [sp]\n\
- movs r0, 0x10\n\
- str r0, [sp, 0x4]\n\
- movs r0, 0x2\n\
- movs r1, 0xB\n\
- movs r2, 0xE\n\
- movs r3, 0x2\n\
- bl FillBgTilemapBufferRect_Palette0\n\
- movs r0, 0x2\n\
- bl schedule_bg_copy_tilemap_to_vram\n\
- add r0, sp, 0x8\n\
- ldrb r0, [r0]\n\
- movs r1, 0x1\n\
- bl SetBagVisualPocketId\n\
- movs r0, 0x1\n\
- bl RemoveBagObject\n\
- asrs r0, r5, 16\n\
- bl AddSwitchPocketRotatingBallObject\n\
- ldr r1, =sub_81AC10C\n\
- ldr r2, =gTasks\n\
- lsls r0, r6, 2\n\
- adds r0, r6\n\
- lsls r0, 3\n\
- adds r0, r2\n\
- ldr r2, [r0]\n\
- adds r0, r6, 0\n\
- bl SetTaskFuncWithFollowupFunc\n\
- add sp, 0xC\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
void sub_81AC10C(u8 taskId)
{
@@ -1341,13 +1140,13 @@ void sub_81AC3C0(u8 taskId)
if (gMain.newKeys & SELECT_BUTTON)
{
PlaySE(SE_SELECT);
- sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
sub_81AC498(taskId);
}
else
{
r7 = ListMenuHandleInputGetItemId(data[0]);
- sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
sub_80D4FC8(0);
sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
switch (r7)
@@ -1382,7 +1181,7 @@ void sub_81AC498(u8 taskId)
{
sub_80D702C(gBagPockets[gUnknown_0203CE58.pocket].itemSlots, data[1], realPos);
gUnknown_0203CE54->unk81A = -1;
- sub_81AE6C8(data[0], scrollPos, cursorPos);
+ DestroyListMenuTask(data[0], scrollPos, cursorPos);
if (data[1] < realPos)
gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
@@ -1400,7 +1199,7 @@ void sub_81AC590(u8 taskId)
u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
gUnknown_0203CE54->unk81A = -1;
- sub_81AE6C8(data[0], scrollPos, cursorPos);
+ DestroyListMenuTask(data[0], scrollPos, cursorPos);
if (data[1] < (*scrollPos + *cursorPos))
gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
@@ -1772,7 +1571,7 @@ void Task_ActuallyToss(u8 taskId)
{
PlaySE(SE_SELECT);
RemoveBagItem(gSpecialVar_ItemId, data[8]);
- sub_81AE6C8(data[0], scrollPos, cursorPos);
+ DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
sub_81ABA88(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
@@ -1792,7 +1591,7 @@ void ItemMenu_Register(u8 taskId)
gSaveBlock1Ptr->registeredItem = 0;
else
gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId;
- sub_81AE6C8(data[0], scrollPos, cursorPos);
+ DestroyListMenuTask(data[0], scrollPos, cursorPos);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
@@ -2040,7 +1839,7 @@ void sub_81AD8C8(u8 taskId)
PlaySE(SE_REGI);
RemoveBagItem(gSpecialVar_ItemId, data[8]);
AddMoney(&gSaveBlock1Ptr->money, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]);
- sub_81AE6C8(data[0], scrollPos, cursorPos);
+ DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
sub_81ABA88(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
@@ -2213,7 +2012,7 @@ void Task_WallyTutorialBagMenu(u8 taskId)
case 0x132:
PlaySE(SE_SELECT);
bag_menu_remove_some_window();
- sub_81AE6C8(data[0], 0, 0);
+ DestroyListMenuTask(data[0], 0, 0);
RestoreBagAfterWallyTutorial();
unknown_ItemMenu_Confirm(taskId);
break;
diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c
new file mode 100644
index 000000000..1d9dbb106
--- /dev/null
+++ b/src/item_menu_icons.c
@@ -0,0 +1,678 @@
+#include "global.h"
+#include "sprite.h"
+#include "decompress.h"
+#include "item_menu.h"
+#include "item_icon.h"
+#include "item_menu_icons.h"
+#include "window.h"
+#include "menu_helpers.h"
+#include "berry.h"
+#include "graphics.h"
+#include "constants/items.h"
+
+struct CompressedTilesPal
+{
+ const u8 *tiles;
+ const u8 *pal;
+};
+
+extern void sub_80D5860(struct Sprite *sprite);
+extern void sub_80D58F8(struct Sprite *sprite);
+extern void sub_80D5968(struct Sprite *sprite);
+extern void sub_80D5A94(struct Sprite *sprite);
+extern void sub_80D5B48(struct Sprite *sprite);
+
+// this file's functions
+static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite);
+static void SpriteCB_ShakeBagVisual(struct Sprite *sprite);
+static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite);
+static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite);
+
+// static const rom data
+static const u16 gUnknown_0857F564[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal");
+static const u8 gUnknown_0857F584[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp");
+static const u8 gUnknown_0857F604[] = INCBIN_U8("graphics/unused/cherry.4bpp");
+static const u16 gUnknown_0857FA84[] = INCBIN_U16("graphics/unused/cherry.gbapal");
+
+static const struct OamData sOamData_857FAA4 =
+{
+ .y = 0,
+ .affineMode = 1,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FAAC[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FAB4[] =
+{
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FABC[] =
+{
+ ANIMCMD_FRAME(128, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FAC4[] =
+{
+ ANIMCMD_FRAME(192, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FACC[] =
+{
+ ANIMCMD_FRAME(256, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FAD4[] =
+{
+ ANIMCMD_FRAME(320, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FADC[] =
+{
+ sSpriteAnim_857FAAC,
+ sSpriteAnim_857FAB4,
+ sSpriteAnim_857FAC4,
+ sSpriteAnim_857FACC,
+ sSpriteAnim_857FAD4,
+ sSpriteAnim_857FABC
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FAF4[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FB04[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 254, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 2, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 254, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 2, 2),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB2C[] =
+{
+ sSpriteAffineAnim_857FAF4,
+ sSpriteAffineAnim_857FB04
+};
+
+const struct CompressedSpriteSheet gUnknown_0857FB34 =
+{
+ gBagMaleTiles, 0x3000, 100
+};
+
+const struct CompressedSpriteSheet gUnknown_0857FB3C =
+{
+ gBagFemaleTiles, 0x3000, 100
+};
+
+const struct CompressedSpritePalette gUnknown_0857FB44 =
+{
+ gBagPalette, 100
+};
+
+static const struct SpriteTemplate gUnknown_0857FB4C =
+{
+ .tileTag = 100,
+ .paletteTag = 100,
+ .oam = &sOamData_857FAA4,
+ .anims = sSpriteAnimTable_857FADC,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_857FB2C,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct OamData sOamData_857FB64 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 4,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FB6C[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FB74[] =
+{
+ sSpriteAnim_857FB6C
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FB78[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 8, 16),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FB88[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 248, 16),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB98[] =
+{
+ sSpriteAffineAnim_857FB78,
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB9C[] =
+{
+ sSpriteAffineAnim_857FB88,
+};
+
+static const struct SpriteSheet gUnknown_0857FBA0 =
+{
+ gUnknown_0857F584, 0x80, 101
+};
+
+static const struct SpritePalette gUnknown_0857FBA8 =
+{
+ gUnknown_0857F564, 101
+};
+
+static const struct SpriteTemplate gUnknown_0857FBB0 =
+{
+ .tileTag = 101,
+ .paletteTag = 101,
+ .oam = &sOamData_857FB64,
+ .anims = sSpriteAnimTable_857FB74,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_857FB98,
+ .callback = SpriteCB_SwitchPocketRotatingBallInit,
+};
+
+static const struct OamData sOamData_857FBC8 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 7,
+ .affineParam = 0
+};
+
+static const struct OamData sOamData_857FBD0 =
+{
+ .y = 0,
+ .affineMode = 3,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 7,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FBD8[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FBE0[] =
+{
+ sSpriteAnim_857FBD8
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_857FBE4[] =
+{
+ {&gDecompressionBuffer[0], 0x800},
+};
+
+static const struct SpriteTemplate gUnknown_0857FBEC =
+{
+ .tileTag = 65535,
+ .paletteTag = 30020,
+ .oam = &sOamData_857FBC8,
+ .anims = sSpriteAnimTable_857FBE0,
+ .images = sSpriteImageTable_857FBE4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FC04[] =
+{
+ AFFINEANIMCMD_FRAME(-1, -1, 253, 96),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(-2, -2, 255, 64),
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(0, -8, 0, 16),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FC3C[] =
+{
+ AFFINEANIMCMD_FRAME(-1, -1, 3, 96),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(-2, -2, 1, 64),
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(0, -8, 0, 16),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FC74[] =
+{
+ sSpriteAffineAnim_857FC04,
+ sSpriteAffineAnim_857FC3C
+};
+
+static const struct SpriteTemplate gUnknown_0857FC7C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x7544,
+ .oam = &sOamData_857FBD0,
+ .anims = sSpriteAnimTable_857FBE0,
+ .images = sSpriteImageTable_857FBE4,
+ .affineAnims = sSpriteAffineAnimTable_857FC74,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct CompressedTilesPal gBerryPicTable[] =
+{
+ {gBerryPic_Cheri, gBerryPalette_Cheri},
+ {gBerryPic_Chesto, gBerryPalette_Chesto},
+ {gBerryPic_Pecha, gBerryPalette_Pecha},
+ {gBerryPic_Rawst, gBerryPalette_Rawst},
+ {gBerryPic_Aspear, gBerryPalette_Aspear},
+ {gBerryPic_Leppa, gBerryPalette_Leppa},
+ {gBerryPic_Oran, gBerryPalette_Oran},
+ {gBerryPic_Persim, gBerryPalette_Persim},
+ {gBerryPic_Lum, gBerryPalette_Lum},
+ {gBerryPic_Sitrus, gBerryPalette_Sitrus},
+ {gBerryPic_Figy, gBerryPalette_Figy},
+ {gBerryPic_Wiki, gBerryPalette_Wiki},
+ {gBerryPic_Mago, gBerryPalette_Mago},
+ {gBerryPic_Aguav, gBerryPalette_Aguav},
+ {gBerryPic_Iapapa, gBerryPalette_Iapapa},
+ {gBerryPic_Razz, gBerryPalette_Razz},
+ {gBerryPic_Bluk, gBerryPalette_Bluk},
+ {gBerryPic_Nanab, gBerryPalette_Nanab},
+ {gBerryPic_Wepear, gBerryPalette_Wepear},
+ {gBerryPic_Pinap, gBerryPalette_Pinap},
+ {gBerryPic_Pomeg, gBerryPalette_Pomeg},
+ {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
+ {gBerryPic_Qualot, gBerryPalette_Qualot},
+ {gBerryPic_Hondew, gBerryPalette_Hondew},
+ {gBerryPic_Grepa, gBerryPalette_Grepa},
+ {gBerryPic_Tamato, gBerryPalette_Tamato},
+ {gBerryPic_Cornn, gBerryPalette_Cornn},
+ {gBerryPic_Magost, gBerryPalette_Magost},
+ {gBerryPic_Rabuta, gBerryPalette_Rabuta},
+ {gBerryPic_Nomel, gBerryPalette_Nomel},
+ {gBerryPic_Spelon, gBerryPalette_Spelon},
+ {gBerryPic_Pamtre, gBerryPalette_Pamtre},
+ {gBerryPic_Watmel, gBerryPalette_Watmel},
+ {gBerryPic_Durin, gBerryPalette_Durin},
+ {gBerryPic_Belue, gBerryPalette_Belue},
+ {gBerryPic_Liechi, gBerryPalette_Liechi},
+ {gBerryPic_Ganlon, gBerryPalette_Ganlon},
+ {gBerryPic_Salac, gBerryPalette_Salac},
+ {gBerryPic_Petaya, gBerryPalette_Petaya},
+ {gBerryPic_Apicot, gBerryPalette_Apicot},
+ {gBerryPic_Lansat, gBerryPalette_Lansat},
+ {gBerryPic_Starf, gBerryPalette_Starf},
+ {gBerryPic_Enigma, gBerryPalette_Enigma},
+};
+
+const struct CompressedSpriteSheet gUnknown_0857FDEC =
+{
+ gBerryCheckCircle_Gfx, 0x800, 10000
+};
+
+const struct CompressedSpritePalette gUnknown_0857FDF4 =
+{
+ gUnknown_08D9BEF0, 10000
+};
+
+static const struct OamData sOamData_857FDFC =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FE04[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FE0C[] =
+{
+ sSpriteAnim_857FE04
+};
+
+static const struct SpriteTemplate gUnknown_0857FE10 =
+{
+ .tileTag = 10000,
+ .paletteTag = 10000,
+ .oam = &sOamData_857FDFC,
+ .anims = sSpriteAnimTable_857FE0C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct SpriteTemplate gUnknown_0857FE28 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5860,
+};
+
+const struct SpriteTemplate gUnknown_0857FE40 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D58F8,
+};
+
+const struct SpriteTemplate gUnknown_0857FE58 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5968,
+};
+
+const struct SpriteTemplate gUnknown_0857FE70 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5A94,
+};
+
+const struct SpriteTemplate gUnknown_0857FE88 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5B48,
+};
+
+// code
+void RemoveBagSprite(u8 id)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[id];
+ if (*spriteId != 0xFF)
+ {
+ FreeSpriteTilesByTag(id + 100);
+ FreeSpritePaletteByTag(id + 100);
+ FreeSpriteOamMatrix(&gSprites[*spriteId]);
+ DestroySprite(&gSprites[*spriteId]);
+ *spriteId = 0xFF;
+ }
+}
+
+void AddBagVisualSprite(u8 bagPocketId)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[0];
+ *spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0);
+ SetBagVisualPocketId(bagPocketId, FALSE);
+}
+
+void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
+{
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ if (isSwitchingPockets)
+ {
+ sprite->pos2.y = -5;
+ sprite->callback = SpriteCB_BagVisualSwitchingPockets;
+ sprite->data[0] = bagPocketId + 1;
+ StartSpriteAnim(sprite, 0);
+ }
+ else
+ {
+ StartSpriteAnim(sprite, bagPocketId + 1);
+ }
+}
+
+static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
+{
+ if (sprite->pos2.y != 0)
+ {
+ sprite->pos2.y++;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, sprite->data[0]);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void ShakeBagVisual(void)
+{
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = SpriteCB_ShakeBagVisual;
+ }
+}
+
+static void SpriteCB_ShakeBagVisual(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void AddSwitchPocketRotatingBallSprite(s16 rotationDirection)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[1];
+ LoadSpriteSheet(&gUnknown_0857FBA0);
+ LoadSpritePalette(&gUnknown_0857FBA8);
+ *spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0);
+ gSprites[*spriteId].data[0] = rotationDirection;
+}
+
+static void update_switch_pocket_rotating_ball_coords(struct Sprite *sprite)
+{
+ sprite->centerToCornerVecX = sprite->data[1] - ((sprite->data[3] + 1) & 1);
+ sprite->centerToCornerVecY = sprite->data[1] - ((sprite->data[3] + 1) & 1);
+}
+
+static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite)
+{
+ sprite->oam.affineMode = 1;
+ if (sprite->data[0] == -1)
+ sprite->affineAnims = sSpriteAffineAnimTable_857FB98;
+ else
+ sprite->affineAnims = sSpriteAffineAnimTable_857FB9C;
+
+ InitSpriteAffineAnim(sprite);
+ sprite->data[1] = sprite->centerToCornerVecX;
+ sprite->data[1] = sprite->centerToCornerVecY;
+ update_switch_pocket_rotating_ball_coords(sprite);
+ sprite->callback = SpriteCB_SwitchPocketRotatingBallContinue;
+}
+
+static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite)
+{
+ sprite->data[3]++;
+ update_switch_pocket_rotating_ball_coords(sprite);
+ if (sprite->data[3] == 16)
+ RemoveBagSprite(1);
+}
+
+void AddBagItemIconSprite(u16 itemId, u8 id)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[id + 2];
+ if (*spriteId == 0xFF)
+ {
+ u8 iconSpriteId;
+
+ FreeSpriteTilesByTag(id + 102);
+ FreeSpritePaletteByTag(id + 102);
+ iconSpriteId = AddItemIconSprite(id + 102, id + 102, itemId);
+ if (iconSpriteId != MAX_SPRITES)
+ {
+ *spriteId = iconSpriteId;
+ gSprites[iconSpriteId].pos2.x = 24;
+ gSprites[iconSpriteId].pos2.y = 88;
+ }
+ }
+}
+
+void RemoveBagItemIconSprite(u8 id)
+{
+ RemoveBagSprite(id + 2);
+}
+
+void sub_80D4FAC(void)
+{
+ sub_8122344(&gUnknown_0203CE54->unk804[4], 8);
+}
+
+void sub_80D4FC8(u8 arg0)
+{
+ sub_81223FC(&gUnknown_0203CE54->unk804[4], 8, arg0);
+}
+
+void sub_80D4FEC(u8 arg0)
+{
+ sub_8122448(&gUnknown_0203CE54->unk804[4], 136, 120, (arg0 + 1) * 16);
+}
+
+static void sub_80D5018(void *mem0, void *mem1)
+{
+ u8 i, j;
+
+ memset(mem1, 0, 0x800);
+ mem1 += 0x100;
+ for (i = 0; i < 6; i++)
+ {
+ mem1 += 0x20;
+ for (j = 0; j < 6; j++)
+ {
+ memcpy(mem1, mem0, 0x20);
+ mem1 += 0x20;
+ mem0 += 0x20;
+ }
+ if (i != 5)
+ mem1 += 0x20;
+ }
+}
+
+static void sub_80D5070(u8 berryId)
+{
+ struct CompressedSpritePalette pal;
+
+ if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid())
+ {
+ // unknown empty if statement
+ }
+
+ pal.data = gBerryPicTable[berryId].pal;
+ pal.tag = 0x7544;
+ LoadCompressedObjectPalette(&pal);
+ LZDecompressWram(gBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]);
+ sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]);
+}
+
+u8 CreateBerryTagSprite(u8 id, s16 x, s16 y)
+{
+ sub_80D5070(id);
+ return CreateSprite(&gUnknown_0857FBEC, x, y, 0);
+}
+
+void FreeBerryTagSpritePalette(void)
+{
+ FreeSpritePaletteByTag(0x7544);
+}
+
+u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine)
+{
+ u8 spriteId;
+
+ FreeSpritePaletteByTag(0x7544);
+ sub_80D5070(berryId);
+ spriteId = CreateSprite(&gUnknown_0857FC7C, x, y, 0);
+ if (startAffine == TRUE)
+ StartSpriteAffineAnim(&gSprites[spriteId], 1);
+
+ return spriteId;
+}
+
+u8 CreateBerryFlavorCircleSprite(s16 x)
+{
+ return CreateSprite(&gUnknown_0857FE10, x, 116, 0);
+}
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/list_menu.c b/src/list_menu.c
new file mode 100644
index 000000000..c78d32bb3
--- /dev/null
+++ b/src/list_menu.c
@@ -0,0 +1,633 @@
+#include "global.h"
+#include "menu.h"
+#include "list_menu.h"
+#include "window.h"
+#include "text_window.h"
+#include "main.h"
+#include "task.h"
+#include "menu_indicators.h"
+#include "strings.h"
+#include "sound.h"
+#include "constants/songs.h"
+
+struct UnknownMysteryGiftLinkMenuStruct
+{
+ s32 field_0;
+ u8 field_4;
+ u8 field_5;
+ u8 field_6;
+};
+
+struct UnknownListMenuPals
+{
+ u8 cursorPal:4;
+ u8 fillValue:4;
+ u8 cursorShadowPal:4;
+ u8 lettersSpacing:6;
+ u8 field_2_2:6; // unused
+ u8 fontId:7;
+ u8 field_3_7:1;
+};
+
+extern struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84;
+
+// this file's functions
+static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
+static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown);
+static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count);
+static void ListMenuDrawCursor(struct ListMenu *list);
+static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2);
+static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind);
+
+// IWRAM common
+struct UnknownListMenuPals gUnknown_03006300;
+struct ListMenuTemplate gMultiuseListMenuTemplate;
+
+// code
+static void ListMenuDummyTask(u8 taskId)
+{
+
+}
+
+s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
+{
+ switch (gUnknown_0203CE84.field_4)
+ {
+ case 0:
+ default:
+ gUnknown_0203CE84.field_5 = AddWindow(windowTemplate);
+ switch (arg2)
+ {
+ case 2:
+ sub_809882C(gUnknown_0203CE84.field_5, tileNum, palNum);
+ case 1:
+ sub_8098858(gUnknown_0203CE84.field_5, tileNum, palNum / 16);
+ break;
+ }
+ gMultiuseListMenuTemplate = *listMenuTemplate;
+ gMultiuseListMenuTemplate.windowId = gUnknown_0203CE84.field_5;
+ gUnknown_0203CE84.field_6 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+ CopyWindowToVram(gUnknown_0203CE84.field_5, 1);
+ gUnknown_0203CE84.field_4 = 1;
+ break;
+ case 1:
+ gUnknown_0203CE84.field_0 = ListMenuHandleInputGetItemId(gUnknown_0203CE84.field_6);
+ if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_0203CE84.field_4 = 2;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ gUnknown_0203CE84.field_0 = LIST_B_PRESSED;
+ gUnknown_0203CE84.field_4 = 2;
+ }
+ if (gUnknown_0203CE84.field_4 == 2)
+ {
+ if (arg2 == 0)
+ {
+ ClearWindowTilemap(gUnknown_0203CE84.field_5);
+ }
+ else
+ {
+ switch (arg2)
+ {
+ case 0: // can never be reached, because of the if statement above
+ sub_819746C(gUnknown_0203CE84.field_5, FALSE);
+ break;
+ case 2:
+ case 1:
+ sub_819746C(gUnknown_0203CE84.field_5, FALSE);
+ break;
+ }
+ }
+
+ CopyWindowToVram(gUnknown_0203CE84.field_5, 1);
+ }
+ break;
+ case 2:
+ DestroyListMenuTask(gUnknown_0203CE84.field_6, NULL, NULL);
+ RemoveWindow(gUnknown_0203CE84.field_5);
+ gUnknown_0203CE84.field_4 = 0;
+ return gUnknown_0203CE84.field_0;
+ }
+
+ return -1;
+}
+
+u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
+{
+ u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
+ PutWindowTilemap(listMenuTemplate->windowId);
+ CopyWindowToVram(listMenuTemplate->windowId, 2);
+
+ return taskId;
+}
+
+// unused
+u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow)
+{
+ s32 i;
+
+ u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
+ for (i = 0; arg1[i].palNum != 0xFF; i++)
+ {
+ PutWindowRectTilemapOverridePalette(listMenuTemplate->windowId,
+ arg1[i].x,
+ arg1[i].y,
+ arg1[i].width,
+ arg1[i].height,
+ arg1[i].palNum);
+ }
+ CopyWindowToVram(listMenuTemplate->windowId, 2);
+
+ return taskId;
+}
+
+s32 ListMenuHandleInputGetItemId(u8 listTaskId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ return list->template.items[list->scrollOffset + list->selectedRow].id;
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ return LIST_B_PRESSED;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ ListMenuChangeSelection(list, TRUE, 1, FALSE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ ListMenuChangeSelection(list, TRUE, 1, TRUE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else // try to move by one window scroll
+ {
+ bool16 rightButton, leftButton;
+ switch (list->template.scrollMultiple)
+ {
+ case LIST_NO_MULTIPLE_SCROLL:
+ default:
+ leftButton = FALSE;
+ rightButton = FALSE;
+ break;
+ case LIST_MULTIPLE_SCROLL_DPAD:
+ leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT;
+ rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT;
+ break;
+ case LIST_MULTIPLE_SCROLL_L_R:
+ leftButton = gMain.newAndRepeatedKeys & L_BUTTON;
+ rightButton = gMain.newAndRepeatedKeys & R_BUTTON;
+ break;
+ }
+
+ if (leftButton)
+ {
+ ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else if (rightButton)
+ {
+ ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else
+ {
+ return LIST_NOTHING_CHOSEN;
+ }
+ }
+}
+
+void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (scrollOffset != NULL)
+ *scrollOffset = list->scrollOffset;
+ if (selectedRow != NULL)
+ *selectedRow = list->selectedRow;
+
+ if (list->unk_1E != 0xFF)
+ ListMenuRemoveCursorObject(list->unk_1E, list->template.cursorKind - 2);
+
+ DestroyTask(listTaskId);
+}
+
+void sub_81AE70C(u8 listTaskId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ ListMenuDrawCursor(list);
+ CopyWindowToVram(list->template.windowId, 2);
+}
+
+// unused
+void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ list->template.cursorPal = cursorPal;
+ list->template.fillValue = fillValue;
+ list->template.cursorShadowPal = cursorShadowPal;
+}
+
+// unused
+void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT, x);
+ SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y);
+}
+
+// unused
+s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow)
+{
+ struct ListMenu list;
+
+ list.template = *template;
+ list.scrollOffset = scrollOffset;
+ list.selectedRow = selectedRow;
+ list.unk_1C = 0;
+ list.unk_1D = 0;
+
+ if (keys == DPAD_UP)
+ ListMenuChangeSelection(&list, FALSE, 1, FALSE);
+ if (keys == DPAD_DOWN)
+ ListMenuChangeSelection(&list, FALSE, 1, TRUE);
+
+ if (newScrollOffset != NULL)
+ *newScrollOffset = list.scrollOffset;
+ if (newSelectedRow != NULL)
+ *newSelectedRow = list.selectedRow;
+
+ return LIST_NOTHING_CHOSEN;
+}
+
+void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (arrayId != NULL)
+ *arrayId = list->scrollOffset + list->selectedRow;
+}
+
+void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (scrollOffset != NULL)
+ *scrollOffset = list->scrollOffset;
+ if (selectedRow != NULL)
+ *selectedRow = list->selectedRow;
+}
+
+u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+
+ return list->selectedRow * yMultiplier + list->template.upText_Y;
+}
+
+static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
+{
+ u8 listTaskId = CreateTask(ListMenuDummyTask, 0);
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ list->template = *listMenuTemplate;
+ list->scrollOffset = scrollOffset;
+ list->selectedRow = selectedRow;
+ list->unk_1C = 0;
+ list->unk_1D = 0;
+ list->unk_1E = 0xFF;
+ list->unk_1F = 0;
+
+ gUnknown_03006300.cursorPal = list->template.cursorPal;
+ gUnknown_03006300.fillValue = list->template.fillValue;
+ gUnknown_03006300.cursorShadowPal = list->template.cursorShadowPal;
+ gUnknown_03006300.lettersSpacing = list->template.lettersSpacing;
+ gUnknown_03006300.fontId = list->template.fontId;
+ gUnknown_03006300.field_3_7 = 0;
+
+ if (list->template.totalItems < list->template.maxShowed)
+ list->template.maxShowed = list->template.totalItems;
+
+ FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ ListMenuDrawCursor(list);
+ ListMenuCallSelectionChangedCallback(list, 1);
+
+ return listTaskId;
+}
+
+static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y)
+{
+ u8 colors[3];
+ if (gUnknown_03006300.field_3_7)
+ {
+ colors[0] = gUnknown_03006300.fillValue;
+ colors[1] = gUnknown_03006300.cursorPal;
+ colors[2] = gUnknown_03006300.cursorShadowPal;
+ AddTextPrinterParameterized2(list->template.windowId,
+ gUnknown_03006300.fontId,
+ x, y,
+ gUnknown_03006300.lettersSpacing,
+ 0, colors, TEXT_SPEED_FF, str);
+
+ gUnknown_03006300.field_3_7 = 0;
+ }
+ else
+ {
+ colors[0] = list->template.fillValue;
+ colors[1] = list->template.cursorPal;
+ colors[2] = list->template.cursorShadowPal;
+ AddTextPrinterParameterized2(list->template.windowId,
+ list->template.fontId,
+ x, y,
+ list->template.lettersSpacing,
+ 0, colors, TEXT_SPEED_FF, str);
+ }
+}
+
+static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count)
+{
+ s32 i;
+ u8 x, y;
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+
+ for (i = 0; i < count; i++)
+ {
+ if (list->template.items[startIndex].id != -3)
+ x = list->template.unk_12;
+ else
+ x = list->template.unk_11;
+
+ y = (yOffset + i) * yMultiplier + list->template.upText_Y;
+ if (list->template.unk_08 != NULL)
+ list->template.unk_08(list->template.windowId, list->template.items[startIndex].id, y);
+
+ ListMenuPrint(list, list->template.items[startIndex].name, x, y);
+ startIndex++;
+ }
+}
+
+static void ListMenuDrawCursor(struct ListMenu *list)
+{
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+ u8 x = list->template.cursor_X;
+ u8 y = list->selectedRow * yMultiplier + list->template.upText_Y;
+ switch (list->template.cursorKind)
+ {
+ case 0:
+ ListMenuPrint(list, gText_SelectorArrow2, x, y);
+ break;
+ case 1:
+ break;
+ case 2:
+ if (list->unk_1E == 0xFF)
+ list->unk_1E = ListMenuAddCursorObject(list, 0);
+ ListMenuUpdateCursorObject(list->unk_1E,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0);
+ break;
+ case 3:
+ if (list->unk_1E == 0xFF)
+ list->unk_1E = ListMenuAddCursorObject(list, 1);
+ ListMenuUpdateCursorObject(list->unk_1E,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1);
+ break;
+ }
+}
+
+static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
+{
+ struct CursorStruct cursor;
+
+ cursor.unk0 = 0;
+ cursor.unk1 = 0xA0;
+ cursor.unk2 = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2;
+ cursor.unk4 = GetFontAttribute(list->template.fontId, 1) + 2;
+ cursor.unk6 = 0x4000;
+ cursor.unk8 = 0xFFFF;
+ cursor.unkA = 0xF;
+
+ return ListMenuAddCursorObjectInternal(&cursor, cursorKind);
+}
+
+static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
+{
+ u8 cursorKind = list->template.cursorKind;
+ if (cursorKind == 0)
+ {
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+ u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0);
+ u8 height = GetMenuCursorDimensionByFont(list->template.fontId, 1);
+ FillWindowPixelRect(list->template.windowId,
+ (list->template.fillValue << 4) | (list->template.fillValue),
+ list->template.cursor_X,
+ selectedRow * yMultiplier + list->template.upText_Y,
+ width,
+ height);
+ }
+}
+
+static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, bool8 movingDown)
+{
+ u16 selectedRow = list->selectedRow;
+ u16 scrollOffset = list->scrollOffset;
+ u16 newRow;
+ u32 newScroll;
+
+ if (!movingDown)
+ {
+ if (list->template.maxShowed == 1)
+ newRow = 0;
+ else
+ newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1;
+
+ if (scrollOffset == 0)
+ {
+ while (selectedRow != 0)
+ {
+ selectedRow--;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+ else
+ {
+ while (selectedRow > newRow)
+ {
+ selectedRow--;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ newScroll = scrollOffset - 1;
+ }
+ }
+ else
+ {
+ if (list->template.maxShowed == 1)
+ newRow = 0;
+ else
+ newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2));
+
+ if (scrollOffset == list->template.totalItems - list->template.maxShowed)
+ {
+ while (selectedRow < list->template.maxShowed - 1)
+ {
+ selectedRow++;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+ else
+ {
+ while (selectedRow < newRow)
+ {
+ selectedRow++;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ newScroll = scrollOffset + 1;
+ }
+ }
+
+ list->selectedRow = newRow;
+ list->scrollOffset = newScroll;
+ return 2;
+}
+
+static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown)
+{
+ if (count >= list->template.maxShowed)
+ {
+ FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ }
+ else
+ {
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+
+ if (!movingDown)
+ {
+ u16 y, width, height;
+
+ ScrollWindow(list->template.windowId, 1, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, count);
+
+ y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y;
+ width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
+ height = (GetWindowAttribute(list->template.windowId, WINDOW_HEIGHT) * 8) - y;
+ FillWindowPixelRect(list->template.windowId,
+ (list->template.fillValue << 4) | (list->template.fillValue),
+ 0, y, width, height);
+ }
+ else
+ {
+ u16 width;
+
+ ScrollWindow(list->template.windowId, 0, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset + (list->template.maxShowed - count), list->template.maxShowed - count, count);
+
+ width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
+ FillWindowPixelRect(list->template.windowId,
+ (list->template.fillValue << 4) | (list->template.fillValue),
+ 0, 0, width, list->template.upText_Y);
+ }
+ }
+}
+
+static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown)
+{
+ u16 oldSelectedRow;
+ u8 selectionChange, i, cursorCount;
+
+ oldSelectedRow = list->selectedRow;
+ cursorCount = 0;
+ selectionChange = 0;
+ for (i = 0; i < count; i++)
+ {
+ do
+ {
+ u8 ret = ListMenuUpdateSelectedRowIndexAndScrollOffset(list, movingDown);
+ selectionChange |= ret;
+ if (ret != 2)
+ break;
+ cursorCount++;
+ } while (list->template.items[list->scrollOffset + list->selectedRow].id == -3);
+ }
+
+ if (updateCursorAndCallCallback)
+ {
+ switch (selectionChange)
+ {
+ case 0:
+ default:
+ return TRUE;
+ case 1:
+ ListMenuErasePrintedCursor(list, oldSelectedRow);
+ ListMenuDrawCursor(list);
+ ListMenuCallSelectionChangedCallback(list, 0);
+ CopyWindowToVram(list->template.windowId, 2);
+ break;
+ case 2:
+ case 3:
+ ListMenuErasePrintedCursor(list, oldSelectedRow);
+ ListMenuScroll(list, cursorCount, movingDown);
+ ListMenuDrawCursor(list);
+ ListMenuCallSelectionChangedCallback(list, 0);
+ CopyWindowToVram(list->template.windowId, 2);
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2)
+{
+ if (list->template.moveCursorFunc != NULL)
+ list->template.moveCursorFunc(list->template.items[list->scrollOffset + list->selectedRow].id, a2, list);
+}
+
+// unused
+void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
+{
+ gUnknown_03006300.cursorPal = cursorPal;
+ gUnknown_03006300.fillValue = fillValue;
+ gUnknown_03006300.cursorShadowPal = cursorShadowPal;
+ gUnknown_03006300.field_3_7 = 1;
+}
+
+void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list)
+{
+ if (!arg1)
+ PlaySE(SE_SELECT);
+}
diff --git a/src/pokeball.c b/src/pokeball.c
index 795a33827..8173c4a90 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -43,7 +43,7 @@ static void sub_80768F0(struct Sprite *sprite);
static void sub_80769A8(struct Sprite *sprite);
static void sub_80769CC(struct Sprite *sprite);
static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite);
-static u16 GetBankPokeballItemId(u8 bank);
+static u16 GetBattlerPokeballItemId(u8 battlerId);
// rom const data
@@ -317,11 +317,11 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
},
};
-#define tFrames data[0]
-#define tPan data[1]
-#define tThrowId data[2]
-#define tBank data[3]
-#define tOpponentBank data[4]
+#define tFrames data[0]
+#define tPan data[1]
+#define tThrowId data[2]
+#define tBattler data[3]
+#define tOpponentBattler data[4]
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
{
@@ -333,17 +333,17 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
taskId = CreateTask(Task_DoPokeballSendOutAnim, 5);
gTasks[taskId].tPan = pan;
gTasks[taskId].tThrowId = kindOfThrow;
- gTasks[taskId].tBank = gActiveBattler;
+ gTasks[taskId].tBattler = gActiveBattler;
return 0;
}
-#define sBank data[6]
+#define sBattler data[6]
static void Task_DoPokeballSendOutAnim(u8 taskId)
{
u16 throwCaseId;
- u8 bank;
+ u8 battlerId;
u16 itemId, ballId;
u8 ballSpriteId;
bool8 notSendOut = FALSE;
@@ -355,12 +355,12 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
}
throwCaseId = gTasks[taskId].tThrowId;
- bank = gTasks[taskId].tBank;
+ battlerId = gTasks[taskId].tBattler;
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
- itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
else
- itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
ballId = ItemIdToBallId(itemId);
LoadBallGfx(ballId);
@@ -372,15 +372,15 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
switch (throwCaseId)
{
case POKEBALL_PLAYER_SENDOUT:
- gBattlerTarget = bank;
+ gBattlerTarget = battlerId;
gSprites[ballSpriteId].pos1.x = 24;
gSprites[ballSpriteId].pos1.y = 68;
gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1;
break;
case POKEBALL_OPPONENT_SENDOUT:
- gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(bank, BANK_X_POS);
- gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(bank, BANK_Y_POS) + 24;
- gBattlerTarget = bank;
+ gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(battlerId, BANK_X_POS);
+ gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(battlerId, BANK_Y_POS) + 24;
+ gBattlerTarget = battlerId;
gSprites[ballSpriteId].data[0] = 0;
gSprites[ballSpriteId].callback = SpriteCB_OpponentMonSendOut;
break;
@@ -390,7 +390,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
break;
}
- gSprites[ballSpriteId].sBank = gBattlerTarget;
+ gSprites[ballSpriteId].sBattler = gBattlerTarget;
if (!notSendOut)
{
DestroyTask(taskId);
@@ -404,7 +404,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
gSprites[ballSpriteId].data[5] = -40;
sub_80A68D4(&gSprites[ballSpriteId]);
gSprites[ballSpriteId].oam.affineParam = taskId;
- gTasks[taskId].tOpponentBank = gBattlerTarget;
+ gTasks[taskId].tOpponentBattler = gBattlerTarget;
gTasks[taskId].func = TaskDummy;
PlaySE(SE_NAGERU);
}
@@ -415,7 +415,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
{
u16 ballId;
u8 taskId = sprite->oam.affineParam;
- u8 opponentBank = gTasks[taskId].tOpponentBank;
+ u8 opponentBattler = gTasks[taskId].tOpponentBattler;
u8 noOfShakes = gTasks[taskId].tThrowId;
StartSpriteAnim(sprite, 1);
@@ -425,10 +425,10 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
sprite->pos2.x = 0;
sprite->pos2.y = 0;
sprite->data[5] = 0;
- ballId = ItemIdToBallId(GetBankPokeballItemId(opponentBank));
+ ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler));
LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
- sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBank, 14, ballId);
- sprite->sBank = opponentBank;
+ sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId);
+ sprite->sBattler = opponentBattler;
sprite->data[7] = noOfShakes;
DestroyTask(taskId);
sprite->callback = sub_80756D4;
@@ -438,8 +438,8 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
#undef tFrames
#undef tPan
#undef tThrowId
-#undef tBank
-#undef tOpponentBank
+#undef tBattler
+#undef tOpponentBattler
static void sub_80756D4(struct Sprite *sprite)
{
@@ -452,9 +452,9 @@ static void sub_80756E0(struct Sprite *sprite)
{
sprite->data[5] = 0;
sprite->callback = sub_807574C;
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBank]], 2);
- AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]);
- gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] = 0;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 2);
+ AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0;
}
}
@@ -463,17 +463,17 @@ static void sub_807574C(struct Sprite *sprite)
sprite->data[5]++;
if (sprite->data[5] == 11)
PlaySE(SE_SUIKOMU);
- if (gSprites[gBattlerSpriteIds[sprite->sBank]].affineAnimEnded)
+ if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded)
{
StartSpriteAnim(sprite, 2);
- gSprites[gBattlerSpriteIds[sprite->sBank]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].invisible = TRUE;
sprite->data[5] = 0;
sprite->callback = sub_80757E4;
}
else
{
- gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] += 0x60;
- gSprites[gBattlerSpriteIds[sprite->sBank]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] >> 8;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] += 0x60;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] >> 8;
}
}
@@ -641,7 +641,7 @@ static void sub_8075970(struct Sprite *sprite)
#define tCryTaskSpecies data[0]
#define tCryTaskPan data[1]
#define tCryTaskWantedCry data[2]
-#define tCryTaskBank data[3]
+#define tCryTaskBattler data[3]
#define tCryTaskMonSpriteId data[4]
#define tCryTaskMonPtr1 data[5]
#define tCryTaskMonPtr2 data[6]
@@ -653,7 +653,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
u8 wantedCry = gTasks[taskId].tCryTaskWantedCry;
s8 pan = gTasks[taskId].tCryTaskPan;
u16 species = gTasks[taskId].tCryTaskSpecies;
- u8 bank = gTasks[taskId].tCryTaskBank;
+ u8 battlerId = gTasks[taskId].tCryTaskBattler;
u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId;
struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 0x10) | (u16)(gTasks[taskId].tCryTaskMonPtr2));
@@ -669,7 +669,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
PlayCry3(species, pan, 0);
else
PlayCry3(species, pan, 11);
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
break;
case 2:
@@ -685,7 +685,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
else
PlayCry4(species, pan, 12);
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
}
else
@@ -724,7 +724,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
else
PlayCry4(species, pan, 11);
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
break;
}
@@ -732,13 +732,13 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
{
- u8 bank = sprite->sBank;
+ u8 battlerId = sprite->sBattler;
u32 ballId;
StartSpriteAnim(sprite, 1);
- ballId = ItemIdToBallId(GetBankPokeballItemId(bank));
+ ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
- sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBank, 14, ballId);
+ sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId);
sprite->callback = HandleBallAnimEnd;
if (gMain.inBattle)
@@ -749,19 +749,19 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
u16 wantedCryCase;
u8 taskId;
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
- mon = &gEnemyParty[gBattlerPartyIndexes[bank]];
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
pan = 25;
}
else
{
- mon = &gPlayerParty[gBattlerPartyIndexes[bank]];
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
pan = -25;
}
species = GetMonData(mon, MON_DATA_SPECIES);
- if ((bank == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || bank == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
+ if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
@@ -777,39 +777,39 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->field_9_x1)
wantedCryCase = 0;
- else if (bank == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || bank == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
+ else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
wantedCryCase = 1;
else
wantedCryCase = 2;
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 1;
taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3);
gTasks[taskId].tCryTaskSpecies = species;
gTasks[taskId].tCryTaskPan = pan;
gTasks[taskId].tCryTaskWantedCry = wantedCryCase;
- gTasks[taskId].tCryTaskBank = bank;
- gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBank];
+ gTasks[taskId].tCryTaskBattler = battlerId;
+ gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler];
gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10;
gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon);
gTasks[taskId].tCryTaskState = 0;
}
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBank]], 1);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1);
- if (GetBattlerSide(sprite->sBank) == B_SIDE_OPPONENT)
- gSprites[gBattlerSpriteIds[sprite->sBank]].callback = sub_8039B58;
+ if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT)
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58;
else
- gSprites[gBattlerSpriteIds[sprite->sBank]].callback = sub_8039E44;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44;
- AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]);
- gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] = 0x1000;
+ AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
}
#undef tCryTaskSpecies
#undef tCryTaskPan
#undef tCryTaskWantedCry
-#undef tCryTaskBank
+#undef tCryTaskBattler
#undef tCryTaskMonSpriteId
#undef tCryTaskMonPtr1
#undef tCryTaskMonPtr2
@@ -828,37 +828,37 @@ static void sub_8075FB4(struct Sprite *sprite)
static void HandleBallAnimEnd(struct Sprite *sprite)
{
bool8 affineAnimEnded = FALSE;
- u8 bank = sprite->sBank;
+ u8 battlerId = sprite->sBattler;
- gSprites[gBattlerSpriteIds[bank]].invisible = FALSE;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE;
if (sprite->animEnded)
sprite->invisible = TRUE;
- if (gSprites[gBattlerSpriteIds[bank]].affineAnimEnded)
+ if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded)
{
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[bank]], 0);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
affineAnimEnded = TRUE;
}
else
{
- gSprites[gBattlerSpriteIds[bank]].data[1] -= 288;
- gSprites[gBattlerSpriteIds[bank]].pos2.y = gSprites[gBattlerSpriteIds[bank]].data[1] >> 8;
+ gSprites[gBattlerSpriteIds[battlerId]].data[1] -= 288;
+ gSprites[gBattlerSpriteIds[battlerId]].pos2.y = gSprites[gBattlerSpriteIds[battlerId]].data[1] >> 8;
}
if (sprite->animEnded && affineAnimEnded)
{
- s32 i, doneBanks;
+ s32 i, doneBattlers;
- gSprites[gBattlerSpriteIds[bank]].pos2.y = 0;
+ gSprites[gBattlerSpriteIds[battlerId]].pos2.y = 0;
gDoingBattleAnim = FALSE;
- gBattleSpritesDataPtr->healthBoxesData[bank].ballAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0;
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
- for (doneBanks = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
+ for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0)
- doneBanks++;
+ doneBattlers++;
}
- if (doneBanks == MAX_BATTLERS_COUNT)
+ if (doneBattlers == MAX_BATTLERS_COUNT)
{
for (i = 0; i < POKEBALL_COUNT; i++)
FreeBallGfx(i);
@@ -868,7 +868,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
static void sub_80760F8(struct Sprite *sprite)
{
- u8 bank = sprite->sBank;
+ u8 battlerId = sprite->sBattler;
sprite->data[4]++;
if (sprite->data[4] == 40)
@@ -883,21 +883,21 @@ static void sub_80760F8(struct Sprite *sprite)
}
else if (sprite->data[4] == 315)
{
- FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBank]].oam.matrixNum);
- DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]);
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBattler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
DestroySpriteAndFreeResources(sprite);
if (gMain.inBattle)
- gBattleSpritesDataPtr->healthBoxesData[bank].ballAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0;
}
}
static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite)
{
sprite->data[0] = 25;
- sprite->data[2] = GetBattlerSpriteCoord(sprite->sBank, 2);
- sprite->data[4] = GetBattlerSpriteCoord(sprite->sBank, 3) + 24;
+ sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24;
sprite->data[5] = -30;
- sprite->oam.affineParam = sprite->sBank;
+ sprite->oam.affineParam = sprite->sBattler;
sub_80A68D4(sprite);
sprite->callback = SpriteCB_PlayerMonSendOut_2;
}
@@ -923,7 +923,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
}
r4 = sprite->data[0];
sub_80A6F3C(sprite);
- sprite->data[7] += sprite->sBank / 3;
+ sprite->data[7] += sprite->sBattler / 3;
sprite->pos2.y += Sin(HIBYTE(sprite->data[7]), sprite->data[5]);
sprite->oam.affineParam += 0x100;
if ((sprite->oam.affineParam >> 8) % 3 != 0)
@@ -946,11 +946,11 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
sprite->pos1.y += sprite->pos2.y;
sprite->pos2.y = 0;
sprite->pos2.x = 0;
- sprite->sBank = sprite->oam.affineParam & 0xFF;
+ sprite->sBattler = sprite->oam.affineParam & 0xFF;
sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1
- && sprite->sBank == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))
+ && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))
sprite->callback = SpriteCB_ReleaseMon2FromBall;
else
sprite->callback = SpriteCB_ReleaseMonFromBall;
@@ -976,26 +976,26 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
{
sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1
- && sprite->sBank == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
+ && sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
sprite->callback = SpriteCB_ReleaseMon2FromBall;
else
sprite->callback = SpriteCB_ReleaseMonFromBall;
}
}
-#undef sBank
+#undef sBattler
static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d)
{
return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE);
}
-static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 bank, u32 arg2)
+static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2)
{
- return LaunchBallFadeMonTask(unFadeLater, bank, arg2, BALL_POKE);
+ return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE);
}
-void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species)
+void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species)
{
u8 spriteId;
@@ -1012,7 +1012,7 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oa
gSprites[monSpriteId].data[7] = species;
gSprites[spriteId].data[1] = g;
- gSprites[spriteId].data[2] = bank;
+ gSprites[spriteId].data[2] = battlerId;
gSprites[spriteId].data[3] = h;
gSprites[spriteId].data[4] = h >> 0x10;
gSprites[spriteId].oam.priority = oamPriority;
@@ -1027,7 +1027,7 @@ static void sub_8076524(struct Sprite *sprite)
{
u8 r5;
u8 r7 = sprite->data[0];
- u8 bank = sprite->data[2];
+ u8 battlerId = sprite->data[2];
u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16);
if (sprite->subpriority != 0)
@@ -1037,7 +1037,7 @@ static void sub_8076524(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
- sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, bank, r4);
+ sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4);
sprite->callback = sub_80765E0;
gSprites[r7].invisible = FALSE;
StartSpriteAffineAnim(&gSprites[r7], 1);
@@ -1175,16 +1175,16 @@ static void DestroySpriteAndFreeResources_(struct Sprite *sprite)
DestroySpriteAndFreeResources(sprite);
}
-void sub_8076918(u8 bank)
+void sub_8076918(u8 battlerId)
{
- struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[bank]];
+ struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]];
healthboxSprite->data[0] = 5;
healthboxSprite->data[1] = 0;
healthboxSprite->pos2.x = 0x73;
healthboxSprite->pos2.y = 0;
healthboxSprite->callback = sub_80769CC;
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
healthboxSprite->data[0] = -healthboxSprite->data[0];
healthboxSprite->data[1] = -healthboxSprite->data[1];
@@ -1192,7 +1192,7 @@ void sub_8076918(u8 bank)
healthboxSprite->pos2.y = -healthboxSprite->pos2.y;
}
gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]);
- if (GetBattlerPosition(bank) == B_POSITION_PLAYER_RIGHT)
+ if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)
healthboxSprite->callback = sub_80769A8;
}
@@ -1214,13 +1214,13 @@ static void sub_80769CC(struct Sprite *sprite)
sprite->callback = SpriteCallbackDummy;
}
-void DoHitAnimHealthboxEffect(u8 bank)
+void DoHitAnimHealthboxEffect(u8 battlerId)
{
u8 spriteId;
spriteId = CreateInvisibleSpriteWithCallback(SpriteCB_HitAnimHealthoxEffect);
gSprites[spriteId].data[0] = 1;
- gSprites[spriteId].data[1] = gHealthboxSpriteIds[bank];
+ gSprites[spriteId].data[1] = gHealthboxSpriteIds[battlerId];
gSprites[spriteId].callback = SpriteCB_HitAnimHealthoxEffect;
}
@@ -1267,10 +1267,10 @@ void FreeBallGfx(u8 ballId)
FreeSpritePaletteByTag(gBallSpritePalettes[ballId].tag);
}
-static u16 GetBankPokeballItemId(u8 bank)
+static u16 GetBattlerPokeballItemId(u8 battlerId)
{
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
- return GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
else
- return GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
}
diff --git a/src/pokeblock.c b/src/pokeblock.c
index b9a1f6bf3..b244409c4 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -91,7 +91,7 @@ static void sub_81362E0(void);
static void sub_8136344(void);
static void HandlePokeblockListMenuItems(void);
static void sub_81363BC(void);
-static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2);
+static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2);
static void PutPokeblockInfoText(void);
static void HandlePokeblockMenuCursor(u16 cursorPos, u16 arg1);
static void PutPokeblockListMenuString(u8 *dst, u16 pkblId);
@@ -319,18 +319,18 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate =
.unk_08 = NULL,
.totalItems = 0,
.maxShowed = 0,
- .unk_10 = 1,
+ .windowId = 1,
.unk_11 = 0,
.unk_12 = 1,
- .cursor_Y = 0,
+ .cursor_X = 0,
.upText_Y = 1,
- .cursorColor = 2,
- .fillColor = 0,
- .cursorShadowColor = 3,
- .unk_16_0 = FALSE,
- .spaceBetweenItems = 32,
- .unk_16_7 = FALSE,
- .unk_17_0 = 1,
+ .cursorPal = 2,
+ .fillValue = 0,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .unk_16_3 = 0,
+ .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
+ .fontId = 1,
.cursorKind = 1
};
@@ -620,7 +620,7 @@ static void HandlePokeblockListMenuItems(void)
sPokeblockMenu->items[i].id = LIST_B_PRESSED;
gMultiuseListMenuTemplate = sPokeblockListMenuTemplate;
- gMultiuseListMenuTemplate.unk_17_0 = 7;
+ gMultiuseListMenuTemplate.fontId = 7;
gMultiuseListMenuTemplate.totalItems = sPokeblockMenu->itemsNo;
gMultiuseListMenuTemplate.items = sPokeblockMenu->items;
gMultiuseListMenuTemplate.maxShowed = sPokeblockMenu->maxShowed;
@@ -639,7 +639,7 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId)
StringExpandPlaceholders(txtPtr, gText_LvVar1);
}
-static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2)
+static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2)
{
if (arg1 != TRUE)
{
@@ -869,7 +869,7 @@ static void Task_FreeDataAndExitPokeblockCase(u8 taskId)
if (sPokeblockMenu->caseId == PBLOCK_CASE_FEEDER || sPokeblockMenu->caseId == PBLOCK_CASE_GIVE)
gFieldCallback = sub_80AF168;
- sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
sub_8136418();
ResetSpriteData();
FreeAllSpritePalettes();
@@ -893,7 +893,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
{
if (gMain.newKeys & SELECT_BUTTON)
{
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos != sPokeblockMenu->itemsNo - 1)
{
PlaySE(SE_SELECT);
@@ -908,7 +908,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
u16 oldPosition = sSavedPokeblockData.lastItemPos;
s32 itemId = ListMenuHandleInputGetItemId(data[0]);
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (oldPosition != sSavedPokeblockData.lastItemPos)
{
HandlePokeblockMenuCursor(oldPosition, 5);
@@ -945,7 +945,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
if (gMain.newKeys & SELECT_BUTTON)
{
PlaySE(SE_SELECT);
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
HandlePokeblocksSwap(taskId, FALSE);
}
else
@@ -954,7 +954,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
u16 var = sSavedPokeblockData.lastItemPos;
s32 itemId = ListMenuHandleInputGetItemId(data[0]);
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (i != sSavedPokeblockData.lastItemPage || var != sSavedPokeblockData.lastItemPos)
{
for (i = 0; i < 9; i++)
@@ -996,7 +996,7 @@ static void HandlePokeblocksSwap(u8 taskId, bool8 noSwap)
u16 swappedFromId = sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos;
sPokeblockMenu->isSwapping = FALSE;
- sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (!noSwap && data[2] != swappedFromId && data[2] != swappedFromId - 1)
{
@@ -1112,7 +1112,7 @@ static void HandleErasePokeblock(u8 taskId)
lastPos = &sSavedPokeblockData.lastItemPos;
data = gTasks[taskId].data;
- sub_81AE6C8(data[0], lastPage, lastPos);
+ DestroyListMenuTask(data[0], lastPage, lastPos);
HandlePokeblockMenuCursor(*lastPos, 5);
SetMenuItemsCountAndMaxShowed();
sub_81362E0();
diff --git a/src/pokemon.c b/src/pokemon.c
index 25d532204..800b7c0cd 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -67,7 +67,6 @@ extern const union AnimCmd *gUnknown_082FF70C[];
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[];
extern const union AnimCmd *const *const gUnknown_08305D0C[];
extern const union AnimCmd *const *const gUnknown_0830536C[];
-extern const struct BattleMove gBattleMoves[];
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
extern const struct UnknownPokemonStruct3 gUnknown_08610970[];
extern const struct CompressedSpritePalette gMonPaletteTable[];
@@ -110,6 +109,9 @@ EWRAM_DATA struct SpriteTemplate gUnknown_0202499C = {0};
EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
// const rom data
+#include "data/battle_moves.h"
+static const u8 sUnreferencedData[] = {0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00};
+
const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151};
const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358};
const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411};
@@ -2196,7 +2198,7 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
(var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \
}
-s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef)
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 battlerIdAtk, u8 battlerIdDef)
{
u32 i;
s32 damage = 0;
@@ -2226,8 +2228,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (attacker->item == ITEM_ENIGMA_BERRY)
{
- attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect;
- attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam;
+ attackerHoldEffect = gEnigmaBerries[battlerIdAtk].holdEffect;
+ attackerHoldEffectParam = gEnigmaBerries[battlerIdAtk].holdEffectParam;
}
else
{
@@ -2237,8 +2239,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (defender->item == ITEM_ENIGMA_BERRY)
{
- defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect;
- defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam;
+ defenderHoldEffect = gEnigmaBerries[battlerIdDef].holdEffect;
+ defenderHoldEffectParam = gEnigmaBerries[battlerIdDef].holdEffectParam;
}
else
{
@@ -2249,13 +2251,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER)
attack *= 2;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, bankAtk))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerIdAtk))
attack = (110 * attack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, bankDef))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef))
defense = (110 * defense) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankAtk))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk))
spAttack = (110 * spAttack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankDef))
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef))
spDefense = (110 * spDefense) / 100;
for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++)
@@ -2440,7 +2442,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
}
// flash fire triggered
- if ((gBattleResources->flags->flags[bankAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
+ if ((gBattleResources->flags->flags[battlerIdAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
damage = (15 * damage) / 10;
}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 1e5245d70..834ca6f7d 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -26,6 +26,7 @@
#include "international_string_util.h"
#include "scanline_effect.h"
#include "menu_helpers.h"
+#include "daycare.h"
struct ContestMove
{
@@ -115,8 +116,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 +145,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 +2537,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);
}
@@ -3027,7 +3025,7 @@ void sub_81C31F0(u8 *a)
{
u8 level = gUnknown_0203CF1C->summary.metLevel;
if (level == 0)
- level = 5;
+ level = EGG_HATCH_LEVEL;
ConvertIntToDecimalStringN(a, level, 0, 3);
UnkTextUtil_SetPtrI(3, a);
}
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index cedd3aee4..45f0f5a9e 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -13,6 +13,7 @@
#include "constants/species.h"
#include "battle_interface.h"
#include "battle_anim.h"
+#include "data2.h"
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
@@ -25,14 +26,14 @@ extern u16 gBattle_BG3_Y;
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
-extern void sub_806A068(u16 species, u8 bankIdentity);
-extern void sub_806A12C(u16 backPicId, u8 bankIdentity);
+extern void sub_806A068(u16 species, u8 battlerPosition);
+extern void sub_806A12C(u16 backPicId, u8 battlerPosition);
// this file's functions
static void CB2_ReshowBattleScreenAfterMenu(void);
-static bool8 LoadBattlerSpriteGfx(u8 bank);
-static void CreateBattlerSprite(u8 bank);
-static void CreateHealthboxSprite(u8 bank);
+static bool8 LoadBattlerSpriteGfx(u8 battlerId);
+static void CreateBattlerSprite(u8 battlerId);
+static void CreateHealthboxSprite(u8 battlerId);
static void sub_80A95F4(void);
void nullsub_35(void)
@@ -217,16 +218,6 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
return TRUE;
}
-// todo: get rid of it once the struct is declared in a header
-struct MonCoords
-{
- // This would use a bitfield, but sub_8079F44
- // uses it as a u8 and casting won't match.
- u8 coords; // u8 x:4, y:4;
- u8 y_offset;
-};
-extern const struct MonCoords gTrainerBackPicCoords[];
-
static void CreateBattlerSprite(u8 battler)
{
if (battler < gBattlersCount)
diff --git a/src/scrcmd.c b/src/scrcmd.c
index b7e2474d4..a29e64979 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1612,7 +1612,7 @@ bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = sub_80EF370(v1);
+ u8 v2 = CountDigits(v1);
ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2);
return FALSE;
diff --git a/src/secret_base.c b/src/secret_base.c
index df754f2a0..c886912f4 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -6,8 +6,8 @@
#include "main.h"
#include "task.h"
#include "palette.h"
-#include "list_menu.h"
#include "window.h"
+#include "list_menu.h"
#include "menu.h"
#include "menu_helpers.h"
#include "menu_indicators.h"
@@ -66,7 +66,7 @@ EWRAM_DATA struct SecretBaseListMenuBuffer *gUnknown_0203A020 = NULL;
void sub_80E9C9C(u8 taskId);
void game_continue(u8 taskId);
-void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu);
+void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu);
void sub_80E9E00(u8 taskId);
void sub_80E9E44(u8 taskId);
void sub_80E9E90(u8 taskId);
@@ -913,13 +913,13 @@ void game_continue(u8 taskId)
data[3] = 8;
}
gMultiuseListMenuTemplate = gUnknown_0858D07C;
- gMultiuseListMenuTemplate.unk_10 = data[6];
+ gMultiuseListMenuTemplate.windowId = data[6];
gMultiuseListMenuTemplate.totalItems = data[0];
gMultiuseListMenuTemplate.items = gUnknown_0203A020->items;
gMultiuseListMenuTemplate.maxShowed = data[3];
}
-void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu)
+void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu)
{
if (flag != TRUE)
{
@@ -953,14 +953,14 @@ void sub_80E9E90(u8 taskId)
data = gTasks[taskId].data;
input = ListMenuHandleInputGetItemId(data[5]);
- sub_81AE860(data[5], &data[2], &data[1]);
+ ListMenuGetScrollAndRow(data[5], &data[2], &data[1]);
switch (input)
{
case -1:
break;
case -2:
PlaySE(SE_SELECT);
- sub_81AE6C8(data[5], NULL, NULL);
+ DestroyListMenuTask(data[5], NULL, NULL);
RemoveScrollIndicatorArrowPair(data[8]);
sub_819746C(data[6], 0);
ClearWindowTilemap(data[6]);
@@ -1042,7 +1042,7 @@ void sub_80EA08C(u8 taskId)
data = gTasks[taskId].data;
sub_8197434(0, 0);
- sub_81AE6C8(data[5], &data[2], &data[1]);
+ DestroyListMenuTask(data[5], &data[2], &data[1]);
gSaveBlock1Ptr->secretBases[data[4]].sbr_field_1_6 = 0;
game_continue(taskId);
sub_812225C(&data[2], &data[1], data[3], data[0]);
@@ -1061,7 +1061,7 @@ void sub_80EA13C(u8 taskId)
data = gTasks[taskId].data;
sub_8197434(0, 0);
- sub_81AE6C8(data[5], &data[2], &data[1]);
+ DestroyListMenuTask(data[5], &data[2], &data[1]);
sub_80E9E00(taskId);
gTasks[taskId].func = sub_80E9E90;
}
diff --git a/src/text.c b/src/text.c
index a2495d068..eacfd2a1f 100644
--- a/src/text.c
+++ b/src/text.c
@@ -4,18 +4,15 @@
#include "m4a.h"
#include "palette.h"
#include "sound.h"
+#include "constants/songs.h"
#include "string_util.h"
#include "window.h"
#include "text.h"
+#include "blit.h"
-extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-extern void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-extern void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
extern u8 GetKeypadIconWidth(u8 keypadIconId);
-extern void CopyWindowToVram(u8 windowId, u8 mode);
extern u16 Font6Func(struct TextPrinter *textPrinter);
extern u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
-extern void PlaySE(u16 songNum);
extern u8* UnkTextUtil_GetPtrI(u8 a1);
extern int sub_8197964();
@@ -27,7 +24,6 @@ static u16 gLastTextBgColor;
static u16 gLastTextFgColor;
static u16 gLastTextShadowColor;
-extern struct Main gMain;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
const struct FontInfo *gFonts;
@@ -1986,7 +1982,7 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
- PlaySE(5);
+ PlaySE(SE_SELECT);
}
}
return result;
@@ -2004,7 +2000,7 @@ bool16 TextPrinterWait(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
- PlaySE(5);
+ PlaySE(SE_SELECT);
}
}
return result;
diff --git a/src/tv.c b/src/tv.c
index 83cb18b3f..b7c2812fe 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -36,9 +36,7 @@
#include "decoration.h"
#include "secret_base.h"
#include "tv.h"
-
-extern const u8 gSpeciesNames[][11];
-extern const u8 gMoveNames[][13];
+#include "data2.h"
// Static type declarations
@@ -87,101 +85,100 @@ void tv_store_id_3x(TVShow *show);
void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx);
s8 FindEmptyTVSlotWithinFirstFiveShowsOfArray(TVShow *shows);
void FindActiveBroadcastByShowType_SetScriptResult(u8 kind);
-void InterviewBefore_BravoTrainerPkmnProfile(void);
-void InterviewBefore_NameRater(void);
+static void InterviewBefore_BravoTrainerPkmnProfile(void);
+static void InterviewBefore_NameRater(void);
u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies);
-void sub_80EFA88(void);
-void sub_80EF93C(TVShow *shows);
+static void sub_80EFA88(void);
+static void sub_80EF93C(TVShow *shows);
s8 sub_80EEE30(PokeNews *pokeNews);
bool8 sub_80EF0E4(u8 newsKind);
void ClearPokemonNewsI(u8 i);
-void sub_80F1254(TVShow *shows);
-void sub_80F12A4(TVShow *shows);
-void sub_80F0358(TVShow *player1, TVShow *player2, TVShow *player3, TVShow *player4);
-void sub_80F0C04(void);
-void sub_80F0708(void);
-void sub_80F0B64(void);
-s8 sub_80F06D0(TVShow *tvShows);
-bool8 sub_80F049C(TVShow *dest[], TVShow *src[], u8 idx);
-bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx);
-bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx);
-bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx);
-void sub_80F0B00(u8 showIdx);
-void sub_80F0B24(u16 species, u8 showIdx);
-void sub_80F0D60(PokeNews *player1, PokeNews *player2, PokeNews *player3, PokeNews *player4);
-void sub_80F0EEC(void);
-void sub_80F0F24(void);
-s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx);
-void sub_80F0E58(PokeNews *dest[], PokeNews *src[]);
-bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot);
+static void sub_80F1254(TVShow *shows);
+static void sub_80F12A4(TVShow *shows);
+static void sub_80F0358(TVShow *player1, TVShow *player2, TVShow *player3, TVShow *player4);
+static void sub_80F0C04(void);
+static void sub_80F0708(void);
+static void sub_80F0B64(void);
+static s8 sub_80F06D0(TVShow *tvShows);
+static bool8 sub_80F049C(TVShow *dest[], TVShow *src[], u8 idx);
+static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx);
+static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx);
+static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx);
+void SetTvShowInactive(u8 showIdx);
+static void sub_80F0B24(u16 species, u8 showIdx);
+static void sub_80F0D60(PokeNews *player1, PokeNews *player2, PokeNews *player3, PokeNews *player4);
+static void sub_80F0EEC(void);
+static void sub_80F0F24(void);
+static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx);
+static void sub_80F0E58(PokeNews *dest[], PokeNews *src[]);
+static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot);
void TVShowDone(void);
-void InterviewAfter_FanClubLetter(void);
-void InterviewAfter_RecentHappenings(void);
-void InterviewAfter_PkmnFanClubOpinions(void);
-void InterviewAfter_DummyShow4(void);
-void InterviewAfter_BravoTrainerPokemonProfile(void);
-void InterviewAfter_BravoTrainerBattleTowerProfile(void);
-void InterviewAfter_ContestLiveUpdates(void);
+static void InterviewAfter_FanClubLetter(void);
+static void InterviewAfter_RecentHappenings(void);
+static void InterviewAfter_PkmnFanClubOpinions(void);
+static void InterviewAfter_DummyShow4(void);
+static void InterviewAfter_BravoTrainerPokemonProfile(void);
+static void InterviewAfter_BravoTrainerBattleTowerProfile(void);
+static void InterviewAfter_ContestLiveUpdates(void);
void UpdateWorldOfMastersAndPutItOnTheAir(void);
void PutPokemonTodayFailedOnTheAir(void);
-void sub_80ED718(void);
-void sub_80EED88(void);
+static void sub_80ED718(void);
+static void sub_80EED88(void);
void TV_SortPurchasesByQuantity(void);
-void sub_80ED8B4(u16 days);
+static void sub_80ED8B4(u16 days);
void UpdateMassOutbreakTimeLeft(u16 days);
-void sub_80EF120(u16 days);
-void sub_80EDA48(u16 days);
-void sub_80EEB98(u16 days);
+static void sub_80EF120(u16 days);
+static void sub_80EDA48(u16 days);
+static void sub_80EEB98(u16 days);
void PutFishingAdviceShowOnTheAir(void);
-void sub_80EDA80(void);
u8 TV_MonDataIdxToRibbon(u8 monDataIdx);
-void sub_80EEBF4(u8 actionIdx);
+static void sub_80EEBF4(u8 actionIdx);
bool8 IsPriceDiscounted(u8 newsKind);
-void InterviewBefore_FanClubLetter(void);
-void InterviewBefore_RecentHappenings(void);
-void InterviewBefore_PkmnFanClubOpinions(void);
-void InterviewBefore_Dummy(void);
-void InterviewBefore_BravoTrainerBTProfile(void);
-void InterviewBefore_ContestLiveUpdates(void);
-void InterviewBefore_3CheersForPokeblocks(void);
-void InterviewBefore_FanClubSpecial(void);
+static void InterviewBefore_FanClubLetter(void);
+static void InterviewBefore_RecentHappenings(void);
+static void InterviewBefore_PkmnFanClubOpinions(void);
+static void InterviewBefore_Dummy(void);
+static void InterviewBefore_BravoTrainerBTProfile(void);
+static void InterviewBefore_ContestLiveUpdates(void);
+static void InterviewBefore_3CheersForPokeblocks(void);
+static void InterviewBefore_FanClubSpecial(void);
void ChangeBoxPokemonNickname_CB(void);
-void DoTVShowPokemonFanClubLetter(void);
-void DoTVShowRecentHappenings(void);
-void DoTVShowPokemonFanClubOpinions(void);
-void DoTVShowDummiedOut(void);
-void DoTVShowPokemonNewsMassOutbreak(void);
-void DoTVShowBravoTrainerPokemonProfile(void);
-void DoTVShowBravoTrainerBattleTower(void);
-void DoTVShowPokemonTodaySuccessfulCapture(void);
-void DoTVShowTodaysSmartShopper(void);
-void DoTVShowTheNameRaterShow(void);
-void DoTVShowPokemonContestLiveUpdates(void);
-void DoTVShowPokemonBattleUpdate(void);
-void DoTVShow3CheersForPokeblocks(void);
-void DoTVShowPokemonTodayFailedCapture(void);
-void DoTVShowPokemonAngler(void);
-void DoTVShowTheWorldOfMasters(void);
-void DoTVShowTodaysRivalTrainer(void);
-void DoTVShowDewfordTrendWatcherNetwork(void);
-void DoTVShowHoennTreasureInvestigators(void);
-void DoTVShowFindThatGamer(void);
-void DoTVShowBreakingNewsTV(void);
-void DoTVShowSecretBaseVisit(void);
-void DoTVShowPokemonLotteryWinnerFlashReport(void);
-void DoTVShowThePokemonBattleSeminar(void);
-void DoTVShowTrainerFanClubSpecial(void);
-void DoTVShowTrainerFanClub(void);
-void DoTVShowSpotTheCuties(void);
-void DoTVShowPokemonNewsBattleFrontier(void);
-void DoTVShowWhatsNo1InHoennToday(void);
-void DoTVShowSecretBaseSecrets(void);
-void DoTVShowSafariFanClub(void);
-void DoTVShowPokemonContestLiveUpdates2(void);
+static void DoTVShowPokemonFanClubLetter(void);
+static void DoTVShowRecentHappenings(void);
+static void DoTVShowPokemonFanClubOpinions(void);
+static void DoTVShowDummiedOut(void);
+static void DoTVShowPokemonNewsMassOutbreak(void);
+static void DoTVShowBravoTrainerPokemonProfile(void);
+static void DoTVShowBravoTrainerBattleTower(void);
+static void DoTVShowPokemonTodaySuccessfulCapture(void);
+static void DoTVShowTodaysSmartShopper(void);
+static void DoTVShowTheNameRaterShow(void);
+static void DoTVShowPokemonContestLiveUpdates(void);
+static void DoTVShowPokemonBattleUpdate(void);
+static void DoTVShow3CheersForPokeblocks(void);
+static void DoTVShowPokemonTodayFailedCapture(void);
+static void DoTVShowPokemonAngler(void);
+static void DoTVShowTheWorldOfMasters(void);
+static void DoTVShowTodaysRivalTrainer(void);
+static void DoTVShowDewfordTrendWatcherNetwork(void);
+static void DoTVShowHoennTreasureInvestigators(void);
+static void DoTVShowFindThatGamer(void);
+static void DoTVShowBreakingNewsTV(void);
+static void DoTVShowSecretBaseVisit(void);
+static void DoTVShowPokemonLotteryWinnerFlashReport(void);
+static void DoTVShowThePokemonBattleSeminar(void);
+static void DoTVShowTrainerFanClubSpecial(void);
+static void DoTVShowTrainerFanClub(void);
+static void DoTVShowSpotTheCuties(void);
+static void DoTVShowPokemonNewsBattleFrontier(void);
+static void DoTVShowWhatsNo1InHoennToday(void);
+static void DoTVShowSecretBaseSecrets(void);
+static void DoTVShowSafariFanClub(void);
+static void DoTVShowPokemonContestLiveUpdates2(void);
// .rodata
-const struct {
+static const struct {
u16 species;
u16 moves[4];
u8 level;
@@ -214,8 +211,7 @@ const struct {
}
};
-// TODO: Figure out what these are, and define constants in include/flags.h
-const u16 sGoldSymbolFlags[] = {
+static const u16 sGoldSymbolFlags[] = {
FLAG_SYS_TOWER_GOLD,
FLAG_SYS_DOME_GOLD,
FLAG_SYS_PALACE_GOLD,
@@ -225,7 +221,7 @@ const u16 sGoldSymbolFlags[] = {
FLAG_SYS_PYRAMID_GOLD
};
-const u16 sSilverSymbolFlags[] = {
+static const u16 sSilverSymbolFlags[] = {
FLAG_SYS_TOWER_SILVER,
FLAG_SYS_DOME_SILVER,
FLAG_SYS_PALACE_SILVER,
@@ -235,8 +231,7 @@ const u16 sSilverSymbolFlags[] = {
FLAG_SYS_PYRAMID_SILVER
};
-// TODO: Figure out what these are, and define constants in include/vars.h
-const u16 sNumberOneVarsAndThresholds[][2] = {
+static const u16 sNumberOneVarsAndThresholds[][2] = {
{VAR_DAILY_SLOTS, 100},
{VAR_DAILY_ROULETTE, 50},
{VAR_DAILY_WILDS, 100},
@@ -246,7 +241,7 @@ const u16 sNumberOneVarsAndThresholds[][2] = {
{VAR_DAILY_BP, 30}
};
-const u8 *const sPokeNewsTextGroup_Upcoming[] = {
+static const u8 *const sPokeNewsTextGroup_Upcoming[] = {
NULL,
gPokeNewsTextSlateport_Upcoming,
gPokeNewsTextGameCorner_Upcoming,
@@ -254,7 +249,7 @@ const u8 *const sPokeNewsTextGroup_Upcoming[] = {
gPokeNewsTextBlendMaster_Upcoming
};
-const u8 *const sPokeNewsTextGroup_Ongoing[] = {
+static const u8 *const sPokeNewsTextGroup_Ongoing[] = {
NULL,
gPokeNewsTextSlateport_Ongoing,
gPokeNewsTextGameCorner_Ongoing,
@@ -262,7 +257,7 @@ const u8 *const sPokeNewsTextGroup_Ongoing[] = {
gPokeNewsTextBlendMaster_Ongoing
};
-const u8 *const sPokeNewsTextGroup_Ending[] = {
+static const u8 *const sPokeNewsTextGroup_Ending[] = {
NULL,
gPokeNewsTextSlateport_Ending,
gPokeNewsTextGameCorner_Ending,
@@ -276,7 +271,7 @@ u8 *const gTVStringVarPtrs[] = {
gStringVar3
};
-const u8 *const sTVFanClubTextGroup[] = {
+static const u8 *const sTVFanClubTextGroup[] = {
gTVFanClubText00,
gTVFanClubText01,
gTVFanClubText02,
@@ -287,7 +282,7 @@ const u8 *const sTVFanClubTextGroup[] = {
gTVFanClubText07
};
-const u8 *const sTVRecentHappeninssTextGroup[] = {
+static const u8 *const sTVRecentHappeninssTextGroup[] = {
gTVRecentHappeningsText00,
gTVRecentHappeningsText01,
gTVRecentHappeningsText02,
@@ -296,7 +291,7 @@ const u8 *const sTVRecentHappeninssTextGroup[] = {
gTVRecentHappeningsText05
};
-const u8 *const sTVFanClubOpinionsTextGroup[] = {
+static const u8 *const sTVFanClubOpinionsTextGroup[] = {
gTVFanClubOpinionsText00,
gTVFanClubOpinionsText01,
gTVFanClubOpinionsText02,
@@ -304,11 +299,11 @@ const u8 *const sTVFanClubOpinionsTextGroup[] = {
gTVFanClubOpinionsText04
};
-const u8 *const sTVMassOutbreakTextGroup[] = {
+static const u8 *const sTVMassOutbreakTextGroup[] = {
gTVMassOutbreakText00
};
-const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
+static const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
gTVPokemonTodaySuccessfulText00,
gTVPokemonTodaySuccessfulText01,
gTVPokemonTodaySuccessfulText02,
@@ -323,7 +318,7 @@ const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
gTVPokemonTodaySuccessfulText11
};
-const u8 *const sTVTodaysSmartShopperTextGroup[] = {
+static const u8 *const sTVTodaysSmartShopperTextGroup[] = {
gTVTodaysSmartShopperText00,
gTVTodaysSmartShopperText01,
gTVTodaysSmartShopperText02,
@@ -339,7 +334,7 @@ const u8 *const sTVTodaysSmartShopperTextGroup[] = {
gTVTodaysSmartShopperText12
};
-const u8 *const sTVBravoTrainerTextGroup[] = {
+static const u8 *const sTVBravoTrainerTextGroup[] = {
gTVBravoTrainerText00,
gTVBravoTrainerText01,
gTVBravoTrainerText02,
@@ -351,7 +346,7 @@ const u8 *const sTVBravoTrainerTextGroup[] = {
gTVBravoTrainerText08
};
-const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
+static const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
gTV3CheersForPokeblocksText00,
gTV3CheersForPokeblocksText01,
gTV3CheersForPokeblocksText02,
@@ -360,7 +355,7 @@ const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
gTV3CheersForPokeblocksText05
};
-const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
+static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
gTVBravoTrainerBattleTowerText00,
gTVBravoTrainerBattleTowerText01,
gTVBravoTrainerBattleTowerText02,
@@ -378,7 +373,7 @@ const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
gTVBravoTrainerBattleTowerText14
};
-const u8 *const sTVContestLiveUpdatesTextGroup[] = {
+static const u8 *const sTVContestLiveUpdatesTextGroup[] = {
gTVContestLiveUpdatesText00,
gTVContestLiveUpdatesText01,
gTVContestLiveUpdatesText02,
@@ -414,7 +409,7 @@ const u8 *const sTVContestLiveUpdatesTextGroup[] = {
gTVContestLiveUpdatesText32
};
-const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
+static const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
gTVPokemonBattleUpdateText00,
gTVPokemonBattleUpdateText01,
gTVPokemonBattleUpdateText02,
@@ -425,7 +420,7 @@ const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
gTVPokemonBattleUpdateText07
};
-const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
+static const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
gTVTrainerFanClubSpecialText00,
gTVTrainerFanClubSpecialText01,
gTVTrainerFanClubSpecialText02,
@@ -434,7 +429,7 @@ const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
gTVTrainerFanClubSpecialText05
};
-const u8 *const sTVNameRaterTextGroup[] = {
+static const u8 *const sTVNameRaterTextGroup[] = {
gTVNameRaterText00,
gTVNameRaterText01,
gTVNameRaterText02,
@@ -456,14 +451,14 @@ const u8 *const sTVNameRaterTextGroup[] = {
gTVNameRaterText18
};
-const u8 *const sTVPokemonContestLiveUpdates2TextGroup[] = {
+static const u8 *const sTVPokemonContestLiveUpdates2TextGroup[] = {
gTVPokemonContestLiveUpdates2Text00,
gTVPokemonContestLiveUpdates2Text01,
gTVPokemonContestLiveUpdates2Text02,
gTVPokemonContestLiveUpdates2Text03
};
-const u8 *const sTVPokemonTodayFailedTextGroup[] = {
+static const u8 *const sTVPokemonTodayFailedTextGroup[] = {
gTVPokemonTodayFailedText00,
gTVPokemonTodayFailedText01,
gTVPokemonTodayFailedText02,
@@ -473,18 +468,18 @@ const u8 *const sTVPokemonTodayFailedTextGroup[] = {
gTVPokemonTodayFailedText06
};
-const u8 *const sTVPokemonAnslerTextGroup[] = {
+static const u8 *const sTVPokemonAnslerTextGroup[] = {
gTVPokemonAnglerText00,
gTVPokemonAnglerText01
};
-const u8 *const sTVWorldOfMastersTextGroup[] = {
+static const u8 *const sTVWorldOfMastersTextGroup[] = {
gTVWorldOfMastersText00,
gTVWorldOfMastersText01,
gTVWorldOfMastersText02
};
-const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
+static const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
gTVTodaysRivalTrainerText00,
gTVTodaysRivalTrainerText01,
gTVTodaysRivalTrainerText02,
@@ -498,7 +493,7 @@ const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
gTVTodaysRivalTrainerText10
};
-const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
+static const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
gTVDewfordTrendWatcherNetworkText00,
gTVDewfordTrendWatcherNetworkText01,
gTVDewfordTrendWatcherNetworkText02,
@@ -508,20 +503,20 @@ const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
gTVDewfordTrendWatcherNetworkText06
};
-const u8 *const sTVHoennTreasureInvestisatorsTextGroup[] = {
+static const u8 *const sTVHoennTreasureInvestisatorsTextGroup[] = {
gTVHoennTreasureInvestigatorsText00,
gTVHoennTreasureInvestigatorsText01,
gTVHoennTreasureInvestigatorsText02
};
-const u8 *const sTVFindThatGamerTextGroup[] = {
+static const u8 *const sTVFindThatGamerTextGroup[] = {
gTVFindThatGamerText00,
gTVFindThatGamerText01,
gTVFindThatGamerText02,
gTVFindThatGamerText03
};
-const u8 *const sTVBreakinsNewsTextGroup[] = {
+static const u8 *const sTVBreakinsNewsTextGroup[] = {
gTVBreakingNewsText00,
gTVBreakingNewsText01,
gTVBreakingNewsText02,
@@ -537,7 +532,7 @@ const u8 *const sTVBreakinsNewsTextGroup[] = {
gTVBreakingNewsText12
};
-const u8 *const sTVSecretBaseVisitTextGroup[] = {
+static const u8 *const sTVSecretBaseVisitTextGroup[] = {
gTVSecretBaseVisitText00,
gTVSecretBaseVisitText01,
gTVSecretBaseVisitText02,
@@ -554,11 +549,11 @@ const u8 *const sTVSecretBaseVisitTextGroup[] = {
gTVSecretBaseVisitText13
};
-const u8 *const sTVPokemonLotteryWinnerFlashReportTextGroup[] = {
+static const u8 *const sTVPokemonLotteryWinnerFlashReportTextGroup[] = {
gTVPokemonLotteryWinnerFlashReportText00
};
-const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
+static const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
gTVThePokemonBattleSeminarText00,
gTVThePokemonBattleSeminarText01,
gTVThePokemonBattleSeminarText02,
@@ -568,7 +563,7 @@ const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
gTVThePokemonBattleSeminarText06
};
-const u8 *const sTVTrainerFanClubTextGroup[] = {
+static const u8 *const sTVTrainerFanClubTextGroup[] = {
gTVTrainerFanClubText00,
gTVTrainerFanClubText01,
gTVTrainerFanClubText02,
@@ -583,7 +578,7 @@ const u8 *const sTVTrainerFanClubTextGroup[] = {
gTVTrainerFanClubText11
};
-const u8 *const sTVCutiesTextGroup[] = {
+static const u8 *const sTVCutiesTextGroup[] = {
gTVCutiesText00,
gTVCutiesText01,
gTVCutiesText02,
@@ -602,7 +597,7 @@ const u8 *const sTVCutiesTextGroup[] = {
gTVCutiesText15
};
-const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
+static const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
gTVPokemonNewsBattleFrontierText00,
gTVPokemonNewsBattleFrontierText01,
gTVPokemonNewsBattleFrontierText02,
@@ -624,7 +619,7 @@ const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
gTVPokemonNewsBattleFrontierText18
};
-const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
+static const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText00,
gTVWhatsNo1InHoennTodayText01,
gTVWhatsNo1InHoennTodayText02,
@@ -636,7 +631,7 @@ const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText08
};
-const u8 *const sTVSecretBaseSecretsTextGroup[] = {
+static const u8 *const sTVSecretBaseSecretsTextGroup[] = {
gTVSecretBaseSecretsText00,
gTVSecretBaseSecretsText01,
gTVSecretBaseSecretsText02,
@@ -682,7 +677,7 @@ const u8 *const sTVSecretBaseSecretsTextGroup[] = {
gTVSecretBaseSecretsText42
};
-const u8 *const sTVSafariFanClubTextGroup[] = {
+static const u8 *const sTVSafariFanClubTextGroup[] = {
gTVSafariFanClubText00,
gTVSafariFanClubText01,
gTVSafariFanClubText02,
@@ -696,7 +691,7 @@ const u8 *const sTVSafariFanClubTextGroup[] = {
gTVSafariFanClubText10
};
-const u8 *const sTVInSearchOfTrainersTextGroup[] = {
+static const u8 *const sTVInSearchOfTrainersTextGroup[] = {
gTVInSearchOfTrainersText00,
gTVInSearchOfTrainersText01,
gTVInSearchOfTrainersText02,
@@ -1253,7 +1248,7 @@ void tv_store_id_2x(TVShow *show)
show->common.trainerIdHi = id >> 8;
}
-void InterviewAfter_ContestLiveUpdates(void)
+static void InterviewAfter_ContestLiveUpdates(void)
{
TVShow *show;
TVShow *show2;
@@ -1281,7 +1276,7 @@ void InterviewAfter_ContestLiveUpdates(void)
}
}
-void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3)
+void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent)
{
TVShow *show;
u8 name[32];
@@ -1308,21 +1303,21 @@ void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3)
{
show->battleUpdate.battleType = 0;
}
- show->battleUpdate.move = a1;
- show->battleUpdate.species2 = a2;
- show->battleUpdate.species = a3;
- StringCopy(name, gLinkPlayers[a0].name);
+ show->battleUpdate.move = move;
+ show->battleUpdate.speciesPlayer = speciesPlayer;
+ show->battleUpdate.speciesOpponent = speciesOpponent;
+ StringCopy(name, gLinkPlayers[opponentLinkPlayerId].name);
StripExtCtrlCodes(name);
StringCopy(show->battleUpdate.linkOpponentName, name);
tv_store_id_2x(show);
show->battleUpdate.language = gGameLanguage;
- if (show->battleUpdate.language == LANGUAGE_JAPANESE || gLinkPlayers[a0].language == LANGUAGE_JAPANESE)
+ if (show->battleUpdate.language == LANGUAGE_JAPANESE || gLinkPlayers[opponentLinkPlayerId].language == LANGUAGE_JAPANESE)
{
show->battleUpdate.linkOpponentLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->battleUpdate.linkOpponentLanguage = gLinkPlayers[a0].language;
+ show->battleUpdate.linkOpponentLanguage = gLinkPlayers[opponentLinkPlayerId].language;
}
}
}
@@ -1472,7 +1467,7 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
}
}
-void InterviewAfter_BravoTrainerPokemonProfile(void)
+static void InterviewAfter_BravoTrainerPokemonProfile(void)
{
TVShow *show;
TVShow *show2;
@@ -1538,7 +1533,7 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 a0)
}
}
-void InterviewAfter_BravoTrainerBattleTowerProfile(void)
+static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
{
TVShow *show;
@@ -1671,7 +1666,7 @@ void PutLilycoveContestLadyShowOnTheAir(void)
}
}
-void InterviewAfter_FanClubLetter(void)
+static void InterviewAfter_FanClubLetter(void)
{
TVShow *show;
@@ -1684,7 +1679,7 @@ void InterviewAfter_FanClubLetter(void)
show->fanclubLetter.language = gGameLanguage;
}
-void InterviewAfter_RecentHappenings(void)
+static void InterviewAfter_RecentHappenings(void)
{
TVShow *show;
@@ -1697,7 +1692,7 @@ void InterviewAfter_RecentHappenings(void)
show->recentHappenings.language = gGameLanguage;
}
-void InterviewAfter_PkmnFanClubOpinions(void)
+static void InterviewAfter_PkmnFanClubOpinions(void)
{
TVShow *show;
@@ -1722,14 +1717,14 @@ void InterviewAfter_PkmnFanClubOpinions(void)
}
}
-void InterviewAfter_DummyShow4()
+static void InterviewAfter_DummyShow4(void)
{
TVShow *show;
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
}
-void sub_80ED718(void)
+static void sub_80ED718(void)
{
u8 i;
u16 outbreakIdx;
@@ -1794,7 +1789,6 @@ void EndMassOutbreak(void)
void UpdateTVShowsPerDay(u16 days)
{
-
sub_80ED8B4(days);
UpdateMassOutbreakTimeLeft(days);
sub_80EF120(days);
@@ -1802,7 +1796,7 @@ void UpdateTVShowsPerDay(u16 days)
sub_80EEB98(days);
}
-void sub_80ED8B4(u16 days)
+static void sub_80ED8B4(u16 days)
{
u8 i;
TVShow *show;
@@ -1872,7 +1866,7 @@ void PutFishingAdviceShowOnTheAir(void)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_FISHING_ADVICE, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
@@ -1892,7 +1886,7 @@ void SetPokemonAnglerSpecies(u16 species)
sPokemonAnglerSpecies = species;
}
-void sub_80EDA48(u16 days)
+static void sub_80EDA48(u16 days)
{
TVShow *show;
@@ -2088,7 +2082,7 @@ void sub_80EDE84(u16 nCoinsSpent)
sFindThatGamerCoinsSpent = nCoinsSpent;
}
-void sub_80EDE98(TVShow *show)
+static void sub_80EDE98(TVShow *show)
{
u8 i;
u8 j;
@@ -2153,7 +2147,7 @@ void sub_80EDE98(TVShow *show)
}
}
-void sub_80EDFB4(TVShow *show)
+static void sub_80EDFB4(TVShow *show)
{
u8 i;
u16 move;
@@ -2590,7 +2584,7 @@ void sub_80EEA70(void)
}
}
-void sub_80EEB98(u16 days)
+static void sub_80EEB98(u16 days)
{
u8 i;
@@ -2608,7 +2602,7 @@ void sub_80EEB98(u16 days)
}
}
-void sub_80EEBF4(u8 actionIdx)
+static void sub_80EEBF4(u8 actionIdx)
{
TVShow *show;
@@ -2664,7 +2658,7 @@ void sub_80EED60(u16 delta)
// PokeNews
-void sub_80EED88(void)
+static void sub_80EED88(void)
{
u8 newsKind;
@@ -2715,7 +2709,7 @@ void ClearPokemonNewsI(u8 i)
gSaveBlock1Ptr->pokeNews[i].days = 0;
}
-void sub_80EEEB8(void)
+static void sub_80EEEB8(void)
{
u8 i;
u8 j;
@@ -2845,7 +2839,7 @@ bool8 sub_80EF0E4(u8 newsKind)
return FALSE;
}
-void sub_80EF120(u16 days)
+static void sub_80EF120(u16 days)
{
u8 i;
@@ -2923,48 +2917,25 @@ void TV_PrintIntToStringVar(u8 varIdx, int value)
{
int nDigits;
- nDigits = sub_80EF370(value);
+ nDigits = CountDigits(value);
ConvertIntToDecimalStringN(gTVStringVarPtrs[varIdx], value, STR_CONV_MODE_LEFT_ALIGN, nDigits);
}
-size_t sub_80EF370(int value)
+size_t CountDigits(int value)
{
- if (value / 10 == 0)
- {
- return 1;
- }
- if (value / 100 == 0)
- {
- return 2;
- }
- if (value / 1000 == 0)
- {
- return 3;
- }
- if (value / 10000 == 0)
- {
- return 4;
- }
- if (value / 100000 == 0)
- {
- return 5;
- }
- if (value / 1000000 == 0)
- {
- return 6;
- }
- if (value / 10000000 == 0)
- {
- return 7;
- }
- if (value / 100000000 == 0)
- {
- return 8;
- }
+ if (value / 10 == 0) return 1;
+ if (value / 100 == 0) return 2;
+ if (value / 1000 == 0) return 3;
+ if (value / 10000 == 0) return 4;
+ if (value / 100000 == 0) return 5;
+ if (value / 1000000 == 0) return 6;
+ if (value / 10000000 == 0) return 7;
+ if (value / 100000000 == 0) return 8;
+
return 1;
}
-void sub_80EF40C(u8 varIdx, TVShow *show)
+static void sub_80EF40C(u8 varIdx, TVShow *show)
{
u8 i;
int price;
@@ -3095,7 +3066,7 @@ void InterviewBefore(void)
}
}
-void InterviewBefore_FanClubLetter(void)
+static void InterviewBefore_FanClubLetter(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_LETTER);
if (!gSpecialVar_Result)
@@ -3105,7 +3076,7 @@ void InterviewBefore_FanClubLetter(void)
}
}
-void InterviewBefore_RecentHappenings(void)
+static void InterviewBefore_RecentHappenings(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_RECENT_HAPPENINGS);
if (!gSpecialVar_Result)
@@ -3114,7 +3085,7 @@ void InterviewBefore_RecentHappenings(void)
}
}
-void InterviewBefore_PkmnFanClubOpinions(void)
+static void InterviewBefore_PkmnFanClubOpinions(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
if (!gSpecialVar_Result)
@@ -3126,17 +3097,17 @@ void InterviewBefore_PkmnFanClubOpinions(void)
}
}
-void InterviewBefore_Dummy(void)
+static void InterviewBefore_Dummy(void)
{
gSpecialVar_Result = TRUE;
}
-void InterviewBefore_NameRater(void)
+static void InterviewBefore_NameRater(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_NAME_RATER_SHOW);
}
-void InterviewBefore_BravoTrainerPkmnProfile(void)
+static void InterviewBefore_BravoTrainerPkmnProfile(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
if (!gSpecialVar_Result)
@@ -3145,17 +3116,17 @@ void InterviewBefore_BravoTrainerPkmnProfile(void)
}
}
-void InterviewBefore_ContestLiveUpdates(void)
+static void InterviewBefore_ContestLiveUpdates(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_CONTEST_LIVE_UPDATES);
}
-void InterviewBefore_3CheersForPokeblocks(void)
+static void InterviewBefore_3CheersForPokeblocks(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_3_CHEERS_FOR_POKEBLOCKS);
}
-void InterviewBefore_BravoTrainerBTProfile(void)
+static void InterviewBefore_BravoTrainerBTProfile(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
if (!gSpecialVar_Result)
@@ -3164,7 +3135,7 @@ void InterviewBefore_BravoTrainerBTProfile(void)
}
}
-void InterviewBefore_FanClubSpecial(void)
+static void InterviewBefore_FanClubSpecial(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_SPECIAL);
if (!gSpecialVar_Result)
@@ -3205,7 +3176,7 @@ void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
}
}
-void sub_80EF93C(TVShow *shows)
+static void sub_80EF93C(TVShow *shows)
{
u8 i;
u8 j;
@@ -3277,7 +3248,7 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
return species;
}
-void sub_80EFA88(void)
+static void sub_80EFA88(void)
{
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
gSpecialVar_0x8006 = sCurTVShowSlot;
@@ -3686,7 +3657,7 @@ void sub_80F01E8(void *src, u32 size, u8 masterIdx)
}
}
-void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVShow player4[25])
+static void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVShow player4[25])
{
u8 i;
u8 j;
@@ -3734,7 +3705,7 @@ void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVS
}
}
-bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
+static bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
{
u8 value;
u8 switchval;
@@ -3765,7 +3736,7 @@ bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
return FALSE;
}
-u8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
@@ -3782,7 +3753,7 @@ u8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-u8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
if ((linkTrainerId & 0xFF) == tv2->common.srcTrainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.srcTrainerIdHi)
@@ -3802,7 +3773,7 @@ u8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-u8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi)
@@ -3819,7 +3790,7 @@ u8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-s8 sub_80F06D0(TVShow *tvShows)
+static s8 sub_80F06D0(TVShow *tvShows)
{
u8 i;
@@ -3834,7 +3805,7 @@ s8 sub_80F06D0(TVShow *tvShows)
}
#ifdef NONMATCHING
-void sub_80F0708(void) // FIXME: register allocation shenanigans
+static void sub_80F0708(void) // FIXME: register allocation shenanigans
{
u16 i;
TVShow *show;
@@ -3850,8 +3821,8 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
break;
case TVSHOW_BATTLE_UPDATE:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.species2, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.species, i);
+ sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesPlayer, i);
+ sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesOpponent, i);
break;
case TVSHOW_FAN_CLUB_SPECIAL:
break;
@@ -3954,13 +3925,13 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
break;
default:
- sub_80F0B00(i);
+ SetTvShowInactive(i);
break;
}
}
}
#else
-ASM_DIRECT void sub_80F0708(void)
+ASM_DIRECT static void sub_80F0708(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
@@ -4377,7 +4348,7 @@ ASM_DIRECT void sub_80F0708(void)
"\tmov r2, r9\n"
"\tlsls r0, r2, 24\n"
"\tlsrs r0, 24\n"
- "\tbl sub_80F0B00\n"
+ "\tbl SetTvShowInactive\n"
"_080F0AE2_break:\n"
"\tmov r0, r9\n"
"\tadds r0, 0x1\n"
@@ -4398,12 +4369,12 @@ ASM_DIRECT void sub_80F0708(void)
}
#endif
-void sub_80F0B00(u8 showIdx)
+void SetTvShowInactive(u8 showIdx)
{
gSaveBlock1Ptr->tvShows[showIdx].common.active = FALSE;
}
-void sub_80F0B24(u16 species, u8 showIdx)
+static void sub_80F0B24(u16 species, u8 showIdx)
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0)
{
@@ -4411,7 +4382,7 @@ void sub_80F0B24(u16 species, u8 showIdx)
}
}
-void sub_80F0B64(void)
+static void sub_80F0B64(void)
{
u16 i;
@@ -4444,7 +4415,7 @@ void sub_80F0BB8(void)
}
}
-void sub_80F0C04(void)
+static void sub_80F0C04(void)
{
s8 i;
s8 ct;
@@ -4498,7 +4469,7 @@ void sub_80F0C7C(void *src, u32 size, u8 masterIdx)
}
}
-void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16], PokeNews player4[16])
+static void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16], PokeNews player4[16])
{
u8 i;
u8 j;
@@ -4530,7 +4501,7 @@ void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16
}
}
-void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
+static void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
{
PokeNews *ptr1;
PokeNews *ptr2;
@@ -4541,7 +4512,7 @@ void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
sub_80F0E84(ptr1, ptr2, sCurTVShowSlot);
}
-bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
+static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
{
u8 i;
u8 kind;
@@ -4563,7 +4534,7 @@ bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
return TRUE;
}
-s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
+static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
{
if (pokeNews[idx].kind == POKENEWS_NONE)
{
@@ -4572,7 +4543,7 @@ s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
return idx;
}
-void sub_80F0EEC(void)
+static void sub_80F0EEC(void)
{
u8 i;
@@ -4586,7 +4557,7 @@ void sub_80F0EEC(void)
sub_80EEEB8();
}
-void sub_80F0F24(void)
+static void sub_80F0F24(void)
{
u8 i;
@@ -4609,7 +4580,7 @@ else \
(langptr) = langfix; \
}
-void sub_80F0F64(TVShow *show, u32 language)
+static void sub_80F0F64(TVShow *show, u32 language)
{
int i;
TVShow **r4;
@@ -4691,7 +4662,7 @@ void sub_80F1208(TVShow *shows)
}
}
-void sub_80F1254(TVShow *shows)
+static void sub_80F1254(TVShow *shows)
{
TVShow *curShow;
@@ -4716,7 +4687,7 @@ u8 TV_GetStringLanguage(u8 *str)
return IsStringJapanese(str) ? LANGUAGE_JAPANESE : LANGUAGE_ENGLISH;
}
-void sub_80F12A4(TVShow *shows)
+static void sub_80F12A4(TVShow *shows)
{
TVShow *curShow;
@@ -4956,7 +4927,7 @@ void DoTVShow(void)
}
}
-void DoTVShowBravoTrainerPokemonProfile(void)
+static void DoTVShowBravoTrainerPokemonProfile(void)
{
TVShow *show;
u8 state;
@@ -5028,7 +4999,7 @@ void DoTVShowBravoTrainerPokemonProfile(void)
ShowFieldMessage(sTVBravoTrainerTextGroup[state]);
}
-void DoTVShowBravoTrainerBattleTower(void)
+static void DoTVShowBravoTrainerBattleTower(void)
{
TVShow *show;
u8 state;
@@ -5125,7 +5096,7 @@ void DoTVShowBravoTrainerBattleTower(void)
ShowFieldMessage(sTVBravoTrainerBattleTowerTextGroup[state]);
}
-void DoTVShowTodaysSmartShopper(void)
+static void DoTVShowTodaysSmartShopper(void)
{
TVShow *show;
u8 state;
@@ -5248,7 +5219,7 @@ void DoTVShowTodaysSmartShopper(void)
ShowFieldMessage(sTVTodaysSmartShopperTextGroup[state]);
}
-void DoTVShowTheNameRaterShow(void)
+static void DoTVShowTheNameRaterShow(void)
{
TVShow *show;
u8 state;
@@ -5346,7 +5317,7 @@ void DoTVShowTheNameRaterShow(void)
ShowFieldMessage(sTVNameRaterTextGroup[state]);
}
-void DoTVShowPokemonTodaySuccessfulCapture(void)
+static void DoTVShowPokemonTodaySuccessfulCapture(void)
{
TVShow *show;
u8 state;
@@ -5424,7 +5395,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void)
ShowFieldMessage(sTVPokemonTodaySuccessfulTextGroup[state]);
}
-void DoTVShowPokemonTodayFailedCapture(void)
+static void DoTVShowPokemonTodayFailedCapture(void)
{
TVShow *show;
u8 state;
@@ -5477,7 +5448,7 @@ void DoTVShowPokemonTodayFailedCapture(void)
ShowFieldMessage(sTVPokemonTodayFailedTextGroup[state]);
}
-void DoTVShowPokemonFanClubLetter(void)
+static void DoTVShowPokemonFanClubLetter(void)
{
TVShow *show;
u8 state;
@@ -5531,7 +5502,7 @@ void DoTVShowPokemonFanClubLetter(void)
ShowFieldMessage(sTVFanClubTextGroup[state]);
}
-void DoTVShowRecentHappenings(void)
+static void DoTVShowRecentHappenings(void)
{
TVShow *show;
u8 state;
@@ -5566,7 +5537,7 @@ void DoTVShowRecentHappenings(void)
ShowFieldMessage(sTVRecentHappeninssTextGroup[state]);
}
-void DoTVShowPokemonFanClubOpinions(void)
+static void DoTVShowPokemonFanClubOpinions(void)
{
TVShow *show;
u8 state;
@@ -5599,12 +5570,12 @@ void DoTVShowPokemonFanClubOpinions(void)
ShowFieldMessage(sTVFanClubOpinionsTextGroup[state]);
}
-void DoTVShowDummiedOut(void)
+static void DoTVShowDummiedOut(void)
{
}
-void DoTVShowPokemonNewsMassOutbreak(void)
+static void DoTVShowPokemonNewsMassOutbreak(void)
{
TVShow *show;
@@ -5616,7 +5587,7 @@ void DoTVShowPokemonNewsMassOutbreak(void)
ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]);
}
-void DoTVShowPokemonContestLiveUpdates(void)
+static void DoTVShowPokemonContestLiveUpdates(void)
{
TVShow *show;
u8 state;
@@ -5963,7 +5934,7 @@ void DoTVShowPokemonContestLiveUpdates(void)
ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]);
}
-void DoTVShowPokemonBattleUpdate(void)
+static void DoTVShowPokemonBattleUpdate(void)
{
TVShow *show;
u8 state;
@@ -6000,13 +5971,13 @@ void DoTVShowPokemonBattleUpdate(void)
break;
case 2:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species2]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
sTVShowState = 3;
break;
case 3:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesOpponent]);
sTVShowState = 4;
break;
case 4:
@@ -6021,21 +5992,21 @@ void DoTVShowPokemonBattleUpdate(void)
break;
case 6:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species2]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
sTVShowState = 7;
break;
case 7:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.species]);
+ StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.speciesOpponent]);
TVShowDone();
break;
}
ShowFieldMessage(sTVPokemonBattleUpdateTextGroup[state]);
}
-void DoTVShow3CheersForPokeblocks(void)
+static void DoTVShow3CheersForPokeblocks(void)
{
TVShow *show;
u8 state;
@@ -6206,7 +6177,7 @@ void DoTVShowInSearchOfTrainers(void)
ShowFieldMessage(sTVInSearchOfTrainersTextGroup[state]);
}
-void DoTVShowPokemonAngler(void)
+static void DoTVShowPokemonAngler(void)
{
TVShow *show;
u8 state;
@@ -6240,7 +6211,7 @@ void DoTVShowPokemonAngler(void)
ShowFieldMessage(sTVPokemonAnslerTextGroup[state]);
}
-void DoTVShowTheWorldOfMasters(void)
+static void DoTVShowTheWorldOfMasters(void)
{
TVShow *show;
u8 state;
@@ -6270,7 +6241,7 @@ void DoTVShowTheWorldOfMasters(void)
ShowFieldMessage(sTVWorldOfMastersTextGroup[state]);
}
-void DoTVShowTodaysRivalTrainer(void)
+static void DoTVShowTodaysRivalTrainer(void)
{
TVShow *show;
u8 state;
@@ -6419,7 +6390,7 @@ void DoTVShowTodaysRivalTrainer(void)
ShowFieldMessage(sTVTodaysRivalTrainerTextGroup[state]);
}
-void DoTVShowDewfordTrendWatcherNetwork(void)
+static void DoTVShowDewfordTrendWatcherNetwork(void)
{
TVShow *show;
u8 state;
@@ -6475,7 +6446,7 @@ void DoTVShowDewfordTrendWatcherNetwork(void)
ShowFieldMessage(sTVDewfordTrendWatcherNetworkTextGroup[state]);
}
-void DoTVShowHoennTreasureInvestigators(void)
+static void DoTVShowHoennTreasureInvestigators(void)
{
TVShow *show;
u8 state;
@@ -6519,7 +6490,7 @@ void DoTVShowHoennTreasureInvestigators(void)
ShowFieldMessage(sTVHoennTreasureInvestisatorsTextGroup[state]);
}
-void DoTVShowFindThatGamer(void)
+static void DoTVShowFindThatGamer(void)
{
TVShow *show;
u8 state;
@@ -6593,7 +6564,7 @@ void DoTVShowFindThatGamer(void)
ShowFieldMessage(sTVFindThatGamerTextGroup[state]);
}
-void DoTVShowBreakingNewsTV(void)
+static void DoTVShowBreakingNewsTV(void)
{
TVShow *show;
u8 state;
@@ -6696,7 +6667,7 @@ void DoTVShowBreakingNewsTV(void)
ShowFieldMessage(sTVBreakinsNewsTextGroup[state]);
}
-void DoTVShowSecretBaseVisit(void)
+static void DoTVShowSecretBaseVisit(void)
{
TVShow *show;
u8 state;
@@ -6792,7 +6763,7 @@ void DoTVShowSecretBaseVisit(void)
ShowFieldMessage(sTVSecretBaseVisitTextGroup[state]);
}
-void DoTVShowPokemonLotteryWinnerFlashReport(void)
+static void DoTVShowPokemonLotteryWinnerFlashReport(void)
{
TVShow *show;
u8 state;
@@ -6822,7 +6793,7 @@ void DoTVShowPokemonLotteryWinnerFlashReport(void)
ShowFieldMessage(sTVPokemonLotteryWinnerFlashReportTextGroup[state]);
}
-void DoTVShowThePokemonBattleSeminar(void)
+static void DoTVShowThePokemonBattleSeminar(void)
{
TVShow *show;
u8 state;
@@ -6886,7 +6857,7 @@ void DoTVShowThePokemonBattleSeminar(void)
ShowFieldMessage(sTVThePokemonBattleSeminarTextGroup[state]);
}
-void DoTVShowTrainerFanClubSpecial(void)
+static void DoTVShowTrainerFanClubSpecial(void)
{
TVShow *show;
u8 state;
@@ -6951,7 +6922,7 @@ void DoTVShowTrainerFanClubSpecial(void)
ShowFieldMessage(sTVTrainerFanClubSpecialTextGroup[state]);
}
-void DoTVShowTrainerFanClub(void)
+static void DoTVShowTrainerFanClub(void)
{
TVShow *show;
u8 state;
@@ -7038,7 +7009,7 @@ void DoTVShowTrainerFanClub(void)
ShowFieldMessage(sTVTrainerFanClubTextGroup[state]);
}
-void DoTVShowSpotTheCuties(void)
+static void DoTVShowSpotTheCuties(void)
{
TVShow *show;
u8 state;
@@ -7143,7 +7114,7 @@ void DoTVShowSpotTheCuties(void)
ShowFieldMessage(sTVCutiesTextGroup[state]);
}
-void DoTVShowPokemonNewsBattleFrontier(void)
+static void DoTVShowPokemonNewsBattleFrontier(void)
{
TVShow *show;
u8 state;
@@ -7292,7 +7263,7 @@ void DoTVShowPokemonNewsBattleFrontier(void)
ShowFieldMessage(sTVPokemonNewsBattleFrontierTextGroup[state]);
}
-void DoTVShowWhatsNo1InHoennToday(void)
+static void DoTVShowWhatsNo1InHoennToday(void)
{
TVShow *show;
u8 state;
@@ -7407,7 +7378,7 @@ u8 sub_80F51AC(TVShow *show, u8 a1)
return 0;
}
-void DoTVShowSecretBaseSecrets(void)
+static void DoTVShowSecretBaseSecrets(void)
{
TVShow *show;
u8 state;
@@ -7645,7 +7616,7 @@ void DoTVShowSecretBaseSecrets(void)
ShowFieldMessage(sTVSecretBaseSecretsTextGroup[state]);
}
-void DoTVShowSafariFanClub(void)
+static void DoTVShowSafariFanClub(void)
{
TVShow *show;
u8 state;
@@ -7732,7 +7703,7 @@ void DoTVShowSafariFanClub(void)
ShowFieldMessage(sTVSafariFanClubTextGroup[state]);
}
-void DoTVShowPokemonContestLiveUpdates2(void)
+static void DoTVShowPokemonContestLiveUpdates2(void)
{
TVShow *show;
u8 state;
diff --git a/src/window.c b/src/window.c
index 589557d43..9a52a5a20 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1,6 +1,8 @@
#include "global.h"
#include "window.h"
#include "malloc.h"
+#include "bg.h"
+#include "blit.h"
u32 filler_03002F58;
u32 filler_03002F5C;
@@ -15,19 +17,6 @@ EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0};
EWRAM_DATA static struct Window* sWindowPtr = NULL;
EWRAM_DATA static u16 sWindowSize = 0;
-extern void* GetBgTilemapBuffer(u8 bg);
-extern int DummiedOutFireRedLeafGreenTileAllocFunc(int, int, int, int);
-extern u16 GetBgAttribute(u8 bg, u8 attributeId);
-extern void SetBgTilemapBuffer(u8 bg, void *tilemap);
-extern void CopyBgTilemapBufferToVram(u8 bg);
-extern u8 LoadBgTiles(u8 bg, void *src, u16 size, u16 destOffset);
-extern void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, u16 tileNumDelta);
-extern void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
-extern void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey);
-extern void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey, u8 paletteNum);
-extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-extern void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-
static u8 GetNumActiveWindowsOnBg(u8 bgId);
static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId);
@@ -130,13 +119,13 @@ u16 AddWindow(const struct WindowTemplate *template)
u8 *allocatedTilemapBuffer;
int i;
- for (win = 0; win < 0x20; ++win)
+ for (win = 0; win < WINDOWS_MAX; ++win)
{
if ((bgLayer = gWindows[win].window.priority) == 0xFF)
break;
}
- if (win == 0x20)
+ if (win == WINDOWS_MAX)
return 0xFF;
bgLayer = template->priority;
@@ -199,13 +188,13 @@ int AddWindowWithoutTileMap(const struct WindowTemplate *template)
u8 bgLayer;
int allocatedBaseBlock;
- for (win = 0; win < 0x20; ++win)
+ for (win = 0; win < WINDOWS_MAX; ++win)
{
if (gWindows[win].window.priority == 0xFF)
break;
}
- if (win == 0x20)
+ if (win == WINDOWS_MAX)
return 0xFF;
bgLayer = template->priority;
diff --git a/sym_common.txt b/sym_common.txt
index ce3540ad9..01772fa5a 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -178,11 +178,7 @@ gUnknown_030062F0: @ 30062F0
gUnknown_030062F4: @ 30062F4
.space 0xC
-gUnknown_03006300: @ 3006300
- .space 0x10
-
-gMultiuseListMenuTemplate: @ 3006310
- .space 0x18
+ .include "list_menu.o"
gUnknown_03006328: @ 3006328
.space 0x48