summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgolem galvanize <golemgalvanize@github.com>2018-02-13 22:12:02 -0500
committergolem galvanize <golemgalvanize@github.com>2018-02-13 22:12:02 -0500
commite5b6d15f9163cca8688cd67ca5a0563ce6667601 (patch)
tree5492d50f51f51acca9cf1861c7b5936182649364
parent42cfbcb197bb271e675a4b2b9e70a2647bd65532 (diff)
parent398e775d906ff4f1e5aaad3d8a9eee530c7b122d (diff)
move data to c
-rw-r--r--asm/battle_anim_80FE840.s14
-rw-r--r--asm/battle_anim_8170478.s2
-rw-r--r--asm/battle_frontier_1.s12
-rw-r--r--asm/battle_frontier_2.s6
-rw-r--r--asm/battle_link_817C95C.s16
-rw-r--r--asm/battle_tower.s14
-rw-r--r--asm/cable_car_util.s8
-rw-r--r--asm/cable_club.s46
-rw-r--r--asm/contest.s2
-rw-r--r--asm/contest_link_80F57C4.s4
-rw-r--r--asm/contest_link_80FC4F4.s2
-rw-r--r--asm/field_screen.s2
-rw-r--r--asm/field_specials.s2
-rw-r--r--asm/intro.s4
-rw-r--r--asm/item_menu.s6452
-rw-r--r--asm/librfu.s1224
-rw-r--r--asm/link_rfu.s2021
-rw-r--r--asm/macros/battle_script.inc10
-rw-r--r--asm/macros/event.inc96
-rw-r--r--asm/overworld.s38
-rw-r--r--asm/party_menu.s6
-rw-r--r--asm/pokemon_1.s2016
-rw-r--r--asm/pokemon_3.s529
-rw-r--r--asm/pokemon_item_effect.s1967
-rw-r--r--asm/pokemon_summary_screen.s4
-rw-r--r--asm/pokenav.s22
-rw-r--r--asm/record_mixing.s8
-rw-r--r--asm/rom6.s1
-rw-r--r--asm/rom_8011DC0.s (renamed from asm/link.s)17787
-rw-r--r--asm/rom_8034C54.s2
-rw-r--r--asm/script_pokemon_util_80F87D8.s2
-rw-r--r--asm/start_menu.s4
-rw-r--r--asm/trade.s54
-rw-r--r--asm/trainer_card.s8
-rw-r--r--common_syms/battle_main.txt9
-rwxr-xr-xcommon_syms/item_menu.txt1
-rw-r--r--common_syms/link.txt37
-rw-r--r--common_syms/link_rfu.txt2
-rw-r--r--common_syms/main.txt9
-rw-r--r--common_syms/window.txt5
-rw-r--r--constants/battle_constants.inc171
-rw-r--r--constants/battle_script_constants.inc169
-rw-r--r--constants/battle_text.inc375
-rw-r--r--constants/constants.inc1
-rw-r--r--constants/pokemon_data_constants.inc43
-rw-r--r--constants/type_constants.inc18
-rw-r--r--data/battle_ai_scripts.s260
-rw-r--r--data/battle_anim_scripts.s2
-rw-r--r--data/battle_frontier/battle_frontier_trainers.inc108
-rw-r--r--data/battle_frontier/fallarbor_battle_tent_trainers.inc8
-rw-r--r--data/battle_frontier/slateport_battle_tent_trainers.inc8
-rw-r--r--data/battle_frontier/verdanturf_battle_tent_trainers.inc8
-rw-r--r--data/battle_moves.inc2
-rw-r--r--data/battle_scripts_1.s1468
-rw-r--r--data/battle_scripts_2.s37
-rw-r--r--data/battle_tower.s1
-rw-r--r--data/data2b.s33
-rw-r--r--data/data2c.s1
-rw-r--r--data/data2e.s151
-rw-r--r--data/graphics/pokemon/animation_delay_table.inc412
-rw-r--r--data/graphics/pokemon/front_anim_ids_table.inc412
-rw-r--r--data/item_menu.s127
-rw-r--r--data/main_menu.s141
-rw-r--r--data/rom_8011DC0.s (renamed from data/link.s)383
-rw-r--r--data/scripts/maps/BirthIsland_Exterior.inc2
-rw-r--r--data/scripts/maps/FarawayIsland_Interior.inc2
-rw-r--r--data/scripts/maps/NavelRock_Bottom.inc2
-rw-r--r--data/scripts/maps/NavelRock_Top.inc2
-rw-r--r--data/scripts/maps/SouthernIsland_Interior.inc4
-rw-r--r--data/specials.inc2
-rw-r--r--include/agb_flash.h12
-rw-r--r--include/battle.h497
-rw-r--r--include/battle_anim.h22
-rw-r--r--include/battle_frontier_2.h1
-rw-r--r--include/battle_gfx_sfx_util.h36
-rw-r--r--include/battle_main.h10
-rw-r--r--include/battle_message.h8
-rw-r--r--include/battle_script_commands.h45
-rw-r--r--include/battle_scripts.h2
-rw-r--r--include/battle_util.h2
-rw-r--r--include/calculate_base_damage.h6
-rw-r--r--include/constants/battle.h284
-rw-r--r--include/constants/battle_ai.h10
-rw-r--r--include/constants/battle_anim.h2
-rw-r--r--include/constants/battle_script_commands.h97
-rw-r--r--include/constants/battle_string_ids.h (renamed from include/battle_string_ids.h)7
-rw-r--r--include/constants/items.h3
-rw-r--r--include/constants/pokemon.h80
-rw-r--r--include/constants/trainers.h32
-rw-r--r--include/crt0.h11
-rw-r--r--include/data/pokemon/trainer_class_lookups.h64
-rw-r--r--include/decompress.h1
-rw-r--r--include/field_map_obj_helpers.h1
-rw-r--r--include/field_player_avatar.h2
-rw-r--r--include/field_specials.h1
-rw-r--r--include/gba/io_reg.h17
-rw-r--r--include/global.h11
-rw-r--r--include/graphics.h15
-rw-r--r--include/intro.h6
-rw-r--r--include/item.h3
-rw-r--r--include/item_menu.h2
-rw-r--r--include/item_menu_icons.h4
-rw-r--r--include/item_use.h1
-rw-r--r--include/librfu.h143
-rw-r--r--include/link.h165
-rw-r--r--include/link_rfu.h235
-rw-r--r--include/list_menu.h1
-rw-r--r--include/load_save.h3
-rw-r--r--include/m4a.h5
-rw-r--r--include/main.h16
-rw-r--r--include/malloc.h1
-rw-r--r--include/menu.h8
-rw-r--r--include/menu_helpers.h5
-rw-r--r--include/menu_indicators.h9
-rw-r--r--include/overworld.h8
-rw-r--r--include/party_menu.h1
-rw-r--r--include/player_pc.h1
-rw-r--r--include/pokemon.h311
-rw-r--r--include/pokemon_item_effects.h62
-rwxr-xr-xinclude/pokemon_summary_screen.h6
-rw-r--r--include/recorded_battle.h10
-rw-r--r--include/reset_save_heap.h12
-rw-r--r--include/rom_8011DC0.h12
-rw-r--r--include/shop.h1
-rw-r--r--include/strings.h81
-rw-r--r--include/text.h1
-rw-r--r--include/trade.h12
-rw-r--r--include/window.h6
-rw-r--r--ld_script.txt26
-rw-r--r--src/battle_ai_script_commands.c20
-rw-r--r--src/battle_ai_switch_items.c15
-rw-r--r--src/battle_anim.c5
-rw-r--r--src/battle_bg.c4
-rw-r--r--src/battle_controller_link_opponent.c60
-rw-r--r--src/battle_controller_link_partner.c35
-rw-r--r--src/battle_controller_opponent.c35
-rw-r--r--src/battle_controller_player.c51
-rw-r--r--src/battle_controller_player_partner.c37
-rw-r--r--src/battle_controller_recorded_opponent.c40
-rw-r--r--src/battle_controller_recorded_player.c38
-rw-r--r--src/battle_controller_safari.c22
-rw-r--r--src/battle_controller_wally.c38
-rw-r--r--src/battle_controllers.c650
-rw-r--r--src/battle_gfx_sfx_util.c257
-rw-r--r--src/battle_interface.c12
-rw-r--r--src/battle_main.c447
-rw-r--r--src/battle_message.c55
-rw-r--r--src/battle_script_commands.c845
-rw-r--r--src/battle_setup.c16
-rw-r--r--src/battle_transition.c2
-rw-r--r--src/battle_util.c551
-rw-r--r--src/battle_util2.c51
-rw-r--r--src/berry_blender.c22
-rw-r--r--src/bg.c6
-rw-r--r--src/braille_puzzles.c2
-rw-r--r--src/calculate_base_damage.c283
-rw-r--r--src/clear_save_data_screen.c2
-rw-r--r--src/decompress.c2
-rw-r--r--src/decoration.c2
-rw-r--r--src/egg_hatch.c11
-rw-r--r--src/evolution_scene.c14
-rwxr-xr-xsrc/item_menu.c2448
-rwxr-xr-xsrc/item_use.c13
-rw-r--r--src/librfu_rfu.c32
-rw-r--r--src/lilycove_lady.c2
-rw-r--r--src/link.c2428
-rw-r--r--src/link_rfu.c4940
-rw-r--r--src/main.c92
-rw-r--r--src/main_menu.c193
-rw-r--r--src/mystery_event_menu.c2
-rw-r--r--src/pokeball.c6
-rw-r--r--src/pokeblock_feed.c3
-rw-r--r--src/pokemon.c6094
-rw-r--r--src/pokemon_1.c457
-rw-r--r--src/pokemon_2.c1365
-rw-r--r--src/pokemon_3.c1749
-rw-r--r--src/pokemon_summary_screen.c44
-rw-r--r--src/recorded_battle.c121
-rw-r--r--src/reset_save_heap.c2
-rw-r--r--src/reshow_battle_screen.c24
-rw-r--r--src/rom_8011DC0.c18
-rw-r--r--src/safari_zone.c4
-rw-r--r--src/scrcmd.c10
-rw-r--r--src/secret_base.c1
-rw-r--r--src/text.c7
-rw-r--r--src/tv.c12
-rw-r--r--src/util.c2
-rw-r--r--src/window.c7
-rw-r--r--sym_bss.txt6
-rw-r--r--sym_common.txt234
-rw-r--r--sym_ewram.txt397
191 files changed, 23141 insertions, 40439 deletions
diff --git a/asm/battle_anim_80FE840.s b/asm/battle_anim_80FE840.s
index 3e3be2100..f5b9697af 100644
--- a/asm/battle_anim_80FE840.s
+++ b/asm/battle_anim_80FE840.s
@@ -50069,7 +50069,7 @@ sub_8117E94: @ 8117E94
ldrb r1, [r1]
strb r1, [r2]
ldr r2, =gBattleAnimTarget
- ldr r1, =gEffectBank
+ ldr r1, =gEffectBattler
ldrb r1, [r1]
strb r1, [r2]
bl DestroyAnimVisualTask
@@ -50136,7 +50136,7 @@ sub_8117F30: @ 8117F30
ldrb r1, [r1]
strb r1, [r2]
ldr r2, =gBattleAnimTarget
- ldr r1, =gEffectBank
+ ldr r1, =gEffectBattler
ldrb r1, [r1]
strb r1, [r2]
bl DestroyAnimVisualTask
@@ -50670,7 +50670,7 @@ _081183B4:
strh r0, [r1, 0xC]
movs r0, 0x20
strh r0, [r1, 0xE]
- ldr r2, =gUnknown_020243FC
+ ldr r2, =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, =0x0000fffe
ands r0, r1
@@ -51014,7 +51014,7 @@ _08118690:
strh r0, [r1, 0xE]
movs r0, 0x1
strh r0, [r1, 0x12]
- ldr r2, =gUnknown_020243FC
+ ldr r2, =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, =0x0000fffe
ands r0, r1
@@ -51315,7 +51315,7 @@ _08118934:
strh r0, [r1, 0xE]
movs r0, 0x1
strh r0, [r1, 0x12]
- ldr r2, =gUnknown_020243FC
+ ldr r2, =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, =0x0000fffe
ands r0, r1
@@ -51675,7 +51675,7 @@ _08118C50:
strh r0, [r1, 0xC]
movs r0, 0x20
strh r0, [r1, 0xE]
- ldr r2, =gUnknown_020243FC
+ ldr r2, =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, =0x0000fffe
ands r0, r1
@@ -51924,7 +51924,7 @@ _08118E7E:
strh r0, [r1, 0x8]
movs r0, 0xF0
strh r0, [r1, 0xC]
- ldr r2, =gUnknown_020243FC
+ ldr r2, =gIntroSlideFlags
ldrh r1, [r2]
ldr r0, =0x0000fffe
ands r0, r1
diff --git a/asm/battle_anim_8170478.s b/asm/battle_anim_8170478.s
index 1bd7e9629..ef7e609d9 100644
--- a/asm/battle_anim_8170478.s
+++ b/asm/battle_anim_8170478.s
@@ -5069,7 +5069,7 @@ sub_8172ED0: @ 8172ED0
lsls r0, 24
lsrs r0, 24
ldr r2, =gBattleAnimTarget
- ldr r1, =gEffectBank
+ ldr r1, =gEffectBattler
ldrb r1, [r1]
strb r1, [r2]
bl DestroyAnimVisualTask
diff --git a/asm/battle_frontier_1.s b/asm/battle_frontier_1.s
index 38e0e4b0a..60ac46859 100644
--- a/asm/battle_frontier_1.s
+++ b/asm/battle_frontier_1.s
@@ -1591,7 +1591,7 @@ _0818F7E8:
lsrs r1, 16
ldr r0, [sp, 0x18]
movs r2, 0x1
- bl nature_stat_mod
+ bl ModifyStatByNature
lsls r0, 24
lsrs r0, 24
mov r1, r8
@@ -1618,7 +1618,7 @@ _0818F820:
lsrs r1, 16
ldr r0, [sp, 0x18]
movs r2, 0x2
- bl nature_stat_mod
+ bl ModifyStatByNature
lsls r0, 24
lsrs r0, 24
mov r1, r8
@@ -1645,7 +1645,7 @@ _0818F858:
lsrs r1, 16
ldr r0, [sp, 0x18]
movs r2, 0x3
- bl nature_stat_mod
+ bl ModifyStatByNature
lsls r0, 24
lsrs r0, 24
mov r1, r8
@@ -1672,7 +1672,7 @@ _0818F890:
lsrs r1, 16
ldr r0, [sp, 0x18]
movs r2, 0x4
- bl nature_stat_mod
+ bl ModifyStatByNature
lsls r0, 24
lsrs r0, 24
mov r1, r8
@@ -1699,7 +1699,7 @@ _0818F8C8:
lsrs r1, 16
ldr r0, [sp, 0x18]
movs r2, 0x5
- bl nature_stat_mod
+ bl ModifyStatByNature
lsls r0, 24
lsrs r0, 24
mov r1, r8
@@ -1941,7 +1941,7 @@ sub_818FA74: @ 818FA74
str r4, [sp, 0x4]
ldr r7, [sp, 0x14]
str r7, [sp, 0x8]
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
add r0, sp, 0xC
movs r1, 0x1
negs r1, r1
diff --git a/asm/battle_frontier_2.s b/asm/battle_frontier_2.s
index 67f44a0b6..11220f369 100644
--- a/asm/battle_frontier_2.s
+++ b/asm/battle_frontier_2.s
@@ -1960,7 +1960,7 @@ _0819B572:
mov r2, r9
str r2, [sp, 0x8]
ldr r2, [sp, 0x14]
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
movs r1, 0
add r0, sp, 0xC
strb r1, [r0]
@@ -2103,7 +2103,7 @@ _0819B678:
mov r2, r10
str r2, [sp, 0x8]
movs r2, 0x1E
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
add r0, sp, 0xC
movs r3, 0
strb r3, [r0]
@@ -23864,7 +23864,7 @@ _081A6E0C:
ldr r4, [sp, 0x28]
str r4, [sp, 0x8]
lsrs r2, 24
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
add r0, sp, 0x1C
movs r7, 0
strb r7, [r0]
diff --git a/asm/battle_link_817C95C.s b/asm/battle_link_817C95C.s
index dcfd89132..55d0bae39 100644
--- a/asm/battle_link_817C95C.s
+++ b/asm/battle_link_817C95C.s
@@ -44,7 +44,7 @@ _0817C988:
bl GetBattlerSide
lsls r0, 24
lsrs r6, r0, 24
- ldr r0, =gEffectBank
+ ldr r0, =gEffectBattler
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
@@ -145,7 +145,7 @@ _0817CA9C:
bl GetBattlerPosition
lsls r0, 24
lsrs r5, r0, 25
- ldr r0, =gEffectBank
+ ldr r0, =gEffectBattler
ldrb r0, [r0]
bl GetBattlerPosition
lsls r0, 24
@@ -1302,7 +1302,7 @@ _0817D6F2:
bl _0817E0A6
_0817D704:
ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBank
+ ldr r6, =gEffectBattler
ldrb r0, [r6]
lsls r0, 1
adds r0, r5
@@ -1396,7 +1396,7 @@ _0817D7B2:
.pool
_0817D7D8:
ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBank
+ ldr r6, =gEffectBattler
ldrb r0, [r6]
lsls r0, 1
adds r0, r5
@@ -1440,7 +1440,7 @@ _0817D7D8:
.pool
_0817D838:
ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBank
+ ldr r6, =gEffectBattler
ldrb r0, [r6]
lsls r0, 1
adds r0, r5
@@ -1628,7 +1628,7 @@ _0817D9AE:
b _0817E086
_0817D9C2:
ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBank
+ ldr r6, =gEffectBattler
ldrb r0, [r6]
lsls r0, 1
adds r0, r5
@@ -1703,7 +1703,7 @@ _0817DA48:
.pool
_0817DA68:
ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBank
+ ldr r6, =gEffectBattler
ldrb r0, [r6]
lsls r0, 1
adds r0, r5
@@ -1791,7 +1791,7 @@ _0817DB10:
.pool
_0817DB24:
ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBank
+ ldr r6, =gEffectBattler
ldrb r0, [r6]
lsls r0, 1
adds r0, r5
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index d92881024..13641fef0 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -2351,7 +2351,7 @@ _08163368:
ldr r2, [sp, 0x30]
str r2, [sp, 0x8]
ldr r2, [sp, 0x20]
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
movs r0, 0xFF
mov r6, sp
strb r0, [r6, 0x14]
@@ -2775,7 +2775,7 @@ _081636CE:
str r2, [sp, 0x8]
ldr r2, [sp, 0x14]
mov r3, r10
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
movs r1, 0
add r0, sp, 0xC
strb r1, [r0]
@@ -2894,7 +2894,7 @@ _081637D0:
mov r2, r9
str r2, [sp, 0x8]
movs r2, 0x1E
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
movs r1, 0
add r0, sp, 0xC
strb r1, [r0]
@@ -5264,7 +5264,7 @@ _08164D14:
ldrb r0, [r0]
cmp r0, 0
beq _08164DB0
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _08164DB0
@@ -5302,7 +5302,7 @@ _08164DB6:
thumb_func_start sub_8164DCC
sub_8164DCC: @ 8164DCC
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08164DDA
@@ -6289,7 +6289,7 @@ _081655A6:
str r3, [sp, 0x8]
lsrs r2, 24
mov r3, r12
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
movs r0, 0xFF
str r0, [sp, 0x48]
movs r0, 0
@@ -7550,7 +7550,7 @@ _08165FDA:
ldr r2, [sp, 0x2C]
str r2, [sp, 0x8]
ldr r2, [sp, 0x20]
- bl sub_8068634
+ bl CreateMonWithEVSpreadPersonalityOTID
add r1, sp, 0x14
movs r0, 0xFF
strb r0, [r1]
diff --git a/asm/cable_car_util.s b/asm/cable_car_util.s
index 7f396b635..db434eaf9 100644
--- a/asm/cable_car_util.s
+++ b/asm/cable_car_util.s
@@ -252,7 +252,7 @@ _0815226C:
ldrb r2, [r2]
cmp r3, r2
bcs _08152292
- ldr r0, =gUnknown_030024F8
+ ldr r0, =gMain+0x238
mov r12, r0
ldr r4, =gDummyOamData
adds r2, r5, 0
@@ -350,7 +350,7 @@ _08152322:
cmp r0, 0
beq _08152348
lsls r0, r6, 3
- ldr r1, =gUnknown_030024F8
+ ldr r1, =gMain+0x238
adds r0, r1
ldr r1, =gDummyOamData
ldm r1!, {r2,r3}
@@ -412,7 +412,7 @@ _08152348:
orrs r0, r1
strh r0, [r2, 0x4]
lsls r1, r6, 3
- ldr r2, =gUnknown_030024F8
+ ldr r2, =gMain+0x238
ldr r0, [r4, 0x4]
adds r1, r2
adds r0, r5, r0
@@ -746,7 +746,7 @@ _081525FC:
orrs r0, r2
strb r0, [r1, 0x19]
lsls r1, r5, 3
- ldr r0, =gUnknown_030024F8
+ ldr r0, =gMain+0x238
adds r1, r0
ldr r0, =gDummyOamData
ldm r0!, {r2,r3}
diff --git a/asm/cable_club.s b/asm/cable_club.s
index 1d2f5d1ff..3b5c392fc 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -143,7 +143,7 @@ sub_80B2478: @ 80B2478
lsrs r0, 24
lsls r1, 24
lsrs r1, 24
- bl sub_800A0C8
+ bl GetLinkPlayerDataExchangeStatusTimed
lsls r0, 24
lsrs r0, 24
subs r0, 0x1
@@ -205,7 +205,7 @@ sub_80B24F8: @ 80B24F8
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_800B33C
+ bl HasLinkErrorOccurred
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -274,7 +274,7 @@ sub_80B2578: @ 80B2578
cmp r0, 0
beq _080B258E
movs r0, 0x1
- bl sub_800B330
+ bl SetSuppressLinkErrorMessage
_080B258E:
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
@@ -309,7 +309,7 @@ sub_80B25CC: @ 80B25CC
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_800B2E8
+ bl GetSioMultiSI
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -374,9 +374,9 @@ sub_80B2634: @ 80B2634
ldrsh r2, [r4, r3]
cmp r2, 0
bne _080B266C
- bl sub_800A0AC
+ bl OpenLinkTimed
bl sub_800AB98
- bl sub_800A2BC
+ bl ResetLinkPlayers
ldr r0, =gUnknown_08550594
bl AddWindow
strh r0, [r4, 0xA]
@@ -418,7 +418,7 @@ sub_80B2688: @ 80B2688
cmp r5, 0x1
bls _080B26FC
movs r0, 0x1
- bl sub_800B330
+ bl SetSuppressLinkErrorMessage
ldr r1, =gTasks
lsls r0, r4, 2
adds r0, r4
@@ -1065,7 +1065,7 @@ _080B2C7E:
cmp r4, r0
bcc _080B2C5C
movs r0, 0
- bl sub_800B330
+ bl SetSuppressLinkErrorMessage
bl ResetBlockReceivedFlags
ldr r0, =gSpecialVar_Result
adds r1, r5, 0
@@ -1611,7 +1611,7 @@ sub_80B3144: @ 80B3144
cmp r2, 0
bne _080B3178
bl OpenLink
- bl sub_800A2BC
+ bl ResetLinkPlayers
ldr r0, =task00_08081A90
movs r1, 0x50
bl CreateTask
@@ -1710,7 +1710,7 @@ sub_80B3220: @ 80B3220
ldrb r0, [r0]
cmp r0, 0x1
bne _080B3248
- bl sub_800A23C
+ bl IsLinkPlayerDataExchangeComplete
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1813,7 +1813,7 @@ _080B32F8:
ldr r2, =0x00002211
adds r0, r2, 0
strh r0, [r1]
- bl sub_8009FAC
+ bl ClearLinkCallback_2
b _080B3346
.pool
_080B3318:
@@ -1926,7 +1926,7 @@ _080B3408:
ldr r2, =0x00002211
adds r1, r2, 0
strh r1, [r0]
- bl sub_8009FAC
+ bl ClearLinkCallback_2
movs r0, 0x1
strh r0, [r6]
b _080B3532
@@ -1945,7 +1945,7 @@ _080B343A:
b _080B3532
.pool
_080B3444:
- ldr r1, =gUnknown_020229CC
+ ldr r1, =gLocalLinkPlayer
movs r0, 0
movs r2, 0x1C
bl SendBlock
@@ -2172,7 +2172,7 @@ sub_80B360C: @ 80B360C
movs r5, 0x1
eors r0, r5
bl sub_813C2A0
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080B36B2
@@ -2400,7 +2400,7 @@ _080B382E:
movs r0, 0x1
movs r1, 0
bl FadeScreen
- bl sub_8009FAC
+ bl ClearLinkCallback_2
b _080B3864
_080B3840:
ldr r0, =gPaletteFade
@@ -2512,7 +2512,7 @@ _080B391C:
thumb_func_start sub_80B3924
sub_80B3924: @ 80B3924
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080B3940
@@ -2552,7 +2552,7 @@ sub_80B3968: @ 80B3968
ldr r2, =0x00002211
adds r0, r2, 0
strh r0, [r1]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080B3994
@@ -2652,7 +2652,7 @@ task00_08081A90: @ 80B3A30
cmp r1, r0
ble _080B3A62
bl CloseLink
- ldr r0, =c2_800ACD4
+ ldr r0, =CB2_LinkError
bl SetMainCallback2
adds r0, r4, 0
bl DestroyTask
@@ -2661,7 +2661,7 @@ _080B3A62:
ldrb r0, [r0]
cmp r0, 0
beq _080B3AA6
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _080B3AA0
@@ -2670,7 +2670,7 @@ _080B3A62:
cmp r0, 0
bne _080B3A86
bl CloseLink
- ldr r0, =c2_800ACD4
+ ldr r0, =CB2_LinkError
bl SetMainCallback2
_080B3A86:
adds r0, r4, 0
@@ -2752,7 +2752,7 @@ _080B3B20:
beq _080B3B9E
b _080B3BB8
_080B3B2A:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080B3B40
@@ -2808,7 +2808,7 @@ _080B3B9E:
ldrb r0, [r0]
cmp r0, 0x1
bne _080B3BB8
- bl sub_800A23C
+ bl IsLinkPlayerDataExchangeComplete
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -2825,7 +2825,7 @@ _080B3BB8:
thumb_func_start sub_80B3BC4
sub_80B3BC4: @ 80B3BC4
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _080B3BD6
diff --git a/asm/contest.s b/asm/contest.s
index 87abc1d06..8ea0d2d94 100644
--- a/asm/contest.s
+++ b/asm/contest.s
@@ -643,7 +643,7 @@ _080D7C04:
bl sub_800E0E8
movs r0, 0x8
movs r1, 0x8
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
_080D7C56:
pop {r4-r6}
pop {r0}
diff --git a/asm/contest_link_80F57C4.s b/asm/contest_link_80F57C4.s
index e73c657a9..c07be821f 100644
--- a/asm/contest_link_80F57C4.s
+++ b/asm/contest_link_80F57C4.s
@@ -2128,9 +2128,9 @@ sub_80F6AE8: @ 80F6AE8
bl sub_800E0E8
movs r0, 0x8
movs r1, 0x8
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
ldr r4, =gSprites
- ldr r0, =gUnknown_02022B10
+ ldr r0, =gWirelessStatusIndicatorSpriteId
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
diff --git a/asm/contest_link_80FC4F4.s b/asm/contest_link_80FC4F4.s
index ba96bf4ea..621e26038 100644
--- a/asm/contest_link_80FC4F4.s
+++ b/asm/contest_link_80FC4F4.s
@@ -147,7 +147,7 @@ sub_80FC5DC: @ 80FC5DC
ldr r1, =gUnknown_02039F2A
movs r0, 0x1
strb r0, [r1]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _080FC60C
diff --git a/asm/field_screen.s b/asm/field_screen.s
index d05028cc6..0943fe1e3 100644
--- a/asm/field_screen.s
+++ b/asm/field_screen.s
@@ -8987,7 +8987,7 @@ _080AF994:
beq _080AF9D0
b _080AF9E8
_080AF99A:
- bl sub_8009FAC
+ bl ClearLinkCallback_2
movs r0, 0x1
movs r1, 0
bl FadeScreen
diff --git a/asm/field_specials.s b/asm/field_specials.s
index 29aca304f..c1624cd0a 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -7126,7 +7126,7 @@ _0813B790:
b _0813B7C6
.pool
_0813B7A8:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0813B7B4
diff --git a/asm/intro.s b/asm/intro.s
index a0149851e..c1754873c 100644
--- a/asm/intro.s
+++ b/asm/intro.s
@@ -282,7 +282,7 @@ _0816CE6C:
.pool
_0816CE8C:
bl GameCubeMultiBoot_Quit
- ldr r0, =sub_800BA38
+ ldr r0, =SerialCB
bl SetSerialCallback
_0816CE96:
movs r0, 0
@@ -562,7 +562,7 @@ task_intro_2: @ 816D12C
movs r0, 0xCF
lsls r0, 1
bl m4aSongNumStart
- bl sub_800B628
+ bl ResetSerial
add sp, 0x4
pop {r4,r5}
pop {r0}
diff --git a/asm/item_menu.s b/asm/item_menu.s
deleted file mode 100644
index 010e83c49..000000000
--- a/asm/item_menu.s
+++ /dev/null
@@ -1,6452 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ResetBagScrollPositions
-ResetBagScrollPositions: @ 81AAB70
- push {r4,lr}
- ldr r4, =gUnknown_0203CE58
- movs r0, 0
- strb r0, [r4, 0x5]
- adds r0, r4, 0
- adds r0, 0x8
- movs r1, 0
- movs r2, 0xA
- bl memset
- adds r4, 0x12
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0xA
- bl memset
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ResetBagScrollPositions
-
- thumb_func_start CB2_BagMenuFromStartMenu
-@ void CB2_BagMenuFromStartMenu()
-CB2_BagMenuFromStartMenu: @ 81AAB9C
- push {lr}
- ldr r2, =sub_8086194
- movs r0, 0
- movs r1, 0x5
- bl GoToBagMenu
- pop {r0}
- bx r0
- .pool
- thumb_func_end CB2_BagMenuFromStartMenu
-
- thumb_func_start sub_81AABB0
-sub_81AABB0: @ 81AABB0
- push {lr}
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _081AABCC
- ldr r2, =SetCB2ToReshowScreenAfterMenu2
- movs r0, 0x1
- movs r1, 0x5
- bl GoToBagMenu
- b _081AABD4
- .pool
-_081AABCC:
- ldr r1, =SetCB2ToReshowScreenAfterMenu2
- movs r0, 0x1
- bl sub_81C4F98
-_081AABD4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AABB0
-
- thumb_func_start CB2_ChooseBerry
-CB2_ChooseBerry: @ 81AABDC
- push {lr}
- ldr r2, =sub_80861B0
- movs r0, 0x4
- movs r1, 0x3
- bl GoToBagMenu
- pop {r0}
- bx r0
- .pool
- thumb_func_end CB2_ChooseBerry
-
- thumb_func_start sub_81AABF0
-sub_81AABF0: @ 81AABF0
- push {lr}
- adds r2, r0, 0
- movs r0, 0x5
- movs r1, 0x3
- bl GoToBagMenu
- pop {r0}
- bx r0
- thumb_func_end sub_81AABF0
-
- thumb_func_start CB2_GoToSellMenu
-@ void CB2_GoToSellMenu()
-CB2_GoToSellMenu: @ 81AAC00
- push {lr}
- ldr r2, =CB2_ExitSellMenu
- movs r0, 0x3
- movs r1, 0x5
- bl GoToBagMenu
- pop {r0}
- bx r0
- .pool
- thumb_func_end CB2_GoToSellMenu
-
- thumb_func_start sub_81AAC14
-sub_81AAC14: @ 81AAC14
- push {lr}
- ldr r2, =sub_816B31C
- movs r0, 0x6
- movs r1, 0x5
- bl GoToBagMenu
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AAC14
-
- thumb_func_start sub_81AAC28
-sub_81AAC28: @ 81AAC28
- push {lr}
- ldr r2, =bag_menu_leave_maybe_3
- movs r0, 0x9
- movs r1, 0x5
- bl GoToBagMenu
- ldr r0, =gSpecialVar_0x8005
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AAC28
-
- thumb_func_start sub_81AAC50
-sub_81AAC50: @ 81AAC50
- push {lr}
- ldr r2, =bag_menu_leave_maybe_2
- movs r0, 0x7
- movs r1, 0x5
- bl GoToBagMenu
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AAC50
-
- thumb_func_start sub_81AAC70
-sub_81AAC70: @ 81AAC70
- push {lr}
- ldr r2, =bag_menu_leave_maybe
- movs r0, 0x8
- movs r1, 0x5
- bl GoToBagMenu
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AAC70
-
- thumb_func_start GoToBagMenu
-@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)())
-GoToBagMenu: @ 81AAC90
- push {r4-r7,lr}
- adds r4, r2, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- ldr r6, =gUnknown_0203CE54
- ldr r0, =0x00000c48
- bl AllocZeroed
- str r0, [r6]
- cmp r0, 0
- bne _081AACBC
- adds r0, r4, 0
- bl SetMainCallback2
- b _081AAD3A
- .pool
-_081AACBC:
- ldr r0, =gUnknown_0203CE58
- cmp r5, 0xC
- beq _081AACC4
- strb r5, [r0, 0x4]
-_081AACC4:
- cmp r4, 0
- beq _081AACCA
- str r4, [r0]
-_081AACCA:
- cmp r7, 0x4
- bhi _081AACD0
- strb r7, [r0, 0x5]
-_081AACD0:
- ldrb r0, [r0, 0x4]
- subs r0, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _081AACF0
- ldr r2, [r6]
- ldr r0, =0x0000081b
- adds r2, r0
- ldrb r1, [r2]
- movs r0, 0x10
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_081AACF0:
- ldr r0, [r6]
- movs r1, 0
- str r1, [r0]
- ldr r1, =0x0000081a
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
- ldr r0, [r6]
- ldr r1, =0x0000081e
- adds r0, r1
- movs r1, 0x1
- negs r1, r1
- strb r1, [r0]
- ldr r0, [r6]
- ldr r1, =0x0000081f
- adds r0, r1
- movs r1, 0x1
- negs r1, r1
- strb r1, [r0]
- ldr r0, [r6]
- ldr r1, =0x00000804
- adds r0, r1
- movs r1, 0xFF
- movs r2, 0xC
- bl memset
- ldr r0, [r6]
- movs r1, 0x81
- lsls r1, 4
- adds r0, r1
- movs r1, 0xFF
- movs r2, 0xA
- bl memset
- ldr r0, =CB2_Bag
- bl SetMainCallback2
-_081AAD3A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end GoToBagMenu
-
- thumb_func_start c2_bag_3
-c2_bag_3: @ 81AAD5C
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl do_scheduled_bg_tilemap_copies_to_vram
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end c2_bag_3
-
- thumb_func_start vblank_cb_bag_menu
-vblank_cb_bag_menu: @ 81AAD78
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end vblank_cb_bag_menu
-
- thumb_func_start CB2_Bag
-CB2_Bag: @ 81AAD8C
- push {lr}
-_081AAD8E:
- bl sub_81221EC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AADB2
- bl setup_bag_menu
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AADB2
- bl sub_81221AC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081AAD8E
-_081AADB2:
- pop {r0}
- bx r0
- thumb_func_end CB2_Bag
-
- thumb_func_start setup_bag_menu
-setup_bag_menu: @ 81AADB8
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x14
- bls _081AADCE
- b _081AB02C
-_081AADCE:
- lsls r0, 2
- ldr r1, =_081AADE0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081AADE0:
- .4byte _081AAE34
- .4byte _081AAE3E
- .4byte _081AAE50
- .4byte _081AAE56
- .4byte _081AAE78
- .4byte _081AAE7E
- .4byte _081AAE86
- .4byte _081AAEA4
- .4byte _081AAECC
- .4byte _081AAEDA
- .4byte _081AAEEC
- .4byte _081AAEFA
- .4byte _081AAF0C
- .4byte _081AAF1C
- .4byte _081AAF54
- .4byte _081AAFA0
- .4byte _081AAFBC
- .4byte _081AAFC2
- .4byte _081AAFD8
- .4byte _081AAFDE
- .4byte _081AAFF8
-_081AAE34:
- bl SetVBlankHBlankCallbacksToNull
- bl clear_scheduled_bg_copies_to_vram
- b _081AB012
-_081AAE3E:
- bl ScanlineEffect_Stop
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAE50:
- bl FreeAllSpritePalettes
- b _081AB012
-_081AAE56:
- bl ResetPaletteFade
- ldr r2, =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAE78:
- bl ResetSpriteData
- b _081AB012
-_081AAE7E:
- movs r0, 0x87
- lsls r0, 3
- adds r1, r2, r0
- b _081AB01A
-_081AAE86:
- bl sub_81221AC
- lsls r0, 24
- cmp r0, 0
- bne _081AAE94
- bl ResetTasks
-_081AAE94:
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAEA4:
- bl bag_menu_init_bgs
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000834
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAECC:
- bl load_bag_menu_graphics
- lsls r0, 24
- cmp r0, 0
- bne _081AAED8
- b _081AB044
-_081AAED8:
- b _081AB012
-_081AAEDA:
- bl setup_bag_menu_textboxes
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAEEC:
- bl sub_81ABA6C
- bl sub_81ABAC4
- bl sub_81ABAE0
- b _081AB012
-_081AAEFA:
- bl allocate_bag_item_list_buffers
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAF0C:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- bl load_bag_item_list_buffers
- b _081AB012
- .pool
-_081AAF1C:
- ldr r1, =gPocketNamesStringsTable
- ldr r4, =gUnknown_0203CE58
- ldrb r0, [r4, 0x5]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl bag_menu_print_pocket_names
- movs r0, 0
- bl bag_menu_copy_pocket_name_to_window
- ldrb r0, [r4, 0x5]
- movs r1, 0x1
- bl bag_menu_draw_pocket_indicator_square
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAF54:
- ldr r4, =gUnknown_0203CE58
- ldrb r0, [r4, 0x4]
- bl sub_81AB1F0
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gMultiuseListMenuTemplate
- ldrb r2, [r4, 0x5]
- lsls r2, 1
- adds r1, r4, 0
- adds r1, 0x12
- adds r1, r2, r1
- ldrh r1, [r1]
- adds r4, 0x8
- adds r2, r4
- ldrh r2, [r2]
- bl ListMenuInit
- ldr r2, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0
- strh r0, [r1, 0x8]
- strh r2, [r1, 0xE]
- strh r2, [r1, 0x18]
- b _081AB012
- .pool
-_081AAFA0:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- bl AddBagVisualObject
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAFBC:
- bl sub_80D4FAC
- b _081AB012
-_081AAFC2:
- bl bag_menu_add_pocket_scroll_arrow_indicators_maybe
- bl bag_menu_add_list_scroll_arrow_indicators_maybe
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAFD8:
- bl bag_menu_prepare_tmhm_move_window
- b _081AB012
-_081AAFDE:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- b _081AB01A
- .pool
-_081AAFF8:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
-_081AB012:
- ldr r1, =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
-_081AB01A:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _081AB044
- .pool
-_081AB02C:
- ldr r0, =vblank_cb_bag_menu
- bl SetVBlankCallback
- ldr r0, =c2_bag_3
- bl SetMainCallback2
- movs r0, 0x1
- b _081AB046
- .pool
-_081AB044:
- movs r0, 0
-_081AB046:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end setup_bag_menu
-
- thumb_func_start bag_menu_init_bgs
-bag_menu_init_bgs: @ 81AB050
- push {r4,lr}
- bl ResetVramOamAndBgCntRegs
- ldr r4, =gUnknown_0203CE54
- ldr r0, [r4]
- adds r0, 0x4
- movs r2, 0x80
- lsls r2, 4
- movs r1, 0
- bl memset
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_08613F90
- movs r0, 0
- movs r2, 0x3
- bl InitBgsFromTemplates
- ldr r1, [r4]
- adds r1, 0x4
- movs r0, 0x2
- bl SetBgTilemapBuffer
- bl ResetAllBgsCoordinates
- movs r0, 0x2
- bl schedule_bg_copy_tilemap_to_vram
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_init_bgs
-
- thumb_func_start load_bag_menu_graphics
-load_bag_menu_graphics: @ 81AB0BC
- push {r4,lr}
- sub sp, 0x4
- ldr r4, =gUnknown_0203CE54
- ldr r0, [r4]
- ldr r1, =0x00000834
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x4
- bls _081AB0D2
- b _081AB1CC
-_081AB0D2:
- lsls r0, 2
- ldr r1, =_081AB0E8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081AB0E8:
- .4byte _081AB0FC
- .4byte _081AB118
- .4byte _081AB13C
- .4byte _081AB174
- .4byte _081AB1A8
-_081AB0FC:
- bl reset_temp_tile_data_buffers
- ldr r1, =gBagScreen_Gfx
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl decompress_and_copy_tile_data_to_vram
- b _081AB1AE
- .pool
-_081AB118:
- bl free_temp_tile_data_buffers_if_possible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AB1E4
- ldr r0, =gUnknown_08D9A88C
- ldr r4, =gUnknown_0203CE54
- ldr r1, [r4]
- adds r1, 0x4
- bl LZDecompressWram
- ldr r1, [r4]
- b _081AB1B2
- .pool
-_081AB13C:
- bl IsWallysBag
- lsls r0, 24
- cmp r0, 0
- bne _081AB164
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _081AB164
- ldr r0, =gBagScreenFemale_Pal
- movs r1, 0
- movs r2, 0x40
- bl LoadCompressedPalette
- b _081AB1AE
- .pool
-_081AB164:
- ldr r0, =gBagScreenMale_Pal
- movs r1, 0
- movs r2, 0x40
- bl LoadCompressedPalette
- b _081AB1AE
- .pool
-_081AB174:
- bl IsWallysBag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AB18A
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _081AB19C
-_081AB18A:
- ldr r0, =gUnknown_0857FB34
- bl LoadCompressedObjectPic
- b _081AB1AE
- .pool
-_081AB19C:
- ldr r0, =gUnknown_0857FB3C
- bl LoadCompressedObjectPic
- b _081AB1AE
- .pool
-_081AB1A8:
- ldr r0, =gUnknown_0857FB44
- bl LoadCompressedObjectPalette
-_081AB1AE:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
-_081AB1B2:
- ldr r0, =0x00000834
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _081AB1E4
- .pool
-_081AB1CC:
- bl LoadListMenuArrowsGfx
- ldr r0, [r4]
- ldr r1, =0x00000834
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- movs r0, 0x1
- b _081AB1E6
- .pool
-_081AB1E4:
- movs r0, 0
-_081AB1E6:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end load_bag_menu_graphics
-
- thumb_func_start sub_81AB1F0
-sub_81AB1F0: @ 81AB1F0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xA
- bne _081AB204
- ldr r0, =Task_WallyTutorialBagMenu
- b _081AB206
- .pool
-_081AB204:
- ldr r0, =Task_BagMenu
-_081AB206:
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81AB1F0
-
- thumb_func_start allocate_bag_item_list_buffers
-allocate_bag_item_list_buffers: @ 81AB218
- push {r4,lr}
- ldr r4, =gUnknown_0203CE74
- movs r0, 0x82
- lsls r0, 2
- bl Alloc
- str r0, [r4]
- ldr r4, =gUnknown_0203CE78
- movs r0, 0xC3
- lsls r0, 3
- bl Alloc
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end allocate_bag_item_list_buffers
-
- thumb_func_start load_bag_item_list_buffers
-@ void load_bag_item_list_buffers(int pocket_id)
-load_bag_item_list_buffers: @ 81AB240
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, r7, 3
- ldr r0, =gBagPockets
- adds r1, r0
- mov r8, r1
- ldr r0, =gUnknown_0203CE54
- ldr r2, [r0]
- ldr r1, =0x0000081b
- adds r0, r2, r1
- ldrb r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081AB2FC
- movs r6, 0
- ldr r3, =0x00000829
- adds r0, r2, r3
- adds r0, r7
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r6, r0
- bge _081AB2B6
- ldr r5, =gUnknown_0203CE78
-_081AB276:
- lsls r4, r6, 1
- adds r4, r6
- lsls r4, 3
- ldr r0, [r5]
- adds r0, r4
- mov r1, r8
- ldr r2, [r1]
- lsls r1, r6, 2
- adds r1, r2
- ldrh r1, [r1]
- bl get_name
- ldr r0, =gUnknown_0203CE74
- ldr r0, [r0]
- lsls r1, r6, 3
- adds r1, r0
- ldr r0, [r5]
- adds r0, r4
- str r0, [r1]
- str r6, [r1, 0x4]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r3, =0x00000829
- adds r0, r3
- adds r0, r7
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r6, r0
- blt _081AB276
-_081AB2B6:
- ldr r5, =gUnknown_0203CE78
- lsls r4, r6, 1
- adds r4, r6
- lsls r4, 3
- ldr r0, [r5]
- adds r0, r4
- ldr r1, =gText_CloseBag
- bl StringCopy
- ldr r0, =gUnknown_0203CE74
- ldr r0, [r0]
- lsls r1, r6, 3
- adds r1, r0
- ldr r0, [r5]
- adds r0, r4
- str r0, [r1]
- movs r0, 0x2
- negs r0, r0
- str r0, [r1, 0x4]
- b _081AB34A
- .pool
-_081AB2FC:
- movs r6, 0
- ldr r4, =0x00000829
- adds r0, r2, r4
- adds r0, r7
- ldrb r0, [r0]
- cmp r6, r0
- bcs _081AB34A
- ldr r5, =gUnknown_0203CE78
-_081AB30C:
- lsls r4, r6, 1
- adds r4, r6
- lsls r4, 3
- ldr r0, [r5]
- adds r0, r4
- mov r1, r8
- ldr r2, [r1]
- lsls r1, r6, 2
- adds r1, r2
- ldrh r1, [r1]
- bl get_name
- ldr r0, =gUnknown_0203CE74
- ldr r0, [r0]
- lsls r1, r6, 3
- adds r1, r0
- ldr r0, [r5]
- adds r0, r4
- str r0, [r1]
- str r6, [r1, 0x4]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r3, =0x00000829
- adds r0, r3
- adds r0, r7
- ldrb r0, [r0]
- cmp r6, r0
- bcc _081AB30C
-_081AB34A:
- ldr r2, =gMultiuseListMenuTemplate
- adds r1, r2, 0
- ldr r0, =gUnknown_08613F9C
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- ldr r4, =0x00000829
- adds r0, r1, r4
- adds r0, r7
- ldrb r0, [r0]
- strh r0, [r2, 0xC]
- ldr r0, =gUnknown_0203CE74
- ldr r0, [r0]
- str r0, [r2]
- ldr r5, =0x0000082e
- adds r1, r5
- adds r1, r7
- ldrb r0, [r1]
- strh r0, [r2, 0xE]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end load_bag_item_list_buffers
-
- thumb_func_start get_name
-@ void get_name(char *dest, int name_id)
-get_name: @ 81AB39C
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- cmp r0, 0x2
- beq _081AB3C0
- cmp r0, 0x3
- beq _081AB420
- adds r0, r5, 0
- adds r1, r6, 0
- bl CopyItemName
- b _081AB43E
- .pool
-_081AB3C0:
- ldr r4, =gStringVar2
- adds r0, r5, 0
- bl ItemIdToBattleMoveId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xD
- muls r1, r0
- ldr r0, =gMoveNames
- adds r1, r0
- adds r0, r4, 0
- bl StringCopy
- movs r0, 0xA9
- lsls r0, 1
- cmp r5, r0
- bls _081AB408
- ldr r0, =gStringVar1
- ldr r2, =0xfffffeae
- adds r1, r5, r2
- movs r2, 0x2
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- ldr r1, =gText_ClearTo11Var1Clear5Var2
- b _081AB438
- .pool
-_081AB408:
- ldr r0, =gStringVar1
- ldr r2, =0xfffffee0
- adds r1, r5, r2
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- b _081AB436
- .pool
-_081AB420:
- ldr r0, =gStringVar1
- adds r1, r5, 0
- subs r1, 0x84
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r1, =gStringVar2
- adds r0, r5, 0
- bl CopyItemName
-_081AB436:
- ldr r1, =gText_UnkF908Var1Clear7Var2
-_081AB438:
- adds r0, r6, 0
- bl StringExpandPlaceholders
-_081AB43E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end get_name
-
- thumb_func_start bag_menu_change_item_callback
-bag_menu_change_item_callback: @ 81AB450
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x1
- beq _081AB466
- movs r0, 0x5
- bl PlaySE
- bl ShakeBagVisual
-_081AB466:
- ldr r4, =gUnknown_0203CE54
- ldr r1, [r4]
- ldr r2, =0x0000081a
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081AB50C
- adds r2, 0x1
- adds r0, r1, r2
- ldrb r1, [r0]
- lsls r1, 26
- lsrs r1, 30
- movs r0, 0x1
- eors r0, r1
- bl RemoveBagItemIconObject
- movs r0, 0x2
- negs r0, r0
- cmp r6, r0
- beq _081AB4C8
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r6, 16
- lsrs r1, 16
- bl BagGetItemIdByPocketPosition
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [r4]
- ldr r2, =0x0000081b
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 26
- lsrs r1, 30
- bl AddBagItemIconObject
- b _081AB4DA
- .pool
-_081AB4C8:
- ldr r0, =0x0000ffff
- ldr r1, [r4]
- ldr r2, =0x0000081b
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 26
- lsrs r1, 30
- bl AddBagItemIconObject
-_081AB4DA:
- ldr r5, =gUnknown_0203CE54
- ldr r2, [r5]
- ldr r4, =0x0000081b
- adds r2, r4
- ldrb r3, [r2]
- lsls r0, r3, 26
- lsrs r0, 30
- movs r1, 0x1
- eors r1, r0
- lsls r1, 4
- movs r0, 0x31
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldr r0, [r5]
- adds r0, r4
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _081AB50C
- adds r0, r6, 0
- bl bag_menu_print_description_box_text
-_081AB50C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_change_item_callback
-
- thumb_func_start sub_81AB520
-@ void sub_81AB520(u8 rbox_id, int item_index_in_pocket, int a3)
-sub_81AB520: @ 81AB520
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r2, 24
- lsrs r7, r2, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- bne _081AB540
- b _081AB696
-_081AB540:
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x0000081a
- adds r0, r1
- ldrb r1, [r0]
- cmp r1, 0xFF
- beq _081AB570
- lsls r0, r4, 24
- lsrs r0, 24
- cmp r1, r0
- bne _081AB568
- adds r0, r7, 0
- movs r1, 0x2
- bl bag_menu_print_cursor
- b _081AB570
- .pool
-_081AB568:
- adds r0, r7, 0
- movs r1, 0xFF
- bl bag_menu_print_cursor
-_081AB570:
- ldr r5, =gUnknown_0203CE58
- ldrb r0, [r5, 0x5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- adds r1, r4, 0
- bl BagGetItemIdByPocketPosition
- lsls r0, 16
- lsrs r6, r0, 16
- ldrb r0, [r5, 0x5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl BagGetQuantityByPocketPosition
- lsls r0, 16
- lsrs r4, r0, 16
- mov r9, r4
- ldr r1, =0xfffffead
- adds r0, r6, r1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x7
- bhi _081AB5BE
- ldr r1, =gBagMenuHMIcon_Gfx
- subs r3, r7, 0x1
- lsls r3, 16
- lsrs r3, 16
- movs r0, 0x10
- str r0, [sp]
- str r0, [sp, 0x4]
- mov r0, r8
- movs r2, 0x8
- bl BlitBitmapToWindow
-_081AB5BE:
- ldrb r0, [r5, 0x5]
- cmp r0, 0x3
- bne _081AB610
- ldr r0, =gStringVar1
- adds r1, r4, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_xVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x7
- adds r1, r4, 0
- movs r2, 0x77
- bl GetStringRightAlignXOffset
- lsls r3, r0, 24
- lsrs r3, 24
- str r7, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r0, 0xFF
- str r0, [sp, 0xC]
- str r1, [sp, 0x10]
- b _081AB652
- .pool
-_081AB610:
- cmp r0, 0x4
- beq _081AB66C
- adds r0, r6, 0
- bl itemid_is_unique
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _081AB66C
- ldr r0, =gStringVar1
- mov r1, r9
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_xVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x7
- adds r1, r4, 0
- movs r2, 0x77
- bl GetStringRightAlignXOffset
- lsls r3, r0, 24
- lsrs r3, 24
- str r7, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0xFF
- str r0, [sp, 0xC]
- str r5, [sp, 0x10]
-_081AB652:
- mov r0, r8
- movs r1, 0x7
- adds r2, r4, 0
- bl bag_menu_print
- b _081AB696
- .pool
-_081AB66C:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00000496
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0
- beq _081AB696
- cmp r0, r6
- bne _081AB696
- ldr r1, =gUnknown_086140A4
- subs r3, r7, 0x1
- lsls r3, 16
- lsrs r3, 16
- movs r0, 0x18
- str r0, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- mov r0, r8
- movs r2, 0x60
- bl BlitBitmapToWindow
-_081AB696:
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AB520
-
- thumb_func_start bag_menu_print_description_box_text
-@ void bag_menu_print_description_box_text(int a1)
-bag_menu_print_description_box_text: @ 81AB6B0
- push {r4,lr}
- sub sp, 0x14
- adds r1, r0, 0
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- beq _081AB6E0
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- bl BagGetItemIdByPocketPosition
- lsls r0, 16
- lsrs r0, 16
- bl ItemId_GetDescription
- adds r4, r0, 0
- b _081AB6FC
- .pool
-_081AB6E0:
- ldr r0, =gStringVar1
- ldr r2, =gReturnToXStringsTable
- ldr r1, =gUnknown_0203CE58
- ldrb r1, [r1, 0x4]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- ldr r4, =gStringVar4
- ldr r1, =gText_ReturnToVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
-_081AB6FC:
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x3
- bl bag_menu_print
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_print_description_box_text
-
- thumb_func_start bag_menu_print_cursor_
-bag_menu_print_cursor_: @ 81AB73C
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 24
- lsrs r4, 24
- bl ListMenuGetYCoordForPrintingArrowCursor
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl bag_menu_print_cursor
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end bag_menu_print_cursor_
-
- thumb_func_start bag_menu_print_cursor
-bag_menu_print_cursor: @ 81AB75C
- push {r4,r5,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0xFF
- bne _081AB798
- movs r0, 0x1
- movs r1, 0
- bl GetMenuCursorDimensionByFont
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- movs r1, 0x1
- bl GetMenuCursorDimensionByFont
- lsls r0, 24
- lsrs r0, 24
- str r4, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- adds r3, r5, 0
- bl FillWindowPixelRect
- b _081AB7AE
-_081AB798:
- ldr r2, =gText_SelectorArrow2
- str r5, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r1, [sp, 0x10]
- movs r1, 0x1
- movs r3, 0
- bl bag_menu_print
-_081AB7AE:
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_print_cursor
-
- thumb_func_start bag_menu_add_pocket_scroll_arrow_indicators_maybe
-bag_menu_add_pocket_scroll_arrow_indicators_maybe: @ 81AB7BC
- push {r4-r6,lr}
- sub sp, 0x10
- ldr r5, =gUnknown_0203CE54
- ldr r4, [r5]
- ldr r1, =0x0000081e
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081AB80A
- ldr r2, =gUnknown_0203CE58
- ldrb r3, [r2, 0x5]
- ldr r6, =0x00000829
- adds r0, r4, r6
- adds r0, r3
- ldrb r1, [r0]
- adds r6, 0x5
- adds r0, r4, r6
- adds r0, r3
- ldrb r0, [r0]
- subs r1, r0
- str r1, [sp]
- movs r0, 0x6E
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- ldrb r0, [r2, 0x5]
- lsls r0, 1
- adds r2, 0x12
- adds r0, r2
- str r0, [sp, 0xC]
- movs r0, 0x2
- movs r1, 0xAC
- movs r2, 0xC
- movs r3, 0x94
- bl AddScrollIndicatorArrowPairParametrized
- ldr r1, [r5]
- ldr r2, =0x0000081e
- adds r1, r2
- strb r0, [r1]
-_081AB80A:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_add_pocket_scroll_arrow_indicators_maybe
-
- thumb_func_start sub_81AB824
-sub_81AB824: @ 81AB824
- push {r4,lr}
- ldr r4, =gUnknown_0203CE54
- ldr r0, [r4]
- ldr r2, =0x0000081e
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _081AB842
- bl RemoveScrollIndicatorArrowPair
- ldr r0, [r4]
- ldr r1, =0x0000081e
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
-_081AB842:
- bl sub_81AB89C
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AB824
-
- thumb_func_start bag_menu_add_list_scroll_arrow_indicators_maybe
-bag_menu_add_list_scroll_arrow_indicators_maybe: @ 81AB854
- push {r4,lr}
- ldr r4, =gUnknown_0203CE54
- ldr r2, [r4]
- ldr r1, =0x0000081b
- adds r0, r2, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- beq _081AB882
- ldr r1, =0x0000081f
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081AB882
- ldr r0, =gUnknown_08614094
- ldr r1, =gUnknown_0203CE5E
- bl AddScrollIndicatorArrowPair
- ldr r1, [r4]
- ldr r2, =0x0000081f
- adds r1, r2
- strb r0, [r1]
-_081AB882:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_add_list_scroll_arrow_indicators_maybe
-
- thumb_func_start sub_81AB89C
-sub_81AB89C: @ 81AB89C
- push {r4,lr}
- ldr r4, =gUnknown_0203CE54
- ldr r0, [r4]
- ldr r2, =0x0000081f
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _081AB8BA
- bl RemoveScrollIndicatorArrowPair
- ldr r0, [r4]
- ldr r1, =0x0000081f
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
-_081AB8BA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AB89C
-
- thumb_func_start free_bag_item_list_buffers
-free_bag_item_list_buffers: @ 81AB8C8
- push {lr}
- ldr r0, =gUnknown_0203CE78
- ldr r0, [r0]
- bl Free
- ldr r0, =gUnknown_0203CE74
- ldr r0, [r0]
- bl Free
- bl FreeAllWindowBuffers
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- bl Free
- pop {r0}
- bx r0
- .pool
- thumb_func_end free_bag_item_list_buffers
-
- thumb_func_start unknown_ItemMenu_Confirm
-unknown_ItemMenu_Confirm: @ 81AB8F8
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_close_bag_menu_2
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end unknown_ItemMenu_Confirm
-
- thumb_func_start task_close_bag_menu_2
-task_close_bag_menu_2: @ 81AB930
- 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 r2, r0, r1
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081AB9A0
- ldrb r0, [r2]
- ldr r4, =gUnknown_0203CE58
- ldrb r2, [r4, 0x5]
- lsls r2, 1
- adds r1, r4, 0
- adds r1, 0x12
- adds r1, r2, r1
- adds r3, r4, 0
- adds r3, 0x8
- adds r2, r3
- bl sub_81AE6C8
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r0, [r0]
- cmp r0, 0
- beq _081AB984
- bl SetMainCallback2
- b _081AB98A
- .pool
-_081AB984:
- ldr r0, [r4]
- bl SetMainCallback2
-_081AB98A:
- bl sub_81AB824
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl free_bag_item_list_buffers
- adds r0, r5, 0
- bl DestroyTask
-_081AB9A0:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end task_close_bag_menu_2
-
- thumb_func_start sub_81AB9A8
-sub_81AB9A8: @ 81AB9A8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, r5, 3
- ldr r0, =gBagPockets
- adds r4, r1, r0
- cmp r5, 0x3
- bgt _081AB9C8
- cmp r5, 0x2
- blt _081AB9C8
- adds r0, r4, 0
- bl sub_80D6FB4
- b _081AB9CE
- .pool
-_081AB9C8:
- adds r0, r4, 0
- bl sub_80D6F64
-_081AB9CE:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- ldr r6, =0x00000829
- adds r1, r6
- adds r1, r5
- movs r2, 0
- strb r2, [r1]
- adds r3, r0, 0
- ldrb r0, [r4, 0x4]
- cmp r2, r0
- bcs _081ABA12
- ldr r0, [r4]
- ldrh r0, [r0]
- cmp r0, 0
- beq _081ABA12
- adds r7, r3, 0
-_081AB9EE:
- ldr r0, [r7]
- adds r0, r6
- adds r0, r5
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldrb r1, [r4, 0x4]
- cmp r2, r1
- bcs _081ABA12
- ldr r0, [r4]
- lsls r1, r2, 2
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _081AB9EE
-_081ABA12:
- ldr r2, [r3]
- ldr r1, =0x0000081b
- adds r0, r2, r1
- ldrb r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081ABA2E
- ldr r0, =0x00000829
- adds r1, r2, r0
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_081ABA2E:
- ldr r1, [r3]
- ldr r2, =0x00000829
- adds r0, r1, r2
- adds r0, r5
- ldrb r2, [r0]
- cmp r2, 0x8
- bls _081ABA58
- ldr r3, =0x0000082e
- adds r0, r1, r3
- adds r0, r5
- movs r1, 0x8
- strb r1, [r0]
- b _081ABA60
- .pool
-_081ABA58:
- ldr r3, =0x0000082e
- adds r0, r1, r3
- adds r0, r5
- strb r2, [r0]
-_081ABA60:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AB9A8
-
- thumb_func_start sub_81ABA6C
-sub_81ABA6C: @ 81ABA6C
- push {r4,lr}
- movs r4, 0
-_081ABA70:
- adds r0, r4, 0
- bl sub_81AB9A8
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x4
- bls _081ABA70
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81ABA6C
-
- thumb_func_start sub_81ABA88
-sub_81ABA88: @ 81ABA88
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- ldr r2, =gUnknown_0203CE6A
- adds r4, r1, r2
- subs r2, 0xA
- adds r1, r2
- ldr r2, =gUnknown_0203CE54
- ldr r3, [r2]
- ldr r5, =0x0000082e
- adds r2, r3, r5
- adds r2, r0
- ldrb r2, [r2]
- subs r5, 0x5
- adds r3, r5
- adds r3, r0
- ldrb r3, [r3]
- adds r0, r4, 0
- bl sub_812225C
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ABA88
-
- thumb_func_start sub_81ABAC4
-sub_81ABAC4: @ 81ABAC4
- push {r4,lr}
- movs r4, 0
-_081ABAC8:
- adds r0, r4, 0
- bl sub_81ABA88
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x4
- bls _081ABAC8
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81ABAC4
-
- thumb_func_start sub_81ABAE0
-sub_81ABAE0: @ 81ABAE0
- push {r4-r7,lr}
- sub sp, 0x4
- movs r5, 0
- ldr r6, =gUnknown_0203CE6A
- adds r7, r6, 0
- subs r7, 0xA
-_081ABAEC:
- lsls r1, r5, 1
- adds r0, r1, r6
- adds r1, r7
- ldr r2, =gUnknown_0203CE54
- ldr r3, [r2]
- ldr r4, =0x0000082e
- adds r2, r3, r4
- adds r2, r5
- ldrb r2, [r2]
- subs r4, 0x5
- adds r3, r4
- adds r3, r5
- ldrb r3, [r3]
- movs r4, 0x8
- str r4, [sp]
- bl sub_8122298
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bls _081ABAEC
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ABAE0
-
- thumb_func_start sub_81ABB2C
-sub_81ABB2C: @ 81ABB2C
- lsls r0, 24
- ldr r1, =gUnknown_0203CE58
- lsrs r0, 23
- adds r2, r1, 0
- adds r2, 0x12
- adds r2, r0, r2
- adds r1, 0x8
- adds r0, r1
- ldrb r0, [r0]
- ldrb r2, [r2]
- adds r0, r2
- lsls r0, 24
- lsrs r0, 24
- bx lr
- .pool
- thumb_func_end sub_81ABB2C
-
- thumb_func_start DisplayItemMessage
-@ void DisplayItemMessage(u8 taskId, u8 fontId, u8 *str, void ( *callback)(u8 taskId))
-DisplayItemMessage: @ 81ABB4C
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x10
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- mov r9, r3
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- movs r0, 0x4
- bl AddItemMessageWindow
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- bl GetPlayerTextSpeed
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r4, 0x14]
- str r6, [sp]
- str r0, [sp, 0x4]
- mov r0, r8
- str r0, [sp, 0x8]
- mov r0, r9
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r2, 0xA
- movs r3, 0xD
- bl DisplayMessageAndContinueTask
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DisplayItemMessage
-
- thumb_func_start bag_menu_inits_lists_menu
-bag_menu_inits_lists_menu: @ 81ABBBC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r5, r6, 2
- adds r5, r6
- lsls r5, 3
- ldr r0, =gTasks + 0x8
- adds r5, r0
- ldr r7, =gUnknown_0203CE58
- ldrb r4, [r7, 0x5]
- lsls r4, 1
- movs r0, 0x12
- adds r0, r7
- mov r8, r0
- add r8, r4
- adds r0, r7, 0
- adds r0, 0x8
- adds r4, r0
- movs r0, 0x4
- bl bag_menu_RemoveBagItem_message_window
- ldrb r0, [r5]
- mov r1, r8
- adds r2, r4, 0
- bl sub_81AE6C8
- ldrb r0, [r7, 0x5]
- bl sub_81AB9A8
- ldrb r0, [r7, 0x5]
- bl sub_81ABA88
- ldrb r0, [r7, 0x5]
- bl load_bag_item_list_buffers
- ldr r0, =gMultiuseListMenuTemplate
- mov r2, r8
- ldrh r1, [r2]
- ldrh r2, [r4]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5]
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- adds r0, r6, 0
- bl set_callback3_to_bag
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_inits_lists_menu
-
- thumb_func_start sub_81ABC3C
-sub_81ABC3C: @ 81ABC3C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl bag_menu_add_window
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_81ABC54
- pop {r0}
- bx r0
- thumb_func_end sub_81ABC3C
-
- thumb_func_start sub_81ABC54
-sub_81ABC54: @ 81ABC54
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- movs r3, 0x2
- cmp r0, 0x3
- bne _081ABC6C
- movs r3, 0x3
-_081ABC6C:
- ldr r0, =gStringVar1
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x2
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_xVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0x28
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl PrintTextOnWindow
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ABC54
-
- thumb_func_start sub_81ABCC0
-sub_81ABCC0: @ 81ABCC0
- push {r4-r7,lr}
- sub sp, 0xC
- adds r4, r0, 0
- adds r7, r2, 0
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- movs r3, 0x2
- cmp r0, 0x3
- bne _081ABCD4
- movs r3, 0x3
-_081ABCD4:
- ldr r0, =gStringVar1
- movs r2, 0x2
- bl ConvertIntToDecimalStringN
- ldr r6, =gStringVar4
- ldr r1, =gText_xVar1
- adds r0, r6, 0
- bl StringExpandPlaceholders
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r5, 0
- str r5, [sp, 0x8]
- adds r0, r4, 0
- movs r1, 0x1
- adds r2, r6, 0
- movs r3, 0
- bl PrintTextOnWindow
- str r5, [sp]
- adds r0, r4, 0
- movs r1, 0x26
- movs r2, 0x1
- adds r3, r7, 0
- bl PrintMoneyAmount
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ABCC0
-
- thumb_func_start Task_BagMenu
-Task_BagMenu: @ 81ABD28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- str r0, [sp]
- ldr r1, =gTasks + 0x8
- adds r6, r0, r1
- ldr r5, =gUnknown_0203CE58
- ldrb r0, [r5, 0x5]
- lsls r0, 1
- adds r1, r5, 0
- adds r1, 0x12
- adds r7, r0, r1
- subs r1, 0xA
- adds r0, r1
- mov r8, r0
- bl sub_81221EC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081ABD66
- b _081ABEB2
-_081ABD66:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _081ABD74
- b _081ABEB2
-_081ABD74:
- bl GetSwitchBagPocketDirection
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081ABDB8
- cmp r0, 0x2
- beq _081ABDC0
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- cmp r0, 0
- beq _081ABE10
- bl sub_81AC2C0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081ABDA4
- b _081ABEB2
-_081ABDA4:
- b _081ABDCC
- .pool
-_081ABDB8:
- movs r1, 0x1
- negs r1, r1
- mov r0, r9
- b _081ABDC4
-_081ABDC0:
- mov r0, r9
- movs r1, 0x1
-_081ABDC4:
- movs r2, 0
- bl SwitchBagPocket
- b _081ABEB2
-_081ABDCC:
- ldrb r0, [r6]
- adds r1, r7, 0
- mov r2, r8
- bl sub_81AE860
- ldrh r2, [r7]
- mov r3, r8
- ldrh r0, [r3]
- adds r2, r0
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =gUnknown_0203CE58
- ldr r3, =0x00000829
- adds r0, r3
- ldrb r1, [r1, 0x5]
- adds r0, r1
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r2, r0
- beq _081ABEB2
- movs r0, 0x5
- bl PlaySE
- mov r0, r9
- bl bag_menu_swap_items
- b _081ABEB2
- .pool
-_081ABE10:
- ldrb r0, [r6]
- bl ListMenuHandleInputGetItemId
- adds r4, r0, 0
- ldrb r0, [r6]
- adds r1, r7, 0
- mov r2, r8
- bl sub_81AE860
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _081ABE32
- adds r0, 0x1
- cmp r4, r0
- bne _081ABE68
- b _081ABEB2
-_081ABE32:
- ldrb r0, [r5, 0x4]
- cmp r0, 0x5
- bne _081ABE40
- movs r0, 0x20
- bl PlaySE
- b _081ABEB2
-_081ABE40:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gSpecialVar_ItemId
- mov r1, r10
- strh r1, [r0]
- ldr r0, =gTasks + 0x8
- subs r0, 0x8
- ldr r3, [sp]
- adds r0, r3, r0
- ldr r1, =unknown_ItemMenu_Confirm
- str r1, [r0]
- b _081ABEB2
- .pool
-_081ABE68:
- movs r0, 0x5
- bl PlaySE
- bl sub_81AB824
- ldrb r0, [r6]
- movs r1, 0x2
- bl bag_menu_print_cursor_
- strh r4, [r6, 0x2]
- ldrb r0, [r5, 0x5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- adds r1, r4, 0
- bl BagGetQuantityByPocketPosition
- strh r0, [r6, 0x4]
- ldrb r0, [r5, 0x5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl BagGetItemIdByPocketPosition
- ldr r1, =gSpecialVar_ItemId
- strh r0, [r1]
- ldr r1, =gUnknown_08614054
- ldrb r0, [r5, 0x4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- mov r0, r9
- bl _call_via_r1
-_081ABEB2:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_BagMenu
-
- thumb_func_start set_callback3_to_bag
-set_callback3_to_bag: @ 81ABECC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl bag_menu_add_pocket_scroll_arrow_indicators_maybe
- bl bag_menu_add_list_scroll_arrow_indicators_maybe
- movs r0, 0x3
- bl ClearWindowTilemap
- movs r0, 0x4
- bl ClearWindowTilemap
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_BagMenu
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end set_callback3_to_bag
-
- thumb_func_start GetSwitchBagPocketDirection
-GetSwitchBagPocketDirection: @ 81ABF10
- push {lr}
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x0000081b
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _081ABF6A
- bl GetLRKeysState
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _081ABF3C
- cmp r2, 0x1
- bne _081ABF54
-_081ABF3C:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- b _081ABF6C
- .pool
-_081ABF54:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _081ABF60
- cmp r2, 0x2
- bne _081ABF6A
-_081ABF60:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x2
- b _081ABF6C
-_081ABF6A:
- movs r0, 0
-_081ABF6C:
- pop {r1}
- bx r1
- thumb_func_end GetSwitchBagPocketDirection
-
- thumb_func_start ChangeBagPocketId
-@ void ChangeBagPocketId(u8 *bagPocketId, u8 deltaBagPocketId)
-ChangeBagPocketId: @ 81ABF70
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- asrs r1, 24
- cmp r1, 0x1
- bne _081ABF88
- ldrb r0, [r2]
- cmp r0, 0x4
- bne _081ABF88
- movs r0, 0
- b _081ABFA0
-_081ABF88:
- lsls r0, r4, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- ldrb r3, [r2]
- cmp r0, r1
- bne _081ABF9E
- cmp r3, 0
- bne _081ABF9E
- movs r0, 0x4
- b _081ABFA0
-_081ABF9E:
- adds r0, r3, r4
-_081ABFA0:
- strb r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ChangeBagPocketId
-
- thumb_func_start SwitchBagPocket
-@ void SwitchBagPocket(u8 taskId, u16 deltaBagPocketId, u16 a3)
-SwitchBagPocket: @ 81ABFA8
- push {r4-r6,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 16
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- movs r0, 0
- strh r0, [r4, 0x1A]
- strh r0, [r4, 0x18]
- strh r5, [r4, 0x16]
- cmp r2, 0
- bne _081AC026
- movs r0, 0
- bl ClearWindowTilemap
- movs r0, 0x1
- bl ClearWindowTilemap
- ldrb r0, [r4]
- ldr r3, =gUnknown_0203CE58
- ldrb r2, [r3, 0x5]
- lsls r2, 1
- adds r1, r3, 0
- adds r1, 0x12
- adds r1, r2, r1
- adds r3, 0x8
- adds r2, r3
- bl sub_81AE6C8
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r3, =gSprites
- ldr r0, =gUnknown_0203CE54
- ldr r2, [r0]
- ldr r1, =0x0000081b
- adds r0, r2, r1
- ldrb r1, [r0]
- lsls r1, 26
- lsrs r1, 30
- movs r0, 0x1
- eors r0, r1
- adds r2, r0
- ldr r0, =0x00000806
- adds r2, r0
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- bl sub_81AB824
-_081AC026:
- ldr r4, =gUnknown_0203CE58
- ldrb r1, [r4, 0x5]
- add r0, sp, 0x8
- strb r1, [r0]
- lsls r1, r5, 24
- asrs r1, 24
- bl ChangeBagPocketId
- lsls r0, r5, 16
- asrs r1, r0, 16
- adds r5, r0, 0
- cmp r1, 0x1
- bne _081AC07C
- ldr r2, =gPocketNamesStringsTable
- ldrb r0, [r4, 0x5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- add r1, sp, 0x8
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl bag_menu_print_pocket_names
- movs r0, 0
- bl bag_menu_copy_pocket_name_to_window
- b _081AC09A
- .pool
-_081AC07C:
- ldr r2, =gPocketNamesStringsTable
- add r0, sp, 0x8
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrb r1, [r4, 0x5]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl bag_menu_print_pocket_names
- movs r0, 0x8
- bl bag_menu_copy_pocket_name_to_window
-_081AC09A:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- movs r1, 0
- bl bag_menu_draw_pocket_indicator_square
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x1
- bl bag_menu_draw_pocket_indicator_square
- movs r0, 0xF
- str r0, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0xB
- movs r2, 0xE
- movs r3, 0x2
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0x2
- bl schedule_bg_copy_tilemap_to_vram
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x1
- bl SetBagVisualPocketId
- movs r0, 0x1
- bl RemoveBagObject
- asrs r0, r5, 16
- bl AddSwitchPocketRotatingBallObject
- ldr r1, =sub_81AC10C
- ldr r2, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r2
- ldr r2, [r0]
- adds r0, r6, 0
- bl SetTaskFuncWithFollowupFunc
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end SwitchBagPocket
-
- thumb_func_start sub_81AC10C
-sub_81AC10C: @ 81AC10C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r6, r0, r1
- bl sub_81221AC
- lsls r0, 24
- cmp r0, 0
- bne _081AC184
- bl IsWallysBag
- lsls r0, 24
- cmp r0, 0
- bne _081AC184
- bl GetSwitchBagPocketDirection
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AC148
- cmp r0, 0x2
- beq _081AC164
- b _081AC184
- .pool
-_081AC148:
- ldr r0, =gUnknown_0203CE5D
- movs r1, 0x16
- ldrsb r1, [r6, r1]
- bl ChangeBagPocketId
- adds r0, r7, 0
- bl SwitchTaskToFollowupFunc
- movs r1, 0x1
- negs r1, r1
- adds r0, r7, 0
- b _081AC178
- .pool
-_081AC164:
- ldr r0, =gUnknown_0203CE5D
- movs r1, 0x16
- ldrsb r1, [r6, r1]
- bl ChangeBagPocketId
- adds r0, r7, 0
- bl SwitchTaskToFollowupFunc
- adds r0, r7, 0
- movs r1, 0x1
-_081AC178:
- movs r2, 0x1
- bl SwitchBagPocket
- b _081AC22E
- .pool
-_081AC184:
- movs r1, 0x1A
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _081AC192
- cmp r0, 0x1
- beq _081AC1DC
- b _081AC22E
-_081AC192:
- ldrb r0, [r6, 0x18]
- bl sub_81AC23C
- ldrh r0, [r6, 0x18]
- adds r1, r0, 0x1
- strh r1, [r6, 0x18]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081AC1CC
- movs r2, 0x16
- ldrsh r0, [r6, r2]
- cmp r0, 0x1
- bne _081AC1BC
- lsls r0, r1, 16
- asrs r0, 17
- lsls r0, 24
- lsrs r0, 24
- bl bag_menu_copy_pocket_name_to_window
- b _081AC1CC
-_081AC1BC:
- lsls r1, 16
- asrs r1, 17
- movs r0, 0x8
- subs r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl bag_menu_copy_pocket_name_to_window
-_081AC1CC:
- movs r1, 0x18
- ldrsh r0, [r6, r1]
- cmp r0, 0x10
- bne _081AC22E
- ldrh r0, [r6, 0x1A]
- adds r0, 0x1
- strh r0, [r6, 0x1A]
- b _081AC22E
-_081AC1DC:
- ldr r4, =gUnknown_0203CE5D
- movs r1, 0x16
- ldrsb r1, [r6, r1]
- adds r0, r4, 0
- bl ChangeBagPocketId
- subs r5, r4, 0x5
- ldrb r0, [r5, 0x5]
- bl load_bag_item_list_buffers
- ldr r0, =gMultiuseListMenuTemplate
- ldrb r2, [r5, 0x5]
- lsls r2, 1
- adds r1, r4, 0
- adds r1, 0xD
- adds r1, r2, r1
- ldrh r1, [r1]
- adds r4, 0x3
- adds r2, r4
- ldrh r2, [r2]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6]
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- bl bag_menu_add_pocket_scroll_arrow_indicators_maybe
- bl bag_menu_add_list_scroll_arrow_indicators_maybe
- adds r0, r7, 0
- bl SwitchTaskToFollowupFunc
-_081AC22E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AC10C
-
- thumb_func_start sub_81AC23C
-sub_81AC23C: @ 81AC23C
- push {lr}
- sub sp, 0x8
- adds r3, r0, 0
- lsls r3, 24
- movs r0, 0x80
- lsls r0, 18
- adds r3, r0
- lsrs r3, 24
- movs r0, 0xF
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0x11
- movs r2, 0xE
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0x2
- bl schedule_bg_copy_tilemap_to_vram
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_81AC23C
-
- thumb_func_start bag_menu_draw_pocket_indicator_square
-@ void bag_menu_draw_pocket_indicator_square(char x, int is_current_bag)
-bag_menu_draw_pocket_indicator_square: @ 81AC26C
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- cmp r1, 0
- bne _081AC298
- ldr r1, =0x00001017
- adds r2, r0, 0x5
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x2
- movs r3, 0x3
- bl FillBgTilemapBufferRect_Palette0
- b _081AC2AE
- .pool
-_081AC298:
- ldr r1, =0x0000102b
- adds r2, r0, 0x5
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x2
- movs r3, 0x3
- bl FillBgTilemapBufferRect_Palette0
-_081AC2AE:
- movs r0, 0x2
- bl schedule_bg_copy_tilemap_to_vram
- add sp, 0x8
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_draw_pocket_indicator_square
-
- thumb_func_start sub_81AC2C0
-sub_81AC2C0: @ 81AC2C0
- push {lr}
- ldr r1, =gUnknown_0203CE58
- ldrb r0, [r1, 0x4]
- cmp r0, 0x1
- bhi _081AC2E0
- ldrb r0, [r1, 0x5]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _081AC2E0
- movs r0, 0x1
- b _081AC2E2
- .pool
-_081AC2E0:
- movs r0, 0
-_081AC2E2:
- pop {r1}
- bx r1
- thumb_func_end sub_81AC2C0
-
- thumb_func_start bag_menu_swap_items
-bag_menu_swap_items: @ 81AC2E8
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- mov r9, r0
- adds r6, r4, r0
- ldrb r0, [r6]
- movs r1, 0x10
- movs r2, 0x1
- bl sub_81AF15C
- ldr r3, =gUnknown_0203CE58
- ldrb r0, [r3, 0x5]
- lsls r0, 1
- adds r2, r3, 0
- adds r2, 0x12
- adds r2, r0, r2
- adds r1, r3, 0
- adds r1, 0x8
- adds r0, r1
- ldrh r1, [r0]
- ldrh r2, [r2]
- adds r1, r2
- strh r1, [r6, 0x2]
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r2, =0x0000081a
- adds r0, r2
- movs r5, 0
- strb r1, [r0]
- ldrb r0, [r3, 0x5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x2]
- bl BagGetItemIdByPocketPosition
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =gStringVar4
- mov r8, r0
- ldr r1, =gText_MoveVar1Where
- bl StringExpandPlaceholders
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- str r5, [sp, 0xC]
- str r5, [sp, 0x10]
- movs r1, 0x1
- mov r2, r8
- movs r3, 0x3
- bl bag_menu_print
- ldrb r0, [r6, 0x2]
- bl sub_80D4FEC
- bl sub_81AB89C
- ldrb r0, [r6]
- movs r1, 0x2
- bl bag_menu_print_cursor_
- movs r2, 0x8
- negs r2, r2
- add r9, r2
- add r4, r9
- ldr r0, =sub_81AC3C0
- str r0, [r4]
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_swap_items
-
- thumb_func_start sub_81AC3C0
-@ void sub_81AC3C0(u8 taskId)
-sub_81AC3C0: @ 81AC3C0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- bl sub_81221EC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AC48E
- ldr r0, =gMain
- mov r8, r0
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081AC418
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- ldr r3, =gUnknown_0203CE58
- ldrb r2, [r3, 0x5]
- lsls r2, 1
- adds r1, r3, 0
- adds r1, 0x12
- adds r1, r2, r1
- adds r3, 0x8
- adds r2, r3
- bl sub_81AE860
- b _081AC472
- .pool
-_081AC418:
- ldrb r0, [r4]
- bl ListMenuHandleInputGetItemId
- adds r7, r0, 0
- ldrb r0, [r4]
- ldr r5, =gUnknown_0203CE58
- ldrb r2, [r5, 0x5]
- lsls r2, 1
- adds r1, r5, 0
- adds r1, 0x12
- adds r1, r2, r1
- adds r4, r5, 0
- adds r4, 0x8
- adds r2, r4
- bl sub_81AE860
- movs r0, 0
- bl sub_80D4FC8
- ldrb r0, [r5, 0x5]
- lsls r0, 1
- adds r0, r4
- ldrb r0, [r0]
- bl sub_80D4FEC
- movs r0, 0x2
- negs r0, r0
- cmp r7, r0
- beq _081AC460
- adds r0, 0x1
- cmp r7, r0
- bne _081AC482
- b _081AC48E
- .pool
-_081AC460:
- movs r0, 0x5
- bl PlaySE
- mov r0, r8
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081AC47A
-_081AC472:
- adds r0, r6, 0
- bl sub_81AC498
- b _081AC48E
-_081AC47A:
- adds r0, r6, 0
- bl sub_81AC590
- b _081AC48E
-_081AC482:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_81AC498
-_081AC48E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81AC3C0
-
- thumb_func_start sub_81AC498
-sub_81AC498: @ 81AC498
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- mov r10, r0
- ldr r0, =gTasks + 0x8
- add r0, r10
- mov r9, r0
- ldr r5, =gUnknown_0203CE58
- ldrb r6, [r5, 0x5]
- lsls r1, r6, 1
- adds r0, r5, 0
- adds r0, 0x12
- adds r0, r1
- mov r8, r0
- ldr r2, =gUnknown_0203CE60
- adds r7, r1, r2
- ldrh r0, [r7]
- mov r1, r8
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- mov r0, r9
- movs r1, 0x2
- ldrsh r2, [r0, r1]
- cmp r2, r4
- beq _081AC4E2
- subs r0, r4, 0x1
- cmp r2, r0
- bne _081AC4F8
-_081AC4E2:
- adds r0, r3, 0
- bl sub_81AC590
- b _081AC566
- .pool
-_081AC4F8:
- ldr r1, =gBagPockets
- lsls r0, r6, 3
- adds r0, r1
- ldr r0, [r0]
- adds r1, r2, 0
- adds r2, r4, 0
- bl sub_80D702C
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r2, =0x0000081a
- adds r0, r2
- movs r1, 0xFF
- strb r1, [r0]
- mov r1, r9
- ldrb r0, [r1]
- mov r1, r8
- adds r2, r7, 0
- bl sub_81AE6C8
- mov r2, r9
- movs r1, 0x2
- ldrsh r0, [r2, r1]
- cmp r0, r4
- bge _081AC538
- ldrb r1, [r5, 0x5]
- lsls r1, 1
- ldr r2, =gUnknown_0203CE60
- adds r1, r2
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
-_081AC538:
- ldrb r0, [r5, 0x5]
- bl load_bag_item_list_buffers
- ldr r0, =gMultiuseListMenuTemplate
- mov r2, r8
- ldrh r1, [r2]
- ldrh r2, [r7]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- mov r1, r9
- strh r0, [r1]
- movs r0, 0x1
- bl sub_80D4FC8
- bl bag_menu_add_list_scroll_arrow_indicators_maybe
- ldr r0, =gTasks + 0x8
- subs r0, 0x8
- add r0, r10
- ldr r1, =Task_BagMenu
- str r1, [r0]
-_081AC566:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AC498
-
- thumb_func_start sub_81AC590
-sub_81AC590: @ 81AC590
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- mov r9, r1
- ldr r0, =gTasks + 0x8
- mov r10, r0
- mov r7, r9
- add r7, r10
- ldr r4, =gUnknown_0203CE58
- ldrb r0, [r4, 0x5]
- lsls r0, 1
- adds r1, r4, 0
- adds r1, 0x12
- adds r6, r0, r1
- movs r1, 0x8
- adds r1, r4
- mov r8, r1
- adds r5, r0, r1
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x0000081a
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
- ldrb r0, [r7]
- adds r1, r6, 0
- adds r2, r5, 0
- bl sub_81AE6C8
- movs r0, 0x2
- ldrsh r2, [r7, r0]
- ldrh r0, [r6]
- ldrh r1, [r5]
- adds r0, r1
- cmp r2, r0
- bge _081AC5F2
- ldrb r1, [r4, 0x5]
- lsls r1, 1
- add r1, r8
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
-_081AC5F2:
- ldrb r0, [r4, 0x5]
- bl load_bag_item_list_buffers
- ldr r0, =gMultiuseListMenuTemplate
- ldrh r1, [r6]
- ldrh r2, [r5]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r7]
- movs r0, 0x1
- bl sub_80D4FC8
- bl bag_menu_add_list_scroll_arrow_indicators_maybe
- mov r0, r10
- subs r0, 0x8
- add r0, r9
- ldr r1, =Task_BagMenu
- str r1, [r0]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AC590
-
- thumb_func_start sub_81AC644
-sub_81AC644: @ 81AC644
- push {r4,r5,lr}
- sub sp, 0x14
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x4]
- subs r0, 0x1
- cmp r0, 0x9
- bls _081AC654
- b _081AC82C
-_081AC654:
- lsls r0, 2
- ldr r1, =_081AC668
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081AC668:
- .4byte _081AC690
- .4byte _081AC82C
- .4byte _081AC82C
- .4byte _081AC82C
- .4byte _081AC6E8
- .4byte _081AC82C
- .4byte _081AC76C
- .4byte _081AC7CC
- .4byte _081AC70C
- .4byte _081AC690
-_081AC690:
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemId_GetBattleUsage
- lsls r0, 24
- cmp r0, 0
- beq _081AC6C4
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614042
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x2
- b _081ACA10
- .pool
-_081AC6C4:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614046
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x1
- b _081ACA10
- .pool
-_081AC6E8:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614047
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x4
- b _081ACA10
- .pool
-_081AC70C:
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl itemid_is_unique
- lsls r0, 24
- cmp r0, 0
- bne _081AC748
- ldrh r0, [r4]
- cmp r0, 0xAF
- beq _081AC748
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_0861404B
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x2
- b _081ACA10
- .pool
-_081AC748:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614046
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x1
- b _081ACA10
- .pool
-_081AC76C:
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl itemid_is_unique
- lsls r0, 24
- cmp r0, 0
- bne _081AC7A8
- ldrh r0, [r4]
- cmp r0, 0xAF
- beq _081AC7A8
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_0861404D
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x2
- b _081ACA10
- .pool
-_081AC7A8:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614046
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x1
- b _081ACA10
- .pool
-_081AC7CC:
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl itemid_is_unique
- lsls r0, 24
- cmp r0, 0
- bne _081AC808
- ldrh r0, [r4]
- cmp r0, 0xAF
- beq _081AC808
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_0861404F
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x2
- b _081ACA10
- .pool
-_081AC808:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614046
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x1
- b _081ACA10
- .pool
-_081AC82C:
- bl sub_81221AC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AC840
- bl InUnionRoom
- cmp r0, 0x1
- bne _081AC8A4
-_081AC840:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- cmp r0, 0x4
- beq _081AC856
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl sub_8122148
- lsls r0, 24
- cmp r0, 0
- bne _081AC880
-_081AC856:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614046
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x1
- b _081ACA10
- .pool
-_081AC880:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614044
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x2
- b _081ACA10
- .pool
-_081AC8A4:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- cmp r0, 0x4
- bls _081AC8AE
- b _081ACA12
-_081AC8AE:
- lsls r0, 2
- ldr r1, =_081AC8C0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081AC8C0:
- .4byte _081AC8D4
- .4byte _081AC9B4
- .4byte _081AC9D8
- .4byte _081AC9FC
- .4byte _081AC92C
-_081AC8D4:
- ldr r4, =gUnknown_0203CE54
- ldr r1, [r4]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r3, =0x00000824
- adds r0, r1, r3
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x4
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, r3
- ldr r1, =gUnknown_0861402C
- movs r2, 0x4
- bl memcpy
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081AC90A
- b _081ACA12
-_081AC90A:
- ldr r0, [r4]
- ldr r1, =0x00000824
- adds r0, r1
- movs r1, 0x6
- strb r1, [r0]
- b _081ACA12
- .pool
-_081AC92C:
- ldr r4, =gUnknown_0203CE54
- ldr r1, [r4]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r5, =0x00000824
- adds r0, r1, r5
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x4
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, r5
- ldr r1, =gUnknown_08614030
- movs r2, 0x4
- bl memcpy
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00000496
- adds r0, r1
- ldr r2, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldrh r1, [r2]
- cmp r0, r1
- bne _081AC96C
- ldr r0, [r4]
- ldr r1, =0x00000825
- adds r0, r1
- movs r1, 0x8
- strb r1, [r0]
-_081AC96C:
- ldrh r1, [r2]
- ldr r0, =0x00000103
- cmp r1, r0
- beq _081AC97A
- adds r0, 0xD
- cmp r1, r0
- bne _081ACA12
-_081AC97A:
- movs r0, 0x6
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _081ACA12
- ldr r0, [r4]
- adds r0, r5
- movs r1, 0x7
- strb r1, [r0]
- b _081ACA12
- .pool
-_081AC9B4:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614034
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x4
- b _081ACA10
- .pool
-_081AC9D8:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_08614038
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x4
- b _081ACA10
- .pool
-_081AC9FC:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- movs r0, 0x82
- lsls r0, 4
- adds r2, r1, r0
- ldr r0, =gUnknown_0861403C
- str r0, [r2]
- ldr r0, =0x00000828
- adds r1, r0
- movs r0, 0x6
-_081ACA10:
- strb r0, [r1]
-_081ACA12:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- cmp r0, 0x2
- bne _081ACA50
- movs r0, 0x1
- bl ClearWindowTilemap
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl PrintTMHMMoveData
- movs r0, 0x3
- bl PutWindowTilemap
- movs r0, 0x4
- bl PutWindowTilemap
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- b _081ACA86
- .pool
-_081ACA50:
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r4, =gStringVar4
- ldr r1, =gText_Var1IsSelected
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x3
- bl bag_menu_print
-_081ACA86:
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000828
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081ACAB0
- movs r0, 0
- b _081ACAB6
- .pool
-_081ACAB0:
- cmp r0, 0x2
- bne _081ACAC4
- movs r0, 0x1
-_081ACAB6:
- bl bag_menu_add_window
- lsls r0, 24
- lsrs r0, 24
- bl sub_81ACAF8
- b _081ACAEE
-_081ACAC4:
- cmp r0, 0x4
- bne _081ACADC
- movs r0, 0x2
- bl bag_menu_add_window
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- movs r2, 0x2
- bl sub_81ACB54
- b _081ACAEE
-_081ACADC:
- movs r0, 0x3
- bl bag_menu_add_window
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- movs r2, 0x3
- bl sub_81ACB54
-_081ACAEE:
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81AC644
-
- thumb_func_start sub_81ACAF8
-sub_81ACAF8: @ 81ACAF8
- push {r4-r6,lr}
- sub sp, 0x14
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- str r0, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- ldr r6, =gUnknown_0203CE54
- ldr r1, [r6]
- ldr r5, =0x00000828
- adds r0, r1, r5
- ldrb r0, [r0]
- str r0, [sp, 0x8]
- ldr r0, =gUnknown_08613FB4
- str r0, [sp, 0xC]
- movs r0, 0x82
- lsls r0, 4
- adds r1, r0
- ldr r0, [r1]
- str r0, [sp, 0x10]
- adds r0, r4, 0
- movs r1, 0x7
- movs r2, 0x8
- movs r3, 0x1
- bl AddItemMenuActionTextPrinters
- ldr r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r4, 0
- movs r2, 0
- bl InitMenuInUpperLeftCornerPlaySoundWhenAPressed
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ACAF8
-
- thumb_func_start sub_81ACB54
-sub_81ACB54: @ 81ACB54
- push {r4-r6,lr}
- sub sp, 0x14
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- movs r0, 0x38
- str r0, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- ldr r0, =gUnknown_08613FB4
- str r0, [sp, 0xC]
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- movs r1, 0x82
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- str r0, [sp, 0x10]
- adds r0, r4, 0
- movs r1, 0x7
- movs r2, 0x8
- movs r3, 0x1
- bl sub_8198DBC
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x38
- adds r2, r5, 0
- adds r3, r6, 0
- bl sub_8199944
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ACB54
-
- thumb_func_start unknown_item_menu_type
-unknown_item_menu_type: @ 81ACBB0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_81AC644
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000828
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- bhi _081ACBE8
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_HandleInBattleItemMenuInput
- b _081ACBF4
- .pool
-_081ACBE8:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_HandleOutOfBattleItemMenuInput
-_081ACBF4:
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end unknown_item_menu_type
-
- thumb_func_start Task_HandleInBattleItemMenuInput
-Task_HandleInBattleItemMenuInput: @ 81ACC04
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl sub_81221EC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081ACC6A
- bl ProcessMenuInputNoWrapAround
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _081ACC6A
- adds r0, 0x1
- cmp r4, r0
- bne _081ACC44
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_08613FB4
- ldr r1, [r0, 0x24]
- adds r0, r5, 0
- bl _call_via_r1
- b _081ACC6A
- .pool
-_081ACC44:
- movs r0, 0x5
- bl PlaySE
- ldr r1, =gUnknown_08613FB4
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- movs r2, 0x82
- lsls r2, 4
- adds r0, r2
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- adds r0, r6, 0
- bl _call_via_r1
-_081ACC6A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_HandleInBattleItemMenuInput
-
- thumb_func_start Task_HandleOutOfBattleItemMenuInput
-Task_HandleOutOfBattleItemMenuInput: @ 81ACC78
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl sub_81221EC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081ACC8C
- b _081ACDF0
-_081ACC8C:
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, =gMain
- ldrh r1, [r5, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _081ACCD4
- lsls r0, r4, 24
- asrs r0, 24
- cmp r0, 0
- bgt _081ACCAA
- b _081ACDF0
-_081ACCAA:
- subs r0, 0x2
- lsls r0, 24
- asrs r0, 24
- bl sub_81ACDFC
- lsls r0, 24
- cmp r0, 0
- bne _081ACCBC
- b _081ACDF0
-_081ACCBC:
- movs r0, 0x5
- bl PlaySE
- movs r1, 0x1
- negs r1, r1
- movs r0, 0
- bl sub_8199134
- b _081ACDF0
- .pool
-_081ACCD4:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _081ACD1C
- lsls r0, r4, 24
- asrs r1, r0, 24
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r2, =0x00000828
- adds r0, r2
- ldrb r0, [r0]
- subs r0, 0x2
- cmp r1, r0
- blt _081ACCF2
- b _081ACDF0
-_081ACCF2:
- adds r0, r1, 0x2
- lsls r0, 24
- asrs r0, 24
- bl sub_81ACDFC
- lsls r0, 24
- cmp r0, 0
- beq _081ACDF0
- movs r0, 0x5
- bl PlaySE
- movs r0, 0
- movs r1, 0x1
- bl sub_8199134
- b _081ACDF0
- .pool
-_081ACD1C:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _081ACD30
- bl GetLRKeysState
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081ACD58
-_081ACD30:
- lsls r0, r4, 24
- asrs r1, r0, 24
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081ACDF0
- subs r0, r1, 0x1
- lsls r0, 24
- asrs r0, 24
- bl sub_81ACDFC
- lsls r0, 24
- cmp r0, 0
- beq _081ACDF0
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- b _081ACD92
-_081ACD58:
- ldrh r1, [r5, 0x2E]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _081ACD6E
- bl GetLRKeysState
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _081ACD9A
-_081ACD6E:
- lsls r0, r4, 24
- asrs r1, r0, 24
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081ACDF0
- adds r0, r1, 0x1
- lsls r0, 24
- asrs r0, 24
- bl sub_81ACDFC
- lsls r0, 24
- cmp r0, 0
- beq _081ACDF0
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
-_081ACD92:
- movs r1, 0
- bl sub_8199134
- b _081ACDF0
-_081ACD9A:
- ldrh r1, [r5, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081ACDD8
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gUnknown_08613FB4
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- lsls r1, r4, 24
- asrs r1, 24
- movs r3, 0x82
- lsls r3, 4
- adds r0, r3
- ldr r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 3
- adds r2, 0x4
- adds r0, r2
- ldr r1, [r0]
- adds r0, r6, 0
- bl _call_via_r1
- b _081ACDF0
- .pool
-_081ACDD8:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081ACDF0
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_08613FB4
- ldr r1, [r0, 0x24]
- adds r0, r6, 0
- bl _call_via_r1
-_081ACDF0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_HandleOutOfBattleItemMenuInput
-
- thumb_func_start sub_81ACDFC
-sub_81ACDFC: @ 81ACDFC
- push {lr}
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- blt _081ACE30
- ldr r0, =gUnknown_0203CE54
- ldr r2, [r0]
- ldr r3, =0x00000828
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r1, r0
- bgt _081ACE30
- movs r3, 0x82
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xE
- beq _081ACE30
- movs r0, 0x1
- b _081ACE32
- .pool
-_081ACE30:
- movs r0, 0
-_081ACE32:
- pop {r1}
- bx r1
- thumb_func_end sub_81ACDFC
-
- thumb_func_start bag_menu_remove_some_window
-bag_menu_remove_some_window: @ 81ACE38
- push {lr}
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000828
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081ACE58
- movs r0, 0
- bl bag_menu_remove_window
- b _081ACE76
- .pool
-_081ACE58:
- cmp r0, 0x2
- bne _081ACE64
- movs r0, 0x1
- bl bag_menu_remove_window
- b _081ACE76
-_081ACE64:
- cmp r0, 0x4
- bne _081ACE70
- movs r0, 0x2
- bl bag_menu_remove_window
- b _081ACE76
-_081ACE70:
- movs r0, 0x3
- bl bag_menu_remove_window
-_081ACE76:
- pop {r0}
- bx r0
- thumb_func_end bag_menu_remove_some_window
-
- thumb_func_start ItemMenu_UseOutOfBattle
-@ void ItemMenu_UseOutOfBattle(u8 taskId)
-ItemMenu_UseOutOfBattle: @ 81ACE7C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, =gSpecialVar_ItemId
- ldrh r0, [r5]
- bl ItemId_GetFieldFunc
- cmp r0, 0
- beq _081ACEEE
- bl bag_menu_remove_some_window
- bl CalculatePlayerPartyCount
- lsls r0, 24
- cmp r0, 0
- bne _081ACEB8
- ldrh r0, [r5]
- bl ItemId_GetType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081ACEB8
- adds r0, r4, 0
- bl bag_menu_print_there_is_no_pokemon
- b _081ACEEE
- .pool
-_081ACEB8:
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- cmp r0, 0x3
- beq _081ACEE8
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl ItemId_GetFieldFunc
- adds r1, r0, 0
- adds r0, r4, 0
- bl _call_via_r1
- b _081ACEEE
- .pool
-_081ACEE8:
- adds r0, r4, 0
- bl sub_80FDD10
-_081ACEEE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end ItemMenu_UseOutOfBattle
-
- thumb_func_start ItemMenu_Toss
-ItemMenu_Toss: @ 81ACEF4
- push {r4-r7,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r6, r0, 3
- ldr r7, =gTasks + 0x8
- adds r4, r6, r7
- bl bag_menu_remove_some_window
- movs r0, 0x1
- strh r0, [r4, 0x10]
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _081ACF24
- adds r0, r5, 0
- bl BagMenuConfirmToss
- b _081ACF6A
- .pool
-_081ACF24:
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r4, =gStringVar4
- ldr r1, =gText_TossHowManyVar1s
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x3
- bl bag_menu_print
- movs r0, 0x7
- bl sub_81ABC3C
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, =Task_ChooseHowManyToToss
- str r1, [r0]
-_081ACF6A:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemMenu_Toss
-
- thumb_func_start BagMenuConfirmToss
-BagMenuConfirmToss: @ 81ACF88
- push {r4,r5,lr}
- sub sp, 0x14
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =gStringVar2
- movs r2, 0x10
- ldrsh r1, [r4, r2]
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_ConfirmTossItems
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x3
- bl bag_menu_print
- ldr r2, =gUnknown_08614084
- adds r0, r5, 0
- movs r1, 0x5
- bl bag_menu_yes_no
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BagMenuConfirmToss
-
- thumb_func_start BagMenuCancelToss
-BagMenuCancelToss: @ 81AD010
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- bl bag_menu_print_description_box_text
- ldrb r0, [r4]
- movs r1, 0
- bl bag_menu_print_cursor_
- adds r0, r5, 0
- bl set_callback3_to_bag
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BagMenuCancelToss
-
- thumb_func_start Task_ChooseHowManyToToss
-Task_ChooseHowManyToToss: @ 81AD044
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- adds r0, r4, 0
- adds r0, 0x10
- ldrh r1, [r4, 0x4]
- bl AdjustQuantityAccordingToDPadInput
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081AD088
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000817
- adds r0, r1
- ldrb r0, [r0]
- movs r2, 0x10
- ldrsh r1, [r4, r2]
- bl sub_81ABC54
- b _081AD0C6
- .pool
-_081AD088:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081AD0AC
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x7
- bl bag_menu_remove_window
- adds r0, r5, 0
- bl BagMenuConfirmToss
- b _081AD0C6
- .pool
-_081AD0AC:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081AD0C6
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x7
- bl bag_menu_remove_window
- adds r0, r6, 0
- bl BagMenuCancelToss
-_081AD0C6:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end Task_ChooseHowManyToToss
-
- thumb_func_start BagMenuActuallyToss
-BagMenuActuallyToss: @ 81AD0CC
- push {r4-r6,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r5, =gTasks + 0x8
- adds r6, r4, r5
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =gStringVar2
- movs r2, 0x10
- ldrsh r1, [r6, r2]
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r6, =gStringVar4
- ldr r1, =gText_ThrewAwayVar2Var1s
- adds r0, r6, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- adds r2, r6, 0
- movs r3, 0x3
- bl bag_menu_print
- subs r5, 0x8
- adds r4, r5
- ldr r0, =Task_ActuallyToss
- str r0, [r4]
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BagMenuActuallyToss
-
- thumb_func_start Task_ActuallyToss
-Task_ActuallyToss: @ 81AD150
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r5, r0, r1
- ldr r4, =gUnknown_0203CE58
- ldrb r0, [r4, 0x5]
- lsls r0, 1
- adds r1, r4, 0
- adds r1, 0x12
- adds r1, r0
- mov r8, r1
- adds r1, r4, 0
- adds r1, 0x8
- adds r7, r0, r1
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _081AD1CE
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldrh r1, [r5, 0x10]
- bl RemoveBagItem
- ldrb r0, [r5]
- mov r1, r8
- adds r2, r7, 0
- bl sub_81AE6C8
- ldrb r0, [r4, 0x5]
- bl sub_81AB9A8
- ldrb r0, [r4, 0x5]
- bl sub_81ABA88
- ldrb r0, [r4, 0x5]
- bl load_bag_item_list_buffers
- ldr r0, =gMultiuseListMenuTemplate
- mov r2, r8
- ldrh r1, [r2]
- ldrh r2, [r7]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5]
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- adds r0, r6, 0
- bl set_callback3_to_bag
-_081AD1CE:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_ActuallyToss
-
- thumb_func_start ItemMenu_Register
-ItemMenu_Register: @ 81AD1EC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r7, r0, r1
- ldr r0, =gUnknown_0203CE58
- ldrb r1, [r0, 0x5]
- lsls r1, 1
- adds r2, r0, 0
- adds r2, 0x12
- adds r6, r1, r2
- adds r0, 0x8
- adds r5, r1, r0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00000496
- adds r1, r0, r2
- ldr r0, =gSpecialVar_ItemId
- ldrh r2, [r0]
- ldrh r0, [r1]
- cmp r0, r2
- bne _081AD238
- movs r0, 0
- strh r0, [r1]
- b _081AD23A
- .pool
-_081AD238:
- strh r2, [r1]
-_081AD23A:
- ldrb r0, [r7]
- adds r1, r6, 0
- adds r2, r5, 0
- bl sub_81AE6C8
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- bl load_bag_item_list_buffers
- ldr r0, =gMultiuseListMenuTemplate
- ldrh r1, [r6]
- ldrh r2, [r5]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r7]
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- adds r0, r4, 0
- bl ItemMenu_Cancel
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemMenu_Register
-
- thumb_func_start ItemMenu_Give
-ItemMenu_Give: @ 81AD278
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- bl bag_menu_remove_some_window
- ldr r5, =gSpecialVar_ItemId
- ldrh r0, [r5]
- bl itemid_80BF6D8_mail_related
- lsls r0, 24
- cmp r0, 0
- bne _081AD2AC
- ldr r2, =gText_CantWriteMail
- ldr r3, =sub_81AD350
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _081AD2EA
- .pool
-_081AD2AC:
- ldrh r0, [r5]
- bl itemid_is_unique
- lsls r0, 24
- cmp r0, 0
- bne _081AD2E4
- bl CalculatePlayerPartyCount
- lsls r0, 24
- cmp r0, 0
- bne _081AD2CA
- adds r0, r4, 0
- bl bag_menu_print_there_is_no_pokemon
- b _081AD2EA
-_081AD2CA:
- ldr r0, =gUnknown_0203CE54
- ldr r1, [r0]
- ldr r0, =sub_81B7F60
- str r0, [r1]
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- b _081AD2EA
- .pool
-_081AD2E4:
- adds r0, r6, 0
- bl bag_menu_print_cant_be_held_msg
-_081AD2EA:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end ItemMenu_Give
-
- thumb_func_start bag_menu_print_there_is_no_pokemon
-bag_menu_print_there_is_no_pokemon: @ 81AD2F0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gText_NoPokemon
- ldr r3, =sub_81AD350
- movs r1, 0x1
- bl DisplayItemMessage
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_print_there_is_no_pokemon
-
- thumb_func_start bag_menu_print_cant_be_held_msg
-bag_menu_print_cant_be_held_msg: @ 81AD30C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r5, =gStringVar4
- ldr r1, =gText_Var1CantBeHeld
- adds r0, r5, 0
- bl StringExpandPlaceholders
- ldr r3, =sub_81AD350
- adds r0, r4, 0
- movs r1, 0x1
- adds r2, r5, 0
- bl DisplayItemMessage
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_print_cant_be_held_msg
-
- thumb_func_start sub_81AD350
-sub_81AD350: @ 81AD350
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081AD36E
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl bag_menu_inits_lists_menu
-_081AD36E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD350
-
- thumb_func_start ItemMenu_CheckTag
-ItemMenu_CheckTag: @ 81AD378
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_0203CE54
- ldr r2, [r1]
- ldr r1, =DoBerryTagScreen
- str r1, [r2]
- bl unknown_ItemMenu_Confirm
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemMenu_CheckTag
-
- thumb_func_start ItemMenu_Cancel
-ItemMenu_Cancel: @ 81AD398
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- bl bag_menu_remove_some_window
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- bl bag_menu_print_description_box_text
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
- ldrb r0, [r4]
- movs r1, 0
- bl bag_menu_print_cursor_
- adds r0, r5, 0
- bl set_callback3_to_bag
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemMenu_Cancel
-
- thumb_func_start ItemMenu_UseInBattle
-ItemMenu_UseInBattle: @ 81AD3DC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl ItemId_GetBattleFunc
- cmp r0, 0
- beq _081AD400
- bl bag_menu_remove_some_window
- ldrh r0, [r4]
- bl ItemId_GetBattleFunc
- adds r1, r0, 0
- adds r0, r5, 0
- bl _call_via_r1
-_081AD400:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ItemMenu_UseInBattle
-
- thumb_func_start bag_menu_mail_related
-bag_menu_mail_related: @ 81AD40C
- push {lr}
- movs r0, 0xC
- movs r1, 0x5
- movs r2, 0
- bl GoToBagMenu
- pop {r0}
- bx r0
- thumb_func_end bag_menu_mail_related
-
- thumb_func_start item_menu_type_2
-item_menu_type_2: @ 81AD41C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl itemid_80BF6D8_mail_related
- lsls r0, 24
- cmp r0, 0
- bne _081AD44C
- ldr r2, =gText_CantWriteMail
- ldr r3, =sub_81AD350
- adds r0, r5, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _081AD4AE
- .pool
-_081AD44C:
- ldrh r0, [r4]
- bl sub_8122148
- lsls r0, 24
- cmp r0, 0
- bne _081AD488
- ldrh r0, [r4]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r4, =gStringVar4
- ldr r1, =gText_Var1CantBeHeldHere
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r3, =sub_81AD350
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
- b _081AD4AE
- .pool
-_081AD488:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- cmp r0, 0x4
- beq _081AD4A8
- ldrh r0, [r4]
- bl itemid_is_unique
- lsls r0, 24
- cmp r0, 0
- bne _081AD4A8
- adds r0, r5, 0
- bl unknown_ItemMenu_Confirm
- b _081AD4AE
- .pool
-_081AD4A8:
- adds r0, r5, 0
- bl bag_menu_print_cant_be_held_msg
-_081AD4AE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end item_menu_type_2
-
- thumb_func_start item_menu_type_b
-item_menu_type_b: @ 81AD4B4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, =gSpecialVar_ItemId
- ldrh r0, [r5]
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081AD4E4
- ldr r2, =gText_CantWriteMail
- ldr r3, =sub_81AD350
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayItemMessage
- b _081AD51A
- .pool
-_081AD4E4:
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x5]
- cmp r0, 0x4
- beq _081AD514
- ldrh r0, [r5]
- bl itemid_is_unique
- lsls r0, 24
- cmp r0, 0
- bne _081AD514
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =unknown_ItemMenu_Confirm
- str r0, [r1]
- b _081AD51A
- .pool
-_081AD514:
- adds r0, r4, 0
- bl bag_menu_print_cant_be_held_msg
-_081AD51A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end item_menu_type_b
-
- thumb_func_start UseRegisteredKeyItemOnField
-@ bool8 UseRegisteredKeyItemOnField()
-UseRegisteredKeyItemOnField: @ 81AD520
- push {r4-r7,lr}
- bl InUnionRoom
- cmp r0, 0x1
- beq _081AD54C
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _081AD54C
- bl InBattlePike
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0
- bne _081AD54C
- bl InMultiBattleRoom
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081AD550
-_081AD54C:
- movs r0, 0
- b _081AD5D2
-_081AD550:
- bl HideMapNamePopUpWindow
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY_ScreenOff
- ldr r4, =gSaveBlock1Ptr
- ldr r0, [r4]
- ldr r5, =0x00000496
- adds r1, r0, r5
- ldrh r0, [r1]
- cmp r0, 0
- beq _081AD5CA
- movs r1, 0x1
- bl CheckBagHasItem
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x1
- bne _081AD5C4
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- bl sub_808B864
- bl sub_808BCF4
- ldr r2, =gSpecialVar_ItemId
- ldr r0, [r4]
- adds r0, r5
- ldrh r1, [r0]
- strh r1, [r2]
- ldrh r0, [r0]
- bl ItemId_GetFieldFunc
- movs r1, 0x8
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r6, [r1, 0xE]
- b _081AD5D0
- .pool
-_081AD5C4:
- ldr r0, [r4]
- adds r0, r5
- strh r7, [r0]
-_081AD5CA:
- ldr r0, =EventScript_2736B3
- bl ScriptContext1_SetupScript
-_081AD5D0:
- movs r0, 0x1
-_081AD5D2:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end UseRegisteredKeyItemOnField
-
- thumb_func_start display_sell_item_ask_str
-@ void display_sell_item_ask_str(int a1)
-display_sell_item_ask_str: @ 81AD5DC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r7, r5, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- ldr r6, =gSpecialVar_ItemId
- ldrh r0, [r6]
- bl itemid_get_market_price
- lsls r0, 16
- cmp r0, 0
- bne _081AD634
- ldrh r0, [r6]
- ldr r1, =gStringVar2
- bl CopyItemName
- ldr r4, =gStringVar4
- ldr r1, =gText_CantBuyKeyItem
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r3, =bag_menu_inits_lists_menu
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
- b _081AD66A
- .pool
-_081AD634:
- movs r0, 0x1
- strh r0, [r4, 0x10]
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _081AD64C
- bl bag_menu_AddMoney_window
- adds r0, r5, 0
- bl sub_81AD680
- b _081AD66A
-_081AD64C:
- ldrh r0, [r6]
- ldr r1, =gStringVar2
- bl CopyItemName
- ldr r4, =gStringVar4
- ldr r1, =gText_HowManyToSell
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r3, =sub_81AD730
- adds r0, r7, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
-_081AD66A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end display_sell_item_ask_str
-
- thumb_func_start sub_81AD680
-sub_81AD680: @ 81AD680
- push {r4-r6,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldr r6, =gStringVar1
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl itemid_get_market_price
- lsls r0, 16
- lsrs r0, 17
- movs r2, 0x10
- ldrsh r1, [r4, r2]
- muls r1, r0
- adds r0, r6, 0
- movs r2, 0
- movs r3, 0x6
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_ICanPayVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r3, =sub_81AD6E4
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD680
-
- thumb_func_start sub_81AD6E4
-sub_81AD6E4: @ 81AD6E4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_0861408C
- movs r1, 0x6
- bl bag_menu_yes_no
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD6E4
-
- thumb_func_start sub_81AD6FC
-sub_81AD6FC: @ 81AD6FC
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- bl bag_menu_remove_money_window
- movs r0, 0x4
- bl bag_menu_RemoveBagItem_message_window
- ldrb r0, [r4]
- movs r1, 0
- bl bag_menu_print_cursor_
- adds r0, r5, 0
- bl set_callback3_to_bag
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD6FC
-
- thumb_func_start sub_81AD730
-sub_81AD730: @ 81AD730
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r6, =gTasks + 0x8
- adds r0, r4, r6
- mov r8, r0
- movs r0, 0x8
- bl bag_menu_add_window
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl itemid_get_market_price
- lsls r0, 16
- lsrs r0, 17
- mov r2, r8
- movs r3, 0x10
- ldrsh r1, [r2, r3]
- adds r2, r0, 0
- muls r2, r1
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_81ABCC0
- bl bag_menu_AddMoney_window
- subs r6, 0x8
- adds r4, r6
- ldr r0, =sub_81AD794
- str r0, [r4]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD730
-
- thumb_func_start sub_81AD794
-sub_81AD794: @ 81AD794
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r6, r0, r1
- adds r0, r6, 0
- adds r0, 0x10
- ldrh r1, [r6, 0x4]
- bl AdjustQuantityAccordingToDPadInput
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081AD7F4
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000818
- adds r0, r1
- ldrb r4, [r0]
- movs r2, 0x10
- ldrsh r5, [r6, r2]
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- bl itemid_get_market_price
- lsls r0, 16
- lsrs r0, 17
- movs r2, 0x10
- ldrsh r1, [r6, r2]
- adds r2, r0, 0
- muls r2, r1
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_81ABCC0
- b _081AD844
- .pool
-_081AD7F4:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081AD818
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x8
- bl bag_menu_remove_window
- adds r0, r4, 0
- bl sub_81AD680
- b _081AD844
- .pool
-_081AD818:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081AD844
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r6]
- movs r1, 0
- bl bag_menu_print_cursor_
- bl bag_menu_remove_money_window
- movs r0, 0x8
- bl bag_menu_remove_window
- movs r0, 0x4
- bl bag_menu_RemoveBagItem_message_window
- adds r0, r5, 0
- bl set_callback3_to_bag
-_081AD844:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81AD794
-
- thumb_func_start sub_81AD84C
-sub_81AD84C: @ 81AD84C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldr r6, =gSpecialVar_ItemId
- ldrh r0, [r6]
- ldr r1, =gStringVar2
- bl CopyItemName
- ldr r0, =gStringVar1
- mov r8, r0
- ldrh r0, [r6]
- bl itemid_get_market_price
- lsls r0, 16
- lsrs r0, 17
- movs r2, 0x10
- ldrsh r1, [r4, r2]
- muls r1, r0
- mov r0, r8
- movs r2, 0
- movs r3, 0x6
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_TurnedOverVar1ForVar2
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r3, =sub_81AD8C8
- adds r0, r5, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl DisplayItemMessage
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD84C
-
- thumb_func_start sub_81AD8C8
-sub_81AD8C8: @ 81AD8C8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r6, r0, 2
- adds r6, r0
- lsls r6, 3
- ldr r0, =gTasks + 0x8
- adds r0, r6
- mov r10, r0
- ldr r7, =gUnknown_0203CE58
- ldrb r5, [r7, 0x5]
- lsls r5, 1
- movs r1, 0x12
- adds r1, r7
- mov r9, r1
- add r9, r5
- adds r0, r7, 0
- adds r0, 0x8
- adds r5, r0
- movs r0, 0x5F
- bl PlaySE
- ldr r2, =gSpecialVar_ItemId
- mov r8, r2
- ldrh r0, [r2]
- mov r3, r10
- ldrh r1, [r3, 0x10]
- bl RemoveBagItem
- ldr r0, =gSaveBlock1Ptr
- ldr r4, [r0]
- movs r1, 0x92
- lsls r1, 3
- adds r4, r1
- mov r2, r8
- ldrh r0, [r2]
- bl itemid_get_market_price
- lsls r0, 16
- lsrs r0, 17
- mov r3, r10
- movs r2, 0x10
- ldrsh r1, [r3, r2]
- muls r1, r0
- adds r0, r4, 0
- bl AddMoney
- mov r3, r10
- ldrb r0, [r3]
- mov r1, r9
- adds r2, r5, 0
- bl sub_81AE6C8
- ldrb r0, [r7, 0x5]
- bl sub_81AB9A8
- ldrb r0, [r7, 0x5]
- bl sub_81ABA88
- ldrb r0, [r7, 0x5]
- bl load_bag_item_list_buffers
- ldr r0, =gMultiuseListMenuTemplate
- mov r2, r9
- ldrh r1, [r2]
- ldrh r2, [r5]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- mov r3, r10
- strh r0, [r3]
- movs r1, 0x2
- bl bag_menu_print_cursor_
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000819
- adds r0, r1
- ldrb r4, [r0]
- ldr r2, =gSaveBlock1Ptr
- ldr r0, [r2]
- movs r3, 0x92
- lsls r3, 3
- adds r0, r3
- bl GetMoney
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- bl PrintMoneyAmountInMoneyBox
- ldr r0, =gTasks + 0x8
- subs r0, 0x8
- adds r6, r0
- ldr r0, =sub_81AD9C0
- str r0, [r6]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD8C8
-
- thumb_func_start sub_81AD9C0
-sub_81AD9C0: @ 81AD9C0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _081AD9E2
- movs r0, 0x5
- bl PlaySE
- bl bag_menu_remove_money_window
- adds r0, r4, 0
- bl bag_menu_inits_lists_menu
-_081AD9E2:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AD9C0
-
- thumb_func_start display_deposit_item_ask_str
-display_deposit_item_ask_str: @ 81AD9EC
- push {r4-r6,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r5, r0, 3
- ldr r6, =gTasks + 0x8
- adds r1, r5, r6
- movs r0, 0x1
- strh r0, [r1, 0x10]
- movs r3, 0x4
- ldrsh r0, [r1, r3]
- cmp r0, 0x1
- bne _081ADA18
- adds r0, r2, 0
- bl sub_81ADB14
- b _081ADA5E
- .pool
-_081ADA18:
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r4, =gStringVar4
- ldr r1, =gText_DepositHowManyVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x3
- bl bag_menu_print
- movs r0, 0x7
- bl sub_81ABC3C
- adds r0, r6, 0
- subs r0, 0x8
- adds r0, r5, r0
- ldr r1, =sub_81ADA7C
- str r1, [r0]
-_081ADA5E:
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end display_deposit_item_ask_str
-
- thumb_func_start sub_81ADA7C
-sub_81ADA7C: @ 81ADA7C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r5, r0, r1
- adds r0, r5, 0
- adds r0, 0x10
- ldrh r1, [r5, 0x4]
- bl AdjustQuantityAccordingToDPadInput
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081ADAC0
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000817
- adds r0, r1
- ldrb r0, [r0]
- movs r2, 0x10
- ldrsh r1, [r5, r2]
- bl sub_81ABC54
- b _081ADB0E
- .pool
-_081ADAC0:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081ADAE4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x7
- bl bag_menu_remove_window
- adds r0, r4, 0
- bl sub_81ADB14
- b _081ADB0E
- .pool
-_081ADAE4:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081ADB0E
- movs r0, 0x5
- bl PlaySE
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- bl bag_menu_print_description_box_text
- ldrb r0, [r5]
- movs r1, 0
- bl bag_menu_print_cursor_
- movs r0, 0x7
- bl bag_menu_remove_window
- adds r0, r6, 0
- bl set_callback3_to_bag
-_081ADB0E:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81ADA7C
-
- thumb_func_start sub_81ADB14
-sub_81ADB14: @ 81ADB14
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r7, r1, 3
- ldr r0, =gTasks + 0x8
- mov r9, r0
- adds r2, r7, 0
- add r2, r9
- mov r8, r2
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r4, =gSpecialVar_ItemId
- ldrh r0, [r4]
- bl itemid_is_unique
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- beq _081ADB6C
- ldr r2, =gText_CantStoreImportantItems
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x1
- b _081ADBE2
- .pool
-_081ADB6C:
- ldrh r0, [r4]
- mov r3, r8
- ldrh r1, [r3, 0x10]
- bl AddPCItem
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x1
- bne _081ADBD4
- ldrh r0, [r4]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =gStringVar2
- mov r2, r8
- movs r3, 0x10
- ldrsh r1, [r2, r3]
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_DepositedVar2Var1s
- adds r0, r4, 0
- bl StringExpandPlaceholders
- str r6, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- str r5, [sp, 0xC]
- str r5, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x3
- bl bag_menu_print
- mov r0, r9
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, =Task_ActuallyToss
- b _081ADBF2
- .pool
-_081ADBD4:
- ldr r2, =gText_NoRoomForItems
- movs r0, 0x1
- str r0, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- str r5, [sp, 0xC]
- str r5, [sp, 0x10]
-_081ADBE2:
- movs r1, 0x1
- movs r3, 0x3
- bl bag_menu_print
- mov r0, r9
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, =sub_81ADC0C
-_081ADBF2:
- str r1, [r0]
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ADB14
-
- thumb_func_start sub_81ADC0C
-sub_81ADC0C: @ 81ADC0C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r5, r0, r1
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _081ADC44
- movs r0, 0x5
- bl PlaySE
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- bl bag_menu_print_description_box_text
- ldrb r0, [r5]
- movs r1, 0
- bl bag_menu_print_cursor_
- adds r0, r4, 0
- bl set_callback3_to_bag
-_081ADC44:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81ADC0C
-
- thumb_func_start IsWallysBag
-@ bool8 IsWallysBag()
-IsWallysBag: @ 81ADC54
- push {lr}
- ldr r0, =gUnknown_0203CE58
- ldrb r0, [r0, 0x4]
- cmp r0, 0xA
- beq _081ADC68
- movs r0, 0
- b _081ADC6A
- .pool
-_081ADC68:
- movs r0, 0x1
-_081ADC6A:
- pop {r1}
- bx r1
- thumb_func_end IsWallysBag
-
- thumb_func_start PrepareBagForWallyTutorial
-@ void PrepareBagForWallyTutorial()
-PrepareBagForWallyTutorial: @ 81ADC70
- push {r4-r6,lr}
- ldr r4, =gUnknown_0203CE80
- movs r0, 0xD0
- bl AllocZeroed
- str r0, [r4]
- ldr r5, =gSaveBlock1Ptr
- ldr r1, [r5]
- movs r2, 0xAC
- lsls r2, 3
- adds r1, r2
- movs r2, 0x78
- bl memcpy
- ldr r0, [r4]
- ldr r1, [r5]
- movs r2, 0xCA
- lsls r2, 3
- adds r1, r2
- adds r0, 0x78
- movs r2, 0x40
- bl memcpy
- ldr r0, [r4]
- ldr r2, =gUnknown_0203CE58
- ldrb r1, [r2, 0x5]
- adds r0, 0xCE
- strh r1, [r0]
- movs r6, 0
- adds r5, r2, 0
- adds r5, 0x8
-_081ADCAE:
- ldr r2, [r4]
- lsls r3, r6, 1
- adds r0, r2, 0
- adds r0, 0xB8
- adds r0, r3
- ldrh r1, [r5]
- strh r1, [r0]
- adds r2, 0xC2
- adds r2, r3
- ldrh r0, [r5, 0xA]
- strh r0, [r2]
- adds r5, 0x2
- adds r6, 0x1
- cmp r6, 0x4
- bls _081ADCAE
- ldr r4, =gSaveBlock1Ptr
- ldr r0, [r4]
- movs r1, 0xAC
- lsls r1, 3
- adds r0, r1
- movs r1, 0x1E
- bl ClearItemSlots
- ldr r0, [r4]
- movs r2, 0xCA
- lsls r2, 3
- adds r0, r2
- movs r1, 0x10
- bl ClearItemSlots
- bl ResetBagScrollPositions
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end PrepareBagForWallyTutorial
-
- thumb_func_start RestoreBagAfterWallyTutorial
-@ void RestoreBagAfterWallyTutorial()
-RestoreBagAfterWallyTutorial: @ 81ADD00
- push {r4-r6,lr}
- ldr r5, =gSaveBlock1Ptr
- ldr r0, [r5]
- movs r1, 0xAC
- lsls r1, 3
- adds r0, r1
- ldr r4, =gUnknown_0203CE80
- ldr r1, [r4]
- movs r2, 0x78
- bl memcpy
- ldr r0, [r5]
- movs r1, 0xCA
- lsls r1, 3
- adds r0, r1
- ldr r1, [r4]
- adds r1, 0x78
- movs r2, 0x40
- bl memcpy
- ldr r1, =gUnknown_0203CE58
- ldr r0, [r4]
- adds r0, 0xCE
- ldrh r0, [r0]
- strb r0, [r1, 0x5]
- movs r5, 0
- adds r6, r4, 0
- adds r3, r1, 0
- adds r3, 0x8
-_081ADD3A:
- lsls r2, r5, 1
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0xB8
- adds r0, r2
- ldrh r0, [r0]
- strh r0, [r3]
- adds r1, 0xC2
- adds r1, r2
- ldrh r0, [r1]
- strh r0, [r3, 0xA]
- adds r3, 0x2
- adds r5, 0x1
- cmp r5, 0x4
- bls _081ADD3A
- ldr r0, [r6]
- bl Free
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RestoreBagAfterWallyTutorial
-
- thumb_func_start DoWallyTutorialBagMenu
-@ void DoWallyTutorialBagMenu()
-DoWallyTutorialBagMenu: @ 81ADD70
- push {lr}
- bl PrepareBagForWallyTutorial
- movs r0, 0xD
- movs r1, 0x1
- bl AddBagItem
- movs r0, 0x4
- movs r1, 0x1
- bl AddBagItem
- ldr r2, =SetCB2ToReshowScreenAfterMenu2
- movs r0, 0xA
- movs r1, 0
- bl GoToBagMenu
- pop {r0}
- bx r0
- .pool
- thumb_func_end DoWallyTutorialBagMenu
-
- thumb_func_start Task_WallyTutorialBagMenu
-@ void Task_WallyTutorialBagMenu(u8 taskId)
-Task_WallyTutorialBagMenu: @ 81ADD98
- 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
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081ADE32
- movs r0, 0x10
- ldrsh r1, [r4, r0]
- cmp r1, 0xCC
- beq _081ADDEC
- cmp r1, 0xCC
- bgt _081ADDD0
- cmp r1, 0x66
- beq _081ADDDA
- b _081ADE2C
- .pool
-_081ADDD0:
- movs r0, 0x99
- lsls r0, 1
- cmp r1, r0
- beq _081ADE0C
- b _081ADE2C
-_081ADDDA:
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl SwitchBagPocket
- b _081ADE2C
-_081ADDEC:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- movs r1, 0x2
- bl bag_menu_print_cursor_
- ldr r1, =gSpecialVar_ItemId
- movs r0, 0x4
- strh r0, [r1]
- adds r0, r5, 0
- bl sub_81AC644
- b _081ADE2C
- .pool
-_081ADE0C:
- movs r0, 0x5
- bl PlaySE
- bl bag_menu_remove_some_window
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0
- bl sub_81AE6C8
- bl RestoreBagAfterWallyTutorial
- adds r0, r5, 0
- bl unknown_ItemMenu_Confirm
- b _081ADE32
-_081ADE2C:
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
-_081ADE32:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Task_WallyTutorialBagMenu
-
- thumb_func_start unknown_ItemMenu_Show
-unknown_ItemMenu_Show: @ 81ADE38
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =gSpecialVar_0x8005
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
- bl bag_menu_remove_some_window
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end unknown_ItemMenu_Show
-
- thumb_func_start bag_menu_leave_maybe_3
-bag_menu_leave_maybe_3: @ 81ADE6C
- push {lr}
- ldr r0, =gFieldCallback
- ldr r1, =sub_819FA50
- str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_leave_maybe_3
-
- thumb_func_start unknown_ItemMenu_Give2
-unknown_ItemMenu_Give2: @ 81ADE8C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gSpecialVar_ItemId
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
- bl bag_menu_remove_some_window
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end unknown_ItemMenu_Give2
-
- thumb_func_start bag_menu_leave_maybe_2
-bag_menu_leave_maybe_2: @ 81ADEBC
- push {lr}
- ldr r0, =gFieldCallback
- ldr r1, =sub_818DEF4
- str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_leave_maybe_2
-
- thumb_func_start unknown_ItemMenu_Confirm2
-unknown_ItemMenu_Confirm2: @ 81ADEDC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
- bl bag_menu_remove_some_window
- adds r0, r4, 0
- bl unknown_ItemMenu_Confirm
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end unknown_ItemMenu_Confirm2
-
- thumb_func_start bag_menu_leave_maybe
-bag_menu_leave_maybe: @ 81ADF00
- push {lr}
- ldr r0, =gFieldCallback
- ldr r1, =sub_818E564
- str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_leave_maybe
-
- thumb_func_start bag_menu_print_pocket_names
-bag_menu_print_pocket_names: @ 81ADF20
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x1C
- adds r4, r0, 0
- mov r8, r1
- movs r0, 0
- movs r1, 0
- str r0, [sp, 0x14]
- str r1, [sp, 0x18]
- ldr r1, =0x00ffffff
- ldr r0, [sp, 0x14]
- ands r0, r1
- movs r1, 0x80
- lsls r1, 21
- orrs r0, r1
- str r0, [sp, 0x14]
- ldr r1, =0xffffff00
- ldr r0, [sp, 0x18]
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- str r0, [sp, 0x18]
- add r0, sp, 0x14
- bl AddWindow
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r6, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0x40
- bl GetStringCenterAlignXOffset
- lsls r3, r0, 24
- lsrs r3, 24
- movs r7, 0x1
- str r7, [sp]
- movs r5, 0
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0xFF
- mov r9, r0
- str r0, [sp, 0xC]
- str r7, [sp, 0x10]
- adds r0, r6, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl bag_menu_print
- mov r2, r8
- cmp r2, 0
- beq _081ADFBA
- movs r0, 0x1
- mov r1, r8
- movs r2, 0x40
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- adds r3, 0x40
- lsls r3, 24
- lsrs r3, 24
- str r7, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- mov r0, r9
- str r0, [sp, 0xC]
- str r7, [sp, 0x10]
- adds r0, r6, 0
- movs r1, 0x1
- mov r2, r8
- bl bag_menu_print
-_081ADFBA:
- adds r0, r6, 0
- movs r1, 0x7
- bl GetWindowAttribute
- ldr r1, =gUnknown_0203CE54
- ldr r1, [r1]
- ldr r2, =0x00000844
- adds r1, r2
- ldr r2, =0x04000100
- bl CpuSet
- adds r0, r6, 0
- bl RemoveWindow
- add sp, 0x1C
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_print_pocket_names
-
- thumb_func_start bag_menu_copy_pocket_name_to_window
-bag_menu_copy_pocket_name_to_window: @ 81ADFF8
- push {r4-r7,lr}
- adds r7, r0, 0
- cmp r7, 0x8
- bls _081AE002
- movs r7, 0x8
-_081AE002:
- ldr r0, =gUnknown_0203CE54
- ldr r4, [r0]
- ldr r0, =0x00000844
- adds r4, r0
- movs r0, 0x2
- movs r1, 0x7
- bl GetWindowAttribute
- adds r5, r0, 0
- lsls r0, r7, 5
- adds r0, r4, r0
- ldr r6, =0x04000040
- adds r1, r5, 0
- adds r2, r6, 0
- bl CpuSet
- adds r0, r7, 0
- adds r0, 0x10
- lsls r0, 5
- adds r4, r0
- movs r0, 0x80
- lsls r0, 1
- adds r5, r0
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl CpuSet
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_copy_pocket_name_to_window
-
- thumb_func_start setup_bag_menu_textboxes
-setup_bag_menu_textboxes: @ 81AE054
- push {r4,lr}
- ldr r0, =gUnknown_08614174
- bl InitWindows
- bl DeactivateAllTextPrinters
- movs r0, 0
- movs r1, 0x1
- movs r2, 0xE0
- bl sub_809882C
- movs r0, 0
- movs r1, 0xA
- movs r2, 0xD0
- bl copy_textbox_border_tile_patterns_to_vram
- movs r0, 0xC0
- movs r1, 0x1
- bl sub_819A2BC
- ldr r0, =gUnknown_0860F074
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- movs r4, 0
-_081AE088:
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _081AE088
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end setup_bag_menu_textboxes
-
- thumb_func_start bag_menu_print
-bag_menu_print: @ 81AE0BC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- mov r9, r3
- ldr r3, [sp, 0x30]
- ldr r4, [sp, 0x34]
- ldr r6, [sp, 0x38]
- ldr r5, [sp, 0x3C]
- mov r8, r5
- ldr r5, [sp, 0x40]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r7, r9
- lsls r7, 24
- lsrs r7, 24
- mov r9, r7
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r6, 24
- lsrs r6, 24
- lsls r5, 24
- lsrs r5, 24
- str r4, [sp]
- str r6, [sp, 0x4]
- lsls r4, r5, 1
- adds r4, r5
- ldr r5, =gUnknown_08614164
- adds r4, r5
- str r4, [sp, 0x8]
- mov r4, r8
- lsls r4, 24
- asrs r4, 24
- str r4, [sp, 0xC]
- str r2, [sp, 0x10]
- mov r2, r9
- bl AddTextPrinterParameterized2
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_print
-
- thumb_func_start sub_81AE124
-sub_81AE124: @ 81AE124
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_0203CE54
- ldr r1, [r1]
- movs r2, 0x81
- lsls r2, 4
- adds r1, r2
- adds r1, r0
- ldrb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81AE124
-
- thumb_func_start bag_menu_add_window
-bag_menu_add_window: @ 81AE13C
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gUnknown_0203CE54
- movs r3, 0x81
- lsls r3, 4
- adds r1, r2, r3
- ldr r0, [r0]
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0xFF
- bne _081AE172
- lsls r0, r2, 3
- ldr r1, =gUnknown_086141AC
- adds r0, r1
- bl AddWindow
- strb r0, [r4]
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x1
- movs r3, 0xE
- bl SetWindowBorderStyle
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
-_081AE172:
- ldrb r0, [r4]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end bag_menu_add_window
-
- thumb_func_start bag_menu_remove_window
-bag_menu_remove_window: @ 81AE184
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_0203CE54
- movs r2, 0x81
- lsls r2, 4
- adds r0, r2
- ldr r1, [r1]
- adds r4, r1, r0
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _081AE1B8
- movs r1, 0
- bl sub_8198070
- ldrb r0, [r4]
- bl ClearWindowTilemap
- ldrb r0, [r4]
- bl RemoveWindow
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0xFF
- strb r0, [r4]
-_081AE1B8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_remove_window
-
- thumb_func_start AddItemMessageWindow
-@ u8 AddItemMessageWindow(u8 a1)
-AddItemMessageWindow: @ 81AE1C4
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gUnknown_0203CE54
- movs r3, 0x81
- lsls r3, 4
- adds r1, r2, r3
- ldr r0, [r0]
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0xFF
- bne _081AE1E8
- lsls r0, r2, 3
- ldr r1, =gUnknown_086141AC
- adds r0, r1
- bl AddWindow
- strb r0, [r4]
-_081AE1E8:
- ldrb r0, [r4]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end AddItemMessageWindow
-
- thumb_func_start bag_menu_RemoveBagItem_message_window
-bag_menu_RemoveBagItem_message_window: @ 81AE1F8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_0203CE54
- movs r2, 0x81
- lsls r2, 4
- adds r0, r2
- ldr r1, [r1]
- adds r4, r1, r0
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _081AE22C
- movs r1, 0
- bl sub_8197DF8
- ldrb r0, [r4]
- bl ClearWindowTilemap
- ldrb r0, [r4]
- bl RemoveWindow
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0xFF
- strb r0, [r4]
-_081AE22C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_RemoveBagItem_message_window
-
- thumb_func_start bag_menu_yes_no
-bag_menu_yes_no: @ 81AE238
- push {lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 21
- ldr r3, =gUnknown_086141AC
- adds r1, r3
- movs r3, 0x2
- str r3, [sp]
- movs r3, 0x1
- str r3, [sp, 0x4]
- movs r3, 0xE
- str r3, [sp, 0x8]
- str r2, [sp, 0xC]
- movs r2, 0x1
- movs r3, 0
- bl CreateYesNoMenuWithCallbacks
- add sp, 0x10
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_yes_no
-
- thumb_func_start bag_menu_AddMoney_window
-bag_menu_AddMoney_window: @ 81AE268
- push {r4,lr}
- movs r0, 0x9
- bl bag_menu_add_window
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- bl GetMoney
- adds r3, r0, 0
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0xE
- bl PrintMoneyAmountInMoneyBoxWithBorder
- movs r0, 0x13
- movs r1, 0xB
- bl AddMoneyLabelObject
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bag_menu_AddMoney_window
-
- thumb_func_start bag_menu_remove_money_window
-bag_menu_remove_money_window: @ 81AE2A4
- push {lr}
- movs r0, 0x9
- bl bag_menu_remove_window
- bl RemoveMoneyLabelObject
- pop {r0}
- bx r0
- thumb_func_end bag_menu_remove_money_window
-
- thumb_func_start bag_menu_prepare_tmhm_move_window
-bag_menu_prepare_tmhm_move_window: @ 81AE2B4
- push {lr}
- movs r0, 0x3
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0x13
- movs r2, 0
- movs r3, 0
- bl blit_move_info_icon
- movs r0, 0x3
- movs r1, 0x14
- movs r2, 0
- movs r3, 0xC
- bl blit_move_info_icon
- movs r0, 0x3
- movs r1, 0x15
- movs r2, 0
- movs r3, 0x18
- bl blit_move_info_icon
- movs r0, 0x3
- movs r1, 0x16
- movs r2, 0
- movs r3, 0x24
- bl blit_move_info_icon
- movs r0, 0x3
- movs r1, 0x2
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end bag_menu_prepare_tmhm_move_window
-
- thumb_func_start PrintTMHMMoveData
-PrintTMHMMoveData: @ 81AE2FC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x4
- movs r1, 0
- bl FillWindowPixelBuffer
- cmp r4, 0
- bne _081AE354
- movs r4, 0
- movs r5, 0
-_081AE31A:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 26
- lsrs r0, 24
- str r0, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0xFF
- str r0, [sp, 0xC]
- movs r0, 0x4
- str r0, [sp, 0x10]
- movs r1, 0x1
- ldr r2, =gText_ThreeDashes
- movs r3, 0x7
- bl bag_menu_print
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _081AE31A
- movs r0, 0x4
- movs r1, 0x2
- bl CopyWindowToVram
- b _081AE440
- .pool
-_081AE354:
- adds r0, r4, 0
- bl ItemIdToBattleMoveId
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r1, =gBattleMoves
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r5, r0, r1
- ldrb r1, [r5, 0x2]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x4
- movs r2, 0
- movs r3, 0
- bl blit_move_info_icon
- ldrb r0, [r5, 0x1]
- cmp r0, 0x1
- bhi _081AE38C
- ldr r2, =gText_ThreeDashes
- b _081AE39C
- .pool
-_081AE38C:
- ldr r4, =gStringVar1
- ldrb r1, [r5, 0x1]
- adds r0, r4, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r2, r4, 0
-_081AE39C:
- movs r0, 0xC
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r0, 0xFF
- str r0, [sp, 0xC]
- movs r0, 0x4
- str r0, [sp, 0x10]
- movs r1, 0x1
- movs r3, 0x7
- bl bag_menu_print
- ldr r2, =gBattleMoves
- lsls r1, r7, 1
- adds r0, r1, r7
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2, 0x3]
- adds r6, r1, 0
- cmp r0, 0
- bne _081AE3D8
- ldr r2, =gText_ThreeDashes
- b _081AE3E8
- .pool
-_081AE3D8:
- ldr r4, =gStringVar1
- ldrb r1, [r2, 0x3]
- adds r0, r4, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r2, r4, 0
-_081AE3E8:
- movs r0, 0x18
- str r0, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0xFF
- mov r8, r0
- str r0, [sp, 0xC]
- movs r0, 0x4
- mov r9, r0
- str r0, [sp, 0x10]
- movs r1, 0x1
- movs r3, 0x7
- bl bag_menu_print
- ldr r5, =gStringVar1
- ldr r1, =gBattleMoves
- adds r0, r6, r7
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x4]
- adds r0, r5, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- movs r0, 0x24
- str r0, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- mov r0, r8
- str r0, [sp, 0xC]
- mov r0, r9
- str r0, [sp, 0x10]
- movs r0, 0x4
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0x7
- bl bag_menu_print
- movs r0, 0x4
- movs r1, 0x2
- bl CopyWindowToVram
-_081AE440:
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end PrintTMHMMoveData
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/librfu.s b/asm/librfu.s
index 5fc1b0d6f..82fba2202 100644
--- a/asm/librfu.s
+++ b/asm/librfu.s
@@ -33,35 +33,35 @@ _082E3EDC:
_082E3EE0:
cmp r7, 0
beq _082E3EEC
- ldr r3, _082E3EE8
+ ldr r3, =0x00000e64
b _082E3EEE
.align 2, 0
-_082E3EE8: .4byte 0x00000e64
+ .pool
_082E3EEC:
- ldr r3, _082E3EF8
+ ldr r3, =0x00000504
_082E3EEE:
cmp r2, r3
bcs _082E3EFC
movs r0, 0x1
b _082E3FB8
.align 2, 0
-_082E3EF8: .4byte 0x00000504
+ .pool
_082E3EFC:
- ldr r0, _082E3FC0
+ ldr r0, =gUnknown_03007890
str r4, [r0]
- ldr r1, _082E3FC4
+ ldr r1, =gUnknown_03007894
adds r0, r4, 0
adds r0, 0xB4
str r0, [r1]
- ldr r1, _082E3FC8
+ ldr r1, =gUnknown_03007898
adds r0, 0x28
str r0, [r1]
- ldr r2, _082E3FCC
+ ldr r2, =gUnknown_03007880
movs r1, 0xDE
lsls r1, 1
adds r0, r4, r1
str r0, [r2]
- ldr r1, _082E3FD0
+ ldr r1, =gUnknown_03007870
movs r3, 0xDF
lsls r3, 2
adds r0, r4, r3
@@ -88,10 +88,10 @@ _082E3F28:
lsrs r5, r0, 16
cmp r5, 0x3
bls _082E3F28
- ldr r0, _082E3FC8
+ ldr r0, =gUnknown_03007898
ldr r1, [r0]
adds r1, 0xDC
- ldr r4, _082E3FD0
+ ldr r4, =gUnknown_03007870
ldr r0, [r4, 0xC]
adds r0, 0x1C
str r0, [r1]
@@ -100,7 +100,7 @@ _082E3F28:
bl STWI_init_all
bl rfu_STC_clearAPIVariables
movs r5, 0
- ldr r3, _082E3FCC
+ ldr r3, =gUnknown_03007880
movs r2, 0
_082E3F6C:
lsls r1, r5, 2
@@ -117,16 +117,16 @@ _082E3F6C:
lsrs r5, r0, 16
cmp r5, 0x3
bls _082E3F6C
- ldr r4, _082E3FD4
+ ldr r4, =sub_82E53F4
movs r0, 0x2
negs r0, r0
ands r4, r0
- ldr r1, _082E3FC8
+ ldr r1, =gUnknown_03007898
ldr r0, [r1]
adds r2, r0, 0
adds r2, 0x8
movs r3, 0x2F
- ldr r5, _082E3FD8
+ ldr r5, =0x0000ffff
_082E3F9C:
ldrh r0, [r4]
strh r0, [r2]
@@ -147,30 +147,24 @@ _082E3FB8:
pop {r1}
bx r1
.align 2, 0
-_082E3FC0: .4byte gUnknown_03007890
-_082E3FC4: .4byte gUnknown_03007894
-_082E3FC8: .4byte gUnknown_03007898
-_082E3FCC: .4byte gUnknown_03007880
-_082E3FD0: .4byte gUnknown_03007870
-_082E3FD4: .4byte sub_82E53F4
-_082E3FD8: .4byte 0x0000ffff
+ .pool
thumb_func_end rfu_initializeAPI
thumb_func_start rfu_STC_clearAPIVariables
rfu_STC_clearAPIVariables: @ 82E3FDC
push {r4-r7,lr}
sub sp, 0x4
- ldr r1, _082E4050
+ ldr r1, =0x04000208
ldrh r0, [r1]
adds r7, r0, 0
movs r6, 0
strh r6, [r1]
- ldr r5, _082E4054
+ ldr r5, =gUnknown_03007894
ldr r1, [r5]
ldrb r4, [r1]
mov r0, sp
strh r6, [r0]
- ldr r2, _082E4058
+ ldr r2, =0x01000014
bl CpuSet
ldr r2, [r5]
movs r0, 0x8
@@ -180,9 +174,9 @@ rfu_STC_clearAPIVariables: @ 82E3FDC
mov r0, sp
adds r0, 0x2
strh r1, [r0]
- ldr r4, _082E405C
+ ldr r4, =gUnknown_03007890
ldr r1, [r4]
- ldr r2, _082E4060
+ ldr r2, =0x0100005a
bl CpuSet
ldr r1, [r4]
movs r0, 0x4
@@ -208,30 +202,26 @@ _082E4030:
lsrs r2, r0, 24
cmp r2, 0x3
bls _082E4030
- ldr r0, _082E4050
+ ldr r0, =0x04000208
strh r7, [r0]
add sp, 0x4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
-_082E4050: .4byte 0x04000208
-_082E4054: .4byte gUnknown_03007894
-_082E4058: .4byte 0x01000014
-_082E405C: .4byte gUnknown_03007890
-_082E4060: .4byte 0x0100005a
+ .pool
thumb_func_end rfu_STC_clearAPIVariables
thumb_func_start rfu_REQ_PARENT_resumeRetransmitAndChange
rfu_REQ_PARENT_resumeRetransmitAndChange: @ 82E4064
push {lr}
- ldr r0, _082E4074
+ ldr r0, =rfu_STC_REQ_callback
bl STWI_set_Callback_M
bl STWI_send_ResumeRetransmitAndChangeREQ
pop {r0}
bx r0
.align 2, 0
-_082E4074: .4byte rfu_STC_REQ_callback
+ .pool
thumb_func_end rfu_REQ_PARENT_resumeRetransmitAndChange
thumb_func_start rfu_UNI_PARENT_getDRAC_ACK
@@ -240,7 +230,7 @@ rfu_UNI_PARENT_getDRAC_ACK: @ 82E4078
adds r4, r0, 0
movs r0, 0
strb r0, [r4]
- ldr r5, _082E4090
+ ldr r5, =gUnknown_03007890
ldr r0, [r5]
ldrb r0, [r0]
cmp r0, 0x1
@@ -249,7 +239,7 @@ rfu_UNI_PARENT_getDRAC_ACK: @ 82E4078
lsls r0, 2
b _082E40BA
.align 2, 0
-_082E4090: .4byte gUnknown_03007890
+ .pool
_082E4094:
bl rfu_getSTWIRecvBuffer
adds r1, r0, 0
@@ -294,13 +284,13 @@ rfu_setTimerInterrupt: @ 82E40C0
thumb_func_start rfu_getSTWIRecvBuffer
rfu_getSTWIRecvBuffer: @ 82E40D4
- ldr r0, _082E40E0
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
bx lr
.align 2, 0
-_082E40E0: .4byte gUnknown_03007898
+ .pool
thumb_func_end rfu_getSTWIRecvBuffer
thumb_func_start rfu_setMSCCallback
@@ -315,7 +305,7 @@ rfu_setMSCCallback: @ 82E40E4
rfu_setREQCallback: @ 82E40F0
push {lr}
adds r1, r0, 0
- ldr r0, _082E4108
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
str r1, [r0]
negs r0, r1
@@ -325,7 +315,7 @@ rfu_setREQCallback: @ 82E40F0
pop {r0}
bx r0
.align 2, 0
-_082E4108: .4byte gUnknown_03007898
+ .pool
thumb_func_end rfu_setREQCallback
thumb_func_start rfu_enableREQCallback
@@ -334,16 +324,16 @@ rfu_enableREQCallback: @ 82E410C
lsls r0, 24
cmp r0, 0
beq _082E4124
- ldr r0, _082E4120
+ ldr r0, =gUnknown_03007894
ldr r2, [r0]
ldrb r1, [r2]
movs r0, 0x8
orrs r0, r1
b _082E412E
.align 2, 0
-_082E4120: .4byte gUnknown_03007894
+ .pool
_082E4124:
- ldr r0, _082E4134
+ ldr r0, =gUnknown_03007894
ldr r2, [r0]
ldrb r1, [r2]
movs r0, 0xF7
@@ -353,7 +343,7 @@ _082E412E:
pop {r0}
bx r0
.align 2, 0
-_082E4134: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_enableREQCallback
thumb_func_start rfu_STC_REQ_callback
@@ -363,9 +353,9 @@ rfu_STC_REQ_callback: @ 82E4138
lsrs r5, r0, 24
lsls r1, 16
lsrs r4, r1, 16
- ldr r0, _082E416C
+ ldr r0, =rfu_CB_defaultCallback
bl STWI_set_Callback_M
- ldr r0, _082E4170
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
strh r4, [r0, 0x1C]
ldrb r1, [r0]
@@ -373,7 +363,7 @@ rfu_STC_REQ_callback: @ 82E4138
ands r0, r1
cmp r0, 0
beq _082E4166
- ldr r0, _082E4174
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
ldr r2, [r0]
adds r0, r5, 0
@@ -384,9 +374,7 @@ _082E4166:
pop {r0}
bx r0
.align 2, 0
-_082E416C: .4byte rfu_CB_defaultCallback
-_082E4170: .4byte gUnknown_03007894
-_082E4174: .4byte gUnknown_03007898
+ .pool
thumb_func_end rfu_STC_REQ_callback
thumb_func_start rfu_CB_defaultCallback
@@ -398,21 +386,21 @@ rfu_CB_defaultCallback: @ 82E4178
lsrs r3, r1, 16
cmp r0, 0xFF
bne _082E41D4
- ldr r0, _082E41DC
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
ldrb r1, [r0]
movs r0, 0x8
ands r0, r1
cmp r0, 0
beq _082E41A2
- ldr r0, _082E41E0
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
ldr r2, [r0]
movs r0, 0xFF
adds r1, r3, 0
bl _call_via_r2
_082E41A2:
- ldr r0, _082E41E4
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r1, [r0, 0x2]
ldrb r0, [r0, 0x3]
@@ -434,7 +422,7 @@ _082E41C2:
lsrs r4, r0, 24
cmp r4, 0x3
bls _082E41B0
- ldr r0, _082E41E4
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
movs r0, 0xFF
strb r0, [r1]
@@ -443,41 +431,39 @@ _082E41D4:
pop {r0}
bx r0
.align 2, 0
-_082E41DC: .4byte gUnknown_03007894
-_082E41E0: .4byte gUnknown_03007898
-_082E41E4: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_CB_defaultCallback
thumb_func_start rfu_waitREQComplete
rfu_waitREQComplete: @ 82E41E8
push {lr}
bl STWI_poll_CommandEnd
- ldr r0, _082E41F8
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
ldrh r0, [r0, 0x1C]
pop {r1}
bx r1
.align 2, 0
-_082E41F8: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_waitREQComplete
thumb_func_start rfu_REQ_RFUStatus
rfu_REQ_RFUStatus: @ 82E41FC
push {lr}
- ldr r0, _082E420C
+ ldr r0, =rfu_STC_REQ_callback
bl STWI_set_Callback_M
bl STWI_send_SystemStatusREQ
pop {r0}
bx r0
.align 2, 0
-_082E420C: .4byte rfu_STC_REQ_callback
+ .pool
thumb_func_end rfu_REQ_RFUStatus
thumb_func_start rfu_getRFUStatus
rfu_getRFUStatus: @ 82E4210
push {r4,r5,lr}
adds r4, r0, 0
- ldr r5, _082E4228
+ ldr r5, =gUnknown_03007898
ldr r0, [r5]
adds r0, 0xDC
ldr r0, [r0]
@@ -487,7 +473,7 @@ rfu_getRFUStatus: @ 82E4210
movs r0, 0x10
b _082E4246
.align 2, 0
-_082E4228: .4byte gUnknown_03007898
+ .pool
_082E422C:
bl STWI_poll_CommandEnd
lsls r0, 16
@@ -512,12 +498,11 @@ _082E4246:
thumb_func_start sub_82E424C
sub_82E424C: @ 82E424C
push {lr}
- ldr r2, _082E4254
- ldr r3, _082E4258
+ ldr r2, =gUnknown_089A324C
+ ldr r3, =gDma3Requests + 0xE0
b _082E4266
.align 2, 0
-_082E4254: .4byte gUnknown_089A324C
-_082E4258: .4byte gDma3Requests + 0xE0
+ .pool
thumb_func_end sub_82E424C
thumb_func_start sub_82E425C
@@ -546,17 +531,17 @@ _082E4274:
lsrs r1, r0, 24
cmp r1, 0x59
bls _082E4274
- ldr r0, _082E42B0
+ ldr r0, =gDma3Requests + 0xEA
ldrh r0, [r0]
cmp r3, r0
bne _082E42BC
movs r0, 0xC0
lsls r0, 18
- ldr r1, _082E42B4
+ ldr r1, =gUnknown_03007890
ldr r1, [r1]
movs r2, 0x5A
bl CpuSet
- ldr r0, _082E42B8
+ ldr r0, =gUnknown_03007894
ldr r2, [r0]
ldrb r1, [r2]
movs r0, 0x80
@@ -565,9 +550,7 @@ _082E4274:
movs r0, 0
b _082E42BE
.align 2, 0
-_082E42B0: .4byte gDma3Requests + 0xEA
-_082E42B4: .4byte gUnknown_03007890
-_082E42B8: .4byte gUnknown_03007894
+ .pool
_082E42BC:
movs r0, 0x1
_082E42BE:
@@ -578,35 +561,34 @@ _082E42BE:
thumb_func_start rfu_REQ_stopMode
rfu_REQ_stopMode: @ 82E42C4
push {lr}
- ldr r0, _082E42E4
+ ldr r0, =0x04000208
ldrh r0, [r0]
cmp r0, 0
bne _082E42EC
movs r0, 0x3D
movs r1, 0x6
bl rfu_STC_REQ_callback
- ldr r0, _082E42E8
+ ldr r0, =gRfuState
ldr r1, [r0]
ldrh r0, [r1, 0x12]
movs r0, 0x6
strh r0, [r1, 0x12]
b _082E4362
.align 2, 0
-_082E42E4: .4byte 0x04000208
-_082E42E8: .4byte gRfuState
+ .pool
_082E42EC:
bl AgbRFU_SoftReset
bl rfu_STC_clearAPIVariables
movs r0, 0x8
bl sub_82E6D6C
- ldr r1, _082E433C
+ ldr r1, =0x00008001
cmp r0, r1
bne _082E4350
- ldr r0, _082E4340
+ ldr r0, =gRfuState
ldr r0, [r0]
ldrb r0, [r0, 0xA]
lsls r0, 2
- ldr r2, _082E4344
+ ldr r2, =0x04000100
adds r1, r0, r2
movs r0, 0
str r0, [r1]
@@ -615,8 +597,8 @@ _082E42EC:
str r0, [r1]
ldr r0, [r1]
lsls r0, 16
- ldr r2, _082E4348
- ldr r3, _082E434C
+ ldr r2, =0x0105ffff
+ ldr r3, =rfu_CB_stopMode
cmp r0, r2
bhi _082E432A
_082E4322:
@@ -632,13 +614,9 @@ _082E432A:
bl STWI_send_StopModeREQ
b _082E4362
.align 2, 0
-_082E433C: .4byte 0x00008001
-_082E4340: .4byte gRfuState
-_082E4344: .4byte 0x04000100
-_082E4348: .4byte 0x0105ffff
-_082E434C: .4byte rfu_CB_stopMode
+ .pool
_082E4350:
- ldr r1, _082E4368
+ ldr r1, =0x04000128
movs r2, 0x80
lsls r2, 6
adds r0, r2, 0
@@ -650,7 +628,7 @@ _082E4362:
pop {r0}
bx r0
.align 2, 0
-_082E4368: .4byte 0x04000128
+ .pool
thumb_func_end rfu_REQ_stopMode
thumb_func_start rfu_CB_stopMode
@@ -663,7 +641,7 @@ rfu_CB_stopMode: @ 82E436C
adds r2, r1, 0
cmp r2, 0
bne _082E4386
- ldr r1, _082E4394
+ ldr r1, =0x04000128
movs r4, 0x80
lsls r4, 6
adds r0, r4, 0
@@ -676,13 +654,13 @@ _082E4386:
pop {r0}
bx r0
.align 2, 0
-_082E4394: .4byte 0x04000128
+ .pool
thumb_func_end rfu_CB_stopMode
thumb_func_start rfu_REQBN_softReset_and_checkID
rfu_REQBN_softReset_and_checkID: @ 82E4398
push {lr}
- ldr r0, _082E43A8
+ ldr r0, =0x04000208
ldrh r0, [r0]
cmp r0, 0
bne _082E43AC
@@ -690,7 +668,7 @@ rfu_REQBN_softReset_and_checkID: @ 82E4398
negs r0, r0
b _082E43CC
.align 2, 0
-_082E43A8: .4byte 0x04000208
+ .pool
_082E43AC:
bl AgbRFU_SoftReset
bl rfu_STC_clearAPIVariables
@@ -699,7 +677,7 @@ _082E43AC:
adds r2, r0, 0
cmp r2, 0
bne _082E43CA
- ldr r1, _082E43D0
+ ldr r1, =0x04000128
movs r3, 0x80
lsls r3, 6
adds r0, r3, 0
@@ -710,19 +688,19 @@ _082E43CC:
pop {r1}
bx r1
.align 2, 0
-_082E43D0: .4byte 0x04000128
+ .pool
thumb_func_end rfu_REQBN_softReset_and_checkID
thumb_func_start rfu_REQ_reset
rfu_REQ_reset: @ 82E43D4
push {lr}
- ldr r0, _082E43E4
+ ldr r0, =rfu_CB_reset
bl STWI_set_Callback_M
bl STWI_send_ResetREQ
pop {r0}
bx r0
.align 2, 0
-_082E43E4: .4byte rfu_CB_reset
+ .pool
thumb_func_end rfu_REQ_reset
thumb_func_start rfu_CB_reset
@@ -756,7 +734,7 @@ rfu_REQ_configSystem: @ 82E440C
lsrs r5, 24
lsls r2, 24
lsrs r6, r2, 24
- ldr r0, _082E4444
+ ldr r0, =rfu_STC_REQ_callback
bl STWI_set_Callback_M
movs r0, 0x3
ands r4, r0
@@ -768,16 +746,15 @@ rfu_REQ_configSystem: @ 82E440C
bl STWI_send_SystemConfigREQ
cmp r6, 0
bne _082E444C
- ldr r0, _082E4448
+ ldr r0, =gUnknown_03007894
ldr r1, [r0]
movs r0, 0x1
strh r0, [r1, 0x1A]
b _082E4466
.align 2, 0
-_082E4444: .4byte rfu_STC_REQ_callback
-_082E4448: .4byte gUnknown_03007894
+ .pool
_082E444C:
- ldr r5, _082E446C
+ ldr r5, =0x04000208
ldrh r4, [r5]
movs r0, 0
strh r0, [r5]
@@ -785,7 +762,7 @@ _082E444C:
lsls r0, 2
adds r1, r6, 0
bl Div
- ldr r1, _082E4470
+ ldr r1, =gUnknown_03007894
ldr r1, [r1]
strh r0, [r1, 0x1A]
strh r4, [r5]
@@ -794,8 +771,7 @@ _082E4466:
pop {r0}
bx r0
.align 2, 0
-_082E446C: .4byte 0x04000208
-_082E4470: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_REQ_configSystem
thumb_func_start rfu_REQ_configGameData
@@ -821,7 +797,7 @@ rfu_REQ_configGameData: @ 82E4474
strb r2, [r0, 0x1]
_082E449A:
movs r2, 0x2
- ldr r0, _082E44FC
+ ldr r0, =rfu_CB_configGameData
mov r12, r0
_082E44A0:
mov r3, sp
@@ -871,7 +847,7 @@ _082E44E6:
pop {r0}
bx r0
.align 2, 0
-_082E44FC: .4byte rfu_CB_configGameData
+ .pool
thumb_func_end rfu_REQ_configGameData
thumb_func_start rfu_CB_configGameData
@@ -884,10 +860,10 @@ rfu_CB_configGameData: @ 82E4500
lsrs r7, r1, 16
cmp r7, 0
bne _082E458A
- ldr r0, _082E4544
+ ldr r0, =gRfuState
ldr r0, [r0]
ldr r1, [r0, 0x24]
- ldr r0, _082E4548
+ ldr r0, =gUnknown_03007890
ldr r6, [r0]
ldrb r2, [r1, 0x4]
adds r5, r6, 0
@@ -911,8 +887,7 @@ rfu_CB_configGameData: @ 82E4500
movs r0, 0x1
b _082E4552
.align 2, 0
-_082E4544: .4byte gRfuState
-_082E4548: .4byte gUnknown_03007890
+ .pool
_082E454C:
adds r1, r6, 0
adds r1, 0x97
@@ -920,7 +895,7 @@ _082E454C:
_082E4552:
strb r0, [r1]
movs r2, 0
- ldr r3, _082E4598
+ ldr r3, =gUnknown_03007890
_082E4558:
ldr r0, [r3]
adds r0, 0x9A
@@ -935,7 +910,7 @@ _082E4558:
bls _082E4558
adds r4, 0x1
movs r2, 0
- ldr r3, _082E4598
+ ldr r3, =gUnknown_03007890
_082E4574:
ldr r0, [r3]
adds r0, 0xA9
@@ -956,15 +931,15 @@ _082E458A:
pop {r0}
bx r0
.align 2, 0
-_082E4598: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_CB_configGameData
thumb_func_start rfu_REQ_startSearchChild
rfu_REQ_startSearchChild: @ 82E459C
push {r4,lr}
movs r1, 0
- ldr r4, _082E45E4
- ldr r3, _082E45E8
+ ldr r4, =rfu_CB_defaultCallback
+ ldr r3, =gUnknown_03007894
movs r2, 0
_082E45A6:
ldr r0, [r3]
@@ -984,7 +959,7 @@ _082E45A6:
lsrs r1, r0, 16
cmp r1, 0
bne _082E45F0
- ldr r0, _082E45EC
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
@@ -995,21 +970,19 @@ _082E45A6:
bl rfu_STC_clearLinkStatus
b _082E45F6
.align 2, 0
-_082E45E4: .4byte rfu_CB_defaultCallback
-_082E45E8: .4byte gUnknown_03007894
-_082E45EC: .4byte gUnknown_03007898
+ .pool
_082E45F0:
movs r0, 0x19
bl rfu_STC_REQ_callback
_082E45F6:
- ldr r0, _082E4608
+ ldr r0, =rfu_CB_startSearchChild
bl STWI_set_Callback_M
bl STWI_send_SC_StartREQ
pop {r4}
pop {r0}
bx r0
.align 2, 0
-_082E4608: .4byte rfu_CB_startSearchChild
+ .pool
thumb_func_end rfu_REQ_startSearchChild
thumb_func_start rfu_CB_startSearchChild
@@ -1022,7 +995,7 @@ rfu_CB_startSearchChild: @ 82E460C
adds r2, r1, 0
cmp r2, 0
bne _082E4624
- ldr r0, _082E4630
+ ldr r0, =gUnknown_03007894
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0x9]
@@ -1033,7 +1006,7 @@ _082E4624:
pop {r0}
bx r0
.align 2, 0
-_082E4630: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_CB_startSearchChild
thumb_func_start rfu_STC_clearLinkStatus
@@ -1049,16 +1022,16 @@ rfu_STC_clearLinkStatus: @ 82E4634
mov r0, sp
movs r5, 0
strh r5, [r0]
- ldr r4, _082E4690
+ ldr r4, =gUnknown_03007890
ldr r1, [r4]
adds r1, 0x14
- ldr r2, _082E4694
+ ldr r2, =0x01000040
bl CpuSet
ldr r0, [r4]
strb r5, [r0, 0x8]
_082E465C:
movs r1, 0
- ldr r2, _082E4690
+ ldr r2, =gUnknown_03007890
adds r4, r2, 0
movs r3, 0
_082E4664:
@@ -1085,32 +1058,31 @@ _082E4664:
pop {r0}
bx r0
.align 2, 0
-_082E4690: .4byte gUnknown_03007890
-_082E4694: .4byte 0x01000040
+ .pool
thumb_func_end rfu_STC_clearLinkStatus
thumb_func_start rfu_REQ_pollSearchChild
rfu_REQ_pollSearchChild: @ 82E4698
push {lr}
- ldr r0, _082E46A8
+ ldr r0, =rfu_CB_pollAndEndSearchChild
bl STWI_set_Callback_M
bl STWI_send_SC_PollingREQ
pop {r0}
bx r0
.align 2, 0
-_082E46A8: .4byte rfu_CB_pollAndEndSearchChild
+ .pool
thumb_func_end rfu_REQ_pollSearchChild
thumb_func_start rfu_REQ_endSearchChild
rfu_REQ_endSearchChild: @ 82E46AC
push {lr}
- ldr r0, _082E46BC
+ ldr r0, =rfu_CB_pollAndEndSearchChild
bl STWI_set_Callback_M
bl STWI_send_SC_EndREQ
pop {r0}
bx r0
.align 2, 0
-_082E46BC: .4byte rfu_CB_pollAndEndSearchChild
+ .pool
thumb_func_end rfu_REQ_endSearchChild
thumb_func_start rfu_CB_pollAndEndSearchChild
@@ -1126,13 +1098,13 @@ rfu_CB_pollAndEndSearchChild: @ 82E46C0
_082E46D2:
cmp r4, 0x1A
bne _082E4714
- ldr r5, _082E4708
+ ldr r5, =gUnknown_03007890
ldr r0, [r5]
adds r0, 0x94
ldrh r0, [r0]
cmp r0, 0
bne _082E4730
- ldr r0, _082E470C
+ ldr r0, =rfu_CB_defaultCallback
bl STWI_set_Callback_M
bl STWI_send_SystemStatusREQ
bl STWI_poll_CommandEnd
@@ -1140,7 +1112,7 @@ _082E46D2:
cmp r0, 0
bne _082E4730
ldr r1, [r5]
- ldr r0, _082E4710
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
@@ -1149,13 +1121,11 @@ _082E46D2:
strh r0, [r1]
b _082E4730
.align 2, 0
-_082E4708: .4byte gUnknown_03007890
-_082E470C: .4byte rfu_CB_defaultCallback
-_082E4710: .4byte gUnknown_03007898
+ .pool
_082E4714:
cmp r4, 0x1B
bne _082E4730
- ldr r0, _082E4740
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
ldrb r0, [r1]
cmp r0, 0xFF
@@ -1164,7 +1134,7 @@ _082E4714:
movs r0, 0
strh r0, [r1]
_082E4728:
- ldr r0, _082E4744
+ ldr r0, =gUnknown_03007894
ldr r1, [r0]
movs r0, 0
strb r0, [r1, 0x9]
@@ -1176,8 +1146,7 @@ _082E4730:
pop {r0}
bx r0
.align 2, 0
-_082E4740: .4byte gUnknown_03007890
-_082E4744: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_CB_pollAndEndSearchChild
thumb_func_start rfu_STC_readChildList
@@ -1185,7 +1154,7 @@ rfu_STC_readChildList: @ 82E4748
push {r4-r7,lr}
mov r7, r8
push {r7}
- ldr r0, _082E47F8
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
@@ -1193,9 +1162,9 @@ rfu_STC_readChildList: @ 82E4748
adds r6, r0, 0x4
cmp r7, 0
beq _082E47EE
- ldr r0, _082E47FC
+ ldr r0, =gUnknown_03007894
mov r8, r0
- ldr r1, _082E4800
+ ldr r1, =gUnknown_03007890
mov r12, r1
_082E4766:
ldrb r4, [r6, 0x2]
@@ -1274,21 +1243,19 @@ _082E47EE:
pop {r0}
bx r0
.align 2, 0
-_082E47F8: .4byte gUnknown_03007898
-_082E47FC: .4byte gUnknown_03007894
-_082E4800: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_STC_readChildList
thumb_func_start rfu_REQ_startSearchParent
rfu_REQ_startSearchParent: @ 82E4804
push {lr}
- ldr r0, _082E4814
+ ldr r0, =rfu_CB_startSearchParent
bl STWI_set_Callback_M
bl STWI_send_SP_StartREQ
pop {r0}
bx r0
.align 2, 0
-_082E4814: .4byte rfu_CB_startSearchParent
+ .pool
thumb_func_end rfu_REQ_startSearchParent
thumb_func_start rfu_CB_startSearchParent
@@ -1315,13 +1282,13 @@ _082E482E:
thumb_func_start rfu_REQ_pollSearchParent
rfu_REQ_pollSearchParent: @ 82E483C
push {lr}
- ldr r0, _082E484C
+ ldr r0, =sub_82E4850
bl STWI_set_Callback_M
bl STWI_send_SP_PollingREQ
pop {r0}
bx r0
.align 2, 0
-_082E484C: .4byte sub_82E4850
+ .pool
thumb_func_end rfu_REQ_pollSearchParent
thumb_func_start sub_82E4850
@@ -1347,13 +1314,13 @@ _082E4864:
thumb_func_start rfu_REQ_endSearchParent
rfu_REQ_endSearchParent: @ 82E4874
push {lr}
- ldr r0, _082E4884
+ ldr r0, =rfu_STC_REQ_callback
bl STWI_set_Callback_M
bl STWI_send_SP_EndREQ
pop {r0}
bx r0
.align 2, 0
-_082E4884: .4byte rfu_STC_REQ_callback
+ .pool
thumb_func_end rfu_REQ_endSearchParent
thumb_func_start rfu_STC_readParentCandidateList
@@ -1365,12 +1332,12 @@ rfu_STC_readParentCandidateList: @ 82E4888
mov r0, sp
movs r4, 0
strh r4, [r0]
- ldr r5, _082E4930
+ ldr r5, =gUnknown_03007890
ldr r1, [r5]
adds r1, 0x14
- ldr r2, _082E4934
+ ldr r2, =0x01000040
bl CpuSet
- ldr r0, _082E4938
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r2, [r0]
@@ -1382,7 +1349,7 @@ rfu_STC_readParentCandidateList: @ 82E4888
cmp r7, 0
beq _082E498C
mov r12, r5
- ldr r0, _082E493C
+ ldr r0, =0x00007fff
mov r8, r0
_082E48BE:
subs r0, r7, 0x7
@@ -1444,10 +1411,7 @@ _082E48D8:
strb r0, [r4, 0x3]
b _082E4942
.align 2, 0
-_082E4930: .4byte gUnknown_03007890
-_082E4934: .4byte 0x01000040
-_082E4938: .4byte gUnknown_03007898
-_082E493C: .4byte 0x00007fff
+ .pool
_082E4940:
strb r3, [r4, 0x3]
_082E4942:
@@ -1507,7 +1471,7 @@ rfu_REQ_startConnectParent: @ 82E4998
lsrs r4, r0, 16
movs r3, 0
movs r2, 0
- ldr r1, _082E49E4
+ ldr r1, =gUnknown_03007890
ldr r0, [r1]
ldrh r0, [r0, 0x14]
cmp r0, r4
@@ -1533,18 +1497,16 @@ _082E49C4:
_082E49CC:
cmp r3, 0
bne _082E49F0
- ldr r0, _082E49E8
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
strh r4, [r0, 0x1E]
- ldr r0, _082E49EC
+ ldr r0, =rfu_STC_REQ_callback
bl STWI_set_Callback_M
adds r0, r4, 0
bl STWI_send_CP_StartREQ
b _082E49F8
.align 2, 0
-_082E49E4: .4byte gUnknown_03007890
-_082E49E8: .4byte gUnknown_03007894
-_082E49EC: .4byte rfu_STC_REQ_callback
+ .pool
_082E49F0:
movs r0, 0x1F
adds r1, r3, 0
@@ -1558,13 +1520,13 @@ _082E49F8:
thumb_func_start rfu_REQ_pollConnectParent
rfu_REQ_pollConnectParent: @ 82E4A00
push {lr}
- ldr r0, _082E4A10
+ ldr r0, =rfu_CB_pollConnectParent
bl STWI_set_Callback_M
bl STWI_send_CP_PollingREQ
pop {r0}
bx r0
.align 2, 0
-_082E4A10: .4byte rfu_CB_pollConnectParent
+ .pool
thumb_func_end rfu_REQ_pollConnectParent
thumb_func_start rfu_CB_pollConnectParent
@@ -1583,7 +1545,7 @@ rfu_CB_pollConnectParent: @ 82E4A14
str r1, [sp, 0x28]
cmp r1, 0
bne _082E4B16
- ldr r0, _082E4AD0
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
@@ -1597,7 +1559,7 @@ rfu_CB_pollConnectParent: @ 82E4A14
lsls r0, 17
lsls r0, r1
lsrs r2, r0, 24
- ldr r4, _082E4AD4
+ ldr r4, =gUnknown_03007890
ldr r3, [r4]
ldrb r1, [r3, 0x2]
adds r0, r2, 0
@@ -1621,7 +1583,7 @@ rfu_CB_pollConnectParent: @ 82E4A14
strb r0, [r1, 0x1]
ldr r0, [r4]
strb r2, [r0]
- ldr r3, _082E4AD8
+ ldr r3, =gUnknown_03007894
ldr r2, [r3]
ldrb r1, [r2]
movs r0, 0x80
@@ -1656,17 +1618,14 @@ _082E4A92:
ldr r1, [r7]
adds r1, 0x14
adds r0, r6, 0
- ldr r2, _082E4ADC
+ ldr r2, =0x01000040
bl CpuSet
ldr r0, [r7]
mov r1, r8
strb r1, [r0, 0x8]
b _082E4AF4
.align 2, 0
-_082E4AD0: .4byte gUnknown_03007898
-_082E4AD4: .4byte gUnknown_03007890
-_082E4AD8: .4byte gUnknown_03007894
-_082E4ADC: .4byte 0x01000040
+ .pool
_082E4AE0:
adds r0, r4, 0
adds r0, 0x14
@@ -1682,7 +1641,7 @@ _082E4AEA:
_082E4AF4:
cmp r5, 0x3
bhi _082E4B16
- ldr r4, _082E4B30
+ ldr r4, =gUnknown_03007890
mov r0, r10
lsls r5, r0, 5
adds r0, r5, 0
@@ -1709,7 +1668,7 @@ _082E4B16:
pop {r0}
bx r0
.align 2, 0
-_082E4B30: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_CB_pollConnectParent
thumb_func_start rfu_getConnectParentStatus
@@ -1718,7 +1677,7 @@ rfu_getConnectParentStatus: @ 82E4B34
adds r3, r0, 0
movs r0, 0xFF
strb r0, [r3]
- ldr r0, _082E4B54
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r2, [r0]
@@ -1731,7 +1690,7 @@ rfu_getConnectParentStatus: @ 82E4B34
movs r0, 0x10
b _082E4B64
.align 2, 0
-_082E4B54: .4byte gUnknown_03007898
+ .pool
_082E4B58:
adds r2, 0x6
ldrb r0, [r2]
@@ -1747,17 +1706,17 @@ _082E4B64:
thumb_func_start rfu_REQ_endConnectParent
rfu_REQ_endConnectParent: @ 82E4B68
push {lr}
- ldr r0, _082E4B94
+ ldr r0, =rfu_CB_pollConnectParent
bl STWI_set_Callback_M
bl STWI_send_CP_EndREQ
- ldr r0, _082E4B98
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r1, [r0]
ldrb r0, [r1, 0x6]
cmp r0, 0x3
bhi _082E4B90
- ldr r0, _082E4B9C
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
adds r0, 0xA
ldrb r1, [r1, 0x6]
@@ -1768,21 +1727,19 @@ _082E4B90:
pop {r0}
bx r0
.align 2, 0
-_082E4B94: .4byte rfu_CB_pollConnectParent
-_082E4B98: .4byte gUnknown_03007898
-_082E4B9C: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_REQ_endConnectParent
thumb_func_start rfu_syncVBlank
rfu_syncVBlank: @ 82E4BA0
push {r4,r5,lr}
bl rfu_NI_checkCommFailCounter
- ldr r0, _082E4BE8
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0xFF
beq _082E4C78
- ldr r4, _082E4BEC
+ ldr r4, =gUnknown_03007894
ldr r1, [r4]
ldrb r0, [r1, 0x6]
cmp r0, 0
@@ -1810,8 +1767,7 @@ _082E4BBE:
strh r0, [r1, 0x20]
b _082E4BFA
.align 2, 0
-_082E4BE8: .4byte gUnknown_03007890
-_082E4BEC: .4byte gUnknown_03007894
+ .pool
_082E4BF0:
cmp r3, 0
beq _082E4C10
@@ -1822,16 +1778,16 @@ _082E4BFA:
cmp r3, 0
beq _082E4C10
_082E4BFE:
- ldr r3, _082E4C0C
+ ldr r3, =gUnknown_03007894
ldr r2, [r3]
ldrb r1, [r2]
movs r0, 0xFD
ands r0, r1
b _082E4C1A
.align 2, 0
-_082E4C0C: .4byte gUnknown_03007894
+ .pool
_082E4C10:
- ldr r3, _082E4C6C
+ ldr r3, =gUnknown_03007894
ldr r2, [r3]
ldrb r1, [r2]
movs r0, 0x2
@@ -1850,7 +1806,7 @@ _082E4C1A:
movs r0, 0xFB
ands r0, r1
strb r0, [r3]
- ldr r0, _082E4C70
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r1, [r0, 0x2]
ldrb r0, [r0, 0x3]
@@ -1872,15 +1828,14 @@ _082E4C54:
lsrs r4, r0, 24
cmp r4, 0x3
bls _082E4C42
- ldr r0, _082E4C70
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
movs r0, 0xFF
strb r0, [r1]
movs r0, 0x1
b _082E4C7A
.align 2, 0
-_082E4C6C: .4byte gUnknown_03007894
-_082E4C70: .4byte gUnknown_03007890
+ .pool
_082E4C74:
subs r0, 0x1
strh r0, [r3, 0x20]
@@ -1919,21 +1874,21 @@ rfu_REQBN_watchLink: @ 82E4C80
ldrb r0, [r2, 0xC]
ldr r2, [sp, 0x4]
strb r0, [r2]
- ldr r5, _082E4D20
+ ldr r5, =gUnknown_03007890
ldr r0, [r5]
ldrb r0, [r0]
cmp r0, 0xFF
bne _082E4CBE
b _082E504E
_082E4CBE:
- ldr r0, _082E4D24
+ ldr r0, =gRfuState
ldr r0, [r0]
ldrb r0, [r0, 0x14]
cmp r0, 0
bne _082E4CCA
b _082E504E
_082E4CCA:
- ldr r3, _082E4D28
+ ldr r3, =gUnknown_03007894
ldr r2, [r3]
ldrb r1, [r2]
movs r4, 0x4
@@ -1957,7 +1912,7 @@ _082E4CEE:
lsrs r0, 24
cmp r0, 0x29
bne _082E4D30
- ldr r0, _082E4D2C
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r1, [r0]
@@ -1979,16 +1934,13 @@ _082E4D18:
str r2, [sp, 0x8]
b _082E4D88
.align 2, 0
-_082E4D20: .4byte gUnknown_03007890
-_082E4D24: .4byte gRfuState
-_082E4D28: .4byte gUnknown_03007894
-_082E4D2C: .4byte gUnknown_03007898
+ .pool
_082E4D30:
movs r0, 0x9B
lsls r0, 1
cmp r6, r0
bne _082E4D80
- ldr r0, _082E4DDC
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
@@ -2011,7 +1963,7 @@ _082E4D56:
ands r0, r1
cmp r0, 0
beq _082E4D76
- ldr r0, _082E4DE0
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
adds r0, 0xA
adds r0, r5
@@ -2031,7 +1983,7 @@ _082E4D80:
bne _082E4D88
b _082E504E
_082E4D88:
- ldr r4, _082E4DDC
+ ldr r4, =gUnknown_03007898
ldr r0, [r4]
adds r0, 0xDC
ldr r0, [r0]
@@ -2039,7 +1991,7 @@ _082E4D88:
str r1, [sp, 0x10]
ldr r0, [r0, 0x4]
str r0, [sp, 0x14]
- ldr r0, _082E4DE4
+ ldr r0, =rfu_CB_defaultCallback
bl STWI_set_Callback_M
bl STWI_send_LinkStatusREQ
bl STWI_poll_CommandEnd
@@ -2053,7 +2005,7 @@ _082E4D88:
ldr r0, [r0]
adds r2, r0, 0x4
movs r5, 0
- ldr r3, _082E4DE0
+ ldr r3, =gUnknown_03007890
_082E4DBC:
ldr r0, [r3]
adds r0, 0xA
@@ -2071,9 +2023,7 @@ _082E4DBC:
movs r5, 0
b _082E4DF4
.align 2, 0
-_082E4DDC: .4byte gUnknown_03007898
-_082E4DE0: .4byte gUnknown_03007890
-_082E4DE4: .4byte rfu_CB_defaultCallback
+ .pool
_082E4DE8:
movs r0, 0x11
ldr r1, [sp, 0xC]
@@ -2081,7 +2031,7 @@ _082E4DE8:
ldr r0, [sp, 0xC]
b _082E5050
_082E4DF4:
- ldr r1, _082E4E7C
+ ldr r1, =gUnknown_03007894
ldr r0, [r1]
adds r0, 0xE
adds r2, r0, r5
@@ -2091,7 +2041,7 @@ _082E4DF4:
beq _082E4E1A
subs r0, 0x4
strb r0, [r2]
- ldr r0, _082E4E80
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
adds r0, 0xA
adds r1, r0, r5
@@ -2115,7 +2065,7 @@ _082E4E2E:
ldr r2, [sp, 0x8]
cmp r2, 0x1
bne _082E4F10
- ldr r4, _082E4E80
+ ldr r4, =gUnknown_03007890
ldr r1, [r4]
ldrb r0, [r1, 0x2]
ands r0, r6
@@ -2152,15 +2102,14 @@ _082E4E2E:
strb r2, [r0]
b _082E4F10
.align 2, 0
-_082E4E7C: .4byte gUnknown_03007894
-_082E4E80: .4byte gUnknown_03007890
+ .pool
_082E4E84:
bl STWI_send_SystemStatusREQ
bl STWI_poll_CommandEnd
lsls r0, 16
cmp r0, 0
bne _082E4F10
- ldr r0, _082E4EB4
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
@@ -2177,9 +2126,9 @@ _082E4E84:
ldr r0, [sp]
b _082E4F0E
.align 2, 0
-_082E4EB4: .4byte gUnknown_03007898
+ .pool
_082E4EB8:
- ldr r2, _082E4F00
+ ldr r2, =gUnknown_03007894
ldr r1, [r2]
adds r1, 0xA
adds r1, r5
@@ -2214,7 +2163,7 @@ _082E4EB8:
strb r0, [r2]
b _082E4F10
.align 2, 0
-_082E4F00: .4byte gUnknown_03007894
+ .pool
_082E4F04:
ldr r0, [r3]
adds r0, 0xA
@@ -2224,7 +2173,7 @@ _082E4F04:
_082E4F0E:
strb r1, [r0]
_082E4F10:
- ldr r2, _082E4F70
+ ldr r2, =gUnknown_03007890
mov r12, r2
ldr r1, [r2]
ldrb r7, [r1]
@@ -2266,15 +2215,14 @@ _082E4F10:
ldrb r0, [r1, 0x1]
adds r0, 0x1
strb r0, [r1, 0x1]
- ldr r0, _082E4F74
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
adds r0, 0xA
adds r0, r5
strb r3, [r0]
b _082E5002
.align 2, 0
-_082E4F70: .4byte gUnknown_03007890
-_082E4F74: .4byte gUnknown_03007894
+ .pool
_082E4F78:
movs r0, 0
strb r0, [r4]
@@ -2287,7 +2235,7 @@ _082E4F7E:
bne _082E5002
bl STWI_send_SlotStatusREQ
bl STWI_poll_CommandEnd
- ldr r0, _082E4FC8
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r2, [r0]
@@ -2302,7 +2250,7 @@ _082E4F7E:
ldrb r0, [r2, 0x2]
cmp r0, r5
bne _082E4FD0
- ldr r0, _082E4FCC
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
lsls r1, r5, 1
adds r0, 0x12
@@ -2316,8 +2264,7 @@ _082E4F7E:
lsls r0, 24
b _082E4FFE
.align 2, 0
-_082E4FC8: .4byte gUnknown_03007898
-_082E4FCC: .4byte gUnknown_03007894
+ .pool
_082E4FD0:
adds r2, 0x4
subs r0, r3, 0x1
@@ -2329,7 +2276,7 @@ _082E4FD0:
ldrb r0, [r2, 0x2]
cmp r0, r5
bne _082E4FD0
- ldr r0, _082E5060
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
lsls r1, r5, 1
adds r0, 0x12
@@ -2346,7 +2293,7 @@ _082E4FFE:
lsrs r0, 24
mov r9, r0
_082E5002:
- ldr r0, _082E5064
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r1, [r0, 0x2]
mov r2, r8
@@ -2373,7 +2320,7 @@ _082E5028:
bl STWI_send_DisconnectREQ
bl STWI_poll_CommandEnd
_082E5038:
- ldr r1, _082E5068
+ ldr r1, =gUnknown_03007898
ldr r0, [r1]
adds r0, 0xDC
ldr r0, [r0]
@@ -2396,9 +2343,7 @@ _082E5050:
pop {r1}
bx r1
.align 2, 0
-_082E5060: .4byte gUnknown_03007894
-_082E5064: .4byte gUnknown_03007890
-_082E5068: .4byte gUnknown_03007898
+ .pool
thumb_func_end rfu_REQBN_watchLink
thumb_func_start rfu_STC_removeLinkData
@@ -2416,13 +2361,13 @@ rfu_STC_removeLinkData: @ 82E506C
lsls r0, 17
lsls r0, r7
lsrs r6, r0, 24
- ldr r0, _082E511C
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
adds r0, 0xE
adds r0, r7
movs r1, 0
strb r1, [r0]
- ldr r1, _082E5120
+ ldr r1, =gUnknown_03007890
ldr r4, [r1]
ldrb r0, [r4, 0x2]
ands r0, r6
@@ -2449,7 +2394,7 @@ _082E50AA:
strb r0, [r2, 0x3]
ldr r3, [r3]
ldr r0, [r3]
- ldr r1, _082E5124
+ ldr r1, =0x00ff00ff
ands r0, r1
cmp r0, 0
bne _082E50D2
@@ -2468,7 +2413,7 @@ _082E50D2:
mov r2, r8
ldr r1, [r2]
adds r1, r0
- ldr r2, _082E5128
+ ldr r2, =0x01000010
mov r0, sp
bl CpuSet
mov r0, r8
@@ -2494,10 +2439,7 @@ _082E5110:
pop {r0}
bx r0
.align 2, 0
-_082E511C: .4byte gUnknown_03007894
-_082E5120: .4byte gUnknown_03007890
-_082E5124: .4byte 0x00ff00ff
-_082E5128: .4byte 0x01000010
+ .pool
thumb_func_end rfu_STC_removeLinkData
thumb_func_start rfu_REQ_disconnect
@@ -2505,7 +2447,7 @@ rfu_REQ_disconnect: @ 82E512C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r2, _082E5170
+ ldr r2, =gUnknown_03007890
ldr r1, [r2]
ldrb r0, [r1, 0x2]
ldrb r1, [r1, 0x3]
@@ -2513,7 +2455,7 @@ rfu_REQ_disconnect: @ 82E512C
ands r0, r4
cmp r0, 0
beq _082E51B0
- ldr r0, _082E5174
+ ldr r0, =gUnknown_03007894
ldr r1, [r0]
strb r4, [r1, 0x5]
ldr r2, [r2]
@@ -2536,14 +2478,13 @@ rfu_REQ_disconnect: @ 82E512C
bl rfu_CB_disconnect
b _082E51B0
.align 2, 0
-_082E5170: .4byte gUnknown_03007890
-_082E5174: .4byte gUnknown_03007894
+ .pool
_082E5178:
ldr r0, [r3]
ldrb r0, [r0, 0x9]
cmp r0, 0
beq _082E51A4
- ldr r0, _082E51A0
+ ldr r0, =rfu_CB_defaultCallback
bl STWI_set_Callback_M
bl STWI_send_SC_EndREQ
bl STWI_poll_CommandEnd
@@ -2555,9 +2496,9 @@ _082E5178:
bl rfu_STC_REQ_callback
b _082E51B0
.align 2, 0
-_082E51A0: .4byte rfu_CB_defaultCallback
+ .pool
_082E51A4:
- ldr r0, _082E51B8
+ ldr r0, =rfu_CB_disconnect
bl STWI_set_Callback_M
adds r0, r4, 0
bl STWI_send_DisconnectREQ
@@ -2566,7 +2507,7 @@ _082E51B0:
pop {r0}
bx r0
.align 2, 0
-_082E51B8: .4byte rfu_CB_disconnect
+ .pool
thumb_func_end rfu_REQ_disconnect
thumb_func_start rfu_CB_disconnect
@@ -2578,19 +2519,19 @@ rfu_CB_disconnect: @ 82E51BC
lsrs r5, r1, 16
cmp r5, 0x3
bne _082E51F8
- ldr r0, _082E528C
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0
bne _082E51F8
- ldr r0, _082E5290
+ ldr r0, =rfu_CB_defaultCallback
bl STWI_set_Callback_M
bl STWI_send_SystemStatusREQ
bl STWI_poll_CommandEnd
lsls r0, 16
cmp r0, 0
bne _082E51F8
- ldr r0, _082E5294
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
@@ -2599,9 +2540,9 @@ rfu_CB_disconnect: @ 82E51BC
bne _082E51F8
movs r5, 0
_082E51F8:
- ldr r3, _082E5298
+ ldr r3, =gUnknown_03007894
ldr r2, [r3]
- ldr r0, _082E528C
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
ldrb r0, [r1, 0x2]
ldrb r1, [r1, 0x3]
@@ -2609,7 +2550,7 @@ _082E51F8:
ldrb r1, [r2, 0x5]
ands r0, r1
strb r0, [r2, 0x5]
- ldr r0, _082E5294
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r1, [r0]
@@ -2624,7 +2565,7 @@ _082E5220:
lsls r0, 17
lsls r0, r4
lsrs r0, 24
- ldr r1, _082E5298
+ ldr r1, =gUnknown_03007894
ldr r1, [r1]
ldrb r1, [r1, 0x5]
ands r0, r1
@@ -2640,7 +2581,7 @@ _082E523C:
cmp r4, 0x3
bls _082E5220
_082E5246:
- ldr r0, _082E528C
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r1, [r2, 0x2]
ldrb r0, [r2, 0x3]
@@ -2653,12 +2594,12 @@ _082E5258:
adds r0, r6, 0
adds r1, r5, 0
bl rfu_STC_REQ_callback
- ldr r0, _082E5298
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
ldrb r0, [r0, 0x9]
cmp r0, 0
beq _082E5286
- ldr r0, _082E5290
+ ldr r0, =rfu_CB_defaultCallback
bl STWI_set_Callback_M
bl STWI_send_SC_StartREQ
bl STWI_poll_CommandEnd
@@ -2673,10 +2614,7 @@ _082E5286:
pop {r0}
bx r0
.align 2, 0
-_082E528C: .4byte gUnknown_03007890
-_082E5290: .4byte rfu_CB_defaultCallback
-_082E5294: .4byte gUnknown_03007898
-_082E5298: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_CB_disconnect
thumb_func_start rfu_REQ_CHILD_startConnectRecovery
@@ -2684,13 +2622,13 @@ rfu_REQ_CHILD_startConnectRecovery: @ 82E529C
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
- ldr r0, _082E52EC
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
strb r5, [r0, 0x5]
movs r4, 0
movs r0, 0x1
ands r0, r5
- ldr r2, _082E52F0
+ ldr r2, =rfu_STC_REQ_callback
cmp r0, 0
bne _082E52CA
movs r1, 0x1
@@ -2708,7 +2646,7 @@ _082E52B6:
_082E52CA:
adds r0, r2, 0
bl STWI_set_Callback_M
- ldr r0, _082E52F4
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
lsls r0, r4, 5
adds r0, r1, r0
@@ -2721,21 +2659,19 @@ _082E52CA:
pop {r0}
bx r0
.align 2, 0
-_082E52EC: .4byte gUnknown_03007894
-_082E52F0: .4byte rfu_STC_REQ_callback
-_082E52F4: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_REQ_CHILD_startConnectRecovery
thumb_func_start rfu_REQ_CHILD_pollConnectRecovery
rfu_REQ_CHILD_pollConnectRecovery: @ 82E52F8
push {lr}
- ldr r0, _082E5308
+ ldr r0, =rfu_CB_CHILD_pollConnectRecovery
bl STWI_set_Callback_M
bl STWI_send_CPR_PollingREQ
pop {r0}
bx r0
.align 2, 0
-_082E5308: .4byte rfu_CB_CHILD_pollConnectRecovery
+ .pool
thumb_func_end rfu_REQ_CHILD_pollConnectRecovery
thumb_func_start rfu_CB_CHILD_pollConnectRecovery
@@ -2750,20 +2686,20 @@ rfu_CB_CHILD_pollConnectRecovery: @ 82E530C
lsrs r7, r1, 16
cmp r7, 0
bne _082E5390
- ldr r0, _082E53A4
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
ldrb r0, [r0, 0x4]
cmp r0, 0
bne _082E5390
- ldr r0, _082E53A8
+ ldr r0, =gUnknown_03007894
ldr r1, [r0]
ldrb r1, [r1, 0x5]
adds r6, r0, 0
cmp r1, 0
beq _082E5390
- ldr r1, _082E53AC
+ ldr r1, =gUnknown_03007890
ldr r0, [r1]
strb r7, [r0]
movs r4, 0
@@ -2818,9 +2754,7 @@ _082E5390:
pop {r0}
bx r0
.align 2, 0
-_082E53A4: .4byte gUnknown_03007898
-_082E53A8: .4byte gUnknown_03007894
-_082E53AC: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_CB_CHILD_pollConnectRecovery
thumb_func_start rfu_CHILD_getConnectRecoveryStatus
@@ -2829,7 +2763,7 @@ rfu_CHILD_getConnectRecoveryStatus: @ 82E53B0
adds r2, r0, 0
movs r0, 0xFF
strb r0, [r2]
- ldr r0, _082E53D0
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r1, [r0]
@@ -2842,7 +2776,7 @@ rfu_CHILD_getConnectRecoveryStatus: @ 82E53B0
movs r0, 0x10
b _082E53DA
.align 2, 0
-_082E53D0: .4byte gUnknown_03007898
+ .pool
_082E53D4:
ldrb r0, [r1, 0x4]
strb r0, [r2]
@@ -2855,13 +2789,13 @@ _082E53DA:
thumb_func_start rfu_REQ_CHILD_endConnectRecovery
rfu_REQ_CHILD_endConnectRecovery: @ 82E53E0
push {lr}
- ldr r0, _082E53F0
+ ldr r0, =rfu_CB_CHILD_pollConnectRecovery
bl STWI_set_Callback_M
bl STWI_send_CPR_EndREQ
pop {r0}
bx r0
.align 2, 0
-_082E53F0: .4byte rfu_CB_CHILD_pollConnectRecovery
+ .pool
thumb_func_end rfu_REQ_CHILD_endConnectRecovery
thumb_func_start sub_82E53F4
@@ -2905,12 +2839,12 @@ rfu_REQ_changeMasterSlave: @ 82E5424
lsrs r0, 16
cmp r0, 0x1
bne _082E5444
- ldr r0, _082E5440
+ ldr r0, =rfu_STC_REQ_callback
bl STWI_set_Callback_M
bl STWI_send_MS_ChangeREQ
b _082E544C
.align 2, 0
-_082E5440: .4byte rfu_STC_REQ_callback
+ .pool
_082E5444:
movs r0, 0x27
movs r1, 0
@@ -2929,7 +2863,7 @@ rfu_getMasterSlave: @ 82E5450
lsrs r2, r0, 24
cmp r2, 0x1
bne _082E547E
- ldr r0, _082E5484
+ ldr r0, =gRfuState
ldr r1, [r0]
adds r0, r1, 0
adds r0, 0x2C
@@ -2950,7 +2884,7 @@ _082E547E:
pop {r1}
bx r1
.align 2, 0
-_082E5484: .4byte gRfuState
+ .pool
thumb_func_end rfu_getMasterSlave
thumb_func_start rfu_clearAllSlot
@@ -2959,7 +2893,7 @@ rfu_clearAllSlot: @ 82E5488
mov r7, r8
push {r7}
sub sp, 0x4
- ldr r1, _082E550C
+ ldr r1, =0x04000208
ldrh r0, [r1]
mov r8, r0
movs r0, 0
@@ -2972,21 +2906,21 @@ rfu_clearAllSlot: @ 82E5488
_082E54A4:
mov r0, sp
strh r7, [r0]
- ldr r0, _082E5510
+ ldr r0, =gUnknown_03007880
lsls r4, r5, 2
adds r0, r4, r0
ldr r1, [r0]
mov r0, sp
- ldr r2, _082E5514
+ ldr r2, =0x01000034
bl CpuSet
strh r7, [r6]
- ldr r0, _082E5518
+ ldr r0, =gUnknown_03007870
adds r4, r0
ldr r1, [r4]
adds r0, r6, 0
- ldr r2, _082E551C
+ ldr r2, =0x0100000a
bl CpuSet
- ldr r3, _082E5520
+ ldr r3, =gUnknown_03007890
ldr r0, [r3]
adds r0, 0x10
adds r0, r5
@@ -3007,10 +2941,10 @@ _082E54A4:
strb r1, [r0, 0x5]
ldr r0, [r3]
strb r1, [r0, 0x6]
- ldr r0, _082E5524
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
strb r1, [r0, 0x2]
- ldr r0, _082E550C
+ ldr r0, =0x04000208
mov r1, r8
strh r1, [r0]
add sp, 0x4
@@ -3020,13 +2954,7 @@ _082E54A4:
pop {r0}
bx r0
.align 2, 0
-_082E550C: .4byte 0x04000208
-_082E5510: .4byte gUnknown_03007880
-_082E5514: .4byte 0x01000034
-_082E5518: .4byte gUnknown_03007870
-_082E551C: .4byte 0x0100000a
-_082E5520: .4byte gUnknown_03007890
-_082E5524: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_clearAllSlot
thumb_func_start rfu_STC_releaseFrame
@@ -3038,14 +2966,14 @@ rfu_STC_releaseFrame: @ 82E5528
adds r5, r2, 0
lsls r1, 24
lsrs r3, r1, 24
- ldr r0, _082E5560
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
ldrb r1, [r0]
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _082E5568
- ldr r6, _082E5564
+ ldr r6, =gUnknown_03007890
cmp r3, 0
bne _082E5554
ldr r1, [r6]
@@ -3060,10 +2988,9 @@ _082E5554:
strb r0, [r1, 0xF]
b _082E5588
.align 2, 0
-_082E5560: .4byte gUnknown_03007894
-_082E5564: .4byte gUnknown_03007890
+ .pool
_082E5568:
- ldr r6, _082E5590
+ ldr r6, =gUnknown_03007890
cmp r3, 0
bne _082E557C
ldr r1, [r6]
@@ -3085,7 +3012,7 @@ _082E5588:
pop {r0}
bx r0
.align 2, 0
-_082E5590: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_STC_releaseFrame
thumb_func_start rfu_clearSlot
@@ -3116,7 +3043,7 @@ _082E55B4:
lsls r0, 3
b _082E572C
_082E55C4:
- ldr r1, _082E5608
+ ldr r1, =0x04000208
ldrh r0, [r1]
mov r10, r0
movs r0, 0
@@ -3127,7 +3054,7 @@ _082E55C4:
cmp r0, 0
beq _082E568C
movs r3, 0
- ldr r1, _082E560C
+ ldr r1, =gUnknown_03007880
lsls r0, r7, 2
adds r0, r1
mov r9, r0
@@ -3142,7 +3069,7 @@ _082E55E2:
beq _082E5634
mov r2, r9
ldr r4, [r2]
- ldr r0, _082E5610
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
adds r0, r4, 0
adds r0, 0x2C
@@ -3152,9 +3079,7 @@ _082E55E2:
strb r0, [r2, 0x4]
b _082E5634
.align 2, 0
-_082E5608: .4byte 0x04000208
-_082E560C: .4byte gUnknown_03007880
-_082E5610: .4byte gUnknown_03007890
+ .pool
_082E5614:
movs r0, 0x8
mov r1, r8
@@ -3165,7 +3090,7 @@ _082E5614:
ldr r0, [r2]
adds r4, r0, 0
adds r4, 0x34
- ldr r0, _082E56C8
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
movs r1, 0x1
lsls r1, r7
@@ -3212,7 +3137,7 @@ _082E5674:
strh r0, [r1]
mov r0, sp
adds r1, r4, 0
- ldr r2, _082E56CC
+ ldr r2, =0x0100001a
bl CpuSet
_082E5684:
lsls r0, r6, 16
@@ -3225,7 +3150,7 @@ _082E568C:
ands r0, r4
cmp r0, 0
beq _082E5702
- ldr r1, _082E56D0
+ ldr r1, =gUnknown_03007870
lsls r0, r7, 2
adds r0, r1
ldr r3, [r0]
@@ -3235,14 +3160,14 @@ _082E568C:
ands r0, r1
cmp r0, 0
beq _082E56F4
- ldr r0, _082E56D4
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
ldrb r1, [r0]
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _082E56D8
- ldr r2, _082E56C8
+ ldr r2, =gUnknown_03007890
ldr r1, [r2]
ldrb r0, [r1, 0xF]
adds r0, 0x3
@@ -3251,12 +3176,9 @@ _082E568C:
strb r0, [r1, 0xF]
b _082E56EA
.align 2, 0
-_082E56C8: .4byte gUnknown_03007890
-_082E56CC: .4byte 0x0100001a
-_082E56D0: .4byte gUnknown_03007870
-_082E56D4: .4byte gUnknown_03007894
+ .pool
_082E56D8:
- ldr r2, _082E573C
+ ldr r2, =gUnknown_03007890
ldr r1, [r2]
adds r1, 0x10
adds r1, r7
@@ -3275,7 +3197,7 @@ _082E56F4:
mov r0, sp
movs r1, 0
strh r1, [r0]
- ldr r2, _082E5740
+ ldr r2, =0x01000006
adds r1, r3, 0
bl CpuSet
_082E5702:
@@ -3287,16 +3209,16 @@ _082E5702:
mov r1, sp
movs r0, 0
strh r0, [r1]
- ldr r1, _082E5744
+ ldr r1, =gUnknown_03007870
lsls r0, r7, 2
adds r0, r1
ldr r1, [r0]
adds r1, 0xC
- ldr r2, _082E5748
+ ldr r2, =0x01000004
mov r0, sp
bl CpuSet
_082E5724:
- ldr r0, _082E574C
+ ldr r0, =0x04000208
mov r2, r10
strh r2, [r0]
movs r0, 0
@@ -3310,11 +3232,7 @@ _082E572C:
pop {r1}
bx r1
.align 2, 0
-_082E573C: .4byte gUnknown_03007890
-_082E5740: .4byte 0x01000006
-_082E5744: .4byte gUnknown_03007870
-_082E5748: .4byte 0x01000004
-_082E574C: .4byte 0x04000208
+ .pool
thumb_func_end rfu_clearSlot
thumb_func_start rfu_setRecvBuffer
@@ -3338,7 +3256,7 @@ _082E576C:
ands r0, r3
cmp r0, 0
beq _082E5788
- ldr r0, _082E5784
+ ldr r0, =gUnknown_03007880
lsls r1, 2
adds r1, r0
ldr r0, [r1]
@@ -3346,7 +3264,7 @@ _082E576C:
str r6, [r0, 0x6C]
b _082E57A2
.align 2, 0
-_082E5784: .4byte gUnknown_03007880
+ .pool
_082E5788:
movs r0, 0x10
ands r2, r0
@@ -3356,7 +3274,7 @@ _082E5788:
lsls r0, 3
b _082E57A4
_082E5796:
- ldr r0, _082E57AC
+ ldr r0, =gUnknown_03007870
lsls r1, r4, 2
adds r1, r0
ldr r0, [r1]
@@ -3369,7 +3287,7 @@ _082E57A4:
pop {r1}
bx r1
.align 2, 0
-_082E57AC: .4byte gUnknown_03007870
+ .pool
thumb_func_end rfu_setRecvBuffer
thumb_func_start rfu_NI_setSendData
@@ -3406,7 +3324,7 @@ rfu_UNI_setSendData: @ 82E57DC
lsrs r1, r0, 24
lsls r2, 24
lsrs r2, 24
- ldr r0, _082E57F8
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
@@ -3414,7 +3332,7 @@ rfu_UNI_setSendData: @ 82E57DC
adds r0, r2, 0x3
b _082E57FE
.align 2, 0
-_082E57F8: .4byte gUnknown_03007890
+ .pool
_082E57FC:
adds r0, r2, 0x2
_082E57FE:
@@ -3444,7 +3362,7 @@ rfu_NI_CHILD_setSendGameName: @ 82E5818
lsls r1, 17
lsls r1, r0
lsrs r1, 24
- ldr r0, _082E5848
+ ldr r0, =gUnknown_03007890
ldr r3, [r0]
adds r3, 0x98
movs r0, 0x1A
@@ -3457,7 +3375,7 @@ rfu_NI_CHILD_setSendGameName: @ 82E5818
pop {r1}
bx r1
.align 2, 0
-_082E5848: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_NI_CHILD_setSendGameName
thumb_func_start rfu_STC_setSendData_org
@@ -3476,17 +3394,16 @@ rfu_STC_setSendData_org: @ 82E584C
lsls r2, 24
lsrs r2, 24
mov r8, r2
- ldr r0, _082E5878
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r1, [r2]
mov r10, r0
cmp r1, 0xFF
bne _082E5880
- ldr r0, _082E587C
+ ldr r0, =0x00000301
b _082E5A36
.align 2, 0
-_082E5878: .4byte gUnknown_03007890
-_082E587C: .4byte 0x00000301
+ .pool
_082E5880:
movs r0, 0xF
ands r0, r3
@@ -3502,10 +3419,10 @@ _082E588E:
ands r0, r3
cmp r0, r3
beq _082E58A4
- ldr r0, _082E58A0
+ ldr r0, =0x00000401
b _082E5A36
.align 2, 0
-_082E58A0: .4byte 0x00000401
+ .pool
_082E58A4:
movs r0, 0x10
ands r0, r6
@@ -3519,15 +3436,15 @@ _082E58B2:
ands r0, r3
cmp r0, 0
beq _082E58C0
- ldr r0, _082E58BC
+ ldr r0, =0x00000402
b _082E5A36
.align 2, 0
-_082E58BC: .4byte 0x00000402
+ .pool
_082E58C0:
movs r2, 0
movs r0, 0x1
ands r0, r3
- ldr r4, _082E58F0
+ ldr r4, =gUnknown_089A3220
cmp r0, 0
bne _082E58E2
movs r1, 0x1
@@ -3551,7 +3468,7 @@ _082E58E2:
adds r1, 0xF
b _082E58FE
.align 2, 0
-_082E58F0: .4byte gUnknown_089A3220
+ .pool
_082E58F4:
cmp r0, 0
bne _082E5900
@@ -3578,7 +3495,7 @@ _082E5918:
lsls r0, 3
b _082E5A36
_082E591E:
- ldr r1, _082E596C
+ ldr r1, =0x04000208
ldrh r0, [r1]
str r0, [sp, 0x4]
movs r7, 0
@@ -3592,7 +3509,7 @@ _082E591E:
cmp r6, 0x40
bne _082E59F4
_082E5938:
- ldr r1, _082E5970
+ ldr r1, =gUnknown_03007880
lsls r0, r2, 2
adds r0, r1
ldr r0, [r0]
@@ -3618,8 +3535,7 @@ _082E5938:
strb r7, [r1]
b _082E5978
.align 2, 0
-_082E596C: .4byte 0x04000208
-_082E5970: .4byte gUnknown_03007880
+ .pool
_082E5974:
movs r0, 0x1
strb r0, [r1]
@@ -3652,7 +3568,7 @@ _082E5998:
bls _082E5998
movs r2, 0
movs r5, 0x1
- ldr r4, _082E59EC
+ ldr r4, =gUnknown_03007880
movs r1, 0
_082E59B2:
adds r0, r3, 0
@@ -3681,19 +3597,18 @@ _082E59C4:
mov r1, r8
subs r0, r1
strb r0, [r2]
- ldr r0, _082E59F0
+ ldr r0, =0x00008021
mov r2, r12
strh r0, [r2]
b _082E5A2C
.align 2, 0
-_082E59EC: .4byte gUnknown_03007880
-_082E59F0: .4byte 0x00008021
+ .pool
_082E59F4:
movs r0, 0x10
ands r0, r6
cmp r0, 0
beq _082E5A2C
- ldr r1, _082E5A48
+ ldr r1, =gUnknown_03007870
lsls r0, r2, 2
adds r0, r1
ldr r1, [r0]
@@ -3709,7 +3624,7 @@ _082E59F4:
subs r0, r2
mov r2, r9
strb r0, [r2]
- ldr r0, _082E5A4C
+ ldr r0, =0x00008024
strh r0, [r1]
mov r0, r10
ldr r2, [r0]
@@ -3718,7 +3633,7 @@ _082E59F4:
orrs r0, r1
strb r0, [r2, 0x6]
_082E5A2C:
- ldr r0, _082E5A50
+ ldr r0, =0x04000208
mov r1, sp
ldrh r1, [r1, 0x4]
strh r1, [r0]
@@ -3733,9 +3648,7 @@ _082E5A36:
pop {r1}
bx r1
.align 2, 0
-_082E5A48: .4byte gUnknown_03007870
-_082E5A4C: .4byte 0x00008024
-_082E5A50: .4byte 0x04000208
+ .pool
thumb_func_end rfu_STC_setSendData_org
thumb_func_start rfu_changeSendTarget
@@ -3761,13 +3674,13 @@ rfu_changeSendTarget: @ 82E5A54
_082E5A78:
cmp r0, 0x20
bne _082E5B18
- ldr r0, _082E5B08
+ ldr r0, =gUnknown_03007880
mov r12, r0
lsls r0, r7, 2
add r0, r12
ldr r5, [r0]
ldrh r2, [r5]
- ldr r1, _082E5B0C
+ ldr r1, =0x00008020
adds r0, r1, 0
ands r0, r2
cmp r0, r1
@@ -3783,7 +3696,7 @@ _082E5A78:
bne _082E5AA6
b _082E5BAA
_082E5AA6:
- ldr r1, _082E5B10
+ ldr r1, =0x04000208
ldrh r0, [r1]
mov r8, r0
strh r2, [r1]
@@ -3812,7 +3725,7 @@ _082E5AD2:
lsrs r2, r0, 24
cmp r2, 0x3
bls _082E5ABE
- ldr r0, _082E5B14
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
ldrb r0, [r1, 0x4]
ldr r2, [sp]
@@ -3829,34 +3742,29 @@ _082E5AD2:
movs r0, 0x27
strh r0, [r5]
_082E5AFE:
- ldr r0, _082E5B10
+ ldr r0, =0x04000208
mov r1, r8
strh r1, [r0]
b _082E5BAA
.align 2, 0
-_082E5B08: .4byte gUnknown_03007880
-_082E5B0C: .4byte 0x00008020
-_082E5B10: .4byte 0x04000208
-_082E5B14: .4byte gUnknown_03007890
+ .pool
_082E5B18:
cmp r3, 0x10
bne _082E5BA4
- ldr r3, _082E5B34
+ ldr r3, =gUnknown_03007870
lsls r1, r7, 2
adds r0, r1, r3
ldr r0, [r0]
ldrh r2, [r0]
- ldr r0, _082E5B38
+ ldr r0, =0x00008024
adds r5, r3, 0
cmp r2, r0
beq _082E5B40
_082E5B2E:
- ldr r0, _082E5B3C
+ ldr r0, =0x00000403
b _082E5BAC
.align 2, 0
-_082E5B34: .4byte gUnknown_03007870
-_082E5B38: .4byte 0x00008024
-_082E5B3C: .4byte 0x00000403
+ .pool
_082E5B40:
movs r3, 0
movs r2, 0
@@ -3880,16 +3788,16 @@ _082E5B54:
cmp r2, 0
beq _082E5B70
_082E5B66:
- ldr r0, _082E5B6C
+ ldr r0, =0x00000404
b _082E5BAC
.align 2, 0
-_082E5B6C: .4byte 0x00000404
+ .pool
_082E5B70:
- ldr r3, _082E5B9C
+ ldr r3, =0x04000208
ldrh r0, [r3]
mov r8, r0
strh r2, [r3]
- ldr r4, _082E5BA0
+ ldr r4, =gUnknown_03007890
ldr r2, [r4]
adds r5, r1, r5
ldr r0, [r5]
@@ -3908,8 +3816,7 @@ _082E5B70:
strh r2, [r3]
b _082E5BAA
.align 2, 0
-_082E5B9C: .4byte 0x04000208
-_082E5BA0: .4byte gUnknown_03007890
+ .pool
_082E5BA4:
movs r0, 0xC0
lsls r0, 3
@@ -3938,13 +3845,13 @@ rfu_NI_stopReceivingData: @ 82E5BBC
lsls r0, 3
b _082E5C26
_082E5BCC:
- ldr r1, _082E5BF8
+ ldr r1, =gUnknown_03007880
lsls r0, r3, 2
adds r0, r1
ldr r2, [r0]
adds r5, r2, 0
adds r5, 0x34
- ldr r1, _082E5BFC
+ ldr r1, =0x04000208
ldrh r0, [r1]
adds r4, r0, 0
movs r0, 0
@@ -3955,20 +3862,18 @@ _082E5BCC:
ands r0, r1
cmp r0, 0
beq _082E5C20
- ldr r0, _082E5C00
+ ldr r0, =0x00008043
cmp r1, r0
bne _082E5C04
movs r0, 0x48
b _082E5C06
.align 2, 0
-_082E5BF8: .4byte gUnknown_03007880
-_082E5BFC: .4byte 0x04000208
-_082E5C00: .4byte 0x00008043
+ .pool
_082E5C04:
movs r0, 0x47
_082E5C06:
strh r0, [r2, 0x34]
- ldr r0, _082E5C2C
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
movs r1, 0x1
lsls r1, r3
@@ -3980,7 +3885,7 @@ _082E5C06:
adds r2, r5, 0
bl rfu_STC_releaseFrame
_082E5C20:
- ldr r0, _082E5C30
+ ldr r0, =0x04000208
strh r4, [r0]
movs r0, 0
_082E5C26:
@@ -3988,8 +3893,7 @@ _082E5C26:
pop {r1}
bx r1
.align 2, 0
-_082E5C2C: .4byte gUnknown_03007890
-_082E5C30: .4byte 0x04000208
+ .pool
thumb_func_end rfu_NI_stopReceivingData
thumb_func_start rfu_UNI_changeAndReadySendData
@@ -4007,22 +3911,20 @@ rfu_UNI_changeAndReadySendData: @ 82E5C34
lsls r0, 3
b _082E5CC0
_082E5C4C:
- ldr r1, _082E5C60
+ ldr r1, =gUnknown_03007870
lsls r0, 2
adds r0, r1
ldr r4, [r0]
ldrh r1, [r4]
- ldr r0, _082E5C64
+ ldr r0, =0x00008024
cmp r1, r0
beq _082E5C6C
- ldr r0, _082E5C68
+ ldr r0, =0x00000403
b _082E5CC0
.align 2, 0
-_082E5C60: .4byte gUnknown_03007870
-_082E5C64: .4byte 0x00008024
-_082E5C68: .4byte 0x00000403
+ .pool
_082E5C6C:
- ldr r0, _082E5C80
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
ldrb r0, [r1]
cmp r0, 0x1
@@ -4033,7 +3935,7 @@ _082E5C6C:
ldrb r1, [r1, 0xF]
b _082E5C92
.align 2, 0
-_082E5C80: .4byte gUnknown_03007890
+ .pool
_082E5C84:
adds r0, r3, 0
adds r0, 0x10
@@ -4048,7 +3950,7 @@ _082E5C92:
lsrs r3, r0, 24
cmp r3, r5
bcc _082E5CBC
- ldr r2, _082E5CB8
+ ldr r2, =0x04000208
ldrh r1, [r2]
movs r0, 0
strh r0, [r2]
@@ -4062,7 +3964,7 @@ _082E5C92:
movs r0, 0
b _082E5CC0
.align 2, 0
-_082E5CB8: .4byte 0x04000208
+ .pool
_082E5CBC:
movs r0, 0xA0
lsls r0, 3
@@ -4079,12 +3981,12 @@ rfu_UNI_readySendData: @ 82E5CC8
lsrs r0, 24
cmp r0, 0x3
bhi _082E5CE6
- ldr r1, _082E5CEC
+ ldr r1, =gUnknown_03007870
lsls r0, 2
adds r0, r1
ldr r2, [r0]
ldrh r1, [r2]
- ldr r0, _082E5CF0
+ ldr r0, =0x00008024
cmp r1, r0
bne _082E5CE6
movs r0, 0x1
@@ -4093,8 +3995,7 @@ _082E5CE6:
pop {r0}
bx r0
.align 2, 0
-_082E5CEC: .4byte gUnknown_03007870
-_082E5CF0: .4byte 0x00008024
+ .pool
thumb_func_end rfu_UNI_readySendData
thumb_func_start rfu_UNI_clearRecvNewDataFlag
@@ -4104,7 +4005,7 @@ rfu_UNI_clearRecvNewDataFlag: @ 82E5CF4
lsrs r0, 24
cmp r0, 0x3
bhi _082E5D0A
- ldr r1, _082E5D10
+ ldr r1, =gUnknown_03007870
lsls r0, 2
adds r0, r1
ldr r1, [r0]
@@ -4114,7 +4015,7 @@ _082E5D0A:
pop {r0}
bx r0
.align 2, 0
-_082E5D10: .4byte gUnknown_03007870
+ .pool
thumb_func_end rfu_UNI_clearRecvNewDataFlag
thumb_func_start rfu_REQ_sendData
@@ -4122,7 +4023,7 @@ rfu_REQ_sendData: @ 82E5D14
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
- ldr r0, _082E5D60
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r1, [r2]
adds r4, r0, 0
@@ -4140,7 +4041,7 @@ _082E5D28:
orrs r3, r0
cmp r3, 0
bne _082E5DB8
- ldr r0, _082E5D64
+ ldr r0, =gUnknown_03007894
ldr r2, [r0]
ldrb r1, [r2, 0x3]
adds r4, r0, 0
@@ -4159,8 +4060,7 @@ _082E5D50:
strb r0, [r1, 0x8]
b _082E5D6E
.align 2, 0
-_082E5D60: .4byte gUnknown_03007890
-_082E5D64: .4byte gUnknown_03007894
+ .pool
_082E5D68:
ldrb r0, [r1, 0x7]
adds r0, 0x1
@@ -4176,13 +4076,13 @@ _082E5D6E:
cmp r0, 0
bne _082E5E12
_082E5D80:
- ldr r4, _082E5DA4
+ ldr r4, =gUnknown_03007898
ldr r1, [r4]
movs r0, 0x1
str r0, [r1, 0x68]
movs r0, 0xFF
str r0, [r1, 0x78]
- ldr r0, _082E5DA8
+ ldr r0, =sub_82E5F00
bl STWI_set_Callback_M
cmp r5, 0
bne _082E5DAC
@@ -4192,8 +4092,7 @@ _082E5D80:
bl STWI_send_DataTxREQ
b _082E5E4E
.align 2, 0
-_082E5DA4: .4byte gUnknown_03007898
-_082E5DA8: .4byte sub_82E5F00
+ .pool
_082E5DAC:
ldr r0, [r4]
adds r0, 0x68
@@ -4211,14 +4110,14 @@ _082E5DC4:
ldrb r0, [r0, 0xE]
cmp r0, 0
beq _082E5E12
- ldr r0, _082E5DF0
+ ldr r0, =rfu_CB_sendData
bl STWI_set_Callback_M
cmp r5, 0
beq _082E5DFC
- ldr r0, _082E5DF4
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0x68
- ldr r1, _082E5DF8
+ ldr r1, =gUnknown_03007894
ldr r1, [r1]
ldr r1, [r1, 0x24]
adds r1, 0x4
@@ -4227,14 +4126,12 @@ _082E5DC4:
bl STWI_send_DataTxAndChangeREQ
b _082E5E4E
.align 2, 0
-_082E5DF0: .4byte rfu_CB_sendData
-_082E5DF4: .4byte gUnknown_03007898
-_082E5DF8: .4byte gUnknown_03007894
+ .pool
_082E5DFC:
- ldr r0, _082E5E34
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0x68
- ldr r1, _082E5E38
+ ldr r1, =gUnknown_03007894
ldr r1, [r1]
ldr r1, [r1, 0x24]
adds r1, 0x4
@@ -4244,12 +4141,12 @@ _082E5DFC:
_082E5E12:
cmp r5, 0
beq _082E5E4E
- ldr r0, _082E5E3C
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
bne _082E5E44
- ldr r0, _082E5E40
+ ldr r0, =gRfuState
ldr r0, [r0]
ldr r1, [r0, 0x1C]
cmp r1, 0
@@ -4258,12 +4155,9 @@ _082E5E12:
bl _call_via_r1
b _082E5E4E
.align 2, 0
-_082E5E34: .4byte gUnknown_03007898
-_082E5E38: .4byte gUnknown_03007894
-_082E5E3C: .4byte gUnknown_03007890
-_082E5E40: .4byte gRfuState
+ .pool
_082E5E44:
- ldr r0, _082E5E54
+ ldr r0, =rfu_CB_sendData2
bl STWI_set_Callback_M
bl STWI_send_MS_ChangeREQ
_082E5E4E:
@@ -4271,7 +4165,7 @@ _082E5E4E:
pop {r0}
bx r0
.align 2, 0
-_082E5E54: .4byte rfu_CB_sendData2
+ .pool
thumb_func_end rfu_REQ_sendData
thumb_func_start rfu_CB_sendData
@@ -4284,10 +4178,10 @@ rfu_CB_sendData: @ 82E5E58
cmp r7, 0
bne _082E5EC2
movs r6, 0
- ldr r0, _082E5EE0
+ ldr r0, =0x00008020
mov r8, r0
_082E5E6C:
- ldr r0, _082E5EE4
+ ldr r0, =gUnknown_03007870
lsls r2, r6, 2
adds r0, r2, r0
ldr r1, [r0]
@@ -4297,7 +4191,7 @@ _082E5E6C:
movs r0, 0
strb r0, [r1, 0x2]
_082E5E7E:
- ldr r0, _082E5EE8
+ ldr r0, =gUnknown_03007880
adds r0, r2, r0
ldr r4, [r0]
ldrh r0, [r4]
@@ -4307,7 +4201,7 @@ _082E5E7E:
movs r1, 0
adds r2, r4, 0
bl rfu_STC_releaseFrame
- ldr r5, _082E5EEC
+ ldr r5, =gUnknown_03007890
ldr r2, [r5]
ldrb r1, [r4, 0x1A]
ldrb r0, [r2, 0x4]
@@ -4333,7 +4227,7 @@ _082E5EB8:
cmp r6, 0x3
bls _082E5E6C
_082E5EC2:
- ldr r0, _082E5EEC
+ ldr r0, =gUnknown_03007890
ldr r1, [r0]
ldrb r0, [r1, 0xE]
movs r0, 0
@@ -4347,10 +4241,7 @@ _082E5EC2:
pop {r0}
bx r0
.align 2, 0
-_082E5EE0: .4byte 0x00008020
-_082E5EE4: .4byte gUnknown_03007870
-_082E5EE8: .4byte gUnknown_03007880
-_082E5EEC: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_CB_sendData
thumb_func_start rfu_CB_sendData2
@@ -4395,7 +4286,7 @@ rfu_constructSendLLFrame: @ 82E5F28
mov r5, r8
push {r5-r7}
sub sp, 0x4
- ldr r0, _082E5FD4
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r0, [r2]
cmp r0, 0xFF
@@ -4413,7 +4304,7 @@ _082E5F40:
movs r0, 0
strb r0, [r2, 0xE]
mov r8, r0
- ldr r0, _082E5FD8
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0x6C
str r0, [sp]
@@ -4421,11 +4312,11 @@ _082E5F40:
movs r0, 0x80
lsls r0, 8
mov r9, r0
- ldr r1, _082E5FDC
+ ldr r1, =0x00008024
mov r10, r1
_082E5F6A:
movs r5, 0
- ldr r0, _082E5FE0
+ ldr r0, =gUnknown_03007880
lsls r7, r6, 2
adds r4, r7, r0
ldr r2, [r4]
@@ -4454,7 +4345,7 @@ _082E5F8A:
lsrs r0, 16
adds r5, r0
_082E5FA6:
- ldr r0, _082E5FE4
+ ldr r0, =gUnknown_03007870
adds r0, r7, r0
ldr r0, [r0]
ldrh r0, [r0]
@@ -4469,7 +4360,7 @@ _082E5FA6:
_082E5FC0:
cmp r5, 0
beq _082E5FF4
- ldr r0, _082E5FD4
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
@@ -4477,11 +4368,7 @@ _082E5FC0:
add r8, r5
b _082E5FF4
.align 2, 0
-_082E5FD4: .4byte gUnknown_03007890
-_082E5FD8: .4byte gUnknown_03007898
-_082E5FDC: .4byte 0x00008024
-_082E5FE0: .4byte gUnknown_03007880
-_082E5FE4: .4byte gUnknown_03007870
+ .pool
_082E5FE8:
adds r0, r7, r6
adds r0, 0x8
@@ -4495,15 +4382,15 @@ _082E5FF4:
lsrs r6, r0, 24
cmp r6, 0x3
bls _082E5F6A
- ldr r6, _082E6054
+ ldr r6, =gUnknown_03007894
mov r0, r8
cmp r0, 0
beq _082E603E
ldr r2, [sp]
movs r0, 0x3
ands r0, r2
- ldr r5, _082E6058
- ldr r1, _082E605C
+ ldr r5, =gUnknown_03007890
+ ldr r1, =gUnknown_03007898
cmp r0, 0
beq _082E6026
movs r4, 0
@@ -4543,9 +4430,7 @@ _082E6044:
pop {r0}
bx r0
.align 2, 0
-_082E6054: .4byte gUnknown_03007894
-_082E6058: .4byte gUnknown_03007890
-_082E605C: .4byte gUnknown_03007898
+ .pool
thumb_func_end rfu_constructSendLLFrame
thumb_func_start rfu_STC_NI_constructLLSF
@@ -4561,15 +4446,15 @@ rfu_STC_NI_constructLLSF: @ 82E6060
lsls r0, 24
lsrs r0, 24
mov r10, r0
- ldr r2, _082E60DC
+ ldr r2, =gUnknown_03007890
ldr r0, [r2]
ldrb r0, [r0]
lsls r0, 4
- ldr r1, _082E60E0
+ ldr r1, =gUnknown_089A3220
adds r0, r1
mov r8, r0
ldrh r1, [r4]
- ldr r0, _082E60E4
+ ldr r0, =0x00008022
cmp r1, r0
bne _082E60CA
adds r3, r4, 0
@@ -4615,11 +4500,9 @@ _082E60CA:
movs r5, 0
b _082E612C
.align 2, 0
-_082E60DC: .4byte gUnknown_03007890
-_082E60E0: .4byte gUnknown_089A3220
-_082E60E4: .4byte 0x00008022
+ .pool
_082E60E8:
- ldr r0, _082E6114
+ ldr r0, =0x00008022
cmp r9, r0
bne _082E611C
adds r3, r4, 0
@@ -4642,7 +4525,7 @@ _082E60E8:
lsrs r5, r0, 16
b _082E6130
.align 2, 0
-_082E6114: .4byte 0x00008022
+ .pool
_082E6118:
adds r5, r7, 0
b _082E6130
@@ -4687,7 +4570,7 @@ _082E6130:
orrs r3, r0
orrs r3, r5
str r3, [sp]
- ldr r2, _082E61EC
+ ldr r2, =gUnknown_03007890
ldr r0, [r2]
ldrb r0, [r0]
cmp r0, 0x1
@@ -4728,7 +4611,7 @@ _082E61A2:
adds r0, r1
ldr r0, [r0]
str r0, [sp, 0x4]
- ldr r0, _082E61F0
+ ldr r0, =gUnknown_03007898
ldr r1, [r0]
add r0, sp, 0x4
ldr r3, [r1, 0x4]
@@ -4737,7 +4620,7 @@ _082E61A2:
bl _call_via_r3
_082E61C2:
ldrh r1, [r4]
- ldr r0, _082E61F4
+ ldr r0, =0x00008022
cmp r1, r0
bne _082E61DC
ldrb r0, [r6]
@@ -4750,7 +4633,7 @@ _082E61C2:
movs r0, 0
strb r0, [r6]
_082E61DC:
- ldr r0, _082E61EC
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r1, [r2]
cmp r1, 0x1
@@ -4759,9 +4642,7 @@ _082E61DC:
strb r1, [r2, 0xE]
b _082E6206
.align 2, 0
-_082E61EC: .4byte gUnknown_03007890
-_082E61F0: .4byte gUnknown_03007898
-_082E61F4: .4byte 0x00008022
+ .pool
_082E61F8:
movs r0, 0x1
mov r1, r10
@@ -4796,7 +4677,7 @@ rfu_STC_UNI_constructLLSF: @ 82E6220
lsls r0, 24
lsrs r0, 24
mov r8, r0
- ldr r1, _082E6248
+ ldr r1, =gUnknown_03007870
lsls r0, 2
adds r0, r1
ldr r4, [r0]
@@ -4810,13 +4691,13 @@ _082E6244:
movs r0, 0
b _082E62E8
.align 2, 0
-_082E6248: .4byte gUnknown_03007870
+ .pool
_082E624C:
- ldr r0, _082E62C4
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r0, [r2]
lsls r0, 4
- ldr r1, _082E62C8
+ ldr r1, =gUnknown_089A3220
adds r5, r0, r1
ldrh r0, [r4]
movs r1, 0xF
@@ -4836,7 +4717,7 @@ _082E624C:
_082E6276:
mov r2, sp
movs r3, 0
- ldr r1, _082E62CC
+ ldr r1, =gUnknown_03007898
mov r12, r1
add r7, sp, 0x4
ldrb r0, [r5]
@@ -4865,7 +4746,7 @@ _082E629E:
adds r0, r7, 0
adds r1, r6, 0
bl _call_via_r3
- ldr r0, _082E62C4
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r0, [r2]
cmp r0, 0x1
@@ -4874,9 +4755,7 @@ _082E629E:
movs r0, 0x10
b _082E62DC
.align 2, 0
-_082E62C4: .4byte gUnknown_03007890
-_082E62C8: .4byte gUnknown_089A3220
-_082E62CC: .4byte gUnknown_03007898
+ .pool
_082E62D0:
movs r0, 0x10
mov r1, r8
@@ -4903,12 +4782,12 @@ _082E62E8:
thumb_func_start rfu_REQ_recvData
rfu_REQ_recvData: @ 82E62F4
push {r4,lr}
- ldr r0, _082E6328
+ ldr r0, =gUnknown_03007890
ldr r4, [r0]
ldrb r0, [r4]
cmp r0, 0xFF
beq _082E6320
- ldr r2, _082E632C
+ ldr r2, =gUnknown_03007894
ldr r3, [r2]
ldrb r0, [r4, 0x4]
ldrb r1, [r4, 0x5]
@@ -4919,7 +4798,7 @@ rfu_REQ_recvData: @ 82E62F4
strb r0, [r3, 0x3]
ldr r0, [r2]
strb r1, [r0, 0x4]
- ldr r0, _082E6330
+ ldr r0, =rfu_CB_recvData
bl STWI_set_Callback_M
bl STWI_send_DataRxREQ
_082E6320:
@@ -4927,9 +4806,7 @@ _082E6320:
pop {r0}
bx r0
.align 2, 0
-_082E6328: .4byte gUnknown_03007890
-_082E632C: .4byte gUnknown_03007894
-_082E6330: .4byte rfu_CB_recvData
+ .pool
thumb_func_end rfu_REQ_recvData
thumb_func_start rfu_CB_recvData
@@ -4946,17 +4823,17 @@ rfu_CB_recvData: @ 82E6334
lsrs r7, r1, 16
cmp r7, 0
bne _082E63F8
- ldr r0, _082E6370
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r0, [r0]
ldrb r0, [r0, 0x1]
cmp r0, 0
beq _082E63F8
- ldr r0, _082E6374
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
strb r7, [r0, 0x1]
- ldr r0, _082E6378
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
@@ -4964,25 +4841,23 @@ rfu_CB_recvData: @ 82E6334
bl rfu_STC_PARENT_analyzeRecvPacket
b _082E6380
.align 2, 0
-_082E6370: .4byte gUnknown_03007898
-_082E6374: .4byte gUnknown_03007894
-_082E6378: .4byte gUnknown_03007890
+ .pool
_082E637C:
bl rfu_STC_CHILD_analyzeRecvPacket
_082E6380:
movs r6, 0
- ldr r0, _082E6410
+ ldr r0, =0x00008043
mov r8, r0
- ldr r3, _082E6414
+ ldr r3, =gUnknown_03007890
_082E6388:
- ldr r0, _082E6418
+ ldr r0, =gUnknown_03007880
lsls r1, r6, 2
adds r1, r0
ldr r4, [r1]
ldrh r0, [r4, 0x34]
cmp r0, r8
bne _082E63DA
- ldr r0, _082E641C
+ ldr r0, =gUnknown_03007894
ldr r0, [r0]
ldrb r0, [r0, 0x1]
asrs r0, r6
@@ -5022,7 +4897,7 @@ _082E63DA:
lsrs r6, r0, 24
cmp r6, 0x3
bls _082E6388
- ldr r0, _082E641C
+ ldr r0, =gUnknown_03007894
ldr r1, [r0]
ldrb r0, [r1, 0x4]
cmp r0, 0
@@ -5044,17 +4919,14 @@ _082E63F8:
pop {r0}
bx r0
.align 2, 0
-_082E6410: .4byte 0x00008043
-_082E6414: .4byte gUnknown_03007890
-_082E6418: .4byte gUnknown_03007880
-_082E641C: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_CB_recvData
thumb_func_start rfu_STC_PARENT_analyzeRecvPacket
rfu_STC_PARENT_analyzeRecvPacket: @ 82E6420
push {r4-r7,lr}
sub sp, 0x4
- ldr r1, _082E64B0
+ ldr r1, =gUnknown_03007898
ldr r0, [r1]
adds r0, 0xDC
ldr r0, [r0]
@@ -5063,7 +4935,7 @@ rfu_STC_PARENT_analyzeRecvPacket: @ 82E6420
movs r5, 0
mov r12, r1
movs r7, 0x1F
- ldr r4, _082E64B4
+ ldr r4, =gUnknown_03007894
movs r6, 0x1
_082E643A:
mov r0, sp
@@ -5129,14 +5001,13 @@ _082E64A0:
pop {r0}
bx r0
.align 2, 0
-_082E64B0: .4byte gUnknown_03007898
-_082E64B4: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_STC_PARENT_analyzeRecvPacket
thumb_func_start rfu_STC_CHILD_analyzeRecvPacket
rfu_STC_CHILD_analyzeRecvPacket: @ 82E64B8
push {r4-r6,lr}
- ldr r0, _082E6508
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
adds r0, 0xDC
ldr r1, [r0]
@@ -5147,7 +5018,7 @@ rfu_STC_CHILD_analyzeRecvPacket: @ 82E64B8
adds r5, 0x8
cmp r4, 0
bne _082E64D8
- ldr r0, _082E650C
+ ldr r0, =gUnknown_03007894
ldr r1, [r0]
movs r0, 0xF
strb r0, [r1, 0x1]
@@ -5177,8 +5048,7 @@ _082E6500:
pop {r0}
bx r0
.align 2, 0
-_082E6508: .4byte gUnknown_03007898
-_082E650C: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_STC_CHILD_analyzeRecvPacket
thumb_func_start rfu_STC_analyzeLLSF
@@ -5195,14 +5065,14 @@ rfu_STC_analyzeLLSF: @ 82E6510
mov r12, r0
lsls r2, 16
lsrs r3, r2, 16
- ldr r2, _082E6544
+ ldr r2, =gUnknown_03007890
ldr r0, [r2]
ldrb r0, [r0]
mvns r0, r0
movs r1, 0x1
ands r0, r1
lsls r0, 4
- ldr r1, _082E6548
+ ldr r1, =gUnknown_089A3220
adds r6, r0, r1
ldrb r0, [r6]
cmp r3, r0
@@ -5210,8 +5080,7 @@ rfu_STC_analyzeLLSF: @ 82E6510
adds r0, r3, 0
b _082E673E
.align 2, 0
-_082E6544: .4byte gUnknown_03007890
-_082E6548: .4byte gUnknown_089A3220
+ .pool
_082E654C:
movs r5, 0
movs r4, 0
@@ -5239,7 +5108,7 @@ _082E6574:
lsrs r0, r3
mov r3, r8
ands r0, r3
- ldr r1, _082E664C
+ ldr r1, =0xffffff00
mov r10, r1
mov r3, r10
mov r2, r9
@@ -5252,7 +5121,7 @@ _082E6574:
ldrb r1, [r6, 0x8]
ands r0, r1
lsls r0, 8
- ldr r4, _082E6650
+ ldr r4, =0xffff00ff
adds r2, r4, 0
ands r2, r3
orrs r2, r0
@@ -5263,7 +5132,7 @@ _082E6574:
ldrb r1, [r6, 0x9]
ands r0, r1
lsls r0, 16
- ldr r3, _082E6654
+ ldr r3, =0xff00ffff
ands r3, r2
orrs r3, r0
str r3, [sp]
@@ -5273,7 +5142,7 @@ _082E6574:
ldrb r1, [r6, 0xA]
ands r0, r1
lsls r0, 24
- ldr r2, _082E6658
+ ldr r2, =0x00ffffff
mov r8, r2
mov r1, r8
ands r1, r3
@@ -5303,7 +5172,7 @@ _082E6574:
ldrh r0, [r6, 0xE]
ands r5, r0
lsls r1, r5, 16
- ldr r0, _082E665C
+ ldr r0, =0x0000ffff
ands r0, r4
orrs r0, r1
str r0, [sp, 0x4]
@@ -5319,7 +5188,7 @@ _082E6574:
beq _082E661A
b _082E673C
_082E661A:
- ldr r2, _082E6660
+ ldr r2, =gUnknown_03007890
ldr r3, [r2]
ldrb r2, [r3]
cmp r2, 0x1
@@ -5344,12 +5213,7 @@ _082E6632:
bl rfu_STC_UNI_receive
b _082E673C
.align 2, 0
-_082E664C: .4byte 0xffffff00
-_082E6650: .4byte 0xffff00ff
-_082E6654: .4byte 0xff00ffff
-_082E6658: .4byte 0x00ffffff
-_082E665C: .4byte 0x0000ffff
-_082E6660: .4byte gUnknown_03007890
+ .pool
_082E6664:
mov r5, r9
ldrb r0, [r5, 0x3]
@@ -5362,7 +5226,7 @@ _082E6664:
b _082E673C
_082E6678:
movs r4, 0
- ldr r1, _082E6690
+ ldr r1, =gUnknown_03007880
ldr r0, [r1]
ldrb r0, [r0, 0x1A]
mov r5, r12
@@ -5373,7 +5237,7 @@ _082E6678:
ldrb r0, [r3, 0x4]
b _082E66BA
.align 2, 0
-_082E6690: .4byte gUnknown_03007880
+ .pool
_082E6694:
adds r0, r4, 0x1
lsls r0, 24
@@ -5390,7 +5254,7 @@ _082E6694:
ands r0, r2
cmp r0, 0
beq _082E6694
- ldr r3, _082E66D4
+ ldr r3, =gUnknown_03007890
ldr r0, [r3]
ldrb r0, [r0, 0x4]
mov r5, r12
@@ -5408,7 +5272,7 @@ _082E66BA:
bl rfu_STC_NI_receive_Sender
b _082E673C
.align 2, 0
-_082E66D4: .4byte gUnknown_03007890
+ .pool
_082E66D8:
ldrb r1, [r3, 0x2]
mov r2, r9
@@ -5443,7 +5307,7 @@ _082E6706:
bl rfu_STC_NI_receive_Receiver
b _082E6732
_082E6718:
- ldr r0, _082E6750
+ ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0, 0x4]
asrs r0, r4
@@ -5473,7 +5337,7 @@ _082E673E:
pop {r1}
bx r1
.align 2, 0
-_082E6750: .4byte gUnknown_03007890
+ .pool
thumb_func_end rfu_STC_analyzeLLSF
thumb_func_start rfu_STC_UNI_receive
@@ -5484,7 +5348,7 @@ rfu_STC_UNI_receive: @ 82E6754
str r2, [sp]
lsls r0, 24
lsrs r7, r0, 24
- ldr r2, _082E6788
+ ldr r2, =gUnknown_03007870
lsls r1, r7, 2
adds r1, r2
ldr r3, [r1]
@@ -5501,12 +5365,11 @@ rfu_STC_UNI_receive: @ 82E6754
bcs _082E6790
movs r0, 0x49
strh r0, [r3, 0xC]
- ldr r0, _082E678C
+ ldr r0, =0x00000701
strh r0, [r5, 0x2]
b _082E67DE
.align 2, 0
-_082E6788: .4byte gUnknown_03007870
-_082E678C: .4byte 0x00000701
+ .pool
_082E6790:
ldrb r0, [r5, 0x7]
cmp r0, 0
@@ -5514,11 +5377,11 @@ _082E6790:
ldrb r0, [r5, 0x6]
cmp r0, 0
beq _082E67B4
- ldr r0, _082E67A4
+ ldr r0, =0x00000709
strh r0, [r5, 0x2]
b _082E67DE
.align 2, 0
-_082E67A4: .4byte 0x00000709
+ .pool
_082E67A8:
ldrb r0, [r5, 0x6]
cmp r0, 0
@@ -5528,7 +5391,7 @@ _082E67A8:
strh r0, [r5, 0x2]
_082E67B4:
movs r4, 0
- ldr r0, _082E67FC
+ ldr r0, =0x00008042
strh r0, [r5]
ldrh r0, [r6, 0x6]
strh r0, [r5, 0x4]
@@ -5538,7 +5401,7 @@ _082E67B4:
ldr r0, [r0]
ldr r0, [r0, 0x14]
str r0, [sp, 0x4]
- ldr r0, _082E6800
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
add r1, sp, 0x4
ldr r3, [r0, 0x4]
@@ -5551,7 +5414,7 @@ _082E67DE:
ldrh r0, [r5, 0x2]
cmp r0, 0
beq _082E67F2
- ldr r0, _082E6804
+ ldr r0, =gUnknown_03007894
ldr r2, [r0]
movs r0, 0x10
lsls r0, r7
@@ -5564,9 +5427,7 @@ _082E67F2:
pop {r0}
bx r0
.align 2, 0
-_082E67FC: .4byte 0x00008042
-_082E6800: .4byte gUnknown_03007898
-_082E6804: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_STC_UNI_receive
thumb_func_start rfu_STC_NI_receive_Sender
@@ -5582,7 +5443,7 @@ rfu_STC_NI_receive_Sender: @ 82E6808
lsls r1, 24
lsrs r1, 24
mov r10, r1
- ldr r1, _082E68D4
+ ldr r1, =gUnknown_03007880
lsrs r0, 22
adds r0, r1
ldr r0, [r0]
@@ -5598,13 +5459,13 @@ rfu_STC_NI_receive_Sender: @ 82E6808
ldrb r2, [r6, 0x2]
cmp r2, 0x2
bne _082E6844
- ldr r0, _082E68D8
+ ldr r0, =0x00008022
cmp r9, r0
beq _082E685E
_082E6844:
cmp r2, 0x1
bne _082E684E
- ldr r0, _082E68DC
+ ldr r0, =0x00008021
cmp r9, r0
beq _082E685E
_082E684E:
@@ -5613,7 +5474,7 @@ _082E684E:
mov r8, r3
cmp r2, 0x3
bne _082E6882
- ldr r0, _082E68E0
+ ldr r0, =0x00008023
cmp r9, r0
bne _082E6882
_082E685E:
@@ -5658,14 +5519,14 @@ _082E6882:
strb r1, [r0]
mov r7, r12
ldrh r1, [r7]
- ldr r2, _082E68E4
+ ldr r2, =0x00007fdf
adds r0, r1, r2
lsls r0, 16
lsrs r0, 16
adds r5, r3, 0
cmp r0, 0x1
bhi _082E6970
- ldr r0, _082E68DC
+ ldr r0, =0x00008021
cmp r1, r0
bne _082E68E8
ldrb r1, [r6, 0x4]
@@ -5678,11 +5539,7 @@ _082E6882:
str r0, [r1]
b _082E68FE
.align 2, 0
-_082E68D4: .4byte gUnknown_03007880
-_082E68D8: .4byte 0x00008022
-_082E68DC: .4byte 0x00008021
-_082E68E0: .4byte 0x00008023
-_082E68E4: .4byte 0x00007fdf
+ .pool
_082E68E8:
ldrb r2, [r6, 0x4]
lsls r2, 2
@@ -5713,7 +5570,7 @@ _082E6912:
strb r2, [r0]
mov r7, r12
ldrh r1, [r7]
- ldr r0, _082E6954
+ ldr r0, =0x00008021
cmp r1, r0
bne _082E695C
movs r4, 0
@@ -5738,28 +5595,27 @@ _082E6926:
bls _082E6926
ldr r0, [r7, 0x30]
str r0, [r7, 0x14]
- ldr r0, _082E6958
+ ldr r0, =0x00008022
strh r0, [r7]
b _082E697E
.align 2, 0
-_082E6954: .4byte 0x00008021
-_082E6958: .4byte 0x00008022
+ .pool
_082E695C:
strb r2, [r5]
mov r0, r12
str r2, [r0, 0x14]
- ldr r0, _082E696C
+ ldr r0, =0x00008023
mov r1, r12
strh r0, [r1]
b _082E697E
.align 2, 0
-_082E696C: .4byte 0x00008023
+ .pool
_082E6970:
lsls r1, 16
- ldr r0, _082E69E0
+ ldr r0, =0x80230000
cmp r1, r0
bne _082E697E
- ldr r0, _082E69E4
+ ldr r0, =0x00008020
mov r2, r12
strh r0, [r2]
_082E697E:
@@ -5785,11 +5641,11 @@ _082E697E:
cmp r0, 0
beq _082E69CE
_082E69A8:
- ldr r4, _082E69E8
+ ldr r4, =0x04000208
ldrh r2, [r4]
movs r0, 0
strh r0, [r4]
- ldr r0, _082E69EC
+ ldr r0, =gUnknown_03007894
ldr r3, [r0]
movs r0, 0x10
mov r7, r10
@@ -5799,7 +5655,7 @@ _082E69A8:
movs r1, 0
strb r0, [r3, 0x2]
lsls r0, r7, 2
- ldr r3, _082E69F0
+ ldr r3, =gUnknown_03007880
adds r0, r3
ldr r0, [r0]
strh r1, [r0, 0x2]
@@ -5814,11 +5670,7 @@ _082E69CE:
pop {r0}
bx r0
.align 2, 0
-_082E69E0: .4byte 0x80230000
-_082E69E4: .4byte 0x00008020
-_082E69E8: .4byte 0x04000208
-_082E69EC: .4byte gUnknown_03007894
-_082E69F0: .4byte gUnknown_03007880
+ .pool
thumb_func_end rfu_STC_NI_receive_Sender
thumb_func_start rfu_STC_NI_receive_Receiver
@@ -5835,7 +5687,7 @@ rfu_STC_NI_receive_Receiver: @ 82E69F4
lsrs r0, 24
mov r8, r0
movs r7, 0
- ldr r1, _082E6A54
+ ldr r1, =gUnknown_03007880
lsls r0, 2
adds r0, r1
ldr r4, [r0]
@@ -5852,7 +5704,7 @@ rfu_STC_NI_receive_Receiver: @ 82E69F4
ldrb r0, [r6, 0x2]
cmp r0, 0x3
bne _082E6A64
- ldr r0, _082E6A58
+ ldr r0, =gUnknown_03007894
ldr r2, [r0]
movs r0, 0x1
mov r1, r8
@@ -5861,25 +5713,22 @@ rfu_STC_NI_receive_Receiver: @ 82E69F4
orrs r0, r1
strb r0, [r2, 0x1]
ldrh r1, [r4, 0x34]
- ldr r0, _082E6A5C
+ ldr r0, =0x00008042
cmp r1, r0
bne _082E6AAA
adds r0, r4, 0
adds r0, 0x54
strb r7, [r0]
strb r7, [r3]
- ldr r0, _082E6A60
+ ldr r0, =0x00008043
strh r0, [r4, 0x34]
b _082E6AAA
.align 2, 0
-_082E6A54: .4byte gUnknown_03007880
-_082E6A58: .4byte gUnknown_03007894
-_082E6A5C: .4byte 0x00008042
-_082E6A60: .4byte 0x00008043
+ .pool
_082E6A64:
cmp r0, 0x2
bne _082E6A90
- ldr r0, _082E6A88
+ ldr r0, =0x00008041
cmp r9, r0
bne _082E6A7C
ldr r0, [r5, 0x14]
@@ -5890,17 +5739,16 @@ _082E6A64:
bl rfu_STC_NI_initSlot_asRecvDataEntity
_082E6A7C:
ldrh r1, [r5]
- ldr r0, _082E6A8C
+ ldr r0, =0x00008042
cmp r1, r0
bne _082E6AAA
b _082E6AAE
.align 2, 0
-_082E6A88: .4byte 0x00008041
-_082E6A8C: .4byte 0x00008042
+ .pool
_082E6A90:
cmp r0, 0x1
bne _082E6AAA
- ldr r7, _082E6B5C
+ ldr r7, =0x00008041
cmp r9, r7
beq _082E6AAE
mov r0, r8
@@ -5925,7 +5773,7 @@ _082E6AAE:
ands r0, r1
cmp r2, r0
bne _082E6B04
- ldr r0, _082E6B60
+ ldr r0, =gUnknown_03007898
ldr r0, [r0]
lsls r1, r3, 2
adds r1, 0x4
@@ -5935,7 +5783,7 @@ _082E6AAE:
mov r0, sp
bl _call_via_r3
ldrh r1, [r5]
- ldr r0, _082E6B64
+ ldr r0, =0x00008042
cmp r1, r0
bne _082E6AF4
ldrb r0, [r6, 0x4]
@@ -5979,11 +5827,11 @@ _082E6B04:
cmp r0, r6
bne _082E6B4A
_082E6B2C:
- ldr r3, _082E6B68
+ ldr r3, =0x04000208
ldrh r2, [r3]
movs r0, 0
strh r0, [r3]
- ldr r0, _082E6B6C
+ ldr r0, =gUnknown_03007894
ldr r4, [r0]
movs r0, 0x1
mov r1, r8
@@ -6004,11 +5852,7 @@ _082E6B4A:
pop {r0}
bx r0
.align 2, 0
-_082E6B5C: .4byte 0x00008041
-_082E6B60: .4byte gUnknown_03007898
-_082E6B64: .4byte 0x00008042
-_082E6B68: .4byte 0x04000208
-_082E6B6C: .4byte gUnknown_03007894
+ .pool
thumb_func_end rfu_STC_NI_receive_Receiver
thumb_func_start rfu_STC_NI_initSlot_asRecvControllData
@@ -6017,7 +5861,7 @@ rfu_STC_NI_initSlot_asRecvControllData: @ 82E6B70
adds r2, r1, 0
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, _082E6B8C
+ ldr r0, =gUnknown_03007890
ldr r3, [r0]
ldrb r1, [r3]
mov r12, r0
@@ -6028,7 +5872,7 @@ rfu_STC_NI_initSlot_asRecvControllData: @ 82E6B70
adds r1, 0xF
b _082E6B98
.align 2, 0
-_082E6B8C: .4byte gUnknown_03007890
+ .pool
_082E6B90:
movs r5, 0x2
adds r0, r4, 0
@@ -6049,9 +5893,9 @@ _082E6B98:
bcs _082E6BD0
movs r0, 0x49
strh r0, [r2]
- ldr r0, _082E6BC8
+ ldr r0, =0x00000702
strh r0, [r2, 0x18]
- ldr r0, _082E6BCC
+ ldr r0, =gUnknown_03007894
ldr r2, [r0]
ldrb r1, [r2, 0x4]
adds r0, r6, 0
@@ -6059,8 +5903,7 @@ _082E6B98:
strb r0, [r2, 0x4]
b _082E6BF6
.align 2, 0
-_082E6BC8: .4byte 0x00000702
-_082E6BCC: .4byte gUnknown_03007894
+ .pool
_082E6BD0:
strh r3, [r2, 0x18]
ldrb r0, [r1]
@@ -6074,7 +5917,7 @@ _082E6BD0:
strb r7, [r2, 0x1F]
strh r3, [r2, 0x2E]
strb r4, [r2, 0x1A]
- ldr r0, _082E6BFC
+ ldr r0, =0x00008041
strh r0, [r2]
mov r0, r12
ldr r1, [r0]
@@ -6086,7 +5929,7 @@ _082E6BF6:
pop {r0}
bx r0
.align 2, 0
-_082E6BFC: .4byte 0x00008041
+ .pool
thumb_func_end rfu_STC_NI_initSlot_asRecvControllData
thumb_func_start rfu_STC_NI_initSlot_asRecvDataEntity
@@ -6100,7 +5943,7 @@ rfu_STC_NI_initSlot_asRecvDataEntity: @ 82E6C00
ldrb r0, [r0]
cmp r0, 0x1
bne _082E6C24
- ldr r0, _082E6C20
+ ldr r0, =gUnknown_03007890
lsls r1, r5, 5
adds r1, 0x14
ldr r0, [r0]
@@ -6108,9 +5951,9 @@ rfu_STC_NI_initSlot_asRecvDataEntity: @ 82E6C00
adds r0, 0x4
b _082E6C7A
.align 2, 0
-_082E6C20: .4byte gUnknown_03007890
+ .pool
_082E6C24:
- ldr r1, _082E6C68
+ ldr r1, =gUnknown_03007880
lsls r0, r5, 2
adds r0, r1
ldr r2, [r0]
@@ -6122,18 +5965,18 @@ _082E6C24:
lsls r1, 17
lsls r1, r5
lsrs r1, 24
- ldr r0, _082E6C6C
+ ldr r0, =gUnknown_03007894
ldr r3, [r0]
ldrb r2, [r3, 0x4]
adds r0, r1, 0
orrs r0, r2
strb r0, [r3, 0x4]
- ldr r0, _082E6C70
+ ldr r0, =gUnknown_03007890
ldr r2, [r0]
ldrb r0, [r2, 0x5]
bics r0, r1
strb r0, [r2, 0x5]
- ldr r0, _082E6C74
+ ldr r0, =0x00000701
strh r0, [r4, 0x18]
movs r0, 0x47
strh r0, [r4]
@@ -6143,10 +5986,7 @@ _082E6C24:
bl rfu_STC_releaseFrame
b _082E6CAC
.align 2, 0
-_082E6C68: .4byte gUnknown_03007880
-_082E6C6C: .4byte gUnknown_03007894
-_082E6C70: .4byte gUnknown_03007890
-_082E6C74: .4byte 0x00000701
+ .pool
_082E6C78:
ldr r0, [r2, 0x68]
_082E6C7A:
@@ -6174,39 +6014,39 @@ _082E6C86:
bls _082E6C86
ldr r0, [r4, 0x30]
str r0, [r4, 0x14]
- ldr r0, _082E6CB4
+ ldr r0, =0x00008042
strh r0, [r4]
_082E6CAC:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
-_082E6CB4: .4byte 0x00008042
+ .pool
thumb_func_end rfu_STC_NI_initSlot_asRecvDataEntity
thumb_func_start rfu_NI_checkCommFailCounter
rfu_NI_checkCommFailCounter: @ 82E6CB8
push {r4-r7,lr}
- ldr r2, _082E6D44
+ ldr r2, =gUnknown_03007890
ldr r0, [r2]
ldrb r1, [r0, 0x4]
ldrb r0, [r0, 0x5]
orrs r0, r1
cmp r0, 0
beq _082E6D3E
- ldr r1, _082E6D48
+ ldr r1, =0x04000208
ldrh r0, [r1]
mov r12, r0
movs r0, 0
strh r0, [r1]
- ldr r1, _082E6D4C
+ ldr r1, =gUnknown_03007894
ldr r0, [r1]
ldrb r0, [r0, 0x2]
lsrs r7, r0, 4
movs r3, 0
adds r6, r1, 0
adds r5, r2, 0
- ldr r4, _082E6D50
+ ldr r4, =gUnknown_03007880
_082E6CE2:
movs r0, 0x80
lsls r0, 17
@@ -6253,7 +6093,7 @@ _082E6D28:
ldr r0, [r6]
movs r1, 0
strb r1, [r0, 0x2]
- ldr r0, _082E6D48
+ ldr r0, =0x04000208
mov r1, r12
strh r1, [r0]
_082E6D3E:
@@ -6261,16 +6101,13 @@ _082E6D3E:
pop {r0}
bx r0
.align 2, 0
-_082E6D44: .4byte gUnknown_03007890
-_082E6D48: .4byte 0x04000208
-_082E6D4C: .4byte gUnknown_03007894
-_082E6D50: .4byte gUnknown_03007880
+ .pool
thumb_func_end rfu_NI_checkCommFailCounter
thumb_func_start rfu_REQ_noise
rfu_REQ_noise: @ 82E6D54
push {lr}
- ldr r0, _082E6D68
+ ldr r0, =rfu_STC_REQ_callback
bl STWI_set_Callback_M
movs r0, 0x1
movs r1, 0
@@ -6278,7 +6115,7 @@ rfu_REQ_noise: @ 82E6D54
pop {r0}
bx r0
.align 2, 0
-_082E6D68: .4byte rfu_STC_REQ_callback
+ .pool
thumb_func_end rfu_REQ_noise
thumb_func_start sub_82E6D6C
@@ -6288,7 +6125,7 @@ sub_82E6D6C: @ 82E6D6C
push {r7}
lsls r0, 24
lsrs r5, r0, 24
- ldr r0, _082E6D84
+ ldr r0, =0x04000208
ldrh r0, [r0]
cmp r0, 0
bne _082E6D88
@@ -6296,32 +6133,29 @@ sub_82E6D6C: @ 82E6D6C
negs r0, r0
b _082E6E08
.align 2, 0
-_082E6D84: .4byte 0x04000208
+ .pool
_082E6D88:
- ldr r0, _082E6DB4
+ ldr r0, =0x04000200
ldrh r0, [r0]
mov r8, r0
- ldr r4, _082E6DB8
+ ldr r4, =gRfuState
ldr r1, [r4]
movs r0, 0xA
str r0, [r1]
- ldr r0, _082E6DBC
+ ldr r0, =sub_82E6F88
bl STWI_set_Callback_ID
bl sub_82E6E20
ldr r0, [r4]
ldrb r0, [r0, 0xA]
lsls r0, 2
- ldr r1, _082E6DC0
+ ldr r1, =0x04000100
adds r4, r0, r1
lsls r0, r5, 27
lsrs r5, r0, 24
movs r7, 0
b _082E6DD6
.align 2, 0
-_082E6DB4: .4byte 0x04000200
-_082E6DB8: .4byte gRfuState
-_082E6DBC: .4byte sub_82E6F88
-_082E6DC0: .4byte 0x04000100
+ .pool
_082E6DC4:
strh r6, [r4, 0x2]
strh r6, [r4]
@@ -6344,15 +6178,15 @@ _082E6DD6:
cmp r6, 0
beq _082E6DC4
_082E6DEA:
- ldr r1, _082E6E14
+ ldr r1, =0x04000208
movs r0, 0
strh r0, [r1]
- ldr r0, _082E6E18
+ ldr r0, =0x04000200
mov r2, r8
strh r2, [r0]
movs r0, 0x1
strh r0, [r1]
- ldr r0, _082E6E1C
+ ldr r0, =gRfuState
ldr r1, [r0]
movs r0, 0
str r0, [r1]
@@ -6365,20 +6199,18 @@ _082E6E08:
pop {r1}
bx r1
.align 2, 0
-_082E6E14: .4byte 0x04000208
-_082E6E18: .4byte 0x04000200
-_082E6E1C: .4byte gRfuState
+ .pool
thumb_func_end sub_82E6D6C
thumb_func_start sub_82E6E20
sub_82E6E20: @ 82E6E20
push {r4,r5,lr}
sub sp, 0x4
- ldr r3, _082E6E78
+ ldr r3, =0x04000208
movs r4, 0
strh r4, [r3]
- ldr r2, _082E6E7C
- ldr r0, _082E6E80
+ ldr r2, =0x04000200
+ ldr r0, =gRfuState
ldr r0, [r0]
movs r1, 0x8
ldrb r0, [r0, 0xA]
@@ -6390,7 +6222,7 @@ sub_82E6E20: @ 82E6E20
strh r0, [r2]
movs r0, 0x1
strh r0, [r3]
- ldr r0, _082E6E84
+ ldr r0, =0x04000134
strh r4, [r0]
subs r2, 0xD8
movs r1, 0x80
@@ -6405,30 +6237,24 @@ sub_82E6E20: @ 82E6E20
strh r0, [r2]
movs r0, 0
str r0, [sp]
- ldr r1, _082E6E88
- ldr r2, _082E6E8C
+ ldr r1, =gUnknown_030078A0
+ ldr r2, =0x05000003
mov r0, sp
bl CpuSet
- ldr r0, _082E6E90
+ ldr r0, =0x04000202
strh r5, [r0]
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
-_082E6E78: .4byte 0x04000208
-_082E6E7C: .4byte 0x04000200
-_082E6E80: .4byte gRfuState
-_082E6E84: .4byte 0x04000134
-_082E6E88: .4byte gUnknown_030078A0
-_082E6E8C: .4byte 0x05000003
-_082E6E90: .4byte 0x04000202
+ .pool
thumb_func_end sub_82E6E20
thumb_func_start sub_82E6E94
sub_82E6E94: @ 82E6E94
push {r4-r7,lr}
- ldr r0, _082E6EA8
+ ldr r0, =gUnknown_030078A0
ldrb r1, [r0, 0x1]
mov r12, r1
adds r7, r0, 0
@@ -6438,19 +6264,19 @@ sub_82E6E94: @ 82E6E94
beq _082E6EE4
b _082E6F7C
.align 2, 0
-_082E6EA8: .4byte gUnknown_030078A0
+ .pool
_082E6EAC:
movs r6, 0x1
strb r6, [r7]
- ldr r3, _082E6ED8
+ ldr r3, =0x04000128
ldrh r0, [r3]
movs r5, 0x1
orrs r0, r5
strh r0, [r3]
- ldr r4, _082E6EDC
+ ldr r4, =0x04000208
mov r0, r12
strh r0, [r4]
- ldr r2, _082E6EE0
+ ldr r2, =0x04000200
ldrh r0, [r2]
movs r1, 0x80
orrs r0, r1
@@ -6462,9 +6288,7 @@ _082E6EAC:
strb r0, [r3]
b _082E6F80
.align 2, 0
-_082E6ED8: .4byte 0x04000128
-_082E6EDC: .4byte 0x04000208
-_082E6EE0: .4byte 0x04000200
+ .pool
_082E6EE4:
ldrh r0, [r7, 0xA]
cmp r0, 0
@@ -6475,9 +6299,9 @@ _082E6EE4:
ldrh r0, [r7, 0x2]
cmp r0, 0
bne _082E6F80
- ldr r3, _082E6F0C
+ ldr r3, =0x04000208
strh r0, [r3]
- ldr r2, _082E6F10
+ ldr r2, =0x04000128
ldrh r0, [r2]
movs r1, 0x80
orrs r0, r1
@@ -6486,32 +6310,31 @@ _082E6EE4:
strh r1, [r3]
b _082E6F80
.align 2, 0
-_082E6F0C: .4byte 0x04000208
-_082E6F10: .4byte 0x04000128
+ .pool
_082E6F14:
ldrh r1, [r7, 0x4]
- ldr r0, _082E6F60
+ ldr r0, =0x00008001
cmp r1, r0
beq _082E6F80
ldrh r6, [r7, 0x2]
cmp r6, 0
bne _082E6F80
- ldr r4, _082E6F64
+ ldr r4, =0x04000208
strh r6, [r4]
- ldr r3, _082E6F68
+ ldr r3, =0x04000200
ldrh r1, [r3]
- ldr r0, _082E6F6C
+ ldr r0, =0x0000ff7f
ands r0, r1
strh r0, [r3]
mov r7, r12
strh r7, [r4]
- ldr r2, _082E6F70
+ ldr r2, =0x04000128
strh r6, [r2]
movs r1, 0x80
lsls r1, 5
adds r0, r1, 0
strh r0, [r2]
- ldr r0, _082E6F74
+ ldr r0, =0x04000202
movs r5, 0x80
strh r5, [r0]
ldrh r0, [r2]
@@ -6528,12 +6351,7 @@ _082E6F14:
strh r0, [r4]
b _082E6F80
.align 2, 0
-_082E6F60: .4byte 0x00008001
-_082E6F64: .4byte 0x04000208
-_082E6F68: .4byte 0x04000200
-_082E6F6C: .4byte 0x0000ff7f
-_082E6F70: .4byte 0x04000128
-_082E6F74: .4byte 0x04000202
+ .pool
_082E6F78:
movs r0, 0x2
strb r0, [r7, 0x1]
@@ -6551,14 +6369,14 @@ _082E6F82:
thumb_func_start sub_82E6F88
sub_82E6F88: @ 82E6F88
push {r4,r5,lr}
- ldr r0, _082E6FD0
+ ldr r0, =0x04000120
ldr r5, [r0]
- ldr r0, _082E6FD4
+ ldr r0, =gUnknown_030078A0
ldrb r1, [r0]
adds r4, r0, 0
cmp r1, 0x1
beq sub_82E6FA2
- ldr r0, _082E6FD8
+ ldr r0, =0x04000128
ldrh r1, [r0]
movs r2, 0x80
orrs r1, r2
@@ -6590,9 +6408,7 @@ sub_82E6FA2: @ 82E6FA2
strh r5, [r4, 0xA]
b _082E6FF6
.align 2, 0
-_082E6FD0: .4byte 0x04000120
-_082E6FD4: .4byte gUnknown_030078A0
-_082E6FD8: .4byte 0x04000128
+ .pool
_082E6FDC:
ldrh r0, [r4, 0x4]
mvns r0, r0
@@ -6613,19 +6429,19 @@ _082E6FF6:
cmp r0, 0x3
bhi _082E700C
lsls r0, 1
- ldr r1, _082E7008
+ ldr r1, =gUnknown_089A3258
adds r0, r1
ldrh r0, [r0]
b _082E700E
.align 2, 0
-_082E7008: .4byte gUnknown_089A3258
+ .pool
_082E700C:
- ldr r0, _082E7064
+ ldr r0, =0x00008001
_082E700E:
strh r0, [r4, 0x4]
mvns r0, r5
strh r0, [r4, 0x6]
- ldr r3, _082E7068
+ ldr r3, =0x04000120
ldrh r2, [r4, 0x4]
ldrb r1, [r4]
movs r0, 0x1
@@ -6643,12 +6459,12 @@ _082E700E:
ldrh r0, [r4, 0x2]
cmp r0, 0
bne _082E703E
- ldr r0, _082E706C
+ ldr r0, =0x0000494e
cmp r5, r0
bne _082E705C
_082E703E:
movs r0, 0
- ldr r1, _082E7070
+ ldr r1, =0x00000257
_082E7042:
adds r0, 0x1
lsls r0, 16
@@ -6658,7 +6474,7 @@ _082E7042:
ldrh r0, [r4, 0xA]
cmp r0, 0
bne _082E705C
- ldr r0, _082E7074
+ ldr r0, =0x04000128
ldrh r1, [r0]
movs r2, 0x80
orrs r1, r2
@@ -6668,11 +6484,7 @@ _082E705C:
pop {r0}
bx r0
.align 2, 0
-_082E7064: .4byte 0x00008001
-_082E7068: .4byte 0x04000120
-_082E706C: .4byte 0x0000494e
-_082E7070: .4byte 0x00000257
-_082E7074: .4byte 0x04000128
+ .pool
thumb_func_end sub_82E6FA2
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/link_rfu.s b/asm/link_rfu.s
new file mode 100644
index 000000000..e53685c28
--- /dev/null
+++ b/asm/link_rfu.s
@@ -0,0 +1,2021 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_8011404
+sub_8011404: @ 8011404
+ push {r4,r5,lr}
+ lsls r0, 24
+ lsrs r4, r0, 24
+ cmp r4, 0x31
+ bne _08011410
+ b _08011570
+_08011410:
+ cmp r4, 0x31
+ bgt _0801143E
+ cmp r4, 0x22
+ beq _08011494
+ cmp r4, 0x22
+ bgt _0801142C
+ cmp r4, 0x20
+ beq _0801147C
+ cmp r4, 0x20
+ ble _08011426
+ b _080115DE
+_08011426:
+ cmp r4, 0
+ beq _0801146E
+ b _080115DE
+_0801142C:
+ cmp r4, 0x24
+ beq _080114BA
+ cmp r4, 0x24
+ blt _080114B0
+ cmp r4, 0x25
+ beq _08011504
+ cmp r4, 0x30
+ beq _0801150E
+ b _080115DE
+_0801143E:
+ cmp r4, 0x44
+ bgt _08011454
+ cmp r4, 0x42
+ blt _08011448
+ b _080115DE
+_08011448:
+ cmp r4, 0x33
+ beq _08011522
+ cmp r4, 0x33
+ bge _08011452
+ b _0801158C
+_08011452:
+ b _080115DE
+_08011454:
+ cmp r4, 0xF3
+ bne _0801145A
+ b _080115AC
+_0801145A:
+ cmp r4, 0xF3
+ bgt _08011466
+ cmp r4, 0xF0
+ bge _08011464
+ b _080115DE
+_08011464:
+ b _080115C4
+_08011466:
+ cmp r4, 0xFF
+ bne _0801146C
+ b _080115C4
+_0801146C:
+ b _080115DE
+_0801146E:
+ ldr r1, =gUnknown_03005000
+ movs r0, 0x6
+ strh r0, [r1, 0x4]
+ b _080115DE
+ .pool
+_0801147C:
+ ldr r0, =gUnknown_03005000
+ ldr r1, =gUnknown_03004140
+ ldrh r1, [r1, 0x14]
+ ldr r2, =0x00000ccd
+ adds r0, r2
+ b _080115DC
+ .pool
+_08011494:
+ ldr r0, =gUnknown_03005000
+ ldr r1, =gUnknown_03004140
+ ldrh r1, [r1, 0x14]
+ ldr r2, =0x00000c3e
+ adds r0, r2
+ ldrb r2, [r0]
+ b _080115DC
+ .pool
+_080114B0:
+ movs r0, 0x2
+ adds r1, r4, 0
+ bl sub_8011A64
+ b _080115DE
+_080114BA:
+ ldr r4, =gUnknown_03005000
+ movs r1, 0
+ movs r0, 0xB
+ strh r0, [r4, 0x4]
+ ldr r2, =0x00000c85
+ adds r0, r4, r2
+ strb r1, [r0]
+ ldr r0, =0x00000c86
+ adds r2, r4, r0
+ strb r1, [r2]
+ ldr r1, =0x00000c3e
+ adds r5, r4, r1
+ ldrb r1, [r5]
+ movs r0, 0x20
+ movs r3, 0x1
+ bl rfu_setRecvBuffer
+ ldrb r1, [r5]
+ ldr r2, =0x00000c3f
+ adds r4, r2
+ movs r0, 0x10
+ adds r2, r4, 0
+ movs r3, 0x46
+ bl rfu_setRecvBuffer
+ b _080115DE
+ .pool
+_08011504:
+ movs r0, 0x2
+ movs r1, 0x25
+ bl sub_8011A64
+ b _080115DE
+_0801150E:
+ ldr r0, =gUnknown_03005000
+ adds r2, r0, 0
+ adds r2, 0xF0
+ movs r1, 0x2
+ strb r1, [r2]
+ ldr r1, =0x00000c86
+ adds r0, r1
+ ldrb r0, [r0]
+ cmp r0, 0x6
+ beq _080115DE
+_08011522:
+ ldr r2, =gUnknown_03005000
+ adds r1, r2, 0
+ adds r1, 0xF0
+ ldrb r0, [r1]
+ cmp r0, 0x2
+ beq _08011532
+ movs r0, 0x4
+ strb r0, [r1]
+_08011532:
+ ldr r1, =0x00000c86
+ adds r0, r2, r1
+ ldrb r0, [r0]
+ cmp r0, 0x9
+ beq _08011544
+ movs r0, 0x2
+ adds r1, r4, 0
+ bl sub_8011A64
+_08011544:
+ ldr r0, =gUnknown_082ED7FC
+ movs r1, 0x5
+ movs r2, 0x5
+ bl nullsub_5
+ ldr r0, =gReceivedRemoteLinkPlayers
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _080115DE
+ adds r0, r4, 0
+ bl sub_8011170
+ b _080115DE
+ .pool
+_08011570:
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xF0
+ movs r1, 0x1
+ strb r1, [r0]
+ ldr r0, =gUnknown_082ED814
+ movs r1, 0x5
+ movs r2, 0x5
+ bl nullsub_5
+ b _080115DE
+ .pool
+_0801158C:
+ ldr r1, =gUnknown_03005000
+ adds r2, r1, 0
+ adds r2, 0xF0
+ movs r0, 0x3
+ strb r0, [r2]
+ ldr r2, =0x00000c3c
+ adds r1, r2
+ ldrb r0, [r1]
+ movs r0, 0x1
+ strb r0, [r1]
+ b _080115DE
+ .pool
+_080115AC:
+ movs r0, 0x1
+ movs r1, 0xF3
+ bl sub_8011A64
+ movs r0, 0xF3
+ bl sub_8011170
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xEF
+ b _080115DA
+ .pool
+_080115C4:
+ movs r0, 0x1
+ adds r1, r4, 0
+ bl sub_8011A64
+ adds r0, r4, 0
+ bl sub_8011170
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x00000cdb
+ adds r0, r1
+ ldrb r1, [r0]
+_080115DA:
+ movs r1, 0x1
+_080115DC:
+ strb r1, [r0]
+_080115DE:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011404
+
+ thumb_func_start sub_80115EC
+sub_80115EC: @ 80115EC
+ push {r4-r6,lr}
+ adds r3, r0, 0
+ movs r2, 0
+ movs r6, 0x1
+ ldr r0, =gUnknown_03005000
+ ldr r4, =0x00000cea
+ adds r1, r0, r4
+ movs r5, 0
+ movs r4, 0xFF
+_080115FE:
+ adds r0, r3, 0
+ asrs r0, r2
+ ands r0, r6
+ cmp r0, 0
+ beq _08011610
+ strb r5, [r1]
+ ldrb r0, [r1, 0x4]
+ orrs r0, r4
+ strb r0, [r1, 0x4]
+_08011610:
+ adds r1, 0x1
+ adds r2, 0x1
+ cmp r2, 0x3
+ ble _080115FE
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_80115EC
+
+ thumb_func_start sub_8011628
+sub_8011628: @ 8011628
+ push {r4-r7,lr}
+ adds r5, r0, 0
+ movs r3, 0
+ movs r2, 0
+ movs r4, 0x1
+ ldr r6, =gUnknown_03007890
+ movs r7, 0x7F
+_08011636:
+ adds r0, r5, 0
+ asrs r0, r2
+ ands r0, r4
+ cmp r0, 0
+ beq _0801165C
+ lsls r1, r2, 5
+ adds r1, 0x14
+ ldr r0, [r6]
+ adds r0, r1
+ ldrb r1, [r0, 0x10]
+ adds r0, r7, 0
+ ands r0, r1
+ cmp r0, 0x45
+ bne _0801165C
+ adds r0, r4, 0
+ lsls r0, r2
+ orrs r3, r0
+ lsls r0, r3, 24
+ lsrs r3, r0, 24
+_0801165C:
+ adds r0, r2, 0x1
+ lsls r0, 24
+ lsrs r2, r0, 24
+ cmp r2, 0x3
+ bls _08011636
+ adds r0, r3, 0
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ .pool
+ thumb_func_end sub_8011628
+
+ thumb_func_start sub_8011674
+sub_8011674: @ 8011674
+ push {r4-r7,lr}
+ lsls r0, 24
+ lsrs r4, r0, 24
+ cmp r4, 0x25
+ bne _08011680
+ b _080118EC
+_08011680:
+ cmp r4, 0x25
+ bgt _080116C2
+ cmp r4, 0x14
+ bne _0801168A
+ b _08011804
+_0801168A:
+ cmp r4, 0x14
+ bgt _080116A2
+ cmp r4, 0x11
+ beq _08011722
+ cmp r4, 0x11
+ ble _08011698
+ b _08011A42
+_08011698:
+ cmp r4, 0
+ beq _0801170C
+ cmp r4, 0x10
+ beq _08011718
+ b _08011A42
+_080116A2:
+ cmp r4, 0x22
+ bne _080116A8
+ b _08011868
+_080116A8:
+ cmp r4, 0x22
+ bgt _080116B4
+ cmp r4, 0x20
+ bne _080116B2
+ b _08011850
+_080116B2:
+ b _08011A42
+_080116B4:
+ cmp r4, 0x23
+ bne _080116BA
+ b _08011884
+_080116BA:
+ cmp r4, 0x24
+ bne _080116C0
+ b _080118BA
+_080116C0:
+ b _08011A42
+_080116C2:
+ cmp r4, 0x44
+ bgt _080116F2
+ cmp r4, 0x42
+ blt _080116CC
+ b _08011A42
+_080116CC:
+ cmp r4, 0x32
+ bne _080116D2
+ b _08011914
+_080116D2:
+ cmp r4, 0x32
+ bgt _080116E4
+ cmp r4, 0x30
+ bne _080116DC
+ b _08011940
+_080116DC:
+ cmp r4, 0x31
+ bne _080116E2
+ b _080118F6
+_080116E2:
+ b _08011A42
+_080116E4:
+ cmp r4, 0x33
+ bne _080116EA
+ b _08011948
+_080116EA:
+ cmp r4, 0x40
+ bne _080116F0
+ b _080119FC
+_080116F0:
+ b _08011A42
+_080116F2:
+ cmp r4, 0xF3
+ bne _080116F8
+ b _08011A0C
+_080116F8:
+ cmp r4, 0xF3
+ bgt _08011704
+ cmp r4, 0xF0
+ bge _08011702
+ b _08011A42
+_08011702:
+ b _08011A28
+_08011704:
+ cmp r4, 0xFF
+ bne _0801170A
+ b _08011A28
+_0801170A:
+ b _08011A42
+_0801170C:
+ ldr r1, =gUnknown_03005000
+ movs r0, 0x11
+ strh r0, [r1, 0x4]
+ b _08011A42
+ .pool
+_08011718:
+ movs r0, 0x4
+ movs r1, 0
+ bl sub_8011A64
+ b _08011A42
+_08011722:
+ bl sub_800F7DC
+ ldrb r1, [r0, 0xA]
+ movs r0, 0x7F
+ ands r0, r1
+ cmp r0, 0x45
+ bne _080117DC
+ ldr r5, =gUnknown_03005000
+ ldr r1, =0x00000cd9
+ adds r0, r5, r1
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _080117DC
+ ldr r0, =gUnknown_03004140
+ ldrh r0, [r0, 0x14]
+ bl sub_8011628
+ lsls r0, 24
+ lsrs r4, r0, 24
+ cmp r4, 0
+ beq _080117A6
+ adds r0, r4, 0
+ bl sub_800E87C
+ movs r2, 0x1
+ mov r12, r2
+ mov r1, r12
+ lsls r1, r0
+ lsls r1, 24
+ lsrs r1, 24
+ ldr r7, =0x00000ce6
+ adds r6, r5, r7
+ ldrb r2, [r6]
+ cmp r2, 0
+ bne _08011798
+ ldr r0, =0x00000ce8
+ adds r3, r5, r0
+ ldrb r0, [r3]
+ cmp r0, 0
+ bne _08011798
+ subs r7, 0x1
+ adds r0, r5, r7
+ strb r1, [r0]
+ eors r1, r4
+ orrs r1, r2
+ strb r1, [r6]
+ mov r0, r12
+ strb r0, [r3]
+ b _080117A6
+ .pool
+_08011798:
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x00000ce6
+ adds r0, r1
+ ldrb r2, [r0]
+ adds r1, r4, 0
+ orrs r1, r2
+ strb r1, [r0]
+_080117A6:
+ ldr r0, =gUnknown_03004140
+ ldrh r1, [r0, 0x14]
+ cmp r4, r1
+ beq _080117F6
+ ldr r2, =gUnknown_03005000
+ ldr r7, =0x00000ce3
+ adds r3, r2, r7
+ adds r0, r4, 0
+ eors r0, r1
+ ldrb r1, [r3]
+ orrs r0, r1
+ strb r0, [r3]
+ ldr r0, =0x00000ce4
+ adds r2, r0
+ movs r0, 0x2
+ strb r0, [r2]
+ b _080117F6
+ .pool
+_080117DC:
+ bl sub_800F7DC
+ ldrb r1, [r0, 0xA]
+ movs r0, 0x7F
+ ands r0, r1
+ cmp r0, 0x54
+ bne _080117F6
+ ldr r0, =gUnknown_03004140
+ ldrb r0, [r0]
+ bl rfu_REQ_disconnect
+ bl rfu_waitREQComplete
+_080117F6:
+ ldr r0, =gUnknown_03004140
+ ldrh r0, [r0, 0x14]
+ bl sub_80115EC
+ b _08011A42
+ .pool
+_08011804:
+ bl sub_800F7DC
+ ldrb r1, [r0, 0xA]
+ movs r0, 0x7F
+ ands r0, r1
+ cmp r0, 0x45
+ beq _08011836
+ ldr r4, =gUnknown_03004140
+ ldrb r0, [r4, 0x1]
+ cmp r0, 0x1
+ bls _08011836
+ ldrb r0, [r4, 0x14]
+ bl sub_800E87C
+ movs r1, 0x80
+ lsls r1, 17
+ lsls r1, r0
+ lsrs r1, 24
+ ldrb r0, [r4]
+ eors r1, r0
+ adds r0, r1, 0
+ bl rfu_REQ_disconnect
+ bl rfu_waitREQComplete
+_08011836:
+ ldr r1, =gUnknown_03005000
+ ldrh r0, [r1, 0x4]
+ cmp r0, 0xF
+ beq _08011840
+ b _08011A42
+_08011840:
+ movs r0, 0x10
+ strh r0, [r1, 0x4]
+ b _08011A42
+ .pool
+_08011850:
+ ldr r0, =gUnknown_03005000
+ ldr r1, =gUnknown_03004140
+ ldrh r1, [r1, 0x14]
+ ldr r2, =0x00000ccd
+ adds r0, r2
+ b _08011A40
+ .pool
+_08011868:
+ ldr r0, =gUnknown_03005000
+ ldr r1, =gUnknown_03004140
+ ldrh r1, [r1, 0x14]
+ ldr r7, =0x00000c3e
+ adds r0, r7
+ ldrb r2, [r0]
+ b _08011A40
+ .pool
+_08011884:
+ ldr r1, =gUnknown_03005000
+ movs r0, 0x12
+ strh r0, [r1, 0x4]
+ ldr r0, =0x00000ccf
+ adds r1, r0
+ ldrb r0, [r1]
+ cmp r0, 0x1
+ bhi _080118B0
+ adds r0, 0x1
+ strb r0, [r1]
+ ldr r0, =sub_801209C
+ movs r1, 0x2
+ bl CreateTask
+ b _08011A42
+ .pool
+_080118B0:
+ movs r0, 0x2
+ movs r1, 0x23
+ bl sub_8011A64
+ b _08011A42
+_080118BA:
+ ldr r4, =gUnknown_03005000
+ movs r0, 0xD
+ strh r0, [r4, 0x4]
+ movs r0, 0x3
+ movs r1, 0
+ bl sub_8011A64
+ ldr r1, =0x00000c3e
+ adds r0, r4, r1
+ ldrb r1, [r0]
+ ldr r2, =0x00000c3f
+ adds r4, r2
+ movs r0, 0x10
+ adds r2, r4, 0
+ movs r3, 0x46
+ bl rfu_setRecvBuffer
+ b _08011A42
+ .pool
+_080118EC:
+ movs r0, 0x2
+ movs r1, 0x25
+ bl sub_8011A64
+ b _08011A42
+_080118F6:
+ ldr r0, =gUnknown_03004140
+ ldrb r1, [r0]
+ ldrh r0, [r0, 0x14]
+ ands r1, r0
+ cmp r1, 0
+ bne _08011904
+ b _08011A42
+_08011904:
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xF0
+ movs r1, 0x1
+ b _08011A40
+ .pool
+_08011914:
+ ldr r2, =gUnknown_03005000
+ adds r1, r2, 0
+ adds r1, 0xF0
+ movs r0, 0x3
+ strb r0, [r1]
+ ldr r0, =gUnknown_03007890
+ ldr r0, [r0]
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _0801192A
+ b _08011A42
+_0801192A:
+ ldr r7, =0x00000c3c
+ adds r0, r2, r7
+ ldrb r1, [r0]
+ movs r1, 0x1
+ b _08011A40
+ .pool
+_08011940:
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xF0
+ movs r1, 0x2
+ strb r1, [r0]
+_08011948:
+ ldr r2, =gUnknown_03005000
+ adds r1, r2, 0
+ adds r1, 0xF0
+ ldrb r0, [r1]
+ cmp r0, 0x2
+ beq _08011958
+ movs r0, 0x4
+ strb r0, [r1]
+_08011958:
+ ldrb r0, [r2, 0xC]
+ cmp r0, 0x1
+ bne _08011996
+ ldr r0, =gReceivedRemoteLinkPlayers
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _080119B4
+ ldr r0, =0x00000ce2
+ adds r2, r0
+ ldr r0, =gUnknown_03004140
+ ldrb r1, [r0, 0x14]
+ ldrb r0, [r2]
+ bics r0, r1
+ strb r0, [r2]
+ cmp r0, 0
+ bne _08011990
+ adds r0, r4, 0
+ bl sub_8011170
+ b _080119B4
+ .pool
+_08011990:
+ bl sub_80111FC
+ b _080119B4
+_08011996:
+ ldr r1, =0x00000ce4
+ adds r0, r2, r1
+ ldrb r0, [r0]
+ cmp r0, 0x2
+ beq _080119B4
+ ldr r0, =gReceivedRemoteLinkPlayers
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ bne _080119B4
+ adds r0, r4, 0
+ bl sub_8011170
+ movs r0, 0
+ bl sub_800C27C
+_080119B4:
+ ldr r0, =gUnknown_03007890
+ ldr r0, [r0]
+ ldrb r0, [r0]
+ cmp r0, 0xFF
+ bne _080119DA
+ ldr r0, =gUnknown_03004140
+ ldrb r0, [r0, 0x7]
+ cmp r0, 0
+ bne _080119DA
+ ldr r0, =sub_800EB44
+ bl FuncIsActiveTask
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bne _080119DA
+ ldr r1, =gUnknown_03005000
+ movs r0, 0x11
+ strh r0, [r1, 0x4]
+_080119DA:
+ movs r0, 0x2
+ adds r1, r4, 0
+ bl sub_8011A64
+ b _08011A42
+ .pool
+_080119FC:
+ ldr r0, =gUnknown_03005000
+ ldr r2, =0x00000ce3
+ adds r0, r2
+ b _08011A3E
+ .pool
+_08011A0C:
+ movs r0, 0x1
+ movs r1, 0xF3
+ bl sub_8011A64
+ movs r0, 0xF3
+ bl sub_8011170
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xEF
+ movs r1, 0x1
+ b _08011A40
+ .pool
+_08011A28:
+ adds r0, r4, 0
+ bl sub_8011170
+ movs r0, 0x1
+ adds r1, r4, 0
+ bl sub_8011A64
+ ldr r0, =gUnknown_03005000
+ ldr r7, =0x00000cdb
+ adds r0, r7
+ ldrb r1, [r0]
+_08011A3E:
+ movs r1, 0
+_08011A40:
+ strb r1, [r0]
+_08011A42:
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011674
+
+ thumb_func_start sub_8011A50
+sub_8011A50: @ 8011A50
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x00000ce4
+ adds r0, r1
+ movs r1, 0x2
+ strb r1, [r0]
+ bx lr
+ .pool
+ thumb_func_end sub_8011A50
+
+ thumb_func_start sub_8011A64
+sub_8011A64: @ 8011A64
+ ldr r2, =gUnknown_03005000
+ adds r3, r2, 0
+ adds r3, 0xF1
+ strb r0, [r3]
+ strh r1, [r2, 0xA]
+ bx lr
+ .pool
+ thumb_func_end sub_8011A64
+
+ thumb_func_start sub_8011A74
+sub_8011A74: @ 8011A74
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xF1
+ ldrb r0, [r0]
+ bx lr
+ .pool
+ thumb_func_end sub_8011A74
+
+ thumb_func_start sub_8011A80
+sub_8011A80: @ 8011A80
+ push {lr}
+ bl sub_8011A74
+ lsls r0, 24
+ lsrs r0, 24
+ subs r0, 0x1
+ cmp r0, 0x1
+ bls _08011A94
+ movs r0, 0
+ b _08011A96
+_08011A94:
+ movs r0, 0x1
+_08011A96:
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8011A80
+
+ thumb_func_start sub_8011A9C
+sub_8011A9C: @ 8011A9C
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x00000ce8
+ adds r0, r1
+ ldrb r0, [r0]
+ bx lr
+ .pool
+ thumb_func_end sub_8011A9C
+
+ thumb_func_start Rfu_IsMaster
+Rfu_IsMaster: @ 8011AB0
+ ldr r0, =gUnknown_03005000
+ ldrb r0, [r0, 0xC]
+ bx lr
+ .pool
+ thumb_func_end Rfu_IsMaster
+
+ thumb_func_start RfuVSync
+RfuVSync: @ 8011ABC
+ push {lr}
+ bl rfu_syncVBlank_
+ pop {r0}
+ bx r0
+ thumb_func_end RfuVSync
+
+ thumb_func_start sub_8011AC8
+sub_8011AC8: @ 8011AC8
+ push {lr}
+ sub sp, 0x4
+ movs r0, 0
+ str r0, [sp]
+ ldr r1, =gRecvCmds
+ ldr r2, =0x05000014
+ mov r0, sp
+ bl CpuSet
+ add sp, 0x4
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011AC8
+
+ thumb_func_start sub_8011AE8
+sub_8011AE8: @ 8011AE8
+ push {lr}
+ bl LoadOam
+ bl ProcessSpriteCopyRequests
+ bl TransferPlttBuffer
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8011AE8
+
+ thumb_func_start sub_8011AFC
+sub_8011AFC: @ 8011AFC
+ push {r4,lr}
+ bl ResetSpriteData
+ bl FreeAllSpritePalettes
+ bl ResetTasks
+ bl ResetPaletteFade
+ ldr r0, =sub_8011AE8
+ bl SetVBlankCallback
+ bl sub_80093CC
+ lsls r0, 24
+ cmp r0, 0
+ beq _08011B70
+ ldr r1, =gLinkType
+ ldr r2, =0x00001111
+ adds r0, r2, 0
+ strh r0, [r1]
+ bl sub_800B488
+ bl OpenLink
+ ldr r0, =gMain
+ ldrh r0, [r0, 0x24]
+ bl SeedRng
+ movs r4, 0
+_08011B38:
+ bl Random
+ ldr r1, =gSaveBlock2Ptr
+ ldr r1, [r1]
+ adds r1, 0xA
+ adds r1, r4
+ strb r0, [r1]
+ adds r4, 0x1
+ cmp r4, 0x3
+ ble _08011B38
+ movs r1, 0xAA
+ lsls r1, 5
+ movs r0, 0
+ bl SetGpuReg
+ bl RunTasks
+ bl AnimateSprites
+ bl BuildOamBuffer
+ bl UpdatePaletteFade
+ bl sub_8011BA4
+ ldr r0, =sub_8011BF8
+ bl SetMainCallback2
+_08011B70:
+ pop {r4}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011AFC
+
+ thumb_func_start sub_8011B90
+sub_8011B90: @ 8011B90
+ push {lr}
+ ldr r0, =sub_800EB44
+ bl FuncIsActiveTask
+ lsls r0, 24
+ lsrs r0, 24
+ pop {r1}
+ bx r1
+ .pool
+ thumb_func_end sub_8011B90
+
+ thumb_func_start sub_8011BA4
+sub_8011BA4: @ 8011BA4
+ push {r4,lr}
+ ldr r4, =nullsub_89
+ adds r0, r4, 0
+ bl FuncIsActiveTask
+ lsls r0, 24
+ cmp r0, 0
+ bne _08011BC2
+ adds r0, r4, 0
+ movs r1, 0
+ bl CreateTask
+ ldr r1, =gUnknown_03005000
+ adds r1, 0x66
+ strb r0, [r1]
+_08011BC2:
+ pop {r4}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011BA4
+
+ thumb_func_start sub_8011BD0
+sub_8011BD0: @ 8011BD0
+ push {lr}
+ ldr r0, =nullsub_89
+ bl FuncIsActiveTask
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bne _08011BEA
+ ldr r0, =gUnknown_03005000
+ adds r0, 0x66
+ ldrb r0, [r0]
+ bl DestroyTask
+_08011BEA:
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011BD0
+
+ thumb_func_start sub_8011BF8
+sub_8011BF8: @ 8011BF8
+ push {lr}
+ bl RunTasks
+ bl AnimateSprites
+ bl BuildOamBuffer
+ bl UpdatePaletteFade
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8011BF8
+
+ thumb_func_start sub_8011C10
+sub_8011C10: @ 8011C10
+ push {r4-r6,lr}
+ adds r4, r0, 0
+ ldr r1, =gUnknown_03005000
+ movs r0, 0x1
+ strb r0, [r1, 0xC]
+ bl sub_8010F48
+ ldr r0, =sub_801120C
+ movs r1, 0
+ bl sub_800BF4C
+ ldr r2, =gUnknown_02022B2C
+ adds r1, r2, 0
+ ldr r0, =gUnknown_082ED608
+ ldm r0!, {r3,r5,r6}
+ stm r1!, {r3,r5,r6}
+ ldm r0!, {r3,r5,r6}
+ stm r1!, {r3,r5,r6}
+ ldr r0, =gUnknown_082ED620
+ subs r4, 0x1
+ adds r4, r0
+ ldrb r0, [r4]
+ strh r0, [r2, 0x2]
+ bl sub_800EE78
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011C10
+
+ thumb_func_start sub_8011C5C
+sub_8011C5C: @ 8011C5C
+ push {lr}
+ ldr r1, =gUnknown_03005000
+ movs r0, 0
+ strb r0, [r1, 0xC]
+ bl sub_8010F48
+ ldr r0, =sub_8011404
+ ldr r1, =sub_800ED34
+ bl sub_800BF4C
+ bl sub_800EF00
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011C5C
+
+ thumb_func_start sub_8011C84
+sub_8011C84: @ 8011C84
+ push {r4-r7,lr}
+ ldr r4, =gUnknown_03005000
+ movs r5, 0
+ movs r0, 0x2
+ strb r0, [r4, 0xC]
+ bl sub_8010F48
+ ldr r0, =sub_8011674
+ movs r1, 0
+ bl sub_800BF4C
+ ldr r2, =gUnknown_02022B2C
+ adds r1, r2, 0
+ ldr r0, =gUnknown_082ED608
+ ldm r0!, {r3,r6,r7}
+ stm r1!, {r3,r6,r7}
+ ldm r0!, {r3,r6,r7}
+ stm r1!, {r3,r6,r7}
+ strb r5, [r2, 0x11]
+ movs r0, 0x96
+ lsls r0, 2
+ strh r0, [r2, 0x12]
+ ldr r0, =sub_800EB44
+ movs r1, 0x1
+ bl CreateTask
+ adds r4, 0x67
+ strb r0, [r4]
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011C84
+
+ thumb_func_start sub_8011CD8
+sub_8011CD8: @ 8011CD8
+ ldrb r1, [r0, 0x1]
+ lsls r1, 8
+ ldrb r0, [r0]
+ orrs r0, r1
+ bx lr
+ thumb_func_end sub_8011CD8
+
+ thumb_func_start sub_8011CE4
+sub_8011CE4: @ 8011CE4
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x4
+ str r0, [sp]
+ lsls r1, 16
+ lsrs r1, 16
+ mov r10, r1
+ movs r0, 0xFF
+ mov r9, r0
+ movs r7, 0
+ ldr r1, =gUnknown_03007890
+ mov r8, r1
+_08011D02:
+ lsls r4, r7, 5
+ adds r5, r4, 0
+ adds r5, 0x14
+ mov r1, r8
+ ldr r0, [r1]
+ adds r0, r5
+ adds r0, 0x8
+ bl sub_8011CD8
+ lsls r0, 16
+ lsrs r6, r0, 16
+ mov r1, r8
+ ldr r0, [r1]
+ adds r0, r4
+ ldrh r0, [r0, 0x18]
+ bl sub_8010454
+ cmp r0, 0
+ beq _08011D4C
+ mov r0, r8
+ ldr r1, [r0]
+ adds r1, r5
+ adds r1, 0x15
+ ldr r0, [sp]
+ bl StringCompare
+ cmp r0, 0
+ bne _08011D4C
+ cmp r10, r6
+ bne _08011D4C
+ mov r9, r7
+ mov r1, r8
+ ldr r0, [r1]
+ adds r0, r4
+ ldrb r0, [r0, 0x16]
+ cmp r0, 0xFF
+ bne _08011D56
+_08011D4C:
+ adds r0, r7, 0x1
+ lsls r0, 24
+ lsrs r7, r0, 24
+ cmp r7, 0x3
+ bls _08011D02
+_08011D56:
+ mov r0, r9
+ add sp, 0x4
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ .pool
+ thumb_func_end sub_8011CE4
+
+ thumb_func_start sub_8011D6C
+sub_8011D6C: @ 8011D6C
+ push {r4-r6,lr}
+ adds r6, r0, 0
+ lsls r0, r6, 24
+ lsrs r0, 24
+ bl rfu_REQ_disconnect
+ bl rfu_waitREQComplete
+ ldr r4, =gUnknown_03005000
+ ldr r0, =0x00000ce2
+ adds r5, r4, r0
+ ldrb r0, [r5]
+ bics r0, r6
+ strb r0, [r5]
+ ldr r1, =0x00000cda
+ adds r6, r4, r1
+ ldrb r1, [r6]
+ movs r0, 0x1
+ bl rfu_clearSlot
+ ldrb r0, [r5]
+ ldr r1, =0x00000c87
+ adds r4, r1
+ adds r1, r4, 0
+ movs r2, 0x46
+ bl rfu_UNI_setSendData
+ ldrb r0, [r5]
+ bl sub_800E87C
+ strb r0, [r6]
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011D6C
+
+ thumb_func_start sub_8011DC0
+sub_8011DC0: @ 8011DC0
+ push {lr}
+ lsls r1, 16
+ lsrs r1, 16
+ bl sub_8011CE4
+ lsls r0, 24
+ lsrs r1, r0, 24
+ cmp r1, 0xFF
+ beq _08011DDA
+ movs r0, 0x1
+ lsls r0, r1
+ bl sub_8011D6C
+_08011DDA:
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8011DC0
+
+ thumb_func_start sub_8011DE0
+sub_8011DE0: @ 8011DE0
+ push {r4-r6,lr}
+ adds r4, r0, 0
+ cmp r4, 0
+ beq _08011E20
+ movs r3, 0
+ movs r2, 0
+ ldr r5, =gUnknown_03005000+0xCDE
+ adds r6, r5, 0x4
+_08011DF0:
+ adds r0, r2, r5
+ ldrb r0, [r0]
+ cmp r0, r4
+ bne _08011E0E
+ ldrb r0, [r6]
+ asrs r0, r2
+ movs r1, 0x1
+ ands r0, r1
+ cmp r0, 0
+ beq _08011E0E
+ adds r0, r1, 0
+ lsls r0, r2
+ orrs r3, r0
+ lsls r0, r3, 24
+ lsrs r3, r0, 24
+_08011E0E:
+ adds r2, 0x1
+ cmp r2, 0x3
+ ble _08011DF0
+ cmp r3, 0
+ beq _08011E20
+ adds r0, r3, 0
+ movs r1, 0x2
+ bl sub_8011E94
+_08011E20:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011DE0
+
+ thumb_func_start sub_8011E2C
+sub_8011E2C: @ 8011E2C
+ push {r4-r6,lr}
+ lsls r0, 24
+ lsrs r4, r0, 24
+ ldr r6, =gSendCmd
+ ldrh r0, [r6]
+ cmp r0, 0
+ bne _08011E7A
+ ldr r5, =gUnknown_03005000
+ ldr r1, =0x00000ce8
+ adds r0, r5, r1
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _08011E7A
+ movs r0, 0xED
+ lsls r0, 8
+ bl sub_800FD14
+ ldr r1, =gTasks
+ lsls r0, r4, 2
+ adds r0, r4
+ lsls r0, 3
+ adds r0, r1
+ ldrh r1, [r0, 0x8]
+ strh r1, [r6, 0x2]
+ ldrh r1, [r0, 0xA]
+ strh r1, [r6, 0x4]
+ ldr r1, =gUnknown_082ED695
+ movs r2, 0x8
+ ldrsh r0, [r0, r2]
+ adds r0, r1
+ ldrb r1, [r5, 0xD]
+ ldrb r0, [r0]
+ subs r1, r0
+ strb r1, [r5, 0xD]
+ ldrb r0, [r5, 0xD]
+ strh r0, [r6, 0x6]
+ adds r0, r4, 0
+ bl DestroyTask
+_08011E7A:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011E2C
+
+ thumb_func_start sub_8011E94
+sub_8011E94: @ 8011E94
+ push {r4-r6,lr}
+ adds r4, r0, 0
+ adds r6, r1, 0
+ ldr r5, =sub_8011E2C
+ adds r0, r5, 0
+ bl FindTaskIdByFunc
+ lsls r0, 24
+ lsrs r2, r0, 24
+ cmp r2, 0xFF
+ bne _08011ECC
+ adds r0, r5, 0
+ movs r1, 0x5
+ bl CreateTask
+ lsls r0, 24
+ lsrs r2, r0, 24
+ ldr r1, =gTasks
+ lsls r0, r2, 2
+ adds r0, r2
+ lsls r0, 3
+ adds r0, r1
+ strh r4, [r0, 0x8]
+ b _08011EDC
+ .pool
+_08011ECC:
+ ldr r0, =gTasks
+ lsls r1, r2, 2
+ adds r1, r2
+ lsls r1, 3
+ adds r1, r0
+ ldrh r0, [r1, 0x8]
+ orrs r4, r0
+ strh r4, [r1, 0x8]
+_08011EDC:
+ ldr r1, =gTasks
+ lsls r0, r2, 2
+ adds r0, r2
+ lsls r0, 3
+ adds r0, r1
+ strh r6, [r0, 0xA]
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011E94
+
+ thumb_func_start sub_8011EF4
+sub_8011EF4: @ 8011EF4
+ push {r4-r6,lr}
+ lsls r0, 24
+ lsrs r6, r0, 24
+ lsls r0, r6, 2
+ adds r0, r6
+ lsls r0, 3
+ ldr r1, =gTasks + 0x8
+ adds r4, r0, r1
+ bl sub_800EE94
+ lsls r0, 24
+ cmp r0, 0
+ beq _08011FA4
+ adds r0, r4, 0
+ adds r0, 0x10
+ bl sub_8011CD8
+ adds r1, r0, 0
+ lsls r1, 16
+ lsrs r1, 16
+ adds r0, r4, 0
+ bl sub_8011CE4
+ lsls r0, 24
+ lsrs r2, r0, 24
+ cmp r2, 0xFF
+ beq _08011F8C
+ ldr r0, =gUnknown_03007890
+ ldr r0, [r0]
+ lsls r1, r2, 5
+ adds r0, r1
+ ldrb r0, [r0, 0x16]
+ cmp r0, 0xFF
+ beq _08011F5C
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x00000c3d
+ adds r0, r1
+ strb r2, [r0]
+ bl sub_800EEBC
+ cmp r0, 0
+ beq _08011FAA
+ b _08011F84
+ .pool
+_08011F5C:
+ bl sub_800F7DC
+ ldrb r1, [r0, 0xA]
+ movs r5, 0x7F
+ adds r0, r5, 0
+ ands r0, r1
+ cmp r0, 0x15
+ beq _08011FA4
+ bl sub_800F7DC
+ ldrb r1, [r0, 0xA]
+ adds r0, r5, 0
+ ands r0, r1
+ cmp r0, 0x16
+ beq _08011FA4
+ movs r1, 0xE0
+ lsls r1, 7
+ movs r0, 0x2
+ bl sub_8011A64
+_08011F84:
+ adds r0, r6, 0
+ bl DestroyTask
+ b _08011FAA
+_08011F8C:
+ ldrh r0, [r4, 0x1E]
+ adds r0, 0x1
+ strh r0, [r4, 0x1E]
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x00000c3d
+ adds r0, r1
+ strb r2, [r0]
+ b _08011FAA
+ .pool
+_08011FA4:
+ ldrh r0, [r4, 0x1E]
+ adds r0, 0x1
+ strh r0, [r4, 0x1E]
+_08011FAA:
+ movs r1, 0x1E
+ ldrsh r0, [r4, r1]
+ cmp r0, 0xF0
+ ble _08011FC2
+ movs r1, 0xE0
+ lsls r1, 7
+ movs r0, 0x2
+ bl sub_8011A64
+ adds r0, r6, 0
+ bl DestroyTask
+_08011FC2:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8011EF4
+
+ thumb_func_start sub_8011FC8
+sub_8011FC8: @ 8011FC8
+ push {r4-r6,lr}
+ adds r6, r0, 0
+ lsls r5, r1, 16
+ lsrs r5, 16
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xF1
+ movs r1, 0
+ strb r1, [r0]
+ ldr r0, =sub_8011EF4
+ movs r1, 0x3
+ bl CreateTask
+ lsls r0, 24
+ lsrs r0, 24
+ lsls r4, r0, 2
+ adds r4, r0
+ lsls r4, 3
+ ldr r0, =gTasks + 0x8
+ adds r4, r0
+ adds r0, r4, 0
+ adds r1, r6, 0
+ bl StringCopy
+ strh r5, [r4, 0x10]
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_8011FC8
+
+ thumb_func_start sub_801200C
+sub_801200C: @ 801200C
+ push {r4,r5,lr}
+ adds r4, r1, 0
+ lsls r0, 16
+ lsrs r5, r0, 16
+ bl sub_800F7DC
+ ldrb r1, [r0, 0xA]
+ movs r2, 0x7F
+ adds r0, r2, 0
+ ands r0, r1
+ cmp r0, 0x45
+ bne _08012032
+ ldrb r1, [r4, 0xA]
+ adds r0, r2, 0
+ ands r0, r1
+ cmp r0, 0x45
+ beq _08012092
+_0801202E:
+ movs r0, 0x1
+ b _08012094
+_08012032:
+ ldrb r1, [r4, 0xA]
+ adds r0, r2, 0
+ ands r0, r1
+ cmp r0, 0x40
+ bne _0801202E
+ cmp r5, 0x44
+ bne _08012092
+ ldr r5, =gUnknown_03005000+0x10A
+ ldrh r0, [r5, 0x8]
+ ldr r3, =0x000003ff
+ adds r2, r3, 0
+ ands r2, r0
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r2, r0
+ bne _08012068
+ ldrh r1, [r4, 0x8]
+ adds r0, r3, 0
+ ands r0, r1
+ cmp r0, r2
+ beq _08012092
+ b _0801202E
+ .pool
+_08012068:
+ ldrh r1, [r4, 0x8]
+ adds r0, r3, 0
+ ands r0, r1
+ cmp r0, r2
+ bne _0801202E
+ ldrb r2, [r4, 0xB]
+ movs r0, 0xFE
+ ldrb r3, [r5, 0xB]
+ adds r1, r0, 0
+ ands r1, r2
+ ands r0, r3
+ cmp r1, r0
+ bne _0801202E
+ ldrb r2, [r4, 0x9]
+ movs r0, 0xFC
+ ldrb r3, [r5, 0x9]
+ adds r1, r0, 0
+ ands r1, r2
+ ands r0, r3
+ cmp r1, r0
+ bne _0801202E
+_08012092:
+ movs r0, 0
+_08012094:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_801200C
+
+ thumb_func_start sub_801209C
+sub_801209C: @ 801209C
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ lsls r0, 24
+ lsrs r5, r0, 24
+ mov r8, r5
+ ldr r6, =gUnknown_03005000
+ adds r0, r6, 0
+ adds r0, 0xF1
+ ldrb r0, [r0]
+ cmp r0, 0x4
+ bne _080120BA
+ adds r0, r5, 0
+ bl DestroyTask
+_080120BA:
+ ldr r1, =gTasks
+ lsls r0, r5, 2
+ adds r0, r5
+ lsls r0, 3
+ adds r4, r0, r1
+ ldrh r0, [r4, 0x8]
+ adds r0, 0x1
+ strh r0, [r4, 0x8]
+ lsls r0, 16
+ movs r1, 0x96
+ lsls r1, 17
+ cmp r0, r1
+ ble _080120E4
+ movs r1, 0xE0
+ lsls r1, 7
+ movs r0, 0x2
+ bl sub_8011A64
+ adds r0, r5, 0
+ bl DestroyTask
+_080120E4:
+ ldr r1, =0x00000ccd
+ adds r0, r6, r1
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _0801217C
+ ldr r0, =gUnknown_03004140
+ ldrb r0, [r0, 0x6]
+ cmp r0, 0
+ bne _0801217C
+ movs r2, 0x86
+ lsls r2, 1
+ adds r0, r6, r2
+ bl sub_8011CD8
+ adds r1, r0, 0
+ lsls r1, 16
+ lsrs r1, 16
+ ldr r2, =0x00000119
+ adds r0, r6, r2
+ bl sub_8011CE4
+ lsls r0, 24
+ lsrs r2, r0, 24
+ cmp r2, 0xFF
+ beq _0801217C
+ movs r1, 0xA
+ ldrsh r0, [r4, r1]
+ ldr r7, =gUnknown_03007890
+ lsls r4, r2, 5
+ adds r2, r4, 0
+ adds r2, 0x14
+ ldr r1, [r7]
+ adds r1, r2
+ adds r1, 0x6
+ bl sub_801200C
+ cmp r0, 0
+ bne _0801216C
+ ldr r0, [r7]
+ adds r1, r0, r4
+ ldrb r0, [r1, 0x16]
+ cmp r0, 0xFF
+ beq _0801217C
+ ldrh r0, [r1, 0x14]
+ movs r1, 0x5A
+ bl sub_800C12C
+ lsls r0, 24
+ cmp r0, 0
+ bne _0801217C
+ movs r0, 0xA
+ strh r0, [r6, 0x4]
+ adds r0, r5, 0
+ bl DestroyTask
+ b _0801217C
+ .pool
+_0801216C:
+ movs r1, 0xE0
+ lsls r1, 7
+ movs r0, 0x2
+ bl sub_8011A64
+ mov r0, r8
+ bl DestroyTask
+_0801217C:
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_801209C
+
+ thumb_func_start sub_8012188
+sub_8012188: @ 8012188
+ push {r4-r7,lr}
+ adds r3, r0, 0
+ adds r5, r1, 0
+ lsls r4, r2, 24
+ lsrs r4, 24
+ ldr r6, =gUnknown_03005000
+ ldr r1, =0x00000ccf
+ adds r0, r6, r1
+ movs r7, 0
+ strb r7, [r0]
+ adds r0, r6, 0
+ adds r0, 0xF1
+ strb r7, [r0]
+ ldr r1, =0x00000119
+ adds r0, r6, r1
+ adds r1, r3, 0
+ bl StringCopy
+ movs r1, 0x85
+ lsls r1, 1
+ adds r0, r6, r1
+ adds r1, r5, 0
+ movs r2, 0xD
+ bl memcpy
+ bl sub_800D658
+ ldr r0, =sub_801209C
+ movs r1, 0x2
+ bl CreateTask
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r5, =gTasks
+ lsls r1, r0, 2
+ adds r1, r0
+ lsls r1, 3
+ adds r1, r5
+ strh r4, [r1, 0xA]
+ ldr r0, =sub_800EB44
+ bl FindTaskIdByFunc
+ lsls r0, 24
+ lsrs r1, r0, 24
+ adds r2, r1, 0
+ cmp r4, 0x45
+ bne _08012210
+ cmp r1, 0xFF
+ beq _0801221E
+ lsls r0, r1, 2
+ adds r0, r1
+ lsls r0, 3
+ adds r0, r5
+ movs r1, 0x1
+ strh r1, [r0, 0x16]
+ b _0801221E
+ .pool
+_08012210:
+ cmp r2, 0xFF
+ beq _0801221E
+ lsls r0, r2, 2
+ adds r0, r2
+ lsls r0, 3
+ adds r0, r5
+ strh r7, [r0, 0x16]
+_0801221E:
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8012188
+
+ thumb_func_start sub_8012224
+sub_8012224: @ 8012224
+ push {lr}
+ ldr r0, =gUnknown_03005000
+ adds r0, 0xF0
+ ldrb r0, [r0]
+ cmp r0, 0x1
+ beq _08012238
+ movs r0, 0
+ b _0801223A
+ .pool
+_08012238:
+ movs r0, 0x1
+_0801223A:
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8012224
+
+ thumb_func_start sub_8012240
+sub_8012240: @ 8012240
+ push {r4,lr}
+ movs r1, 0
+ ldr r0, =gUnknown_03004140
+ ldrb r2, [r0]
+ ldr r4, =gUnknown_03005000+0xCD1
+ movs r3, 0x1
+_0801224C:
+ adds r0, r2, 0
+ asrs r0, r1
+ ands r0, r3
+ cmp r0, 0
+ beq _0801226C
+ adds r0, r1, r4
+ ldrb r0, [r0]
+ cmp r0, 0
+ bne _0801226C
+ movs r0, 0
+ b _08012274
+ .pool
+_0801226C:
+ adds r1, 0x1
+ cmp r1, 0x3
+ ble _0801224C
+ movs r0, 0x1
+_08012274:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8012240
+
+ thumb_func_start sub_801227C
+sub_801227C: @ 801227C
+ push {r4,lr}
+ movs r4, 0
+_08012280:
+ lsls r2, r4, 24
+ lsrs r2, 24
+ ldr r0, =gUnknown_082ED82C
+ movs r1, 0
+ bl nullsub_5
+ adds r4, 0x1
+ cmp r4, 0x13
+ ble _08012280
+ pop {r4}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_801227C
+
+ thumb_func_start sub_801229C
+sub_801229C: @ 801229C
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ bl GetBlockReceivedStatus
+ lsls r0, 24
+ lsrs r0, 24
+ movs r1, 0x1C
+ movs r2, 0x13
+ movs r3, 0x2
+ bl nullsub_13
+ ldr r4, =gUnknown_03007890
+ ldr r0, [r4]
+ ldrb r0, [r0, 0x2]
+ movs r1, 0x14
+ movs r2, 0x1
+ movs r3, 0x1
+ bl nullsub_13
+ ldr r0, [r4]
+ ldrb r0, [r0, 0x3]
+ movs r1, 0x17
+ movs r2, 0x1
+ movs r3, 0x1
+ bl nullsub_13
+ ldr r0, =gUnknown_03005000
+ ldrb r0, [r0, 0xC]
+ cmp r0, 0x1
+ bne _08012378
+ movs r6, 0
+ adds r7, r4, 0
+ movs r5, 0x14
+_080122E0:
+ ldr r2, [r7]
+ ldrb r0, [r2, 0x7]
+ asrs r0, r6
+ movs r1, 0x1
+ ands r0, r1
+ cmp r0, 0
+ beq _0801231E
+ lsls r0, r6, 5
+ adds r0, r2, r0
+ ldrh r0, [r0, 0x18]
+ adds r4, r6, 0x3
+ lsls r4, 24
+ lsrs r4, 24
+ adds r2, r4, 0
+ movs r3, 0x4
+ bl nullsub_13
+ ldr r0, [r7]
+ adds r0, r5
+ adds r0, 0x6
+ movs r1, 0x6
+ adds r2, r4, 0
+ bl nullsub_5
+ ldr r0, [r7]
+ adds r0, r5
+ adds r0, 0x15
+ movs r1, 0x16
+ adds r2, r4, 0
+ bl nullsub_5
+_0801231E:
+ adds r5, 0x20
+ adds r6, 0x1
+ cmp r6, 0x3
+ ble _080122E0
+ movs r6, 0
+ ldr r0, =gUnknown_03005000
+ mov r8, r0
+_0801232C:
+ movs r5, 0
+ adds r7, r6, 0x1
+ lsls r0, r6, 3
+ adds r2, r6, 0
+ adds r2, 0xB
+ subs r0, r6
+ lsls r0, 1
+ mov r1, r8
+ adds r1, 0x14
+ adds r4, r0, r1
+ lsls r6, r2, 24
+_08012342:
+ ldrb r0, [r4]
+ lsls r1, r5, 25
+ lsrs r1, 24
+ lsrs r2, r6, 24
+ movs r3, 0x2
+ bl nullsub_13
+ adds r4, 0x1
+ adds r5, 0x1
+ cmp r5, 0xD
+ ble _08012342
+ adds r6, r7, 0
+ cmp r6, 0x3
+ ble _0801232C
+ ldr r0, =gUnknown_082ED868
+ movs r1, 0x1
+ movs r2, 0xF
+ bl nullsub_5
+ b _080124AA
+ .pool
+_08012378:
+ ldr r1, [r4]
+ ldrb r0, [r1, 0x2]
+ cmp r0, 0
+ beq _08012414
+ ldrb r0, [r1, 0x7]
+ cmp r0, 0
+ beq _08012414
+ movs r6, 0
+ movs r5, 0xC0
+ lsls r5, 18
+_0801238C:
+ lsrs r4, r5, 24
+ movs r0, 0
+ movs r1, 0x1
+ adds r2, r4, 0
+ movs r3, 0x4
+ bl nullsub_13
+ ldr r0, =gUnknown_082ED84B
+ movs r1, 0x6
+ adds r2, r4, 0
+ bl nullsub_5
+ ldr r0, =gUnknown_082ED85B
+ movs r1, 0x16
+ adds r2, r4, 0
+ bl nullsub_5
+ movs r1, 0x80
+ lsls r1, 17
+ adds r5, r1
+ adds r6, 0x1
+ cmp r6, 0x3
+ ble _0801238C
+ ldr r5, =gUnknown_03007890
+ ldr r1, [r5]
+ ldr r4, =gUnknown_03005000
+ ldr r0, =0x00000c3e
+ adds r4, r0
+ ldrb r0, [r4]
+ lsls r0, 5
+ adds r1, r0
+ ldrh r0, [r1, 0x18]
+ movs r1, 0x1
+ movs r2, 0x3
+ movs r3, 0x4
+ bl nullsub_13
+ ldrb r1, [r4]
+ lsls r1, 5
+ adds r1, 0x14
+ ldr r0, [r5]
+ adds r0, r1
+ adds r0, 0x6
+ movs r1, 0x6
+ movs r2, 0x3
+ bl nullsub_5
+ ldrb r1, [r4]
+ lsls r1, 5
+ adds r1, 0x14
+ ldr r0, [r5]
+ adds r0, r1
+ adds r0, 0x15
+ movs r1, 0x16
+ movs r2, 0x3
+ bl nullsub_5
+ b _080124AA
+ .pool
+_08012414:
+ movs r6, 0
+ ldr r1, =gUnknown_03007890
+ ldr r0, [r1]
+ ldrb r0, [r0, 0x8]
+ cmp r6, r0
+ bge _08012470
+ adds r7, r1, 0
+ movs r1, 0x14
+ mov r8, r1
+_08012426:
+ ldr r0, [r7]
+ lsls r5, r6, 5
+ adds r1, r0, r5
+ ldrb r0, [r1, 0x16]
+ cmp r0, 0xFF
+ beq _08012462
+ ldrh r0, [r1, 0x18]
+ adds r4, r6, 0x3
+ lsls r4, 24
+ lsrs r4, 24
+ movs r1, 0x1
+ adds r2, r4, 0
+ movs r3, 0x4
+ bl nullsub_13
+ ldr r0, [r7]
+ adds r0, r5
+ ldrh r0, [r0, 0x14]
+ movs r1, 0x6
+ adds r2, r4, 0
+ movs r3, 0x4
+ bl nullsub_13
+ ldr r0, [r7]
+ add r0, r8
+ adds r0, 0x15
+ movs r1, 0x16
+ adds r2, r4, 0
+ bl nullsub_5
+_08012462:
+ movs r0, 0x20
+ add r8, r0
+ adds r6, 0x1
+ ldr r0, [r7]
+ ldrb r0, [r0, 0x8]
+ cmp r6, r0
+ blt _08012426
+_08012470:
+ cmp r6, 0x3
+ bgt _080124AA
+ lsls r0, r6, 24
+ movs r1, 0xC0
+ lsls r1, 18
+ adds r5, r0, r1
+_0801247C:
+ lsrs r4, r5, 24
+ movs r0, 0
+ movs r1, 0x1
+ adds r2, r4, 0
+ movs r3, 0x4
+ bl nullsub_13
+ ldr r0, =gUnknown_082ED84B
+ movs r1, 0x6
+ adds r2, r4, 0
+ bl nullsub_5
+ ldr r0, =gUnknown_082ED85B
+ movs r1, 0x16
+ adds r2, r4, 0
+ bl nullsub_5
+ movs r0, 0x80
+ lsls r0, 17
+ adds r5, r0
+ adds r6, 0x1
+ cmp r6, 0x3
+ ble _0801247C
+_080124AA:
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end sub_801229C
+
+ thumb_func_start sub_80124C0
+sub_80124C0: @ 80124C0
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x00000c1a
+ adds r0, r1
+ ldrb r0, [r0]
+ bx lr
+ .pool
+ thumb_func_end sub_80124C0
+
+ thumb_func_start sub_80124D4
+sub_80124D4: @ 80124D4
+ ldr r0, =gUnknown_03005000
+ ldr r1, =0x000009e6
+ adds r0, r1
+ ldrb r0, [r0]
+ bx lr
+ .pool
+ thumb_func_end sub_80124D4
+
+ .align 2, 0 @ don't pad with nop
diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc
index c5ffb5abc..083107c08 100644
--- a/asm/macros/battle_script.inc
+++ b/asm/macros/battle_script.inc
@@ -1373,11 +1373,11 @@
.endm
.macro jumpifmove move, jumpptr
- jumpifhalfword EQUAL, gCurrentMove, \move, \jumpptr
+ jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpptr
.endm
.macro jumpifnotmove move, jumpptr
- jumpifhalfword NOT_EQUAL, gCurrentMove, \move, \jumpptr
+ jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpptr
.endm
.macro jumpifstatus3 bank, status, jumpptr
@@ -1389,13 +1389,13 @@
.endm
.macro jumpifmovehadnoeffect jumpptr
- jumpifbyte COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr
+ jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr
.endm
.macro jumpifbattletype flags, jumpptr
- jumpifword COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
+ jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
.endm
.macro jumpifnotbattletype flags, jumpptr
- jumpifword NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
+ jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
.endm
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index f2d14b945..6b9227442 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -1,20 +1,20 @@
@ Does nothing.
- .macro nop
+ .macro nop
.byte 0x00
.endm
@ Does nothing.
- .macro nop1
+ .macro nop1
.byte 0x01
.endm
@ Terminates script execution.
- .macro end
+ .macro end
.byte 0x02
.endm
@ Jumps back to after the last-executed call statement, and continues script execution from there.
- .macro return
+ .macro return
.byte 0x03
.endm
@@ -71,12 +71,12 @@
.endm
@ Executes a script stored in a default RAM location.
- .macro gotoram
+ .macro gotoram
.byte 0x0c
.endm
@ Terminates script execution and "resets the script RAM".
- .macro killscript
+ .macro killscript
.byte 0x0d
.endm
@@ -271,7 +271,7 @@
.endm
@ Blocks script execution until a command or ASM code manually unblocks it. Generally used with specific commands and specials. If this command runs, and a subsequent command or piece of ASM does not unblock state, the script will remain blocked indefinitely (essentially a hang).
- .macro waitstate
+ .macro waitstate
.byte 0x27
.endm
@@ -307,12 +307,12 @@
.endm
@ Runs time based events. In FireRed, this command is a nop.
- .macro dodailyevents
+ .macro dodailyevents
.byte 0x2d
.endm
@ Sets the values of variables 0x8000, 0x8001, and 0x8002 to the current hour, minute, and second. In FRLG, this command sets those variables to zero.
- .macro gettime
+ .macro gettime
.byte 0x2e
.endm
@@ -323,7 +323,7 @@
.endm
@ Blocks script execution until the currently-playing sound (triggered by playse) finishes playing.
- .macro waitse
+ .macro waitse
.byte 0x30
.endm
@@ -334,7 +334,7 @@
.endm
@ Blocks script execution until all currently-playing fanfares finish.
- .macro waitfanfare
+ .macro waitfanfare
.byte 0x32
.endm
@@ -352,7 +352,7 @@
.endm
@ Crossfades the currently-playing song into the map's default song.
- .macro fadedefaultbgm
+ .macro fadedefaultbgm
.byte 0x35
.endm
@@ -460,7 +460,7 @@
.endm
@ Retrieves the number of Pokemon in the player's party, and stores that number in variable 0x800D (LASTRESULT).
- .macro getpartysize
+ .macro getpartysize
.byte 0x43
.endm
@@ -612,7 +612,7 @@
.endm
@ If the script was called by an Object, then that Object will turn to face toward the metatile that the player is standing on.
- .macro faceplayer
+ .macro faceplayer
.byte 0x5a
.endm
@@ -679,17 +679,17 @@
@ Starts a trainer battle using the battle information stored in RAM (usually by trainerbattle, which actually calls this command behind-the-scenes), and blocks script execution until the battle finishes.
- .macro trainerbattlebegin
+ .macro trainerbattlebegin
.byte 0x5d
.endm
@ Goes to address after the trainerbattle command (called by the battle functions, see battle_setup.c)
- .macro gotopostbattlescript
+ .macro gotopostbattlescript
.byte 0x5e
.endm
@ Goes to address specified in the trainerbattle command (called by the battle functions, see battle_setup.c)
- .macro gotobeatenscript
+ .macro gotobeatenscript
.byte 0x5f
.endm
@@ -730,7 +730,7 @@
.endm
@ If a standard message box (or its text) is being drawn on-screen, this command blocks script execution until the box and its text have been fully drawn.
- .macro waitmessage
+ .macro waitmessage
.byte 0x66
.endm
@@ -741,32 +741,32 @@
.endm
@ Closes the current message box.
- .macro closemessage
+ .macro closemessage
.byte 0x68
.endm
@ Ceases movement for all Objects on-screen.
- .macro lockall
+ .macro lockall
.byte 0x69
.endm
@ If the script was called by an Object, then that Object's movement will cease.
- .macro lock
+ .macro lock
.byte 0x6a
.endm
@ Resumes normal movement for all Objects on-screen, and closes any standard message boxes that are still open.
- .macro releaseall
+ .macro releaseall
.byte 0x6b
.endm
@ If the script was called by an Object, then that Object's movement will resume. This command also closes any standard message boxes that are still open.
- .macro release
+ .macro release
.byte 0x6c
.endm
@ Blocks script execution until the player presses any key.
- .macro waitbuttonpress
+ .macro waitbuttonpress
.byte 0x6d
.endm
@@ -807,7 +807,7 @@
.endm
@ Nopped in Emerald.
- .macro drawbox
+ .macro drawbox
.byte 0x72
.endm
@@ -838,7 +838,7 @@
.endm
@ Hides all boxes displayed with drawmonpic.
- .macro erasemonpic
+ .macro erasemonpic
.byte 0x76
.endm
@@ -978,22 +978,22 @@
.endm
@ This allows you to choose a Pokemon to use in a contest. In FireRed, this command sets the byte at 0x03000EA8 to 0x01.
- .macro choosecontestmon
+ .macro choosecontestmon
.byte 0x8b
.endm
@ Starts a contest. In FireRed, this command is a nop.
- .macro startcontest
+ .macro startcontest
.byte 0x8c
.endm
@ Shows the results of a contest. In FireRed, this command is a nop.
- .macro showcontestresults
+ .macro showcontestresults
.byte 0x8d
.endm
@ Starts a contest over a link connection. In FireRed, this command is a nop.
- .macro contestlinktransfer
+ .macro contestlinktransfer
.byte 0x8e
.endm
@@ -1033,7 +1033,7 @@
.endm
@ Hides the secondary box spawned by showmoney.
- .macro hidemoneybox
+ .macro hidemoneybox
.byte 0x94
.endm
@@ -1104,7 +1104,7 @@
.endm
@ Checks the player's gender. If male, then 0x0000 is stored in variable 0x800D (LASTRESULT). If female, then 0x0001 is stored in LASTRESULT.
- .macro checkplayergender
+ .macro checkplayergender
.byte 0xa0
.endm
@@ -1125,7 +1125,7 @@
.endm
@ Queues a weather change to the default weather for the map.
- .macro resetweather
+ .macro resetweather
.byte 0xa3
.endm
@@ -1136,7 +1136,7 @@
.endm
@ Executes the weather change queued with resetweather or setweather. The current weather will smoothly fade into the queued weather.
- .macro doweather
+ .macro doweather
.byte 0xa5
.endm
@@ -1195,7 +1195,7 @@
.endm
@ Waits for the door animation started with opendoor or closedoor to finish.
- .macro waitdooranim
+ .macro waitdooranim
.byte 0xae
.endm
@@ -1223,7 +1223,7 @@
.endm
@ In FireRed and Emerald, this command is a nop.
- .macro showelevmenu
+ .macro showelevmenu
.byte 0xb2
.endm
@@ -1251,7 +1251,7 @@
.endm
@ Starts a wild battle against the Pokemon generated by setwildbattle. Blocks script execution until the battle finishes.
- .macro dowildbattle
+ .macro dowildbattle
.byte 0xb7
.endm
@@ -1335,7 +1335,7 @@
.endm
@ Blocks script execution until cry finishes.
- .macro waitmoncry
+ .macro waitmoncry
.byte 0xc5
.endm
@@ -1359,17 +1359,17 @@
.endm
@ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom of the screen when the Main Menu is opened.
- .macro unloadhelp
+ .macro unloadhelp
.byte 0xc9
.endm
@ After using this command, all standard message boxes will use the signpost frame.
- .macro signmsg
+ .macro signmsg
.byte 0xca
.endm
@ Ends the effects of signmsg, returning message box frames to normal.
- .macro normalmsg
+ .macro normalmsg
.byte 0xcb
.endm
@@ -1393,7 +1393,7 @@
.endm
@ Depending on factors I haven't managed to understand yet, this command may cause script execution to jump to the offset specified by the pointer at 0x020375C0.
- .macro execram
+ .macro execram
.byte 0xcf
.endm
@@ -1424,7 +1424,7 @@
.2byte \unknown
.endm
- .macro mossdeepgym2
+ .macro mossdeepgym2
.byte 0xd4
.endm
@@ -1434,7 +1434,7 @@
.2byte \var
.endm
- .macro mossdeepgym4
+ .macro mossdeepgym4
.byte 0xd6
.endm
@@ -1446,15 +1446,15 @@
.2byte \word2
.endm
- .macro cmdD8
+ .macro cmdD8
.byte 0xd8
.endm
- .macro cmdD9
+ .macro cmdD9
.byte 0xd9
.endm
- .macro hidebox2
+ .macro hidebox2
.byte 0xda
.endm
@@ -1519,7 +1519,7 @@
.endm
.macro case condition, dest
- compare_var_to_value 0x8000, \condition
+ compare 0x8000, \condition
goto_eq \dest
.endm
diff --git a/asm/overworld.s b/asm/overworld.s
index 492fcd2cb..64ee678df 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -3180,7 +3180,7 @@ CB2_NewGame: @ 8085EF8
ldr r1, =gUnknown_03005DB0
movs r0, 0
str r0, [r1]
- ldr r0, =gUnknown_030026F8
+ ldr r0, =gMain+0x438
bl do_load_map_stuff_loop
bl SetFieldVBlankCallback
ldr r0, =c1_overworld
@@ -3255,7 +3255,7 @@ c2_load_new_map: @ 8085FCC
thumb_func_start c2_load_new_map_2
c2_load_new_map_2: @ 8085FFC
push {lr}
- ldr r0, =gUnknown_030026F8
+ ldr r0, =gMain+0x438
bl do_load_map_stuff_loop
bl SetFieldVBlankCallback
ldr r0, =c1_overworld
@@ -3317,7 +3317,7 @@ sub_8086074: @ 8086074
thumb_func_start c2_80567AC
c2_80567AC: @ 8086098
push {lr}
- ldr r0, =gUnknown_030026F8
+ ldr r0, =gMain+0x438
bl map_loading_iteration_3
cmp r0, 0
beq _080860B8
@@ -3356,7 +3356,7 @@ _080860EA:
thumb_func_start c2_exit_to_overworld_2_local
c2_exit_to_overworld_2_local: @ 80860F4
push {lr}
- ldr r0, =gUnknown_030026F8
+ ldr r0, =gMain+0x438
bl sub_8086638
cmp r0, 0
beq _0808610A
@@ -3375,7 +3375,7 @@ c2_exit_to_overworld_2_link: @ 8086118
bl sub_8087598
cmp r0, 0
bne _08086132
- ldr r0, =gUnknown_030026F8
+ ldr r0, =gMain+0x438
bl map_loading_iteration_2_link
cmp r0, 0
beq _08086132
@@ -3395,7 +3395,7 @@ c2_8056854: @ 8086140
ldr r0, =c1_link_related
bl set_callback1
bl sub_8086C2C
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08086174
@@ -3586,7 +3586,7 @@ sub_808631C: @ 808631C
bne _0808632E
bl CloseLink
_0808632E:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08086348
@@ -3768,14 +3768,14 @@ _080864DA:
bl cur_mapheader_run_tileset_funcs_after_some_cpuset
b _08086506
_080864E0:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08086506
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
b _08086506
.pool
_080864FC:
@@ -4056,14 +4056,14 @@ _08086766:
bl cur_mapheader_run_tileset_funcs_after_some_cpuset
b _08086792
_0808676C:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08086792
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
b _08086792
.pool
_08086788:
@@ -4565,7 +4565,7 @@ _08086BCA:
thumb_func_start c1_link_related
c1_link_related: @ 8086BD8
push {r4,lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08086BF2
@@ -4578,7 +4578,7 @@ c1_link_related: @ 8086BD8
_08086BF2:
ldr r0, =gUnknown_03005DB4
ldrb r4, [r0]
- ldr r0, =gUnknown_03003020
+ ldr r0, =gLinkPartnersHeldKeys
adds r1, r4, 0
bl sub_8086F38
ldr r0, =gUnknown_03000E14
@@ -4610,7 +4610,7 @@ sub_8086C2C: @ 8086C2C
thumb_func_start sub_8086C40
sub_8086C40: @ 8086C40
push {lr}
- ldr r0, =gUnknown_03003020
+ ldr r0, =gLinkPartnersHeldKeys
bl sub_808709C
pop {r0}
bx r0
@@ -4631,7 +4631,7 @@ c1_link_related_func_set: @ 8086C50
thumb_func_start sub_8086C64
sub_8086C64: @ 8086C64
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08086C82
@@ -5029,7 +5029,7 @@ _08086FC0:
movs r0, 0x11
strh r0, [r1]
_08086FC6:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08086FFC
@@ -5926,7 +5926,7 @@ _08087666:
thumb_func_start sub_808766C
sub_808766C: @ 808766C
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _08087688
@@ -5946,11 +5946,11 @@ _0808768A:
thumb_func_start sub_8087690
sub_8087690: @ 8087690
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _080876B0
- ldr r0, =gUnknown_03003170
+ ldr r0, =gLink
ldr r1, =0x00000339
adds r0, r1
ldrb r0, [r0]
diff --git a/asm/party_menu.s b/asm/party_menu.s
index a70baf3df..6e134d444 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -11943,7 +11943,7 @@ _081B6558:
adds r1, r5, 0
_081B6572:
adds r3, r6, 0
- bl ExecuteTableBasedItemEffect_
+ bl ExecuteTableBasedItemEffect
lsls r0, 24
lsrs r0, 24
pop {r4-r6}
@@ -16302,7 +16302,7 @@ _081B8BA8:
movs r0, 0x1
strb r0, [r1]
ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBankInMenu
+ ldr r0, =gBattlerInMenuId
ldrb r0, [r0]
lsls r0, 1
adds r0, r1
@@ -16334,7 +16334,7 @@ _081B8BFC:
b _081B8C42
.pool
_081B8C20:
- ldr r0, =gBankInMenu
+ ldr r0, =gBattlerInMenuId
ldrb r0, [r0]
ldr r1, =gBattlerPartyIndexes
lsls r0, 1
diff --git a/asm/pokemon_1.s b/asm/pokemon_1.s
deleted file mode 100644
index 5dbfb2ee3..000000000
--- a/asm/pokemon_1.s
+++ /dev/null
@@ -1,2016 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
-
- thumb_func_start sub_8068528
-sub_8068528: @ 8068528
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- adds r7, r0, 0
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- ldr r6, =gUnknown_08610970
- ldrb r0, [r1]
- lsls r3, r0, 27
- lsrs r1, r3, 27
- movs r5, 0x58
- muls r1, r5
- adds r1, r6
- ldrh r1, [r1, 0x30]
- mov r8, r1
- lsrs r1, r3, 27
- muls r1, r5
- adds r1, r6
- ldrh r4, [r1, 0x30]
- lsrs r4, 8
- lsrs r3, 27
- adds r1, r3, 0
- muls r1, r5
- adds r1, r6
- ldrh r3, [r1, 0x30]
- movs r1, 0xFF
- ands r1, r3
- lsls r1, 8
- lsls r5, r2, 1
- adds r5, r2
- lsls r5, 2
- mov r2, r9
- adds r6, r2, r5
- orrs r4, r1
- ldrh r1, [r6, 0x4]
- adds r4, r1
- ldrb r1, [r2, 0x2]
- adds r4, r1
- lsls r0, 25
- lsrs r0, 30
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- bl BattleFrontierGetOpponentLvl
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldrh r1, [r6, 0x4]
- movs r0, 0x1
- str r0, [sp]
- str r4, [sp, 0x4]
- str r0, [sp, 0x8]
- mov r0, r8
- str r0, [sp, 0xC]
- adds r0, r7, 0
- movs r3, 0x1F
- bl CreateMon
- mov r1, r9
- adds r2, r5, r1
- adds r2, 0xE
- adds r0, r7, 0
- movs r1, 0xC
- bl SetMonData
- movs r4, 0
- movs r2, 0x12
- add r2, sp
- mov r8, r2
- mov r6, r9
- adds r6, 0x6
-_080685BE:
- adds r0, r6, r5
- ldrh r1, [r0]
- lsls r2, r4, 24
- lsrs r2, 24
- adds r0, r7, 0
- bl SetMonMoveSlot
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _080685BE
- movs r1, 0x55
- add r0, sp, 0x10
- strh r1, [r0]
- movs r4, 0
- mov r5, r9
- adds r5, 0x3F
-_080685E0:
- adds r1, r4, 0
- adds r1, 0x1A
- adds r0, r7, 0
- add r2, sp, 0x10
- bl SetMonData
- adds r4, 0x1
- cmp r4, 0x5
- ble _080685E0
- ldrb r0, [r5]
- mov r1, r8
- strb r0, [r1]
- adds r0, r7, 0
- movs r1, 0x3
- mov r2, r8
- bl SetMonData
- mov r2, r9
- ldrb r0, [r2]
- lsls r0, 27
- lsrs r0, 27
- mov r2, r8
- ldrb r1, [r2]
- bl sub_81A1650
- adds r2, r0, 0
- adds r0, r7, 0
- movs r1, 0x7
- bl SetMonData
- adds r0, r7, 0
- bl CalculateMonStats
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8068528
-
- thumb_func_start sub_8068634
-sub_8068634: @ 8068634
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- adds r7, r0, 0
- ldr r0, [sp, 0x38]
- ldr r4, [sp, 0x3C]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x14]
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- lsls r3, 24
- lsrs r5, r3, 24
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r4, 24
- lsrs r4, 24
- mov r8, r4
- movs r6, 0
-_08068664:
- bl Random
- adds r4, r0, 0
- bl Random
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 16
- orrs r4, r0
- adds r0, r4, 0
- bl GetNatureFromPersonality
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bne _08068664
- movs r0, 0x1
- str r0, [sp]
- str r4, [sp, 0x4]
- str r0, [sp, 0x8]
- ldr r0, [sp, 0x40]
- str r0, [sp, 0xC]
- adds r0, r7, 0
- ldr r1, [sp, 0x14]
- mov r2, r10
- mov r3, r9
- bl CreateMon
- mov r5, r8
- movs r1, 0x1
- movs r4, 0x5
-_080686A2:
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _080686AC
- adds r6, 0x1
-_080686AC:
- lsrs r5, 1
- subs r4, 0x1
- cmp r4, 0
- bge _080686A2
- movs r0, 0xFF
- lsls r0, 1
- adds r1, r6, 0
- bl __divsi3
- add r1, sp, 0x10
- strh r0, [r1]
- movs r5, 0x1
- movs r4, 0
-_080686C6:
- mov r0, r8
- ands r0, r5
- cmp r0, 0
- beq _080686DA
- adds r1, r4, 0
- adds r1, 0x1A
- adds r0, r7, 0
- add r2, sp, 0x10
- bl SetMonData
-_080686DA:
- lsls r0, r5, 25
- lsrs r5, r0, 24
- adds r4, 0x1
- cmp r4, 0x5
- ble _080686C6
- adds r0, r7, 0
- bl CalculateMonStats
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8068634
-
- thumb_func_start sub_80686FC
-sub_80686FC: @ 80686FC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- adds r6, r1, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- strh r0, [r6]
- adds r0, r7, 0
- movs r1, 0xC
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _08068726
- movs r0, 0
-_08068726:
- strh r0, [r6, 0x2]
- movs r5, 0
- movs r0, 0x2B
- adds r0, r6
- mov r8, r0
- movs r1, 0x20
- adds r1, r6
- mov r9, r1
- adds r4, r6, 0x4
-_08068738:
- adds r1, r5, 0
- adds r1, 0xD
- adds r0, r7, 0
- movs r2, 0
- bl GetMonData
- strh r0, [r4]
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08068738
- adds r0, r7, 0
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0xC]
- adds r0, r7, 0
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0xD]
- adds r0, r7, 0
- movs r1, 0x1
- movs r2, 0
- bl GetMonData
- str r0, [r6, 0x14]
- adds r0, r7, 0
- movs r1, 0x1A
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0xE]
- adds r0, r7, 0
- movs r1, 0x1B
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0xF]
- adds r0, r7, 0
- movs r1, 0x1C
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0x10]
- adds r0, r7, 0
- movs r1, 0x1D
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0x11]
- adds r0, r7, 0
- movs r1, 0x1E
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0x12]
- adds r0, r7, 0
- movs r1, 0x1F
- movs r2, 0
- bl GetMonData
- strb r0, [r6, 0x13]
- adds r0, r7, 0
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- mov r1, r8
- strb r0, [r1]
- adds r0, r7, 0
- movs r1, 0x27
- movs r2, 0
- bl GetMonData
- movs r4, 0x1F
- ands r0, r4
- ldrb r2, [r6, 0x18]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r6, 0x18]
- adds r0, r7, 0
- movs r1, 0x28
- movs r2, 0
- bl GetMonData
- movs r5, 0x1F
- ands r0, r5
- lsls r0, 5
- ldrh r2, [r6, 0x18]
- ldr r1, =0xfffffc1f
- ands r1, r2
- orrs r1, r0
- strh r1, [r6, 0x18]
- adds r0, r7, 0
- movs r1, 0x29
- movs r2, 0
- bl GetMonData
- ands r0, r4
- lsls r0, 2
- ldrb r2, [r6, 0x19]
- movs r1, 0x7D
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r6, 0x19]
- adds r0, r7, 0
- movs r1, 0x2A
- movs r2, 0
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [r6, 0x18]
- ldr r2, =0xfff07fff
- ands r0, r2
- orrs r0, r1
- str r0, [r6, 0x18]
- adds r0, r7, 0
- movs r1, 0x2B
- movs r2, 0
- bl GetMonData
- ands r0, r5
- lsls r0, 4
- ldrh r2, [r6, 0x1A]
- ldr r1, =0xfffffe0f
- ands r1, r2
- orrs r1, r0
- strh r1, [r6, 0x1A]
- adds r0, r7, 0
- movs r1, 0x2C
- movs r2, 0
- bl GetMonData
- ands r0, r4
- lsls r0, 1
- ldrb r2, [r6, 0x1B]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r6, 0x1B]
- adds r0, r7, 0
- movs r1, 0x2E
- movs r2, 0
- bl GetMonData
- lsls r0, 7
- ldrb r2, [r6, 0x1B]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r6, 0x1B]
- adds r0, r7, 0
- movs r1, 0
- movs r2, 0
- bl GetMonData
- str r0, [r6, 0x1C]
- adds r0, r7, 0
- movs r1, 0x2
- mov r2, r9
- bl GetMonData
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80686FC
-
- thumb_func_start CreateObedientMon
-CreateObedientMon: @ 80688A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- mov r8, r0
- ldr r4, [sp, 0x2C]
- ldr r6, [sp, 0x30]
- ldr r5, [sp, 0x34]
- ldr r7, [sp, 0x38]
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x1
- str r0, [sp, 0x10]
- str r4, [sp]
- str r6, [sp, 0x4]
- str r5, [sp, 0x8]
- str r7, [sp, 0xC]
- mov r0, r8
- bl CreateMon
- mov r0, r8
- movs r1, 0x50
- add r2, sp, 0x10
- bl SetMonData
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end CreateObedientMon
-
- thumb_func_start sub_80688F8
-sub_80688F8: @ 80688F8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0x5
- bhi _080689CE
- lsls r0, 2
- ldr r1, =_08068914
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08068914:
- .4byte _080689CE
- .4byte _0806892C
- .4byte _08068A00
- .4byte _08068958
- .4byte _08068A00
- .4byte _08068990
-_0806892C:
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080689CE
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080689CE
- b _080689B6
- .pool
-_08068958:
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080689CE
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080689CE
- cmp r5, 0x1
- beq _08068A00
- cmp r5, 0x4
- beq _08068A00
- cmp r5, 0x5
- beq _08068A00
- b _080689CE
- .pool
-_08068990:
- ldr r0, =gBattleTypeFlags
- ldr r2, [r0]
- movs r3, 0x2
- adds r0, r2, 0
- ands r0, r3
- cmp r0, 0
- beq _080689E4
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080689CE
- movs r0, 0x40
- ands r2, r0
- cmp r2, 0
- beq _080689F4
-_080689B6:
- ldr r4, =gLinkPlayers
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r1, 0x18]
- cmp r0, r5
- bne _08068A00
-_080689CE:
- movs r0, 0
- b _08068A02
- .pool
-_080689E4:
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080689CE
-_080689F4:
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _080689CE
-_08068A00:
- movs r0, 0x1
-_08068A02:
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80688F8
-
- thumb_func_start GetDeoxysStat
-GetDeoxysStat: @ 8068A10
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08068A34
- adds r0, r5, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- movs r1, 0xCD
- lsls r1, 1
- cmp r0, r1
- beq _08068A3C
-_08068A34:
- movs r0, 0
- b _08068A9A
- .pool
-_08068A3C:
- adds r1, r6, 0
- adds r1, 0x27
- adds r0, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- adds r1, r6, 0
- adds r1, 0x1A
- adds r0, r5, 0
- movs r2, 0
- bl GetMonData
- ldr r2, =gUnknown_08329D48
- lsls r1, r6, 1
- adds r1, r2
- ldrh r1, [r1]
- lsls r1, 1
- adds r1, r4
- cmp r0, 0
- bge _08068A68
- adds r0, 0x3
-_08068A68:
- asrs r0, 2
- adds r0, r1, r0
- adds r1, r5, 0
- adds r1, 0x54
- ldrb r1, [r1]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, 0x5
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r5, 0
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r6, 24
- lsrs r2, 24
- adds r1, r4, 0
- bl nature_stat_mod
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
-_08068A9A:
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetDeoxysStat
-
- thumb_func_start sub_8068AA4
-sub_8068AA4: @ 8068AA4
- push {r4,r5,lr}
- sub sp, 0x4
- movs r5, 0
-_08068AAA:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- movs r1, 0xCD
- lsls r1, 1
- cmp r0, r1
- bne _08068B34
- adds r0, r4, 0
- movs r1, 0x3B
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x3B
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3C
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x3C
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3D
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x3D
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3E
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x3E
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3F
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x3F
- mov r2, sp
- bl SetMonData
-_08068B34:
- adds r5, 0x1
- cmp r5, 0x5
- ble _08068AAA
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8068AA4
-
- thumb_func_start sub_8068B48
-sub_8068B48: @ 8068B48
- push {lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08068B6C
- ldr r0, =gUnknown_0203C7B4
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- b _08068B78
- .pool
-_08068B6C:
- bl GetMultiplayerId
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
-_08068B78:
- ldr r3, =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r0, r3, 0x4
- adds r0, r1, r0
- ldr r2, [r0]
- movs r0, 0x7
- ands r2, r0
- adds r1, r3
- ldrb r0, [r1, 0x13]
- lsls r0, 3
- orrs r2, r0
- ldr r0, =gUnknown_08329D54
- lsls r2, 1
- adds r2, r0
- ldrh r0, [r2]
- bl sub_806EFF0
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8068B48
-
- thumb_func_start sub_8068BB0
-sub_8068BB0: @ 8068BB0
- push {lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _08068BD4
- ldr r0, =gUnknown_0203C7B4
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- b _08068BE0
- .pool
-_08068BD4:
- bl GetMultiplayerId
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
-_08068BE0:
- ldr r3, =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r0, r3, 0x4
- adds r0, r1, r0
- ldr r2, [r0]
- movs r0, 0x7
- ands r2, r0
- adds r1, r3
- ldrb r0, [r1, 0x13]
- lsls r0, 3
- orrs r2, r0
- ldr r1, =gFacilityClassToTrainerClass
- ldr r0, =gUnknown_08329D54
- lsls r2, 1
- adds r2, r0
- ldrh r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8068BB0
-
- thumb_func_start DoScriptedWildBattle
-DoScriptedWildBattle: @ 8068C18
- push {r4-r7,lr}
- sub sp, 0x14
- ldr r0, =gSpecialVar_0x8004
- ldrh r5, [r0]
- ldr r0, =gSpecialVar_0x8005
- ldrh r4, [r0]
- ldr r0, =gSpecialVar_0x8006
- ldrh r6, [r0]
- bl ZeroEnemyPartyMons
- ldr r7, =gEnemyParty
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- adds r0, r7, 0
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0x20
- bl CreateObedientMon
- cmp r6, 0
- beq _08068C60
- add r0, sp, 0x10
- strb r6, [r0]
- adds r1, r0, 0
- asrs r0, r6, 8
- strb r0, [r1, 0x1]
- adds r0, r7, 0
- movs r1, 0xC
- add r2, sp, 0x10
- bl SetMonData
-_08068C60:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DoScriptedWildBattle
-
- thumb_func_start CalculateBoxMonChecksum
-@ int CalculateBoxMonChecksum(pokemon *mon)
-CalculateBoxMonChecksum: @ 8068C78
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- movs r6, 0
- ldr r1, [r4]
- movs r2, 0
- bl GetSubstruct
- adds r5, r0, 0
- ldr r1, [r4]
- adds r0, r4, 0
- movs r2, 0x1
- bl GetSubstruct
- adds r7, r0, 0
- ldr r1, [r4]
- adds r0, r4, 0
- movs r2, 0x2
- bl GetSubstruct
- mov r8, r0
- ldr r1, [r4]
- adds r0, r4, 0
- movs r2, 0x3
- bl GetSubstruct
- adds r3, r0, 0
- movs r1, 0x5
-_08068CB2:
- ldrh r0, [r5]
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
- adds r5, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _08068CB2
- adds r2, r7, 0
- movs r1, 0x5
-_08068CC6:
- ldrh r0, [r2]
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _08068CC6
- mov r2, r8
- movs r1, 0x5
-_08068CDA:
- ldrh r0, [r2]
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _08068CDA
- adds r2, r3, 0
- movs r1, 0x5
-_08068CEE:
- ldrh r0, [r2]
- adds r0, r6, r0
- lsls r0, 16
- lsrs r6, r0, 16
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _08068CEE
- adds r0, r6, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CalculateBoxMonChecksum
-
- thumb_func_start CalculateMonStats
-CalculateMonStats: @ 8068D0C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x40
- adds r5, r0, 0
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- mov r8, r0
- adds r0, r5, 0
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x1C]
- adds r0, r5, 0
- movs r1, 0x27
- movs r2, 0
- bl GetMonData
- adds r6, r0, 0
- adds r0, r5, 0
- movs r1, 0x1A
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- adds r0, r5, 0
- movs r1, 0x28
- movs r2, 0
- bl GetMonData
- mov r10, r0
- adds r0, r5, 0
- movs r1, 0x1B
- movs r2, 0
- bl GetMonData
- mov r9, r0
- adds r0, r5, 0
- movs r1, 0x29
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x20]
- adds r0, r5, 0
- movs r1, 0x1C
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x24]
- adds r0, r5, 0
- movs r1, 0x2A
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x28]
- adds r0, r5, 0
- movs r1, 0x1D
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x2C]
- adds r0, r5, 0
- movs r1, 0x2B
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x30]
- adds r0, r5, 0
- movs r1, 0x1E
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x34]
- adds r0, r5, 0
- movs r1, 0x2C
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x38]
- adds r0, r5, 0
- movs r1, 0x1F
- movs r2, 0
- bl GetMonData
- str r0, [sp, 0x3C]
- adds r0, r5, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r5, 0
- bl GetLevelFromMonExp
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0x38
- mov r2, sp
- bl SetMonData
- ldr r0, =0x0000012f
- cmp r7, r0
- bne _08068DF8
- movs r0, 0x1
- str r0, [sp, 0x4]
- lsls r6, r7, 3
- b _08068E26
- .pool
-_08068DF8:
- ldr r1, =gBaseStats
- lsls r2, r7, 3
- subs r0, r2, r7
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r1, r0, r6
- adds r0, r4, 0
- adds r6, r2, 0
- cmp r0, 0
- bge _08068E12
- adds r0, 0x3
-_08068E12:
- asrs r0, 2
- adds r0, r1, r0
- ldr r4, [sp]
- muls r0, r4
- movs r1, 0x64
- bl __divsi3
- adds r0, r4
- adds r0, 0xA
- str r0, [sp, 0x4]
-_08068E26:
- ldr r1, =gBattleScripting
- add r2, sp, 0x4
- ldrb r0, [r2]
- mov r3, r8
- subs r0, r3
- adds r1, 0x23
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _08068E3E
- movs r0, 0x1
- strb r0, [r1]
-_08068E3E:
- adds r0, r5, 0
- movs r1, 0x3A
- bl SetMonData
- ldr r0, =gBaseStats
- subs r1, r6, r7
- lsls r1, 2
- adds r6, r1, r0
- ldrb r0, [r6, 0x1]
- lsls r0, 1
- mov r2, r10
- adds r1, r0, r2
- mov r0, r9
- cmp r0, 0
- bge _08068E5E
- adds r0, 0x3
-_08068E5E:
- asrs r0, 2
- adds r0, r1, r0
- ldr r1, [sp]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, 0x5
- str r0, [sp, 0x8]
- adds r0, r5, 0
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- add r4, sp, 0x8
- ldrh r1, [r4]
- movs r2, 0x1
- bl nature_stat_mod
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- adds r0, r5, 0
- movs r1, 0x3B
- adds r2, r4, 0
- bl SetMonData
- ldrb r0, [r6, 0x2]
- lsls r0, 1
- ldr r3, [sp, 0x20]
- adds r1, r0, r3
- ldr r0, [sp, 0x24]
- cmp r0, 0
- bge _08068EA4
- adds r0, 0x3
-_08068EA4:
- asrs r0, 2
- adds r0, r1, r0
- ldr r1, [sp]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, 0x5
- str r0, [sp, 0xC]
- adds r0, r5, 0
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- add r4, sp, 0xC
- ldrh r1, [r4]
- movs r2, 0x2
- bl nature_stat_mod
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r1, 0x3C
- adds r2, r4, 0
- bl SetMonData
- ldrb r0, [r6, 0x3]
- lsls r0, 1
- ldr r2, [sp, 0x28]
- adds r1, r0, r2
- ldr r0, [sp, 0x2C]
- cmp r0, 0
- bge _08068EEA
- adds r0, 0x3
-_08068EEA:
- asrs r0, 2
- adds r0, r1, r0
- ldr r1, [sp]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, 0x5
- str r0, [sp, 0x10]
- adds r0, r5, 0
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- add r4, sp, 0x10
- ldrh r1, [r4]
- movs r2, 0x3
- bl nature_stat_mod
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0x3D
- adds r2, r4, 0
- bl SetMonData
- ldrb r0, [r6, 0x4]
- lsls r0, 1
- ldr r3, [sp, 0x30]
- adds r1, r0, r3
- ldr r0, [sp, 0x34]
- cmp r0, 0
- bge _08068F30
- adds r0, 0x3
-_08068F30:
- asrs r0, 2
- adds r0, r1, r0
- ldr r1, [sp]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, 0x5
- str r0, [sp, 0x14]
- adds r0, r5, 0
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- add r4, sp, 0x14
- ldrh r1, [r4]
- movs r2, 0x4
- bl nature_stat_mod
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x14]
- adds r0, r5, 0
- movs r1, 0x3E
- adds r2, r4, 0
- bl SetMonData
- ldrb r0, [r6, 0x5]
- lsls r0, 1
- ldr r2, [sp, 0x38]
- adds r1, r0, r2
- ldr r0, [sp, 0x3C]
- cmp r0, 0
- bge _08068F76
- adds r0, 0x3
-_08068F76:
- asrs r0, 2
- adds r0, r1, r0
- ldr r1, [sp]
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, 0x5
- str r0, [sp, 0x18]
- adds r0, r5, 0
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- add r4, sp, 0x18
- ldrh r1, [r4]
- movs r2, 0x5
- bl nature_stat_mod
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x18]
- adds r0, r5, 0
- movs r1, 0x3F
- adds r2, r4, 0
- bl SetMonData
- ldr r0, =0x0000012f
- cmp r7, r0
- bne _08068FD0
- ldr r0, [sp, 0x1C]
- cmp r0, 0
- bne _08068FBE
- mov r3, r8
- cmp r3, 0
- bne _08068FF4
-_08068FBE:
- movs r0, 0x1
- b _08068FE8
- .pool
-_08068FD0:
- ldr r1, [sp, 0x1C]
- cmp r1, 0
- bne _08068FE0
- mov r0, r8
- cmp r0, 0
- bne _08068FF4
- ldr r0, [sp, 0x4]
- b _08068FE8
-_08068FE0:
- ldr r0, [sp, 0x4]
- mov r2, r8
- subs r0, r2
- adds r0, r1, r0
-_08068FE8:
- str r0, [sp, 0x1C]
- add r2, sp, 0x1C
- adds r0, r5, 0
- movs r1, 0x39
- bl SetMonData
-_08068FF4:
- add sp, 0x40
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end CalculateMonStats
-
- thumb_func_start BoxMonToMon
-BoxMonToMon: @ 8069004
- push {r4,lr}
- sub sp, 0x4
- adds r2, r0, 0
- adds r4, r1, 0
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- adds r1, r2, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x39
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x3A
- mov r2, sp
- bl SetMonData
- movs r0, 0xFF
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x40
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- bl CalculateMonStats
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end BoxMonToMon
-
- thumb_func_start GetLevelFromMonExp
-GetLevelFromMonExp: @ 8069054
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- adds r3, r0, 0
- movs r2, 0x1
- ldr r6, =gExperienceTables
- ldr r1, =gBaseStats
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x13]
- movs r5, 0xCA
- lsls r5, 1
- muls r0, r5
- adds r0, 0x4
- adds r0, r6
- ldr r0, [r0]
- cmp r0, r3
- bhi _080690AA
- adds r4, r1, 0
-_08069094:
- adds r2, 0x1
- cmp r2, 0x64
- bgt _080690AA
- lsls r1, r2, 2
- ldrb r0, [r4, 0x13]
- muls r0, r5
- adds r1, r0
- adds r1, r6
- ldr r0, [r1]
- cmp r0, r3
- bls _08069094
-_080690AA:
- subs r0, r2, 0x1
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetLevelFromMonExp
-
- thumb_func_start GetLevelFromBoxMonExp
-GetLevelFromBoxMonExp: @ 80690C0
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r1, 0xB
- movs r2, 0
- bl GetBoxMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x19
- movs r2, 0
- bl GetBoxMonData
- adds r3, r0, 0
- movs r2, 0x1
- ldr r6, =gExperienceTables
- ldr r1, =gBaseStats
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1, 0x13]
- movs r5, 0xCA
- lsls r5, 1
- muls r0, r5
- adds r0, 0x4
- adds r0, r6
- ldr r0, [r0]
- cmp r0, r3
- bhi _08069116
- adds r4, r1, 0
-_08069100:
- adds r2, 0x1
- cmp r2, 0x64
- bgt _08069116
- lsls r1, r2, 2
- ldrb r0, [r4, 0x13]
- muls r0, r5
- adds r1, r0
- adds r1, r6
- ldr r0, [r1]
- cmp r0, r3
- bls _08069100
-_08069116:
- subs r0, r2, 0x1
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetLevelFromBoxMonExp
-
- thumb_func_start GiveMoveToMon
-GiveMoveToMon: @ 806912C
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- bl GiveMoveToBoxMon
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end GiveMoveToMon
-
- thumb_func_start GiveMoveToBoxMon
-GiveMoveToBoxMon: @ 8069140
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- mov r0, sp
- strh r1, [r0]
- movs r5, 0
- mov r6, sp
-_0806914E:
- adds r4, r5, 0
- adds r4, 0xD
- adds r0, r7, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetBoxMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _0806918C
- adds r0, r7, 0
- adds r1, r4, 0
- mov r2, sp
- bl SetBoxMonData
- adds r1, r5, 0
- adds r1, 0x11
- ldrh r0, [r6]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, =gBattleMoves + 0x4 @ PP offset
- adds r2, r0
- adds r0, r7, 0
- bl SetBoxMonData
- ldrh r0, [r6]
- b _080691A4
- .pool
-_0806918C:
- ldrh r1, [r6]
- cmp r0, r1
- bne _0806919C
- ldr r0, =0x0000fffe
- b _080691A4
- .pool
-_0806919C:
- adds r5, 0x1
- cmp r5, 0x3
- ble _0806914E
- ldr r0, =0x0000ffff
-_080691A4:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GiveMoveToBoxMon
-
- thumb_func_start GiveMoveToBattleMon
-GiveMoveToBattleMon: @ 80691B0
- push {r4,r5,lr}
- lsls r1, 16
- lsrs r4, r1, 16
- movs r3, 0
- adds r5, r0, 0
- adds r5, 0x24
- ldr r2, =gBattleMoves
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r2, r1, r2
- adds r1, r0, 0
- adds r1, 0xC
-_080691CA:
- ldrh r0, [r1]
- cmp r0, 0
- bne _080691E0
- strh r4, [r1]
- adds r1, r5, r3
- ldrb r0, [r2, 0x4]
- strb r0, [r1]
- adds r0, r4, 0
- b _080691EA
- .pool
-_080691E0:
- adds r1, 0x2
- adds r3, 0x1
- cmp r3, 0x3
- ble _080691CA
- ldr r0, =0x0000ffff
-_080691EA:
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GiveMoveToBattleMon
-
- thumb_func_start SetMonMoveSlot
-SetMonMoveSlot: @ 80691F4
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r4, r2, 0
- mov r0, sp
- strh r1, [r0]
- lsls r4, 24
- lsrs r4, 24
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r5, 0
- mov r2, sp
- bl SetMonData
- adds r4, 0x11
- mov r0, sp
- ldrh r0, [r0]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, =gBattleMoves + 0x4 @ PP offset
- adds r2, r0
- adds r0, r5, 0
- adds r1, r4, 0
- bl SetMonData
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end SetMonMoveSlot
-
- thumb_func_start SetBattleMonMoveSlot
-SetBattleMonMoveSlot: @ 8069234
- push {r4,lr}
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- lsls r4, r2, 1
- adds r3, r0, 0
- adds r3, 0xC
- adds r3, r4
- strh r1, [r3]
- adds r0, 0x24
- adds r0, r2
- ldr r3, =gBattleMoves
- lsls r2, r1, 1
- adds r2, r1
- lsls r2, 2
- adds r2, r3
- ldrb r1, [r2, 0x4]
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end SetBattleMonMoveSlot
-
- thumb_func_start GiveMonInitialMoveset
-GiveMonInitialMoveset: @ 8069264
- push {lr}
- bl GiveBoxMonInitialMoveset
- pop {r0}
- bx r0
- thumb_func_end GiveMonInitialMoveset
-
- thumb_func_start GiveBoxMonInitialMoveset
-GiveBoxMonInitialMoveset: @ 8069270
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- movs r1, 0xB
- movs r2, 0
- bl GetBoxMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- bl GetLevelFromBoxMonExp
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, =gLevelUpLearnsets
- lsls r6, r4, 2
- adds r0, r6, r0
- ldr r0, [r0]
- ldrh r1, [r0]
- ldr r2, =0xffff0000
- lsrs r0, r2, 16
- cmp r1, r0
- beq _080692FC
- mov r9, r2
- movs r3, 0
-_080692AE:
- ldr r0, =gLevelUpLearnsets
- adds r7, r6, r0
- ldr r0, [r7]
- adds r0, r3, r0
- ldrh r2, [r0]
- movs r1, 0xFE
- lsls r1, 8
- adds r0, r1, 0
- ands r0, r2
- mov r4, r10
- lsls r1, r4, 9
- cmp r0, r1
- bgt _080692FC
- ldr r1, =0x000001ff
- adds r0, r1, 0
- adds r4, r0, 0
- ands r4, r2
- mov r0, r8
- adds r1, r4, 0
- str r3, [sp]
- bl GiveMoveToBoxMon
- lsls r0, 16
- mov r1, r9
- lsrs r5, r1, 16
- ldr r3, [sp]
- cmp r0, r9
- bne _080692F0
- mov r0, r8
- adds r1, r4, 0
- bl DeleteFirstMoveAndGiveMoveToBoxMon
- ldr r3, [sp]
-_080692F0:
- adds r3, 0x2
- ldr r0, [r7]
- adds r0, r3, r0
- ldrh r0, [r0]
- cmp r0, r5
- bne _080692AE
-_080692FC:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end GiveBoxMonInitialMoveset
-
- thumb_func_start MonTryLearningNewMove
-MonTryLearningNewMove: @ 8069318
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- lsls r4, r1, 24
- lsrs r4, 24
- movs r0, 0
- str r0, [sp]
- mov r0, r8
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- mov r0, r8
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- cmp r4, 0
- beq _080693B0
- ldr r4, =sLearningMoveTableID
- mov r1, sp
- ldrb r1, [r1]
- strb r1, [r4]
- ldr r2, =gLevelUpLearnsets
- mov r5, r9
- lsls r3, r5, 2
- adds r5, r3, r2
- ldr r0, [r5]
- ldrh r1, [r0]
- movs r7, 0xFE
- lsls r7, 8
- adds r0, r7, 0
- ands r0, r1
- adds r6, r4, 0
- mov r12, r2
- mov r1, r10
- lsls r4, r1, 9
- cmp r0, r4
- beq _080693D8
- adds r2, r6, 0
- ldr r0, =0x0000ffff
- mov r12, r0
- adds r6, r7, 0
- adds r3, r5, 0
-_08069384:
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- ldrb r0, [r2]
- ldr r1, [r3]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- cmp r1, r12
- bne _080693A8
- movs r0, 0
- b _08069404
- .pool
-_080693A8:
- adds r0, r6, 0
- ands r0, r1
- cmp r0, r4
- bne _08069384
-_080693B0:
- ldr r3, =gLevelUpLearnsets
- mov r1, r9
- lsls r4, r1, 2
- adds r1, r4, r3
- ldr r2, =sLearningMoveTableID
- ldrb r0, [r2]
- ldr r1, [r1]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0xFE
- lsls r0, 8
- ands r0, r1
- mov r5, r10
- lsls r1, r5, 9
- adds r6, r2, 0
- mov r12, r3
- adds r3, r4, 0
- cmp r0, r1
- bne _08069402
-_080693D8:
- ldr r2, =gMoveToLearn
- mov r0, r12
- adds r1, r3, r0
- ldrb r0, [r6]
- ldr r1, [r1]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, =0x000001ff
- ands r0, r1
- strh r0, [r2]
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- ldrh r1, [r2]
- mov r0, r8
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
-_08069402:
- ldr r0, [sp]
-_08069404:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end MonTryLearningNewMove
-
- thumb_func_start DeleteFirstMoveAndGiveMoveToMon
-DeleteFirstMoveAndGiveMoveToMon: @ 8069424
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- movs r4, 0
- add r7, sp, 0x8
- add r0, sp, 0xC
- mov r9, r0
- mov r5, sp
-_08069440:
- adds r1, r4, 0
- adds r1, 0xE
- adds r0, r6, 0
- movs r2, 0
- bl GetMonData
- strh r0, [r5]
- adds r1, r4, 0
- adds r1, 0x12
- adds r0, r6, 0
- movs r2, 0
- bl GetMonData
- adds r1, r7, r4
- strb r0, [r1]
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _08069440
- adds r0, r6, 0
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- mov r1, r9
- strb r0, [r1]
- ldrb r0, [r1]
- lsrs r0, 2
- strb r0, [r1]
- mov r0, sp
- mov r2, r8
- strh r2, [r0, 0x6]
- ldr r1, =gBattleMoves
- mov r2, r8
- lsls r0, r2, 1
- add r0, r8
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x4]
- strb r0, [r7, 0x3]
- movs r4, 0
- mov r5, sp
-_08069494:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- adds r2, r5, 0
- bl SetMonData
- adds r1, r4, 0
- adds r1, 0x11
- adds r2, r7, r4
- adds r0, r6, 0
- bl SetMonData
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _08069494
- adds r0, r6, 0
- movs r1, 0x15
- mov r2, r9
- bl SetMonData
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DeleteFirstMoveAndGiveMoveToMon
-
- thumb_func_start DeleteFirstMoveAndGiveMoveToBoxMon
-DeleteFirstMoveAndGiveMoveToBoxMon: @ 80694D0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- movs r4, 0
- add r7, sp, 0x8
- add r0, sp, 0xC
- mov r9, r0
- mov r5, sp
-_080694EC:
- adds r1, r4, 0
- adds r1, 0xE
- adds r0, r6, 0
- movs r2, 0
- bl GetBoxMonData
- strh r0, [r5]
- adds r1, r4, 0
- adds r1, 0x12
- adds r0, r6, 0
- movs r2, 0
- bl GetBoxMonData
- adds r1, r7, r4
- strb r0, [r1]
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x2
- ble _080694EC
- adds r0, r6, 0
- movs r1, 0x15
- movs r2, 0
- bl GetBoxMonData
- mov r1, r9
- strb r0, [r1]
- ldrb r0, [r1]
- lsrs r0, 2
- strb r0, [r1]
- mov r0, sp
- mov r2, r8
- strh r2, [r0, 0x6]
- ldr r1, =gBattleMoves
- mov r2, r8
- lsls r0, r2, 1
- add r0, r8
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x4]
- strb r0, [r7, 0x3]
- movs r4, 0
- mov r5, sp
-_08069540:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- adds r2, r5, 0
- bl SetBoxMonData
- adds r1, r4, 0
- adds r1, 0x11
- adds r2, r7, r4
- adds r0, r6, 0
- bl SetBoxMonData
- adds r5, 0x2
- adds r4, 0x1
- cmp r4, 0x3
- ble _08069540
- adds r0, r6, 0
- movs r1, 0x15
- mov r2, r9
- bl SetBoxMonData
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DeleteFirstMoveAndGiveMoveToBoxMon
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s
deleted file mode 100644
index 4301dccfd..000000000
--- a/asm/pokemon_3.s
+++ /dev/null
@@ -1,529 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
-
- thumb_func_start sub_806F160
-sub_806F160: @ 806F160
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- ldrb r0, [r6]
- lsls r0, 28
- movs r4, 0
- cmp r0, 0
- beq _0806F1EA
-_0806F176:
- ldr r0, [r6, 0xC]
- lsls r2, r4, 1
- adds r1, r2, r4
- lsls r1, 3
- adds r0, r1, r0
- ldr r3, =gUnknown_08329D98
- adds r1, r3
- ldm r1!, {r3,r5,r7}
- stm r0!, {r3,r5,r7}
- ldm r1!, {r3,r5,r7}
- stm r0!, {r3,r5,r7}
- movs r5, 0
- ldrb r3, [r6, 0x1]
- ldr r7, [r6, 0xC]
- mov r9, r7
- mov r8, r2
- ldr r0, [r6, 0x10]
- mov r12, r0
- adds r1, r4, 0x1
- mov r10, r1
- cmp r5, r3
- bcs _0806F1C8
- mov r7, r12
- ldr r1, [r6, 0x8]
- lsls r0, r4, 2
- adds r0, r1
- ldr r2, [r0]
-_0806F1AC:
- adds r0, r4, 0
- muls r0, r3
- adds r0, r5
- lsls r0, 3
- adds r0, r7
- lsls r1, r5, 11
- adds r1, r2, r1
- str r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrb r3, [r6, 0x1]
- cmp r5, r3
- bcc _0806F1AC
-_0806F1C8:
- mov r3, r8
- adds r1, r3, r4
- lsls r1, 3
- add r1, r9
- ldrb r0, [r6, 0x1]
- muls r0, r4
- lsls r0, 3
- add r0, r12
- str r0, [r1, 0xC]
- mov r5, r10
- lsls r0, r5, 16
- lsrs r4, r0, 16
- ldrb r0, [r6]
- lsls r0, 28
- lsrs r0, 28
- cmp r4, r0
- blt _0806F176
-_0806F1EA:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_806F160
-
- thumb_func_start sub_806F1FC
-sub_806F1FC: @ 806F1FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r4, r0, 0
- ldrb r0, [r4]
- lsls r0, 28
- movs r3, 0
- cmp r0, 0
- beq _0806F296
- ldr r0, =gUnknown_08329F28
- mov r10, r0
-_0806F216:
- ldr r0, [r4, 0xC]
- lsls r2, r3, 1
- adds r1, r2, r3
- lsls r1, 3
- adds r1, r0
- mov r0, r10
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- movs r5, 0
- ldr r0, [r4, 0xC]
- mov r8, r0
- mov r12, r2
- ldr r7, [r4, 0x10]
- adds r1, r3, 0x1
- mov r9, r1
- ldrb r6, [r4, 0x1]
- cmp r5, r6
- bcs _0806F26A
- adds r6, r7, 0
- ldr r1, [r4, 0x8]
- lsls r0, r3, 2
- adds r0, r1
- ldr r2, [r0]
-_0806F248:
- ldrb r0, [r4]
- lsls r0, 28
- lsrs r0, 28
- adds r1, r3, 0
- muls r1, r0
- adds r1, r5
- lsls r1, 3
- adds r1, r6
- lsls r0, r5, 11
- adds r0, r2, r0
- str r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrb r0, [r4, 0x1]
- cmp r5, r0
- bcc _0806F248
-_0806F26A:
- mov r5, r12
- adds r1, r5, r3
- lsls r1, 3
- add r1, r8
- ldrb r0, [r4]
- lsls r0, 28
- lsrs r0, 28
- muls r0, r3
- lsls r0, 3
- adds r0, r7, r0
- str r0, [r1, 0xC]
- ldr r6, =gUnknown_082FF70C
- str r6, [r1, 0x8]
- strh r3, [r1, 0x2]
- mov r7, r9
- lsls r0, r7, 16
- lsrs r3, r0, 16
- ldrb r0, [r4]
- lsls r0, 28
- lsrs r0, 28
- cmp r3, r0
- blt _0806F216
-_0806F296:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_806F1FC
-
- thumb_func_start sub_806F2AC
-sub_806F2AC: @ 806F2AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- movs r7, 0
- movs r0, 0x1
- ands r6, r0
- movs r0, 0x14
- bl AllocZeroed
- adds r4, r0, 0
- cmp r4, 0
- bne _0806F2D0
- movs r0, 0
- b _0806F46E
-_0806F2D0:
- cmp r5, 0
- beq _0806F2E6
- cmp r5, 0x2
- bne _0806F2E6
- movs r0, 0x77
- strb r0, [r4]
- movs r0, 0x4
- strb r0, [r4, 0x1]
- movs r0, 0x21
- strb r0, [r4, 0x3]
- b _0806F30E
-_0806F2E6:
- ldrb r1, [r4]
- movs r2, 0x10
- negs r2, r2
- adds r0, r2, 0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- movs r3, 0xF
- ands r0, r3
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x4
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- ands r2, r0
- movs r0, 0x1
- orrs r2, r0
- ands r2, r3
- strb r2, [r4, 0x3]
-_0806F30E:
- ldrb r1, [r4, 0x3]
- lsls r1, 28
- lsrs r1, 28
- ldrb r0, [r4]
- lsls r0, 28
- lsrs r0, 15
- muls r0, r1
- bl AllocZeroed
- str r0, [r4, 0x4]
- ldrb r0, [r4]
- lsls r0, 28
- lsrs r0, 23
- bl AllocZeroed
- adds r1, r0, 0
- str r1, [r4, 0x8]
- ldr r2, [r4, 0x4]
- cmp r2, 0
- beq _0806F33A
- cmp r1, 0
- bne _0806F344
-_0806F33A:
- movs r0, 0x1
- orrs r7, r0
- lsls r6, 2
- mov r8, r6
- b _0806F378
-_0806F344:
- ldrb r0, [r4]
- lsls r0, 28
- movs r3, 0
- lsls r6, 2
- mov r8, r6
- cmp r0, 0
- beq _0806F378
- adds r6, r1, 0
- adds r5, r2, 0
-_0806F356:
- lsls r2, r3, 2
- adds r2, r6
- ldrb r0, [r4, 0x3]
- lsls r0, 28
- lsrs r0, 28
- lsls r1, r3, 13
- muls r0, r1
- adds r0, r5, r0
- str r0, [r2]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r0, [r4]
- lsls r0, 28
- lsrs r0, 28
- cmp r3, r0
- blt _0806F356
-_0806F378:
- ldrb r1, [r4]
- lsls r1, 28
- lsrs r1, 28
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- bl AllocZeroed
- str r0, [r4, 0xC]
- ldrb r1, [r4]
- lsls r1, 28
- lsrs r1, 28
- ldrb r0, [r4, 0x1]
- lsls r0, 3
- muls r0, r1
- bl AllocZeroed
- adds r1, r0, 0
- str r1, [r4, 0x10]
- ldr r0, [r4, 0xC]
- cmp r0, 0
- beq _0806F3A8
- cmp r1, 0
- bne _0806F3B2
-_0806F3A8:
- movs r0, 0x2
- orrs r7, r0
- lsls r0, r7, 24
- lsrs r7, r0, 24
- b _0806F400
-_0806F3B2:
- movs r3, 0
- ldrb r0, [r4, 0x1]
- ldrb r1, [r4]
- lsls r1, 28
- lsrs r1, 28
- muls r0, r1
- cmp r3, r0
- bge _0806F3E2
- movs r2, 0x80
- lsls r2, 4
-_0806F3C6:
- ldr r1, [r4, 0x10]
- lsls r0, r3, 3
- adds r0, r1
- strh r2, [r0, 0x4]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r1, [r4, 0x1]
- ldrb r0, [r4]
- lsls r0, 28
- lsrs r0, 28
- muls r0, r1
- cmp r3, r0
- blt _0806F3C6
-_0806F3E2:
- ldrb r0, [r4, 0x3]
- lsrs r0, 4
- cmp r0, 0
- blt _0806F3FA
- cmp r0, 0x1
- ble _0806F3FA
- cmp r0, 0x2
- bne _0806F3FA
- adds r0, r4, 0
- bl sub_806F1FC
- b _0806F400
-_0806F3FA:
- adds r0, r4, 0
- bl sub_806F160
-_0806F400:
- movs r0, 0x2
- ands r0, r7
- cmp r0, 0
- beq _0806F424
- ldr r0, [r4, 0x10]
- cmp r0, 0
- beq _0806F416
- bl Free
- movs r0, 0
- str r0, [r4, 0x10]
-_0806F416:
- ldr r0, [r4, 0xC]
- cmp r0, 0
- beq _0806F424
- bl Free
- movs r0, 0
- str r0, [r4, 0xC]
-_0806F424:
- movs r0, 0x1
- ands r0, r7
- cmp r0, 0
- beq _0806F448
- ldr r0, [r4, 0x8]
- cmp r0, 0
- beq _0806F43A
- bl Free
- movs r0, 0
- str r0, [r4, 0x8]
-_0806F43A:
- ldr r0, [r4, 0x4]
- cmp r0, 0
- beq _0806F448
- bl Free
- movs r0, 0
- str r0, [r4, 0x4]
-_0806F448:
- cmp r7, 0
- beq _0806F45E
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x14
- bl memset
- adds r0, r4, 0
- bl Free
- b _0806F468
-_0806F45E:
- movs r0, 0xA3
- strb r0, [r4, 0x2]
- ldr r0, =gUnknown_020249B4
- add r0, r8
- str r4, [r0]
-_0806F468:
- ldr r0, =gUnknown_020249B4
- add r0, r8
- ldr r0, [r0]
-_0806F46E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_806F2AC
-
- thumb_func_start sub_806F47C
-sub_806F47C: @ 806F47C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- ands r0, r1
- ldr r1, =gUnknown_020249B4
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- cmp r4, 0
- beq _0806F4F0
- ldrb r0, [r4, 0x2]
- cmp r0, 0xA3
- beq _0806F4A8
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x14
- bl memset
- b _0806F4F0
- .pool
-_0806F4A8:
- ldr r0, [r4, 0x10]
- cmp r0, 0
- beq _0806F4B6
- bl Free
- movs r0, 0
- str r0, [r4, 0x10]
-_0806F4B6:
- ldr r0, [r4, 0xC]
- cmp r0, 0
- beq _0806F4C4
- bl Free
- movs r0, 0
- str r0, [r4, 0xC]
-_0806F4C4:
- ldr r0, [r4, 0x8]
- cmp r0, 0
- beq _0806F4D2
- bl Free
- movs r0, 0
- str r0, [r4, 0x8]
-_0806F4D2:
- ldr r0, [r4, 0x4]
- cmp r0, 0
- beq _0806F4E0
- bl Free
- movs r0, 0
- str r0, [r4, 0x4]
-_0806F4E0:
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x14
- bl memset
- adds r0, r4, 0
- bl Free
-_0806F4F0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_806F47C
-
- thumb_func_start sub_806F4F8
-sub_806F4F8: @ 806F4F8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- ldr r2, =gUnknown_020249B4
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- cmp r0, 0xA3
- beq _0806F51C
- movs r0, 0
- b _0806F530
- .pool
-_0806F51C:
- ldrb r0, [r1]
- lsls r0, 28
- lsrs r0, 28
- cmp r3, r0
- blt _0806F528
- movs r3, 0
-_0806F528:
- ldr r0, [r1, 0x8]
- lsls r1, r3, 2
- adds r1, r0
- ldr r0, [r1]
-_0806F530:
- pop {r1}
- bx r1
- thumb_func_end sub_806F4F8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_item_effect.s b/asm/pokemon_item_effect.s
deleted file mode 100644
index be7d3be49..000000000
--- a/asm/pokemon_item_effect.s
+++ /dev/null
@@ -1,1967 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start ExecuteTableBasedItemEffect_
-@ bool8 ExecuteTableBasedItemEffect_(struct pokemon *mon, u16 itemId, u8 a3, u8 monMoveIndex)
-ExecuteTableBasedItemEffect_: @ 806BD04
- push {r4,lr}
- sub sp, 0x4
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- movs r4, 0
- str r4, [sp]
- bl ExecuteTableBasedItemEffect
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ExecuteTableBasedItemEffect_
-
- thumb_func_start ExecuteTableBasedItemEffect
-@ bool8 ExecuteTableBasedItemEffect(struct pokemon *mon, u16 itemId, u8 a3, u8 monMoveIndex, u8 a5)
-ExecuteTableBasedItemEffect: @ 806BD28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x44
- mov r8, r0
- ldr r0, [sp, 0x64]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0xC]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x10]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x14]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x18]
- movs r0, 0x1
- str r0, [sp, 0x20]
- movs r1, 0x6
- str r1, [sp, 0x28]
- movs r2, 0
- str r2, [sp, 0x30]
- movs r3, 0x4
- str r3, [sp, 0x38]
- movs r5, 0
- str r5, [sp, 0x3C]
- mov r0, r8
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0806BDBC
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806BDA8
- ldr r2, =gEnigmaBerries
- ldr r0, =gBankInMenu
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x7]
- b _0806BDC4
- .pool
-_0806BDA8:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00003226
- adds r0, r2
- ldrb r0, [r0]
- b _0806BDC4
- .pool
-_0806BDBC:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
-_0806BDC4:
- str r0, [sp, 0x34]
- ldr r1, =gStringBattler
- ldr r0, =gBankInMenu
- ldrb r2, [r0]
- strb r2, [r1]
- ldr r0, =gMain
- ldr r3, =0x00000439
- adds r0, r3
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _0806BE64
- ldr r0, =gActiveBattler
- strb r2, [r0]
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- negs r1, r0
- orrs r1, r0
- lsrs r1, 31
- str r1, [sp, 0x1C]
- ldr r0, =gBattlersCount
- ldr r4, [sp, 0xC]
- subs r4, 0xD
- ldrb r0, [r0]
- cmp r1, r0
- bge _0806BE70
- ldr r2, =gBattlerPartyIndexes
- lsls r0, r1, 1
- adds r0, r2
- ldrh r3, [r0]
- ldr r5, [sp, 0x10]
- lsls r0, r5, 16
- lsrs r1, r0, 16
- adds r5, r0, 0
- cmp r3, r1
- bne _0806BE3C
- ldr r0, [sp, 0x1C]
- str r0, [sp, 0x38]
- b _0806BE70
- .pool
-_0806BE3C:
- ldr r1, [sp, 0x1C]
- adds r1, 0x2
- str r1, [sp, 0x1C]
- ldr r0, =gBattlersCount
- ldrb r0, [r0]
- cmp r1, r0
- bge _0806BE70
- lsls r0, r1, 1
- adds r0, r2
- ldrh r1, [r0]
- lsrs r0, r5, 16
- cmp r1, r0
- bne _0806BE3C
- ldr r2, [sp, 0x1C]
- lsls r0, r2, 24
- lsrs r0, 24
- str r0, [sp, 0x38]
- b _0806BE70
- .pool
-_0806BE64:
- ldr r0, =gActiveBattler
- strb r1, [r0]
- movs r3, 0x4
- str r3, [sp, 0x38]
- ldr r4, [sp, 0xC]
- subs r4, 0xD
-_0806BE70:
- lsls r0, r4, 16
- lsrs r0, 16
- cmp r0, 0xA5
- bhi _0806BEF0
- ldr r1, =gItemEffectTable
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _0806BE94
- ldr r5, [sp, 0xC]
- cmp r5, 0xAF
- beq _0806BE9A
- b _0806BEF0
- .pool
-_0806BE94:
- ldr r1, [sp, 0xC]
- cmp r1, 0xAF
- bne _0806BEF6
-_0806BE9A:
- ldr r0, =gMain
- ldr r2, =0x00000439
- adds r0, r2
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806BECC
- ldr r0, =gActiveBattler
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- ldr r1, =gEnigmaBerries + 8
- adds r0, r1
- b _0806BEF6
- .pool
-_0806BECC:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r3, =0x00003214
- adds r3, r0, r3
- str r3, [sp, 0x24]
- b _0806BEF8
- .pool
-_0806BEE0:
- mov r0, r8
- movs r2, 0
- ldr r3, [sp, 0x10]
- bl BeginEvolutionScene
- movs r0, 0
- bl _0806CD5C
-_0806BEF0:
- movs r0, 0x1
- bl _0806CD5C
-_0806BEF6:
- str r0, [sp, 0x24]
-_0806BEF8:
- movs r5, 0
- str r5, [sp, 0x1C]
-_0806BEFC:
- ldr r0, [sp, 0x1C]
- cmp r0, 0x5
- bls _0806BF06
- bl _0806CD4C
-_0806BF06:
- lsls r0, 2
- ldr r1, =_0806BF14
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0806BF14:
- .4byte _0806BF2C
- .4byte _0806BFFC
- .4byte _0806C08C
- .4byte _0806C120
- .4byte _0806C300
- .4byte _0806C9BE
-_0806BF2C:
- ldr r1, [sp, 0x24]
- ldr r3, [sp, 0x1C]
- adds r2, r1, r3
- ldrb r1, [r2]
- movs r0, 0x80
- ands r0, r1
- adds r6, r2, 0
- cmp r0, 0
- beq _0806BF76
- ldr r0, =gMain
- ldr r5, =0x00000439
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806BF76
- ldr r0, [sp, 0x38]
- cmp r0, 0x4
- beq _0806BF76
- ldr r1, =gBattleMons
- movs r0, 0x58
- ldr r2, [sp, 0x38]
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r1
- cmp r0, 0
- beq _0806BF76
- ldr r0, =0xfff0ffff
- ands r1, r0
- str r1, [r2]
- movs r3, 0
- str r3, [sp, 0x20]
-_0806BF76:
- ldrb r1, [r6]
- movs r0, 0x30
- ands r0, r1
- cmp r0, 0
- beq _0806BFA4
- ldr r1, =gBattleMons
- ldr r0, =gActiveBattler
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r3, 0x80
- lsls r3, 13
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- bne _0806BFA4
- orrs r1, r3
- str r1, [r2]
- movs r5, 0
- str r5, [sp, 0x20]
-_0806BFA4:
- ldrb r0, [r6]
- movs r3, 0xF
- ands r3, r0
- cmp r3, 0
- bne _0806BFB2
- bl _0806CD4C
-_0806BFB2:
- ldr r6, =gBattleMons
- ldr r5, =gActiveBattler
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r6
- ldrb r2, [r1, 0x19]
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0806BFCC
- bl _0806CD4C
-_0806BFCC:
- adds r0, r2, r3
- strb r0, [r1, 0x19]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r6
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- bgt _0806BFE0
- b _0806C110
-_0806BFE0:
- movs r0, 0xC
- strb r0, [r1, 0x19]
- b _0806C110
- .pool
-_0806BFFC:
- ldr r1, [sp, 0x24]
- ldr r3, [sp, 0x1C]
- adds r2, r1, r3
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- lsls r3, r0, 24
- adds r6, r2, 0
- cmp r3, 0
- beq _0806C042
- ldr r7, =gBattleMons
- ldr r5, =gActiveBattler
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r7
- ldrb r2, [r1, 0x1A]
- movs r0, 0x1A
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- bgt _0806C042
- lsrs r0, r3, 28
- adds r0, r2, r0
- strb r0, [r1, 0x1A]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r7
- movs r0, 0x1A
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0806C03E
- movs r0, 0xC
- strb r0, [r1, 0x1A]
-_0806C03E:
- movs r5, 0
- str r5, [sp, 0x20]
-_0806C042:
- ldrb r0, [r6]
- movs r3, 0xF
- ands r3, r0
- cmp r3, 0
- bne _0806C050
- bl _0806CD4C
-_0806C050:
- ldr r6, =gBattleMons
- ldr r5, =gActiveBattler
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r6
- ldrb r2, [r1, 0x1B]
- movs r0, 0x1B
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0806C06A
- bl _0806CD4C
-_0806C06A:
- adds r0, r2, r3
- strb r0, [r1, 0x1B]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r6
- movs r0, 0x1B
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0806C110
- movs r0, 0xC
- strb r0, [r1, 0x1B]
- b _0806C110
- .pool
-_0806C08C:
- ldr r1, [sp, 0x24]
- ldr r3, [sp, 0x1C]
- adds r2, r1, r3
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- lsls r3, r0, 24
- adds r6, r2, 0
- cmp r3, 0
- beq _0806C0D2
- ldr r7, =gBattleMons
- ldr r5, =gActiveBattler
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r7
- ldrb r2, [r1, 0x1E]
- movs r0, 0x1E
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- bgt _0806C0D2
- lsrs r0, r3, 28
- adds r0, r2, r0
- strb r0, [r1, 0x1E]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r7
- movs r0, 0x1E
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0806C0CE
- movs r0, 0xC
- strb r0, [r1, 0x1E]
-_0806C0CE:
- movs r5, 0
- str r5, [sp, 0x20]
-_0806C0D2:
- ldrb r0, [r6]
- movs r3, 0xF
- ands r3, r0
- cmp r3, 0
- bne _0806C0E0
- bl _0806CD4C
-_0806C0E0:
- ldr r6, =gBattleMons
- ldr r5, =gActiveBattler
- ldrb r0, [r5]
- movs r4, 0x58
- muls r0, r4
- adds r1, r0, r6
- ldrb r2, [r1, 0x1C]
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0806C0FA
- bl _0806CD4C
-_0806C0FA:
- adds r0, r2, r3
- strb r0, [r1, 0x1C]
- ldrb r0, [r5]
- muls r0, r4
- adds r1, r0, r6
- movs r0, 0x1C
- ldrsb r0, [r1, r0]
- cmp r0, 0xC
- ble _0806C110
- movs r0, 0xC
- strb r0, [r1, 0x1C]
-_0806C110:
- movs r0, 0
- str r0, [sp, 0x20]
- bl _0806CD4C
- .pool
-_0806C120:
- ldr r1, [sp, 0x24]
- ldr r3, [sp, 0x1C]
- adds r2, r1, r3
- ldrb r1, [r2]
- movs r0, 0x80
- ands r0, r1
- adds r6, r2, 0
- cmp r0, 0
- beq _0806C168
- ldr r5, =gSideTimers
- ldr r4, =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- bne _0806C168
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- movs r0, 0x5
- strb r0, [r1, 0x4]
- movs r5, 0
- str r5, [sp, 0x20]
-_0806C168:
- ldrb r1, [r6]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0806C1CA
- mov r0, r8
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- cmp r0, 0x64
- beq _0806C1CA
- ldr r5, =gExperienceTables
- mov r0, r8
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- mov r0, r8
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r4, 0x1
- lsls r4, 2
- ldr r2, =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r4, r0
- adds r4, r5
- ldr r0, [r4]
- str r0, [sp]
- mov r0, r8
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- movs r0, 0
- str r0, [sp, 0x20]
-_0806C1CA:
- ldrb r1, [r6]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0806C206
- mov r0, r8
- ldr r1, [sp, 0x10]
- movs r2, 0x7
- ldr r3, [sp, 0x38]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0806C206
- ldr r1, [sp, 0x38]
- cmp r1, 0x4
- beq _0806C202
- ldr r1, =gBattleMons
- movs r0, 0x58
- ldr r3, [sp, 0x38]
- adds r2, r3, 0
- muls r2, r0
- adds r1, 0x50
- adds r2, r1
- ldr r0, [r2]
- ldr r1, =0xf7ffffff
- ands r0, r1
- str r0, [r2]
-_0806C202:
- movs r5, 0
- str r5, [sp, 0x20]
-_0806C206:
- ldrb r1, [r6]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0806C226
- ldr r2, =0x00000f88
- mov r0, r8
- ldr r1, [sp, 0x10]
- ldr r3, [sp, 0x38]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0806C226
- movs r0, 0
- str r0, [sp, 0x20]
-_0806C226:
- ldrb r1, [r6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0806C246
- mov r0, r8
- ldr r1, [sp, 0x10]
- movs r2, 0x10
- ldr r3, [sp, 0x38]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0806C246
- movs r1, 0
- str r1, [sp, 0x20]
-_0806C246:
- ldrb r1, [r6]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0806C266
- mov r0, r8
- ldr r1, [sp, 0x10]
- movs r2, 0x20
- ldr r3, [sp, 0x38]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0806C266
- movs r2, 0
- str r2, [sp, 0x20]
-_0806C266:
- ldrb r1, [r6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806C286
- mov r0, r8
- ldr r1, [sp, 0x10]
- movs r2, 0x40
- ldr r3, [sp, 0x38]
- bl HealStatusConditions
- lsls r0, 24
- cmp r0, 0
- bne _0806C286
- movs r3, 0
- str r3, [sp, 0x20]
-_0806C286:
- ldrb r1, [r6]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0806C294
- bl _0806CD4C
-_0806C294:
- ldr r0, =gMain
- ldr r5, =0x00000439
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0806C2A8
- bl _0806CD4C
-_0806C2A8:
- ldr r0, [sp, 0x38]
- cmp r0, 0x4
- bne _0806C2B2
- bl _0806CD4C
-_0806C2B2:
- ldr r1, =gBattleMons
- movs r0, 0x58
- ldr r2, [sp, 0x38]
- muls r0, r2
- adds r1, 0x50
- adds r2, r0, r1
- ldr r1, [r2]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0806C2CC
- bl _0806CD4C
-_0806C2CC:
- movs r0, 0x8
- negs r0, r0
- ands r1, r0
- str r1, [r2]
- movs r3, 0
- str r3, [sp, 0x20]
- bl _0806CD4C
- .pool
-_0806C300:
- ldr r5, [sp, 0x24]
- ldr r1, [sp, 0x1C]
- adds r0, r5, r1
- ldrb r0, [r0]
- mov r10, r0
- movs r0, 0x20
- mov r2, r10
- ands r0, r2
- cmp r0, 0
- beq _0806C3D8
- movs r0, 0xDF
- ands r2, r0
- mov r10, r2
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- ldr r1, =gUnknown_08329D22
- ldr r3, [sp, 0x14]
- adds r1, r3, r1
- ldrb r1, [r1]
- ands r0, r1
- lsls r1, r3, 1
- lsrs r0, r1
- str r0, [sp]
- adds r5, r3, 0
- adds r5, 0xD
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x14]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x2C]
- ldr r0, [sp]
- cmp r0, 0x2
- bhi _0806C3D8
- ldr r0, [sp, 0x2C]
- cmp r0, 0x4
- bls _0806C3D8
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- ldr r1, =gUnknown_08329D2A
- ldr r2, [sp, 0x14]
- adds r1, r2, r1
- ldrb r1, [r1]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- movs r1, 0x15
- mov r2, sp
- bl SetMonData
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, [sp, 0x14]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [sp, 0x2C]
- subs r0, r3
- str r0, [sp]
- ldr r4, [sp, 0x14]
- adds r4, 0x11
- mov r0, r8
- adds r1, r4, 0
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- movs r5, 0
- str r5, [sp, 0x20]
-_0806C3D8:
- movs r0, 0
- str r0, [sp, 0x2C]
- mov r1, r10
- cmp r1, 0
- bne _0806C3E6
- bl _0806CD4C
-_0806C3E6:
- movs r0, 0x1
- mov r2, r10
- ands r0, r2
- cmp r0, 0
- bne _0806C3F2
- b _0806C9AA
-_0806C3F2:
- ldr r3, [sp, 0x2C]
- cmp r3, 0x7
- bls _0806C3FA
- b _0806C9AA
-_0806C3FA:
- lsls r0, r3, 2
- ldr r1, =_0806C410
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0806C410:
- .4byte _0806C430
- .4byte _0806C430
- .4byte _0806C4DC
- .4byte _0806C700
- .4byte _0806C9AA
- .4byte _0806C9AA
- .4byte _0806C9AA
- .4byte _0806C994
-_0806C430:
- mov r0, r8
- bl GetMonEVCount
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r5, [sp, 0x24]
- ldr r1, [sp, 0x28]
- adds r0, r5, r1
- ldrb r5, [r0]
- ldr r0, =gUnknown_08329EC2
- ldr r2, [sp, 0x2C]
- adds r0, r2, r0
- ldrb r1, [r0]
- mov r0, r8
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- str r1, [sp, 0x4]
- lsls r0, r5, 24
- asrs r2, r0, 24
- cmp r2, 0
- ble _0806C498
- ldr r0, =0x000001fd
- cmp r6, r0
- bls _0806C466
- b _0806BEF0
-_0806C466:
- adds r3, r1, 0
- cmp r3, 0x63
- ble _0806C46E
- b _0806C9AA
-_0806C46E:
- adds r1, r3, r2
- cmp r1, 0x64
- ble _0806C484
- adds r0, r2, 0
- adds r0, 0x64
- subs r5, r0, r1
- b _0806C486
- .pool
-_0806C484:
- adds r5, r2, 0
-_0806C486:
- adds r1, r6, r5
- movs r0, 0xFF
- lsls r0, 1
- cmp r1, r0
- bls _0806C494
- adds r0, r5, r0
- subs r5, r0, r1
-_0806C494:
- adds r0, r3, r5
- b _0806C4B2
-_0806C498:
- cmp r1, 0
- bne _0806C4A8
- movs r3, 0x1
- str r3, [sp, 0x3C]
- ldr r0, [sp, 0x28]
- adds r0, 0x1
- lsls r0, 24
- b _0806C83E
-_0806C4A8:
- adds r0, r1, r2
- str r0, [sp, 0x4]
- cmp r0, 0
- bge _0806C4B4
- movs r0, 0
-_0806C4B2:
- str r0, [sp, 0x4]
-_0806C4B4:
- ldr r0, =gUnknown_08329EC2
- ldr r5, [sp, 0x2C]
- adds r0, r5, r0
- ldrb r1, [r0]
- add r2, sp, 0x4
- mov r0, r8
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- ldr r0, [sp, 0x28]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x28]
- b _0806C978
- .pool
-_0806C4DC:
- movs r0, 0x10
- mov r1, r10
- ands r0, r1
- cmp r0, 0
- beq _0806C59C
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0806C4FC
- ldr r0, [sp, 0x28]
- adds r0, 0x1
- lsls r0, 24
- b _0806C83E
-_0806C4FC:
- ldr r0, =gMain
- ldr r2, =0x00000439
- adds r0, r2
- ldrb r1, [r0]
- movs r4, 0x2
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806C5B2
- ldr r3, [sp, 0x38]
- cmp r3, 0x4
- beq _0806C55C
- ldr r2, =gAbsentBattlerFlags
- ldr r1, =gBitTable
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r3, 1
- adds r0, r1
- ldrb r0, [r0]
- bl pokemon_order_func
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, [sp, 0x38]
- bl CopyPlayerPartyMonToBattleData
- ldr r0, =gActiveBattler
- ldrb r0, [r0]
- b _0806C574
- .pool
-_0806C55C:
- ldr r3, =gAbsentBattlerFlags
- ldr r1, =gBitTable
- ldr r2, =gActiveBattler
- ldrb r0, [r2]
- eors r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldrb r0, [r3]
- bics r0, r1
- strb r0, [r3]
- ldrb r0, [r2]
-_0806C574:
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0806C5B2
- ldr r1, =gBattleResults
- ldrb r0, [r1, 0x4]
- cmp r0, 0xFE
- bhi _0806C5B2
- adds r0, 0x1
- strb r0, [r1, 0x4]
- b _0806C5B2
- .pool
-_0806C59C:
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0806C5B2
- ldr r0, [sp, 0x28]
- adds r0, 0x1
- lsls r0, 24
- b _0806C83E
-_0806C5B2:
- ldr r1, [sp, 0x28]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x28]
- ldr r5, [sp, 0x24]
- adds r1, r5, r1
- ldrb r1, [r1]
- str r1, [sp]
- adds r0, r1, 0
- cmp r0, 0xFE
- beq _0806C5F4
- cmp r0, 0xFE
- bhi _0806C5D4
- cmp r0, 0xFD
- beq _0806C60A
- b _0806C612
-_0806C5D4:
- cmp r1, 0xFF
- bne _0806C612
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- subs r4, r0
- str r4, [sp]
- b _0806C612
-_0806C5F4:
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- lsrs r0, 1
- str r0, [sp]
- cmp r0, 0
- bne _0806C612
- movs r0, 0x1
- b _0806C610
-_0806C60A:
- ldr r0, =gBattleScripting
- adds r0, 0x23
- ldrb r0, [r0]
-_0806C610:
- str r0, [sp]
-_0806C612:
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r4, r0
- beq _0806C6F0
- ldr r0, [sp, 0x18]
- cmp r0, 0
- bne _0806C6E4
- mov r0, r8
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- cmp r1, r0
- bls _0806C65E
- mov r0, r8
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- str r0, [sp]
-_0806C65E:
- mov r0, r8
- movs r1, 0x39
- mov r2, sp
- bl SetMonData
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806C6EC
- ldr r2, [sp, 0x38]
- cmp r2, 0x4
- beq _0806C6EC
- ldr r1, =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldr r1, [sp]
- strh r1, [r0, 0x28]
- movs r0, 0x10
- mov r3, r10
- ands r0, r3
- cmp r0, 0
- bne _0806C6EC
- ldr r4, =gActiveBattler
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0806C6EC
- ldr r1, =gBattleResults
- ldrb r0, [r1, 0x3]
- cmp r0, 0xFE
- bhi _0806C6AE
- adds r0, 0x1
- strb r0, [r1, 0x3]
-_0806C6AE:
- ldrb r5, [r4]
- add r0, sp, 0x38
- ldrb r0, [r0]
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl BtlController_EmitGetMonData
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- strb r5, [r4]
- b _0806C6EC
- .pool
-_0806C6E4:
- ldr r1, =gBattleMoveDamage
- ldr r0, [sp]
- negs r0, r0
- str r0, [r1]
-_0806C6EC:
- movs r1, 0
- str r1, [sp, 0x20]
-_0806C6F0:
- movs r0, 0xEF
- mov r2, r10
- ands r2, r0
- mov r10, r2
- b _0806C9AA
- .pool
-_0806C700:
- movs r7, 0x2
- mov r0, r10
- ands r0, r7
- cmp r0, 0
- beq _0806C70C
- b _0806C858
-_0806C70C:
- movs r5, 0
- ldr r3, [sp, 0x28]
- adds r3, 0x1
- str r3, [sp, 0x40]
-_0806C714:
- movs r0, 0x11
- adds r0, r5
- mov r9, r0
- mov r0, r8
- mov r1, r9
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- adds r7, r5, 0
- adds r7, 0xD
- mov r0, r8
- adds r1, r7, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r5, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- adds r2, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp]
- cmp r1, r0
- beq _0806C832
- ldr r2, [sp, 0x24]
- ldr r3, [sp, 0x28]
- adds r0, r2, r3
- ldrb r0, [r0]
- adds r0, r1, r0
- str r0, [sp]
- mov r0, r8
- adds r1, r7, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- adds r2, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp]
- cmp r1, r0
- bls _0806C7CC
- mov r0, r8
- adds r1, r7, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- adds r2, r6, 0
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
-_0806C7CC:
- mov r0, r8
- mov r1, r9
- mov r2, sp
- bl SetMonData
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806C82E
- ldr r2, [sp, 0x38]
- cmp r2, 0x4
- beq _0806C82E
- ldr r4, =gBattleMons
- movs r0, 0x58
- adds r3, r2, 0
- muls r3, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 14
- ands r1, r0
- cmp r1, 0
- bne _0806C82E
- ldr r1, =gDisableStructs
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, =gBitTable
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0806C82E
- adds r0, r5, r3
- adds r1, r4, 0
- adds r1, 0x24
- adds r0, r1
- ldr r1, [sp]
- strb r1, [r0]
-_0806C82E:
- movs r3, 0
- str r3, [sp, 0x20]
-_0806C832:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _0806C83A
- b _0806C714
-_0806C83A:
- ldr r5, [sp, 0x40]
- lsls r0, r5, 24
-_0806C83E:
- lsrs r0, 24
- str r0, [sp, 0x28]
- b _0806C9AA
- .pool
-_0806C858:
- ldr r6, [sp, 0x14]
- adds r6, 0x11
- mov r0, r8
- adds r1, r6, 0
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- ldr r5, [sp, 0x14]
- adds r5, 0xD
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x14]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [sp]
- cmp r2, r0
- bne _0806C8A0
- b _0806C9AA
-_0806C8A0:
- ldr r1, [sp, 0x28]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x28]
- ldr r0, [sp, 0x24]
- adds r1, r0, r1
- ldrb r0, [r1]
- adds r0, r2, r0
- str r0, [sp]
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x14]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp]
- cmp r1, r0
- bls _0806C914
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x14]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
-_0806C914:
- mov r0, r8
- adds r1, r6, 0
- mov r2, sp
- bl SetMonData
- ldr r0, =gMain
- ldr r1, =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _0806C978
- ldr r2, [sp, 0x38]
- cmp r2, 0x4
- beq _0806C978
- ldr r4, =gBattleMons
- movs r0, 0x58
- adds r3, r2, 0
- muls r3, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0806C978
- ldr r1, =gDisableStructs
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, =gBitTable
- ldr r5, [sp, 0x14]
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0806C978
- adds r0, r5, r3
- adds r1, r4, 0
- adds r1, 0x24
- adds r0, r1
- ldr r1, [sp]
- strb r1, [r0]
-_0806C978:
- movs r0, 0
- str r0, [sp, 0x20]
- b _0806C9AA
- .pool
-_0806C994:
- mov r0, r8
- movs r1, 0x2
- ldr r2, [sp, 0xC]
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _0806C9AA
- bl _0806BEE0
-_0806C9AA:
- ldr r1, [sp, 0x2C]
- adds r1, 0x1
- str r1, [sp, 0x2C]
- mov r2, r10
- lsrs r2, 1
- mov r10, r2
- cmp r2, 0
- beq _0806C9BC
- b _0806C3E6
-_0806C9BC:
- b _0806CD4C
-_0806C9BE:
- ldr r3, [sp, 0x24]
- ldr r5, [sp, 0x1C]
- adds r0, r3, r5
- ldrb r0, [r0]
- mov r10, r0
- movs r0, 0
- str r0, [sp, 0x2C]
- mov r1, r10
- cmp r1, 0
- bne _0806C9D4
- b _0806CD4C
-_0806C9D4:
- movs r0, 0x1
- mov r2, r10
- ands r0, r2
- cmp r0, 0
- bne _0806C9E0
- b _0806CD3A
-_0806C9E0:
- ldr r3, [sp, 0x2C]
- cmp r3, 0x7
- bls _0806C9E8
- b _0806CD3A
-_0806C9E8:
- lsls r0, r3, 2
- ldr r1, =_0806C9F8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0806C9F8:
- .4byte _0806CA18
- .4byte _0806CA18
- .4byte _0806CA18
- .4byte _0806CA18
- .4byte _0806CAB8
- .4byte _0806CB94
- .4byte _0806CC00
- .4byte _0806CC68
-_0806CA18:
- mov r0, r8
- bl GetMonEVCount
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r5, [sp, 0x24]
- ldr r1, [sp, 0x28]
- adds r0, r5, r1
- ldrb r5, [r0]
- ldr r0, =gUnknown_08329EC2
- ldr r4, [sp, 0x2C]
- adds r4, 0x2
- adds r0, r4, r0
- ldrb r1, [r0]
- mov r0, r8
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- str r1, [sp, 0x4]
- lsls r0, r5, 24
- asrs r2, r0, 24
- cmp r2, 0
- ble _0806CA84
- ldr r0, =0x000001fd
- cmp r6, r0
- bls _0806CA52
- bl _0806BEF0
-_0806CA52:
- adds r3, r1, 0
- cmp r3, 0x63
- ble _0806CA5A
- b _0806CD3A
-_0806CA5A:
- adds r1, r3, r2
- cmp r1, 0x64
- ble _0806CA70
- adds r0, r2, 0
- adds r0, 0x64
- subs r5, r0, r1
- b _0806CA72
- .pool
-_0806CA70:
- adds r5, r2, 0
-_0806CA72:
- adds r1, r6, r5
- movs r0, 0xFF
- lsls r0, 1
- cmp r1, r0
- bls _0806CA80
- adds r0, r5, r0
- subs r5, r0, r1
-_0806CA80:
- adds r0, r3, r5
- b _0806CA98
-_0806CA84:
- cmp r1, 0
- bne _0806CA8E
- movs r2, 0x1
- str r2, [sp, 0x3C]
- b _0806CD30
-_0806CA8E:
- adds r0, r1, r2
- str r0, [sp, 0x4]
- cmp r0, 0
- bge _0806CA9A
- movs r0, 0
-_0806CA98:
- str r0, [sp, 0x4]
-_0806CA9A:
- ldr r0, =gUnknown_08329EC2
- adds r0, r4, r0
- ldrb r1, [r0]
- add r2, sp, 0x4
- mov r0, r8
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- movs r3, 0
- str r3, [sp, 0x20]
- b _0806CD30
- .pool
-_0806CAB8:
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- ldr r1, =gUnknown_08329D22
- ldr r5, [sp, 0x14]
- adds r1, r5, r1
- ldrb r1, [r1]
- ands r0, r1
- lsls r1, r5, 1
- lsrs r0, r1
- str r0, [sp]
- adds r6, r5, 0
- adds r6, 0xD
- mov r0, r8
- adds r1, r6, 0
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- ldr r2, [sp, 0x14]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, [sp]
- cmp r0, 0x2
- bls _0806CB0A
- b _0806CD3A
-_0806CB0A:
- cmp r5, 0x4
- bhi _0806CB10
- b _0806CD3A
-_0806CB10:
- mov r0, r8
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- str r0, [sp]
- ldr r1, =gUnknown_08329D26
- ldr r2, [sp, 0x14]
- adds r1, r2, r1
- ldrb r2, [r1]
- ands r2, r0
- str r2, [sp]
- ldr r0, =gUnknown_08329D2A
- ldr r3, [sp, 0x14]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- adds r2, r0
- str r2, [sp]
- mov r0, r8
- movs r1, 0x15
- mov r2, sp
- bl SetMonData
- mov r0, r8
- adds r1, r6, 0
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, [sp, 0x14]
- bl CalculatePPWithBonus
- lsls r0, 24
- lsrs r0, 24
- subs r0, r5
- str r0, [sp]
- ldr r4, [sp, 0x14]
- adds r4, 0x11
- mov r0, r8
- adds r1, r4, 0
- movs r2, 0
- bl GetMonData
- ldr r1, [sp]
- adds r0, r1
- str r0, [sp]
- mov r0, r8
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- movs r5, 0
- str r5, [sp, 0x20]
- b _0806CD3A
- .pool
-_0806CB94:
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0x63
- bls _0806CBA4
- b _0806CD30
-_0806CBA4:
- ldr r0, [sp, 0x20]
- cmp r0, 0
- beq _0806CBB2
- ldr r1, [sp, 0x3C]
- cmp r1, 0
- bne _0806CBB2
- b _0806CD30
-_0806CBB2:
- bl sub_806F104
- lsls r0, 24
- cmp r0, 0
- beq _0806CBBE
- b _0806CD30
-_0806CBBE:
- ldr r2, [sp, 0x30]
- cmp r2, 0
- beq _0806CBC6
- b _0806CD30
-_0806CBC6:
- ldr r3, [sp, 0x24]
- ldr r5, [sp, 0x28]
- adds r0, r3, r5
- ldrb r0, [r0]
- str r0, [sp, 0x30]
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- adds r5, r0, 0
- str r5, [sp, 0x8]
- ldr r0, [sp, 0x30]
- lsls r4, r0, 24
- asrs r1, r4, 24
- cmp r1, 0
- ble _0806CCCC
- ldr r2, [sp, 0x34]
- cmp r2, 0x1B
- bne _0806CCCC
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, r5, r0
- str r0, [sp, 0x8]
- adds r2, r4, 0
- b _0806CCD8
-_0806CC00:
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0x63
- bhi _0806CC10
- b _0806CD30
-_0806CC10:
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0xC7
- bls _0806CC20
- b _0806CD30
-_0806CC20:
- ldr r0, [sp, 0x20]
- cmp r0, 0
- beq _0806CC2E
- ldr r1, [sp, 0x3C]
- cmp r1, 0
- bne _0806CC2E
- b _0806CD30
-_0806CC2E:
- bl sub_806F104
- lsls r0, 24
- cmp r0, 0
- bne _0806CD30
- ldr r2, [sp, 0x30]
- cmp r2, 0
- bne _0806CD30
- ldr r3, [sp, 0x24]
- ldr r5, [sp, 0x28]
- adds r0, r3, r5
- ldrb r0, [r0]
- str r0, [sp, 0x30]
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- str r4, [sp, 0x8]
- ldr r0, [sp, 0x30]
- lsls r5, r0, 24
- asrs r1, r5, 24
- cmp r1, 0
- ble _0806CCCC
- ldr r2, [sp, 0x34]
- cmp r2, 0x1B
- beq _0806CCBA
- b _0806CCCC
-_0806CC68:
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- cmp r0, 0xC7
- bls _0806CD30
- ldr r0, [sp, 0x20]
- cmp r0, 0
- beq _0806CC82
- ldr r1, [sp, 0x3C]
- cmp r1, 0
- beq _0806CD30
-_0806CC82:
- bl sub_806F104
- lsls r0, 24
- cmp r0, 0
- bne _0806CD30
- ldr r2, [sp, 0x30]
- cmp r2, 0
- bne _0806CD30
- ldr r3, [sp, 0x24]
- ldr r5, [sp, 0x28]
- adds r0, r3, r5
- ldrb r0, [r0]
- str r0, [sp, 0x30]
- mov r0, r8
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- str r4, [sp, 0x8]
- ldr r0, [sp, 0x30]
- lsls r5, r0, 24
- asrs r1, r5, 24
- cmp r1, 0
- ble _0806CCCC
- ldr r2, [sp, 0x34]
- cmp r2, 0x1B
- bne _0806CCCC
-_0806CCBA:
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- adds r0, r4, r0
- str r0, [sp, 0x8]
- adds r2, r5, 0
- b _0806CCD8
-_0806CCCC:
- ldr r3, [sp, 0x30]
- lsls r2, r3, 24
- asrs r1, r2, 24
- ldr r0, [sp, 0x8]
- adds r0, r1
- str r0, [sp, 0x8]
-_0806CCD8:
- cmp r2, 0
- ble _0806CD0E
- mov r0, r8
- movs r1, 0x26
- movs r2, 0
- bl GetMonData
- cmp r0, 0xB
- bne _0806CCF0
- ldr r0, [sp, 0x8]
- adds r0, 0x1
- str r0, [sp, 0x8]
-_0806CCF0:
- mov r0, r8
- movs r1, 0x23
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- bl sav1_map_get_name
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _0806CD0E
- ldr r0, [sp, 0x8]
- adds r0, 0x1
- str r0, [sp, 0x8]
-_0806CD0E:
- ldr r0, [sp, 0x8]
- cmp r0, 0
- bge _0806CD18
- movs r0, 0
- str r0, [sp, 0x8]
-_0806CD18:
- ldr r0, [sp, 0x8]
- cmp r0, 0xFF
- ble _0806CD22
- movs r0, 0xFF
- str r0, [sp, 0x8]
-_0806CD22:
- add r2, sp, 0x8
- mov r0, r8
- movs r1, 0x20
- bl SetMonData
- movs r5, 0
- str r5, [sp, 0x20]
-_0806CD30:
- ldr r0, [sp, 0x28]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x28]
-_0806CD3A:
- ldr r0, [sp, 0x2C]
- adds r0, 0x1
- str r0, [sp, 0x2C]
- mov r1, r10
- lsrs r1, 1
- mov r10, r1
- cmp r1, 0
- beq _0806CD4C
- b _0806C9D4
-_0806CD4C:
- ldr r2, [sp, 0x1C]
- adds r2, 0x1
- str r2, [sp, 0x1C]
- cmp r2, 0x5
- bgt _0806CD5A
- bl _0806BEFC
-_0806CD5A:
- ldr r0, [sp, 0x20]
-_0806CD5C:
- add sp, 0x44
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end ExecuteTableBasedItemEffect
-
- .align 2, 0 @ Don't pad with nop.
- \ No newline at end of file
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index a94d69b96..6e7c3af57 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -1173,7 +1173,7 @@ sub_81C47B4: @ 81C47B4
ands r0, r1
strb r0, [r7, 0x5]
ldrh r0, [r6, 0x2]
- bl IsPokeSpriteNotFlipped
+ bl IsMonSpriteNotFlipped
lsls r0, 24
cmp r0, 0
bne _081C4828
@@ -1221,7 +1221,7 @@ sub_81C4844: @ 81C4844
cmp r0, 0x1
beq _081C487E
ldrh r0, [r4, 0x2E]
- bl IsPokeSpriteNotFlipped
+ bl IsMonSpriteNotFlipped
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x30]
diff --git a/asm/pokenav.s b/asm/pokenav.s
index 89516e65a..680752c85 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -25789,7 +25789,7 @@ sub_81D3B54: @ 81D3B54
adds r5, r1, 0
bl sub_81D41A0
movs r7, 0x2
- ldr r4, =gUnknown_03003144
+ ldr r4, =gShouldAdvanceLinkState
_081D3B64:
bl sub_81D4170
ldr r0, =gUnknown_030012E2
@@ -25857,7 +25857,7 @@ sub_81D3BE8: @ 81D3BE8
adds r5, r0, 0
bl sub_81D41A0
movs r6, 0x2
- ldr r4, =gUnknown_03003144
+ ldr r4, =gShouldAdvanceLinkState
_081D3BF6:
bl sub_81D4170
ldr r0, =gUnknown_030012E2
@@ -26006,7 +26006,7 @@ sub_81D3D34: @ 81D3D34
movs r1, 0x8
orrs r0, r1
strh r0, [r2]
- ldr r0, =gUnknown_03003144
+ ldr r0, =gShouldAdvanceLinkState
strb r3, [r0]
ldr r0, =gUnknown_030012E6
strh r3, [r0]
@@ -26062,7 +26062,7 @@ _081D3DC8:
beq _081D3DD8
bl sub_81D413C
_081D3DD8:
- ldr r0, =gUnknown_03003144
+ ldr r0, =gShouldAdvanceLinkState
ldrb r0, [r0]
cmp r0, 0x2
beq _081D3DE2
@@ -26080,7 +26080,7 @@ _081D3DE8:
movs r0, 0x3
strb r0, [r1, 0x1]
_081D3DFC:
- ldr r0, =gUnknown_03003144
+ ldr r0, =gShouldAdvanceLinkState
ldrb r0, [r0]
cmp r0, 0x2
bne _081D3E18
@@ -28050,7 +28050,7 @@ _081D4E12:
beq _081D4E1C
movs r5, 0x3
_081D4E1C:
- ldr r1, =gUnknown_03003144
+ ldr r1, =gShouldAdvanceLinkState
movs r0, 0
strb r0, [r1]
adds r0, r5, 0
@@ -28074,7 +28074,7 @@ sub_81D4E30: @ 81D4E30
strh r0, [r1]
bl OpenLink
movs r0, 0x1
- bl sub_800B330
+ bl SetSuppressLinkErrorMessage
pop {r0}
bx r0
.pool
@@ -28090,7 +28090,7 @@ sub_81D4E60: @ 81D4E60
strh r0, [r1]
movs r0, 0
strh r0, [r2]
- ldr r0, =gUnknown_03003174
+ ldr r0, =gLink+0x4
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [sp, 0x4]
@@ -28157,7 +28157,7 @@ sub_81D4EE4: @ 81D4EE4
lsrs r0, 24
cmp r0, 0x2
bhi _081D4F08
- bl sub_800B33C
+ bl HasLinkErrorOccurred
lsls r0, 24
cmp r0, 0
beq _081D4F08
@@ -28256,7 +28256,7 @@ _081D4FB6:
ldrb r0, [r0]
cmp r0, 0
beq _081D4FE6
- bl sub_800A23C
+ bl IsLinkPlayerDataExchangeComplete
lsls r0, 24
cmp r0, 0
beq _081D4FE0
@@ -28665,7 +28665,7 @@ _081D5360:
strb r0, [r4, 0x8]
b _081D548A
_081D536A:
- bl sub_800B33C
+ bl HasLinkErrorOccurred
lsls r0, 24
cmp r0, 0
beq _081D537A
diff --git a/asm/record_mixing.s b/asm/record_mixing.s
index 172af60a6..2dab009a5 100644
--- a/asm/record_mixing.s
+++ b/asm/record_mixing.s
@@ -621,7 +621,7 @@ _080E726C:
bne _080E730A
movs r0, 0x4
strh r0, [r5]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _080E7296
@@ -664,7 +664,7 @@ _080E72C0:
ldr r0, [r0]
bl Free
bl sub_808729C
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080E72F8
@@ -747,7 +747,7 @@ _080E7384:
movs r0, 0xC8
lsls r0, 1
strh r0, [r5, 0x8]
- bl sub_8009FAC
+ bl ClearLinkCallback_2
b _080E7566
.pool
_080E73A0:
@@ -2393,7 +2393,7 @@ _080E80C0:
lsls r0, 24
cmp r0, 0
bne _080E810A
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080E80E8
diff --git a/asm/rom6.s b/asm/rom6.s
index cc02638bc..297c81128 100644
--- a/asm/rom6.s
+++ b/asm/rom6.s
@@ -448,4 +448,5 @@ _081357EE:
.pool
thumb_func_end sub_81357BC
+
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/link.s b/asm/rom_8011DC0.s
index 805b3aec0..80bc66f3f 100644
--- a/asm/link.s
+++ b/asm/rom_8011DC0.s
@@ -5,17767 +5,6 @@
.text
- thumb_func_start sub_80093CC
-sub_80093CC: @ 80093CC
- push {lr}
- bl sub_800B488
- bl sub_800E700
- bl sub_800BEC0
- ldr r1, =0x00008001
- cmp r0, r1
- beq _080093F4
- bl sub_800B4A4
- bl CloseLink
- bl RestoreSerialTimer3IntrHandlers
- movs r0, 0
- b _080093FE
- .pool
-_080093F4:
- bl rfu_REQ_stopMode
- bl rfu_waitREQComplete
- movs r0, 0x1
-_080093FE:
- pop {r1}
- bx r1
- thumb_func_end sub_80093CC
-
- thumb_func_start Task_DestroySelf
-Task_DestroySelf: @ 8009404
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- pop {r0}
- bx r0
- thumb_func_end Task_DestroySelf
-
- thumb_func_start sub_8009414
-sub_8009414: @ 8009414
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- ldr r4, [sp, 0x18]
- lsls r5, 24
- lsrs r5, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r2, 24
- lsrs r6, r2, 24
- lsls r3, 24
- lsrs r7, r3, 24
- lsls r4, 16
- lsrs r4, 16
- ldr r0, =gLinkTestDigitsPal
- lsls r1, r5, 4
- movs r2, 0x20
- bl LoadPalette
- ldr r3, =0x040000d4
- ldr r0, =gLinkTestDigitsGfx
- str r0, [r3]
- lsls r2, r7, 14
- lsls r0, r4, 5
- movs r1, 0xC0
- lsls r1, 19
- adds r0, r1
- adds r2, r0
- str r2, [r3, 0x4]
- ldr r0, =0x80000110
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
- ldr r0, =gUnknown_03003130
- str r6, [r0]
- str r5, [r0, 0x4]
- str r4, [r0, 0x8]
- mov r0, r8
- cmp r0, 0x2
- beq _0800949E
- cmp r0, 0x2
- bgt _08009484
- cmp r0, 0x1
- beq _0800948C
- b _080094C0
- .pool
-_08009484:
- mov r0, r8
- cmp r0, 0x3
- beq _080094B0
- b _080094C0
-_0800948C:
- lsls r1, r6, 8
- movs r0, 0x1
- orrs r1, r0
- lsls r0, r7, 2
- orrs r1, r0
- movs r0, 0xA
- bl SetGpuReg
- b _080094C0
-_0800949E:
- lsls r1, r6, 8
- movs r0, 0x1
- orrs r1, r0
- lsls r0, r7, 2
- orrs r1, r0
- movs r0, 0xC
- bl SetGpuReg
- b _080094C0
-_080094B0:
- lsls r1, r6, 8
- movs r0, 0x1
- orrs r1, r0
- lsls r0, r7, 2
- orrs r1, r0
- movs r0, 0xE
- bl SetGpuReg
-_080094C0:
- mov r0, r8
- lsls r4, r0, 2
- adds r0, r4, 0
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl SetGpuReg
- adds r4, 0x12
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl SetGpuReg
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8009414
-
- thumb_func_start sub_80094EC
-sub_80094EC: @ 80094EC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- adds r6, r1, 0
- adds r4, r2, 0
- adds r5, r3, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r6, 24
- lsrs r6, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gLinkTestDigitsPal
- mov r2, r8
- lsls r1, r2, 4
- movs r2, 0x20
- bl LoadPalette
- ldr r2, =0x040000d4
- ldr r0, =gLinkTestDigitsGfx
- str r0, [r2]
- lsls r0, r5, 14
- movs r1, 0xC0
- lsls r1, 19
- adds r0, r1
- str r0, [r2, 0x4]
- ldr r0, =0x80000110
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- ldr r0, =gUnknown_03003130
- str r4, [r0]
- mov r1, r8
- str r1, [r0, 0x4]
- movs r1, 0
- str r1, [r0, 0x8]
- ldr r0, =gUnknown_082ED1D0
- adds r6, r0
- ldrb r0, [r6]
- lsls r4, 8
- lsls r5, 2
- orrs r4, r5
- adds r1, r4, 0
- bl SetGpuReg
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80094EC
-
- thumb_func_start sub_8009570
-sub_8009570: @ 8009570
- push {r4,lr}
- sub sp, 0x4
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetTasks
- ldr r0, =sub_80096BC
- bl SetVBlankCallback
- bl sub_800A2E0
- ldr r1, =gLinkType
- ldr r2, =0x00001111
- adds r0, r2, 0
- strh r0, [r1]
- bl OpenLink
- ldr r0, =gMain
- ldrh r0, [r0, 0x24]
- bl SeedRng
- movs r4, 0
-_080095A0:
- bl Random
- ldr r1, =gSaveBlock2Ptr
- ldr r1, [r1]
- adds r1, 0xA
- adds r1, r4
- strb r0, [r1]
- adds r4, 0x1
- cmp r4, 0x3
- ble _080095A0
- movs r4, 0
- str r4, [sp]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0x4
- movs r3, 0
- bl sub_8009414
- movs r1, 0xAA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, =Task_DestroySelf
- movs r1, 0
- bl CreateTask
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- ldr r0, =gUnknown_03000D60
- str r4, [r0]
- bl sub_8009638
- ldr r0, =task00_link_test
- movs r1, 0
- bl CreateTask
- ldr r0, =c2_08009A8C
- bl SetMainCallback2
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009570
-
- thumb_func_start sub_8009628
-sub_8009628: @ 8009628
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_020229CC
- strh r0, [r1, 0x18]
- bx lr
- .pool
- thumb_func_end sub_8009628
-
- thumb_func_start sub_8009638
-sub_8009638: @ 8009638
- push {r4,r5,lr}
- ldr r5, =gUnknown_020229CC
- ldr r4, =gSaveBlock2Ptr
- ldr r1, [r4]
- ldrb r2, [r1, 0xA]
- ldrb r0, [r1, 0xB]
- lsls r0, 8
- orrs r2, r0
- ldrb r0, [r1, 0xC]
- lsls r0, 16
- orrs r2, r0
- ldrb r0, [r1, 0xD]
- lsls r0, 24
- orrs r2, r0
- str r2, [r5, 0x4]
- adds r0, r5, 0
- adds r0, 0x8
- bl StringCopy
- ldr r0, [r4]
- ldrb r0, [r0, 0x8]
- strb r0, [r5, 0x13]
- ldr r0, =gLinkType
- ldrh r0, [r0]
- str r0, [r5, 0x14]
- ldr r0, =gGameLanguage
- ldrb r0, [r0]
- strh r0, [r5, 0x1A]
- ldr r0, =gGameVersion
- ldrb r0, [r0]
- movs r2, 0x80
- lsls r2, 7
- adds r1, r2, 0
- adds r0, r1
- strh r0, [r5]
- movs r0, 0x80
- lsls r0, 8
- strh r0, [r5, 0x2]
- bl IsNationalPokedexEnabled
- strb r0, [r5, 0x10]
- ldr r0, =0x0000087f
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0800969E
- ldrb r0, [r5, 0x10]
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r5, 0x10]
-_0800969E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009638
-
- thumb_func_start sub_80096BC
-sub_80096BC: @ 80096BC
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80096BC
-
- thumb_func_start sub_80096D0
-sub_80096D0: @ 80096D0
- push {lr}
- ldr r3, =gUnknown_020229C4
- ldr r1, =gSendCmd
- ldr r2, =0x0000efff
- adds r0, r1, 0
- adds r0, 0xE
-_080096DC:
- strh r2, [r0]
- subs r0, 0x2
- cmp r0, r1
- bge _080096DC
- movs r0, 0x1
- strb r0, [r3]
- bl sub_800B594
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80096D0
-
- thumb_func_start task02_080097CC
-task02_080097CC: @ 80096FC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- 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]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- bne _08009726
- ldr r1, =gUnknown_03003144
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r2, 0
- bl DestroyTask
-_08009726:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task02_080097CC
-
- thumb_func_start OpenLink
-OpenLink: @ 8009734
- push {r4-r6,lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r4, [r0]
- cmp r4, 0
- bne _080097A8
- bl sub_800B628
- bl sub_80096D0
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800A824
- str r0, [r1]
- ldr r0, =gUnknown_03002748
- strb r4, [r0]
- ldr r0, =gUnknown_0300306C
- strb r4, [r0]
- ldr r0, =gUnknown_030030F8
- strb r4, [r0]
- bl ResetBlockReceivedFlags
- bl sub_800A2E0
- ldr r0, =gUnknown_03000D54
- str r4, [r0]
- ldr r0, =gUnknown_030030E8
- strb r4, [r0]
- ldr r0, =gUnknown_030030E4
- strb r4, [r0]
- ldr r0, =gUnknown_030030F4
- strh r4, [r0]
- ldr r0, =task02_080097CC
- movs r1, 0x2
- bl CreateTask
- b _080097AC
- .pool
-_080097A8:
- bl sub_800E700
-_080097AC:
- ldr r1, =gReceivedRemoteLinkPlayers
- movs r0, 0
- strb r0, [r1]
- movs r1, 0
- ldr r6, =gUnknown_03003078
- movs r2, 0
- movs r5, 0x1
- ldr r4, =gUnknown_030030F0
- ldr r3, =gUnknown_030030EC
-_080097BE:
- adds r0, r1, r6
- strb r5, [r0]
- adds r0, r1, r4
- strb r2, [r0]
- adds r0, r1, r3
- strb r2, [r0]
- adds r1, 0x1
- cmp r1, 0x3
- ble _080097BE
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end OpenLink
-
- thumb_func_start CloseLink
-CloseLink: @ 80097E8
- push {r4,lr}
- ldr r0, =gReceivedRemoteLinkPlayers
- movs r4, 0
- strb r4, [r0]
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _080097FC
- bl sub_800EDD4
-_080097FC:
- ldr r0, =gUnknown_020229C4
- strb r4, [r0]
- bl sub_800B53C
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CloseLink
-
- thumb_func_start sub_8009818
-sub_8009818: @ 8009818
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r5, =gUnknown_03000D64
- ldr r4, =gUnknown_03000D10
- ldrb r0, [r5]
- ldrh r1, [r4]
- cmp r0, r1
- beq _0800983C
- ldrh r0, [r4]
- movs r1, 0x2
- movs r2, 0x3
- movs r3, 0x2
- bl sub_800A6E8
- ldrh r0, [r4]
- strb r0, [r5]
-_0800983C:
- movs r5, 0
- ldr r7, =gUnknown_03000D20
-_08009840:
- ldr r0, =gUnknown_03000D68
- adds r6, r5, r0
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r4, r0, r7
- ldrb r0, [r6]
- ldrh r1, [r4]
- cmp r0, r1
- beq _08009868
- ldrh r0, [r4]
- adds r2, r5, 0x4
- lsls r2, 24
- lsrs r2, 24
- movs r1, 0x2
- movs r3, 0x2
- bl sub_800A6E8
- ldrh r0, [r4]
- strb r0, [r6]
-_08009868:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _08009840
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0xF
- bne _080098CE
- movs r5, 0
- ldr r0, =gUnknown_03000D20
- mov r9, r0
- ldr r1, =0x00000342
- mov r8, r1
-_08009888:
- adds r0, r7, 0
- asrs r0, r5
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080098C4
- lsls r0, r5, 8
- ldr r1, =gBlockRecvBuffer
- adds r0, r1
- lsls r4, r5, 1
- adds r1, r4, r5
- lsls r1, 2
- add r1, r9
- ldrh r1, [r1, 0x2]
- bl sub_800A648
- ldr r1, =gUnknown_03003148
- adds r4, r1
- movs r6, 0
- strh r0, [r4]
- adds r0, r5, 0
- bl ResetBlockReceivedFlag
- ldrh r0, [r4]
- cmp r0, r8
- beq _080098C4
- ldr r0, =gUnknown_020223BC
- strb r6, [r0]
- ldr r0, =gUnknown_020223BD
- strb r6, [r0]
-_080098C4:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _08009888
-_080098CE:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009818
-
- thumb_func_start sub_8009900
-sub_8009900: @ 8009900
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r4, =gMain
- ldrh r1, [r4, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08009916
- ldr r1, =gUnknown_03003144
- movs r0, 0x1
- strb r0, [r1]
-_08009916:
- ldrh r1, [r4, 0x2C]
- movs r5, 0x2
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _0800992A
- ldr r0, =0x02004000
- ldr r1, =0x00002004
- bl sub_800A2F4
-_0800992A:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _08009946
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_08009946:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08009956
- movs r0, 0x1
- bl sub_800B330
-_08009956:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08009968
- movs r0, 0x1
- bl TrySavingData
-_08009968:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08009976
- bl sub_800AC34
-_08009976:
- ldr r0, =gUnknown_020223BC
- ldrb r0, [r0]
- cmp r0, 0
- beq _08009996
- ldr r2, [r4, 0x24]
- ldr r0, =gUnknown_03002748
- ldrb r1, [r0]
- ldr r0, =gUnknown_03003140
- ldr r0, [r0]
- cmp r0, 0
- bne _08009990
- movs r0, 0x10
- orrs r1, r0
-_08009990:
- adds r0, r2, 0
- bl SetLinkDebugValues
-_08009996:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009900
-
- thumb_func_start c2_08009A8C
-c2_08009A8C: @ 80099BC
- push {lr}
- bl sub_8009900
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0
- bl sub_8009818
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end c2_08009A8C
-
- thumb_func_start sub_80099E0
-sub_80099E0: @ 80099E0
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, =gUnknown_020229C4
- ldrb r0, [r0]
- cmp r0, 0
- bne _080099F4
- movs r0, 0
- b _08009A3C
- .pool
-_080099F4:
- movs r1, 0
- ldr r5, =gUnknown_03003084
- ldr r3, =gSendCmd
- movs r2, 0
-_080099FC:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x7
- bls _080099FC
- ldrh r0, [r4]
- strh r0, [r5]
- ldr r0, =gLinkStatus
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08009A38
- ldr r0, =0x04000128
- ldr r0, [r0]
- lsls r0, 26
- lsrs r0, 30
- bl sub_8009AA0
- ldr r0, =gUnknown_03003140
- ldr r0, [r0]
- cmp r0, 0
- beq _08009A34
- bl _call_via_r0
-_08009A34:
- bl sub_800AEB4
-_08009A38:
- ldr r0, =gLinkStatus
- ldrh r0, [r0]
-_08009A3C:
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80099E0
-
- thumb_func_start sub_8009A58
-sub_8009A58: @ 8009A58
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- movs r5, 0
- ldr r1, =gUnknown_03003078
- adds r0, r1
- strb r5, [r0]
- movs r4, 0
- adds r6, r1, 0
- b _08009A78
- .pool
-_08009A70:
- adds r0, r4, r6
- ldrb r0, [r0]
- adds r5, r0
- adds r4, 0x1
-_08009A78:
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- blt _08009A70
- cmp r5, 0
- bne _08009A94
- ldr r1, =gReceivedRemoteLinkPlayers
- ldrb r0, [r1]
- cmp r0, 0
- bne _08009A94
- movs r0, 0x1
- strb r0, [r1]
-_08009A94:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009A58
-
- thumb_func_start sub_8009AA0
-sub_8009AA0: @ 8009AA0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r6, 0
-_08009AAE:
- ldr r0, =gUnknown_03003020
- lsls r1, r6, 1
- adds r3, r1, r0
- movs r0, 0
- strh r0, [r3]
- lsls r4, r6, 4
- ldr r5, =gRecvCmds
- adds r2, r4, r5
- ldrh r0, [r2]
- mov r12, r1
- adds r7, r6, 0x1
- str r7, [sp]
- cmp r0, 0
- bne _08009ACC
- b _08009D6E
-_08009ACC:
- ldrh r1, [r2]
- ldr r0, =0x00005fff
- cmp r1, r0
- bne _08009AD6
- b _08009D20
-_08009AD6:
- cmp r1, r0
- bgt _08009B24
- ldr r0, =0x00004444
- cmp r1, r0
- bne _08009AE2
- b _08009D64
-_08009AE2:
- cmp r1, r0
- bgt _08009B10
- ldr r0, =0x00002222
- cmp r1, r0
- beq _08009B68
- ldr r0, =0x00002ffe
- cmp r1, r0
- bne _08009AF4
- b _08009D28
-_08009AF4:
- b _08009D6E
- .pool
-_08009B10:
- ldr r0, =0x00005555
- cmp r1, r0
- beq _08009BB8
- adds r0, 0x11
- cmp r1, r0
- beq _08009BB8
- b _08009D6E
- .pool
-_08009B24:
- ldr r0, =0x0000bbbb
- cmp r1, r0
- beq _08009BC4
- cmp r1, r0
- bgt _08009B4C
- ldr r0, =0x00008888
- cmp r1, r0
- beq _08009BF0
- ldr r0, =0x0000aaaa
- cmp r1, r0
- bne _08009B3C
- b _08009D38
-_08009B3C:
- b _08009D6E
- .pool
-_08009B4C:
- ldr r0, =0x0000cafe
- cmp r1, r0
- bne _08009B54
- b _08009D64
-_08009B54:
- ldr r0, =0x0000cccc
- cmp r1, r0
- bne _08009B5C
- b _08009D3E
-_08009B5C:
- b _08009D6E
- .pool
-_08009B68:
- bl sub_8009638
- ldr r0, =gUnknown_03003030
- adds r2, r0, 0
- adds r2, 0x10
- ldr r1, =gUnknown_020229CC
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r1!, {r3,r6,r7}
- stm r2!, {r3,r6,r7}
- ldr r1, [r1]
- str r1, [r2]
- ldr r4, =gASCIIGameFreakInc
- adds r2, r0, 0
- adds r1, r4, 0
- ldm r1!, {r5-r7}
- stm r2!, {r5-r7}
- ldrh r3, [r1]
- strh r3, [r2]
- ldrb r1, [r1, 0x2]
- strb r1, [r2, 0x2]
- adds r1, r0, 0
- adds r1, 0x2C
- ldm r4!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldrh r2, [r4]
- strh r2, [r1]
- ldrb r2, [r4, 0x2]
- strb r2, [r1, 0x2]
- movs r1, 0x3C
- bl sub_800A2F4
- b _08009D6E
- .pool
-_08009BB8:
- ldr r1, =gUnknown_030030E8
- movs r0, 0x1
- strb r0, [r1]
- b _08009D6E
- .pool
-_08009BC4:
- mov r7, r12
- adds r1, r7, r6
- lsls r1, 2
- ldr r0, =gUnknown_03000D20
- adds r1, r0
- movs r2, 0
- strh r2, [r1]
- ldr r0, =gRecvCmds
- adds r0, 0x2
- adds r0, r4, r0
- ldrh r0, [r0]
- strh r0, [r1, 0x2]
- ldr r0, =gRecvCmds
- adds r0, 0x4
- adds r0, r4, r0
- ldrh r0, [r0]
- strb r0, [r1, 0x9]
- b _08009D6E
- .pool
-_08009BF0:
- mov r3, r12
- adds r0, r3, r6
- lsls r0, 2
- ldr r5, =gUnknown_03000D20
- adds r3, r0, r5
- ldrh r1, [r3, 0x2]
- movs r0, 0x80
- lsls r0, 1
- adds r7, r5, 0
- mov r10, r7
- cmp r1, r0
- bls _08009C40
- ldr r0, =0x0201c000
- mov r8, r0
- movs r2, 0
- adds r5, r3, 0
- ldr r7, =gRecvCmds
- adds r3, r4, 0
-_08009C14:
- ldrh r1, [r5]
- lsrs r1, 1
- adds r1, r2
- lsls r1, 1
- add r1, r8
- adds r2, 0x1
- lsls r0, r2, 1
- adds r0, r3
- adds r0, r7
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r2, 16
- lsrs r2, 16
- cmp r2, 0x6
- bls _08009C14
- b _08009C70
- .pool
-_08009C40:
- movs r2, 0
- ldr r1, =gBlockRecvBuffer
- mov r9, r1
- adds r7, r3, 0
- ldr r3, =gRecvCmds
- mov r8, r3
- lsls r5, r6, 8
- adds r3, r4, 0
-_08009C50:
- ldrh r1, [r7]
- lsrs r1, 1
- adds r1, r2
- lsls r1, 1
- adds r1, r5
- add r1, r9
- adds r2, 0x1
- lsls r0, r2, 1
- adds r0, r3
- add r0, r8
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r2, 16
- lsrs r2, 16
- cmp r2, 0x6
- bls _08009C50
-_08009C70:
- mov r4, r12
- adds r1, r4, r6
- lsls r1, 2
- add r1, r10
- ldrh r0, [r1]
- adds r0, 0xE
- movs r3, 0
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r1, 0x2]
- cmp r0, r1
- bcc _08009D6E
- ldr r0, =gUnknown_03003078
- adds r0, r6, r0
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08009D16
- lsls r1, r6, 8
- ldr r0, =gBlockRecvBuffer
- adds r1, r0
- mov r8, r1
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- ldr r1, =gLinkPlayers
- adds r2, r0, r1
- adds r1, r2, 0
- mov r0, r8
- adds r0, 0x10
- ldm r0!, {r4,r5,r7}
- stm r1!, {r4,r5,r7}
- ldm r0!, {r4,r5,r7}
- stm r1!, {r4,r5,r7}
- ldr r0, [r0]
- str r0, [r1]
- ldrb r0, [r2]
- subs r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _08009CCA
- strb r3, [r2, 0x12]
- strb r3, [r2, 0x11]
- strb r3, [r2, 0x10]
-_08009CCA:
- adds r0, r2, 0
- bl sub_800B524
- ldr r5, =gASCIIGameFreakInc
- mov r0, r8
- adds r1, r5, 0
- bl strcmp
- cmp r0, 0
- bne _08009CEC
- mov r0, r8
- adds r0, 0x2C
- adds r1, r5, 0
- bl strcmp
- cmp r0, 0
- beq _08009D0C
-_08009CEC:
- ldr r0, =c2_800ACD4
- bl SetMainCallback2
- b _08009D6E
- .pool
-_08009D0C:
- lsls r0, r6, 24
- lsrs r0, 24
- bl sub_8009A58
- b _08009D6E
-_08009D16:
- lsls r0, r6, 24
- lsrs r0, 24
- bl sub_800A588
- b _08009D6E
-_08009D20:
- ldr r0, =gUnknown_030030F0
- b _08009D2A
- .pool
-_08009D28:
- ldr r0, =gUnknown_030030EC
-_08009D2A:
- adds r0, r6, r0
- movs r1, 0x1
- strb r1, [r0]
- b _08009D6E
- .pool
-_08009D38:
- bl sub_800A418
- b _08009D6E
-_08009D3E:
- ldr r3, =gUnknown_082ED1A8
- ldr r0, =gRecvCmds
- adds r0, 0x2
- adds r0, r4, r0
- ldrh r2, [r0]
- lsls r2, 3
- adds r0, r2, r3
- ldr r1, [r0]
- adds r3, 0x4
- adds r2, r3
- ldrh r2, [r2]
- movs r0, 0
- bl SendBlock
- b _08009D6E
- .pool
-_08009D64:
- ldr r0, =gRecvCmds
- adds r0, 0x2
- adds r0, r4, r0
- ldrh r0, [r0]
- strh r0, [r3]
-_08009D6E:
- ldr r5, [sp]
- lsls r0, r5, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bhi _08009D7A
- b _08009AAE
-_08009D7A:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009AA0
-
- thumb_func_start sub_8009D90
-sub_8009D90: @ 8009D90
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, =0x00006666
- cmp r2, r0
- beq _08009E60
- cmp r2, r0
- bgt _08009DF0
- ldr r0, =0x00004444
- cmp r2, r0
- beq _08009E4C
- cmp r2, r0
- bgt _08009DCC
- ldr r0, =0x00002222
- cmp r2, r0
- beq _08009E38
- ldr r0, =0x00002ffe
-_08009DB2:
- cmp r2, r0
- bne _08009DB8
- b _08009EE4
-_08009DB8:
- b _08009F06
- .pool
-_08009DCC:
- ldr r0, =0x00005566
- cmp r2, r0
- bne _08009DD4
- b _08009EE4
-_08009DD4:
- cmp r2, r0
- bgt _08009DE0
- subs r0, 0x11
- b _08009DB2
- .pool
-_08009DE0:
- ldr r0, =0x00005fff
- cmp r2, r0
- bne _08009DE8
- b _08009ED0
-_08009DE8:
- b _08009F06
- .pool
-_08009DF0:
- ldr r0, =0x0000aaab
- cmp r2, r0
- beq _08009EA8
- cmp r2, r0
- bgt _08009E10
- ldr r0, =0x00007777
- cmp r2, r0
- beq _08009E6C
- ldr r0, =0x0000aaaa
- b _08009DB2
- .pool
-_08009E10:
- ldr r0, =0x0000cafe
- cmp r2, r0
- beq _08009EF0
- cmp r2, r0
- bgt _08009E2C
- ldr r0, =0x0000bbbb
- cmp r2, r0
- beq _08009E8C
- b _08009F06
- .pool
-_08009E2C:
- ldr r0, =0x0000cccc
- cmp r2, r0
- beq _08009EBC
- b _08009F06
- .pool
-_08009E38:
- ldr r0, =gSendCmd
- strh r2, [r0]
- ldr r1, =gLinkType
- ldrh r1, [r1]
- b _08009F04
- .pool
-_08009E4C:
- ldr r0, =gSendCmd
- strh r2, [r0]
- ldr r1, =gMain
- ldrh r1, [r1, 0x2C]
- b _08009F04
- .pool
-_08009E60:
- ldr r0, =gSendCmd
- movs r1, 0
- b _08009F02
- .pool
-_08009E6C:
- ldr r0, =gSendCmd
- strh r2, [r0]
- movs r1, 0
- adds r3, r0, 0
- movs r2, 0xEE
-_08009E76:
- adds r1, 0x1
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x4
- bls _08009E76
- b _08009F06
- .pool
-_08009E8C:
- ldr r1, =gSendCmd
- strh r2, [r1]
- ldr r2, =gUnknown_03000D10
- ldrh r0, [r2, 0x2]
- strh r0, [r1, 0x2]
- ldrb r0, [r2, 0x9]
- adds r0, 0x80
- strh r0, [r1, 0x4]
- b _08009F06
- .pool
-_08009EA8:
- ldr r0, =gSendCmd
- strh r2, [r0]
- ldr r1, =gSpecialVar_ItemId
- ldrh r1, [r1]
- b _08009F04
- .pool
-_08009EBC:
- ldr r0, =gSendCmd
- strh r2, [r0]
- ldr r1, =gUnknown_03003150
- ldrb r1, [r1]
- b _08009F04
- .pool
-_08009ED0:
- ldr r0, =gSendCmd
- strh r2, [r0]
- ldr r1, =gUnknown_030030F4
- ldrh r1, [r1]
- b _08009F04
- .pool
-_08009EE4:
- ldr r0, =gSendCmd
- strh r2, [r0]
- b _08009F06
- .pool
-_08009EF0:
- ldr r0, =gUnknown_03005DA8
- ldrh r1, [r0]
- cmp r1, 0
- beq _08009F06
- ldr r0, =gUnknown_030022B4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08009F06
- ldr r0, =gSendCmd
-_08009F02:
- strh r2, [r0]
-_08009F04:
- strh r1, [r0, 0x2]
-_08009F06:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009D90
-
- thumb_func_start sub_8009F18
-sub_8009F18: @ 8009F18
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08009F26
- bl sub_800F804
-_08009F26:
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_8009F70
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009F18
-
- thumb_func_start sub_8009F3C
-sub_8009F3C: @ 8009F3C
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08009F50
- bl sub_800F7E4
- b _08009F6A
- .pool
-_08009F50:
- ldr r0, =gUnknown_03003140
- ldr r1, [r0]
- ldr r0, =sub_8009F70
- cmp r1, r0
- beq _08009F68
- movs r0, 0
- b _08009F6A
- .pool
-_08009F68:
- movs r0, 0x1
-_08009F6A:
- pop {r1}
- bx r1
- thumb_func_end sub_8009F3C
-
- thumb_func_start sub_8009F70
-sub_8009F70: @ 8009F70
- push {lr}
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08009F80
- ldr r0, =0x0000cafe
- bl sub_8009D90
-_08009F80:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009F70
-
- thumb_func_start sub_8009F8C
-sub_8009F8C: @ 8009F8C
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r1, [r0]
- cmp r1, 0
- beq _08009FA0
- bl Rfu_set_zero
- b _08009FA4
- .pool
-_08009FA0:
- ldr r0, =gUnknown_03003140
- str r1, [r0]
-_08009FA4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009F8C
-
- thumb_func_start sub_8009FAC
-sub_8009FAC: @ 8009FAC
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r1, [r0]
- cmp r1, 0
- beq _08009FC0
- bl Rfu_set_zero
- b _08009FC4
- .pool
-_08009FC0:
- ldr r0, =gUnknown_03003140
- str r1, [r0]
-_08009FC4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8009FAC
-
- thumb_func_start GetLinkPlayerCount
-GetLinkPlayerCount: @ 8009FCC
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _08009FEC
- ldr r0, =gLinkStatus
- ldr r0, [r0]
- movs r1, 0x1C
- ands r0, r1
- lsrs r0, 2
- b _08009FF4
- .pool
-_08009FEC:
- bl sub_80104F4
- lsls r0, 24
- lsrs r0, 24
-_08009FF4:
- pop {r1}
- bx r1
- thumb_func_end GetLinkPlayerCount
-
- thumb_func_start sub_8009FF8
-sub_8009FF8: @ 8009FF8
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r4, r0, 24
- movs r2, 0
- cmp r2, r4
- bge _0800A030
- movs r7, 0xFF
- ldr r3, =gLinkPlayers
-_0800A010:
- ldrh r0, [r3]
- adds r1, r7, 0
- ands r1, r0
- cmp r1, r6
- beq _0800A01E
- cmp r1, r5
- bne _0800A028
-_0800A01E:
- movs r0, 0x1
- b _0800A034
- .pool
-_0800A028:
- adds r3, 0x1C
- adds r2, 0x1
- cmp r2, r4
- blt _0800A010
-_0800A030:
- movs r0, 0x1
- negs r0, r0
-_0800A034:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8009FF8
-
- thumb_func_start sub_800A03C
-sub_800A03C: @ 800A03C
- movs r0, 0x2
- bx lr
- thumb_func_end sub_800A03C
-
- thumb_func_start sub_800A040
-sub_800A040: @ 800A040
- push {lr}
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _0800A05A
- movs r0, 0x2
- movs r1, 0x1
- bl sub_8009FF8
- cmp r0, 0
- bge _0800A05E
-_0800A05A:
- movs r0, 0
- b _0800A060
-_0800A05E:
- movs r0, 0x1
-_0800A060:
- pop {r1}
- bx r1
- thumb_func_end sub_800A040
-
- thumb_func_start sub_800A064
-sub_800A064: @ 800A064
- push {lr}
- movs r0, 0x2
- movs r1, 0x1
- bl sub_8009FF8
- cmp r0, 0
- bge _0800A076
- movs r0, 0
- b _0800A078
-_0800A076:
- movs r0, 0x1
-_0800A078:
- pop {r1}
- bx r1
- thumb_func_end sub_800A064
-
- thumb_func_start sub_800A07C
-sub_800A07C: @ 800A07C
- push {lr}
- movs r0, 0x4
- movs r1, 0x5
- bl sub_8009FF8
- adds r2, r0, 0
- cmp r2, 0
- blt _0800A0A4
- ldr r0, =gLinkPlayers
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1, 0x1A]
- cmp r0, 0x1
- bne _0800A0A4
- movs r0, 0x1
- b _0800A0A6
- .pool
-_0800A0A4:
- movs r0, 0
-_0800A0A6:
- pop {r1}
- bx r1
- thumb_func_end sub_800A07C
-
- thumb_func_start sub_800A0AC
-sub_800A0AC: @ 800A0AC
- push {lr}
- ldr r0, =gUnknown_03000D5C
- movs r1, 0
- str r1, [r0]
- ldr r0, =gUnknown_020229C8
- strh r1, [r0]
- bl OpenLink
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A0AC
-
- thumb_func_start sub_800A0C8
-sub_800A0C8: @ 800A0C8
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- movs r7, 0
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r4, [r0]
- cmp r4, 0x1
- beq _0800A0DA
- b _0800A214
-_0800A0DA:
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bgt _0800A0EA
- cmp r0, r6
- ble _0800A0FC
-_0800A0EA:
- ldr r1, =gUnknown_03000D5C
- movs r0, 0x6
- str r0, [r1]
- b _0800A22E
- .pool
-_0800A0FC:
- bl GetLinkPlayerCount
- lsls r0, 24
- cmp r0, 0
- bne _0800A10E
- ldr r0, =gUnknown_0300306C
- strb r4, [r0]
- bl CloseLink
-_0800A10E:
- movs r6, 0
- ldr r4, =gLinkPlayers
- movs r5, 0
- b _0800A134
- .pool
-_0800A120:
- adds r0, r4, 0
- adds r0, 0x14
- adds r0, r5, r0
- ldr r1, [r0]
- ldr r0, [r4, 0x14]
- cmp r1, r0
- bne _0800A130
- adds r7, 0x1
-_0800A130:
- adds r5, 0x1C
- adds r6, 0x1
-_0800A134:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r6, r0
- blt _0800A120
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r7, r0
- bne _0800A1AC
- ldr r0, =gLinkPlayers
- ldr r1, [r0, 0x14]
- ldr r0, =0x00001133
- cmp r1, r0
- bne _0800A19C
- bl sub_807A728
- cmp r0, 0x1
- beq _0800A184
- cmp r0, 0x1
- bgt _0800A178
- cmp r0, 0
- beq _0800A19C
- ldr r3, =gUnknown_03000D5C
- b _0800A22C
- .pool
-_0800A178:
- cmp r0, 0x2
- beq _0800A190
- ldr r3, =gUnknown_03000D5C
- b _0800A22C
- .pool
-_0800A184:
- ldr r1, =gUnknown_03000D5C
- movs r0, 0x4
- b _0800A1A0
- .pool
-_0800A190:
- ldr r1, =gUnknown_03000D5C
- movs r0, 0x5
- b _0800A1A0
- .pool
-_0800A19C:
- ldr r1, =gUnknown_03000D5C
- movs r0, 0x1
-_0800A1A0:
- str r0, [r1]
- adds r3, r1, 0
- b _0800A22C
- .pool
-_0800A1AC:
- ldr r6, =gUnknown_03000D5C
- movs r0, 0x3
- str r0, [r6]
- ldr r4, =gLinkPlayers
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r4, 0x14
- adds r1, r4
- ldr r5, [r1]
- bl GetMultiplayerId
- movs r1, 0x1
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r4
- ldr r1, [r1]
- ldr r2, =0x00002266
- cmp r5, r2
- bne _0800A1EA
- ldr r0, =0x00002277
- cmp r1, r0
- beq _0800A1F6
-_0800A1EA:
- ldr r0, =0x00002277
- adds r3, r6, 0
- cmp r5, r0
- bne _0800A22C
- cmp r1, r2
- bne _0800A22C
-_0800A1F6:
- ldr r1, =gSpecialVar_0x8005
- movs r0, 0x3
- strh r0, [r1]
- ldr r3, =gUnknown_03000D5C
- b _0800A22C
- .pool
-_0800A214:
- ldr r0, =gUnknown_020229C8
- ldrh r1, [r0]
- adds r1, 0x1
- strh r1, [r0]
- lsls r1, 16
- movs r0, 0x96
- lsls r0, 18
- ldr r3, =gUnknown_03000D5C
- cmp r1, r0
- bls _0800A22C
- movs r0, 0x2
- str r0, [r3]
-_0800A22C:
- ldrb r0, [r3]
-_0800A22E:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800A0C8
-
- thumb_func_start sub_800A23C
-sub_800A23C: @ 800A23C
- push {r4-r6,lr}
- movs r6, 0
- movs r4, 0
- ldr r5, =gLinkPlayers
- b _0800A26C
- .pool
-_0800A24C:
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x14
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r5, 0x14]
- cmp r1, r0
- bne _0800A266
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0800A266:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_0800A26C:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bcc _0800A24C
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r6, r0
- bne _0800A290
- movs r2, 0x1
- ldr r0, =gUnknown_03000D5C
- str r2, [r0]
- b _0800A298
- .pool
-_0800A290:
- movs r2, 0
- ldr r1, =gUnknown_03000D5C
- movs r0, 0x3
- str r0, [r1]
-_0800A298:
- adds r0, r2, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800A23C
-
- thumb_func_start GetLinkPlayerTrainerId
-GetLinkPlayerTrainerId: @ 800A2A4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r2, 0x4
- adds r1, r2
- ldr r0, [r1]
- bx lr
- .pool
- thumb_func_end GetLinkPlayerTrainerId
-
- thumb_func_start sub_800A2BC
-sub_800A2BC: @ 800A2BC
- push {r4,r5,lr}
- ldr r5, =gLinkPlayers
- movs r4, 0x4
-_0800A2C2:
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x1C
- bl memset
- adds r5, 0x1C
- subs r4, 0x1
- cmp r4, 0
- bge _0800A2C2
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A2BC
-
- thumb_func_start sub_800A2E0
-sub_800A2E0: @ 800A2E0
- ldr r1, =gUnknown_03000D10
- movs r0, 0
- strb r0, [r1, 0x8]
- strh r0, [r1]
- strh r0, [r1, 0x2]
- str r0, [r1, 0x4]
- bx lr
- .pool
- thumb_func_end sub_800A2E0
-
- thumb_func_start sub_800A2F4
-sub_800A2F4: @ 800A2F4
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r6, r1, 0
- ldr r4, =gUnknown_03000D10
- ldrb r5, [r4, 0x8]
- cmp r5, 0
- beq _0800A30C
- movs r0, 0
- b _0800A34A
- .pool
-_0800A30C:
- bl GetMultiplayerId
- strb r0, [r4, 0x9]
- movs r0, 0x1
- strb r0, [r4, 0x8]
- strh r6, [r4, 0x2]
- strh r5, [r4]
- adds r0, 0xFF
- cmp r6, r0
- bls _0800A324
- str r7, [r4, 0x4]
- b _0800A336
-_0800A324:
- ldr r5, =gBlockSendBuffer
- cmp r7, r5
- beq _0800A334
- adds r0, r5, 0
- adds r1, r7, 0
- adds r2, r6, 0
- bl memcpy
-_0800A334:
- str r5, [r4, 0x4]
-_0800A336:
- ldr r0, =0x0000bbbb
- bl sub_8009D90
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800A364
- str r0, [r1]
- ldr r1, =gUnknown_03000D50
- movs r0, 0
- str r0, [r1]
- movs r0, 0x1
-_0800A34A:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800A2F4
-
- thumb_func_start sub_800A364
-sub_800A364: @ 800A364
- push {lr}
- ldr r1, =gUnknown_03000D50
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- cmp r0, 0x2
- bls _0800A378
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800A388
- str r0, [r1]
-_0800A378:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A364
-
- thumb_func_start sub_800A388
-sub_800A388: @ 800A388
- push {r4-r6,lr}
- ldr r0, =gUnknown_03000D10
- ldr r5, [r0, 0x4]
- ldr r2, =gSendCmd
- ldr r1, =0x00008888
- strh r1, [r2]
- movs r3, 0
- adds r4, r0, 0
- adds r6, r4, 0
- adds r2, 0x2
-_0800A39C:
- lsls r0, r3, 1
- ldrh r1, [r6]
- adds r0, r1
- adds r0, r5
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- ldrb r0, [r0]
- orrs r0, r1
- strh r0, [r2]
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x6
- ble _0800A39C
- ldrh r0, [r4]
- adds r0, 0xE
- strh r0, [r4]
- ldrh r1, [r4, 0x2]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bhi _0800A3D0
- movs r0, 0
- strb r0, [r4, 0x8]
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800A3EC
- str r0, [r1]
-_0800A3D0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A388
-
- thumb_func_start sub_800A3EC
-sub_800A3EC: @ 800A3EC
- ldr r1, =gUnknown_03003140
- movs r0, 0
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_800A3EC
-
- thumb_func_start sub_800A3F8
-sub_800A3F8: @ 800A3F8
- push {lr}
- bl GetMultiplayerId
- ldr r0, =0x00004444
- bl sub_8009D90
- ldr r1, =gUnknown_020223C0
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A3F8
-
- thumb_func_start sub_800A418
-sub_800A418: @ 800A418
- push {lr}
- ldr r1, =gUnknown_020223C0
- movs r0, 0
- str r0, [r1]
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800A438
- bl sub_800F850
- b _0800A43E
- .pool
-_0800A438:
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800A3F8
- str r0, [r1]
-_0800A43E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A418
-
- thumb_func_start sub_800A44C
-sub_800A44C: @ 800A44C
- ldr r0, =gUnknown_020223C0
- ldr r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_800A44C
-
- thumb_func_start sub_800A458
-sub_800A458: @ 800A458
- push {lr}
- ldr r0, =0x0000aaaa
- bl sub_8009D90
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A458
-
- thumb_func_start GetMultiplayerId
-GetMultiplayerId: @ 800A468
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0800A484
- ldr r0, =0x04000128
- ldr r0, [r0]
- lsls r0, 26
- lsrs r0, 30
- b _0800A48C
- .pool
-_0800A484:
- bl rfu_get_multiplayer_id
- lsls r0, 24
- lsrs r0, 24
-_0800A48C:
- pop {r1}
- bx r1
- thumb_func_end GetMultiplayerId
-
- thumb_func_start bitmask_all_link_players_but_self
-bitmask_all_link_players_but_self: @ 800A490
- push {lr}
- bl GetMultiplayerId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- lsls r0, r1
- movs r1, 0xF
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end bitmask_all_link_players_but_self
-
- thumb_func_start SendBlock
-SendBlock: @ 800A4AC
- push {lr}
- adds r3, r1, 0
- lsls r2, 16
- lsrs r1, r2, 16
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0800A4C8
- adds r0, r3, 0
- bl sub_800A2F4
- b _0800A4CE
- .pool
-_0800A4C8:
- adds r0, r3, 0
- bl sub_800FE84
-_0800A4CE:
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end SendBlock
-
- thumb_func_start sub_800A4D8
-sub_800A4D8: @ 800A4D8
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800A4F8
- adds r0, r1, 0
- bl sub_8010100
- lsls r0, 24
- lsrs r0, 24
- b _0800A514
- .pool
-_0800A4F8:
- ldr r0, =gUnknown_03003140
- ldr r0, [r0]
- cmp r0, 0
- beq _0800A508
- movs r0, 0
- b _0800A514
- .pool
-_0800A508:
- ldr r0, =gUnknown_03003150
- strb r2, [r0]
- ldr r0, =0x0000cccc
- bl sub_8009D90
- movs r0, 0x1
-_0800A514:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800A4D8
-
- thumb_func_start sub_800A520
-sub_800A520: @ 800A520
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800A538
- bl sub_8010500
- lsls r0, 24
- lsrs r0, 24
- b _0800A546
- .pool
-_0800A538:
- movs r1, 0
- ldr r0, =gUnknown_03003140
- ldr r0, [r0]
- cmp r0, 0
- bne _0800A544
- movs r1, 0x1
-_0800A544:
- adds r0, r1, 0
-_0800A546:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800A520
-
- thumb_func_start GetBlockReceivedStatus
-GetBlockReceivedStatus: @ 800A550
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0800A57C
- ldr r2, =gUnknown_0300307C
- ldrb r0, [r2, 0x3]
- lsls r0, 3
- ldrb r1, [r2, 0x2]
- lsls r1, 2
- orrs r0, r1
- ldrb r1, [r2, 0x1]
- lsls r1, 1
- orrs r0, r1
- ldrb r1, [r2]
- orrs r0, r1
- b _0800A580
- .pool
-_0800A57C:
- bl sub_800FCD8
-_0800A580:
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end GetBlockReceivedStatus
-
- thumb_func_start sub_800A588
-sub_800A588: @ 800A588
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800A5A4
- adds r0, r1, 0
- bl sub_800F6FC
- b _0800A5AC
- .pool
-_0800A5A4:
- ldr r0, =gUnknown_0300307C
- adds r0, r1, r0
- movs r1, 0x1
- strb r1, [r0]
-_0800A5AC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A588
-
- thumb_func_start ResetBlockReceivedFlags
-ResetBlockReceivedFlags: @ 800A5B4
- push {r4,lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800A5D4
- movs r4, 0
-_0800A5C0:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_800F728
- adds r4, 0x1
- cmp r4, 0x4
- ble _0800A5C0
- b _0800A5E2
- .pool
-_0800A5D4:
- ldr r1, =gUnknown_0300307C
- movs r2, 0
- adds r0, r1, 0x3
-_0800A5DA:
- strb r2, [r0]
- subs r0, 0x1
- cmp r0, r1
- bge _0800A5DA
-_0800A5E2:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ResetBlockReceivedFlags
-
- thumb_func_start ResetBlockReceivedFlag
-ResetBlockReceivedFlag: @ 800A5EC
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800A608
- adds r0, r1, 0
- bl sub_800F728
- b _0800A616
- .pool
-_0800A608:
- ldr r0, =gUnknown_0300307C
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _0800A616
- movs r0, 0
- strb r0, [r1]
-_0800A616:
- pop {r0}
- bx r0
- .pool
- thumb_func_end ResetBlockReceivedFlag
-
- thumb_func_start sub_800A620
-sub_800A620: @ 800A620
- push {lr}
- ldr r0, =gLinkStatus
- ldr r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0800A63C
- movs r0, 0x1C
- ands r1, r0
- cmp r1, 0x4
- bls _0800A63C
- ldr r1, =gUnknown_03003144
- movs r0, 0x1
- strb r0, [r1]
-_0800A63C:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A620
-
- thumb_func_start sub_800A648
-sub_800A648: @ 800A648
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 16
- movs r3, 0
- movs r2, 0
- lsrs r1, 17
- cmp r3, r1
- bcs _0800A66E
-_0800A658:
- lsls r0, r2, 1
- adds r0, r4
- ldrh r0, [r0]
- adds r0, r3, r0
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, r1
- bcc _0800A658
-_0800A66E:
- adds r0, r3, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_800A648
-
- thumb_func_start sub_800A678
-sub_800A678: @ 800A678
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- ldr r4, =gUnknown_03003130
- ldr r3, [r4]
- lsls r3, 11
- movs r5, 0xC0
- lsls r5, 19
- adds r3, r5
- lsrs r2, 19
- adds r2, r1
- lsls r2, 1
- adds r2, r3
- ldr r3, [r4, 0x4]
- lsls r3, 12
- ldr r1, [r4, 0x8]
- adds r1, 0x1
- adds r0, r1
- orrs r3, r0
- strh r3, [r2]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A678
-
- thumb_func_start sub_800A6B0
-sub_800A6B0: @ 800A6B0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- ldr r4, =gUnknown_03003130
- ldr r3, [r4]
- lsls r3, 11
- movs r5, 0xC0
- lsls r5, 19
- adds r3, r5
- lsrs r2, 19
- adds r2, r1
- lsls r2, 1
- adds r2, r3
- ldr r3, [r4, 0x4]
- lsls r3, 12
- ldr r1, [r4, 0x8]
- adds r1, r0
- orrs r3, r1
- strh r3, [r2]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A6B0
-
- thumb_func_start sub_800A6E8
-sub_800A6E8: @ 800A6E8
- push {r4-r7,lr}
- sub sp, 0x10
- adds r5, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- movs r4, 0
- cmp r4, r3
- bge _0800A714
- movs r2, 0xF
-_0800A702:
- mov r0, sp
- adds r1, r0, r4
- adds r0, r5, 0
- ands r0, r2
- strb r0, [r1]
- lsrs r5, 4
- adds r4, 0x1
- cmp r4, r3
- blt _0800A702
-_0800A714:
- subs r4, r3, 0x1
- cmp r4, 0
- blt _0800A734
-_0800A71A:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- adds r1, r6, 0
- adds r2, r7, 0
- bl sub_800A678
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bge _0800A71A
-_0800A734:
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_800A6E8
-
- thumb_func_start sub_800A73C
-sub_800A73C: @ 800A73C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- adds r6, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x10]
- cmp r6, 0
- bge _0800A768
- str r7, [sp, 0x10]
- negs r6, r6
-_0800A768:
- movs r5, 0
- movs r1, 0x1
- negs r1, r1
- add r1, r8
- mov r10, r1
- cmp r5, r8
- bge _0800A794
-_0800A776:
- mov r0, sp
- adds r4, r0, r5
- adds r0, r6, 0
- movs r1, 0xA
- bl __modsi3
- strb r0, [r4]
- adds r0, r6, 0
- movs r1, 0xA
- bl __divsi3
- adds r6, r0, 0
- adds r5, 0x1
- cmp r5, r8
- blt _0800A776
-_0800A794:
- mov r5, r10
- cmp r5, 0
- blt _0800A7B4
-_0800A79A:
- mov r1, sp
- adds r0, r1, r5
- ldrb r0, [r0]
- adds r1, r7, 0
- mov r2, r9
- bl sub_800A678
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- subs r5, 0x1
- cmp r5, 0
- bge _0800A79A
-_0800A7B4:
- movs r0, 0x1
- negs r0, r0
- ldr r1, [sp, 0x10]
- cmp r1, r0
- beq _0800A7CA
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0xA
- mov r2, r9
- bl sub_800A678
-_0800A7CA:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_800A73C
-
- thumb_func_start sub_800A7DC
-sub_800A7DC: @ 800A7DC
- push {r4-r7,lr}
- adds r3, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r2, 24
- movs r6, 0
- ldrb r0, [r3]
- cmp r0, 0
- beq _0800A81C
- adds r4, r3, 0
- lsls r5, r2, 24
-_0800A7F4:
- ldrb r0, [r4]
- cmp r0, 0xA
- bne _0800A804
- movs r0, 0x80
- lsls r0, 17
- adds r5, r0
- movs r6, 0
- b _0800A814
-_0800A804:
- ldrb r0, [r4]
- adds r1, r7, r6
- lsls r1, 24
- lsrs r1, 24
- lsrs r2, r5, 24
- bl sub_800A6B0
- adds r6, 0x1
-_0800A814:
- adds r4, 0x1
- ldrb r0, [r4]
- cmp r0, 0
- bne _0800A7F4
-_0800A81C:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_800A7DC
-
- thumb_func_start sub_800A824
-sub_800A824: @ 800A824
- push {lr}
- ldr r0, =gLinkStatus
- ldr r0, [r0]
- movs r1, 0x20
- ands r0, r1
- cmp r0, 0
-_0800A830:
- beq _0800A838
- ldr r0, =0x00002222
- bl sub_8009D90
-_0800A838:
- ldr r1, =gUnknown_03003140
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800A824
-
- thumb_func_start task00_link_test
-task00_link_test: @ 800A850
- push {r4-r6,lr}
- sub sp, 0x20
- ldr r1, =gASCIITestPrint
- mov r0, sp
- bl strcpy
- mov r0, sp
- movs r1, 0x5
- movs r2, 0x2
- bl sub_800A7DC
- ldr r0, =gUnknown_03003144
- ldrb r0, [r0]
- movs r1, 0x2
- movs r2, 0x1
- movs r3, 0x2
- bl sub_800A6E8
- ldr r4, =gLinkStatus
- ldr r0, [r4]
- movs r1, 0xF
- movs r2, 0x1
- movs r3, 0x8
- bl sub_800A6E8
- ldr r0, =gUnknown_03003170
- ldrb r0, [r0, 0x1]
- movs r1, 0x2
- movs r2, 0xA
- movs r3, 0x2
- bl sub_800A6E8
- ldr r0, [r4]
- movs r1, 0x1C
- ands r0, r1
- lsrs r0, 2
- movs r1, 0xF
- movs r2, 0xA
- movs r3, 0x2
- bl sub_800A6E8
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xF
- movs r2, 0xC
- movs r3, 0x2
- bl sub_800A6E8
- ldr r0, =gUnknown_03003160
- ldrb r0, [r0]
- movs r1, 0x19
- movs r2, 0x1
- movs r3, 0x2
- bl sub_800A6E8
- ldr r0, =gUnknown_03004130
- ldrb r0, [r0]
- movs r1, 0x19
- movs r2, 0x2
- movs r3, 0x2
- bl sub_800A6E8
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xF
- movs r2, 0x5
- movs r3, 0x2
- bl sub_800A6E8
- ldr r0, =gUnknown_0300302C
- ldr r0, [r0]
- movs r1, 0x2
- movs r2, 0xC
- movs r3, 0x8
- bl sub_800A6E8
- ldr r0, =gUnknown_03003070
- ldr r0, [r0]
- movs r1, 0x2
- movs r2, 0xD
- movs r3, 0x8
- bl sub_800A6E8
- bl sub_800B2E8
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x19
- movs r2, 0x5
- movs r3, 0x1
- bl sub_800A6E8
- bl sub_800B2F8
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x19
- movs r2, 0x6
- movs r3, 0x1
- bl sub_800A6E8
- bl IsLinkConnectionEstablished
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x19
- movs r2, 0x7
- movs r3, 0x1
- bl sub_800A6E8
- bl sub_800B33C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x19
- movs r2, 0x8
- movs r3, 0x1
- bl sub_800A6E8
- movs r6, 0
- movs r5, 0x80
- lsls r5, 19
- ldr r4, =gUnknown_03003148
-_0800A94E:
- ldrh r0, [r4]
- lsrs r2, r5, 24
- movs r1, 0xA
- movs r3, 0x4
- bl sub_800A6E8
- movs r0, 0x80
- lsls r0, 17
- adds r5, r0
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0800A94E
- add sp, 0x20
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task00_link_test
-
- thumb_func_start SetLinkDebugValues
-SetLinkDebugValues: @ 800A994
- ldr r2, =gUnknown_0300302C
- str r0, [r2]
- ldr r0, =gUnknown_03003070
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end SetLinkDebugValues
-
- thumb_func_start sub_800A9A8
-sub_800A9A8: @ 800A9A8
- push {r4,lr}
- movs r1, 0
- movs r2, 0
- ldr r0, =gUnknown_03003100
- ldrb r0, [r0]
- cmp r1, r0
- bge _0800A9CA
- movs r4, 0x1
- adds r3, r0, 0
-_0800A9BA:
- adds r0, r4, 0
- lsls r0, r2
- orrs r1, r0
- lsls r0, r1, 24
- lsrs r1, r0, 24
- adds r2, 0x1
- cmp r2, r3
- blt _0800A9BA
-_0800A9CA:
- adds r0, r1, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800A9A8
-
- thumb_func_start sub_800A9D8
-sub_800A9D8: @ 800A9D8
- push {r4-r6,lr}
- movs r4, 0
- movs r5, 0
- movs r6, 0x1
- b _0800A9EE
-_0800A9E2:
- adds r0, r6, 0
- lsls r0, r5
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
- adds r5, 0x1
-_0800A9EE:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- blt _0800A9E2
- adds r0, r4, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_800A9D8
-
- thumb_func_start sub_800AA04
-sub_800AA04: @ 800AA04
- push {r4-r7,lr}
- ldr r1, =gUnknown_03003100
- strb r0, [r1]
- bl GetMultiplayerId
- ldr r1, =gUnknown_03003120
- strb r0, [r1]
- ldr r4, =gLinkPlayers
- ldr r3, =gUnknown_02022A74
- movs r2, 0x4
-_0800AA18:
- adds r0, r3, 0
- adds r1, r4, 0
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- ldm r1!, {r5-r7}
- stm r0!, {r5-r7}
- ldr r1, [r1]
- str r1, [r0]
- adds r4, 0x1C
- adds r3, 0x1C
- subs r2, 0x1
- cmp r2, 0
- bge _0800AA18
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AA04
-
- thumb_func_start sub_800AA48
-sub_800AA48: @ 800AA48
- ldr r0, =gUnknown_03003100
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_800AA48
-
- thumb_func_start sub_800AA54
-sub_800AA54: @ 800AA54
- ldr r0, =gUnknown_03003120
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_800AA54
-
- thumb_func_start sub_800AA60
-sub_800AA60: @ 800AA60
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r3, 0
- ldr r0, =gUnknown_03003100
- ldrb r1, [r0]
- mov r9, r0
- cmp r3, r1
- bge _0800AAB4
- ldr r0, =gLinkPlayers
- mov r12, r0
- ldr r0, =gUnknown_02022A74
- ldr r2, =0x00002288
- mov r8, r2
- ldr r7, =gLinkType
- mov r6, r12
- adds r6, 0x14
- adds r5, r0, 0x4
- movs r4, 0
- adds r2, r1, 0
-_0800AA8A:
- mov r0, r12
- adds r0, 0x4
- adds r0, r4, r0
- ldr r1, [r0]
- ldr r0, [r5]
- cmp r1, r0
- bne _0800AAA8
- ldrh r0, [r7]
- cmp r0, r8
- bne _0800AAA6
- adds r1, r0, 0
- ldr r0, [r6]
- cmp r1, r0
- bne _0800AAA8
-_0800AAA6:
- adds r3, 0x1
-_0800AAA8:
- adds r6, 0x1C
- adds r5, 0x1C
- adds r4, 0x1C
- subs r2, 0x1
- cmp r2, 0
- bne _0800AA8A
-_0800AAB4:
- mov r0, r9
- ldrb r0, [r0]
- cmp r3, r0
- bne _0800AAE4
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r0, 24
- mov r1, r9
- ldrb r1, [r1]
- cmp r0, r1
- bne _0800AAE4
- movs r0, 0x1
- b _0800AAE6
- .pool
-_0800AAE4:
- movs r0, 0
-_0800AAE6:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800AA60
-
- thumb_func_start sub_800AAF4
-sub_800AAF4: @ 800AAF4
- push {r4,r5,lr}
- ldr r5, =gUnknown_02022A74
- movs r4, 0x3
-_0800AAFA:
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x1C
- bl CpuSet
- adds r5, 0x1C
- subs r4, 0x1
- cmp r4, 0
- bge _0800AAFA
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AAF4
-
- thumb_func_start sub_800AB18
-sub_800AB18: @ 800AB18
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r4, 0
- ldr r0, =gUnknown_03003100
- ldrb r0, [r0]
- cmp r4, r0
- bcs _0800AB78
- ldr r6, =gUnknown_02022A74
- ldr r5, =gLinkPlayers
- movs r0, 0x8
- adds r0, r6
- mov r8, r0
- adds r7, r5, 0
- adds r7, 0x8
-_0800AB36:
- lsls r0, r4, 3
- subs r0, r4
- lsls r2, r0, 2
- adds r1, r6, 0x4
- adds r1, r2, r1
- adds r0, r5, 0x4
- adds r0, r2, r0
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- bne _0800AB5A
- mov r1, r8
- adds r0, r2, r1
- adds r1, r2, r7
- bl StringCompare
- cmp r0, 0
- beq _0800AB6A
-_0800AB5A:
- ldr r1, =gUnknown_0300306C
- movs r0, 0x1
- strb r0, [r1]
- bl CloseLink
- ldr r0, =c2_800ACD4
- bl SetMainCallback2
-_0800AB6A:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_03003100
- ldrb r0, [r0]
- cmp r4, r0
- bcc _0800AB36
-_0800AB78:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AB18
-
- thumb_func_start sub_800AB98
-sub_800AB98: @ 800AB98
- ldr r0, =gUnknown_03003100
- movs r1, 0
- strb r1, [r0]
- ldr r0, =gUnknown_03003120
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_800AB98
-
- thumb_func_start GetLinkPlayerCount_2
-GetLinkPlayerCount_2: @ 800ABAC
- ldr r0, =gLinkStatus
- ldr r0, [r0]
- movs r1, 0x1C
- ands r0, r1
- lsrs r0, 2
- bx lr
- .pool
- thumb_func_end GetLinkPlayerCount_2
-
- thumb_func_start IsLinkMaster
-IsLinkMaster: @ 800ABBC
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800ABDC
- ldr r0, =gLinkStatus
- ldr r0, [r0]
- lsrs r0, 5
- movs r1, 0x1
- ands r0, r1
- b _0800ABE4
- .pool
-_0800ABDC:
- bl sub_8011AB0
- lsls r0, 24
- lsrs r0, 24
-_0800ABE4:
- pop {r1}
- bx r1
- thumb_func_end IsLinkMaster
-
- thumb_func_start sub_800ABE8
-sub_800ABE8: @ 800ABE8
- ldr r0, =gUnknown_03000D58
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_800ABE8
-
- thumb_func_start sub_800ABF4
-sub_800ABF4: @ 800ABF4
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800AC0C
- bl task_add_05_task_del_08FA224_when_no_RfuFunc
- b _0800AC20
- .pool
-_0800AC0C:
- ldr r2, =gUnknown_03003140
- ldr r1, [r2]
- cmp r1, 0
- bne _0800AC20
- ldr r0, =sub_800AC80
- str r0, [r2]
- ldr r0, =gUnknown_030030E4
- strb r1, [r0]
- ldr r0, =gUnknown_030030F4
- strh r3, [r0]
-_0800AC20:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800ABF4
-
- thumb_func_start sub_800AC34
-sub_800AC34: @ 800AC34
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800AC48
- bl task_add_05_task_del_08FA224_when_no_RfuFunc
- b _0800AC70
- .pool
-_0800AC48:
- ldr r2, =gUnknown_03003140
- ldr r1, [r2]
- cmp r1, 0
- beq _0800AC64
- ldr r1, =gUnknown_02022B08
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0800AC70
- .pool
-_0800AC64:
- ldr r0, =sub_800AC80
- str r0, [r2]
- ldr r0, =gUnknown_030030E4
- strb r1, [r0]
- ldr r0, =gUnknown_030030F4
- strh r1, [r0]
-_0800AC70:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AC34
-
- thumb_func_start sub_800AC80
-sub_800AC80: @ 800AC80
- push {lr}
- ldr r0, =gUnknown_03004130
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800AC96
- ldr r0, =0x00005fff
- bl sub_8009D90
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800ACAC
- str r0, [r1]
-_0800AC96:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AC80
-
- thumb_func_start sub_800ACAC
-sub_800ACAC: @ 800ACAC
- push {r4,lr}
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r2, r0, 24
- movs r3, 0
- movs r1, 0
- cmp r3, r2
- bge _0800ACD0
- ldr r4, =gUnknown_030030F0
-_0800ACC0:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800ACCA
- adds r3, 0x1
-_0800ACCA:
- adds r1, 0x1
- cmp r1, r2
- blt _0800ACC0
-_0800ACD0:
- cmp r3, r2
- bne _0800ACF4
- ldr r2, =gBattleTypeFlags
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldr r0, =gUnknown_03002748
- movs r4, 0x1
- strb r4, [r0]
- bl CloseLink
- ldr r1, =gUnknown_03003140
- movs r0, 0
- str r0, [r1]
- ldr r0, =gUnknown_030030E4
- strb r4, [r0]
-_0800ACF4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800ACAC
-
- thumb_func_start sub_800AD10
-sub_800AD10: @ 800AD10
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800AD24
- bl task_add_05_task_del_08FA224_when_no_RfuFunc
- b _0800AD4C
- .pool
-_0800AD24:
- ldr r2, =gUnknown_03003140
- ldr r1, [r2]
- cmp r1, 0
- beq _0800AD40
- ldr r1, =gUnknown_02022B08
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0800AD4C
- .pool
-_0800AD40:
- ldr r0, =sub_800AD5C
- str r0, [r2]
- ldr r0, =gUnknown_030030E4
- strb r1, [r0]
- ldr r0, =gUnknown_030030F4
- strh r1, [r0]
-_0800AD4C:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AD10
-
- thumb_func_start sub_800AD5C
-sub_800AD5C: @ 800AD5C
- push {lr}
- ldr r0, =gUnknown_03004130
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800AD72
- ldr r0, =0x00005fff
- bl sub_8009D90
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800AD88
- str r0, [r1]
-_0800AD72:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AD5C
-
- thumb_func_start sub_800AD88
-sub_800AD88: @ 800AD88
- push {r4,r5,lr}
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r3, r0, 24
- movs r1, 0
- movs r2, 0
- cmp r1, r3
- bge _0800ADB6
- ldr r5, =gUnknown_030030F0
- ldr r4, =gLinkPlayers
-_0800AD9E:
- ldrh r0, [r4, 0x1A]
- cmp r0, 0x1
- beq _0800ADAC
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800ADAE
-_0800ADAC:
- adds r1, 0x1
-_0800ADAE:
- adds r4, 0x1C
- adds r2, 0x1
- cmp r2, r3
- blt _0800AD9E
-_0800ADB6:
- cmp r1, r3
- bne _0800ADDA
- ldr r2, =gBattleTypeFlags
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldr r0, =gUnknown_03002748
- movs r4, 0x1
- strb r4, [r0]
- bl CloseLink
- ldr r1, =gUnknown_03003140
- movs r0, 0
- str r0, [r1]
- ldr r0, =gUnknown_030030E4
- strb r4, [r0]
-_0800ADDA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AD88
-
- thumb_func_start sub_800ADF8
-sub_800ADF8: @ 800ADF8
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800AE0C
- bl sub_8010434
- b _0800AE1E
- .pool
-_0800AE0C:
- ldr r1, =gUnknown_03003140
- ldr r0, [r1]
- cmp r0, 0
- bne _0800AE18
- ldr r0, =sub_800AE30
- str r0, [r1]
-_0800AE18:
- ldr r1, =gUnknown_030030E4
- movs r0, 0
- strb r0, [r1]
-_0800AE1E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800ADF8
-
- thumb_func_start sub_800AE30
-sub_800AE30: @ 800AE30
- push {lr}
- ldr r0, =gUnknown_03004130
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800AE46
- ldr r0, =0x00002ffe
- bl sub_8009D90
- ldr r1, =gUnknown_03003140
- ldr r0, =sub_800AE5C
- str r0, [r1]
-_0800AE46:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AE30
-
- thumb_func_start sub_800AE5C
-sub_800AE5C: @ 800AE5C
- push {r4,lr}
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- cmp r1, r2
- bcs _0800AE86
- ldr r3, =gUnknown_030030EC
- ldrb r0, [r3]
- cmp r0, 0
- beq _0800AE86
-_0800AE74:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r2
- bcs _0800AE86
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800AE74
-_0800AE86:
- cmp r1, r2
- bne _0800AEA4
- movs r1, 0
- ldr r4, =gUnknown_03003140
- ldr r3, =gUnknown_030030EC
- movs r2, 0
-_0800AE92:
- adds r0, r1, r3
- strb r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bls _0800AE92
- movs r0, 0
- str r0, [r4]
-_0800AEA4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AE5C
-
- thumb_func_start sub_800AEB4
-sub_800AEB4: @ 800AEB4
- push {lr}
- ldr r0, =gUnknown_020229C4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800AEF4
- ldr r0, =gLinkStatus
- ldr r2, [r0]
- movs r0, 0xFE
- lsls r0, 11
- ands r0, r2
- cmp r0, 0
- beq _0800AEF4
- ldr r0, =gUnknown_030030F8
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800AEEA
- ldr r1, =gUnknown_02022B00
- str r2, [r1]
- ldr r0, =gUnknown_03004130
- ldrb r0, [r0]
- strb r0, [r1, 0x4]
- ldr r0, =gUnknown_03003160
- ldrb r0, [r0]
- strb r0, [r1, 0x5]
- ldr r0, =c2_800ACD4
- bl SetMainCallback2
-_0800AEEA:
- ldr r1, =gUnknown_0300306C
- movs r0, 0x1
- strb r0, [r1]
- bl CloseLink
-_0800AEF4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AEB4
-
- thumb_func_start sub_800AF18
-sub_800AF18: @ 800AF18
- push {r4,lr}
- ldr r4, =gUnknown_02022B00
- str r0, [r4]
- strb r1, [r4, 0x5]
- strb r2, [r4, 0x4]
- strb r3, [r4, 0x6]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800AF18
-
- thumb_func_start c2_800ACD4
-c2_800ACD4: @ 800AF30
- push {r4,lr}
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gMPlayInfo_SE1
- bl m4aMPlayStop
- ldr r0, =gMPlayInfo_SE2
- bl m4aMPlayStop
- ldr r0, =gMPlayInfo_SE3
- bl m4aMPlayStop
- ldr r0, =0x02000000
- movs r1, 0xE0
- lsls r1, 9
- bl InitHeap
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetPaletteFadeControl
- movs r0, 0
- movs r1, 0
- movs r2, 0x2
- bl FillPalette
- bl ResetTasks
- bl ScanlineEffect_Stop
- ldr r1, =gLinkVSyncDisabled
- ldrb r0, [r1]
- cmp r0, 0
- beq _0800AF8C
- ldr r0, =gUnknown_02022B00
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- bne _0800AF88
- movs r0, 0x3
- strb r0, [r1]
-_0800AF88:
- bl sub_800E604
-_0800AF8C:
- ldr r0, =sub_80096BC
- bl SetVBlankCallback
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_082ED1FC
- movs r0, 0
- movs r2, 0x2
- bl InitBgsFromTemplates
- ldr r4, =gUnknown_02022B0C
- movs r0, 0x80
- lsls r0, 4
- bl Alloc
- adds r1, r0, 0
- str r1, [r4]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r0, =gUnknown_082ED204
- bl InitWindows
- lsls r0, 16
- cmp r0, 0
- beq _0800B03C
- bl DeactivateAllTextPrinters
- bl reset_temp_tile_data_buffers
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r1, 0xE0
- lsls r1, 8
- movs r0, 0
- bl ClearGpuRegBits
- ldr r0, =gUnknown_0860F074
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, =gSoftResetDisabled
- movs r0, 0
- strb r0, [r1]
- ldr r0, =Task_DestroySelf
- movs r1, 0
- bl CreateTask
- bl StopMapMusic
- ldr r1, =gMain
- movs r0, 0
- str r0, [r1]
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- ldr r0, =sub_800B1A0
- bl SetMainCallback2
-_0800B03C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_800ACD4
-
- thumb_func_start sub_800B080
-sub_800B080: @ 800B080
- push {r4,r5,lr}
- sub sp, 0xC
- ldr r1, =g2BlankTilesGfx
- movs r0, 0
- movs r2, 0x20
- movs r3, 0
- bl LoadBgTiles
- ldr r1, =gWirelessLinkDisplayGfx
- movs r5, 0
- str r5, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl copy_decompressed_tile_data_to_vram_autofree
- ldr r1, =gWirelessLinkDisplayTilemap
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- ldr r0, =gWirelessLinkDisplayPal
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x2
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r4, =gUnknown_082ED224
- str r4, [sp]
- str r5, [sp, 0x4]
- ldr r0, =gText_CommErrorEllipsis
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x3
- movs r2, 0x2
- movs r3, 0x6
- bl box_print
- str r4, [sp]
- str r5, [sp, 0x4]
- ldr r0, =gText_MoveCloserToLinkPartner
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x3
- movs r2, 0x2
- movs r3, 0x1
- bl box_print
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0
- bl CopyWindowToVram
- movs r0, 0x2
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B080
-
- thumb_func_start sub_800B138
-sub_800B138: @ 800B138
- push {lr}
- sub sp, 0xC
- ldr r1, =g2BlankTilesGfx
- movs r0, 0
- movs r2, 0x20
- movs r3, 0
- bl LoadBgTiles
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x2
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r0, =gUnknown_082ED224
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- ldr r0, =gText_CommErrorCheckConnections
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0x2
- movs r3, 0
- bl box_print
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0
- bl CopyWindowToVram
- movs r0, 0x2
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B138
-
- thumb_func_start sub_800B1A0
-sub_800B1A0: @ 800B1A0
- push {r4,lr}
- sub sp, 0xC
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1E
- beq _0800B20C
- cmp r0, 0x1E
- bgt _0800B1C4
- cmp r0, 0
- beq _0800B1D8
- cmp r0, 0x2
- beq _0800B1F2
- b _0800B260
- .pool
-_0800B1C4:
- cmp r0, 0x5A
- beq _0800B20C
- cmp r0, 0x5A
- bgt _0800B1D2
- cmp r0, 0x3C
- beq _0800B20C
- b _0800B260
-_0800B1D2:
- cmp r0, 0x82
- beq _0800B214
- b _0800B260
-_0800B1D8:
- ldr r0, =gUnknown_02022B00
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- beq _0800B1EC
- bl sub_800B080
- b _0800B260
- .pool
-_0800B1EC:
- bl sub_800B138
- b _0800B260
-_0800B1F2:
- movs r0, 0
- bl ShowBg
- ldr r0, =gUnknown_02022B00
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- beq _0800B260
- movs r0, 0x1
- bl ShowBg
- b _0800B260
- .pool
-_0800B20C:
- movs r0, 0x16
- bl PlaySE
- b _0800B260
-_0800B214:
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0800B244
- ldr r0, =gUnknown_082ED224
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- ldr r0, =gText_ABtnTitleScreen
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x3
- movs r2, 0x2
- movs r3, 0x14
- bl box_print
- b _0800B260
- .pool
-_0800B244:
- cmp r0, 0x1
- bne _0800B260
- ldr r0, =gUnknown_082ED224
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- ldr r0, =gText_ABtnRegistrationCounter
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x3
- movs r2, 0x2
- movs r3, 0x14
- bl box_print
-_0800B260:
- ldr r0, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r0, r2
- ldrb r1, [r1]
- cmp r1, 0xA0
- bne _0800B2D0
- ldr r4, =gLinkVSyncDisabled
- ldrb r2, [r4]
- cmp r2, 0x1
- bne _0800B2A8
- ldrh r0, [r0, 0x2E]
- ands r2, r0
- cmp r2, 0
- beq _0800B2C2
- movs r0, 0x15
- bl PlaySE
- movs r0, 0
- strb r0, [r4]
- ldr r1, =gUnknown_02022B00
- movs r0, 0
- strb r0, [r1, 0x6]
- bl sub_81700F8
- b _0800B2C2
- .pool
-_0800B2A8:
- cmp r2, 0x2
- bne _0800B2C2
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0800B2C2
- bl rfu_REQ_stopMode
- bl rfu_waitREQComplete
- bl DoSoftReset
-_0800B2C2:
- ldr r0, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r0, r2
- ldrb r1, [r1]
- cmp r1, 0xA0
- beq _0800B2DC
-_0800B2D0:
- movs r2, 0x87
- lsls r2, 3
- adds r1, r0, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0800B2DC:
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B1A0
-
- thumb_func_start sub_800B2E8
-sub_800B2E8: @ 800B2E8
- ldr r0, =0x04000128
- ldrh r0, [r0]
- lsrs r0, 2
- movs r1, 0x1
- ands r0, r1
- bx lr
- .pool
- thumb_func_end sub_800B2E8
-
- thumb_func_start sub_800B2F8
-sub_800B2F8: @ 800B2F8
- push {lr}
- movs r3, 0
- ldr r2, =0x04000128
- ldrh r1, [r2]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0800B314
- ldrh r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0800B314
- movs r3, 0x1
-_0800B314:
- adds r0, r3, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800B2F8
-
- thumb_func_start IsLinkConnectionEstablished
-IsLinkConnectionEstablished: @ 800B320
- ldr r0, =gLinkStatus
- ldr r0, [r0]
- lsrs r0, 6
- movs r1, 0x1
- ands r0, r1
- bx lr
- .pool
- thumb_func_end IsLinkConnectionEstablished
-
- thumb_func_start sub_800B330
-sub_800B330: @ 800B330
- ldr r1, =gUnknown_030030F8
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_800B330
-
- thumb_func_start sub_800B33C
-sub_800B33C: @ 800B33C
- ldr r0, =gUnknown_0300306C
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_800B33C
-
- thumb_func_start sub_800B348
-sub_800B348: @ 800B348
- push {r4-r6,lr}
- bl sub_8009638
- ldr r1, =gUnknown_03003030
- adds r2, r1, 0
- adds r2, 0x10
- ldr r0, =gUnknown_020229CC
- ldm r0!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r0!, {r3,r4,r6}
- stm r2!, {r3,r4,r6}
- ldr r0, [r0]
- str r0, [r2]
- ldr r3, =gASCIIGameFreakInc
- adds r2, r1, 0
- adds r0, r3, 0
- ldm r0!, {r4-r6}
- stm r2!, {r4-r6}
- ldrh r4, [r0]
- strh r4, [r2]
- ldrb r0, [r0, 0x2]
- strb r0, [r2, 0x2]
- adds r0, r1, 0
- adds r0, 0x2C
- ldm r3!, {r2,r5,r6}
- stm r0!, {r2,r5,r6}
- ldrh r2, [r3]
- strh r2, [r0]
- ldrb r2, [r3, 0x2]
- strb r2, [r0, 0x2]
- ldr r0, =gBlockSendBuffer
- movs r2, 0x3C
- bl memcpy
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B348
-
- thumb_func_start sub_800B3A4
-sub_800B3A4: @ 800B3A4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 8
- ldr r1, =gBlockRecvBuffer
- adds r4, r2, r1
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- ldr r0, =gLinkPlayers
- adds r2, r0
- adds r1, r2, 0
- adds r0, r4, 0
- adds r0, 0x10
- ldm r0!, {r3,r5,r6}
- stm r1!, {r3,r5,r6}
- ldm r0!, {r3,r5,r6}
- stm r1!, {r3,r5,r6}
- ldr r0, [r0]
- str r0, [r1]
- adds r0, r2, 0
- bl sub_800B524
- ldr r5, =gASCIIGameFreakInc
- adds r0, r4, 0
- adds r1, r5, 0
- bl strcmp
- cmp r0, 0
- bne _0800B3EE
- adds r0, r4, 0
- adds r0, 0x2C
- adds r1, r5, 0
- bl strcmp
- cmp r0, 0
- beq _0800B3F4
-_0800B3EE:
- ldr r0, =c2_800ACD4
- bl SetMainCallback2
-_0800B3F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B3A4
-
- thumb_func_start HandleLinkConnection
-HandleLinkConnection: @ 800B40C
- push {r4,r5,lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800B45C
- ldr r0, =gUnknown_03003144
- ldr r1, =gSendCmd
- ldr r2, =gRecvCmds
- bl sub_800B638
- ldr r4, =gLinkStatus
- str r0, [r4]
- ldr r0, =gUnknown_030022EC
- bl sub_80099E0
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- cmp r0, 0
- beq _0800B480
- bl sub_808766C
- cmp r0, 0x1
- bne _0800B480
-_0800B43E:
- movs r0, 0x1
- b _0800B482
- .pool
-_0800B45C:
- bl sub_8010EC0
- adds r4, r0, 0
- bl sub_8010F1C
- adds r5, r0, 0
- bl sub_808766C
- cmp r0, 0x1
- bne _0800B480
- cmp r4, 0x1
- beq _0800B43E
- bl sub_800F0B8
- cmp r0, 0
- bne _0800B43E
- cmp r5, 0
- bne _0800B43E
-_0800B480:
- movs r0, 0
-_0800B482:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end HandleLinkConnection
-
- thumb_func_start sub_800B488
-sub_800B488: @ 800B488
- push {lr}
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800B498
- ldr r1, =gLinkVSyncDisabled
- movs r0, 0x1
- strb r0, [r1]
-_0800B498:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B488
-
- thumb_func_start sub_800B4A4
-sub_800B4A4: @ 800B4A4
- push {lr}
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r1, [r0]
- cmp r1, 0
- bne _0800B4B2
- ldr r0, =gLinkVSyncDisabled
- strb r1, [r0]
-_0800B4B2:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B4A4
-
- thumb_func_start sub_800B4C0
-sub_800B4C0: @ 800B4C0
- push {lr}
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r1, [r0]
- cmp r1, 0
- bne _0800B4CE
- ldr r0, =gLinkVSyncDisabled
- strb r1, [r0]
-_0800B4CE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B4C0
-
- thumb_func_start sub_800B4DC
-sub_800B4DC: @ 800B4DC
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800B4FC
- ldr r0, =gUnknown_03003170
- ldr r1, =0x00000fbd
- adds r0, r1
- ldrb r0, [r0]
- b _0800B500
- .pool
-_0800B4FC:
- bl sub_80124D4
-_0800B500:
- pop {r1}
- bx r1
- thumb_func_end sub_800B4DC
-
- thumb_func_start sub_800B504
-sub_800B504: @ 800B504
- push {lr}
- bl sub_800B4DC
- cmp r0, 0x2
- bhi _0800B512
- movs r0, 0
- b _0800B514
-_0800B512:
- movs r0, 0x1
-_0800B514:
- pop {r1}
- bx r1
- thumb_func_end sub_800B504
-
- thumb_func_start sub_800B518
-sub_800B518: @ 800B518
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_800B518
-
- thumb_func_start sub_800B524
-sub_800B524: @ 800B524
- push {lr}
- ldrb r1, [r0, 0x10]
- strb r1, [r0, 0x12]
- adds r2, r0, 0
- adds r2, 0x8
- ldrb r1, [r0, 0x1A]
- adds r0, r2, 0
- bl ConvertInternationalString
- pop {r0}
- bx r0
- thumb_func_end sub_800B524
-
- thumb_func_start sub_800B53C
-sub_800B53C: @ 800B53C
- push {lr}
- sub sp, 0x4
- movs r0, 0xC0
- bl DisableInterrupts
- ldr r1, =0x04000128
- movs r2, 0x80
- lsls r2, 6
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, =0x0400010e
- movs r2, 0
- strh r2, [r0]
- adds r1, 0xDA
- movs r0, 0xC0
- strh r0, [r1]
- ldr r0, =0x0400012a
- strh r2, [r0]
- ldr r2, =0x04000120
- movs r0, 0
- movs r1, 0
- str r0, [r2]
- str r1, [r2, 0x4]
- str r0, [sp]
- ldr r1, =gUnknown_03003170
- ldr r2, =0x050003f0
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B53C
-
- thumb_func_start sub_800B594
-sub_800B594: @ 800B594
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0xC0
- bl DisableInterrupts
- ldr r0, =0x04000134
- movs r4, 0
- strh r4, [r0]
- ldr r2, =0x04000128
- movs r1, 0x80
- lsls r1, 6
- adds r0, r1, 0
- strh r0, [r2]
- ldrh r0, [r2]
- ldr r3, =0x00004003
- adds r1, r3, 0
- orrs r0, r1
- strh r0, [r2]
- movs r0, 0x80
- bl EnableInterrupts
- ldr r0, =0x0400012a
- strh r4, [r0]
- movs r5, 0
- str r5, [sp]
- ldr r1, =gUnknown_03003170
- ldr r2, =0x050003f0
- mov r0, sp
- bl CpuSet
- ldr r0, =gUnknown_03000D6C
- strb r4, [r0]
- ldr r0, =gUnknown_03000D6E
- strh r5, [r0]
- ldr r0, =gUnknown_03000D70
- strh r5, [r0]
- ldr r0, =gUnknown_03000D72
- strb r4, [r0]
- ldr r0, =gUnknown_03000D73
- strb r4, [r0]
- ldr r0, =gUnknown_03003160
- strb r4, [r0]
- ldr r0, =gUnknown_03004130
- strb r4, [r0]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B594
-
- thumb_func_start sub_800B628
-sub_800B628: @ 800B628
- push {lr}
- bl sub_800B594
- bl sub_800B53C
- pop {r0}
- bx r0
- thumb_func_end sub_800B628
-
- thumb_func_start sub_800B638
-sub_800B638: @ 800B638
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r0, =gUnknown_03003170
- ldrb r0, [r0, 0x1]
- cmp r0, 0x4
- bhi _0800B6EA
- lsls r0, 2
- ldr r1, =_0800B65C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800B65C:
- .4byte _0800B670
- .4byte _0800B680
- .4byte _0800B698
- .4byte _0800B6D4
- .4byte _0800B6DE
-_0800B670:
- bl sub_800B53C
- ldr r1, =gUnknown_03003170
- movs r0, 0x1
- strb r0, [r1, 0x1]
- b _0800B6EA
- .pool
-_0800B680:
- ldrb r0, [r4]
- cmp r0, 0x1
- bne _0800B6EA
- bl sub_800B594
- ldr r1, =gUnknown_03003170
- movs r0, 0x2
- strb r0, [r1, 0x1]
- b _0800B6EA
- .pool
-_0800B698:
- ldrb r1, [r4]
- cmp r1, 0x1
- beq _0800B6A8
- cmp r1, 0x2
- beq _0800B6C0
- bl sub_800B764
- b _0800B6EA
-_0800B6A8:
- ldr r2, =gUnknown_03003170
- ldrb r0, [r2]
- cmp r0, 0x8
- bne _0800B6EA
- ldrb r0, [r2, 0x3]
- cmp r0, 0x1
- bls _0800B6EA
- strb r1, [r2, 0xE]
- b _0800B6EA
- .pool
-_0800B6C0:
- ldr r0, =gUnknown_03003170
- movs r1, 0
- strb r1, [r0, 0x1]
- ldr r0, =0x0400012a
- strh r1, [r0]
- b _0800B6EA
- .pool
-_0800B6D4:
- bl sub_800B790
- ldr r1, =gUnknown_03003170
- movs r0, 0x4
- strb r0, [r1, 0x1]
-_0800B6DE:
- adds r0, r5, 0
- bl sub_800B7C0
- adds r0, r6, 0
- bl sub_800B8A8
-_0800B6EA:
- movs r0, 0
- strb r0, [r4]
- ldr r1, =gUnknown_03003170
- ldrb r2, [r1, 0x2]
- ldrb r0, [r1, 0x3]
- lsls r0, 2
- orrs r2, r0
- ldrb r0, [r1]
- cmp r0, 0x8
- bne _0800B702
- movs r0, 0x20
- orrs r2, r0
-_0800B702:
- ldrb r0, [r1, 0xC]
- lsls r3, r0, 8
- ldrb r0, [r1, 0xF]
- lsls r4, r0, 9
- ldrb r0, [r1, 0x10]
- lsls r5, r0, 12
- ldrb r0, [r1, 0x11]
- lsls r6, r0, 13
- ldrb r0, [r1, 0x12]
- lsls r7, r0, 14
- ldrb r0, [r1, 0x1]
- cmp r0, 0x4
- bne _0800B728
- movs r0, 0x40
- orrs r0, r3
- orrs r0, r2
- b _0800B72C
- .pool
-_0800B728:
- adds r0, r2, 0
- orrs r0, r3
-_0800B72C:
- orrs r0, r4
- orrs r0, r5
- orrs r0, r6
- orrs r0, r7
- adds r2, r0, 0
- ldrb r3, [r1, 0x13]
- cmp r3, 0x1
- bne _0800B742
- movs r0, 0x80
- lsls r0, 9
- orrs r2, r0
-_0800B742:
- ldrb r0, [r1, 0x2]
- cmp r0, 0x3
- bls _0800B74E
- movs r0, 0x80
- lsls r0, 10
- orrs r2, r0
-_0800B74E:
- adds r1, r2, 0
- cmp r3, 0x2
- bne _0800B75A
- movs r0, 0x80
- lsls r0, 11
- orrs r1, r0
-_0800B75A:
- adds r0, r1, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800B638
-
- thumb_func_start sub_800B764
-sub_800B764: @ 800B764
- push {lr}
- ldr r0, =0x04000128
- ldr r1, [r0]
- movs r0, 0xC
- ands r1, r0
- ldr r2, =gUnknown_03003170
- cmp r1, 0x8
- bne _0800B788
- ldrb r0, [r2, 0x2]
- cmp r0, 0
- bne _0800B788
- strb r1, [r2]
- b _0800B78C
- .pool
-_0800B788:
- movs r0, 0
- strb r0, [r2]
-_0800B78C:
- pop {r0}
- bx r0
- thumb_func_end sub_800B764
-
- thumb_func_start sub_800B790
-sub_800B790: @ 800B790
- push {lr}
- ldr r0, =gUnknown_03003170
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800B7AE
- ldr r1, =0x0400010c
- ldr r2, =0x0000ff3b
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r0, 0x41
- strh r0, [r1]
- movs r0, 0x40
- bl EnableInterrupts
-_0800B7AE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B790
-
- thumb_func_start sub_800B7C0
-sub_800B7C0: @ 800B7C0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r3, r0, 0
- ldr r2, =gUnknown_03004134
- ldr r1, =0x04000208
- ldrh r0, [r1]
- strh r0, [r2]
- movs r0, 0
- strh r0, [r1]
- ldr r1, =gUnknown_03003170
- ldr r4, =0x00000339
- adds r0, r1, r4
- ldrb r4, [r0]
- adds r6, r1, 0
- cmp r4, 0x31
- bhi _0800B850
- movs r1, 0xCE
- lsls r1, 2
- adds r0, r6, r1
- ldrb r0, [r0]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x31
- bls _0800B7FE
- subs r0, 0x32
- lsls r0, 24
- lsrs r0, 24
-_0800B7FE:
- movs r2, 0
- ldr r4, =gUnknown_03000D6E
- mov r9, r4
- ldr r1, =gUnknown_03003160
- mov r10, r1
- lsls r5, r0, 1
- movs r0, 0x18
- adds r0, r6
- mov r8, r0
- mov r12, r2
- movs r7, 0x64
-_0800B814:
- ldrh r0, [r4]
- ldrh r1, [r3]
- orrs r0, r1
- strh r0, [r4]
- adds r0, r2, 0
- muls r0, r7
- adds r0, r5, r0
- add r0, r8
- strh r1, [r0]
- mov r1, r12
- strh r1, [r3]
- adds r3, 0x2
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x7
- bls _0800B814
- b _0800B85C
- .pool
-_0800B850:
- movs r0, 0x1
- strb r0, [r6, 0x12]
- ldr r2, =gUnknown_03000D6E
- mov r9, r2
- ldr r4, =gUnknown_03003160
- mov r10, r4
-_0800B85C:
- mov r1, r9
- ldrh r0, [r1]
- cmp r0, 0
- beq _0800B874
- ldr r2, =0x00000339
- adds r0, r6, r2
- ldrb r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strb r1, [r0]
- mov r4, r9
- strh r2, [r4]
-_0800B874:
- ldr r1, =0x04000208
- ldr r2, =gUnknown_03004134
- ldrh r0, [r2]
- strh r0, [r1]
- ldr r4, =0x00000339
- adds r0, r6, r4
- ldrb r0, [r0]
- mov r1, r10
- strb r0, [r1]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B7C0
-
- thumb_func_start sub_800B8A8
-sub_800B8A8: @ 800B8A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- ldr r2, =gUnknown_03004134
- ldr r1, =0x04000208
- ldrh r0, [r1]
- strh r0, [r2]
- movs r0, 0
- strh r0, [r1]
- ldr r1, =gUnknown_03003170
- ldr r3, =0x00000fbd
- adds r0, r1, r3
- ldrb r0, [r0]
- mov r12, r1
- cmp r0, 0
- bne _0800B914
- movs r3, 0
- ldrb r0, [r1, 0x3]
- cmp r3, r0
- bcs _0800B8FA
- movs r5, 0
- adds r6, r0, 0
-_0800B8DA:
- movs r2, 0
- lsls r1, r3, 4
- adds r4, r3, 0x1
- add r1, r9
-_0800B8E2:
- lsls r0, r2, 1
- adds r0, r1
- strh r5, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x7
- bls _0800B8E2
- lsls r0, r4, 24
- lsrs r3, r0, 24
- cmp r3, r6
- bcc _0800B8DA
-_0800B8FA:
- movs r0, 0x1
- mov r7, r12
- strb r0, [r7, 0xC]
- b _0800B990
- .pool
-_0800B914:
- movs r3, 0
- mov r0, r12
- ldrb r1, [r0, 0x3]
- cmp r3, r1
- bcs _0800B96A
- ldr r0, =0x00000fbc
- add r0, r12
- ldrb r0, [r0]
- lsls r6, r0, 1
- movs r2, 0xCF
- lsls r2, 2
- add r2, r12
- mov r8, r2
- mov r10, r1
-_0800B930:
- movs r2, 0
- lsls r1, r3, 4
- adds r4, r3, 0x1
- lsls r0, r3, 1
- mov r7, r9
- adds r5, r1, r7
- adds r0, r3
- lsls r0, 3
- adds r0, r3
- lsls r3, r0, 5
-_0800B944:
- lsls r1, r2, 1
- adds r1, r5
- movs r7, 0x64
- adds r0, r2, 0
- muls r0, r7
- adds r0, r6, r0
- adds r0, r3
- add r0, r8
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x7
- bls _0800B944
- lsls r0, r4, 24
- lsrs r3, r0, 24
- cmp r3, r10
- bcc _0800B930
-_0800B96A:
- mov r2, r12
- ldr r0, =0x00000fbd
- adds r1, r2, r0
- ldrb r0, [r1]
- subs r0, 0x1
- movs r3, 0
- strb r0, [r1]
- ldr r1, =0x00000fbc
- adds r2, r1
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x31
- bls _0800B98C
- strb r3, [r2]
-_0800B98C:
- mov r2, r12
- strb r3, [r2, 0xC]
-_0800B990:
- ldr r1, =0x04000208
- ldr r3, =gUnknown_03004134
- ldrh r0, [r3]
- strh r0, [r1]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B8A8
-
- thumb_func_start sub_800B9B8
-sub_800B9B8: @ 800B9B8
- push {r4,lr}
- ldr r3, =gUnknown_03003170
- ldrb r4, [r3]
- cmp r4, 0
- beq _0800B9F4
- ldrb r0, [r3, 0x1]
- cmp r0, 0x2
- beq _0800B9EE
- cmp r0, 0x4
- bne _0800BA1E
- movs r0, 0xD
- ldrsb r0, [r3, r0]
- cmp r0, 0x8
- bgt _0800B9E4
- ldrb r0, [r3, 0x10]
- cmp r0, 0x1
- beq _0800B9EE
- movs r0, 0x1
- strb r0, [r3, 0x13]
- b _0800BA1E
- .pool
-_0800B9E4:
- ldrb r0, [r3, 0x13]
- cmp r0, 0x1
- beq _0800BA1E
- movs r0, 0
- strb r0, [r3, 0xD]
-_0800B9EE:
- bl sub_800BAC0
- b _0800BA1E
-_0800B9F4:
- ldrb r2, [r3, 0x1]
- cmp r2, 0x4
- beq _0800B9FE
- cmp r2, 0x2
- bne _0800BA1E
-_0800B9FE:
- ldr r1, =gUnknown_03000D6C
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xA
- bls _0800BA1E
- cmp r2, 0x4
- bne _0800BA16
- movs r0, 0x2
- strb r0, [r3, 0x13]
-_0800BA16:
- cmp r2, 0x2
- bne _0800BA1E
- strb r4, [r3, 0x3]
- strb r4, [r3, 0xF]
-_0800BA1E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800B9B8
-
- thumb_func_start Timer3Intr
-Timer3Intr: @ 800BA28
- push {lr}
- bl sub_800BD98
- bl sub_800BAC0
- pop {r0}
- bx r0
- thumb_func_end Timer3Intr
-
- thumb_func_start sub_800BA38
-sub_800BA38: @ 800BA38
- push {r4,lr}
- ldr r4, =gUnknown_03003170
- ldr r0, =0x04000128
- ldr r1, [r0]
- lsls r0, r1, 26
- lsrs r0, 30
- strb r0, [r4, 0x2]
- ldrb r0, [r4, 0x1]
- cmp r0, 0x2
- beq _0800BA6C
- cmp r0, 0x4
- bne _0800BA8A
- lsls r0, r1, 25
- lsrs r0, 31
- strb r0, [r4, 0x10]
- bl sub_800BBCC
- bl sub_800BCE4
- bl sub_800BDCC
- b _0800BA8A
- .pool
-_0800BA6C:
- bl sub_800BAD0
- lsls r0, 24
- cmp r0, 0
- beq _0800BA8A
- ldrb r0, [r4]
- cmp r0, 0
- beq _0800BA86
- movs r0, 0x3
- strb r0, [r4, 0x1]
- movs r0, 0x8
- strb r0, [r4, 0xD]
- b _0800BA8A
-_0800BA86:
- movs r0, 0x4
- strb r0, [r4, 0x1]
-_0800BA8A:
- ldr r3, =gUnknown_03003170
- ldrb r0, [r3, 0xD]
- adds r0, 0x1
- movs r2, 0
- strb r0, [r3, 0xD]
- ldr r1, =gUnknown_03000D6C
- strb r2, [r1]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x8
- bne _0800BAAA
- ldr r0, =gUnknown_03004130
- ldr r2, =0x00000fbd
- adds r1, r3, r2
- ldrb r1, [r1]
- strb r1, [r0]
-_0800BAAA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BA38
-
- thumb_func_start sub_800BAC0
-sub_800BAC0: @ 800BAC0
- ldr r0, =0x04000128
- ldrh r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strh r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_800BAC0
-
- thumb_func_start sub_800BAD0
-sub_800BAD0: @ 800BAD0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r5, 0
- ldr r6, =0x0000ffff
- ldr r0, =gUnknown_03003170
- ldrb r1, [r0, 0xE]
- adds r7, r0, 0
- cmp r1, 0x1
- bne _0800BAFC
- ldr r1, =0x0400012a
- ldr r2, =0x00008fff
- b _0800BB00
- .pool
-_0800BAFC:
- ldr r1, =0x0400012a
- ldr r2, =0x0000b9a0
-_0800BB00:
- adds r0, r2, 0
- strh r0, [r1]
- ldr r2, =gUnknown_03003174
- ldr r3, =0x04000120
- ldr r0, [r3]
- ldr r1, [r3, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
- movs r0, 0
- movs r1, 0
- str r0, [r3]
- str r1, [r3, 0x4]
- strb r0, [r2, 0xA]
- movs r4, 0
- ldr r0, =gUnknown_03000D73
- mov r9, r0
- mov r8, r2
- ldr r2, =0x00008fff
- ldr r1, =0x0000ffff
- mov r12, r1
-_0800BB28:
- lsls r0, r4, 1
- add r0, r8
- ldrh r3, [r0]
- movs r0, 0x4
- negs r0, r0
- ands r0, r3
- ldr r1, =0x0000b9a0
- cmp r0, r1
- beq _0800BB40
- adds r0, r3, 0
- cmp r0, r2
- bne _0800BB70
-_0800BB40:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r3, 0
- cmp r6, r0
- bls _0800BB78
- cmp r0, 0
- beq _0800BB78
- adds r6, r3, 0
- b _0800BB78
- .pool
-_0800BB70:
- cmp r0, r12
- beq _0800BB82
- movs r5, 0
- b _0800BB82
-_0800BB78:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800BB28
-_0800BB82:
- strb r5, [r7, 0x3]
- adds r0, r5, 0
- cmp r0, 0x1
- bls _0800BBB2
- mov r2, r9
- ldrb r2, [r2]
- cmp r0, r2
- bne _0800BBA4
- ldrh r1, [r7, 0x4]
- ldr r0, =0x00008fff
- cmp r1, r0
- bne _0800BBA4
- movs r0, 0x1
- b _0800BBBE
- .pool
-_0800BBA4:
- ldrb r0, [r7, 0x3]
- cmp r0, 0x1
- bls _0800BBB2
- movs r0, 0x3
- ands r6, r0
- adds r0, r6, 0x1
- b _0800BBB4
-_0800BBB2:
- movs r0, 0
-_0800BBB4:
- strb r0, [r7, 0xF]
- ldrb r0, [r7, 0x3]
- mov r1, r9
- strb r0, [r1]
- movs r0, 0
-_0800BBBE:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800BAD0
-
- thumb_func_start sub_800BBCC
-sub_800BBCC: @ 800BBCC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- ldr r0, =0x04000120
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, =gUnknown_03003170
- ldrb r1, [r0, 0x16]
- adds r6, r0, 0
- cmp r1, 0
- bne _0800BC30
- movs r4, 0
- ldr r7, =gUnknown_03000D72
- ldrb r0, [r6, 0x3]
- cmp r4, r0
- bcs _0800BC1A
- adds r5, r6, 0
- ldrh r1, [r6, 0x14]
- adds r3, r7, 0
- adds r2, r6, 0
-_0800BBFA:
- lsls r0, r4, 1
- add r0, sp
- ldrh r0, [r0]
- cmp r1, r0
- beq _0800BC0E
- ldrb r0, [r3]
- cmp r0, 0
- beq _0800BC0E
- movs r0, 0x1
- strb r0, [r5, 0x11]
-_0800BC0E:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r2, 0x3]
- cmp r4, r0
- bcc _0800BBFA
-_0800BC1A:
- movs r0, 0
- strh r0, [r6, 0x14]
- movs r0, 0x1
- strb r0, [r7]
- b _0800BCD0
- .pool
-_0800BC30:
- ldr r2, =0x00000fbc
- adds r1, r6, r2
- adds r2, 0x1
- adds r0, r6, r2
- ldrb r2, [r0]
- ldrb r1, [r1]
- adds r0, r2, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x31
- bls _0800BC4C
- subs r0, 0x32
- lsls r0, 24
- lsrs r0, 24
-_0800BC4C:
- cmp r2, 0x31
- bhi _0800BCA8
- movs r4, 0
- ldrb r1, [r6, 0x3]
- cmp r4, r1
- bcs _0800BCAC
- adds r5, r6, 0
- ldr r7, =gUnknown_03000D70
- lsls r0, 1
- mov r12, r0
- movs r2, 0xCF
- lsls r2, 2
- adds r2, r6
- mov r8, r2
-_0800BC68:
- lsls r1, r4, 1
- mov r2, sp
- adds r0, r2, r1
- ldrh r3, [r0]
- ldrh r2, [r5, 0x14]
- adds r0, r3, r2
- strh r0, [r5, 0x14]
- ldrh r0, [r7]
- orrs r0, r3
- strh r0, [r7]
- ldrb r2, [r5, 0x17]
- movs r0, 0x64
- muls r0, r2
- add r0, r12
- adds r1, r4
- lsls r1, 3
- adds r1, r4
- lsls r1, 5
- adds r0, r1
- add r0, r8
- strh r3, [r0]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r5, 0x3]
- cmp r4, r0
- bcc _0800BC68
- b _0800BCAC
- .pool
-_0800BCA8:
- movs r0, 0x2
- strb r0, [r6, 0x12]
-_0800BCAC:
- ldrb r0, [r6, 0x17]
- adds r0, 0x1
- strb r0, [r6, 0x17]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x8
- bne _0800BCD0
- ldr r2, =gUnknown_03000D70
- ldrh r0, [r2]
- cmp r0, 0
- beq _0800BCD0
- ldr r1, =0x00000fbd
- adds r0, r6, r1
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- movs r0, 0
- strh r0, [r2]
-_0800BCD0:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BBCC
-
- thumb_func_start sub_800BCE4
-sub_800BCE4: @ 800BCE4
- push {r4,lr}
- ldr r0, =gUnknown_03003170
- ldrb r1, [r0, 0x16]
- adds r4, r0, 0
- cmp r1, 0x8
- bne _0800BD36
- ldr r1, =0x0400012a
- ldrh r0, [r4, 0x14]
- strh r0, [r1]
- ldr r1, =gUnknown_03000D6D
- ldrb r2, [r1]
- cmp r2, 0
- bne _0800BD30
- ldr r0, =0x00000339
- adds r1, r4, r0
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- movs r0, 0xCE
- lsls r0, 2
- adds r1, r4, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x31
- bls _0800BD8C
- strb r2, [r1]
- b _0800BD8C
- .pool
-_0800BD30:
- movs r0, 0
- strb r0, [r1]
- b _0800BD8C
-_0800BD36:
- ldr r1, =gUnknown_03000D6D
- ldrb r0, [r1]
- cmp r0, 0
- bne _0800BD52
- ldr r2, =0x00000339
- adds r0, r4, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800BD4C
- movs r0, 0x1
- strb r0, [r1]
-_0800BD4C:
- ldrb r0, [r1]
- cmp r0, 0
- beq _0800BD68
-_0800BD52:
- ldr r1, =0x0400012a
- movs r0, 0
- strh r0, [r1]
- b _0800BD86
- .pool
-_0800BD68:
- ldr r3, =0x0400012a
- movs r1, 0xCE
- lsls r1, 2
- adds r0, r4, r1
- ldrb r0, [r0]
- lsls r0, 1
- ldrb r2, [r4, 0x16]
- movs r1, 0x64
- muls r1, r2
- adds r0, r1
- adds r1, r4, 0
- adds r1, 0x18
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r3]
-_0800BD86:
- ldrb r0, [r4, 0x16]
- adds r0, 0x1
- strb r0, [r4, 0x16]
-_0800BD8C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BCE4
-
- thumb_func_start sub_800BD98
-sub_800BD98: @ 800BD98
- push {lr}
- ldr r0, =gUnknown_03003170
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800BDB4
- ldr r2, =0x0400010e
- ldrh r1, [r2]
- ldr r0, =0x0000ff7f
- ands r0, r1
- strh r0, [r2]
- ldr r1, =0x0400010c
- ldr r2, =0x0000ff3b
- adds r0, r2, 0
- strh r0, [r1]
-_0800BDB4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BD98
-
- thumb_func_start sub_800BDCC
-sub_800BDCC: @ 800BDCC
- push {lr}
- ldr r1, =gUnknown_03003170
- ldrb r0, [r1, 0x17]
- cmp r0, 0x8
- bne _0800BDE4
- movs r0, 0
- strb r0, [r1, 0x16]
- strb r0, [r1, 0x17]
- b _0800BDF4
- .pool
-_0800BDE4:
- ldrb r0, [r1]
- cmp r0, 0
- beq _0800BDF4
- ldr r0, =0x0400010e
- ldrh r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strh r1, [r0]
-_0800BDF4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BDCC
-
- thumb_func_start sub_800BDFC
-sub_800BDFC: @ 800BDFC
- push {r4-r6,lr}
- ldr r1, =gUnknown_03003170
- ldr r2, =0x00000339
- adds r0, r1, r2
- movs r2, 0
- strb r2, [r0]
- movs r3, 0xCE
- lsls r3, 2
- adds r0, r1, r3
- strb r2, [r0]
- movs r0, 0
- movs r6, 0x64
- adds r5, r1, 0
- adds r5, 0x18
- ldr r4, =0x0000efff
-_0800BE1A:
- movs r2, 0
- adds r1, r0, 0x1
- adds r3, r0, 0
- muls r3, r6
-_0800BE22:
- lsls r0, r2, 1
- adds r0, r3
- adds r0, r5
- strh r4, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x31
- bls _0800BE22
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, 0x7
- bls _0800BE1A
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BDFC
-
- thumb_func_start sub_800BE50
-sub_800BE50: @ 800BE50
- push {r4-r7,lr}
- ldr r1, =gUnknown_03003170
- ldr r2, =0x00000fbd
- adds r0, r1, r2
- movs r2, 0
- strb r2, [r0]
- ldr r3, =0x00000fbc
- adds r0, r1, r3
- strb r2, [r0]
- movs r0, 0x64
- mov r12, r0
- movs r3, 0xCF
- lsls r3, 2
- adds r7, r1, r3
- ldr r6, =0x0000efff
-_0800BE6E:
- movs r3, 0
- lsls r0, r2, 1
- adds r5, r2, 0x1
- adds r0, r2
- lsls r0, 3
- adds r0, r2
- lsls r4, r0, 5
-_0800BE7C:
- movs r2, 0
- adds r1, r3, 0x1
- mov r0, r12
- muls r0, r3
- adds r3, r0, 0
-_0800BE86:
- lsls r0, r2, 1
- adds r0, r3
- adds r0, r4
- adds r0, r7
- strh r6, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x31
- bls _0800BE86
- lsls r0, r1, 24
- lsrs r3, r0, 24
- cmp r3, 0x7
- bls _0800BE7C
- lsls r0, r5, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0800BE6E
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BE50
-
- thumb_func_start sub_800BEC0
-sub_800BEC0: @ 800BEC0
- push {r4,lr}
- bl rfu_REQBN_softReset_and_checkID
- adds r4, r0, 0
- ldr r0, =0x00008001
- cmp r4, r0
- bne _0800BED4
- ldr r1, =gUnknown_03004140
- movs r0, 0x1
- strb r0, [r1, 0x8]
-_0800BED4:
- ldr r0, =gUnknown_03004140
- ldrb r2, [r0, 0x4]
- adds r1, r0, 0
- cmp r2, 0x17
- beq _0800BEE8
- cmp r2, 0x1
- beq _0800BEE8
- movs r0, 0
- strb r0, [r1, 0x5]
- strb r0, [r1, 0x4]
-_0800BEE8:
- movs r0, 0
- strb r0, [r1, 0x7]
- strb r0, [r1, 0xD]
- strb r0, [r1, 0x1]
- strb r0, [r1]
- movs r0, 0xFF
- strb r0, [r1, 0x6]
- bl sub_800D610
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800BEC0
-
- thumb_func_start rfu_REQ_sendData_wrapper
-rfu_REQ_sendData_wrapper: @ 800BF0C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800BF34
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x2]
- movs r2, 0
- cmp r0, 0x1
- bne _0800BF3C
- movs r2, 0x1
- b _0800BF3C
- .pool
-_0800BF34:
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x3]
- movs r1, 0
- strb r1, [r0, 0x3]
-_0800BF3C:
- adds r0, r2, 0
- bl rfu_REQ_sendData
- pop {r0}
- bx r0
- .pool
- thumb_func_end rfu_REQ_sendData_wrapper
-
- thumb_func_start sub_800BF4C
-sub_800BF4C: @ 800BF4C
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- cmp r5, 0
- beq _0800BF94
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r4, =gUnknown_03004140
- ldr r2, =0x01000024
- mov r0, sp
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0xFF
- strb r0, [r4, 0x6]
- str r5, [r4, 0x40]
- str r6, [r4, 0x44]
- ldr r0, =sub_800CEB0
- bl rfu_setMSCCallback
- ldr r0, =sub_800C7B4
- bl rfu_setREQCallback
- movs r0, 0
- b _0800BF96
- .pool
-_0800BF94:
- movs r0, 0x4
-_0800BF96:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_800BF4C
-
- thumb_func_start sub_800BFA0
-sub_800BFA0: @ 800BFA0
- push {r4,lr}
- sub sp, 0x4
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r4, =gUnknown_03004140
- ldr r2, =0x01000020
- mov r0, sp
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0xFF
- strb r0, [r4, 0x6]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BFA0
-
- thumb_func_start sub_800BFCC
-sub_800BFCC: @ 800BFCC
- push {r4,lr}
- adds r4, r0, 0
- bl sub_800C000
- ldr r1, =gUnknown_03004140
- movs r2, 0x1
- strb r2, [r1, 0x4]
- movs r0, 0x2
- strb r0, [r1, 0x5]
- str r4, [r1, 0x3C]
- ldrb r0, [r4, 0x11]
- strb r0, [r1, 0x9]
- ldrh r0, [r4, 0x12]
- strh r0, [r1, 0x32]
- ldrh r0, [r4, 0x14]
- strh r0, [r1, 0x18]
- ldrb r0, [r4, 0x10]
- cmp r0, 0
- beq _0800BFF4
- strb r2, [r1, 0xB]
-_0800BFF4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800BFCC
-
- thumb_func_start sub_800C000
-sub_800C000: @ 800C000
- push {r4,r5,lr}
- ldr r2, =gUnknown_03004140
- movs r0, 0
- strb r0, [r2, 0x5]
- strb r0, [r2, 0x4]
- movs r1, 0xFF
- strb r1, [r2, 0x6]
- strb r0, [r2, 0x7]
- strb r0, [r2, 0x10]
- strb r0, [r2, 0xC]
- adds r1, r2, 0
- adds r1, 0x24
- strb r0, [r1]
- adds r1, 0xC
- strb r0, [r1]
- movs r3, 0
- adds r5, r2, 0
- adds r5, 0x28
- movs r4, 0
- adds r2, 0x34
-_0800C028:
- lsls r1, r3, 1
- adds r0, r1, r5
- strh r4, [r0]
- adds r1, r2
- strh r4, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800C028
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800C000
-
- thumb_func_start sub_800C048
-sub_800C048: @ 800C048
- ldr r1, =gUnknown_03004140
- movs r0, 0x15
- strb r0, [r1, 0x4]
- bx lr
- .pool
- thumb_func_end sub_800C048
-
- thumb_func_start sub_800C054
-sub_800C054: @ 800C054
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r3, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _0800C090
- cmp r0, 0x8
- bne _0800C07A
- cmp r5, 0x1
- beq _0800C090
-_0800C07A:
- movs r0, 0x1
- strh r0, [r1, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x1
- b _0800C122
- .pool
-_0800C090:
- bl rfu_getMasterSlave
- lsls r0, 24
- cmp r0, 0
- bne _0800C0B0
- ldr r1, =gUnknown_03004140
- movs r0, 0x2
- strh r0, [r1, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x2
- b _0800C122
- .pool
-_0800C0B0:
- movs r2, 0
- ldrh r0, [r6]
- ldr r4, =0x0000ffff
- adds r1, r6, 0x2
- ldr r3, =gUnknown_03004140
- cmp r0, r4
- beq _0800C0D0
-_0800C0BE:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bhi _0800C0D0
- ldrh r0, [r1]
- adds r1, 0x2
- cmp r0, r4
- bne _0800C0BE
-_0800C0D0:
- cmp r2, 0x10
- bne _0800C0EC
- movs r0, 0x4
- strh r0, [r3, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x4
- b _0800C122
- .pool
-_0800C0EC:
- cmp r5, 0x1
- bls _0800C0FA
- movs r0, 0x1
- strb r0, [r3, 0x7]
- movs r5, 0x1
- movs r7, 0
- b _0800C0FE
-_0800C0FA:
- movs r0, 0
- strb r0, [r3, 0x7]
-_0800C0FE:
- cmp r5, 0
- beq _0800C108
- movs r0, 0x5
- strb r0, [r3, 0x4]
- b _0800C116
-_0800C108:
- movs r0, 0x9
- strb r0, [r3, 0x4]
- ldrb r0, [r3, 0xB]
- cmp r0, 0
- beq _0800C116
- movs r0, 0x2
- strb r0, [r3, 0xB]
-_0800C116:
- strb r5, [r3, 0x6]
- strh r7, [r3, 0x1A]
- mov r0, r8
- strh r0, [r3, 0x26]
- str r6, [r3, 0x20]
- movs r0, 0
-_0800C122:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800C054
-
- thumb_func_start sub_800C12C
-sub_800C12C: @ 800C12C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _0800C164
- subs r0, 0x9
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bls _0800C164
- movs r0, 0x1
- strh r0, [r1, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x1
- b _0800C204
- .pool
-_0800C164:
- bl rfu_getMasterSlave
- lsls r0, 24
- cmp r0, 0
- bne _0800C184
- ldr r1, =gUnknown_03004140
- movs r0, 0x2
- strh r0, [r1, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x2
- b _0800C204
- .pool
-_0800C184:
- movs r2, 0
- ldr r0, =gUnknown_03007890
- ldr r1, [r0]
- ldrb r3, [r1, 0x8]
- ldr r5, =gUnknown_03004140
- adds r7, r0, 0
- cmp r2, r3
- bcs _0800C1B2
- ldrh r0, [r1, 0x14]
- cmp r0, r6
- beq _0800C1B2
- adds r4, r1, 0
- adds r1, r3, 0
-_0800C19E:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, r1
- bcs _0800C1B2
- lsls r0, r2, 5
- adds r0, r4, r0
- ldrh r0, [r0, 0x14]
- cmp r0, r6
- bne _0800C19E
-_0800C1B2:
- ldr r0, [r7]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _0800C1BE
- cmp r2, r0
- bne _0800C1D8
-_0800C1BE:
- movs r0, 0x3
- strh r0, [r5, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x3
- b _0800C204
- .pool
-_0800C1D8:
- ldrb r0, [r5, 0x4]
- cmp r0, 0
- beq _0800C1E2
- cmp r0, 0x9
- bne _0800C1EA
-_0800C1E2:
- movs r0, 0xC
- strb r0, [r5, 0x4]
- movs r0, 0xD
- b _0800C1F0
-_0800C1EA:
- movs r0, 0xB
- strb r0, [r5, 0x4]
- movs r0, 0xC
-_0800C1F0:
- strb r0, [r5, 0x5]
- strh r6, [r5, 0x1E]
- mov r0, r8
- strh r0, [r5, 0x1A]
- ldrb r0, [r5, 0x7]
- cmp r0, 0
- beq _0800C202
- movs r0, 0x7
- strb r0, [r5, 0x7]
-_0800C202:
- movs r0, 0
-_0800C204:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800C12C
-
- thumb_func_start sub_800C210
-sub_800C210: @ 800C210
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r6, =gUnknown_03004140
- adds r3, r6, 0
- adds r3, 0x30
- ldrb r2, [r3]
- adds r0, r1, 0
- ands r0, r2
- cmp r0, 0
- beq _0800C26C
- adds r0, r2, 0
- bics r0, r1
- strb r0, [r3]
- movs r4, 0
- ldr r7, =gUnknown_03007890
- movs r5, 0x1
- adds r3, 0x4
- movs r2, 0
-_0800C236:
- adds r0, r1, 0
- asrs r0, r4
- ands r0, r5
- cmp r0, 0
- beq _0800C246
- lsls r0, r4, 1
- adds r0, r3
- strh r2, [r0]
-_0800C246:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800C236
- ldr r0, [r7]
- ldrb r4, [r0, 0x3]
- ands r4, r1
- cmp r4, 0
- beq _0800C260
- adds r0, r4, 0
- bl sub_800D334
-_0800C260:
- ldr r0, =gUnknown_03004140
- strh r4, [r0, 0x14]
- movs r0, 0x33
- adds r1, r4, 0
- bl sub_800D30C
-_0800C26C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800C210
-
- thumb_func_start sub_800C27C
-sub_800C27C: @ 800C27C
- push {r4,r5,lr}
- lsls r0, 24
- movs r2, 0
- ldr r1, =gUnknown_03004140
- strb r2, [r1, 0x7]
- adds r5, r1, 0
- cmp r0, 0
- beq _0800C29C
- bl sub_800C000
- movs r0, 0x17
- strb r0, [r5, 0x4]
- b _0800C366
- .pool
-_0800C29C:
- ldrb r0, [r5, 0x4]
- subs r0, 0x5
- cmp r0, 0xD
- bhi _0800C352
- lsls r0, 2
- ldr r1, =_0800C2B4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800C2B4:
- .4byte _0800C2EC
- .4byte _0800C2F8
- .4byte _0800C2F8
- .4byte _0800C358
- .4byte _0800C302
- .4byte _0800C30C
- .4byte _0800C30C
- .4byte _0800C316
- .4byte _0800C320
- .4byte _0800C320
- .4byte _0800C358
- .4byte _0800C326
- .4byte _0800C34C
- .4byte _0800C34C
-_0800C2EC:
- movs r1, 0
- movs r0, 0x8
- strb r0, [r5, 0x4]
- strb r1, [r5, 0x5]
- movs r2, 0x13
- b _0800C358
-_0800C2F8:
- movs r0, 0x7
- strb r0, [r5, 0x4]
- movs r0, 0x8
- strb r0, [r5, 0x5]
- b _0800C358
-_0800C302:
- movs r0, 0
- strb r0, [r5, 0x5]
- strb r0, [r5, 0x4]
- movs r2, 0x21
- b _0800C358
-_0800C30C:
- movs r1, 0
- movs r0, 0xB
- strb r0, [r5, 0x4]
- strb r1, [r5, 0x5]
- b _0800C358
-_0800C316:
- movs r0, 0
- strb r0, [r5, 0x5]
- strb r0, [r5, 0x4]
- movs r2, 0x23
- b _0800C358
-_0800C320:
- movs r0, 0xE
- strb r0, [r5, 0x4]
- b _0800C358
-_0800C326:
- ldrb r0, [r5, 0x11]
- strb r0, [r5, 0x4]
- ldrb r0, [r5, 0x12]
- strb r0, [r5, 0x5]
- ldr r4, =gUnknown_03007890
- ldr r0, [r4]
- ldrb r0, [r0, 0x3]
- bl sub_800D334
- ldr r0, [r4]
- ldrb r0, [r0, 0x3]
- strh r0, [r5, 0x14]
- movs r0, 0x33
- movs r1, 0x1
- bl sub_800D30C
- b _0800C366
- .pool
-_0800C34C:
- movs r0, 0x12
- strb r0, [r5, 0x4]
- b _0800C358
-_0800C352:
- strb r2, [r5, 0x5]
- strb r2, [r5, 0x4]
- movs r2, 0x43
-_0800C358:
- ldrb r0, [r5, 0x4]
- cmp r0, 0
- bne _0800C366
- adds r0, r2, 0
- movs r1, 0
- bl sub_800D30C
-_0800C366:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_800C27C
-
- thumb_func_start sub_800C36C
-sub_800C36C: @ 800C36C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- mov r8, r1
- mov r5, sp
- adds r5, 0x1
- mov r4, sp
- adds r4, 0x2
- mov r1, sp
- adds r2, r5, 0
- adds r3, r4, 0
- bl rfu_REQBN_watchLink
- mov r0, sp
- ldrb r0, [r0]
- adds r7, r4, 0
- cmp r0, 0
- beq _0800C43E
- ldr r1, =gUnknown_03004140
- mov r0, sp
- ldrb r0, [r0]
- strh r0, [r1, 0x14]
- ldrb r0, [r5]
- strh r0, [r1, 0x16]
- ldrb r0, [r1, 0x9]
- adds r6, r1, 0
- cmp r0, 0
- beq _0800C426
- movs r0, 0x1
- strb r0, [r6, 0xA]
- ldrb r0, [r6, 0x6]
- cmp r0, 0
- bne _0800C3C2
- ldrb r0, [r5]
- cmp r0, 0
- bne _0800C3C2
- movs r0, 0x4
- strb r0, [r6, 0xA]
-_0800C3C2:
- ldrb r0, [r6, 0xA]
- cmp r0, 0x1
- bne _0800C40C
- movs r2, 0
- mov r4, sp
- movs r5, 0x1
- mov r12, r6
- mov r3, r12
- adds r3, 0x30
- movs r6, 0x34
- add r6, r12
- mov r9, r6
-_0800C3DA:
- ldrb r0, [r4]
- asrs r0, r2
- ands r0, r5
- cmp r0, 0
- beq _0800C3F8
- adds r0, r5, 0
- lsls r0, r2
- ldrb r1, [r3]
- orrs r0, r1
- strb r0, [r3]
- lsls r0, r2, 1
- add r0, r9
- mov r6, r12
- ldrh r1, [r6, 0x32]
- strh r1, [r0]
-_0800C3F8:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0800C3DA
- movs r0, 0x31
- b _0800C41E
- .pool
-_0800C40C:
- movs r0, 0
- strb r0, [r6, 0xA]
- mov r0, sp
- ldrb r0, [r0]
- bl sub_800D334
- movs r0, 0x1
- mov r8, r0
- movs r0, 0x33
-_0800C41E:
- movs r1, 0x1
- bl sub_800D30C
- b _0800C43A
-_0800C426:
- mov r0, sp
- ldrb r0, [r0]
- bl sub_800D334
- movs r1, 0x1
- mov r8, r1
- movs r0, 0x30
- movs r1, 0x2
- bl sub_800D30C
-_0800C43A:
- bl sub_800D610
-_0800C43E:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800C518
- ldrb r0, [r7]
- cmp r0, 0
- beq _0800C49C
- movs r2, 0
- ldr r6, =gUnknown_03004140
- movs r3, 0x1
- adds r4, r6, 0
- adds r4, 0x34
- adds r6, 0x30
- adds r5, r7, 0
-_0800C45C:
- ldrb r0, [r6]
- asrs r0, r2
- ands r0, r3
- cmp r0, 0
- beq _0800C478
- ldrb r0, [r5]
- asrs r0, r2
- ands r0, r3
- cmp r0, 0
- beq _0800C478
- lsls r0, r2, 1
- adds r0, r4
- movs r1, 0
- strh r1, [r0]
-_0800C478:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0800C45C
- ldr r3, =gUnknown_03004140
- adds r2, r3, 0
- adds r2, 0x30
- ldrb r1, [r7]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldrb r0, [r7]
- strh r0, [r3, 0x14]
- movs r0, 0x32
- movs r1, 0x1
- bl sub_800D30C
-_0800C49C:
- ldr r0, =gUnknown_03004140
- adds r3, r0, 0
- adds r3, 0x30
- ldrb r1, [r3]
- adds r6, r0, 0
- cmp r1, 0
- beq _0800C514
- movs r4, 0
- movs r2, 0
- movs r5, 0x1
-_0800C4B0:
- ldrb r0, [r3]
- asrs r0, r2
- ands r0, r5
- cmp r0, 0
- beq _0800C4E2
- lsls r1, r2, 1
- adds r0, r6, 0
- adds r0, 0x34
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _0800C4E2
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _0800C4E2
- adds r0, r5, 0
- lsls r0, r2
- ldrb r1, [r3]
- bics r1, r0
- strb r1, [r3]
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0800C4E2:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0800C4B0
- cmp r4, 0
- beq _0800C506
- adds r0, r4, 0
- bl sub_800D334
- movs r6, 0x1
- mov r8, r6
- ldr r0, =gUnknown_03004140
- strh r4, [r0, 0x14]
- movs r0, 0x33
- movs r1, 0x1
- bl sub_800D30C
-_0800C506:
- ldr r0, =gUnknown_03004140
- adds r1, r0, 0
- adds r1, 0x30
- ldrb r1, [r1]
- adds r6, r0, 0
- cmp r1, 0
- bne _0800C518
-_0800C514:
- movs r0, 0
- strb r0, [r6, 0xA]
-_0800C518:
- mov r0, r8
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800C36C
-
- thumb_func_start rfu_syncVBlank_
-rfu_syncVBlank_: @ 800C530
- push {lr}
- bl rfu_syncVBlank
- lsls r0, 16
- cmp r0, 0
- beq _0800C548
- movs r0, 0xF1
- movs r1, 0
- bl sub_800D30C
- bl sub_800D610
-_0800C548:
- pop {r0}
- bx r0
- thumb_func_end rfu_syncVBlank_
-
- thumb_func_start sub_800C54C
-sub_800C54C: @ 800C54C
- push {r4,lr}
- adds r3, r0, 0
- ldr r1, =gUnknown_03004140
- ldr r2, [r1, 0x40]
- cmp r2, 0
- bne _0800C568
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _0800C568
- strb r2, [r1, 0x4]
- b _0800C736
- .pool
-_0800C568:
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x7]
- cmp r0, 0
- beq _0800C576
- adds r0, r3, 0
- bl sub_800C744
-_0800C576:
- ldr r4, =gUnknown_03004140
- ldrb r0, [r4, 0x4]
- cmp r0, 0
- bne _0800C580
- b _0800C700
-_0800C580:
- bl rfu_waitREQComplete
- movs r0, 0x1
- strb r0, [r4, 0xE]
- ldrb r0, [r4, 0x4]
- subs r0, 0x1
- cmp r0, 0x16
- bls _0800C592
- b _0800C6F6
-_0800C592:
- lsls r0, 2
- ldr r1, =_0800C5A4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800C5A4:
- .4byte _0800C624
- .4byte _0800C65C
- .4byte _0800C662
- .4byte _0800C678
- .4byte _0800C690
- .4byte _0800C696
- .4byte _0800C69C
- .4byte _0800C6F6
- .4byte _0800C6A2
- .4byte _0800C6A8
- .4byte _0800C6AE
- .4byte _0800C6B4
- .4byte _0800C6C4
- .4byte _0800C6CA
- .4byte _0800C6F6
- .4byte _0800C6D0
- .4byte _0800C6E0
- .4byte _0800C6E6
- .4byte _0800C6EC
- .4byte _0800C6F6
- .4byte _0800C6F2
- .4byte _0800C6F6
- .4byte _0800C600
-_0800C600:
- bl sub_800BEC0
- ldr r1, =0x00008001
- movs r2, 0xFF
- cmp r0, r1
- bne _0800C60E
- movs r2, 0x44
-_0800C60E:
- ldr r1, =gUnknown_03004140
- movs r0, 0
- strb r0, [r1, 0x5]
- strb r0, [r1, 0x4]
- adds r0, r2, 0
- b _0800C64E
- .pool
-_0800C624:
- bl sub_800BEC0
- ldr r1, =0x00008001
- cmp r0, r1
- bne _0800C644
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x5]
- strb r1, [r0, 0x4]
- movs r1, 0x3
- strb r1, [r0, 0x5]
- b _0800C6F6
- .pool
-_0800C644:
- ldr r1, =gUnknown_03004140
- movs r0, 0
- strb r0, [r1, 0x5]
- strb r0, [r1, 0x4]
- movs r0, 0xFF
-_0800C64E:
- movs r1, 0
- bl sub_800D30C
- b _0800C6F6
- .pool
-_0800C65C:
- bl rfu_REQ_reset
- b _0800C6F6
-_0800C662:
- ldr r0, =gUnknown_03004140
- ldr r2, [r0, 0x3C]
- ldrh r0, [r2, 0x2]
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- bl rfu_REQ_configSystem
- b _0800C6F6
- .pool
-_0800C678:
- ldr r0, =gUnknown_03004140
- ldr r3, [r0, 0x3C]
- ldrb r0, [r3, 0x4]
- ldrh r1, [r3, 0x6]
- ldr r2, [r3, 0x8]
- ldr r3, [r3, 0xC]
- bl rfu_REQ_configGameData
- b _0800C6F6
- .pool
-_0800C690:
- bl rfu_REQ_startSearchChild
- b _0800C6F6
-_0800C696:
- bl rfu_REQ_pollSearchChild
- b _0800C6F6
-_0800C69C:
- bl rfu_REQ_endSearchChild
- b _0800C6F6
-_0800C6A2:
- bl rfu_REQ_startSearchParent
- b _0800C6F6
-_0800C6A8:
- bl rfu_REQ_pollSearchParent
- b _0800C6F6
-_0800C6AE:
- bl rfu_REQ_endSearchParent
- b _0800C6F6
-_0800C6B4:
- ldr r0, =gUnknown_03004140
- ldrh r0, [r0, 0x1E]
- bl rfu_REQ_startConnectParent
- b _0800C6F6
- .pool
-_0800C6C4:
- bl rfu_REQ_pollConnectParent
- b _0800C6F6
-_0800C6CA:
- bl rfu_REQ_endConnectParent
- b _0800C6F6
-_0800C6D0:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- bl rfu_REQ_CHILD_startConnectRecovery
- b _0800C6F6
- .pool
-_0800C6E0:
- bl rfu_REQ_CHILD_pollConnectRecovery
- b _0800C6F6
-_0800C6E6:
- bl rfu_REQ_CHILD_endConnectRecovery
- b _0800C6F6
-_0800C6EC:
- bl rfu_REQ_changeMasterSlave
- b _0800C6F6
-_0800C6F2:
- bl rfu_REQ_stopMode
-_0800C6F6:
- bl rfu_waitREQComplete
- ldr r1, =gUnknown_03004140
- movs r0, 0
- strb r0, [r1, 0xE]
-_0800C700:
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x4]
- subs r0, 0x12
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0800C710
- b _0800C576
-_0800C710:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800C726
- movs r0, 0
- bl sub_800C36C
- lsls r0, 24
- cmp r0, 0
- bne _0800C736
-_0800C726:
- bl sub_800CF34
- bl sub_800D158
- bl sub_800D268
- bl sub_800D434
-_0800C736:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800C54C
-
- thumb_func_start sub_800C744
-sub_800C744: @ 800C744
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x7]
- adds r4, r0, 0
- cmp r1, 0x5
- bne _0800C76E
- movs r2, 0x1
- strb r2, [r4, 0x6]
- strb r1, [r4, 0x4]
- ldrh r0, [r4, 0x1C]
- strh r0, [r4, 0x1A]
- lsls r0, 16
- cmp r0, 0
- beq _0800C76C
- movs r0, 0x6
- strb r0, [r4, 0x7]
- b _0800C76E
- .pool
-_0800C76C:
- strb r2, [r4, 0x7]
-_0800C76E:
- ldrb r0, [r4, 0x7]
- cmp r0, 0x1
- bne _0800C798
- strb r0, [r4, 0x6]
- movs r0, 0x5
- strb r0, [r4, 0x4]
- adds r0, r3, 0
- movs r1, 0x8C
- bl __umodsi3
- strh r0, [r4, 0x1A]
- movs r1, 0x8C
- subs r1, r0
- strh r1, [r4, 0x1C]
- lsls r0, 16
- cmp r0, 0
- beq _0800C794
- movs r0, 0x2
- b _0800C796
-_0800C794:
- movs r0, 0x3
-_0800C796:
- strb r0, [r4, 0x7]
-_0800C798:
- ldrb r0, [r4, 0x7]
- cmp r0, 0x3
- bne _0800C7AE
- movs r0, 0
- strb r0, [r4, 0x6]
- movs r0, 0x28
- strh r0, [r4, 0x1A]
- movs r0, 0x4
- strb r0, [r4, 0x7]
- movs r0, 0x9
- strb r0, [r4, 0x4]
-_0800C7AE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_800C744
-
- thumb_func_start sub_800C7B4
-sub_800C7B4: @ 800C7B4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0xE]
- adds r7, r0, 0
- cmp r1, 0
- bne _0800C7D2
- b _0800CC98
-_0800C7D2:
- movs r0, 0
- strb r0, [r7, 0xE]
- mov r0, r8
- subs r0, 0x10
- cmp r0, 0x2D
- bls _0800C7E0
- b _0800CC8A
-_0800C7E0:
- lsls r0, 2
- ldr r1, =_0800C7F4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800C7F4:
- .4byte _0800C8AC
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800C8D8
- .4byte _0800C8C4
- .4byte _0800CC8A
- .4byte _0800C8EC
- .4byte _0800C8FC
- .4byte _0800C920
- .4byte _0800C940
- .4byte _0800C960
- .4byte _0800C9D0
- .4byte _0800CA02
- .4byte _0800CA18
- .4byte _0800CA60
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CBD8
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CAD0
- .4byte _0800CB1C
- .4byte _0800CB64
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC8A
- .4byte _0800CC78
-_0800C8AC:
- cmp r6, 0
- beq _0800C8B2
- b _0800CC8A
-_0800C8B2:
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x5]
- strb r1, [r0, 0x4]
- movs r1, 0x4
- strb r1, [r0, 0x5]
- b _0800CC8A
- .pool
-_0800C8C4:
- cmp r6, 0
- beq _0800C8CA
- b _0800CC8A
-_0800C8CA:
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x5]
- strb r1, [r0, 0x4]
- strb r6, [r0, 0x5]
- b _0800CC8A
- .pool
-_0800C8D8:
- cmp r6, 0
- beq _0800C8DE
- b _0800CC8A
-_0800C8DE:
- ldr r0, =gUnknown_03004140
- strb r6, [r0, 0x5]
- strb r6, [r0, 0x4]
- movs r0, 0
- b _0800CBF6
- .pool
-_0800C8EC:
- cmp r6, 0
- beq _0800C8F2
- b _0800CC8A
-_0800C8F2:
- ldr r1, =gUnknown_03004140
- movs r0, 0x6
- b _0800CA0C
- .pool
-_0800C8FC:
- ldr r1, =gUnknown_03004140
- ldrh r0, [r1, 0x1A]
- cmp r0, 0
- bne _0800C906
- b _0800CC8A
-_0800C906:
- subs r0, 0x1
- strh r0, [r1, 0x1A]
- lsls r0, 16
- cmp r0, 0
- beq _0800C912
- b _0800CC8A
-_0800C912:
- movs r0, 0x7
- strb r0, [r1, 0x4]
- movs r0, 0x8
- strb r0, [r1, 0x5]
- b _0800CC8A
- .pool
-_0800C920:
- cmp r6, 0
- beq _0800C926
- b _0800CC8A
-_0800C926:
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x5]
- strb r1, [r0, 0x4]
- strb r6, [r0, 0x5]
- ldrb r0, [r0, 0x7]
- cmp r0, 0
- beq _0800C936
- b _0800CC8A
-_0800C936:
- movs r0, 0x13
- b _0800CBF6
- .pool
-_0800C940:
- cmp r6, 0
- beq _0800C946
- b _0800CC8A
-_0800C946:
- ldrb r0, [r7, 0xB]
- cmp r0, 0x1
- bne _0800C956
- ldrh r0, [r7, 0x1A]
- cmp r0, 0x1
- bls _0800C956
- subs r0, 0x1
- strh r0, [r7, 0x1A]
-_0800C956:
- ldr r1, =gUnknown_03004140
- movs r0, 0xA
- b _0800CA0C
- .pool
-_0800C960:
- cmp r6, 0
- bne _0800C9A6
- bl sub_800D294
- lsls r0, 24
- lsrs r0, 24
- mov r1, sp
- strb r0, [r1]
- ldr r4, =gUnknown_03004140
- strh r0, [r4, 0x14]
- cmp r0, 0
- beq _0800C980
- movs r0, 0x20
- movs r1, 0x1
- bl sub_800D30C
-_0800C980:
- ldrb r0, [r4, 0xB]
- cmp r0, 0
- beq _0800C9A6
- ldrh r0, [r4, 0x1A]
- cmp r0, 0x1
- beq _0800C9A6
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0x4
- bne _0800C9A6
- bl rfu_REQ_endSearchParent
- bl rfu_waitREQComplete
- movs r0, 0x9
- strb r0, [r4, 0x4]
- movs r0, 0x1
- strb r0, [r4, 0xB]
-_0800C9A6:
- ldr r1, =gUnknown_03004140
- ldrh r0, [r1, 0x1A]
- cmp r0, 0
- bne _0800C9B0
- b _0800CC8A
-_0800C9B0:
- subs r0, 0x1
- strh r0, [r1, 0x1A]
- lsls r0, 16
- cmp r0, 0
- beq _0800C9BC
- b _0800CC8A
-_0800C9BC:
- movs r0, 0xB
- strb r0, [r1, 0x4]
- movs r0, 0
- strb r0, [r1, 0x5]
- b _0800CC8A
- .pool
-_0800C9D0:
- cmp r6, 0
- beq _0800C9D6
- b _0800CC8A
-_0800C9D6:
- ldr r2, =gUnknown_03004140
- ldrb r0, [r2, 0x5]
- strb r0, [r2, 0x4]
- ldrb r1, [r2, 0x7]
- cmp r1, 0
- bne _0800C9F4
- lsls r0, 24
- cmp r0, 0
- beq _0800C9EA
- b _0800CC8A
-_0800C9EA:
- movs r0, 0x21
- b _0800CBF6
- .pool
-_0800C9F4:
- cmp r1, 0x7
- bne _0800C9FA
- b _0800CC8A
-_0800C9FA:
- movs r0, 0x5
- strb r0, [r2, 0x4]
- strb r0, [r2, 0x7]
- b _0800CC8A
-_0800CA02:
- cmp r6, 0
- beq _0800CA08
- b _0800CC8A
-_0800CA08:
- ldr r1, =gUnknown_03004140
- movs r0, 0xD
-_0800CA0C:
- strb r0, [r1, 0x5]
- strb r0, [r1, 0x4]
- b _0800CC8A
- .pool
-_0800CA18:
- cmp r6, 0
- bne _0800CA3C
- ldr r4, =gUnknown_03004150
- mov r0, sp
- adds r1, r4, 0
- bl rfu_getConnectParentStatus
- lsls r0, 16
- cmp r0, 0
- bne _0800CA3C
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800CA3C
- adds r1, r4, 0
- subs r1, 0x10
- movs r0, 0xE
- strb r0, [r1, 0x4]
-_0800CA3C:
- ldr r1, =gUnknown_03004140
- ldrh r0, [r1, 0x1A]
- cmp r0, 0
- bne _0800CA46
- b _0800CC8A
-_0800CA46:
- subs r0, 0x1
- strh r0, [r1, 0x1A]
- lsls r0, 16
- cmp r0, 0
- beq _0800CA52
- b _0800CC8A
-_0800CA52:
- movs r0, 0xE
- strb r0, [r1, 0x4]
- b _0800CC8A
- .pool
-_0800CA60:
- cmp r6, 0
- beq _0800CA66
- b _0800CC8A
-_0800CA66:
- ldr r4, =gUnknown_03004150
- mov r0, sp
- adds r1, r4, 0
- bl rfu_getConnectParentStatus
- lsls r0, 16
- cmp r0, 0
- beq _0800CA78
- b _0800CC8A
-_0800CA78:
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800CA9C
- adds r1, r4, 0
- subs r1, 0x10
- movs r0, 0x13
- strb r0, [r1, 0x4]
- movs r0, 0xF
- strb r0, [r1, 0x5]
- movs r0, 0x22
- strh r0, [r1, 0x1E]
- ldrb r0, [r1, 0x10]
- strh r0, [r1, 0x14]
- b _0800CABC
- .pool
-_0800CA9C:
- adds r1, r4, 0
- subs r1, 0x10
- strb r6, [r1, 0x5]
- strb r6, [r1, 0x4]
- movs r0, 0x23
- strh r0, [r1, 0x1E]
- mov r0, sp
- ldrb r0, [r0]
- strh r0, [r1, 0x14]
- ldrb r0, [r1, 0x7]
- cmp r0, 0
- beq _0800CABC
- movs r0, 0x3
- strb r0, [r1, 0x7]
- movs r0, 0x9
- strb r0, [r1, 0x4]
-_0800CABC:
- ldr r4, =gUnknown_03004140
- ldrb r0, [r4, 0x1E]
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0
- strh r0, [r4, 0x1E]
- b _0800CC8A
- .pool
-_0800CAD0:
- cmp r6, 0
- beq _0800CAD6
- b _0800CC8A
-_0800CAD6:
- ldr r2, =gUnknown_03007890
- ldr r3, [r2]
- ldrb r0, [r3, 0x3]
- movs r1, 0
- strh r0, [r7, 0x14]
- movs r0, 0x11
- strb r0, [r7, 0x5]
- strb r0, [r7, 0x4]
- strb r1, [r7, 0x10]
- ldrb r0, [r3, 0x3]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0800CAF4
- b _0800CC8A
-_0800CAF4:
- adds r1, r7, 0
- movs r3, 0x1
-_0800CAF8:
- ldrb r0, [r1, 0x10]
- adds r0, 0x1
- strb r0, [r1, 0x10]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _0800CB08
- b _0800CC8A
-_0800CB08:
- ldr r0, [r2]
- ldrb r0, [r0, 0x3]
- ldrb r4, [r7, 0x10]
- asrs r0, r4
- ands r0, r3
- cmp r0, 0
- beq _0800CAF8
- b _0800CC8A
- .pool
-_0800CB1C:
- cmp r6, 0
- bne _0800CB3A
- mov r0, sp
- bl rfu_CHILD_getConnectRecoveryStatus
- lsls r0, 16
- cmp r0, 0
- bne _0800CB3A
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _0800CB3A
- ldr r1, =gUnknown_03004140
- movs r0, 0x12
- strb r0, [r1, 0x4]
-_0800CB3A:
- ldr r2, =gUnknown_03004140
- ldrb r0, [r2, 0x10]
- lsls r0, 1
- adds r1, r2, 0
- adds r1, 0x34
- adds r1, r0, r1
- ldrh r0, [r1]
- cmp r0, 0
- bne _0800CB4E
- b _0800CC8A
-_0800CB4E:
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- beq _0800CB5A
- b _0800CC8A
-_0800CB5A:
- movs r0, 0x12
- strb r0, [r2, 0x4]
- b _0800CC8A
- .pool
-_0800CB64:
- cmp r6, 0
- beq _0800CB6A
- b _0800CC8A
-_0800CB6A:
- mov r0, sp
- bl rfu_CHILD_getConnectRecoveryStatus
- lsls r0, 16
- cmp r0, 0
- beq _0800CB78
- b _0800CC8A
-_0800CB78:
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800CB94
- ldr r1, =gUnknown_03004140
- movs r0, 0x13
- strb r0, [r1, 0x4]
- movs r0, 0x16
- strb r0, [r1, 0x5]
- movs r0, 0x32
- strh r0, [r1, 0x1E]
- b _0800CBA8
- .pool
-_0800CB94:
- ldr r4, =gUnknown_03004140
- strb r6, [r4, 0x5]
- strb r6, [r4, 0x4]
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- bl sub_800D334
- movs r0, 0x33
- strh r0, [r4, 0x1E]
-_0800CBA8:
- ldr r5, =gUnknown_03004140
- ldrb r0, [r5, 0x10]
- lsls r0, 1
- adds r1, r5, 0
- adds r1, 0x34
- adds r0, r1
- movs r1, 0
- movs r4, 0
- strh r4, [r0]
- adds r0, r5, 0
- adds r0, 0x30
- strb r1, [r0]
- strb r1, [r5, 0xA]
- ldrb r0, [r5, 0x1E]
- movs r1, 0x1
- bl sub_800D30C
- strh r4, [r5, 0x1E]
- b _0800CC8A
- .pool
-_0800CBD8:
- cmp r6, 0
- bne _0800CC8A
- ldr r5, =gUnknown_03004140
- ldrb r1, [r5, 0x5]
- adds r0, r1, 0
- cmp r0, 0x16
- bne _0800CC04
- ldrb r0, [r5, 0x11]
- strb r0, [r5, 0x4]
- ldrb r0, [r5, 0x12]
- strb r0, [r5, 0x5]
- ldrb r0, [r5, 0x2]
- movs r0, 0x1
- strb r0, [r5, 0x2]
- movs r0, 0x41
-_0800CBF6:
- movs r1, 0
- bl sub_800D30C
- b _0800CC8A
- .pool
-_0800CC04:
- cmp r0, 0xF
- bne _0800CC8A
- strb r1, [r5, 0x4]
- ldrb r0, [r5, 0x2]
- movs r4, 0x1
- strb r4, [r5, 0x2]
- movs r0, 0x41
- movs r1, 0
- bl sub_800D30C
- adds r1, r5, 0
- adds r1, 0x24
- ldrb r0, [r5, 0x10]
- lsls r4, r0
- ldrb r0, [r1]
- orrs r4, r0
- strb r4, [r1]
- ldrb r0, [r5, 0x10]
- lsls r0, 1
- adds r1, 0x4
- adds r0, r1
- ldrh r1, [r5, 0x26]
- movs r7, 0
- strh r1, [r0]
- ldrb r1, [r5, 0x10]
- movs r0, 0x4
- bl rfu_clearSlot
- mov r4, sp
- ldrb r0, [r5, 0x10]
- movs r1, 0xE
- bl rfu_NI_CHILD_setSendGameName
- strb r0, [r4]
- lsls r0, 24
- cmp r0, 0
- beq _0800CC8A
- strb r7, [r5, 0x5]
- strb r7, [r5, 0x4]
- bl sub_800D610
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- orrs r0, r1
- bl sub_800D334
- mov r0, sp
- ldrb r0, [r0]
- strh r0, [r5, 0x14]
- movs r0, 0x25
- movs r1, 0x1
- bl sub_800D30C
- b _0800CC8A
- .pool
-_0800CC78:
- cmp r6, 0
- bne _0800CC8A
- ldr r0, =gUnknown_03004140
- strb r6, [r0, 0x5]
- strb r6, [r0, 0x4]
- movs r0, 0x42
- movs r1, 0
- bl sub_800D30C
-_0800CC8A:
- ldr r1, =gUnknown_03004140
- movs r0, 0x1
- strb r0, [r1, 0xE]
- b _0800CCE6
- .pool
-_0800CC98:
- cmp r6, 0x3
- bne _0800CCE6
- ldrb r0, [r7, 0xF]
- cmp r0, 0
- beq _0800CCE6
- mov r3, r8
- cmp r3, 0x24
- beq _0800CCB0
- cmp r3, 0x26
- beq _0800CCB0
- cmp r3, 0x27
- bne _0800CCE6
-_0800CCB0:
- bl rfu_REQ_RFUStatus
- bl rfu_waitREQComplete
- mov r0, sp
- bl rfu_getRFUStatus
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800CCE6
- ldr r4, =gUnknown_03007890
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800CCE6
- bl rfu_getSTWIRecvBuffer
- ldr r1, [r4]
- ldrb r1, [r1, 0x2]
- strb r1, [r0, 0x4]
- movs r1, 0x1
- strb r1, [r0, 0x5]
- movs r0, 0x29
- bl sub_800C36C
- movs r6, 0
-_0800CCE6:
- mov r4, r8
- cmp r4, 0x26
- bne _0800CCEE
- b _0800CE02
-_0800CCEE:
- cmp r4, 0x26
- bgt _0800CD00
- cmp r4, 0x10
- bne _0800CCF8
- b _0800CE20
-_0800CCF8:
- b _0800CE3E
- .pool
-_0800CD00:
- mov r0, r8
- cmp r0, 0x30
- beq _0800CD0E
- cmp r0, 0x3D
- bne _0800CD0C
- b _0800CE20
-_0800CD0C:
- b _0800CE3E
-_0800CD0E:
- cmp r6, 0
- beq _0800CD14
- b _0800CE42
-_0800CD14:
- bl rfu_getSTWIRecvBuffer
- ldr r4, =gUnknown_03004140
- ldrb r0, [r0, 0x8]
- strh r0, [r4, 0x14]
- bl sub_800D358
- adds r2, r4, 0
- adds r2, 0x30
- ldrb r1, [r2]
- cmp r1, 0
- beq _0800CD6A
- ldrb r0, [r4, 0x14]
- adds r3, r1, 0
- bics r3, r0
- adds r0, r3, 0
- strb r0, [r2]
- movs r3, 0
- adds r7, r4, 0
- adds r1, r7, 0
- movs r5, 0x1
- adds r4, r1, 0
- adds r4, 0x34
- movs r2, 0
-_0800CD44:
- ldrh r0, [r1, 0x14]
- asrs r0, r3
- ands r0, r5
- cmp r0, 0
- beq _0800CD54
- lsls r0, r3, 1
- adds r0, r4
- strh r2, [r0]
-_0800CD54:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800CD44
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- bne _0800CD6A
- strb r0, [r1, 0x5]
- strb r0, [r1, 0x4]
-_0800CD6A:
- mov r3, sp
- ldr r1, =gUnknown_03004140
- ldrb r2, [r1]
- ldrb r0, [r1, 0x14]
- ands r0, r2
- strb r0, [r3]
- movs r3, 0
- adds r7, r1, 0
- ldr r2, =gUnknown_03007890
- mov r1, sp
- movs r5, 0x1
- adds r4, r7, 0
-_0800CD82:
- ldrb r0, [r1]
- asrs r0, r3
- ands r0, r5
- cmp r0, 0
- beq _0800CD96
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _0800CD96
- subs r0, 0x1
- strb r0, [r7, 0x1]
-_0800CD96:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800CD82
- ldrb r1, [r7, 0x14]
- ldrb r0, [r7]
- bics r0, r1
- strb r0, [r7]
- ldrb r1, [r7, 0x7]
- cmp r1, 0
- beq _0800CDE0
- ldr r0, [r2]
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _0800CDF2
- cmp r1, 0x8
- bne _0800CDCC
- ldrh r0, [r7, 0x1C]
- strh r0, [r7, 0x1A]
- movs r0, 0x6
- strb r0, [r7, 0x7]
- b _0800CDDE
- .pool
-_0800CDCC:
- ldrb r0, [r7, 0x4]
- subs r0, 0x6
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0800CDE0
- movs r0, 0x1
- strb r0, [r7, 0x7]
- movs r0, 0x5
-_0800CDDE:
- strb r0, [r7, 0x4]
-_0800CDE0:
- ldr r0, [r2]
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _0800CDF2
- ldrb r0, [r7, 0x4]
- cmp r0, 0
- bne _0800CDF2
- movs r0, 0xFF
- strb r0, [r7, 0x6]
-_0800CDF2:
- ldrb r0, [r7, 0xE]
- cmp r0, 0
- bne _0800CE3E
- movs r0, 0x40
- movs r1, 0x1
- bl sub_800D30C
- b _0800CE3E
-_0800CE02:
- bl sub_800D20C
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _0800CE3E
- movs r0, 0x50
- movs r1, 0
- bl sub_800D30C
- b _0800CE3E
- .pool
-_0800CE20:
- cmp r6, 0
- bne _0800CE42
- ldr r0, =gUnknown_03004140
- strb r6, [r0, 0xD]
- strb r6, [r0, 0x1]
- strb r6, [r0]
- movs r1, 0xFF
- strb r1, [r0, 0x6]
- bl sub_800D610
- mov r4, r8
- cmp r4, 0x3D
- bne _0800CE3E
- bl sub_800BFA0
-_0800CE3E:
- cmp r6, 0
- beq _0800CE92
-_0800CE42:
- ldr r7, =gUnknown_03004140
- mov r0, r8
- cmp r0, 0x1C
- bne _0800CE74
- cmp r6, 0
- beq _0800CE74
- ldrb r0, [r7, 0x7]
- cmp r0, 0x4
- bne _0800CE74
- ldr r2, =gUnknown_03007890
- ldr r1, [r2]
- movs r0, 0x1
- strb r0, [r1]
- ldr r1, [r2]
- movs r0, 0xF
- strb r0, [r1, 0x2]
- bl sub_800D334
- bl rfu_waitREQComplete
- b _0800CEA4
- .pool
-_0800CE74:
- movs r1, 0
- mov r3, r8
- strh r3, [r7, 0x14]
- strh r6, [r7, 0x16]
- ldrb r0, [r7, 0xE]
- cmp r0, 0
- beq _0800CE86
- strb r1, [r7, 0x5]
- strb r1, [r7, 0x4]
-_0800CE86:
- movs r0, 0xF0
- movs r1, 0x2
- bl sub_800D30C
- bl sub_800D610
-_0800CE92:
- mov r4, r8
- cmp r4, 0xFF
- bne _0800CEA4
- movs r0, 0xF2
- movs r1, 0
- bl sub_800D30C
- bl sub_800D610
-_0800CEA4:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_800C7B4
-
- thumb_func_start sub_800CEB0
-sub_800CEB0: @ 800CEB0
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r4, =gUnknown_03004140
- ldrb r7, [r4, 0xE]
- movs r0, 0
- strb r0, [r4, 0xE]
- movs r0, 0x1
- strb r0, [r4, 0xF]
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r5, [r0]
- cmp r5, 0
- bne _0800CEEC
- adds r0, r6, 0
- bl sub_800C36C
- ldrb r0, [r4, 0x2]
- cmp r0, 0x1
- beq _0800CF04
- bl sub_800D610
- strb r5, [r4, 0xF]
- strb r7, [r4, 0xE]
- b _0800CF28
- .pool
-_0800CEEC:
- mov r0, sp
- bl rfu_UNI_PARENT_getDRAC_ACK
- lsls r0, 16
- cmp r0, 0
- bne _0800CF04
- mov r1, sp
- ldrb r0, [r4, 0x3]
- ldrb r1, [r1]
- orrs r0, r1
- ldrb r1, [r4, 0x3]
- strb r0, [r4, 0x3]
-_0800CF04:
- ldr r4, =gUnknown_03004140
- ldr r1, [r4, 0x44]
- cmp r1, 0
- beq _0800CF20
- adds r0, r6, 0
- bl _call_via_r1
- bl rfu_waitREQComplete
- ldrb r0, [r4, 0x2]
- cmp r0, 0x2
- bne _0800CF20
- bl sub_800D610
-_0800CF20:
- ldr r1, =gUnknown_03004140
- movs r0, 0
- strb r0, [r1, 0xF]
- strb r7, [r1, 0xE]
-_0800CF28:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800CEB0
-
- thumb_func_start sub_800CF34
-sub_800CF34: @ 800CF34
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x4]
- subs r0, 0x5
- lsls r0, 24
- lsrs r0, 24
- adds r3, r1, 0
- cmp r0, 0x3
- bls _0800CF52
- b _0800D146
-_0800CF52:
- ldr r0, =gUnknown_03007890
- ldr r2, [r0]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r3, 0xC]
- adds r4, r1, 0
- eors r4, r0
- ands r4, r1
- ldrb r0, [r2, 0x7]
- bics r4, r0
- mov r8, r4
- strb r1, [r3, 0xC]
- cmp r4, 0
- beq _0800CF7A
- strh r4, [r3, 0x14]
- movs r0, 0x10
- movs r1, 0x1
- str r3, [sp, 0x4]
- bl sub_800D30C
- ldr r3, [sp, 0x4]
-_0800CF7A:
- movs r0, 0
- str r0, [sp]
- movs r6, 0
- adds r7, r3, 0
- movs r1, 0x24
- adds r1, r3
- mov r9, r1
-_0800CF88:
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r6
- lsrs r4, r0, 24
- movs r5, 0
- mov r0, r8
- ands r0, r4
- cmp r0, 0
- beq _0800CFDA
- lsls r1, r6, 1
- adds r0, r7, 0
- adds r0, 0x28
- adds r1, r0
- ldrh r0, [r7, 0x26]
- strh r0, [r1]
- mov r2, r9
- ldrb r1, [r2]
- adds r0, r4, 0
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- mov r10, r6
- b _0800D090
- .pool
-_0800CFC0:
- ldrb r1, [r7]
- adds r0, r4, 0
- orrs r0, r1
- strb r0, [r7]
- ldrb r0, [r7, 0x1]
- adds r0, 0x1
- strb r0, [r7, 0x1]
- ldr r0, [sp]
- orrs r0, r4
- str r0, [sp]
- movs r0, 0x1
- orrs r5, r0
- b _0800D024
-_0800CFDA:
- mov r1, r9
- ldrb r0, [r1]
- ands r0, r4
- adds r2, r6, 0x1
- mov r10, r2
- cmp r0, 0
- beq _0800D090
- ldr r0, =gUnknown_03007880
- lsls r1, r6, 2
- adds r1, r0
- ldr r1, [r1]
- ldrh r0, [r1, 0x34]
- cmp r0, 0x46
- bne _0800D040
- adds r0, r1, 0
- adds r0, 0x61
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800D058
- movs r5, 0x2
- ldr r3, [r3, 0x20]
- ldrh r2, [r3]
- ldr r0, =0x0000ffff
- cmp r2, r0
- beq _0800D024
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- lsls r1, r6, 5
- adds r0, r1
- ldrh r0, [r0, 0x18]
- ldr r1, =0x0000ffff
-_0800D018:
- cmp r0, r2
- beq _0800CFC0
- adds r3, 0x2
- ldrh r2, [r3]
- cmp r2, r1
- bne _0800D018
-_0800D024:
- movs r0, 0x1
- ands r0, r5
- cmp r0, 0
- bne _0800D058
- movs r0, 0x4
- orrs r5, r0
- b _0800D058
- .pool
-_0800D040:
- lsls r1, r6, 1
- adds r0, r3, 0
- adds r0, 0x28
- adds r1, r0
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- ldr r1, =0x0000ffff
- ands r0, r1
- cmp r0, 0
- bne _0800D058
- movs r5, 0x6
-_0800D058:
- movs r0, 0x2
- ands r0, r5
- cmp r0, 0
- beq _0800D07E
- mov r2, r9
- ldrb r0, [r2]
- bics r0, r4
- movs r2, 0
- mov r1, r9
- strb r0, [r1]
- lsls r0, r6, 1
- adds r1, r7, 0
- adds r1, 0x28
- adds r0, r1
- strh r2, [r0]
- movs r0, 0x8
- adds r1, r6, 0
- bl rfu_clearSlot
-_0800D07E:
- movs r0, 0x4
- ands r5, r0
- ldr r3, =gUnknown_03004140
- cmp r5, 0
- beq _0800D090
- ldrb r1, [r7, 0xD]
- adds r0, r4, 0
- orrs r0, r1
- strb r0, [r7, 0xD]
-_0800D090:
- mov r2, r10
- lsls r0, r2, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bhi _0800D09C
- b _0800CF88
-_0800D09C:
- ldr r4, [sp]
- cmp r4, 0
- beq _0800D0AE
- ldr r0, =gUnknown_03004140
- strh r4, [r0, 0x14]
- movs r0, 0x11
- movs r1, 0x1
- bl sub_800D30C
-_0800D0AE:
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0xD]
- cmp r0, 0
- beq _0800D0EA
- movs r5, 0x1
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- beq _0800D0CE
- ldrb r0, [r1, 0x3]
- ldrb r1, [r1]
- ands r0, r1
- cmp r0, r1
- beq _0800D0CE
- movs r5, 0
-_0800D0CE:
- cmp r5, 0
- beq _0800D0EA
- ldr r4, =gUnknown_03004140
- ldrb r0, [r4, 0xD]
- bl sub_800D334
- ldrb r0, [r4, 0xD]
- movs r1, 0
- strh r0, [r4, 0x14]
- strb r1, [r4, 0xD]
- movs r0, 0x12
- movs r1, 0x1
- bl sub_800D30C
-_0800D0EA:
- ldr r0, =gUnknown_03004140
- adds r1, r0, 0
- adds r1, 0x24
- ldrb r1, [r1]
- adds r3, r0, 0
- cmp r1, 0
- bne _0800D146
- ldrb r0, [r3, 0x4]
- cmp r0, 0x8
- bne _0800D146
- ldrb r0, [r3, 0x7]
- cmp r0, 0
- bne _0800D120
- strb r0, [r3, 0x5]
- strb r0, [r3, 0x4]
- movs r0, 0x14
- movs r1, 0
- bl sub_800D30C
- b _0800D146
- .pool
-_0800D120:
- cmp r0, 0x2
- bne _0800D12C
- movs r0, 0x3
- strb r0, [r3, 0x7]
- movs r0, 0x9
- b _0800D132
-_0800D12C:
- movs r0, 0x1
- strb r0, [r3, 0x7]
- movs r0, 0x5
-_0800D132:
- strb r0, [r3, 0x4]
- ldrb r0, [r3]
- cmp r0, 0
- beq _0800D146
- movs r0, 0
- strh r0, [r3, 0x1A]
- movs r0, 0x8
- strb r0, [r3, 0x7]
- movs r0, 0x5
- strb r0, [r3, 0x4]
-_0800D146:
- 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_800CF34
-
- thumb_func_start sub_800D158
-sub_800D158: @ 800D158
- push {r4-r6,lr}
- ldr r1, =0x04000208
- ldrh r0, [r1]
- adds r6, r0, 0
- movs r0, 0
- strh r0, [r1]
- ldr r4, =gUnknown_03004140
- ldrb r0, [r4, 0x4]
- cmp r0, 0xF
- bne _0800D1BC
- ldrb r1, [r4, 0x10]
- lsls r1, 1
- adds r5, r4, 0
- adds r5, 0x28
- adds r1, r5
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- beq _0800D192
- ldr r1, =gUnknown_03007880
- ldrb r0, [r4, 0x10]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0x27
- bne _0800D1BC
-_0800D192:
- bl sub_800D630
- movs r0, 0x18
- strb r0, [r4, 0x4]
- ldrb r1, [r4, 0x10]
- movs r0, 0x4
- bl rfu_clearSlot
- adds r2, r4, 0
- adds r2, 0x24
- movs r1, 0x1
- ldrb r0, [r4, 0x10]
- lsls r1, r0
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldrb r0, [r4, 0x10]
- lsls r0, 1
- adds r0, r5
- movs r1, 0
- strh r1, [r0]
-_0800D1BC:
- ldr r0, =0x04000208
- strh r6, [r0]
- ldr r5, =gUnknown_03004140
- ldrb r0, [r5, 0x4]
- cmp r0, 0x18
- bne _0800D1F6
- ldrb r0, [r5, 0x2]
- cmp r0, 0x1
- bne _0800D1D2
- bl sub_800D630
-_0800D1D2:
- ldrb r0, [r5, 0x2]
- adds r4, r0, 0
- cmp r4, 0
- bne _0800D1F6
- strb r4, [r5, 0x5]
- strb r4, [r5, 0x4]
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- orrs r0, r1
- bl sub_800D334
- strh r4, [r5, 0x14]
- movs r0, 0x25
- movs r1, 0x1
- bl sub_800D30C
-_0800D1F6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D158
-
- thumb_func_start sub_800D20C
-sub_800D20C: @ 800D20C
- push {r4,r5,lr}
- ldr r5, =gUnknown_03004140
- ldrb r0, [r5, 0x4]
- cmp r0, 0xF
- bne _0800D258
- ldr r1, =gUnknown_03007880
- ldrb r2, [r5, 0x10]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0x26
- bne _0800D258
- movs r4, 0
- strb r4, [r5, 0x5]
- strb r4, [r5, 0x4]
- movs r0, 0x4
- adds r1, r2, 0
- bl rfu_clearSlot
- adds r2, r5, 0
- adds r2, 0x24
- movs r1, 0x1
- ldrb r0, [r5, 0x10]
- lsls r1, r0
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- ldrb r0, [r5, 0x10]
- lsls r0, 1
- adds r1, r5, 0
- adds r1, 0x28
- adds r0, r1
- strh r4, [r0]
- movs r0, 0x24
- movs r1, 0
- bl sub_800D30C
-_0800D258:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D20C
-
- thumb_func_start sub_800D268
-sub_800D268: @ 800D268
- push {lr}
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x6]
- cmp r0, 0
- bne _0800D28C
- ldrb r0, [r1, 0xA]
- cmp r0, 0x1
- bne _0800D28C
- ldrb r0, [r1, 0x4]
- strb r0, [r1, 0x11]
- ldrb r0, [r1, 0x5]
- strb r0, [r1, 0x12]
- movs r0, 0x10
- strb r0, [r1, 0x4]
- movs r0, 0x11
- strb r0, [r1, 0x5]
- movs r0, 0x2
- strb r0, [r1, 0xA]
-_0800D28C:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D268
-
- thumb_func_start sub_800D294
-sub_800D294: @ 800D294
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r6, 0
- movs r5, 0
- ldr r1, =gUnknown_03007890
- ldr r0, [r1]
- ldrb r0, [r0, 0x8]
- cmp r6, r0
- bcs _0800D2F0
- mov r8, r0
- ldr r0, =gUnknown_03004140
- mov r10, r0
- mov r9, r1
-_0800D2B4:
- mov r1, r10
- ldr r3, [r1, 0x20]
- ldrh r2, [r3]
- adds r0, r5, 0x1
- mov r12, r0
- ldr r1, =0x0000ffff
- cmp r2, r1
- beq _0800D2E6
- mov r1, r9
- ldr r0, [r1]
- lsls r1, r5, 5
- adds r0, r1
- ldrh r4, [r0, 0x18]
- ldr r7, =0x0000ffff
- movs r1, 0x1
- lsls r1, r5
-_0800D2D4:
- cmp r4, r2
- bne _0800D2DE
- orrs r6, r1
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0800D2DE:
- adds r3, 0x2
- ldrh r2, [r3]
- cmp r2, r7
- bne _0800D2D4
-_0800D2E6:
- mov r1, r12
- lsls r0, r1, 24
- lsrs r5, r0, 24
- cmp r5, r8
- bcc _0800D2B4
-_0800D2F0:
- adds r0, r6, 0
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800D294
-
- thumb_func_start sub_800D30C
-sub_800D30C: @ 800D30C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r4, =gUnknown_03004140
- ldr r2, [r4, 0x40]
- cmp r2, 0
- beq _0800D322
- bl _call_via_r2
-_0800D322:
- movs r0, 0
- strh r0, [r4, 0x16]
- strh r0, [r4, 0x14]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D30C
-
- thumb_func_start sub_800D334
-sub_800D334: @ 800D334
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, =gUnknown_03004140
- ldrb r5, [r4, 0xE]
- movs r1, 0x1
- strb r1, [r4, 0xE]
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- strb r5, [r4, 0xE]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D334
-
- thumb_func_start sub_800D358
-sub_800D358: @ 800D358
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _0800D3A0
- movs r4, 0
-_0800D36A:
- ldr r1, =gUnknown_03007880
- lsls r0, r4, 2
- adds r0, r1
- ldr r2, [r0]
- ldrh r0, [r2]
- movs r3, 0x80
- lsls r3, 8
- adds r1, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800D396
- ldrb r1, [r2, 0x1A]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _0800D396
- adds r2, r1, 0
- bics r2, r5
- movs r0, 0x20
- adds r1, r4, 0
- bl rfu_changeSendTarget
-_0800D396:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800D36A
-_0800D3A0:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x5]
- cmp r0, 0
- beq _0800D3DE
- movs r4, 0
-_0800D3AC:
- ldr r1, =gUnknown_03007880
- lsls r0, r4, 2
- adds r0, r1
- ldr r2, [r0]
- ldrh r0, [r2, 0x34]
- movs r3, 0x80
- lsls r3, 8
- adds r1, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800D3D4
- adds r0, r2, 0
- adds r0, 0x4E
- ldrb r0, [r0]
- ands r0, r5
- cmp r0, 0
- beq _0800D3D4
- adds r0, r4, 0
- bl rfu_NI_stopReceivingData
-_0800D3D4:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800D3AC
-_0800D3DE:
- ldr r0, =gUnknown_03007890
- ldr r3, [r0]
- ldrb r2, [r3, 0x6]
- cmp r2, 0
- beq _0800D41C
- mvns r1, r5
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r3, 0x6]
- movs r4, 0
- ldr r7, =gUnknown_03007870
- ldr r6, =0x00008024
-_0800D3F6:
- lsls r0, r4, 2
- adds r0, r7
- ldr r2, [r0]
- ldrh r0, [r2]
- cmp r0, r6
- bne _0800D412
- ldrb r3, [r2, 0x3]
- adds r0, r5, 0
- ands r0, r3
- cmp r0, 0
- beq _0800D412
- adds r0, r1, 0
- ands r0, r3
- strb r0, [r2, 0x3]
-_0800D412:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800D3F6
-_0800D41C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D358
-
- thumb_func_start sub_800D434
-sub_800D434: @ 800D434
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, =gUnknown_03004140
- ldrh r0, [r0, 0x18]
- cmp r0, 0
- beq _0800D510
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _0800D4D4
- movs r6, 0
-_0800D454:
- ldr r3, =gUnknown_03007880
- lsls r2, r6, 2
- adds r0, r2, r3
- ldr r0, [r0]
- ldrh r1, [r0]
- movs r4, 0x80
- lsls r4, 8
- adds r0, r4, 0
- ands r1, r0
- adds r7, r2, 0
- adds r0, r6, 0x1
- mov r9, r0
- cmp r1, 0
- beq _0800D4CA
- movs r5, 0
- movs r4, 0
- movs r1, 0x1
- mov r8, r1
- mov r10, r3
-_0800D47A:
- adds r0, r7, r3
- ldr r0, [r0]
- ldrb r0, [r0, 0x1A]
- asrs r0, r4
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _0800D4A4
- lsls r0, r4, 2
- adds r0, r3
- ldr r0, [r0]
- ldr r1, =gUnknown_03004140
- ldrh r0, [r0, 0x2]
- ldrh r1, [r1, 0x18]
- cmp r0, r1
- bls _0800D4A4
- mov r0, r8
- lsls r0, r4
- orrs r5, r0
- lsls r0, r5, 24
- lsrs r5, r0, 24
-_0800D4A4:
- cmp r5, 0
- beq _0800D4C0
- mov r1, r10
- adds r0, r7, r1
- ldr r0, [r0]
- ldrb r0, [r0, 0x1A]
- adds r2, r5, 0
- eors r2, r0
- movs r0, 0x20
- adds r1, r6, 0
- str r3, [sp]
- bl rfu_changeSendTarget
- ldr r3, [sp]
-_0800D4C0:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800D47A
-_0800D4CA:
- mov r3, r9
- lsls r0, r3, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _0800D454
-_0800D4D4:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x5]
- cmp r0, 0
- beq _0800D510
- movs r6, 0
-_0800D4E0:
- ldr r1, =gUnknown_03007880
- lsls r0, r6, 2
- adds r0, r1
- ldr r2, [r0]
- ldrh r0, [r2, 0x34]
- movs r4, 0x80
- lsls r4, 8
- adds r1, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _0800D506
- ldr r1, =gUnknown_03004140
- ldrh r0, [r2, 0x36]
- ldrh r1, [r1, 0x18]
- cmp r0, r1
- bls _0800D506
- adds r0, r6, 0
- bl rfu_NI_stopReceivingData
-_0800D506:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _0800D4E0
-_0800D510:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D434
-
- thumb_func_start sub_800D52C
-sub_800D52C: @ 800D52C
- push {lr}
- ldr r1, =gUnknown_03004140
- str r0, [r1, 0x44]
- ldr r0, =sub_800CEB0
- bl rfu_setMSCCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D52C
-
- thumb_func_start sub_800D544
-sub_800D544: @ 800D544
- ldr r1, =gUnknown_03004140
- str r0, [r1, 0x40]
- bx lr
- .pool
- thumb_func_end sub_800D544
-
- thumb_func_start sub_800D550
-sub_800D550: @ 800D550
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x9]
- adds r3, r0, 0
- cmp r1, 0
- beq _0800D578
- cmp r4, 0
- bne _0800D578
- adds r0, 0x30
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800D578
- movs r0, 0x5
- b _0800D588
- .pool
-_0800D578:
- ldr r2, =0x04000208
- ldrh r1, [r2]
- movs r0, 0
- strh r0, [r2]
- strb r4, [r3, 0x9]
- strh r5, [r3, 0x32]
- strh r1, [r2]
- movs r0, 0
-_0800D588:
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800D550
-
- thumb_func_start sub_800D594
-sub_800D594: @ 800D594
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r1, [r0, 0x4]
- ldrb r0, [r0, 0x5]
- orrs r0, r1
- cmp r0, 0
- bne _0800D5B8
- ldr r0, =gUnknown_03004140
- strh r2, [r0, 0x18]
- movs r0, 0
- b _0800D5C8
- .pool
-_0800D5B8:
- ldr r1, =gUnknown_03004140
- movs r0, 0x6
- strh r0, [r1, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x6
-_0800D5C8:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800D594
-
- thumb_func_start sub_800D5D0
-sub_800D5D0: @ 800D5D0
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x4]
- subs r0, 0x9
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _0800D5FC
- movs r0, 0x7
- strh r0, [r1, 0x14]
- movs r0, 0xF3
- movs r1, 0x1
- bl sub_800D30C
- movs r0, 0x7
- b _0800D60A
- .pool
-_0800D5FC:
- cmp r2, 0
- beq _0800D606
- movs r0, 0x1
- strb r0, [r1, 0xB]
- b _0800D608
-_0800D606:
- strb r3, [r1, 0xB]
-_0800D608:
- movs r0, 0
-_0800D60A:
- pop {r1}
- bx r1
- thumb_func_end sub_800D5D0
-
- thumb_func_start sub_800D610
-sub_800D610: @ 800D610
- push {lr}
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- beq _0800D628
- ldrb r0, [r1, 0x2]
- movs r0, 0
- strb r0, [r1, 0x2]
- movs r0, 0x45
- movs r1, 0
- bl sub_800D30C
-_0800D628:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D610
-
- thumb_func_start sub_800D630
-sub_800D630: @ 800D630
- push {lr}
- ldr r1, =gUnknown_03004140
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- bne _0800D648
- movs r0, 0x45
- movs r1, 0
- bl sub_800D30C
- b _0800D654
- .pool
-_0800D648:
- ldrb r0, [r1, 0x2]
- cmp r0, 0x1
- bne _0800D654
- ldrb r0, [r1, 0x2]
- movs r0, 0x2
- strb r0, [r1, 0x2]
-_0800D654:
- pop {r0}
- bx r0
- thumb_func_end sub_800D630
-
- thumb_func_start sub_800D658
-sub_800D658: @ 800D658
- push {lr}
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x7]
- adds r2, r0, 0
- cmp r1, 0
- beq _0800D6C2
- ldrb r0, [r2, 0x4]
- subs r0, 0x5
- cmp r0, 0x6
- bhi _0800D6C2
- lsls r0, 2
- ldr r1, =_0800D680
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800D680:
- .4byte _0800D69C
- .4byte _0800D6A4
- .4byte _0800D6AE
- .4byte _0800D6AE
- .4byte _0800D6B4
- .4byte _0800D6B4
- .4byte _0800D6BA
-_0800D69C:
- movs r0, 0x3
- strb r0, [r2, 0x7]
- movs r0, 0x9
- b _0800D6C0
-_0800D6A4:
- movs r0, 0x2
- strb r0, [r2, 0x7]
- movs r0, 0x1
- strh r0, [r2, 0x1A]
- b _0800D6C2
-_0800D6AE:
- movs r0, 0x2
- strb r0, [r2, 0x7]
- b _0800D6C2
-_0800D6B4:
- movs r0, 0x28
- strh r0, [r2, 0x1A]
- b _0800D6C2
-_0800D6BA:
- movs r0, 0x28
- strh r0, [r2, 0x1A]
- movs r0, 0xA
-_0800D6C0:
- strb r0, [r2, 0x4]
-_0800D6C2:
- pop {r0}
- bx r0
- thumb_func_end sub_800D658
-
- thumb_func_start sub_800D6C8
-sub_800D6C8: @ 800D6C8
- push {r4,r5,lr}
- adds r3, r0, 0
- movs r0, 0
- movs r4, 0
- movs r5, 0x46
-_0800D6D2:
- adds r2, r0, 0x1
- movs r1, 0x45
- muls r0, r5
- adds r0, r3
- adds r0, 0x45
-_0800D6DC:
- strb r4, [r0]
- subs r0, 0x1
- subs r1, 0x1
- cmp r1, 0
- bge _0800D6DC
- adds r0, r2, 0
- cmp r0, 0x1F
- ble _0800D6D2
- movs r1, 0
- ldr r2, =0x000008c1
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- movs r2, 0x8C
- lsls r2, 4
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- ldr r2, =0x000008c2
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- ldr r2, =0x000008c3
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D6C8
-
- thumb_func_start sub_800D724
-sub_800D724: @ 800D724
- push {r4,lr}
- adds r3, r0, 0
- movs r1, 0
- movs r4, 0
-_0800D72C:
- lsls r0, r1, 3
- adds r2, r1, 0x1
- subs r0, r1
- movs r1, 0xD
- lsls r0, 1
- adds r0, r3
- adds r0, 0xD
-_0800D73A:
- strb r4, [r0]
- subs r0, 0x1
- subs r1, 0x1
- cmp r1, 0
- bge _0800D73A
- adds r1, r2, 0
- cmp r1, 0x27
- ble _0800D72C
- movs r1, 0
- ldr r2, =0x00000231
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- movs r2, 0x8C
- lsls r2, 2
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- ldr r2, =0x00000232
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- ldr r2, =0x00000233
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D724
-
- thumb_func_start sub_800D780
-sub_800D780: @ 800D780
- push {r4,lr}
- adds r3, r0, 0
- movs r1, 0
- movs r4, 0
-_0800D788:
- lsls r0, r1, 8
- adds r2, r1, 0x1
- movs r1, 0xFF
- adds r0, r3
- adds r0, 0xFF
-_0800D792:
- strb r4, [r0]
- subs r0, 0x1
- subs r1, 0x1
- cmp r1, 0
- bge _0800D792
- adds r1, r2, 0
- cmp r1, 0x1
- ble _0800D788
- movs r1, 0
- ldr r2, =0x00000201
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- movs r2, 0x80
- lsls r2, 2
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- ldr r2, =0x00000202
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- ldr r2, =0x00000203
- adds r0, r3, r2
- ldrb r2, [r0]
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D780
-
- thumb_func_start sub_800D7D8
-sub_800D7D8: @ 800D7D8
- push {r4-r7,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- ldr r1, =0x000008c2
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0x1F
- bhi _0800D874
- ldr r0, =0x04000208
- ldrh r1, [r0]
- adds r7, r1, 0
- movs r1, 0
- strh r1, [r0]
- movs r5, 0
- movs r2, 0
-_0800D7F6:
- adds r1, r4, r2
- ldrb r0, [r1]
- cmp r0, 0
- bne _0800D80A
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0800D80A
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_0800D80A:
- adds r2, 0xE
- cmp r2, 0x45
- ble _0800D7F6
- cmp r5, 0x5
- beq _0800D866
- movs r2, 0
- movs r0, 0x8C
- lsls r0, 4
- adds r5, r3, r0
- movs r6, 0x46
-_0800D81E:
- ldrb r0, [r5]
- adds r1, r0, 0
- muls r1, r6
- adds r1, r2, r1
- adds r1, r3, r1
- adds r0, r4, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0x45
- ble _0800D81E
- movs r0, 0x8C
- lsls r0, 4
- adds r1, r3, r0
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- ldrb r2, [r1]
- movs r0, 0x1F
- ands r0, r2
- ldrb r2, [r1]
- strb r0, [r1]
- ldr r0, =0x000008c2
- adds r1, r3, r0
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- movs r1, 0
- adds r0, r4, 0
- adds r0, 0x45
-_0800D85E:
- strb r1, [r0]
- subs r0, 0x1
- cmp r0, r4
- bge _0800D85E
-_0800D866:
- ldr r0, =0x04000208
- strh r7, [r0]
- b _0800D87E
- .pool
-_0800D874:
- ldr r1, =0x000008c3
- adds r0, r3, r1
- ldrb r1, [r0]
- movs r1, 0x1
- strb r1, [r0]
-_0800D87E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D7D8
-
- thumb_func_start sub_800D888
-sub_800D888: @ 800D888
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- ldr r1, =0x00000232
- adds r0, r6, r1
- ldrb r0, [r0]
- cmp r0, 0x27
- bhi _0800D920
- ldr r1, =0x04000208
- ldrh r0, [r1]
- adds r7, r0, 0
- movs r0, 0
- strh r0, [r1]
- movs r2, 0
- ldrb r0, [r5]
- cmp r0, 0
- bne _0800D8B8
-_0800D8AA:
- adds r2, 0x1
- cmp r2, 0xD
- bgt _0800D8B8
- adds r0, r5, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800D8AA
-_0800D8B8:
- cmp r2, 0xE
- beq _0800D910
- movs r2, 0
- movs r0, 0x8C
- lsls r0, 2
- adds r3, r6, r0
-_0800D8C4:
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 1
- adds r0, r2, r0
- adds r0, r6, r0
- adds r1, r5, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0xD
- ble _0800D8C4
- movs r1, 0x8C
- lsls r1, 2
- adds r4, r6, r1
- ldrb r0, [r4]
- adds r0, 0x1
- ldrb r1, [r4]
- strb r0, [r4]
- ldrb r0, [r4]
- movs r1, 0x28
- bl __umodsi3
- ldrb r1, [r4]
- strb r0, [r4]
- ldr r0, =0x00000232
- adds r1, r6, r0
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- movs r1, 0
- adds r0, r5, 0
- adds r0, 0xD
-_0800D908:
- strb r1, [r0]
- subs r0, 0x1
- cmp r0, r5
- bge _0800D908
-_0800D910:
- ldr r0, =0x04000208
- strh r7, [r0]
- b _0800D92A
- .pool
-_0800D920:
- ldr r1, =0x00000233
- adds r0, r6, r1
- ldrb r1, [r0]
- movs r1, 0x1
- strb r1, [r0]
-_0800D92A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800D888
-
- thumb_func_start sub_800D934
-sub_800D934: @ 800D934
- push {r4-r7,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- ldr r1, =0x04000208
- ldrh r0, [r1]
- mov r12, r0
- movs r0, 0
- strh r0, [r1]
- movs r1, 0x8C
- lsls r1, 4
- adds r0, r3, r1
- ldr r7, =0x000008c1
- adds r5, r3, r7
- ldrb r1, [r0]
- ldrb r0, [r5]
- cmp r1, r0
- beq _0800D960
- ldr r1, =0x000008c3
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800D984
-_0800D960:
- movs r1, 0
- adds r0, r4, 0
- adds r0, 0x45
-_0800D966:
- strb r1, [r0]
- subs r0, 0x1
- cmp r0, r4
- bge _0800D966
- ldr r0, =0x04000208
- mov r7, r12
- strh r7, [r0]
- movs r0, 0
- b _0800D9CA
- .pool
-_0800D984:
- movs r2, 0
- movs r6, 0x46
-_0800D988:
- adds r1, r4, r2
- ldrb r0, [r5]
- adds r7, r0, 0
- muls r7, r6
- adds r0, r7, 0
- adds r0, r2, r0
- adds r0, r3, r0
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, 0x45
- ble _0800D988
- ldr r0, =0x000008c1
- adds r1, r3, r0
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- ldrb r2, [r1]
- movs r0, 0x1F
- ands r0, r2
- ldrb r2, [r1]
- strb r0, [r1]
- ldr r7, =0x000008c2
- adds r1, r3, r7
- ldrb r0, [r1]
- subs r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- ldr r0, =0x04000208
- mov r1, r12
- strh r1, [r0]
- movs r0, 0x1
-_0800D9CA:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800D934
-
- thumb_func_start sub_800D9DC
-sub_800D9DC: @ 800D9DC
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- movs r1, 0x8C
- lsls r1, 2
- adds r0, r5, r1
- adds r1, 0x1
- adds r4, r5, r1
- ldrb r1, [r0]
- ldrb r0, [r4]
- cmp r1, r0
- beq _0800DA00
- ldr r1, =0x00000233
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r2, r0, 0
- cmp r2, 0
- beq _0800DA08
-_0800DA00:
- movs r0, 0
- b _0800DA54
- .pool
-_0800DA08:
- ldr r1, =0x04000208
- ldrh r0, [r1]
- adds r7, r0, 0
- strh r2, [r1]
- movs r3, 0
-_0800DA12:
- adds r2, r6, r3
- ldrb r1, [r4]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 1
- adds r0, r3, r0
- adds r0, r5, r0
- ldrb r0, [r0]
- strb r0, [r2]
- adds r3, 0x1
- cmp r3, 0xD
- ble _0800DA12
- ldr r0, =0x00000231
- adds r4, r5, r0
- ldrb r0, [r4]
- adds r0, 0x1
- ldrb r1, [r4]
- strb r0, [r4]
- ldrb r0, [r4]
- movs r1, 0x28
- bl __umodsi3
- ldrb r1, [r4]
- strb r0, [r4]
- ldr r0, =0x00000232
- adds r1, r5, r0
- ldrb r0, [r1]
- subs r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- ldr r0, =0x04000208
- strh r7, [r0]
- movs r0, 0x1
-_0800DA54:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800D9DC
-
- thumb_func_start sub_800DA68
-sub_800DA68: @ 800DA68
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _0800DA7E
- adds r0, r2, 0
- movs r1, 0
- bl sub_800DAC8
- b _0800DAC0
-_0800DA7E:
- movs r3, 0
-_0800DA80:
- ldrb r1, [r2, 0x1C]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 1
- adds r0, r3, r0
- adds r0, r2, r0
- adds r1, r4, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r3, 0x1
- cmp r3, 0xD
- ble _0800DA80
- ldrb r0, [r2, 0x1C]
- adds r0, 0x1
- ldrb r1, [r2, 0x1C]
- strb r0, [r2, 0x1C]
- ldrb r1, [r2, 0x1C]
- movs r0, 0x1
- ands r0, r1
- ldrb r1, [r2, 0x1C]
- strb r0, [r2, 0x1C]
- ldrb r0, [r2, 0x1E]
- cmp r0, 0x1
- bhi _0800DABA
- ldrb r0, [r2, 0x1E]
- adds r0, 0x1
- ldrb r1, [r2, 0x1E]
- strb r0, [r2, 0x1E]
- b _0800DAC0
-_0800DABA:
- ldrb r0, [r2, 0x1C]
- ldrb r1, [r2, 0x1D]
- strb r0, [r2, 0x1D]
-_0800DAC0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_800DA68
-
- thumb_func_start sub_800DAC8
-sub_800DAC8: @ 800DAC8
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- ldrb r0, [r3, 0x1E]
- cmp r0, 0
- bne _0800DAD8
- movs r0, 0
- b _0800DB12
-_0800DAD8:
- cmp r5, 0
- beq _0800DAF6
- movs r4, 0
-_0800DADE:
- adds r2, r5, r4
- ldrb r1, [r3, 0x1D]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 1
- adds r0, r4, r0
- adds r0, r3, r0
- ldrb r0, [r0]
- strb r0, [r2]
- adds r4, 0x1
- cmp r4, 0xD
- ble _0800DADE
-_0800DAF6:
- ldrb r0, [r3, 0x1D]
- adds r0, 0x1
- ldrb r1, [r3, 0x1D]
- strb r0, [r3, 0x1D]
- ldrb r1, [r3, 0x1D]
- movs r0, 0x1
- ands r0, r1
- ldrb r1, [r3, 0x1D]
- strb r0, [r3, 0x1D]
- ldrb r0, [r3, 0x1E]
- subs r0, 0x1
- ldrb r1, [r3, 0x1E]
- strb r0, [r3, 0x1E]
- movs r0, 0x1
-_0800DB12:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_800DAC8
-
- thumb_func_start sub_800DB18
-sub_800DB18: @ 800DB18
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- ldr r1, =0x00000202
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _0800DB70
- movs r2, 0
- movs r0, 0x80
- lsls r0, 2
- adds r4, r3, r0
-_0800DB30:
- ldrb r0, [r4]
- lsls r0, 8
- adds r0, r2, r0
- adds r0, r3, r0
- adds r1, r5, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0xFF
- ble _0800DB30
- movs r0, 0x80
- lsls r0, 2
- adds r1, r3, r0
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- ldrb r2, [r1]
- movs r0, 0x1
- ands r0, r2
- ldrb r2, [r1]
- strb r0, [r1]
- ldr r0, =0x00000202
- adds r1, r3, r0
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- b _0800DB7A
- .pool
-_0800DB70:
- ldr r1, =0x00000203
- adds r0, r3, r1
- ldrb r1, [r0]
- movs r1, 0x1
- strb r1, [r0]
-_0800DB7A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800DB18
-
- thumb_func_start sub_800DB84
-sub_800DB84: @ 800DB84
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- movs r1, 0x80
- lsls r1, 2
- adds r0, r3, r1
- adds r1, 0x1
- adds r4, r3, r1
- ldrb r1, [r0]
- ldrb r0, [r4]
- cmp r1, r0
- beq _0800DBA6
- ldr r1, =0x00000203
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800DBB0
-_0800DBA6:
- movs r0, 0
- b _0800DBEA
- .pool
-_0800DBB0:
- movs r2, 0
-_0800DBB2:
- adds r0, r5, r2
- ldrb r1, [r4]
- lsls r1, 8
- adds r1, r2, r1
- adds r1, r3, r1
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0xFF
- ble _0800DBB2
- ldr r0, =0x00000201
- adds r1, r3, r0
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- ldrb r2, [r1]
- movs r0, 0x1
- ands r0, r2
- ldrb r2, [r1]
- strb r0, [r1]
- ldr r0, =0x00000202
- adds r1, r3, r0
- ldrb r0, [r1]
- subs r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- movs r0, 0x1
-_0800DBEA:
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800DB84
-
- thumb_func_start sub_800DBF8
-sub_800DBF8: @ 800DBF8
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r1, 0
- movs r5, 0
- cmp r1, 0x1
- beq _0800DC36
- cmp r1, 0x1
- bgt _0800DC12
- cmp r1, 0
- beq _0800DC1C
- b _0800DCAA
-_0800DC12:
- cmp r0, 0x2
- beq _0800DC56
- cmp r0, 0x3
- beq _0800DC76
- b _0800DCAA
-_0800DC1C:
- movs r4, 0
-_0800DC1E:
- adds r0, r6, r4
- adds r1, r4, 0x1
- strb r1, [r0]
- lsls r0, r5, 16
- asrs r0, 16
- adds r0, r1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, r1, 0
- cmp r4, 0xC7
- ble _0800DC1E
- b _0800DC70
-_0800DC36:
- movs r4, 0
- adds r2, r6, 0
- adds r2, 0xC8
-_0800DC3C:
- adds r0, r6, r4
- adds r1, r4, 0x1
- strb r1, [r0]
- lsls r0, r5, 16
- asrs r0, 16
- adds r0, r1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, r1, 0
- cmp r4, 0x63
- ble _0800DC3C
- strh r5, [r2]
- b _0800DCAA
-_0800DC56:
- movs r4, 0
-_0800DC58:
- bl Random
- lsls r0, 24
- lsrs r0, 24
- adds r1, r6, r4
- strb r0, [r1]
- adds r0, r5, r0
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, 0x1
- cmp r4, 0xC7
- ble _0800DC58
-_0800DC70:
- adds r0, r6, r4
- strh r5, [r0]
- b _0800DCAA
-_0800DC76:
- movs r4, 0
- ldr r3, =gUnknown_03000D74
- ldrb r1, [r3]
- ldrb r0, [r3]
- adds r7, r0, 0x1
- adds r2, r1, 0x1
- movs r0, 0xFF
- mov r12, r0
-_0800DC86:
- adds r0, r6, r4
- adds r1, r4, 0x1
- strb r2, [r0]
- adds r0, r4, r7
- mov r4, r12
- ands r0, r4
- adds r0, r5, r0
- lsls r0, 16
- lsrs r5, r0, 16
- adds r2, 0x1
- adds r4, r1, 0
- cmp r1, 0xC7
- ble _0800DC86
- adds r0, r6, r1
- strh r5, [r0]
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
-_0800DCAA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800DBF8
-
- thumb_func_start sub_800DCB4
-sub_800DCB4: @ 800DCB4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r3, 0
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0800DCD8
- ldr r5, =gUnknown_082ED470
- adds r2, r1, 0
-_0800DCC4:
- adds r1, r4, r3
- ldrb r0, [r2]
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- adds r3, 0x1
- ldrb r0, [r2]
- cmp r0, 0xFF
- bne _0800DCC4
-_0800DCD8:
- adds r1, r4, r3
- movs r0, 0
- strb r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800DCB4
-
- thumb_func_start sub_800DCE8
-sub_800DCE8: @ 800DCE8
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r3, 0
- ldrb r0, [r1]
- cmp r0, 0
- beq _0800DD0C
- ldr r5, =gUnknown_082ED370
- adds r2, r1, 0
-_0800DCF8:
- adds r1, r4, r3
- ldrb r0, [r2]
- adds r0, r5
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- adds r3, 0x1
- ldrb r0, [r2]
- cmp r0, 0
- bne _0800DCF8
-_0800DD0C:
- adds r1, r4, r3
- movs r0, 0xFF
- strb r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800DCE8
-
- thumb_func_start sub_800DD1C
-sub_800DD1C: @ 800DD1C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- ldr r0, =gUnknown_03007890
- ldr r4, [r0]
- ldrb r2, [r4, 0x2]
- ldrb r1, [r4]
- adds r7, r0, 0
- cmp r1, 0x1
- bne _0800DD72
- movs r3, 0
- ands r1, r2
- cmp r1, 0
- beq _0800DD4E
- cmp r5, 0x1
- bne _0800DD48
- ldrb r0, [r4, 0xA]
- b _0800DD8C
- .pool
-_0800DD48:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0800DD4E:
- lsrs r2, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bhi _0800DD8A
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _0800DD4E
- adds r0, r6, 0x1
- cmp r5, r0
- bne _0800DD48
-_0800DD68:
- ldr r0, [r7]
- adds r0, 0xA
- adds r0, r3
- ldrb r0, [r0]
- b _0800DD8C
-_0800DD72:
- movs r3, 0
- movs r1, 0x1
-_0800DD76:
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0800DD68
- lsrs r2, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800DD76
-_0800DD8A:
- movs r0, 0
-_0800DD8C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800DD1C
-
- thumb_func_start sub_800DD94
-sub_800DD94: @ 800DD94
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- movs r4, 0
- ldr r0, =gSaveBlock2Ptr
- mov r8, r0
- adds r6, r7, 0x2
- ldr r0, [r0]
- adds r5, r0, 0
- adds r5, 0xA
-_0800DDB2:
- adds r0, r6, r4
- adds r1, r5, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x1
- ble _0800DDB2
- movs r4, 0
- lsls r2, 7
- mov r12, r2
- adds r1, r7, 0x4
-_0800DDC8:
- adds r0, r1, r4
- strb r3, [r0]
- asrs r3, 8
- adds r4, 0x1
- cmp r4, 0x3
- ble _0800DDC8
- mov r1, r8
- ldr r0, [r1]
- ldrb r0, [r0, 0x8]
- movs r6, 0x1
- movs r1, 0x1
- ands r1, r0
- ldrb r2, [r7, 0xB]
- movs r5, 0x2
- negs r5, r5
- adds r0, r5, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r7, 0xB]
- movs r4, 0x7F
- mov r1, r9
- ands r1, r4
- ldrb r2, [r7, 0xA]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- ands r0, r4
- mov r1, r12
- orrs r0, r1
- strb r0, [r7, 0xA]
- ldrb r0, [r7]
- movs r1, 0x10
- negs r1, r1
- ands r1, r0
- movs r0, 0x2
- orrs r1, r0
- ldrb r2, [r7, 0x1]
- movs r0, 0x3D
- negs r0, r0
- ands r0, r2
- movs r2, 0xC
- orrs r0, r2
- strb r0, [r7, 0x1]
- movs r0, 0x11
- negs r0, r0
- ands r1, r0
- subs r0, 0x10
- ands r1, r0
- subs r0, 0x20
- ands r1, r0
- strb r1, [r7]
- ldr r0, =0x0000087f
- bl FlagGet
- lsls r0, 7
- ldrb r1, [r7]
- ands r4, r1
- orrs r4, r0
- strb r4, [r7]
- bl IsNationalPokedexEnabled
- ands r0, r6
- ldrb r1, [r7, 0x1]
- ands r5, r1
- orrs r5, r0
- strb r5, [r7, 0x1]
- ldr r0, =0x00000864
- bl FlagGet
- ands r6, r0
- lsls r6, 1
- ldrb r1, [r7, 0x1]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- orrs r0, r6
- strb r0, [r7, 0x1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800DD94
-
- thumb_func_start sub_800DE7C
-sub_800DE7C: @ 800DE7C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- mov r8, r1
- lsls r2, 24
- lsrs r5, r2, 24
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- bne _0800DED8
- movs r0, 0x1
- mov r9, r0
- ldr r6, =gUnknown_03007890
- ldr r0, [r6]
- lsls r4, r5, 5
- adds r0, r4
- ldrh r0, [r0, 0x18]
- bl sub_8010454
- cmp r0, 0
- beq _0800DEB8
- ldr r1, [r6]
- ldrb r0, [r1, 0x7]
- asrs r0, r5
- mov r2, r9
- ands r0, r2
- cmp r0, 0
- bne _0800DEF0
-_0800DEB8:
- adds r0, r7, 0
- movs r1, 0
- movs r2, 0xD
- bl memset
- mov r0, r8
- movs r1, 0
- movs r2, 0x8
- bl memset
- b _0800DF24
- .pool
-_0800DED8:
- movs r0, 0
- mov r9, r0
- ldr r6, =gUnknown_03007890
- ldr r0, [r6]
- lsls r4, r5, 5
- adds r0, r4
- ldrh r0, [r0, 0x18]
- bl sub_8010454
- cmp r0, 0
- beq _0800DF10
- ldr r1, [r6]
-_0800DEF0:
- adds r1, r4, r1
- adds r1, 0x1A
- adds r0, r7, 0
- movs r2, 0xD
- bl memcpy
- ldr r1, [r6]
- adds r1, r4, r1
- adds r1, 0x29
- mov r0, r8
- movs r2, 0x8
- bl memcpy
- b _0800DF24
- .pool
-_0800DF10:
- adds r0, r7, 0
- movs r1, 0
- movs r2, 0xD
- bl memset
- mov r0, r8
- movs r1, 0
- movs r2, 0x8
- bl memset
-_0800DF24:
- mov r0, r9
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800DE7C
-
- thumb_func_start sub_800DF34
-sub_800DF34: @ 800DF34
- push {r4-r7,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- lsls r2, 24
- movs r7, 0
- ldr r6, =gUnknown_03007890
- ldr r0, [r6]
- lsrs r4, r2, 19
- adds r2, r0, r4
- ldrh r1, [r2, 0x18]
- ldr r0, =0x00007f7d
- cmp r1, r0
- bne _0800DF74
- adds r1, r2, 0
- adds r1, 0x1A
- adds r0, r3, 0
- movs r2, 0xD
- bl memcpy
- ldr r1, [r6]
- adds r1, r4, r1
- adds r1, 0x29
- adds r0, r5, 0
- movs r2, 0x8
- bl memcpy
- movs r7, 0x1
- b _0800DF88
- .pool
-_0800DF74:
- adds r0, r3, 0
- movs r1, 0
- movs r2, 0xD
- bl memset
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x8
- bl memset
-_0800DF88:
- adds r0, r7, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800DF34
-
- thumb_func_start sub_800DF90
-sub_800DF90: @ 800DF90
- push {r4,lr}
- adds r4, r1, 0
- ldr r1, =gUnknown_02022B14
- movs r2, 0xD
- bl memcpy
- ldr r1, =gUnknown_02022B22
- adds r0, r4, 0
- movs r2, 0x8
- bl memcpy
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800DF90
-
- thumb_func_start sub_800DFB4
-sub_800DFB4: @ 800DFB4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- cmp r3, 0
- bne _0800DFCA
- cmp r2, 0
- bne _0800DFCA
- movs r3, 0xE7
- movs r2, 0x8
-_0800DFCA:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800E024
- ldr r0, =gUnknown_082ED5F0
- adds r1, r3, 0
- movs r3, 0
- bl CreateSprite
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gSprites
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- adds r4, r0
- ldr r0, =0x00001234
- strh r0, [r4, 0x3C]
- ldr r0, =gUnknown_082ED5E0
- ldrh r0, [r0, 0x6]
- bl GetSpriteTileStartByTag
- strh r0, [r4, 0x3A]
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
- ldr r0, =gUnknown_02022B10
- strb r5, [r0]
- b _0800E06A
- .pool
-_0800E024:
- ldr r0, =gUnknown_082ED5F0
- adds r1, r3, 0
- movs r3, 0
- bl CreateSprite
- ldr r4, =gUnknown_02022B10
- strb r0, [r4]
- ldr r5, =gSprites
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x00001234
- strh r1, [r0, 0x3C]
- ldr r0, =gUnknown_082ED5E0
- ldrh r0, [r0, 0x6]
- bl GetSpriteTileStartByTag
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- strh r0, [r1, 0x3A]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0800E06A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800DFB4
-
- thumb_func_start sub_800E084
-sub_800E084: @ 800E084
- push {r4,lr}
- ldr r4, =gSprites
- ldr r3, =gUnknown_02022B10
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r4
- movs r0, 0x3C
- ldrsh r1, [r2, r0]
- ldr r0, =0x00001234
- cmp r1, r0
- bne _0800E0CA
- movs r0, 0
- strh r0, [r2, 0x3C]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r3, =gMain
- movs r0, 0x84
- lsls r0, 3
- adds r3, r0
- ldr r0, =gDummyOamData
- ldr r1, [r0]
- ldr r2, [r0, 0x4]
- str r1, [r3]
- str r2, [r3, 0x4]
- ldr r1, =0x070003e8
- movs r2, 0x4
- bl CpuSet
-_0800E0CA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E084
-
- thumb_func_start sub_800E0E8
-sub_800E0E8: @ 800E0E8
- push {r4,lr}
- ldr r4, =gUnknown_082ED5E0
- ldrh r0, [r4, 0x6]
- bl GetSpriteTileStartByTag
- lsls r0, 16
- ldr r1, =0xffff0000
- cmp r0, r1
- bne _0800E100
- adds r0, r4, 0
- bl LoadCompressedObjectPic
-_0800E100:
- ldr r0, =gUnknown_082ED5E8
- bl LoadSpritePalette
- ldr r1, =gUnknown_02022B10
- movs r0, 0xFF
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E0E8
-
- thumb_func_start sub_800E124
-sub_800E124: @ 800E124
- push {r4,lr}
- ldr r1, =gUnknown_03007890
- ldr r0, [r1]
- ldrb r2, [r0, 0x2]
- movs r3, 0
- movs r4, 0x1
-_0800E130:
- adds r0, r2, 0
- ands r0, r4
- cmp r0, 0
- beq _0800E148
- ldr r0, [r1]
- adds r0, 0xA
- adds r0, r3
- ldrb r0, [r0]
- b _0800E156
- .pool
-_0800E148:
- lsrs r2, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800E130
- movs r0, 0
-_0800E156:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_800E124
-
- thumb_func_start sub_800E15C
-sub_800E15C: @ 800E15C
- push {lr}
- adds r2, r0, 0
- movs r3, 0x32
- ldrsh r0, [r2, r3]
- cmp r0, r1
- beq _0800E170
- movs r0, 0
- strh r1, [r2, 0x32]
- strh r0, [r2, 0x34]
- strh r0, [r2, 0x36]
-_0800E170:
- pop {r0}
- bx r0
- thumb_func_end sub_800E15C
-
- thumb_func_start sub_800E174
-sub_800E174: @ 800E174
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r1, =gUnknown_02022B10
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _0800E184
- b _0800E346
-_0800E184:
- ldr r2, =gSprites
- adds r1, r0, 0
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r2
- movs r0, 0x3C
- ldrsh r1, [r2, r0]
- ldr r0, =0x00001234
- cmp r1, r0
- beq _0800E19C
- b _0800E346
-_0800E19C:
- adds r6, r2, 0
- movs r5, 0xFF
- movs r4, 0
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800E1F6
- adds r7, r6, 0
- adds r7, 0x28
- movs r1, 0x29
- adds r1, r6
- mov r8, r1
- b _0800E1E6
- .pool
-_0800E1C8:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_800DD1C
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bcc _0800E1E6
- adds r0, r4, 0
- bl sub_800DD1C
- lsls r0, 24
- lsrs r5, r0, 24
-_0800E1E6:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r4, r0
- blt _0800E1C8
- b _0800E208
-_0800E1F6:
- bl sub_800E124
- lsls r0, 24
- lsrs r5, r0, 24
- adds r7, r6, 0
- adds r7, 0x28
- movs r2, 0x29
- adds r2, r6
- mov r8, r2
-_0800E208:
- bl sub_8012224
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0800E218
- movs r0, 0x4
- b _0800E246
-_0800E218:
- cmp r5, 0x18
- bhi _0800E220
- movs r0, 0x3
- b _0800E246
-_0800E220:
- adds r0, r5, 0
- subs r0, 0x19
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x65
- bhi _0800E230
- movs r0, 0x2
- b _0800E246
-_0800E230:
- adds r0, r5, 0
- subs r0, 0x7F
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x65
- bhi _0800E240
- movs r0, 0x1
- b _0800E246
-_0800E240:
- cmp r5, 0xE4
- bls _0800E248
- movs r0, 0
-_0800E246:
- strh r0, [r6, 0x2E]
-_0800E248:
- movs r3, 0x2E
- ldrsh r1, [r6, r3]
- movs r2, 0x30
- ldrsh r0, [r6, r2]
- cmp r1, r0
- beq _0800E25E
- adds r0, r6, 0
- bl sub_800E15C
- ldrh r0, [r6, 0x2E]
- strh r0, [r6, 0x30]
-_0800E25E:
- movs r0, 0x32
- ldrsh r1, [r6, r0]
- ldr r2, [r6, 0x8]
- lsls r1, 2
- adds r1, r2
- movs r3, 0x36
- ldrsh r0, [r6, r3]
- ldr r1, [r1]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- lsls r0, 10
- lsrs r0, 26
- movs r3, 0x34
- ldrsh r1, [r6, r3]
- cmp r0, r1
- bge _0800E2AC
- ldrh r0, [r6, 0x36]
- adds r0, 0x1
- movs r3, 0
- strh r0, [r6, 0x36]
- strh r3, [r6, 0x34]
- movs r1, 0x32
- ldrsh r0, [r6, r1]
- lsls r0, 2
- adds r0, r2
- movs r2, 0x36
- ldrsh r1, [r6, r2]
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- movs r0, 0
- ldrsh r1, [r1, r0]
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- bne _0800E2B2
- strh r3, [r6, 0x36]
- b _0800E2B2
-_0800E2AC:
- ldrh r0, [r6, 0x34]
- adds r0, 0x1
- strh r0, [r6, 0x34]
-_0800E2B2:
- ldr r4, =gMain
- movs r1, 0x84
- lsls r1, 3
- adds r0, r4, r1
- ldr r1, =gUnknown_082ED570
- ldr r2, [r1, 0x4]
- ldr r1, [r1]
- str r1, [r0]
- str r2, [r0, 0x4]
- movs r3, 0x20
- ldrsh r2, [r6, r3]
- movs r1, 0
- ldrsb r1, [r7, r1]
- adds r2, r1
- ldr r1, =0x00000422
- adds r5, r4, r1
- ldr r3, =0x000001ff
- adds r1, r3, 0
- ands r2, r1
- ldrh r3, [r5]
- ldr r1, =0xfffffe00
- ands r1, r3
- orrs r1, r2
- strh r1, [r5]
- ldrh r1, [r6, 0x22]
- mov r2, r8
- ldrb r2, [r2]
- adds r1, r2
- strb r1, [r0]
- ldrb r2, [r6, 0x5]
- ldr r3, =0x00000425
- adds r5, r4, r3
- lsrs r2, 4
- lsls r2, 4
- ldrb r3, [r5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r2
- strb r1, [r5]
- movs r1, 0x32
- ldrsh r2, [r6, r1]
- ldr r1, [r6, 0x8]
- lsls r2, 2
- adds r2, r1
- movs r3, 0x36
- ldrsh r1, [r6, r3]
- ldr r2, [r2]
- lsls r1, 2
- adds r1, r2
- ldrh r2, [r1]
- ldrh r6, [r6, 0x3A]
- adds r2, r6
- ldr r1, =0x00000424
- adds r4, r1
- ldr r3, =0x000003ff
- adds r1, r3, 0
- ands r2, r1
- ldrh r3, [r4]
- ldr r1, =0xfffffc00
- ands r1, r3
- orrs r1, r2
- strh r1, [r4]
- ldr r1, =0x070003e8
- movs r2, 0x4
- bl CpuSet
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0800E346
- bl sub_800E084
-_0800E346:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E174
-
- thumb_func_start sub_800E378
-sub_800E378: @ 800E378
- push {lr}
- stm r0!, {r1}
- adds r1, r2, 0
- bl StringCopy
- pop {r0}
- bx r0
- thumb_func_end sub_800E378
-
- thumb_func_start sub_800E388
-sub_800E388: @ 800E388
- push {lr}
- adds r2, r0, 0
- movs r1, 0
-_0800E38E:
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800E39A
- movs r0, 0x1
- b _0800E3A2
-_0800E39A:
- adds r1, 0x1
- cmp r1, 0x7
- ble _0800E38E
- movs r0, 0
-_0800E3A2:
- pop {r1}
- bx r1
- thumb_func_end sub_800E388
-
- thumb_func_start sub_800E3A8
-sub_800E3A8: @ 800E3A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800E3BE
- b _0800E520
-_0800E3BE:
- movs r0, 0xF0
- bl AllocZeroed
- str r0, [sp, 0x14]
- movs r4, 0
- b _0800E434
- .pool
-_0800E3D0:
- lsls r2, r4, 2
- mov r0, sp
- adds r1, r0, r2
- movs r0, 0x1
- negs r0, r0
- str r0, [r1]
- movs r5, 0
- mov r8, r2
- lsls r0, r4, 3
- adds r1, r4, 0x1
- mov r9, r1
- subs r0, r4
- lsls r0, 2
- str r0, [sp, 0x1C]
- ldr r7, =gLinkPlayers + 8
- mov r10, r7
- ldr r6, =0x00003b98
- movs r4, 0
- mov r0, r10
- subs r0, 0x4
- ldr r1, [sp, 0x1C]
- adds r3, r1, r0
-_0800E3FC:
- ldrh r1, [r3]
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r7, =0x00003b98
- adds r0, r2, r7
- adds r0, r4
- ldr r0, [r0]
- cmp r1, r0
- bne _0800E428
- adds r1, r2, r6
- adds r1, 0x4
- ldr r0, [sp, 0x1C]
- add r0, r10
- str r3, [sp, 0x18]
- bl StringCompare
- ldr r3, [sp, 0x18]
- cmp r0, 0
- bne _0800E428
- mov r0, sp
- add r0, r8
- str r5, [r0]
-_0800E428:
- adds r6, 0xC
- adds r4, 0xC
- adds r5, 0x1
- cmp r5, 0x13
- ble _0800E3FC
- mov r4, r9
-_0800E434:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- blt _0800E3D0
- movs r0, 0
- mov r8, r0
- movs r4, 0
- mov r7, sp
- movs r5, 0
- ldr r6, [sp, 0x14]
- b _0800E4AC
- .pool
-_0800E45C:
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- beq _0800E4A6
- ldr r2, =gLinkPlayers
- adds r0, r5, r2
- ldrh r0, [r0, 0x1A]
- cmp r0, 0x1
- beq _0800E4A6
- adds r0, r2, 0x4
- adds r0, r5, r0
- ldrh r1, [r0]
- adds r2, 0x8
- adds r2, r5, r2
- adds r0, r6, 0
- bl sub_800E378
- ldr r2, [r7]
- cmp r2, 0
- blt _0800E4A0
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldr r1, =0x00003b9c
- adds r0, r1
- movs r1, 0
- movs r2, 0x8
- bl memset
-_0800E4A0:
- adds r6, 0xC
- movs r0, 0x1
- add r8, r0
-_0800E4A6:
- adds r7, 0x4
- adds r5, 0x1C
- adds r4, 0x1
-_0800E4AC:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- blt _0800E45C
- movs r4, 0
- ldr r1, =gSaveBlock1Ptr
- mov r9, r1
- ldr r6, =0x00003b98
- movs r7, 0
- mov r1, r8
- lsls r0, r1, 1
- add r0, r8
- lsls r0, 2
- ldr r1, [sp, 0x14]
- adds r5, r0, r1
-_0800E4CE:
- mov r1, r9
- ldr r0, [r1]
- adds r0, r6
- adds r0, 0x4
- bl sub_800E388
- cmp r0, 0
- beq _0800E500
- mov r0, r9
- ldr r2, [r0]
- ldr r1, =0x00003b98
- adds r0, r2, r1
- adds r0, r7
- ldr r1, [r0]
- adds r2, r6
- adds r2, 0x4
- adds r0, r5, 0
- bl sub_800E378
- adds r5, 0xC
- movs r0, 0x1
- add r8, r0
- mov r1, r8
- cmp r1, 0x13
- bgt _0800E50A
-_0800E500:
- adds r6, 0xC
- adds r7, 0xC
- adds r4, 0x1
- cmp r4, 0x13
- ble _0800E4CE
-_0800E50A:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r7, =0x00003b98
- adds r0, r7
- ldr r1, [sp, 0x14]
- movs r2, 0xF0
- bl memcpy
- ldr r0, [sp, 0x14]
- bl Free
-_0800E520:
- 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_800E3A8
-
- thumb_func_start sub_800E540
-sub_800E540: @ 800E540
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r1
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- movs r7, 0
- ldr r6, =gSaveBlock1Ptr
- ldr r4, =0x00003b98
- movs r5, 0
-_0800E558:
- ldr r0, [r6]
- adds r0, r4
- adds r0, 0x4
- mov r1, r9
- bl StringCompare
- cmp r0, 0
- bne _0800E584
- ldr r0, [r6]
- ldr r1, =0x00003b98
- adds r0, r1
- adds r0, r5
- ldr r0, [r0]
- cmp r0, r8
- bne _0800E584
- movs r0, 0x1
- b _0800E59E
- .pool
-_0800E584:
- ldr r0, [r6]
- adds r0, r4
- adds r0, 0x4
- bl sub_800E388
- cmp r0, 0
- beq _0800E59C
- adds r4, 0xC
- adds r5, 0xC
- adds r7, 0x1
- cmp r7, 0x13
- ble _0800E558
-_0800E59C:
- movs r0, 0
-_0800E59E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_800E540
-
- thumb_func_start sub_800E5AC
-sub_800E5AC: @ 800E5AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- ldr r0, =0x00003b98
- mov r8, r0
- movs r7, 0
- mov r6, r8
- movs r5, 0
- movs r4, 0x13
-_0800E5C0:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- mov r2, r8
- adds r0, r1, r2
- adds r0, r5
- str r7, [r0]
- mov r0, sp
- strh r7, [r0]
- adds r1, r6
- adds r1, 0x4
- ldr r2, =0x01000004
- bl CpuSet
- adds r6, 0xC
- adds r5, 0xC
- subs r4, 0x1
- cmp r4, 0
- bge _0800E5C0
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E5AC
-
- thumb_func_start nullsub_5
-nullsub_5: @ 800E5FC
- bx lr
- thumb_func_end nullsub_5
-
- thumb_func_start nullsub_13
-nullsub_13: @ 800E600
- bx lr
- thumb_func_end nullsub_13
-
- thumb_func_start sub_800E604
-sub_800E604: @ 800E604
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- ldr r6, =gUnknown_03005000
- adds r5, r6, 0
- adds r5, 0xEE
- ldrb r4, [r5]
- mov r0, sp
- movs r7, 0
- strh r7, [r0]
- ldr r2, =0x0100067a
- adds r1, r6, 0
- bl CpuSet
- ldrb r0, [r5]
- strb r4, [r5]
- movs r0, 0xFF
- strb r0, [r6, 0xC]
- ldrb r0, [r5]
- cmp r0, 0x4
- beq _0800E636
- ldrb r0, [r5]
- strb r7, [r5]
-_0800E636:
- mov r7, sp
- adds r7, 0x2
- add r0, sp, 0x4
- mov r8, r0
- movs r0, 0x6
- add r0, sp
- mov r9, r0
- adds r5, r6, 0
- adds r5, 0x80
- movs r4, 0x4
-_0800E64A:
- adds r0, r5, 0
- bl sub_800FCC4
- adds r5, 0x14
- subs r4, 0x1
- cmp r4, 0
- bge _0800E64A
- movs r5, 0
- ldr r4, =gUnknown_0300506C
- adds r0, r4, 0
- bl sub_800FCC4
- adds r0, r4, 0
- adds r0, 0xB8
- bl sub_800D6C8
- ldr r0, =0x0000097c
- adds r4, r0
- adds r0, r4, 0
- bl sub_800D724
- strh r5, [r7]
- ldr r1, =gSendCmd
- ldr r2, =0x01000008
- adds r0, r7, 0
- bl CpuSet
- mov r0, r8
- strh r5, [r0]
- ldr r1, =gRecvCmds
- ldr r2, =0x01000028
- bl CpuSet
- mov r0, r9
- strh r5, [r0]
- ldr r1, =gLinkPlayers
- ldr r2, =0x01000046
- bl CpuSet
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E604
-
- thumb_func_start sub_800E6D0
-sub_800E6D0: @ 800E6D0
- push {r4-r6,lr}
- ldr r4, =gIntrTable
- ldr r5, [r4, 0x4]
- ldr r6, [r4, 0x8]
- bl sub_800E700
- bl rfu_REQ_stopMode
- bl rfu_waitREQComplete
- ldr r1, =0x04000208
- movs r0, 0
- strh r0, [r1]
- str r5, [r4, 0x4]
- str r6, [r4, 0x8]
- movs r0, 0x1
- strh r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E6D0
-
- thumb_func_start sub_800E700
-sub_800E700: @ 800E700
- push {r4,lr}
- ldr r0, =gUnknown_03004190
- ldr r1, =0x00000e64
- ldr r4, =gIntrTable + 0x4
- adds r2, r4, 0
- movs r3, 0x1
- bl rfu_initializeAPI
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _0800E732
- ldr r0, =gLinkType
- strh r1, [r0]
- bl sub_800AAF4
- movs r0, 0
- bl sub_80111B0
- bl sub_800E604
- adds r1, r4, 0x4
- movs r0, 0x3
- bl rfu_setTimerInterrupt
-_0800E732:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E700
-
- thumb_func_start sub_800E748
-sub_800E748: @ 800E748
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_8010750
- ldr r0, =gUnknown_03005000
- ldrh r0, [r0, 0x4]
- cmp r0, 0x12
- bls _0800E75C
- b _0800E862
-_0800E75C:
- lsls r0, 2
- ldr r1, =_0800E770
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800E770:
- .4byte _0800E7BC
- .4byte _0800E862
- .4byte _0800E7E4
- .4byte _0800E862
- .4byte _0800E814
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E828
-_0800E7BC:
- ldr r0, =gUnknown_02022B2C
- bl sub_800BFCC
- ldr r0, =gUnknown_03005000
- movs r2, 0x1
- strh r2, [r0, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
- b _0800E862
- .pool
-_0800E7E4:
- ldr r4, =gUnknown_03005000
- ldrb r0, [r4, 0xC]
- ldr r3, =gUnknown_082ED6E0
- movs r1, 0
- movs r2, 0xF0
- bl sub_800C054
- movs r0, 0x3
- strh r0, [r4, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x6
- strh r1, [r0, 0xA]
- b _0800E862
- .pool
-_0800E814:
- movs r0, 0
- bl sub_800C27C
- ldr r1, =gUnknown_03005000
- movs r0, 0x5
- strh r0, [r1, 0x4]
- b _0800E862
- .pool
-_0800E828:
- ldr r4, =gUnknown_03005000
- ldr r0, =0x00000cdb
- adds r1, r4, r0
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r0, =sub_800EDBC
- bl sub_800D52C
- bl sub_800EAB4
- bl sub_800EAFC
- movs r0, 0x14
- strh r0, [r4, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- strh r1, [r0, 0xA]
- ldr r0, =sub_801084C
- movs r1, 0x5
- bl CreateTask
- adds r0, r5, 0
- bl DestroyTask
-_0800E862:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E748
-
- thumb_func_start sub_800E87C
-sub_800E87C: @ 800E87C
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_082ED6A5
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_800E87C
-
- thumb_func_start sub_800E88C
-sub_800E88C: @ 800E88C
- push {r4-r7,lr}
- adds r2, r0, 0
- adds r5, r1, 0
- movs r4, 0x1
- adds r1, r2, 0
- movs r6, 0
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- bne _0800E8CC
- movs r3, 0
- movs r5, 0x1
- ldr r1, =gUnknown_03005CDE
-_0800E8A6:
- adds r0, r2, 0
- ands r0, r5
- cmp r0, 0
- beq _0800E8B8
- adds r0, r3, r1
- strb r4, [r0]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_0800E8B8:
- asrs r2, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800E8A6
- b _0800E942
- .pool
-_0800E8CC:
- movs r3, 0
- mvns r0, r1
- mov r12, r0
- movs r7, 0x1
- ldr r4, =gUnknown_03005CDE
-_0800E8D6:
- adds r2, r1, 0
- ands r2, r7
- cmp r2, 0
- bne _0800E8E2
- adds r0, r3, r4
- strb r2, [r0]
-_0800E8E2:
- asrs r1, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800E8D6
- movs r4, 0x4
- ldr r0, =gUnknown_03005CDE
- ldrb r7, [r0]
-_0800E8F4:
- movs r3, 0
- subs r1, r4, 0x1
- cmp r7, r4
- beq _0800E910
- ldr r2, =gUnknown_03005CDE
-_0800E8FE:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bhi _0800E910
- adds r0, r3, r2
- ldrb r0, [r0]
- cmp r0, r4
- bne _0800E8FE
-_0800E910:
- cmp r3, 0x4
- bne _0800E916
- adds r6, r4, 0
-_0800E916:
- lsls r0, r1, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0800E8F4
- mov r0, r12
- ands r5, r0
- movs r3, 0
- movs r2, 0x1
- ldr r1, =gUnknown_03005CDE
-_0800E928:
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- beq _0800E936
- adds r0, r3, r1
- strb r6, [r0]
- adds r6, 0x1
-_0800E936:
- asrs r5, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _0800E928
-_0800E942:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E88C
-
- thumb_func_start sub_800E94C
-sub_800E94C: @ 800E94C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gUnknown_03005000
- ldrh r3, [r0, 0x4]
- adds r7, r0, 0
- cmp r3, 0xC
- bls _0800E95E
- b _0800EA9A
-_0800E95E:
- lsls r0, r3, 2
- ldr r1, =_0800E970
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800E970:
- .4byte _0800E9A4
- .4byte _0800EA9A
- .4byte _0800EA9A
- .4byte _0800EA9A
- .4byte _0800EA9A
- .4byte _0800EA9A
- .4byte _0800E9BC
- .4byte _0800EA9A
- .4byte _0800EA9A
- .4byte _0800E9E4
- .4byte _0800EA9A
- .4byte _0800E9F8
- .4byte _0800EA3C
-_0800E9A4:
- ldr r0, =gUnknown_082ED608
- bl sub_800BFCC
- ldr r0, =gUnknown_03005000
- movs r2, 0x1
- strh r2, [r0, 0x4]
- b _0800E9CC
- .pool
-_0800E9BC:
- ldrb r0, [r7, 0xC]
- ldr r3, =gUnknown_082ED6E0
- movs r1, 0
- movs r2, 0xF0
- bl sub_800C054
- movs r2, 0x7
- strh r2, [r7, 0x4]
-_0800E9CC:
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
- b _0800EA9A
- .pool
-_0800E9E4:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0xA
- strh r0, [r1, 0xA]
- b _0800EA9A
- .pool
-_0800E9F8:
- bl sub_80107A0
- cmp r0, 0x6
- beq _0800EA1C
- cmp r0, 0x6
- bgt _0800EA0A
- cmp r0, 0x5
- beq _0800EA10
- b _0800EA9A
-_0800EA0A:
- cmp r0, 0x9
- beq _0800EA1C
- b _0800EA9A
-_0800EA10:
- ldr r1, =gUnknown_03005000
- movs r0, 0xC
- strh r0, [r1, 0x4]
- b _0800EA9A
- .pool
-_0800EA1C:
- bl sub_800D630
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000ce4
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- adds r0, r6, 0
- bl DestroyTask
- b _0800EA9A
- .pool
-_0800EA3C:
- ldr r0, =0x00000c3e
- adds r4, r7, r0
- ldrb r0, [r4]
- movs r5, 0x80
- lsls r5, 17
- lsls r5, r0
- lsrs r5, 24
- ldrb r1, [r4]
- movs r0, 0xC
- bl rfu_clearSlot
- ldrb r1, [r4]
- ldr r0, =0x00000c3f
- adds r2, r7, r0
- movs r0, 0x10
- movs r3, 0x46
- bl rfu_setRecvBuffer
- adds r1, r7, 0
- adds r1, 0x4C
- adds r0, r5, 0
- movs r2, 0xE
- bl rfu_UNI_setSendData
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- strh r1, [r0, 0xA]
- adds r0, r6, 0
- bl DestroyTask
- ldr r4, =gUnknown_02022B44
- ldrb r0, [r4, 0xF]
- cmp r0, 0
- bne _0800EA92
- bl sub_801227C
- ldrb r0, [r4, 0xF]
- adds r0, 0x1
- strb r0, [r4, 0xF]
-_0800EA92:
- ldr r0, =sub_801084C
- movs r1, 0x5
- bl CreateTask
-_0800EA9A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E94C
-
- thumb_func_start sub_800EAB4
-sub_800EAB4: @ 800EAB4
- push {r4,r5,lr}
- ldr r0, =gUnknown_03004140
- ldrb r5, [r0]
- movs r4, 0
-_0800EABC:
- movs r0, 0x1
- ands r0, r5
- cmp r0, 0
- beq _0800EAE0
- lsls r2, r4, 3
- subs r2, r4
- lsls r2, 1
- ldr r0, =gUnknown_03005014
- adds r2, r0
- movs r0, 0x10
- adds r1, r4, 0
- movs r3, 0xE
- bl rfu_setRecvBuffer
- movs r0, 0x3
- adds r1, r4, 0
- bl rfu_clearSlot
-_0800EAE0:
- lsrs r5, 1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800EABC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800EAB4
-
- thumb_func_start sub_800EAFC
-sub_800EAFC: @ 800EAFC
- push {r4-r6,lr}
- ldr r0, =gUnknown_03004140
- ldrb r5, [r0]
- ldr r4, =gUnknown_03005C87
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x46
- bl rfu_UNI_setSendData
- adds r0, r5, 0
- bl sub_800E87C
- ldr r1, =0xfffff379
- adds r6, r4, r1
- adds r1, r4, 0
- adds r1, 0x53
- strb r0, [r1]
- adds r4, 0x5B
- strb r5, [r4]
- movs r1, 0x1
- negs r1, r1
- adds r0, r5, 0
- bl sub_800E88C
- movs r0, 0x1
- strb r0, [r6, 0xC]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800EAFC
-
- thumb_func_start sub_800EB44
-sub_800EB44: @ 800EB44
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x54
- bne _0800EB78
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _0800EB78
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0]
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- movs r0, 0
- movs r1, 0
- bl sub_8011A64
-_0800EB78:
- ldr r0, =gUnknown_03005000
- ldrh r2, [r0, 0x4]
- adds r6, r0, 0
- cmp r2, 0x12
- bls _0800EB84
- b _0800ECF4
-_0800EB84:
- lsls r0, r2, 2
- ldr r1, =_0800EB9C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800EB9C:
- .4byte _0800EBE8
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800ECF4
- .4byte _0800EC38
- .4byte _0800EC98
- .4byte _0800ECF4
- .4byte _0800ECAC
- .4byte _0800EC10
- .4byte _0800ECF4
-_0800EBE8:
- ldr r0, =gUnknown_02022B2C
- bl sub_800BFCC
- ldr r0, =gUnknown_03005000
- movs r2, 0x1
- strh r2, [r0, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
- b _0800ECF4
- .pool
-_0800EC10:
- ldr r3, =gUnknown_082ED6E0
- movs r0, 0x2
- movs r1, 0
- movs r2, 0xF0
- bl sub_800C054
- ldr r0, =sub_800ED34
- bl sub_800D52C
- ldr r1, =gUnknown_03005000
- movs r0, 0x12
- strh r0, [r1, 0x4]
- b _0800ECF4
- .pool
-_0800EC38:
- ldr r1, =0x00000c3e
- adds r0, r6, r1
- ldrb r1, [r0]
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r1
- lsrs r0, 24
- adds r1, r6, 0
- adds r1, 0x4C
- movs r2, 0xE
- bl rfu_UNI_setSendData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _0800ECF4
- strb r0, [r6, 0xC]
- adds r0, r5, 0
- bl DestroyTask
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- movs r2, 0x16
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _0800EC88
- ldr r0, =sub_8010D0C
- movs r1, 0x1
- bl CreateTask
- b _0800ECF4
- .pool
-_0800EC88:
- ldr r0, =sub_801084C
- movs r1, 0x5
- bl CreateTask
- b _0800ECF4
- .pool
-_0800EC98:
- movs r0, 0
- bl sub_800C27C
- ldr r1, =gUnknown_03005000
- movs r0, 0xF
- strh r0, [r1, 0x4]
- b _0800ECF4
- .pool
-_0800ECAC:
- ldr r0, =0x00000cdb
- adds r1, r6, r0
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r0, =sub_800EDBC
- bl sub_800D52C
- movs r0, 0x1
- bl sub_8011068
- bl sub_800EAB4
- bl sub_800EAFC
- movs r0, 0x14
- strh r0, [r6, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- strh r1, [r0, 0xA]
- movs r4, 0x1
- strb r4, [r6, 0xC]
- ldr r0, =sub_801084C
- movs r1, 0x5
- bl CreateTask
- ldr r1, =0x00000ce8
- adds r0, r6, r1
- strb r4, [r0]
- adds r0, r5, 0
- bl DestroyTask
-_0800ECF4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800EB44
-
- thumb_func_start sub_800ED10
-sub_800ED10: @ 800ED10
- push {lr}
- ldr r3, =gUnknown_082ED6E0
- movs r0, 0x1
- movs r1, 0
- movs r2, 0xF0
- bl sub_800C054
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800ED10
-
- thumb_func_start sub_800ED28
-sub_800ED28: @ 800ED28
- push {lr}
- movs r0, 0
- bl sub_800C27C
- pop {r0}
- bx r0
- thumb_func_end sub_800ED28
-
- thumb_func_start sub_800ED34
-sub_800ED34: @ 800ED34
- push {r4,lr}
- ldr r0, =gUnknown_03005000
- movs r2, 0
- movs r1, 0xD
- adds r0, 0x59
-_0800ED3E:
- strb r2, [r0]
- subs r0, 0x1
- subs r1, 0x1
- cmp r1, 0
- bge _0800ED3E
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- ldr r1, =gUnknown_03007870
- ldr r3, =gUnknown_03005000
- ldr r0, =0x00000c3e
- adds r4, r3, r0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0, 0x12]
- cmp r0, 0
- beq _0800ED9A
- movs r2, 0xCD
- lsls r2, 4
- adds r1, r3, r2
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- movs r1, 0x92
- lsls r1, 1
- adds r0, r3, r1
- ldr r2, =0x00000c3f
- adds r1, r3, r2
- bl sub_800D7D8
- ldr r1, =gUnknown_02022B44
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- bl sub_800F048
- ldrb r0, [r4]
- bl rfu_UNI_readySendData
- ldrb r0, [r4]
- bl rfu_UNI_clearRecvNewDataFlag
-_0800ED9A:
- movs r0, 0x1
- bl rfu_REQ_sendData_wrapper
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800ED34
-
- thumb_func_start sub_800EDBC
-sub_800EDBC: @ 800EDBC
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000cdb
- adds r0, r1
- ldrb r1, [r0]
- movs r1, 0x1
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_800EDBC
-
- thumb_func_start sub_800EDD4
-sub_800EDD4: @ 800EDD4
- push {r4-r6,lr}
- bl sub_800C048
- ldr r4, =gUnknown_03005000
- ldrb r0, [r4, 0xC]
- cmp r0, 0x1
- bne _0800EDF0
- ldr r0, =sub_800E748
- b _0800EDF6
- .pool
-_0800EDF0:
- cmp r0, 0
- bne _0800EE18
- ldr r0, =sub_800E94C
-_0800EDF6:
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0800EE38
- adds r0, r4, 0
- adds r0, 0x67
- ldrb r0, [r0]
- bl DestroyTask
- bl sub_800E604
- b _0800EE38
- .pool
-_0800EE18:
- cmp r0, 0x2
- bne _0800EE38
- ldr r0, =sub_800EB44
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0800EE38
- adds r0, r4, 0
- adds r0, 0x67
- ldrb r0, [r0]
- bl DestroyTask
- bl sub_800E604
-_0800EE38:
- movs r5, 0
- ldr r6, =gUnknown_082ED7E0
-_0800EE3C:
- lsls r0, r5, 2
- adds r0, r6
- ldr r4, [r0]
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0800EE5E
- adds r0, r4, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0800EE5E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _0800EE3C
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800EDD4
-
- thumb_func_start sub_800EE78
-sub_800EE78: @ 800EE78
- push {lr}
- ldr r0, =sub_800E748
- movs r1, 0x1
- bl CreateTask
- ldr r1, =gUnknown_03005000
- adds r1, 0x67
- strb r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800EE78
-
- thumb_func_start sub_800EE94
-sub_800EE94: @ 800EE94
- push {lr}
- ldr r1, =gUnknown_03005000
- ldrh r0, [r1, 0x4]
- cmp r0, 0x7
- bne _0800EEB4
- ldr r2, =0x00000ccd
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800EEB4
- movs r0, 0x1
- b _0800EEB6
- .pool
-_0800EEB4:
- movs r0, 0
-_0800EEB6:
- pop {r1}
- bx r1
- thumb_func_end sub_800EE94
-
- thumb_func_start sub_800EEBC
-sub_800EEBC: @ 800EEBC
- push {r4,lr}
- ldr r4, =gUnknown_03005000
- ldrh r0, [r4, 0x4]
- cmp r0, 0x7
- bne _0800EEF8
- ldr r0, =gUnknown_03007890
- ldr r1, [r0]
- ldr r2, =0x00000c3d
- adds r0, r4, r2
- ldrb r0, [r0]
- lsls r0, 5
- adds r1, r0
- ldrh r0, [r1, 0x14]
- movs r1, 0xF0
- bl sub_800C12C
- lsls r0, 24
- cmp r0, 0
- bne _0800EEF8
- movs r0, 0x9
- strh r0, [r4, 0x4]
- movs r0, 0x1
- b _0800EEFA
- .pool
-_0800EEF8:
- movs r0, 0
-_0800EEFA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_800EEBC
-
- thumb_func_start sub_800EF00
-sub_800EF00: @ 800EF00
- push {lr}
- ldr r0, =sub_800E94C
- movs r1, 0x1
- bl CreateTask
- ldr r1, =gUnknown_03005000
- adds r1, 0x67
- strb r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800EF00
-
- thumb_func_start sub_800EF1C
-sub_800EF1C: @ 800EF1C
- push {lr}
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800EF30
- movs r0, 0
- b _0800EF32
- .pool
-_0800EF30:
- movs r0, 0x1
-_0800EF32:
- pop {r1}
- bx r1
- thumb_func_end sub_800EF1C
-
- thumb_func_start sub_800EF38
-sub_800EF38: @ 800EF38
- ldr r1, =gUnknown_03005000
- movs r0, 0x4
- strh r0, [r1, 0x4]
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0]
- ldr r2, =0x00000ce7
- adds r1, r2
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_800EF38
-
- thumb_func_start sub_800EF58
-sub_800EF58: @ 800EF58
- push {lr}
- adds r1, r0, 0
- ldr r2, =gUnknown_03005000
- ldrh r0, [r2, 0x4]
- cmp r0, 0x11
- beq _0800EF68
- cmp r1, 0
- beq _0800EF74
-_0800EF68:
- movs r0, 0x12
- strh r0, [r2, 0x4]
- movs r0, 0x1
- b _0800EF76
- .pool
-_0800EF74:
- movs r0, 0
-_0800EF76:
- pop {r1}
- bx r1
- thumb_func_end sub_800EF58
-
- thumb_func_start sub_800EF7C
-sub_800EF7C: @ 800EF7C
- ldr r1, =gUnknown_03005000
- movs r0, 0xE
- strh r0, [r1, 0x4]
- bx lr
- .pool
- thumb_func_end sub_800EF7C
-
- thumb_func_start sub_800EF88
-sub_800EF88: @ 800EF88
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- movs r2, 0
- b _0800EF9A
-_0800EF92:
- lsrs r1, 1
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_0800EF9A:
- cmp r2, 0x3
- bhi _0800EFAC
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0800EF92
- adds r0, r2, 0
- bl rfu_UNI_readySendData
-_0800EFAC:
- pop {r0}
- bx r0
- thumb_func_end sub_800EF88
-
- thumb_func_start sub_800EFB0
-sub_800EFB0: @ 800EFB0
- push {r4-r7,lr}
- sub sp, 0x4
- movs r2, 0
- ldr r7, =gRecvCmds
- ldr r0, =gUnknown_03005000
- adds r6, r7, 0
- ldr r1, =0x00000c87
- adds r5, r0, r1
-_0800EFC0:
- movs r3, 0
- lsls r0, r2, 3
- lsls r1, r2, 4
- adds r4, r2, 0x1
- subs r0, r2
- lsls r0, 1
- adds r2, r0, r5
- adds r1, r6
-_0800EFD0:
- ldrh r0, [r1]
- lsrs r0, 8
- strb r0, [r2, 0x1]
- ldrh r0, [r1]
- strb r0, [r2]
- adds r2, 0x2
- adds r1, 0x2
- adds r3, 0x1
- cmp r3, 0x6
- ble _0800EFD0
- adds r2, r4, 0
- cmp r2, 0x4
- ble _0800EFC0
- movs r0, 0
- mov r1, sp
- strh r0, [r1]
- ldr r2, =0x01000028
- mov r0, sp
- adds r1, r7, 0
- bl CpuSet
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800EFB0
-
- thumb_func_start sub_800F014
-sub_800F014: @ 800F014
- push {lr}
- ldr r3, =gSendCmd
- ldr r2, =gRecvCmds
- movs r1, 0x6
-_0800F01C:
- ldrh r0, [r3]
- strh r0, [r2]
- adds r3, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _0800F01C
- ldr r1, =gSendCmd
- movs r2, 0
- adds r0, r1, 0
- adds r0, 0xC
-_0800F032:
- strh r2, [r0]
- subs r0, 0x2
- cmp r0, r1
- bge _0800F032
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800F014
-
- thumb_func_start sub_800F048
-sub_800F048: @ 800F048
- push {r4,r5,lr}
- ldr r4, =gUnknown_03005000
- ldr r0, =0x00000c3c
- adds r5, r4, r0
- ldrb r0, [r5]
- cmp r0, 0
- beq _0800F07A
- ldr r1, =0x00000c1c
- adds r0, r4, r1
- adds r1, r4, 0
- adds r1, 0x4C
- bl sub_800DAC8
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =0x00000c3a
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r1, r0, 0
- cmp r1, 0
- bne _0800F076
- ldrb r0, [r5]
- strb r1, [r5]
-_0800F076:
- cmp r2, 0
- bne _0800F09E
-_0800F07A:
- ldr r5, =gUnknown_03005000
- ldr r1, =0x00000c3c
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800F09E
- ldr r1, =0x000009e8
- adds r0, r5, r1
- adds r4, r5, 0
- adds r4, 0x4C
- adds r1, r4, 0
- bl sub_800D9DC
- ldr r1, =0x00000c1c
- adds r0, r5, r1
- adds r1, r4, 0
- bl sub_800DA68
-_0800F09E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800F048
-
- thumb_func_start sub_800F0B8
-sub_800F0B8: @ 800F0B8
- push {r4,lr}
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- bne _0800F0CC
-_0800F0C4:
- movs r0, 0
- b _0800F0EC
- .pool
-_0800F0CC:
- movs r3, 0
- ldr r4, =gRecvCmds
-_0800F0D0:
- movs r2, 0
- lsls r0, r3, 4
- adds r1, r0, r4
-_0800F0D6:
- ldrh r0, [r1]
- cmp r0, 0
- bne _0800F0C4
- adds r1, 0x2
- adds r2, 0x1
- cmp r2, 0x6
- ble _0800F0D6
- adds r3, 0x1
- cmp r3, 0x4
- ble _0800F0D0
- movs r0, 0x1
-_0800F0EC:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800F0B8
-
- thumb_func_start sub_800F0F8
-sub_800F0F8: @ 800F0F8
- push {r4-r6,lr}
- ldr r6, =gUnknown_03005000
- ldrh r0, [r6, 0x4]
- cmp r0, 0x13
- bhi _0800F118
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- movs r0, 0
- bl rfu_REQ_sendData_wrapper
- b _0800F1D2
- .pool
-_0800F118:
- ldr r0, =0x00000cdb
- adds r1, r6, r0
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r0, =0x00000ce2
- adds r1, r6, r0
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r1, [r1]
- ldrb r0, [r0, 0x2]
- ands r0, r1
- cmp r0, r1
- bne _0800F1D2
- cmp r0, 0
- beq _0800F1D2
- ldr r1, =0x00000cdc
- adds r0, r6, r1
- ldrb r0, [r0]
- adds r5, r0, 0
- cmp r5, 0
- bne _0800F1C8
- ldr r0, =0x00000ce3
- adds r4, r6, r0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0800F1A8
- bl sub_8011D6C
- strb r5, [r4]
- ldr r1, =0x00000ce4
- adds r0, r6, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800F18C
- movs r4, 0x80
- lsls r4, 8
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_8011A64
- adds r0, r4, 0
- bl sub_8011170
- b _0800F1D2
- .pool
-_0800F18C:
- ldr r0, =gUnknown_03004140
- ldrb r4, [r0]
- cmp r4, 0
- bne _0800F1A8
- bl sub_800EDD4
- ldr r0, =gReceivedRemoteLinkPlayers
- strb r4, [r0]
- b _0800F1D2
- .pool
-_0800F1A8:
- bl sub_800EFB0
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000cda
- adds r0, r1
- ldrb r0, [r0]
- bl rfu_UNI_readySendData
- movs r0, 0x1
- bl rfu_REQ_sendData_wrapper
- b _0800F1CC
- .pool
-_0800F1C8:
- bl rfu_REQ_PARENT_resumeRetransmitAndChange
-_0800F1CC:
- ldr r1, =gUnknown_03005000
- movs r0, 0x1
- strb r0, [r1, 0xE]
-_0800F1D2:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800F0F8
-
- thumb_func_start sub_800F1E0
-sub_800F1E0: @ 800F1E0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, =gUnknown_03005000
- ldrh r1, [r0, 0x4]
- adds r6, r0, 0
- cmp r1, 0x13
- bhi _0800F1F8
- b _0800F45A
-_0800F1F8:
- ldrb r0, [r6, 0xE]
- cmp r0, 0x1
- beq _0800F200
- b _0800F45A
-_0800F200:
- bl rfu_waitREQComplete
- ldr r0, =0x00000cdb
- adds r2, r6, r0
- ldrb r0, [r2]
- cmp r0, 0
- bne _0800F220
- adds r1, r6, 0
- adds r1, 0xEE
-_0800F212:
- ldrb r0, [r1]
- cmp r0, 0
- beq _0800F21A
- b _0800F480
-_0800F21A:
- ldrb r0, [r2]
- cmp r0, 0
- beq _0800F212
-_0800F220:
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- ldr r2, =gUnknown_03004140
- ldr r4, =gUnknown_03005000
- ldr r1, =0x00000ce2
- adds r0, r4, r1
- ldrb r1, [r2, 0x3]
- ldrb r0, [r0]
- ands r1, r0
- cmp r1, r0
- beq _0800F23C
- b _0800F444
-_0800F23C:
- ldr r6, =0x00000cdc
- adds r1, r4, r6
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r1, =gUnknown_02022B44
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- ldrb r7, [r2]
- movs r5, 0
-_0800F252:
- movs r0, 0x1
- ands r0, r7
- lsrs r1, r7, 1
- str r1, [sp, 0x4]
- adds r2, r5, 0x1
- str r2, [sp]
- cmp r0, 0
- bne _0800F264
- b _0800F364
-_0800F264:
- ldr r1, =gUnknown_03005000
- lsls r2, r5, 3
- subs r0, r2, r5
- lsls r4, r0, 1
- adds r0, r1, 0
- adds r0, 0x15
- adds r0, r4, r0
- ldrb r0, [r0]
- adds r6, r1, 0
- adds r3, r2, 0
- lsls r1, r5, 24
- mov r10, r1
- cmp r0, 0
- beq _0800F35C
- ldr r2, =0x00000cee
- adds r0, r6, r2
- adds r1, r5, r0
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0800F2E0
- adds r0, r6, 0
- adds r0, 0x14
- adds r0, r4, r0
- ldrb r2, [r0]
- lsrs r2, 5
- ldrb r0, [r1]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- cmp r2, r0
- beq _0800F2E0
- ldr r0, =0x00000cea
- adds r1, r6, r0
- adds r1, r5, r1
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _0800F35C
- movs r0, 0x81
- lsls r0, 8
- bl sub_8011170
- b _0800F35C
- .pool
-_0800F2E0:
- ldr r2, =gUnknown_03005000
- ldr r6, =0x00000cee
- adds r1, r2, r6
- adds r1, r5, r1
- subs r3, r5
- lsls r3, 1
- adds r4, r2, 0
- adds r4, 0x14
- adds r2, r3, r4
- ldrb r0, [r2]
- lsrs r0, 5
- strb r0, [r1]
- ldr r1, =gUnknown_03005000
- subs r6, 0x4
- adds r0, r1, r6
- adds r0, r5, r0
- movs r1, 0
- strb r1, [r0]
- ldrb r1, [r2]
- movs r0, 0x1F
- ands r0, r1
- strb r0, [r2]
- ldr r2, =gUnknown_03005CDE
- adds r0, r5, r2
- ldrb r0, [r0]
- movs r6, 0
- lsls r1, r5, 24
- mov r10, r1
- lsrs r2, r7, 1
- str r2, [sp, 0x4]
- adds r5, 0x1
- str r5, [sp]
- ldr r1, =gRecvCmds
- mov r9, r1
- adds r5, r3, 0
- adds r7, r4, 0
- lsls r0, 4
- mov r8, r0
- adds r2, r5, 0x1
- mov r12, r2
-_0800F330:
- lsls r1, r6, 1
- mov r0, r8
- adds r4, r1, r0
- add r4, r9
- mov r2, r12
- adds r3, r1, r2
- adds r3, r7
- ldrb r2, [r3]
- lsls r2, 8
- adds r1, r5
- adds r1, r7
- ldrb r0, [r1]
- orrs r0, r2
- strh r0, [r4]
- movs r0, 0
- strb r0, [r3]
- strb r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x6
- bls _0800F330
-_0800F35C:
- mov r1, r10
- lsrs r0, r1, 24
- bl rfu_UNI_clearRecvNewDataFlag
-_0800F364:
- ldr r2, [sp, 0x4]
- lsls r0, r2, 16
- lsrs r7, r0, 16
- ldr r6, [sp]
- lsls r0, r6, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bhi _0800F376
- b _0800F252
-_0800F376:
- bl sub_800F014
- movs r0, 0
- bl sub_800F86C
- bl sub_8010528
- ldr r4, =gUnknown_03005000
- ldr r1, =0x00000ce5
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800F452
- ldr r2, =0x00000cd9
- adds r0, r4, r2
- ldrb r2, [r0]
- cmp r2, 0
- bne _0800F452
- ldr r0, =gUnknown_02022B44
- ldrb r1, [r0, 0xE]
- strb r2, [r0, 0xE]
- ldr r6, =0x00000cda
- adds r0, r4, r6
- ldrb r1, [r0]
- movs r0, 0x3
- bl rfu_clearSlot
- movs r5, 0
- adds r7, r4, 0
- adds r7, 0x14
-_0800F3B2:
- ldr r0, =0x00000ce5
- adds r6, r4, r0
- ldrb r0, [r6]
- asrs r0, r5
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0800F3D6
- lsls r1, r5, 24
- lsrs r1, 24
- lsls r2, r5, 3
- subs r2, r5
- lsls r2, 1
- adds r2, r7
- movs r0, 0x10
- movs r3, 0xE
- bl rfu_setRecvBuffer
-_0800F3D6:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _0800F3B2
- subs r4, r6, 0x3
- ldrb r0, [r4]
- ldrb r2, [r6]
- adds r1, r0, 0
- orrs r1, r2
- bl sub_800E88C
- ldrb r1, [r6]
- movs r2, 0
- strb r1, [r6, 0x4]
- ldrb r0, [r4]
- orrs r0, r1
- strb r0, [r4]
- strb r2, [r6]
- ldrb r0, [r4]
- adds r1, r6, 0
- subs r1, 0x5E
- movs r2, 0x46
- bl rfu_UNI_setSendData
- ldrb r0, [r4]
- bl sub_800E87C
- adds r1, r6, 0
- subs r1, 0xB
- strb r0, [r1]
- ldr r0, =sub_8010AAC
- movs r1, 0
- bl CreateTask
- b _0800F452
- .pool
-_0800F444:
- ldr r2, =0x00000cdc
- adds r1, r4, r2
- ldrb r0, [r1]
- movs r2, 0
- movs r0, 0x1
- strb r0, [r1]
- strb r2, [r4, 0xE]
-_0800F452:
- ldr r1, =gUnknown_03005000
- movs r0, 0
- strb r0, [r1, 0xE]
- adds r6, r1, 0
-_0800F45A:
- ldr r1, =0x00000cdc
- adds r0, r6, r1
- ldrb r0, [r0]
- adds r1, r0, 0
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- beq _0800F484
- movs r0, 0x1
- ands r0, r1
- b _0800F486
- .pool
-_0800F480:
- movs r0, 0
- b _0800F486
-_0800F484:
- movs r0, 0
-_0800F486:
- 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 sub_800F1E0
-
- thumb_func_start sub_800F498
-sub_800F498: @ 800F498
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r2, r1, 0
- ldrh r1, [r4]
- cmp r1, 0
- beq _0800F4DC
- ldr r0, =gUnknown_03005000
- movs r5, 0x81
- lsls r5, 1
- adds r3, r0, r5
- ldrb r0, [r3]
- lsls r0, 5
- orrs r0, r1
- strh r0, [r4]
- ldrb r0, [r3]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- strb r0, [r3]
- adds r3, r4, 0
- movs r4, 0x6
-_0800F4C2:
- ldrh r1, [r3]
- lsrs r0, r1, 8
- strb r0, [r2, 0x1]
- strb r1, [r2]
- adds r2, 0x2
- adds r3, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _0800F4C2
- b _0800F4EA
- .pool
-_0800F4DC:
- movs r1, 0
- adds r0, r2, 0
- adds r0, 0xD
-_0800F4E2:
- strb r1, [r0]
- subs r0, 0x1
- cmp r0, r2
- bge _0800F4E2
-_0800F4EA:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_800F498
-
- thumb_func_start sub_800F4F0
-sub_800F4F0: @ 800F4F0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x58
- ldr r0, =gUnknown_03005124
- mov r1, sp
- bl sub_800D934
- movs r1, 0
- ldr r0, =gRecvCmds
- mov r12, r0
-_0800F506:
- movs r4, 0
- lsls r0, r1, 3
- adds r2, r1, 0x1
- mov r8, r2
- lsls r6, r1, 4
- subs r0, r1
- lsls r5, r0, 1
-_0800F514:
- lsls r1, r4, 1
- adds r3, r1, r6
- add r3, r12
- adds r1, r5, r1
- adds r0, r1, 0x1
- add r0, sp
- ldrb r2, [r0]
- lsls r2, 8
- mov r7, sp
- adds r0, r7, r1
- ldrb r0, [r0]
- orrs r0, r2
- strh r0, [r3]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bls _0800F514
- mov r1, r8
- lsls r0, r1, 24
- lsrs r1, r0, 24
- cmp r1, 0x4
- bls _0800F506
- movs r0, 0
- bl sub_800F86C
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- bne _0800F5C0
- ldr r0, =gUnknown_03005000
- ldr r2, =0x00000ce4
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800F5C0
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- orrs r0, r1
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0800F58C
- cmp r0, 0x6
- beq _0800F58C
- cmp r0, 0x9
- beq _0800F58C
- movs r1, 0x90
- lsls r1, 8
- movs r0, 0x2
- bl sub_8011A64
-_0800F58C:
- bl rfu_clearAllSlot
- ldr r1, =gReceivedRemoteLinkPlayers
- movs r0, 0
- strb r0, [r1]
- ldr r0, =gUnknown_03005000
- movs r5, 0
- str r5, [r0]
- ldr r7, =0x00000ce4
- adds r6, r0, r7
- ldrb r0, [r6]
- cmp r0, 0x1
- bne _0800F5B8
- movs r4, 0x90
- lsls r4, 8
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_8011A64
- adds r0, r4, 0
- bl sub_8011170
-_0800F5B8:
- ldr r0, =gUnknown_03004140
- strb r5, [r0, 0x5]
- strb r5, [r0, 0x4]
- strb r5, [r6]
-_0800F5C0:
- ldr r6, =gUnknown_03005000
- movs r0, 0xCD
- lsls r0, 4
- adds r2, r6, r0
- ldrb r0, [r2]
- cmp r0, 0
- beq _0800F604
- ldrb r0, [r2]
- subs r0, 0x1
- ldrb r1, [r2]
- strb r0, [r2]
- bl sub_8010528
- ldr r5, =gSendCmd
- add r4, sp, 0x48
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_800F498
- ldr r1, =0x000009e8
- adds r0, r6, r1
- adds r1, r4, 0
- bl sub_800D888
- movs r1, 0
- movs r2, 0
-_0800F5F4:
- lsls r0, r1, 1
- adds r0, r5
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x6
- bls _0800F5F4
-_0800F604:
- bl sub_800F0B8
- add sp, 0x58
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800F4F0
-
- thumb_func_start sub_800F638
-sub_800F638: @ 800F638
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, =gUnknown_03005000
- ldr r2, [r0, 0x70]
- mov r10, r2
- movs r5, 0
- adds r2, r0, 0
- adds r2, 0x6E
- ldrh r3, [r2]
- cmp r5, r3
- bge _0800F6D4
- mov r9, r0
- ldr r0, =gUnknown_03000D90
- mov r8, r0
-_0800F65A:
- movs r0, 0x1
- ands r0, r1
- lsrs r7, r1, 1
- adds r6, r5, 0x1
- cmp r0, 0
- bne _0800F6C8
- ldr r1, =0xffff8900
- adds r0, r1, 0
- adds r1, r5, 0
- orrs r1, r0
- mov r2, r8
- strh r1, [r2]
- movs r4, 0
- lsls r0, r5, 1
- ldr r3, =gUnknown_03000D80
- mov r12, r3
- adds r0, r5
- lsls r0, 2
- mov r1, r10
- adds r2, r0, r1
- mov r3, r8
- adds r3, 0x2
-_0800F686:
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- ldrb r0, [r2]
- orrs r0, r1
- strh r0, [r3]
- adds r2, 0x2
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _0800F686
- movs r4, 0
- ldr r2, =gUnknown_03000D90
- ldr r1, =gUnknown_03000D80
-_0800F6A0:
- ldrh r0, [r2]
- lsrs r0, 8
- strb r0, [r1, 0x1]
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _0800F6A0
- ldr r0, =gUnknown_030059E8
- mov r1, r12
- bl sub_800D888
- movs r1, 0x1
- lsls r1, r5
- mov r2, r9
- ldr r0, [r2, 0x78]
- orrs r0, r1
- str r0, [r2, 0x78]
-_0800F6C8:
- adds r1, r7, 0
- adds r5, r6, 0
- ldr r3, =gUnknown_0300506E
- ldrh r3, [r3]
- cmp r5, r3
- blt _0800F65A
-_0800F6D4:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800F638
-
- thumb_func_start sub_800F6FC
-sub_800F6FC: @ 800F6FC
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, =gUnknown_03005000
- ldrb r2, [r0, 0xC]
- cmp r2, 0x1
- bne _0800F71C
- cmp r1, 0
- beq _0800F71C
- adds r0, 0x61
- adds r0, r1, r0
- strb r2, [r0]
- b _0800F724
- .pool
-_0800F71C:
- adds r0, 0x5C
- adds r0, r1, r0
- movs r1, 0x1
- strb r1, [r0]
-_0800F724:
- pop {r0}
- bx r0
- thumb_func_end sub_800F6FC
-
- thumb_func_start sub_800F728
-sub_800F728: @ 800F728
- lsls r0, 24
- lsrs r0, 24
- ldr r3, =gUnknown_03005000
- adds r1, r3, 0
- adds r1, 0x5C
- adds r1, r0, r1
- movs r2, 0
- strb r2, [r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- adds r1, 0x92
- strb r2, [r1]
- bx lr
- .pool
- thumb_func_end sub_800F728
-
- thumb_func_start sub_800F74C
-sub_800F74C: @ 800F74C
- push {r4,r5,lr}
- adds r3, r0, 0
- ldr r0, =gUnknown_03005000
- ldrb r1, [r0, 0xC]
- adds r5, r0, 0
- cmp r1, 0x1
- bne _0800F764
- movs r0, 0
- b _0800F786
- .pool
-_0800F764:
- movs r2, 0
- ldr r0, =0x00000cde
- adds r4, r5, r0
-_0800F76A:
- adds r1, r2, r4
- adds r0, r3, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0800F76A
- ldr r1, =0x00000c3e
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r0, r3
- ldrb r0, [r0]
-_0800F786:
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800F74C
-
- thumb_func_start rfu_func_080F97B8
-rfu_func_080F97B8: @ 800F794
- push {lr}
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800F7C6
- ldr r3, =gUnknown_03005DA8
- ldrh r2, [r3]
- cmp r2, 0
- beq _0800F7C6
- ldr r0, =gUnknown_030022B4
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0800F7C6
- ldr r1, =gUnknown_03000D78
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldrb r0, [r1]
- lsls r0, 8
- orrs r0, r2
- strh r0, [r3]
- movs r0, 0xBE
- lsls r0, 8
- bl sub_800FD14
-_0800F7C6:
- pop {r0}
- bx r0
- .pool
- thumb_func_end rfu_func_080F97B8
-
- thumb_func_start sub_800F7DC
-sub_800F7DC: @ 800F7DC
- ldr r0, =gUnknown_02022B14
- bx lr
- .pool
- thumb_func_end sub_800F7DC
-
- thumb_func_start sub_800F7E4
-sub_800F7E4: @ 800F7E4
- push {lr}
- movs r2, 0
- ldr r0, =gUnknown_03005000
- ldr r1, [r0]
- ldr r0, =rfu_func_080F97B8
- cmp r1, r0
- bne _0800F7F4
- movs r2, 0x1
-_0800F7F4:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800F7E4
-
- thumb_func_start sub_800F804
-sub_800F804: @ 800F804
- ldr r1, =gUnknown_03005000
- ldr r0, =rfu_func_080F97B8
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_800F804
-
- thumb_func_start Rfu_set_zero
-Rfu_set_zero: @ 800F814
- ldr r1, =gUnknown_03005000
- movs r0, 0
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end Rfu_set_zero
-
- thumb_func_start sub_800F820
-sub_800F820: @ 800F820
- push {lr}
- movs r0, 0x88
- lsls r0, 7
- bl sub_800FD14
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- bne _0800F83C
- bl GetBlenderArrowPosition
- ldr r1, =gSendCmd
- strh r0, [r1, 0xC]
-_0800F83C:
- ldr r1, =gUnknown_020223C0
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800F820
-
- thumb_func_start sub_800F850
-sub_800F850: @ 800F850
- push {lr}
- ldr r1, =gUnknown_03005000
- ldr r0, [r1]
- cmp r0, 0
- bne _0800F85E
- ldr r0, =sub_800F820
- str r0, [r1]
-_0800F85E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800F850
-
- thumb_func_start sub_800F86C
-sub_800F86C: @ 800F86C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r8, r0
-_0800F87A:
- mov r1, r8
- lsls r0, r1, 4
- ldr r2, =gRecvCmds
- adds r1, r0, r2
- ldrh r7, [r1]
- movs r3, 0xFF
- lsls r3, 8
- adds r1, r3, 0
- ands r1, r7
- movs r2, 0x88
- lsls r2, 8
- adds r5, r0, 0
- cmp r1, r2
- beq _0800F960
- cmp r1, r2
- bgt _0800F8D6
- movs r0, 0xCC
- lsls r0, 7
- cmp r1, r0
- bne _0800F8A4
- b _0800FAE0
-_0800F8A4:
- cmp r1, r0
- bgt _0800F8C4
- movs r0, 0x88
- lsls r0, 7
- cmp r1, r0
- bne _0800F8B2
- b _0800FBF4
-_0800F8B2:
- movs r0, 0xBE
- lsls r0, 7
- cmp r1, r0
- bne _0800F8BC
- b _0800FAD0
-_0800F8BC:
- b _0800FC04
- .pool
-_0800F8C4:
- movs r0, 0xEE
- lsls r0, 7
- cmp r1, r0
- beq _0800F920
- movs r0, 0xF0
- lsls r0, 7
- cmp r1, r0
- beq _0800F90E
- b _0800FC04
-_0800F8D6:
- movs r0, 0xBE
- lsls r0, 8
- cmp r1, r0
- bne _0800F8E0
- b _0800FBF4
-_0800F8E0:
- cmp r1, r0
- bgt _0800F8F8
- movs r0, 0x89
- lsls r0, 8
- cmp r1, r0
- beq _0800F9C8
- movs r0, 0xA1
- lsls r0, 8
- cmp r1, r0
- bne _0800F8F6
- b _0800FAAC
-_0800F8F6:
- b _0800FC04
-_0800F8F8:
- movs r0, 0xED
- lsls r0, 8
- cmp r1, r0
- bne _0800F902
- b _0800FB10
-_0800F902:
- movs r0, 0xEE
- lsls r0, 8
- cmp r1, r0
- bne _0800F90C
- b _0800FBB0
-_0800F90C:
- b _0800FC04
-_0800F90E:
- ldr r4, =gUnknown_03005000
- ldrb r0, [r4, 0xC]
- cmp r0, 0
- bne _0800F920
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800F920
- b _0800FC50
-_0800F920:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- mov r6, r8
- adds r6, 0x1
- cmp r0, 0
- beq _0800F930
- b _0800FC08
-_0800F930:
- ldr r1, =gUnknown_03003092
- adds r0, r5, r1
- ldrh r0, [r0]
- ldr r2, =gUnknown_03005000
- strb r0, [r2, 0xD]
- ldr r3, =gUnknown_03003094
- adds r0, r5, r3
- bl sub_800F74C
- ldr r4, =gUnknown_03005CCE
- strb r0, [r4]
- b _0800FC08
- .pool
-_0800F960:
- ldr r0, =gUnknown_03005000
- mov r9, r0
- mov r1, r8
- lsls r0, r1, 2
- add r0, r8
- lsls r7, r0, 2
- mov r2, r9
- adds r3, r7, r2
- movs r4, 0x92
- adds r4, r3
- mov r12, r4
- ldrb r4, [r4]
- mov r6, r8
- adds r6, 0x1
- cmp r4, 0
- beq _0800F982
- b _0800FC08
-_0800F982:
- adds r0, r3, 0
- adds r0, 0x80
- movs r2, 0
- strh r4, [r0]
- ldr r1, =gUnknown_03003092
- adds r0, r5, r1
- ldrh r0, [r0]
- adds r1, r3, 0
- adds r1, 0x82
- strh r0, [r1]
- ldr r1, =gUnknown_03003094
- adds r0, r5, r1
- ldrh r1, [r0]
- adds r0, r3, 0
- adds r0, 0x91
- strb r1, [r0]
- mov r0, r9
- adds r0, 0x88
- adds r0, r7, r0
- str r4, [r0]
- movs r0, 0x1
- mov r3, r12
- strb r0, [r3]
- mov r0, r9
- adds r0, 0x5C
- add r0, r8
- strb r2, [r0]
- b _0800FC08
- .pool
-_0800F9C8:
- ldr r4, =gUnknown_03005000
- mov r9, r4
- mov r0, r8
- lsls r1, r0, 2
- adds r0, r1, r0
- lsls r4, r0, 2
- mov r3, r9
- adds r2, r4, r3
- adds r0, r2, 0
- adds r0, 0x92
- ldrb r3, [r0]
- mov r10, r1
- mov r6, r8
- adds r6, 0x1
- cmp r3, 0x1
- beq _0800F9EA
- b _0800FC08
-_0800F9EA:
- movs r0, 0xFF
- ands r0, r7
- adds r2, 0x80
- strh r0, [r2]
- mov r1, r9
- adds r1, 0x88
- adds r1, r4, r1
- lsls r3, r0
- ldr r0, [r1]
- orrs r0, r3
- str r0, [r1]
- movs r4, 0
- ldr r0, =gBlockRecvBuffer
- mov r9, r0
- mov r12, r2
- mov r1, r8
- lsls r7, r1, 8
- adds r3, r5, 0
-_0800FA0E:
- mov r2, r12
- ldrh r0, [r2]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- adds r1, r4
- lsls r1, 1
- adds r1, r7
- add r1, r9
- adds r2, r4, 0x1
- lsls r0, r2, 1
- adds r0, r3
- ldr r4, =gRecvCmds
- adds r0, r4
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r2, 16
- lsrs r4, r2, 16
- cmp r4, 0x5
- bls _0800FA0E
- ldr r4, =gUnknown_03005000
- mov r0, r10
- add r0, r8
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x88
- adds r1, r0, r1
- adds r2, r0, r4
- adds r0, r2, 0
- adds r0, 0x82
- ldrh r0, [r0]
- lsls r0, 2
- ldr r3, =gUnknown_082ED628
- adds r0, r3
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- beq _0800FA5C
- b _0800FC08
-_0800FA5C:
- adds r1, r2, 0
- adds r1, 0x92
- movs r0, 0x2
- strb r0, [r1]
- mov r1, r8
- lsls r0, r1, 24
- lsrs r0, 24
- bl sub_800F6FC
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- beq _0800FA7E
- b _0800FC08
-_0800FA7E:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800FA88
- b _0800FC08
-_0800FA88:
- ldrb r0, [r4, 0xC]
- cmp r0, 0
- beq _0800FA90
- b _0800FC08
-_0800FA90:
- ldr r0, =gBlockRecvBuffer
- bl sub_8010A70
- b _0800FC08
- .pool
-_0800FAAC:
- ldr r2, =gUnknown_082ED6B8
- ldr r3, =gUnknown_03003092
- adds r0, r5, r3
- ldrh r1, [r0]
- lsls r1, 3
- adds r0, r1, r2
- ldr r0, [r0]
- adds r2, 0x4
- adds r1, r2
- ldrh r1, [r1]
- bl sub_800FE84
- b _0800FC04
- .pool
-_0800FAD0:
- ldr r1, =gUnknown_030050E4
- add r1, r8
- movs r0, 0x1
- strb r0, [r1]
- b _0800FC04
- .pool
-_0800FAE0:
- ldr r2, =gUnknown_03005000
- movs r4, 0x80
- lsls r4, 1
- adds r0, r2, r4
- ldr r3, =gUnknown_03003092
- adds r1, r5, r3
- ldrh r0, [r0]
- mov r6, r8
- adds r6, 0x1
- ldrh r1, [r1]
- cmp r0, r1
- beq _0800FAFA
- b _0800FC08
-_0800FAFA:
- adds r0, r2, 0
- adds r0, 0xE9
- add r0, r8
- movs r1, 0x1
- strb r1, [r0]
- b _0800FC08
- .pool
-_0800FB10:
- ldr r7, =gUnknown_03005000
- ldrb r2, [r7, 0xC]
- cmp r2, 0
- bne _0800FB78
- ldr r3, =gReceivedRemoteLinkPlayers
- ldrb r0, [r3]
- mov r6, r8
- adds r6, 0x1
- cmp r0, 0
- beq _0800FC08
- ldr r0, =gUnknown_03003092
- adds r4, r5, r0
- ldrh r1, [r4]
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0, 0x2]
- ands r1, r0
- cmp r1, 0
- beq _0800FB48
- strb r2, [r3]
- bl sub_800D630
- ldr r1, =gUnknown_03003094
- adds r0, r5, r1
- ldrh r1, [r0]
- ldr r2, =0x00000ce4
- adds r0, r7, r2
- strb r1, [r0]
-_0800FB48:
- ldr r0, =gRecvCmds
- adds r0, 0x6
- adds r0, r5, r0
- ldrh r0, [r0]
- strb r0, [r7, 0xD]
- ldrh r0, [r4]
- bl sub_80109E8
- b _0800FC08
- .pool
-_0800FB78:
- movs r0, 0xEE
- lsls r0, 8
- bl sub_800FD14
- ldr r1, =gSendCmd
- ldr r3, =gUnknown_03003092
- adds r0, r5, r3
- ldrh r0, [r0]
- strh r0, [r1, 0x2]
- ldr r4, =gUnknown_03003094
- adds r0, r5, r4
- ldrh r0, [r0]
- strh r0, [r1, 0x4]
- ldr r0, =gRecvCmds
- adds r0, 0x6
- adds r0, r5, r0
- ldrh r0, [r0]
- strh r0, [r1, 0x6]
- b _0800FC04
- .pool
-_0800FBB0:
- ldr r4, =gUnknown_03005000
- ldrb r0, [r4, 0xC]
- mov r6, r8
- adds r6, 0x1
- cmp r0, 0x1
- bne _0800FC44
- ldr r0, =0x00000ce3
- adds r2, r4, r0
- ldr r1, =gUnknown_03003092
- adds r3, r5, r1
- ldrb r1, [r3]
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, =gUnknown_03003094
- adds r0, r5, r2
- ldrh r1, [r0]
- ldr r2, =0x00000ce4
- adds r0, r4, r2
- strb r1, [r0]
- ldrh r0, [r3]
- bl sub_80109E8
- b _0800FC08
- .pool
-_0800FBF4:
- ldr r0, =gUnknown_03003020
- mov r3, r8
- lsls r1, r3, 1
- adds r1, r0
- ldr r4, =gUnknown_03003092
- adds r0, r5, r4
- ldrh r0, [r0]
- strh r0, [r1]
-_0800FC04:
- mov r6, r8
- adds r6, 0x1
-_0800FC08:
- ldr r3, =gUnknown_03005000
- ldrb r4, [r3, 0xC]
- cmp r4, 0x1
- bne _0800FC44
- adds r0, r3, 0
- adds r0, 0x61
- mov r1, r8
- adds r2, r1, r0
- ldrb r0, [r2]
- adds r1, r0, 0
- cmp r1, 0
- beq _0800FC44
- cmp r1, 0x4
- bne _0800FC40
- adds r0, r3, 0
- adds r0, 0x5C
- add r0, r8
- movs r1, 0
- strb r4, [r0]
- strb r1, [r2]
- b _0800FC44
- .pool
-_0800FC40:
- adds r0, 0x1
- strb r0, [r2]
-_0800FC44:
- lsls r0, r6, 16
- lsrs r0, 16
- mov r8, r0
- cmp r0, 0x4
- bhi _0800FC50
- b _0800F87A
-_0800FC50:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_800F86C
-
- thumb_func_start sub_800FC60
-sub_800FC60: @ 800FC60
- push {lr}
- movs r2, 0
- ldr r0, =gUnknown_03005000
- adds r1, r0, 0
- adds r1, 0x92
-_0800FC6A:
- ldrb r0, [r1]
- cmp r0, 0
- beq _0800FC78
- movs r0, 0
- b _0800FC82
- .pool
-_0800FC78:
- adds r1, 0x14
- adds r2, 0x1
- cmp r2, 0x4
- ble _0800FC6A
- movs r0, 0x1
-_0800FC82:
- pop {r1}
- bx r1
- thumb_func_end sub_800FC60
-
- thumb_func_start sub_800FC88
-sub_800FC88: @ 800FC88
- push {r4,lr}
- movs r1, 0
- ldr r2, =gUnknown_03005000
- ldrb r0, [r2, 0xD]
- cmp r1, r0
- bge _0800FCBC
- adds r4, r0, 0
- adds r3, r2, 0
- adds r3, 0x92
- adds r2, 0x5C
-_0800FC9C:
- ldrb r0, [r3]
- cmp r0, 0x2
- bne _0800FCAA
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0800FCB4
-_0800FCAA:
- movs r0, 0
- b _0800FCBE
- .pool
-_0800FCB4:
- adds r3, 0x14
- adds r1, 0x1
- cmp r1, r4
- blt _0800FC9C
-_0800FCBC:
- movs r0, 0x1
-_0800FCBE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_800FC88
-
- thumb_func_start sub_800FCC4
-sub_800FCC4: @ 800FCC4
- movs r2, 0
- movs r1, 0
- strh r1, [r0]
- strh r1, [r0, 0x2]
- str r1, [r0, 0x4]
- str r1, [r0, 0x8]
- strb r2, [r0, 0x10]
- strb r2, [r0, 0x11]
- strb r2, [r0, 0x12]
- bx lr
- thumb_func_end sub_800FCC4
-
- thumb_func_start sub_800FCD8
-sub_800FCD8: @ 800FCD8
- push {r4,lr}
- movs r2, 0
- movs r1, 0
- ldr r0, =gUnknown_03005000
- adds r3, r0, 0
- adds r3, 0x92
- adds r4, r0, 0
- adds r4, 0x5C
-_0800FCE8:
- ldrb r0, [r3]
- cmp r0, 0x2
- bne _0800FCFE
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0800FCFE
- lsls r0, r1
- orrs r2, r0
- lsls r0, r2, 24
- lsrs r2, r0, 24
-_0800FCFE:
- adds r3, 0x14
- adds r1, 0x1
- cmp r1, 0x4
- ble _0800FCE8
- adds r0, r2, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800FCD8
-
- thumb_func_start sub_800FD14
-sub_800FD14: @ 800FD14
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r5, =gSendCmd
- strh r1, [r5]
- movs r0, 0xF0
- lsls r0, 7
- adds r4, r5, 0
- cmp r1, r0
- beq _0800FDB0
- cmp r1, r0
- bgt _0800FD62
- movs r0, 0xBE
- lsls r0, 7
- cmp r1, r0
- beq _0800FE00
- cmp r1, r0
- bgt _0800FD50
- movs r0, 0xBC
- lsls r0, 6
- cmp r1, r0
- beq _0800FE20
- movs r0, 0x88
- lsls r0, 7
- cmp r1, r0
- beq _0800FE14
- b _0800FE46
- .pool
-_0800FD50:
- movs r0, 0xCC
- lsls r0, 7
- cmp r1, r0
- beq _0800FE00
- movs r0, 0xEE
- lsls r0, 7
- cmp r1, r0
- beq _0800FDB0
- b _0800FE46
-_0800FD62:
- movs r0, 0xBE
- lsls r0, 8
- cmp r1, r0
- beq _0800FE40
- cmp r1, r0
- bgt _0800FE46
- movs r0, 0x88
- lsls r0, 8
- cmp r1, r0
- beq _0800FD80
- movs r0, 0xA1
- lsls r0, 8
- cmp r1, r0
- beq _0800FD98
- b _0800FE46
-_0800FD80:
- ldr r0, =gUnknown_03005000
- adds r1, r0, 0
- adds r1, 0x6E
- ldrh r1, [r1]
- strh r1, [r5, 0x2]
- adds r0, 0x7D
- ldrb r0, [r0]
- adds r0, 0x80
- strh r0, [r5, 0x4]
- b _0800FE46
- .pool
-_0800FD98:
- bl sub_800FC60
- lsls r0, 24
- cmp r0, 0
- beq _0800FE46
- ldr r0, =gUnknown_03005000
- adds r0, 0x5A
- ldrb r0, [r0]
- b _0800FE44
- .pool
-_0800FDB0:
- ldr r3, =gUnknown_03005000
- ldr r1, =0x00000ce2
- adds r0, r3, r1
- ldr r2, =0x00000ce3
- adds r1, r3, r2
- ldrb r2, [r0]
- ldrb r0, [r1]
- eors r0, r2
- ldr r1, =gUnknown_082ED695
- adds r0, r1
- ldrb r0, [r0]
- adds r0, 0x1
- strb r0, [r3, 0xD]
- ldrb r0, [r3, 0xD]
- strh r0, [r4, 0x2]
- adds r2, r4, 0x4
- movs r4, 0
- ldr r0, =0x00000cde
- adds r3, r0
-_0800FDD6:
- adds r1, r2, r4
- adds r0, r4, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0800FDD6
- b _0800FE46
- .pool
-_0800FE00:
- ldr r0, =gUnknown_03005000
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4, 0x2]
- b _0800FE46
- .pool
-_0800FE14:
- strh r1, [r5]
- ldr r0, =gMain
- ldrh r0, [r0, 0x2C]
- b _0800FE44
- .pool
-_0800FE20:
- movs r4, 0
- ldr r3, =gUnknown_030050F2
-_0800FE24:
- adds r2, r4, 0x1
- lsls r1, r2, 1
- adds r1, r5
- lsls r0, r4, 1
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0x5
- bls _0800FE24
- b _0800FE46
- .pool
-_0800FE40:
- ldr r0, =gUnknown_03005DA8
- ldrh r0, [r0]
-_0800FE44:
- strh r0, [r5, 0x2]
-_0800FE46:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800FD14
-
- thumb_func_start sub_800FE50
-sub_800FE50: @ 800FE50
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _0800FE76
- bl sub_8011A80
- cmp r0, 0
- bne _0800FE76
- ldr r0, =gUnknown_030050F2
- adds r1, r4, 0
- movs r2, 0xC
- bl memcpy
- movs r0, 0xBC
- lsls r0, 6
- bl sub_800FD14
-_0800FE76:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800FE50
-
- thumb_func_start sub_800FE84
-@ bool8 sub_800FE84(u32 a1, u32 size)
-sub_800FE84: @ 800FE84
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- adds r6, r1, 0
- ldr r5, =gUnknown_03005000
- ldr r0, [r5]
- cmp r0, 0
- bne _0800FEB8
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _0800FEB8
- movs r0, 0x7C
- adds r0, r5
- mov r9, r0
- ldrb r1, [r0]
- mov r8, r1
- cmp r1, 0
- beq _0800FEC8
- ldr r1, =gUnknown_02022B44
- adds r1, 0x83
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0800FEB8:
- movs r0, 0
- b _0800FF32
- .pool
-_0800FEC8:
- adds r0, r6, 0
- movs r1, 0xC
- bl __umodsi3
- negs r4, r0
- orrs r4, r0
- lsrs r4, 31
- bl GetMultiplayerId
- adds r1, r5, 0
- adds r1, 0x7D
- strb r0, [r1]
- movs r0, 0x1
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0xC
- bl __udivsi3
- adds r0, r4
- adds r1, r5, 0
- adds r1, 0x6E
- strh r0, [r1]
- adds r0, r5, 0
- adds r0, 0x6C
- mov r1, r8
- strh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- cmp r6, r0
- bls _0800FF0A
- str r7, [r5, 0x70]
- b _0800FF1C
-_0800FF0A:
- ldr r4, =gBlockSendBuffer
- cmp r7, r4
- beq _0800FF1A
- adds r0, r4, 0
- adds r1, r7, 0
- adds r2, r6, 0
- bl memcpy
-_0800FF1A:
- str r4, [r5, 0x70]
-_0800FF1C:
- movs r0, 0x88
- lsls r0, 8
- bl sub_800FD14
- ldr r0, =gUnknown_03005000
- ldr r1, =rfufunc_80F9F44
- str r1, [r0]
- adds r0, 0x5B
- movs r1, 0
- strb r1, [r0]
- movs r0, 0x1
-_0800FF32:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_800FE84
-
- thumb_func_start rfufunc_80F9F44
-rfufunc_80F9F44: @ 800FF4C
- push {r4,r5,lr}
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _0800FFA0
- movs r5, 0x88
- lsls r5, 8
- adds r0, r5, 0
- bl sub_800FD14
- ldr r4, =gUnknown_03005000
- ldrb r0, [r4, 0xC]
- cmp r0, 0x1
- bne _0800FF84
- adds r1, r4, 0
- adds r1, 0x5B
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bls _0800FFA0
- b _0800FF9C
- .pool
-_0800FF84:
- bl GetMultiplayerId
- ldr r1, =gRecvCmds
- lsls r0, 24
- lsrs r0, 20
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- cmp r0, r5
- bne _0800FFA0
-_0800FF9C:
- ldr r0, =sub_800FFB0
- str r0, [r4]
-_0800FFA0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end rfufunc_80F9F44
-
- thumb_func_start sub_800FFB0
-sub_800FFB0: @ 800FFB0
- push {r4-r6,lr}
- ldr r0, =gUnknown_03005000
- mov r12, r0
- ldr r5, [r0, 0x70]
- ldr r3, =gSendCmd
- mov r2, r12
- adds r2, 0x6C
- ldrh r1, [r2]
- movs r4, 0x89
- lsls r4, 8
- adds r0, r4, 0
- orrs r0, r1
- strh r0, [r3]
- movs r4, 0
- adds r6, r2, 0
- adds r3, 0x2
-_0800FFD0:
- lsls r2, r4, 1
- ldrh r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- ldrb r0, [r0]
- orrs r0, r1
- strh r0, [r3]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _0800FFD0
- mov r0, r12
- adds r0, 0x6C
- ldrh r1, [r0]
- adds r1, 0x1
- strh r1, [r0]
- adds r0, 0x2
- ldrh r0, [r0]
- lsls r1, 16
- lsrs r1, 16
- cmp r0, r1
- bhi _08010014
- mov r0, r12
- adds r0, 0x7C
- movs r1, 0
- strb r1, [r0]
- ldr r0, =rfufunc_80FA020
- mov r1, r12
- str r0, [r1]
-_08010014:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800FFB0
-
- thumb_func_start rfufunc_80FA020
-rfufunc_80FA020: @ 8010028
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r5, =gUnknown_03005000
- ldr r0, [r5, 0x70]
- mov r8, r0
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r5, 0xC]
- cmp r0, 0
- bne _080100F0
- ldr r3, =gSendCmd
- adds r2, r5, 0
- adds r2, 0x6E
- ldrh r0, [r2]
- subs r0, 0x1
- ldr r4, =0xffff8900
- adds r1, r4, 0
- orrs r0, r1
- strh r0, [r3]
- movs r4, 0
- mov r9, r5
- ldr r0, =gRecvCmds
- mov r12, r0
- lsls r5, r6, 4
- adds r7, r2, 0
- adds r3, 0x2
-_08010064:
- lsls r2, r4, 1
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- add r0, r8
- adds r1, r0, 0
- subs r1, 0xB
- ldrb r1, [r1]
- lsls r1, 8
- subs r0, 0xC
- ldrb r0, [r0]
- orrs r0, r1
- strh r0, [r3]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _08010064
- mov r1, r12
- adds r0, r5, r1
- ldrb r1, [r0]
- mov r3, r9
- adds r0, r3, 0
- adds r0, 0x6E
- ldrh r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _080100F4
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x88
- adds r1, r0, r1
- ldr r2, =gUnknown_082ED628
- adds r0, r3
- adds r0, 0x82
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- beq _080100E8
- adds r0, r6, 0
- bl sub_800F638
- ldr r1, =gUnknown_02022B44
- adds r1, 0x64
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _080100F4
- .pool
-_080100E8:
- movs r0, 0
- mov r4, r9
- str r0, [r4]
- b _080100F4
-_080100F0:
- movs r0, 0
- str r0, [r5]
-_080100F4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end rfufunc_80FA020
-
- thumb_func_start sub_8010100
-sub_8010100: @ 8010100
- push {lr}
- ldr r1, =gUnknown_03005000
- adds r1, 0x5A
- strb r0, [r1]
- movs r0, 0xA1
- lsls r0, 8
- bl sub_800FD14
- movs r0, 0x1
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8010100
-
- thumb_func_start sub_801011C
-sub_801011C: @ 801011C
- push {lr}
- bl rfu_clearAllSlot
- bl sub_800C048
- ldr r1, =gReceivedRemoteLinkPlayers
- movs r0, 0
- strb r0, [r1]
- ldr r2, =gUnknown_03005000
- adds r3, r2, 0
- adds r3, 0xEF
- movs r1, 0
- movs r0, 0x1
- strb r0, [r3]
- str r1, [r2]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801011C
-
- thumb_func_start sub_8010148
-sub_8010148: @ 8010148
- push {lr}
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- orrs r0, r1
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- bl sub_801011C
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010148
-
- thumb_func_start sub_8010168
-sub_8010168: @ 8010168
- push {r4,lr}
- ldr r4, =gUnknown_03005000
- ldrb r0, [r4, 0xC]
- cmp r0, 0
- bne _08010188
- bl sub_800D630
- ldr r0, =0x00000ce4
- adds r1, r4, r0
- movs r0, 0x2
- strb r0, [r1]
- b _0801018C
- .pool
-_08010188:
- ldr r0, =sub_8010148
- str r0, [r4]
-_0801018C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010168
-
- thumb_func_start sub_8010198
-sub_8010198: @ 8010198
- push {lr}
- bl sub_800D630
- ldr r2, =gUnknown_03005000
- ldr r0, =0x00000ce4
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, =gUnknown_03007890
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- ldrb r1, [r1, 0x3]
- orrs r0, r1
- ldr r1, =0x00000ce3
- adds r2, r1
- strb r0, [r2]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010198
-
- thumb_func_start sub_80101CC
-sub_80101CC: @ 80101CC
- push {r4,r5,lr}
- ldr r0, =gUnknown_03005000
- ldrb r5, [r0, 0xD]
- movs r2, 0
- movs r1, 0
- adds r3, r0, 0
- adds r4, r3, 0
- adds r4, 0xE4
-_080101DC:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _080101E6
- adds r2, 0x1
-_080101E6:
- adds r1, 0x1
- cmp r1, 0x4
- ble _080101DC
- cmp r2, r5
- bne _08010220
- ldr r2, =gBattleTypeFlags
- ldr r0, [r2]
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- str r0, [r2]
- ldrb r0, [r3, 0xC]
- cmp r0, 0
- bne _0801021C
- adds r0, r3, 0
- adds r0, 0xEE
- ldrb r1, [r0]
- movs r1, 0x3
- strb r1, [r0]
- bl sub_8010168
- b _08010220
- .pool
-_0801021C:
- ldr r0, =sub_8010168
- str r0, [r3]
-_08010220:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80101CC
-
- thumb_func_start sub_801022C
-sub_801022C: @ 801022C
- push {r4,lr}
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _0801024E
- ldr r4, =gUnknown_03005000
- ldr r1, =0x00000ce8
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801024E
- movs r0, 0xBE
- lsls r0, 7
- bl sub_800FD14
- ldr r0, =sub_80101CC
- str r0, [r4]
-_0801024E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801022C
-
- thumb_func_start sub_8010264
-sub_8010264: @ 8010264
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r2, =gUnknown_03005000
- ldr r0, [r2]
- cmp r0, 0
- bne _08010284
- ldr r1, =0x00000cd9
- adds r0, r2, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, =sub_801022C
- str r0, [r2]
- adds r0, r3, 0
- bl DestroyTask
-_08010284:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010264
-
- thumb_func_start task_add_05_task_del_08FA224_when_no_RfuFunc
-task_add_05_task_del_08FA224_when_no_RfuFunc: @ 8010294
- push {r4,lr}
- ldr r4, =sub_8010264
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080102AC
- adds r0, r4, 0
- movs r1, 0x5
- bl CreateTask
-_080102AC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_add_05_task_del_08FA224_when_no_RfuFunc
-
- thumb_func_start sub_80102B8
-sub_80102B8: @ 80102B8
- push {r4,r5,lr}
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- beq _080102E6
- ldr r1, =gUnknown_03005000
- ldr r2, =0x000009e6
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r4, r0, 0
- cmp r4, 0
- bne _080102E6
- adds r5, r1, 0
- adds r5, 0xFE
- ldrh r0, [r5]
- cmp r0, 0x3C
- bls _080102E6
- movs r0, 0xCC
- lsls r0, 7
- bl sub_800FD14
- strh r4, [r5]
-_080102E6:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- cmp r1, r2
- bcs _08010312
- ldr r0, =gUnknown_03005000
- adds r3, r0, 0
- adds r3, 0xE9
- ldrb r0, [r3]
- cmp r0, 0
- beq _08010312
-_08010300:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r2
- bcs _08010312
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _08010300
-_08010312:
- ldr r4, =gUnknown_03005000
- cmp r1, r2
- bne _0801033E
- movs r1, 0
- adds r3, r4, 0
- adds r3, 0xE9
- movs r2, 0
-_08010320:
- adds r0, r1, r3
- strb r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x4
- bls _08010320
- movs r1, 0x80
- lsls r1, 1
- adds r0, r4, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strh r1, [r0]
- str r2, [r4]
-_0801033E:
- adds r1, r4, 0
- adds r1, 0xFE
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80102B8
-
- thumb_func_start sub_8010358
-sub_8010358: @ 8010358
- push {r4,lr}
- ldr r4, =gUnknown_03005000
- ldr r1, =0x000009e6
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801037A
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _0801037A
- movs r0, 0xCC
- lsls r0, 7
- bl sub_800FD14
- ldr r0, =sub_80102B8
- str r0, [r4]
-_0801037A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010358
-
- thumb_func_start sub_8010390
-sub_8010390: @ 8010390
- push {r4,lr}
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- beq _080103CC
- ldr r4, =gUnknown_03005000
- ldr r1, =0x000009e6
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801041E
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _0801041E
- movs r0, 0xCC
- lsls r0, 7
- bl sub_800FD14
- ldr r0, =sub_80102B8
- b _0801041C
- .pool
-_080103CC:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0x1
- cmp r1, r2
- bcs _080103FA
- ldr r3, =gUnknown_03005000
- adds r0, r3, 0
- adds r0, 0xEA
- ldrb r0, [r0]
- cmp r0, 0
- beq _080103FA
- adds r3, 0xE9
-_080103E8:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r2
- bcs _080103FA
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _080103E8
-_080103FA:
- cmp r1, r2
- bne _0801041E
- ldr r4, =gUnknown_03005000
- ldr r1, =0x000009e6
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801041E
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _0801041E
- movs r0, 0xCC
- lsls r0, 7
- bl sub_800FD14
- ldr r0, =sub_8010358
-_0801041C:
- str r0, [r4]
-_0801041E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010390
-
- thumb_func_start sub_8010434
-sub_8010434: @ 8010434
- push {lr}
- ldr r1, =gUnknown_03005000
- ldr r2, [r1]
- cmp r2, 0
- bne _08010448
- ldr r0, =sub_8010390
- str r0, [r1]
- adds r0, r1, 0
- adds r0, 0xFE
- strh r2, [r0]
-_08010448:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010434
-
- thumb_func_start sub_8010454
-sub_8010454: @ 8010454
- push {r4,lr}
- adds r3, r0, 0
- ldr r1, =gUnknown_082ED6E0
- ldrh r0, [r1]
- cmp r0, r3
- beq _08010482
- ldr r4, =0x0000ffff
- adds r2, r1, 0
-_08010464:
- ldrh r0, [r2]
- cmp r0, r4
- bne _08010478
- movs r0, 0
- b _08010484
- .pool
-_08010478:
- adds r1, 0x2
- adds r2, 0x2
- ldrh r0, [r1]
- cmp r0, r3
- bne _08010464
-_08010482:
- movs r0, 0x1
-_08010484:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8010454
-
- thumb_func_start sub_801048C
-sub_801048C: @ 801048C
- push {lr}
- cmp r0, 0
- beq _080104A0
- movs r1, 0x96
- lsls r1, 2
- movs r0, 0x1
- bl sub_800D550
- movs r0, 0
- b _080104AC
-_080104A0:
- movs r0, 0
- movs r1, 0
- bl sub_800D550
- lsls r0, 24
- lsrs r0, 24
-_080104AC:
- pop {r1}
- bx r1
- thumb_func_end sub_801048C
-
- thumb_func_start sub_80104B0
-sub_80104B0: @ 80104B0
- push {lr}
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000cd9
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- movs r0, 0
- bl sub_800C27C
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80104B0
-
- thumb_func_start rfu_get_multiplayer_id
-rfu_get_multiplayer_id: @ 80104D0
- push {lr}
- ldr r1, =gUnknown_03005000
- ldrb r0, [r1, 0xC]
- cmp r0, 0x1
- beq _080104EC
- ldr r2, =0x00000cce
- adds r0, r1, r2
- ldrb r0, [r0]
- b _080104EE
- .pool
-_080104EC:
- movs r0, 0
-_080104EE:
- pop {r1}
- bx r1
- thumb_func_end rfu_get_multiplayer_id
-
- thumb_func_start sub_80104F4
-sub_80104F4: @ 80104F4
- ldr r0, =gUnknown_03005000
- ldrb r0, [r0, 0xD]
- bx lr
- .pool
- thumb_func_end sub_80104F4
-
- thumb_func_start sub_8010500
-sub_8010500: @ 8010500
- push {lr}
- ldr r2, =gUnknown_03005000
- adds r0, r2, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _08010518
- movs r0, 0
- b _08010524
- .pool
-_08010518:
- movs r1, 0
- ldr r0, [r2]
- cmp r0, 0
- bne _08010522
- movs r1, 0x1
-_08010522:
- adds r0, r1, 0
-_08010524:
- pop {r1}
- bx r1
- thumb_func_end sub_8010500
-
- thumb_func_start sub_8010528
-sub_8010528: @ 8010528
- push {lr}
- ldr r0, =gUnknown_03005000
- ldr r0, [r0]
- cmp r0, 0
- beq _08010536
- bl _call_via_r0
-_08010536:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010528
-
- thumb_func_start sub_8010540
-sub_8010540: @ 8010540
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r7, 0
- movs r5, 0
- ldr r6, =gUnknown_03005000
- ldr r0, =0x00000c3e
- adds r0, r6
- mov r8, r0
-_08010552:
- ldr r1, =0x00000cd1
- adds r0, r6, r1
- adds r4, r5, r0
- ldrb r0, [r4]
- subs r0, 0x5
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080105DA
- ldr r1, =gUnknown_03007880
- lsls r0, r5, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x46
- beq _08010576
- cmp r0, 0x48
- bne _080105C0
-_08010576:
- ldr r2, =0x00000cd5
- adds r0, r6, r2
- adds r1, r5, r0
- ldrb r0, [r1]
- cmp r0, 0x8
- bne _080105DA
- movs r0, 0x9
- strb r0, [r4]
- movs r0, 0xA
- strb r0, [r1]
- lsls r1, r5, 24
- lsrs r1, 24
- movs r0, 0x8
- bl rfu_clearSlot
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r5
- lsrs r0, 24
- movs r1, 0x8
- adds r2, r4, 0
- movs r3, 0x1
- bl rfu_NI_setSendData
- movs r7, 0x1
- b _080105DA
- .pool
-_080105C0:
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x47
- bne _080105DA
- lsls r1, r5, 24
- lsrs r1, 24
- movs r0, 0x8
- bl rfu_clearSlot
-_080105DA:
- adds r5, 0x1
- cmp r5, 0x3
- ble _08010552
- adds r0, r7, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8010540
-
- thumb_func_start sub_80105EC
-sub_80105EC: @ 80105EC
- push {r4-r6,lr}
- movs r3, 0
- movs r1, 0
- ldr r5, =gUnknown_03005CD5
- movs r6, 0x1
- movs r4, 0
-_080105F8:
- adds r2, r1, r5
- ldrb r0, [r2]
- cmp r0, 0xB
- bne _0801060C
- adds r0, r6, 0
- lsls r0, r1
- orrs r3, r0
- lsls r0, r3, 24
- lsrs r3, r0, 24
- strb r4, [r2]
-_0801060C:
- adds r1, 0x1
- cmp r1, 0x3
- ble _080105F8
- cmp r3, 0
- beq _08010620
- adds r0, r3, 0
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_08010620:
- movs r1, 0
- ldr r2, =gUnknown_03005CD5
-_08010624:
- adds r0, r1, r2
- ldrb r0, [r0]
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0801063C
- movs r0, 0x1
- b _08010644
- .pool
-_0801063C:
- adds r1, 0x1
- cmp r1, 0x3
- ble _08010624
- movs r0, 0
-_08010644:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80105EC
-
- thumb_func_start sub_801064C
-sub_801064C: @ 801064C
- push {lr}
- adds r2, r0, 0
- adds r0, r1, 0
- lsls r2, 16
- lsrs r2, 16
- adds r1, r2, 0
- bl sub_8011CE4
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _08010680
- ldr r0, =gUnknown_03005000
- ldr r2, =0x00000cd1
- adds r0, r2
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x9
- beq _08010680
- movs r0, 0
- b _08010682
- .pool
-_08010680:
- movs r0, 0x1
-_08010682:
- pop {r1}
- bx r1
- thumb_func_end sub_801064C
-
- thumb_func_start sub_8010688
-sub_8010688: @ 8010688
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r0, r2, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 16
- lsrs r1, 16
- bl sub_8011CE4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, =gUnknown_03005000
- ldr r0, =0x00000cd1
- adds r5, r0
- adds r5, r4, r5
- strb r6, [r5]
- movs r0, 0x4
- adds r1, r4, 0
- bl rfu_clearSlot
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r4
- lsrs r0, 24
- movs r1, 0x8
- adds r2, r5, 0
- movs r3, 0x1
- bl rfu_NI_setSendData
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010688
-
- thumb_func_start sub_80106D4
-sub_80106D4: @ 80106D4
- push {r4,r5,lr}
- ldr r4, =gUnknown_03005000
- ldr r0, =0x00000c85
- adds r5, r4, r0
- movs r0, 0x8
- strb r0, [r5]
- ldr r0, =0x00000c3e
- adds r4, r0
- ldrb r1, [r4]
- movs r0, 0x4
- bl rfu_clearSlot
- ldrb r1, [r4]
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r1
- lsrs r0, 24
- movs r1, 0x8
- adds r2, r5, 0
- movs r3, 0x1
- bl rfu_NI_setSendData
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80106D4
-
- thumb_func_start sub_8010714
-sub_8010714: @ 8010714
- push {lr}
- adds r2, r0, 0
- adds r0, r1, 0
- lsls r2, 16
- lsrs r2, 16
- adds r1, r2, 0
- bl sub_8011CE4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08010730
- movs r0, 0x2
- b _0801074A
-_08010730:
- ldr r1, =gUnknown_03007880
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0
- beq _08010748
- movs r0, 0
- b _0801074A
- .pool
-_08010748:
- movs r0, 0x1
-_0801074A:
- pop {r1}
- bx r1
- thumb_func_end sub_8010714
-
- thumb_func_start sub_8010750
-sub_8010750: @ 8010750
- push {r4,r5,lr}
- bl sub_8010540
- movs r4, 0
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000cd5
- adds r5, r0, r1
-_0801075E:
- ldr r1, =gUnknown_03007880
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0]
- subs r0, 0x26
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _08010788
- adds r1, r4, r5
- ldrb r0, [r1]
- cmp r0, 0xA
- bne _0801077E
- movs r0, 0xB
- strb r0, [r1]
-_0801077E:
- lsls r1, r4, 24
- lsrs r1, 24
- movs r0, 0x4
- bl rfu_clearSlot
-_08010788:
- adds r4, 0x1
- cmp r4, 0x3
- ble _0801075E
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010750
-
- thumb_func_start sub_80107A0
-sub_80107A0: @ 80107A0
- push {r4,r5,lr}
- movs r4, 0
- ldr r1, =gUnknown_03005000
- ldr r2, =0x00000c85
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _080107DA
- ldr r2, =gUnknown_03007880
- ldr r0, =0x00000c3e
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0x26
- beq _080107D2
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0x27
- bne _080107DA
-_080107D2:
- ldrb r1, [r1]
- movs r0, 0x4
- bl rfu_clearSlot
-_080107DA:
- ldr r2, =gUnknown_03007880
- ldr r5, =gUnknown_03005000
- ldr r0, =0x00000c3e
- adds r1, r5, r0
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x46
- beq _080107FE
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x48
- bne _0801082C
-_080107FE:
- ldrb r1, [r1]
- movs r0, 0x8
- bl rfu_clearSlot
- ldr r2, =0x00000c86
- adds r4, r5, r2
- ldrb r0, [r4]
- movs r1, 0
- bl sub_8011A64
- ldrb r4, [r4]
- b _08010844
- .pool
-_0801082C:
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x47
- bne _08010844
- ldrb r1, [r1]
- movs r0, 0x8
- bl rfu_clearSlot
- movs r4, 0x6
-_08010844:
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80107A0
-
- thumb_func_start sub_801084C
-sub_801084C: @ 801084C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, =gUnknown_03005000
- adds r0, r5, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08010872
- ldr r0, =0x00000ce8
- adds r1, r5, r0
- movs r0, 0
- strb r0, [r1]
- adds r0, r6, 0
- bl DestroyTask
-_08010872:
- ldr r2, =gTasks
- lsls r1, r6, 2
- adds r0, r1, r6
- lsls r0, 3
- adds r4, r0, r2
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- adds r7, r1, 0
- cmp r0, 0x3
- beq _0801091C
- cmp r0, 0x3
- bgt _080108A4
- cmp r0, 0x1
- beq _080108CC
- cmp r0, 0x1
- bgt _08010918
- cmp r0, 0
- beq _080108B6
- b _080109D2
- .pool
-_080108A4:
- cmp r0, 0x5
- beq _08010950
- cmp r0, 0x5
- blt _0801093E
- cmp r0, 0x6
- beq _08010984
- cmp r0, 0x65
- beq _08010904
- b _080109D2
-_080108B6:
- bl sub_800FC60
- lsls r0, 24
- cmp r0, 0
- bne _080108C2
- b _080109D2
-_080108C2:
- bl ResetBlockReceivedFlags
- bl sub_800B348
- b _08010948
-_080108CC:
- ldrb r0, [r5, 0xC]
- cmp r0, 0x1
- bne _0801090C
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080108E8
- movs r0, 0xF0
- lsls r0, 7
- bl sub_800FD14
- b _080108F0
- .pool
-_080108E8:
- movs r0, 0xEE
- lsls r0, 7
- bl sub_800FD14
-_080108F0:
- ldr r0, =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x65
- strh r0, [r1, 0x8]
- b _080109D2
- .pool
-_08010904:
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080109D2
-_0801090C:
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080109D2
- .pool
-_08010918:
- ldrb r0, [r5, 0xD]
- b _08010944
-_0801091C:
- ldrb r0, [r5, 0xC]
- cmp r0, 0x1
- bne _08010948
- bl sub_800FC60
- lsls r0, 24
- cmp r0, 0
- beq _080109D2
- adds r1, r5, 0
- adds r1, 0x5A
- movs r0, 0
- strb r0, [r1]
- movs r0, 0xA1
- lsls r0, 8
- bl sub_800FD14
- b _08010948
-_0801093E:
- bl sub_800FC88
- lsls r0, 24
-_08010944:
- cmp r0, 0
- beq _080109D2
-_08010948:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080109D2
-_08010950:
- movs r4, 0
- ldrb r0, [r5, 0xD]
- cmp r4, r0
- bge _0801096E
-_08010958:
- adds r0, r4, 0
- bl sub_800B3A4
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_800F728
- adds r4, 0x1
- ldrb r2, [r5, 0xD]
- cmp r4, r2
- blt _08010958
-_0801096E:
- ldr r0, =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080109D2
- .pool
-_08010984:
- adds r0, r6, 0
- bl DestroyTask
- ldr r1, =gReceivedRemoteLinkPlayers
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, =0x00000ce8
- adds r1, r5, r0
- movs r0, 0
- strb r0, [r1]
- movs r1, 0x96
- lsls r1, 2
- movs r0, 0x1
- bl sub_800D550
- ldr r2, =0x00000ce6
- adds r1, r5, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _080109D2
- movs r4, 0
- adds r2, r1, 0
- movs r3, 0x1
- ldr r0, =0x00000ce5
- adds r5, r0
-_080109B6:
- ldrb r0, [r2]
- asrs r0, r4
- ands r0, r3
- cmp r0, 0
- beq _080109CC
- adds r0, r3, 0
- lsls r0, r4
- strb r0, [r5]
- ldrb r1, [r2]
- eors r0, r1
- strb r0, [r2]
-_080109CC:
- adds r4, 0x1
- cmp r4, 0x3
- ble _080109B6
-_080109D2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801084C
-
- thumb_func_start sub_80109E8
-sub_80109E8: @ 80109E8
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0
- movs r5, 0x1
- ldr r4, =gUnknown_03005CDE
- movs r3, 0
-_080109F6:
- adds r0, r2, 0
- asrs r0, r1
- ands r0, r5
- cmp r0, 0
- beq _08010A04
- adds r0, r1, r4
- strb r3, [r0]
-_08010A04:
- adds r1, 0x1
- cmp r1, 0x3
- ble _080109F6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80109E8
-
- thumb_func_start sub_8010A14
-sub_8010A14: @ 8010A14
- push {r4-r7,lr}
- adds r2, r0, 0
- ldr r1, =gUnknown_03005000
- ldrb r0, [r2, 0xF]
- strb r0, [r1, 0xD]
- movs r4, 0
- ldr r0, =0x00000cde
- adds r5, r1, r0
- adds r3, r2, 0
- adds r3, 0x10
-_08010A28:
- adds r0, r4, r5
- adds r1, r3, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08010A28
- adds r6, r2, 0
- ldr r5, =gLinkPlayers
- movs r4, 0x4
-_08010A3C:
- adds r0, r5, 0
- adds r1, r6, 0
- adds r1, 0x14
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldr r1, [r1]
- str r1, [r0]
- adds r0, r5, 0
- bl sub_800B524
- adds r6, 0x1C
- adds r5, 0x1C
- subs r4, 0x1
- cmp r4, 0
- bge _08010A3C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010A14
-
- thumb_func_start sub_8010A70
-sub_8010A70: @ 8010A70
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, =gUnknown_082ED7EC
- adds r1, r4, 0
- bl strcmp
- adds r5, r0, 0
- cmp r5, 0
- bne _08010A9C
- adds r0, r4, 0
- bl sub_8010A14
- mov r0, sp
- strh r5, [r0]
- ldr r2, =0x0100007e
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0
- bl ResetBlockReceivedFlag
-_08010A9C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010A70
-
- thumb_func_start sub_8010AAC
-sub_8010AAC: @ 8010AAC
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, =gUnknown_03005000
- ldr r2, =gUnknown_082ED68C
- ldr r1, =0x00000ce9
- adds r0, r3, r1
- ldrb r1, [r0]
- adds r1, r2
- ldr r2, =0x00000cde
- adds r0, r3, r2
- ldrb r1, [r1]
- adds r0, r1
- ldrb r4, [r0]
- adds r0, r3, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08010AE8
- ldr r5, =0x00000ce8
- adds r1, r3, r5
- movs r0, 0
- strb r0, [r1]
- adds r0, r6, 0
- bl DestroyTask
-_08010AE8:
- ldr r0, =gTasks
- lsls r2, r6, 2
- adds r1, r2, r6
- lsls r1, 3
- adds r1, r0
- movs r3, 0x8
- ldrsh r1, [r1, r3]
- adds r3, r0, 0
- adds r7, r2, 0
- cmp r1, 0x5
- bls _08010B00
- b _08010CF0
-_08010B00:
- lsls r0, r1, 2
- ldr r1, =_08010B28
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08010B28:
- .4byte _08010B40
- .4byte _08010B60
- .4byte _08010B78
- .4byte _08010BC0
- .4byte _08010C0A
- .4byte _08010C94
-_08010B40:
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- beq _08010B4A
- b _08010CF0
-_08010B4A:
- adds r0, r4, 0
- bl ResetBlockReceivedFlag
- movs r0, 0xF0
- lsls r0, 7
- bl sub_800FD14
- b _08010C4A
- .pool
-_08010B60:
- ldr r0, =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- beq _08010B6A
- b _08010CF0
-_08010B6A:
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r3
- b _08010C52
- .pool
-_08010B78:
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- asrs r0, r4
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08010B8C
- b _08010CF0
-_08010B8C:
- adds r0, r4, 0
- bl ResetBlockReceivedFlag
- lsls r2, r4, 8
- ldr r0, =gBlockRecvBuffer
- adds r2, r0
- ldr r1, =gLinkPlayers
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- adds r1, r0, 0
- adds r2, 0x10
- ldm r2!, {r3-r5}
- stm r1!, {r3-r5}
- ldm r2!, {r3-r5}
- stm r1!, {r3-r5}
- ldr r2, [r2]
- str r2, [r1]
- bl sub_800B524
- b _08010C4A
- .pool
-_08010BC0:
- ldr r5, =gBlockSendBuffer
- adds r1, r5, 0
- ldr r0, =gUnknown_082ED7EC
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldrh r2, [r0]
- strh r2, [r1]
- ldrb r0, [r0, 0x2]
- strb r0, [r1, 0x2]
- ldr r1, =gUnknown_03005000
- ldrb r0, [r1, 0xD]
- strb r0, [r5, 0xF]
- movs r2, 0
- adds r4, r5, 0
- adds r4, 0x10
- ldr r0, =0x00000cde
- adds r3, r1, r0
-_08010BE2:
- adds r0, r4, r2
- adds r1, r2, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _08010BE2
- ldr r1, =gLinkPlayers
- adds r0, r5, 0
- adds r0, 0x14
- movs r2, 0x8C
- bl memcpy
- ldr r0, =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_08010C0A:
- ldr r5, =gBlockSendBuffer
- ldr r1, =gUnknown_03005000
- ldrb r0, [r1, 0xD]
- strb r0, [r5, 0xF]
- movs r2, 0
- ldr r3, =gLinkPlayers
- mov r12, r3
- adds r4, r5, 0
- adds r4, 0x10
- ldr r0, =0x00000cde
- adds r3, r1, r0
-_08010C20:
- adds r0, r4, r2
- adds r1, r2, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _08010C20
- adds r0, r5, 0
- adds r0, 0x14
- mov r1, r12
- movs r2, 0x8C
- bl memcpy
- ldr r1, =gBlockSendBuffer
- movs r0, 0
- movs r2, 0xA0
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _08010CF0
-_08010C4A:
- ldr r0, =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
-_08010C52:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _08010CF0
- .pool
-_08010C74:
- adds r0, r3, 0
- lsls r0, r2
- ldr r2, =0x00000ce5
- adds r1, r5, r2
- strb r0, [r1]
- ldrb r1, [r4]
- eors r0, r1
- strb r0, [r4]
- ldr r4, =0x00000ce8
- adds r0, r5, r4
- strb r3, [r0]
- b _08010CEA
- .pool
-_08010C94:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _08010CF0
- bl GetBlockReceivedStatus
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08010CF0
- mov r0, sp
- movs r4, 0
- strh r4, [r0]
- ldr r1, =gBlockRecvBuffer
- ldr r2, =0x0100007e
- bl CpuSet
- movs r0, 0
- bl ResetBlockReceivedFlag
- ldr r1, =gUnknown_03005000
- ldr r5, =0x00000ce8
- adds r0, r1, r5
- strb r4, [r0]
- ldr r0, =0x00000ce6
- adds r3, r1, r0
- ldrb r0, [r3]
- cmp r0, 0
- beq _08010CEA
- movs r2, 0
- adds r5, r1, 0
- adds r4, r3, 0
- ldrb r1, [r4]
- movs r3, 0x1
-_08010CDA:
- adds r0, r1, 0
- asrs r0, r2
- ands r0, r3
- cmp r0, 0
- bne _08010C74
- adds r2, 0x1
- cmp r2, 0x3
- ble _08010CDA
-_08010CEA:
- adds r0, r6, 0
- bl DestroyTask
-_08010CF0:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010AAC
-
- thumb_func_start sub_8010D0C
-sub_8010D0C: @ 8010D0C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, =gUnknown_03005000
- adds r0, r6, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08010D2A
- adds r0, r5, 0
- bl DestroyTask
-_08010D2A:
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08010D70
- cmp r0, 0x1
- bgt _08010D50
- cmp r0, 0
- beq _08010D56
- b _08010DA6
- .pool
-_08010D50:
- cmp r0, 0x2
- beq _08010D82
- b _08010DA6
-_08010D56:
- ldrb r0, [r6, 0xD]
- cmp r0, 0
- beq _08010DA6
- bl sub_800B348
- ldr r1, =gBlockSendBuffer
- movs r0, 0
- movs r2, 0x3C
- bl SendBlock
- b _08010D7A
- .pool
-_08010D70:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _08010DA6
-_08010D7A:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08010DA6
-_08010D82:
- bl GetBlockReceivedStatus
- movs r4, 0x1
- adds r1, r4, 0
- ands r1, r0
- cmp r1, 0
- beq _08010DA6
- ldr r0, =gBlockRecvBuffer
- bl sub_8010A14
- movs r0, 0
- bl ResetBlockReceivedFlag
- ldr r0, =gReceivedRemoteLinkPlayers
- strb r4, [r0]
- adds r0, r5, 0
- bl DestroyTask
-_08010DA6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010D0C
-
- thumb_func_start sub_8010DB4
-sub_8010DB4: @ 8010DB4
- push {r4-r7,lr}
- ldr r0, =gUnknown_03005000
- adds r1, r0, 0
- adds r1, 0xEE
- ldrb r1, [r1]
- adds r3, r0, 0
- cmp r1, 0x1
- bne _08010E5C
- ldr r2, =gUnknown_03004140
- ldrb r0, [r2, 0x2]
- cmp r0, 0
- bne _08010E5C
- ldr r0, =gMain
- ldr r1, [r0, 0x4]
- ldr r0, =sub_8018438
- cmp r1, r0
- beq _08010DDE
- ldr r0, [r2, 0x3C]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08010DE4
-_08010DDE:
- ldr r1, =gLinkVSyncDisabled
- movs r0, 0x2
- strb r0, [r1]
-_08010DE4:
- ldr r4, =c2_800ACD4
- adds r0, r4, 0
- bl SetMainCallback2
- ldr r0, =gMain
- str r4, [r0, 0x8]
- ldr r5, =gUnknown_03005000
- ldrh r0, [r5, 0xA]
- lsls r4, r0, 16
- ldrh r0, [r5, 0x10]
- lsls r0, 8
- orrs r4, r0
- ldrh r0, [r5, 0x12]
- orrs r4, r0
- ldr r1, =0x000009e6
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r7, r0, 0
- ldr r1, =0x00000c1a
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r6, r0, 0
- bl sub_8011A74
- movs r3, 0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08010E20
- movs r3, 0x1
-_08010E20:
- adds r0, r4, 0
- adds r1, r7, 0
- adds r2, r6, 0
- bl sub_800AF18
- adds r0, r5, 0
- adds r0, 0xEE
- ldrb r1, [r0]
- movs r1, 0x2
- strb r1, [r0]
- bl CloseLink
- b _08010E8E
- .pool
-_08010E5C:
- ldr r1, =0x00000c1b
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08010E70
- ldr r1, =0x000009e7
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08010E8E
-_08010E70:
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- beq _08010E7C
- bl sub_800D630
-_08010E7C:
- movs r4, 0xE0
- lsls r4, 7
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_8011A64
- adds r0, r4, 0
- bl sub_8011170
-_08010E8E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010DB4
-
- thumb_func_start rfu_REQ_recvData_then_sendData
-rfu_REQ_recvData_then_sendData: @ 8010EA0
- push {lr}
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- bne _08010EB8
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- movs r0, 0
- bl rfu_REQ_sendData_wrapper
-_08010EB8:
- pop {r0}
- bx r0
- .pool
- thumb_func_end rfu_REQ_recvData_then_sendData
-
- thumb_func_start sub_8010EC0
-sub_8010EC0: @ 8010EC0
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, =gUnknown_03005000
- ldr r1, =0x00000ccd
- adds r0, r4, r1
- strb r5, [r0]
- bl Random2
- lsls r0, 16
- lsrs r0, 16
- bl sub_800C54C
- adds r0, r4, 0
- adds r0, 0xEF
- ldrb r0, [r0]
- cmp r0, 0
- bne _08010F14
- ldrb r0, [r4, 0xC]
- cmp r0, 0x1
- beq _08010F02
- cmp r0, 0x1
- bgt _08010EFC
- cmp r0, 0
- beq _08010F08
- b _08010F14
- .pool
-_08010EFC:
- cmp r0, 0x2
- beq _08010F10
- b _08010F14
-_08010F02:
- bl sub_800F0F8
- b _08010F14
-_08010F08:
- bl sub_800F4F0
- adds r5, r0, 0
- b _08010F14
-_08010F10:
- bl rfu_REQ_recvData_then_sendData
-_08010F14:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8010EC0
-
- thumb_func_start sub_8010F1C
-sub_8010F1C: @ 8010F1C
- push {r4,lr}
- movs r4, 0
- ldr r1, =gUnknown_03005000
- adds r0, r1, 0
- adds r0, 0xEF
- ldrb r0, [r0]
- cmp r0, 0
- bne _08010F3C
- ldrb r0, [r1, 0xC]
- cmp r0, 0x1
- bne _08010F38
- bl sub_800F1E0
- adds r4, r0, 0
-_08010F38:
- bl sub_8010DB4
-_08010F3C:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8010F1C
-
- thumb_func_start sub_8010F48
-sub_8010F48: @ 8010F48
- push {lr}
- ldr r0, =gUnknown_02022B22
- ldr r1, =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010F48
-
- thumb_func_start sub_8010F60
-sub_8010F60: @ 8010F60
- push {r4,lr}
- ldr r4, =gUnknown_02022B14
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0xD
- bl memset
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl sub_800DD94
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010F60
-
- thumb_func_start sub_8010F84
-sub_8010F84: @ 8010F84
- push {r4,lr}
- adds r4, r0, 0
- adds r3, r1, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gUnknown_02022B14
- adds r1, r4, 0
- bl sub_800DD94
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010F84
-
- thumb_func_start sub_8010FA0
-sub_8010FA0: @ 8010FA0
- push {r4,r5,lr}
- ldr r5, =gUnknown_02022B14
- movs r4, 0x1
- ands r0, r4
- lsls r0, 4
- ldrb r3, [r5]
- movs r2, 0x11
- negs r2, r2
- ands r2, r3
- orrs r2, r0
- ands r1, r4
- lsls r1, 5
- movs r0, 0x21
- negs r0, r0
- ands r2, r0
- orrs r2, r1
- strb r2, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010FA0
-
- thumb_func_start sub_8010FCC
-sub_8010FCC: @ 8010FCC
- push {r4,r5,lr}
- ldr r5, =gUnknown_02022B14
- lsls r0, 2
- ldrb r4, [r5, 0x9]
- movs r3, 0x3
- ands r3, r4
- orrs r3, r0
- strb r3, [r5, 0x9]
- ldr r3, =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldrh r3, [r5, 0x8]
- ldr r0, =0xfffffc00
- ands r0, r3
- orrs r0, r1
- strh r0, [r5, 0x8]
- lsls r2, 1
- ldrb r1, [r5, 0xB]
- movs r0, 0x1
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, 0xB]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010FCC
-
- thumb_func_start sub_801100C
-sub_801100C: @ 801100C
- push {r4,lr}
- movs r4, 0x80
- ldr r3, =gLinkPlayers
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r0, r1, r3
- ldrb r2, [r0, 0x13]
- lsls r2, 3
- orrs r2, r4
- adds r3, 0x4
- adds r1, r3
- ldr r0, [r1]
- movs r1, 0x7
- ands r0, r1
- orrs r0, r2
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_801100C
-
- thumb_func_start sub_801103C
-sub_801103C: @ 801103C
- push {r4,r5,lr}
- ldr r5, =gUnknown_02022B14
- movs r4, 0x1
- b _08011054
- .pool
-_08011048:
- adds r0, r4, 0
- bl sub_801100C
- adds r1, r5, r4
- strb r0, [r1, 0x3]
- adds r4, 0x1
-_08011054:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- blt _08011048
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_801103C
-
- thumb_func_start sub_8011068
-sub_8011068: @ 8011068
- push {lr}
- lsls r0, 24
- ldr r2, =gUnknown_02022B14
- lsrs r0, 17
- ldrb r3, [r2, 0xA]
- movs r1, 0x7F
- ands r1, r3
- orrs r1, r0
- strb r1, [r2, 0xA]
- ldr r3, =gUnknown_02022B22
- movs r0, 0
- movs r1, 0x2
- bl rfu_REQ_configGameData
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011068
-
- thumb_func_start sub_8011090
-sub_8011090: @ 8011090
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0801109E
- bl sub_8010F84
-_0801109E:
- ldr r2, =gUnknown_02022B14
- ldr r3, =gUnknown_02022B22
- movs r0, 0
- movs r1, 0x2
- bl rfu_REQ_configGameData
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011090
-
- thumb_func_start sub_80110B8
-sub_80110B8: @ 80110B8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- bne _0801114C
- movs r5, 0
- movs r7, 0
- ldr r3, =gUnknown_03005000
- ldr r1, =0x00000ce2
- adds r0, r3, r1
- ldr r2, =0x00000ce3
- adds r1, r3, r2
- ldrb r2, [r0]
- ldrb r0, [r1]
- adds r1, r0, 0
- eors r1, r2
- mov r8, r1
- movs r4, 0
- movs r6, 0x1
- ldr r2, =gLinkPlayers
- mov r12, r2
- ldr r0, =0x00000cde
- adds r0, r3
- mov r10, r0
- mov r3, r12
- adds r3, 0x4
-_080110FC:
- mov r0, r8
- asrs r0, r4
- ands r0, r6
- cmp r0, 0
- beq _0801113C
- mov r1, r10
- adds r0, r4, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r2, r12
- adds r1, r0, r2
- ldrb r1, [r1, 0x13]
- adds r2, r6, 0
- ands r2, r1
- lsls r2, 3
- adds r0, r3
- ldr r1, [r0]
- movs r0, 0x7
- ands r1, r0
- movs r0, 0x80
- orrs r1, r0
- orrs r2, r1
- lsls r0, r5, 3
- lsls r2, r0
- orrs r7, r2
- adds r5, 0x1
- mov r0, r9
- subs r0, 0x1
- cmp r5, r0
- beq _08011142
-_0801113C:
- adds r4, 0x1
- cmp r4, 0x3
- ble _080110FC
-_08011142:
- movs r0, 0x45
- adds r1, r7, 0
- movs r2, 0
- bl sub_8011090
-_0801114C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80110B8
-
- thumb_func_start sub_8011170
-sub_8011170: @ 8011170
- push {r4,lr}
- adds r4, r0, 0
- ldr r2, =gUnknown_03005000
- adds r3, r2, 0
- adds r3, 0xEE
- ldrb r0, [r3]
- cmp r0, 0
- bne _08011192
- ldr r1, =gUnknown_03004140
- ldrh r0, [r1, 0x14]
- strh r0, [r2, 0x10]
- ldrh r0, [r1, 0x16]
- strh r0, [r2, 0x12]
- strh r4, [r2, 0xA]
- ldrb r0, [r3]
- movs r0, 0x1
- strb r0, [r3]
-_08011192:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011170
-
- thumb_func_start sub_80111A0
-sub_80111A0: @ 80111A0
- ldr r0, =gUnknown_03005000
- adds r0, 0xEE
- ldrb r1, [r0]
- movs r1, 0
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_80111A0
-
- thumb_func_start sub_80111B0
-sub_80111B0: @ 80111B0
- push {lr}
- adds r2, r0, 0
- cmp r2, 0
- bne _080111C8
- ldr r0, =gUnknown_03005000
- adds r0, 0xEE
- ldrb r1, [r0]
- strb r2, [r0]
- b _080111D2
- .pool
-_080111C8:
- ldr r0, =gUnknown_03005000
- adds r0, 0xEE
- ldrb r1, [r0]
- movs r1, 0x4
- strb r1, [r0]
-_080111D2:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80111B0
-
- thumb_func_start sub_80111DC
-sub_80111DC: @ 80111DC
- push {lr}
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0]
- movs r1, 0x1
- bl sub_8011E94
- ldr r1, =gUnknown_03005000
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80111DC
-
- thumb_func_start sub_80111FC
-sub_80111FC: @ 80111FC
- ldr r1, =gUnknown_03005000
- ldr r0, =sub_80111DC
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80111FC
-
- thumb_func_start sub_801120C
-sub_801120C: @ 801120C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r6, 0
- cmp r4, 0x32
- bne _08011222
- b _08011360
-_08011222:
- cmp r4, 0x32
- bgt _08011252
- cmp r4, 0x13
- bgt _08011240
- cmp r4, 0x12
- blt _08011230
- b _080113EE
-_08011230:
- cmp r4, 0x10
- bne _08011236
- b _080113EE
-_08011236:
- cmp r4, 0x10
- bgt _0801128C
- cmp r4, 0
- beq _0801127E
- b _080113EE
-_08011240:
- cmp r4, 0x30
- bne _08011246
- b _0801136C
-_08011246:
- cmp r4, 0x30
- ble _0801124C
- b _08011354
-_0801124C:
- cmp r4, 0x14
- beq _08011328
- b _080113EE
-_08011252:
- cmp r4, 0x44
- bgt _08011264
- cmp r4, 0x42
- blt _0801125C
- b _080113EE
-_0801125C:
- cmp r4, 0x33
- bne _08011262
- b _0801136C
-_08011262:
- b _080113EE
-_08011264:
- cmp r4, 0xF3
- bne _0801126A
- b _080113BA
-_0801126A:
- cmp r4, 0xF3
- bgt _08011276
- cmp r4, 0xF0
- bge _08011274
- b _080113EE
-_08011274:
- b _080113D4
-_08011276:
- cmp r4, 0xFF
- bne _0801127C
- b _080113D4
-_0801127C:
- b _080113EE
-_0801127E:
- ldr r1, =gUnknown_03005000
- movs r0, 0x2
- strh r0, [r1, 0x4]
- b _080113EE
- .pool
-_0801128C:
- ldr r0, =gUnknown_03004140
- ldrh r0, [r0, 0x14]
- bl sub_80115EC
- movs r5, 0
- movs r0, 0x1
- mov r8, r0
- ldr r1, =gUnknown_03005000
- mov r9, r1
- ldr r3, =0x00000cd5
- add r3, r9
- mov r10, r3
- movs r7, 0x7F
-_080112A6:
- ldr r0, =gUnknown_03004140
- ldrh r0, [r0, 0x14]
- asrs r0, r5
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _0801130E
- ldr r0, =gUnknown_03007890
- lsls r1, r5, 5
- adds r1, 0x14
- ldr r0, [r0]
- adds r0, r1
- ldrb r0, [r0, 0x10]
- adds r4, r7, 0
- ands r4, r0
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- adds r0, r7, 0
- ands r0, r1
- cmp r4, r0
- bne _08011304
- ldr r0, =0x00000cd1
- add r0, r9
- adds r0, r5, r0
- movs r1, 0
- strb r1, [r0]
- mov r3, r10
- adds r2, r5, r3
- strb r1, [r2]
- movs r0, 0x20
- adds r1, r5, 0
- movs r3, 0x1
- bl rfu_setRecvBuffer
- b _0801130E
- .pool
-_08011304:
- mov r0, r8
- lsls r0, r5
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0801130E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _080112A6
- cmp r6, 0
- beq _080113EE
- adds r0, r6, 0
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- b _080113EE
-_08011328:
- ldr r4, =gUnknown_03005000
- ldr r1, =0x00000ce7
- adds r0, r4, r1
- ldr r1, =gUnknown_03004140
- ldrb r2, [r0]
- ldrb r0, [r1]
- cmp r2, r0
- beq _08011342
- eors r0, r2
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_08011342:
- movs r0, 0x11
- strh r0, [r4, 0x4]
- b _080113EE
- .pool
-_08011354:
- ldr r0, =gUnknown_03005000
- adds r0, 0xF0
- b _080113EA
- .pool
-_08011360:
- ldr r0, =gUnknown_03005000
- adds r0, 0xF0
- movs r1, 0x3
- b _080113EC
- .pool
-_0801136C:
- ldr r1, =gUnknown_03005000
- adds r2, r1, 0
- adds r2, 0xF0
- movs r0, 0x4
- strb r0, [r2]
- ldr r3, =0x00000ce2
- adds r1, r3
- ldr r0, =gUnknown_03004140
- ldrb r2, [r0, 0x14]
- ldrb r0, [r1]
- adds r3, r0, 0
- bics r3, r2
- adds r2, r3, 0
- strb r2, [r1]
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080113B0
- cmp r2, 0
- bne _080113AC
- adds r0, r4, 0
- bl sub_8011170
- b _080113B0
- .pool
-_080113AC:
- bl sub_80111FC
-_080113B0:
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_8011A64
- b _080113EE
-_080113BA:
- movs r0, 0x1
- movs r1, 0xF3
- bl sub_8011A64
- movs r0, 0xF3
- bl sub_8011170
- ldr r0, =gUnknown_03005000
- adds r0, 0xEF
- b _080113EA
- .pool
-_080113D4:
- adds r0, r4, 0
- bl sub_8011170
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_8011A64
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000cdb
- adds r0, r1
- ldrb r1, [r0]
-_080113EA:
- movs r1, 0x1
-_080113EC:
- strb r1, [r0]
-_080113EE:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801120C
-
- thumb_func_start sub_8011404
-sub_8011404: @ 8011404
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x31
- bne _08011410
- b _08011570
-_08011410:
- cmp r4, 0x31
- bgt _0801143E
- cmp r4, 0x22
- beq _08011494
- cmp r4, 0x22
- bgt _0801142C
- cmp r4, 0x20
- beq _0801147C
- cmp r4, 0x20
- ble _08011426
- b _080115DE
-_08011426:
- cmp r4, 0
- beq _0801146E
- b _080115DE
-_0801142C:
- cmp r4, 0x24
- beq _080114BA
- cmp r4, 0x24
- blt _080114B0
- cmp r4, 0x25
- beq _08011504
- cmp r4, 0x30
- beq _0801150E
- b _080115DE
-_0801143E:
- cmp r4, 0x44
- bgt _08011454
- cmp r4, 0x42
- blt _08011448
- b _080115DE
-_08011448:
- cmp r4, 0x33
- beq _08011522
- cmp r4, 0x33
- bge _08011452
- b _0801158C
-_08011452:
- b _080115DE
-_08011454:
- cmp r4, 0xF3
- bne _0801145A
- b _080115AC
-_0801145A:
- cmp r4, 0xF3
- bgt _08011466
- cmp r4, 0xF0
- bge _08011464
- b _080115DE
-_08011464:
- b _080115C4
-_08011466:
- cmp r4, 0xFF
- bne _0801146C
- b _080115C4
-_0801146C:
- b _080115DE
-_0801146E:
- ldr r1, =gUnknown_03005000
- movs r0, 0x6
- strh r0, [r1, 0x4]
- b _080115DE
- .pool
-_0801147C:
- ldr r0, =gUnknown_03005000
- ldr r1, =gUnknown_03004140
- ldrh r1, [r1, 0x14]
- ldr r2, =0x00000ccd
- adds r0, r2
- b _080115DC
- .pool
-_08011494:
- ldr r0, =gUnknown_03005000
- ldr r1, =gUnknown_03004140
- ldrh r1, [r1, 0x14]
- ldr r2, =0x00000c3e
- adds r0, r2
- ldrb r2, [r0]
- b _080115DC
- .pool
-_080114B0:
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_8011A64
- b _080115DE
-_080114BA:
- ldr r4, =gUnknown_03005000
- movs r1, 0
- movs r0, 0xB
- strh r0, [r4, 0x4]
- ldr r2, =0x00000c85
- adds r0, r4, r2
- strb r1, [r0]
- ldr r0, =0x00000c86
- adds r2, r4, r0
- strb r1, [r2]
- ldr r1, =0x00000c3e
- adds r5, r4, r1
- ldrb r1, [r5]
- movs r0, 0x20
- movs r3, 0x1
- bl rfu_setRecvBuffer
- ldrb r1, [r5]
- ldr r2, =0x00000c3f
- adds r4, r2
- movs r0, 0x10
- adds r2, r4, 0
- movs r3, 0x46
- bl rfu_setRecvBuffer
- b _080115DE
- .pool
-_08011504:
- movs r0, 0x2
- movs r1, 0x25
- bl sub_8011A64
- b _080115DE
-_0801150E:
- ldr r0, =gUnknown_03005000
- adds r2, r0, 0
- adds r2, 0xF0
- movs r1, 0x2
- strb r1, [r2]
- ldr r1, =0x00000c86
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x6
- beq _080115DE
-_08011522:
- ldr r2, =gUnknown_03005000
- adds r1, r2, 0
- adds r1, 0xF0
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _08011532
- movs r0, 0x4
- strb r0, [r1]
-_08011532:
- ldr r1, =0x00000c86
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x9
- beq _08011544
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_8011A64
-_08011544:
- ldr r0, =gUnknown_082ED7FC
- movs r1, 0x5
- movs r2, 0x5
- bl nullsub_5
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080115DE
- adds r0, r4, 0
- bl sub_8011170
- b _080115DE
- .pool
-_08011570:
- ldr r0, =gUnknown_03005000
- adds r0, 0xF0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, =gUnknown_082ED814
- movs r1, 0x5
- movs r2, 0x5
- bl nullsub_5
- b _080115DE
- .pool
-_0801158C:
- ldr r1, =gUnknown_03005000
- adds r2, r1, 0
- adds r2, 0xF0
- movs r0, 0x3
- strb r0, [r2]
- ldr r2, =0x00000c3c
- adds r1, r2
- ldrb r0, [r1]
- movs r0, 0x1
- strb r0, [r1]
- b _080115DE
- .pool
-_080115AC:
- movs r0, 0x1
- movs r1, 0xF3
- bl sub_8011A64
- movs r0, 0xF3
- bl sub_8011170
- ldr r0, =gUnknown_03005000
- adds r0, 0xEF
- b _080115DA
- .pool
-_080115C4:
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_8011A64
- adds r0, r4, 0
- bl sub_8011170
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000cdb
- adds r0, r1
- ldrb r1, [r0]
-_080115DA:
- movs r1, 0x1
-_080115DC:
- strb r1, [r0]
-_080115DE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011404
-
- thumb_func_start sub_80115EC
-sub_80115EC: @ 80115EC
- push {r4-r6,lr}
- adds r3, r0, 0
- movs r2, 0
- movs r6, 0x1
- ldr r0, =gUnknown_03005000
- ldr r4, =0x00000cea
- adds r1, r0, r4
- movs r5, 0
- movs r4, 0xFF
-_080115FE:
- adds r0, r3, 0
- asrs r0, r2
- ands r0, r6
- cmp r0, 0
- beq _08011610
- strb r5, [r1]
- ldrb r0, [r1, 0x4]
- orrs r0, r4
- strb r0, [r1, 0x4]
-_08011610:
- adds r1, 0x1
- adds r2, 0x1
- cmp r2, 0x3
- ble _080115FE
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80115EC
-
- thumb_func_start sub_8011628
-sub_8011628: @ 8011628
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r3, 0
- movs r2, 0
- movs r4, 0x1
- ldr r6, =gUnknown_03007890
- movs r7, 0x7F
-_08011636:
- adds r0, r5, 0
- asrs r0, r2
- ands r0, r4
- cmp r0, 0
- beq _0801165C
- lsls r1, r2, 5
- adds r1, 0x14
- ldr r0, [r6]
- adds r0, r1
- ldrb r1, [r0, 0x10]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0x45
- bne _0801165C
- adds r0, r4, 0
- lsls r0, r2
- orrs r3, r0
- lsls r0, r3, 24
- lsrs r3, r0, 24
-_0801165C:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _08011636
- adds r0, r3, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8011628
-
- thumb_func_start sub_8011674
-sub_8011674: @ 8011674
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x25
- bne _08011680
- b _080118EC
-_08011680:
- cmp r4, 0x25
- bgt _080116C2
- cmp r4, 0x14
- bne _0801168A
- b _08011804
-_0801168A:
- cmp r4, 0x14
- bgt _080116A2
- cmp r4, 0x11
- beq _08011722
- cmp r4, 0x11
- ble _08011698
- b _08011A42
-_08011698:
- cmp r4, 0
- beq _0801170C
- cmp r4, 0x10
- beq _08011718
- b _08011A42
-_080116A2:
- cmp r4, 0x22
- bne _080116A8
- b _08011868
-_080116A8:
- cmp r4, 0x22
- bgt _080116B4
- cmp r4, 0x20
- bne _080116B2
- b _08011850
-_080116B2:
- b _08011A42
-_080116B4:
- cmp r4, 0x23
- bne _080116BA
- b _08011884
-_080116BA:
- cmp r4, 0x24
- bne _080116C0
- b _080118BA
-_080116C0:
- b _08011A42
-_080116C2:
- cmp r4, 0x44
- bgt _080116F2
- cmp r4, 0x42
- blt _080116CC
- b _08011A42
-_080116CC:
- cmp r4, 0x32
- bne _080116D2
- b _08011914
-_080116D2:
- cmp r4, 0x32
- bgt _080116E4
- cmp r4, 0x30
- bne _080116DC
- b _08011940
-_080116DC:
- cmp r4, 0x31
- bne _080116E2
- b _080118F6
-_080116E2:
- b _08011A42
-_080116E4:
- cmp r4, 0x33
- bne _080116EA
- b _08011948
-_080116EA:
- cmp r4, 0x40
- bne _080116F0
- b _080119FC
-_080116F0:
- b _08011A42
-_080116F2:
- cmp r4, 0xF3
- bne _080116F8
- b _08011A0C
-_080116F8:
- cmp r4, 0xF3
- bgt _08011704
- cmp r4, 0xF0
- bge _08011702
- b _08011A42
-_08011702:
- b _08011A28
-_08011704:
- cmp r4, 0xFF
- bne _0801170A
- b _08011A28
-_0801170A:
- b _08011A42
-_0801170C:
- ldr r1, =gUnknown_03005000
- movs r0, 0x11
- strh r0, [r1, 0x4]
- b _08011A42
- .pool
-_08011718:
- movs r0, 0x4
- movs r1, 0
- bl sub_8011A64
- b _08011A42
-_08011722:
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- bne _080117DC
- ldr r5, =gUnknown_03005000
- ldr r1, =0x00000cd9
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080117DC
- ldr r0, =gUnknown_03004140
- ldrh r0, [r0, 0x14]
- bl sub_8011628
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080117A6
- adds r0, r4, 0
- bl sub_800E87C
- movs r2, 0x1
- mov r12, r2
- mov r1, r12
- lsls r1, r0
- lsls r1, 24
- lsrs r1, 24
- ldr r7, =0x00000ce6
- adds r6, r5, r7
- ldrb r2, [r6]
- cmp r2, 0
- bne _08011798
- ldr r0, =0x00000ce8
- adds r3, r5, r0
- ldrb r0, [r3]
- cmp r0, 0
- bne _08011798
- subs r7, 0x1
- adds r0, r5, r7
- strb r1, [r0]
- eors r1, r4
- orrs r1, r2
- strb r1, [r6]
- mov r0, r12
- strb r0, [r3]
- b _080117A6
- .pool
-_08011798:
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000ce6
- adds r0, r1
- ldrb r2, [r0]
- adds r1, r4, 0
- orrs r1, r2
- strb r1, [r0]
-_080117A6:
- ldr r0, =gUnknown_03004140
- ldrh r1, [r0, 0x14]
- cmp r4, r1
- beq _080117F6
- ldr r2, =gUnknown_03005000
- ldr r7, =0x00000ce3
- adds r3, r2, r7
- adds r0, r4, 0
- eors r0, r1
- ldrb r1, [r3]
- orrs r0, r1
- strb r0, [r3]
- ldr r0, =0x00000ce4
- adds r2, r0
- movs r0, 0x2
- strb r0, [r2]
- b _080117F6
- .pool
-_080117DC:
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x54
- bne _080117F6
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0]
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_080117F6:
- ldr r0, =gUnknown_03004140
- ldrh r0, [r0, 0x14]
- bl sub_80115EC
- b _08011A42
- .pool
-_08011804:
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- beq _08011836
- ldr r4, =gUnknown_03004140
- ldrb r0, [r4, 0x1]
- cmp r0, 0x1
- bls _08011836
- ldrb r0, [r4, 0x14]
- bl sub_800E87C
- movs r1, 0x80
- lsls r1, 17
- lsls r1, r0
- lsrs r1, 24
- ldrb r0, [r4]
- eors r1, r0
- adds r0, r1, 0
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_08011836:
- ldr r1, =gUnknown_03005000
- ldrh r0, [r1, 0x4]
- cmp r0, 0xF
- beq _08011840
- b _08011A42
-_08011840:
- movs r0, 0x10
- strh r0, [r1, 0x4]
- b _08011A42
- .pool
-_08011850:
- ldr r0, =gUnknown_03005000
- ldr r1, =gUnknown_03004140
- ldrh r1, [r1, 0x14]
- ldr r2, =0x00000ccd
- adds r0, r2
- b _08011A40
- .pool
-_08011868:
- ldr r0, =gUnknown_03005000
- ldr r1, =gUnknown_03004140
- ldrh r1, [r1, 0x14]
- ldr r7, =0x00000c3e
- adds r0, r7
- ldrb r2, [r0]
- b _08011A40
- .pool
-_08011884:
- ldr r1, =gUnknown_03005000
- movs r0, 0x12
- strh r0, [r1, 0x4]
- ldr r0, =0x00000ccf
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x1
- bhi _080118B0
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, =sub_801209C
- movs r1, 0x2
- bl CreateTask
- b _08011A42
- .pool
-_080118B0:
- movs r0, 0x2
- movs r1, 0x23
- bl sub_8011A64
- b _08011A42
-_080118BA:
- ldr r4, =gUnknown_03005000
- movs r0, 0xD
- strh r0, [r4, 0x4]
- movs r0, 0x3
- movs r1, 0
- bl sub_8011A64
- ldr r1, =0x00000c3e
- adds r0, r4, r1
- ldrb r1, [r0]
- ldr r2, =0x00000c3f
- adds r4, r2
- movs r0, 0x10
- adds r2, r4, 0
- movs r3, 0x46
- bl rfu_setRecvBuffer
- b _08011A42
- .pool
-_080118EC:
- movs r0, 0x2
- movs r1, 0x25
- bl sub_8011A64
- b _08011A42
-_080118F6:
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0]
- ldrh r0, [r0, 0x14]
- ands r1, r0
- cmp r1, 0
- bne _08011904
- b _08011A42
-_08011904:
- ldr r0, =gUnknown_03005000
- adds r0, 0xF0
- movs r1, 0x1
- b _08011A40
- .pool
-_08011914:
- ldr r2, =gUnknown_03005000
- adds r1, r2, 0
- adds r1, 0xF0
- movs r0, 0x3
- strb r0, [r1]
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801192A
- b _08011A42
-_0801192A:
- ldr r7, =0x00000c3c
- adds r0, r2, r7
- ldrb r1, [r0]
- movs r1, 0x1
- b _08011A40
- .pool
-_08011940:
- ldr r0, =gUnknown_03005000
- adds r0, 0xF0
- movs r1, 0x2
- strb r1, [r0]
-_08011948:
- ldr r2, =gUnknown_03005000
- adds r1, r2, 0
- adds r1, 0xF0
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _08011958
- movs r0, 0x4
- strb r0, [r1]
-_08011958:
- ldrb r0, [r2, 0xC]
- cmp r0, 0x1
- bne _08011996
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080119B4
- ldr r0, =0x00000ce2
- adds r2, r0
- ldr r0, =gUnknown_03004140
- ldrb r1, [r0, 0x14]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- cmp r0, 0
- bne _08011990
- adds r0, r4, 0
- bl sub_8011170
- b _080119B4
- .pool
-_08011990:
- bl sub_80111FC
- b _080119B4
-_08011996:
- ldr r1, =0x00000ce4
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080119B4
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080119B4
- adds r0, r4, 0
- bl sub_8011170
- movs r0, 0
- bl sub_800C27C
-_080119B4:
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080119DA
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x7]
- cmp r0, 0
- bne _080119DA
- ldr r0, =sub_800EB44
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080119DA
- ldr r1, =gUnknown_03005000
- movs r0, 0x11
- strh r0, [r1, 0x4]
-_080119DA:
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_8011A64
- b _08011A42
- .pool
-_080119FC:
- ldr r0, =gUnknown_03005000
- ldr r2, =0x00000ce3
- adds r0, r2
- b _08011A3E
- .pool
-_08011A0C:
- movs r0, 0x1
- movs r1, 0xF3
- bl sub_8011A64
- movs r0, 0xF3
- bl sub_8011170
- ldr r0, =gUnknown_03005000
- adds r0, 0xEF
- movs r1, 0x1
- b _08011A40
- .pool
-_08011A28:
- adds r0, r4, 0
- bl sub_8011170
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_8011A64
- ldr r0, =gUnknown_03005000
- ldr r7, =0x00000cdb
- adds r0, r7
- ldrb r1, [r0]
-_08011A3E:
- movs r1, 0
-_08011A40:
- strb r1, [r0]
-_08011A42:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011674
-
- thumb_func_start sub_8011A50
-sub_8011A50: @ 8011A50
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000ce4
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_8011A50
-
- thumb_func_start sub_8011A64
-sub_8011A64: @ 8011A64
- ldr r2, =gUnknown_03005000
- adds r3, r2, 0
- adds r3, 0xF1
- strb r0, [r3]
- strh r1, [r2, 0xA]
- bx lr
- .pool
- thumb_func_end sub_8011A64
-
- thumb_func_start sub_8011A74
-sub_8011A74: @ 8011A74
- ldr r0, =gUnknown_03005000
- adds r0, 0xF1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8011A74
-
- thumb_func_start sub_8011A80
-sub_8011A80: @ 8011A80
- push {lr}
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x1
- bls _08011A94
- movs r0, 0
- b _08011A96
-_08011A94:
- movs r0, 0x1
-_08011A96:
- pop {r1}
- bx r1
- thumb_func_end sub_8011A80
-
- thumb_func_start sub_8011A9C
-sub_8011A9C: @ 8011A9C
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000ce8
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_8011A9C
-
- thumb_func_start sub_8011AB0
-sub_8011AB0: @ 8011AB0
- ldr r0, =gUnknown_03005000
- ldrb r0, [r0, 0xC]
- bx lr
- .pool
- thumb_func_end sub_8011AB0
-
- thumb_func_start LinkVSync
-LinkVSync: @ 8011ABC
- push {lr}
- bl rfu_syncVBlank_
- pop {r0}
- bx r0
- thumb_func_end LinkVSync
-
- thumb_func_start sub_8011AC8
-sub_8011AC8: @ 8011AC8
- push {lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- ldr r1, =gRecvCmds
- ldr r2, =0x05000014
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011AC8
-
- thumb_func_start sub_8011AE8
-sub_8011AE8: @ 8011AE8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_8011AE8
-
- thumb_func_start sub_8011AFC
-sub_8011AFC: @ 8011AFC
- push {r4,lr}
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetTasks
- bl ResetPaletteFade
- ldr r0, =sub_8011AE8
- bl SetVBlankCallback
- bl sub_80093CC
- lsls r0, 24
- cmp r0, 0
- beq _08011B70
- ldr r1, =gLinkType
- ldr r2, =0x00001111
- adds r0, r2, 0
- strh r0, [r1]
- bl sub_800B488
- bl OpenLink
- ldr r0, =gMain
- ldrh r0, [r0, 0x24]
- bl SeedRng
- movs r4, 0
-_08011B38:
- bl Random
- ldr r1, =gSaveBlock2Ptr
- ldr r1, [r1]
- adds r1, 0xA
- adds r1, r4
- strb r0, [r1]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08011B38
- movs r1, 0xAA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl sub_8011BA4
- ldr r0, =sub_8011BF8
- bl SetMainCallback2
-_08011B70:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011AFC
-
- thumb_func_start sub_8011B90
-sub_8011B90: @ 8011B90
- push {lr}
- ldr r0, =sub_800EB44
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8011B90
-
- thumb_func_start sub_8011BA4
-sub_8011BA4: @ 8011BA4
- push {r4,lr}
- ldr r4, =nullsub_89
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08011BC2
- adds r0, r4, 0
- movs r1, 0
- bl CreateTask
- ldr r1, =gUnknown_03005000
- adds r1, 0x66
- strb r0, [r1]
-_08011BC2:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011BA4
-
- thumb_func_start sub_8011BD0
-sub_8011BD0: @ 8011BD0
- push {lr}
- ldr r0, =nullsub_89
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08011BEA
- ldr r0, =gUnknown_03005000
- adds r0, 0x66
- ldrb r0, [r0]
- bl DestroyTask
-_08011BEA:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011BD0
-
- thumb_func_start sub_8011BF8
-sub_8011BF8: @ 8011BF8
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_8011BF8
-
- thumb_func_start sub_8011C10
-sub_8011C10: @ 8011C10
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r1, =gUnknown_03005000
- movs r0, 0x1
- strb r0, [r1, 0xC]
- bl sub_8010F48
- ldr r0, =sub_801120C
- movs r1, 0
- bl sub_800BF4C
- ldr r2, =gUnknown_02022B2C
- adds r1, r2, 0
- ldr r0, =gUnknown_082ED608
- ldm r0!, {r3,r5,r6}
- stm r1!, {r3,r5,r6}
- ldm r0!, {r3,r5,r6}
- stm r1!, {r3,r5,r6}
- ldr r0, =gUnknown_082ED620
- subs r4, 0x1
- adds r4, r0
- ldrb r0, [r4]
- strh r0, [r2, 0x2]
- bl sub_800EE78
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011C10
-
- thumb_func_start sub_8011C5C
-sub_8011C5C: @ 8011C5C
- push {lr}
- ldr r1, =gUnknown_03005000
- movs r0, 0
- strb r0, [r1, 0xC]
- bl sub_8010F48
- ldr r0, =sub_8011404
- ldr r1, =sub_800ED34
- bl sub_800BF4C
- bl sub_800EF00
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011C5C
-
- thumb_func_start sub_8011C84
-sub_8011C84: @ 8011C84
- push {r4-r7,lr}
- ldr r4, =gUnknown_03005000
- movs r5, 0
- movs r0, 0x2
- strb r0, [r4, 0xC]
- bl sub_8010F48
- ldr r0, =sub_8011674
- movs r1, 0
- bl sub_800BF4C
- ldr r2, =gUnknown_02022B2C
- adds r1, r2, 0
- ldr r0, =gUnknown_082ED608
- ldm r0!, {r3,r6,r7}
- stm r1!, {r3,r6,r7}
- ldm r0!, {r3,r6,r7}
- stm r1!, {r3,r6,r7}
- strb r5, [r2, 0x11]
- movs r0, 0x96
- lsls r0, 2
- strh r0, [r2, 0x12]
- ldr r0, =sub_800EB44
- movs r1, 0x1
- bl CreateTask
- adds r4, 0x67
- strb r0, [r4]
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011C84
-
- thumb_func_start sub_8011CD8
-sub_8011CD8: @ 8011CD8
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- ldrb r0, [r0]
- orrs r0, r1
- bx lr
- thumb_func_end sub_8011CD8
-
- thumb_func_start sub_8011CE4
-sub_8011CE4: @ 8011CE4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- str r0, [sp]
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- movs r0, 0xFF
- mov r9, r0
- movs r7, 0
- ldr r1, =gUnknown_03007890
- mov r8, r1
-_08011D02:
- lsls r4, r7, 5
- adds r5, r4, 0
- adds r5, 0x14
- mov r1, r8
- ldr r0, [r1]
- adds r0, r5
- adds r0, 0x8
- bl sub_8011CD8
- lsls r0, 16
- lsrs r6, r0, 16
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- ldrh r0, [r0, 0x18]
- bl sub_8010454
- cmp r0, 0
- beq _08011D4C
- mov r0, r8
- ldr r1, [r0]
- adds r1, r5
- adds r1, 0x15
- ldr r0, [sp]
- bl StringCompare
- cmp r0, 0
- bne _08011D4C
- cmp r10, r6
- bne _08011D4C
- mov r9, r7
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- ldrb r0, [r0, 0x16]
- cmp r0, 0xFF
- bne _08011D56
-_08011D4C:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x3
- bls _08011D02
-_08011D56:
- mov r0, r9
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8011CE4
-
- thumb_func_start sub_8011D6C
-sub_8011D6C: @ 8011D6C
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r0, r6, 24
- lsrs r0, 24
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- ldr r4, =gUnknown_03005000
- ldr r0, =0x00000ce2
- adds r5, r4, r0
- ldrb r0, [r5]
- bics r0, r6
- strb r0, [r5]
- ldr r1, =0x00000cda
- adds r6, r4, r1
- ldrb r1, [r6]
- movs r0, 0x1
- bl rfu_clearSlot
- ldrb r0, [r5]
- ldr r1, =0x00000c87
- adds r4, r1
- adds r1, r4, 0
- movs r2, 0x46
- bl rfu_UNI_setSendData
- ldrb r0, [r5]
- bl sub_800E87C
- strb r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011D6C
-
- thumb_func_start sub_8011DC0
-sub_8011DC0: @ 8011DC0
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- bl sub_8011CE4
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _08011DDA
- movs r0, 0x1
- lsls r0, r1
- bl sub_8011D6C
-_08011DDA:
- pop {r0}
- bx r0
- thumb_func_end sub_8011DC0
-
- thumb_func_start sub_8011DE0
-sub_8011DE0: @ 8011DE0
- push {r4-r6,lr}
- adds r4, r0, 0
- cmp r4, 0
- beq _08011E20
- movs r3, 0
- movs r2, 0
- ldr r5, =gUnknown_03005CDE
- adds r6, r5, 0x4
-_08011DF0:
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, r4
- bne _08011E0E
- ldrb r0, [r6]
- asrs r0, r2
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08011E0E
- adds r0, r1, 0
- lsls r0, r2
- orrs r3, r0
- lsls r0, r3, 24
- lsrs r3, r0, 24
-_08011E0E:
- adds r2, 0x1
- cmp r2, 0x3
- ble _08011DF0
- cmp r3, 0
- beq _08011E20
- adds r0, r3, 0
- movs r1, 0x2
- bl sub_8011E94
-_08011E20:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011DE0
-
- thumb_func_start sub_8011E2C
-sub_8011E2C: @ 8011E2C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r6, =gSendCmd
- ldrh r0, [r6]
- cmp r0, 0
- bne _08011E7A
- ldr r5, =gUnknown_03005000
- ldr r1, =0x00000ce8
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08011E7A
- movs r0, 0xED
- lsls r0, 8
- bl sub_800FD14
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- strh r1, [r6, 0x2]
- ldrh r1, [r0, 0xA]
- strh r1, [r6, 0x4]
- ldr r1, =gUnknown_082ED695
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r0, r1
- ldrb r1, [r5, 0xD]
- ldrb r0, [r0]
- subs r1, r0
- strb r1, [r5, 0xD]
- ldrb r0, [r5, 0xD]
- strh r0, [r6, 0x6]
- adds r0, r4, 0
- bl DestroyTask
-_08011E7A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011E2C
-
- thumb_func_start sub_8011E94
-sub_8011E94: @ 8011E94
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- ldr r5, =sub_8011E2C
- adds r0, r5, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- bne _08011ECC
- adds r0, r5, 0
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0x8]
- b _08011EDC
- .pool
-_08011ECC:
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- orrs r4, r0
- strh r4, [r1, 0x8]
-_08011EDC:
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r6, [r0, 0xA]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011E94
-
- thumb_func_start sub_8011EF4
-sub_8011EF4: @ 8011EF4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- bl sub_800EE94
- lsls r0, 24
- cmp r0, 0
- beq _08011FA4
- adds r0, r4, 0
- adds r0, 0x10
- bl sub_8011CD8
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8011CE4
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _08011F8C
- ldr r0, =gUnknown_03007890
- ldr r0, [r0]
- lsls r1, r2, 5
- adds r0, r1
- ldrb r0, [r0, 0x16]
- cmp r0, 0xFF
- beq _08011F5C
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000c3d
- adds r0, r1
- strb r2, [r0]
- bl sub_800EEBC
- cmp r0, 0
- beq _08011FAA
- b _08011F84
- .pool
-_08011F5C:
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r5, 0x7F
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0x15
- beq _08011FA4
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0x16
- beq _08011FA4
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_8011A64
-_08011F84:
- adds r0, r6, 0
- bl DestroyTask
- b _08011FAA
-_08011F8C:
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000c3d
- adds r0, r1
- strb r2, [r0]
- b _08011FAA
- .pool
-_08011FA4:
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
-_08011FAA:
- movs r1, 0x1E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF0
- ble _08011FC2
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_8011A64
- adds r0, r6, 0
- bl DestroyTask
-_08011FC2:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8011EF4
-
- thumb_func_start sub_8011FC8
-sub_8011FC8: @ 8011FC8
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r5, r1, 16
- lsrs r5, 16
- ldr r0, =gUnknown_03005000
- adds r0, 0xF1
- movs r1, 0
- strb r1, [r0]
- ldr r0, =sub_8011EF4
- movs r1, 0x3
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- adds r0, r4, 0
- adds r1, r6, 0
- bl StringCopy
- strh r5, [r4, 0x10]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8011FC8
-
- thumb_func_start sub_801200C
-sub_801200C: @ 801200C
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 16
- lsrs r5, r0, 16
- bl sub_800F7DC
- ldrb r1, [r0, 0xA]
- movs r2, 0x7F
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0x45
- bne _08012032
- ldrb r1, [r4, 0xA]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0x45
- beq _08012092
-_0801202E:
- movs r0, 0x1
- b _08012094
-_08012032:
- ldrb r1, [r4, 0xA]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0x40
- bne _0801202E
- cmp r5, 0x44
- bne _08012092
- ldr r5, =gUnknown_0300510A
- ldrh r0, [r5, 0x8]
- ldr r3, =0x000003ff
- adds r2, r3, 0
- ands r2, r0
- movs r0, 0xCE
- lsls r0, 1
- cmp r2, r0
- bne _08012068
- ldrh r1, [r4, 0x8]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, r2
- beq _08012092
- b _0801202E
- .pool
-_08012068:
- ldrh r1, [r4, 0x8]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, r2
- bne _0801202E
- ldrb r2, [r4, 0xB]
- movs r0, 0xFE
- ldrb r3, [r5, 0xB]
- adds r1, r0, 0
- ands r1, r2
- ands r0, r3
- cmp r1, r0
- bne _0801202E
- ldrb r2, [r4, 0x9]
- movs r0, 0xFC
- ldrb r3, [r5, 0x9]
- adds r1, r0, 0
- ands r1, r2
- ands r0, r3
- cmp r1, r0
- bne _0801202E
-_08012092:
- movs r0, 0
-_08012094:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_801200C
-
- thumb_func_start sub_801209C
-sub_801209C: @ 801209C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- mov r8, r5
- ldr r6, =gUnknown_03005000
- adds r0, r6, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _080120BA
- adds r0, r5, 0
- bl DestroyTask
-_080120BA:
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- lsls r0, 16
- movs r1, 0x96
- lsls r1, 17
- cmp r0, r1
- ble _080120E4
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_8011A64
- adds r0, r5, 0
- bl DestroyTask
-_080120E4:
- ldr r1, =0x00000ccd
- adds r0, r6, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801217C
- ldr r0, =gUnknown_03004140
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- bne _0801217C
- movs r2, 0x86
- lsls r2, 1
- adds r0, r6, r2
- bl sub_8011CD8
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r2, =0x00000119
- adds r0, r6, r2
- bl sub_8011CE4
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _0801217C
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- ldr r7, =gUnknown_03007890
- lsls r4, r2, 5
- adds r2, r4, 0
- adds r2, 0x14
- ldr r1, [r7]
- adds r1, r2
- adds r1, 0x6
- bl sub_801200C
- cmp r0, 0
- bne _0801216C
- ldr r0, [r7]
- adds r1, r0, r4
- ldrb r0, [r1, 0x16]
- cmp r0, 0xFF
- beq _0801217C
- ldrh r0, [r1, 0x14]
- movs r1, 0x5A
- bl sub_800C12C
- lsls r0, 24
- cmp r0, 0
- bne _0801217C
- movs r0, 0xA
- strh r0, [r6, 0x4]
- adds r0, r5, 0
- bl DestroyTask
- b _0801217C
- .pool
-_0801216C:
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_8011A64
- mov r0, r8
- bl DestroyTask
-_0801217C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_801209C
-
- thumb_func_start sub_8012188
-sub_8012188: @ 8012188
- push {r4-r7,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- lsls r4, r2, 24
- lsrs r4, 24
- ldr r6, =gUnknown_03005000
- ldr r1, =0x00000ccf
- adds r0, r6, r1
- movs r7, 0
- strb r7, [r0]
- adds r0, r6, 0
- adds r0, 0xF1
- strb r7, [r0]
- ldr r1, =0x00000119
- adds r0, r6, r1
- adds r1, r3, 0
- bl StringCopy
- movs r1, 0x85
- lsls r1, 1
- adds r0, r6, r1
- adds r1, r5, 0
- movs r2, 0xD
- bl memcpy
- bl sub_800D658
- ldr r0, =sub_801209C
- movs r1, 0x2
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r5, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- strh r4, [r1, 0xA]
- ldr r0, =sub_800EB44
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- cmp r4, 0x45
- bne _08012210
- cmp r1, 0xFF
- beq _0801221E
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0x1
- strh r1, [r0, 0x16]
- b _0801221E
- .pool
-_08012210:
- cmp r2, 0xFF
- beq _0801221E
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r5
- strh r7, [r0, 0x16]
-_0801221E:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8012188
-
- thumb_func_start sub_8012224
-sub_8012224: @ 8012224
- push {lr}
- ldr r0, =gUnknown_03005000
- adds r0, 0xF0
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08012238
- movs r0, 0
- b _0801223A
- .pool
-_08012238:
- movs r0, 0x1
-_0801223A:
- pop {r1}
- bx r1
- thumb_func_end sub_8012224
-
- thumb_func_start sub_8012240
-sub_8012240: @ 8012240
- push {r4,lr}
- movs r1, 0
- ldr r0, =gUnknown_03004140
- ldrb r2, [r0]
- ldr r4, =gUnknown_03005CD1
- movs r3, 0x1
-_0801224C:
- adds r0, r2, 0
- asrs r0, r1
- ands r0, r3
- cmp r0, 0
- beq _0801226C
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801226C
- movs r0, 0
- b _08012274
- .pool
-_0801226C:
- adds r1, 0x1
- cmp r1, 0x3
- ble _0801224C
- movs r0, 0x1
-_08012274:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8012240
-
- thumb_func_start sub_801227C
-sub_801227C: @ 801227C
- push {r4,lr}
- movs r4, 0
-_08012280:
- lsls r2, r4, 24
- lsrs r2, 24
- ldr r0, =gUnknown_082ED82C
- movs r1, 0
- bl nullsub_5
- adds r4, 0x1
- cmp r4, 0x13
- ble _08012280
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801227C
-
- thumb_func_start sub_801229C
-sub_801229C: @ 801229C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1C
- movs r2, 0x13
- movs r3, 0x2
- bl nullsub_13
- ldr r4, =gUnknown_03007890
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- movs r1, 0x14
- movs r2, 0x1
- movs r3, 0x1
- bl nullsub_13
- ldr r0, [r4]
- ldrb r0, [r0, 0x3]
- movs r1, 0x17
- movs r2, 0x1
- movs r3, 0x1
- bl nullsub_13
- ldr r0, =gUnknown_03005000
- ldrb r0, [r0, 0xC]
- cmp r0, 0x1
- bne _08012378
- movs r6, 0
- adds r7, r4, 0
- movs r5, 0x14
-_080122E0:
- ldr r2, [r7]
- ldrb r0, [r2, 0x7]
- asrs r0, r6
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0801231E
- lsls r0, r6, 5
- adds r0, r2, r0
- ldrh r0, [r0, 0x18]
- adds r4, r6, 0x3
- lsls r4, 24
- lsrs r4, 24
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_13
- ldr r0, [r7]
- adds r0, r5
- adds r0, 0x6
- movs r1, 0x6
- adds r2, r4, 0
- bl nullsub_5
- ldr r0, [r7]
- adds r0, r5
- adds r0, 0x15
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_5
-_0801231E:
- adds r5, 0x20
- adds r6, 0x1
- cmp r6, 0x3
- ble _080122E0
- movs r6, 0
- ldr r0, =gUnknown_03005000
- mov r8, r0
-_0801232C:
- movs r5, 0
- adds r7, r6, 0x1
- lsls r0, r6, 3
- adds r2, r6, 0
- adds r2, 0xB
- subs r0, r6
- lsls r0, 1
- mov r1, r8
- adds r1, 0x14
- adds r4, r0, r1
- lsls r6, r2, 24
-_08012342:
- ldrb r0, [r4]
- lsls r1, r5, 25
- lsrs r1, 24
- lsrs r2, r6, 24
- movs r3, 0x2
- bl nullsub_13
- adds r4, 0x1
- adds r5, 0x1
- cmp r5, 0xD
- ble _08012342
- adds r6, r7, 0
- cmp r6, 0x3
- ble _0801232C
- ldr r0, =gUnknown_082ED868
- movs r1, 0x1
- movs r2, 0xF
- bl nullsub_5
- b _080124AA
- .pool
-_08012378:
- ldr r1, [r4]
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- beq _08012414
- ldrb r0, [r1, 0x7]
- cmp r0, 0
- beq _08012414
- movs r6, 0
- movs r5, 0xC0
- lsls r5, 18
-_0801238C:
- lsrs r4, r5, 24
- movs r0, 0
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_13
- ldr r0, =gUnknown_082ED84B
- movs r1, 0x6
- adds r2, r4, 0
- bl nullsub_5
- ldr r0, =gUnknown_082ED85B
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_5
- movs r1, 0x80
- lsls r1, 17
- adds r5, r1
- adds r6, 0x1
- cmp r6, 0x3
- ble _0801238C
- ldr r5, =gUnknown_03007890
- ldr r1, [r5]
- ldr r4, =gUnknown_03005000
- ldr r0, =0x00000c3e
- adds r4, r0
- ldrb r0, [r4]
- lsls r0, 5
- adds r1, r0
- ldrh r0, [r1, 0x18]
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x4
- bl nullsub_13
- ldrb r1, [r4]
- lsls r1, 5
- adds r1, 0x14
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x6
- movs r1, 0x6
- movs r2, 0x3
- bl nullsub_5
- ldrb r1, [r4]
- lsls r1, 5
- adds r1, 0x14
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x15
- movs r1, 0x16
- movs r2, 0x3
- bl nullsub_5
- b _080124AA
- .pool
-_08012414:
- movs r6, 0
- ldr r1, =gUnknown_03007890
- ldr r0, [r1]
- ldrb r0, [r0, 0x8]
- cmp r6, r0
- bge _08012470
- adds r7, r1, 0
- movs r1, 0x14
- mov r8, r1
-_08012426:
- ldr r0, [r7]
- lsls r5, r6, 5
- adds r1, r0, r5
- ldrb r0, [r1, 0x16]
- cmp r0, 0xFF
- beq _08012462
- ldrh r0, [r1, 0x18]
- adds r4, r6, 0x3
- lsls r4, 24
- lsrs r4, 24
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_13
- ldr r0, [r7]
- adds r0, r5
- ldrh r0, [r0, 0x14]
- movs r1, 0x6
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_13
- ldr r0, [r7]
- add r0, r8
- adds r0, 0x15
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_5
-_08012462:
- movs r0, 0x20
- add r8, r0
- adds r6, 0x1
- ldr r0, [r7]
- ldrb r0, [r0, 0x8]
- cmp r6, r0
- blt _08012426
-_08012470:
- cmp r6, 0x3
- bgt _080124AA
- lsls r0, r6, 24
- movs r1, 0xC0
- lsls r1, 18
- adds r5, r0, r1
-_0801247C:
- lsrs r4, r5, 24
- movs r0, 0
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_13
- ldr r0, =gUnknown_082ED84B
- movs r1, 0x6
- adds r2, r4, 0
- bl nullsub_5
- ldr r0, =gUnknown_082ED85B
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_5
- movs r0, 0x80
- lsls r0, 17
- adds r5, r0
- adds r6, 0x1
- cmp r6, 0x3
- ble _0801247C
-_080124AA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801229C
-
- thumb_func_start sub_80124C0
-sub_80124C0: @ 80124C0
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000c1a
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_80124C0
-
- thumb_func_start sub_80124D4
-sub_80124D4: @ 80124D4
- ldr r0, =gUnknown_03005000
- ldr r1, =0x000009e6
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_80124D4
-
thumb_func_start nullsub_89
nullsub_89: @ 80124E8
bx lr
@@ -18525,7 +764,7 @@ _08012BF6:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
movs r0, 0x5
strb r0, [r6, 0x19]
ldrb r1, [r6, 0x13]
@@ -20301,7 +2540,7 @@ sub_8013BD8: @ 8013BD8
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
ldrb r0, [r4, 0xE]
bl sub_81AE70C
ldr r0, =gStringVar1
@@ -22080,7 +4319,7 @@ _08014C82:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
ldr r1, [r5]
ldrb r0, [r5, 0x13]
lsls r0, 5
@@ -22577,7 +4816,7 @@ _080150D6:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
ldrb r0, [r7, 0xE]
bl sub_81AE70C
ldr r0, =gStringVar1
@@ -22949,7 +5188,7 @@ _08015452:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
ldr r0, [r5]
adds r4, r0, 0
adds r4, 0x10
@@ -24269,7 +6508,7 @@ _08016118:
movs r0, 0x21
strb r0, [r6, 0x14]
ldr r0, =gStringVar1
- ldr r4, =gUnknown_02022A0C
+ ldr r4, =gLinkPlayers + 0x1C + 0x08 @ &gLinkPlayers[1].name
adds r1, r4, 0
bl StringCopy
adds r0, r4, 0
@@ -31043,7 +13282,7 @@ _08019870:
_08019884:
bl task_add_05_task_del_08FA224_when_no_RfuFunc
ldr r0, =gStringVar1
- ldr r1, =gUnknown_02022A0C
+ ldr r1, =gLinkPlayers + 0x1C + 0x08 @ &gLinkPlayers[1].name
bl StringCopy
movs r0, 0x22
strb r0, [r5, 0x8]
@@ -39822,7 +22061,7 @@ _0801DEC8:
bl sub_800E0E8
movs r0, 0xE8
movs r1, 0x96
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
_0801DF04:
add sp, 0x4
pop {r4-r6}
@@ -45490,7 +27729,7 @@ sub_8020C70: @ 8020C70
ldrb r0, [r0]
cmp r0, 0
beq _08020C8E
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _08020CAC
@@ -46180,7 +28419,7 @@ _08021278:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
adds r0, r5, 0
bl sub_8022730
ldr r0, =gSpriteCoordOffsetY
@@ -53389,7 +35628,7 @@ _08024C5A:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
b _08024D20
.pool
_08024C80:
@@ -65226,7 +47465,7 @@ _0802AD0C:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
ldr r1, [r4]
b _0802ADC0
.pool
@@ -73844,4 +56083,4 @@ sub_802EFFC: @ 802EFFC
.pool
thumb_func_end sub_802EFFC
- .align 2, 0 @ Don't pad with nop.
+ .align 2, 0 @ don't pad with nop
diff --git a/asm/rom_8034C54.s b/asm/rom_8034C54.s
index 432b8250e..4274f26b6 100644
--- a/asm/rom_8034C54.s
+++ b/asm/rom_8034C54.s
@@ -366,7 +366,7 @@ sub_8034EFC: @ 8034EFC
movs r0, 0
strh r0, [r1]
lsls r1, r5, 3
- ldr r2, =gUnknown_030022F8
+ ldr r2, =gMain+0x38
mov r9, r2
add r1, r9
mov r0, r8
diff --git a/asm/script_pokemon_util_80F87D8.s b/asm/script_pokemon_util_80F87D8.s
index 4f0fb850b..1869811c2 100644
--- a/asm/script_pokemon_util_80F87D8.s
+++ b/asm/script_pokemon_util_80F87D8.s
@@ -1100,7 +1100,7 @@ sub_80F90DC: @ 80F90DC
bl sub_800E0E8
movs r0, 0x8
movs r1, 0x8
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
_080F90FE:
pop {r0}
bx r0
diff --git a/asm/start_menu.s b/asm/start_menu.s
index 5b6652a6f..23ac3710a 100644
--- a/asm/start_menu.s
+++ b/asm/start_menu.s
@@ -1615,7 +1615,7 @@ _080A0506:
thumb_func_start sub_80A0514
sub_80A0514: @ 80A0514
push {lr}
- ldr r0, =gUnknown_030026F8
+ ldr r0, =gMain+0x438
bl sub_80A03E4
cmp r0, 0
beq _080A052E
@@ -1712,7 +1712,7 @@ _080A05AC:
movs r2, 0x10
movs r3, 0
bl BeginNormalPaletteFade
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080A0620
diff --git a/asm/trade.s b/asm/trade.s
index 28cfaeb72..f565cd7ba 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -136,7 +136,7 @@ _08077258:
thumb_func_start sub_8077260
sub_8077260: @ 8077260
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08077280
@@ -410,7 +410,7 @@ _080774B2:
ldr r0, [r0]
adds r0, 0xA8
strb r2, [r0]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08077528
@@ -511,7 +511,7 @@ _080775E8:
beq _080775F2
b _08077B46
_080775F2:
- bl sub_800A23C
+ bl IsLinkPlayerDataExchangeComplete
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -532,7 +532,7 @@ _08077600:
ldr r0, [r0]
adds r0, 0xA8
strb r2, [r0]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0807762A
@@ -544,7 +544,7 @@ _0807762A:
b _08077B46
.pool
_08077648:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08077680
@@ -564,7 +564,7 @@ _0807765C:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
b _08077B46
.pool
_08077680:
@@ -1183,14 +1183,14 @@ _08077C28:
b _080780D8
.pool
_08077C3C:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08077C50
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
_08077C50:
ldr r1, =gMain
movs r3, 0x87
@@ -1781,7 +1781,7 @@ sub_807816C: @ 807816C
adds r0, 0x7E
ldrb r0, [r0]
strb r0, [r1, 0x1]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080781B4
@@ -1810,7 +1810,7 @@ sub_80781C8: @ 80781C8
ldr r5, =gMain
ldr r0, =sub_80773AC
str r0, [r5, 0x8]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08078220
@@ -4005,7 +4005,7 @@ sub_8079490: @ 8079490
ands r0, r1
cmp r0, 0
bne _080794C4
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080794B4
@@ -4030,7 +4030,7 @@ _080794C4:
thumb_func_start sub_80794CC
sub_80794CC: @ 80794CC
push {lr}
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08079518
@@ -7026,7 +7026,7 @@ _0807AC92:
cmp r1, r0
bls _0807ACC4
bl CloseLink
- ldr r0, =c2_800ACD4
+ ldr r0, =CB2_LinkError
bl SetMainCallback2
ldr r1, [r4]
adds r3, r1, 0
@@ -7155,7 +7155,7 @@ _0807AD94:
bl HandleLoadSpecialPokePic_DontHandleDeoxys
_0807ADB2:
mov r0, r8
- bl sub_806E794
+ bl GetMonSpritePalStruct
bl LoadCompressedObjectPalette
ldr r0, =gUnknown_020322A0
ldr r1, [r0]
@@ -7171,7 +7171,7 @@ _0807ADB2:
.pool
_0807ADE0:
mov r0, r8
- bl sub_806E794
+ bl GetMonSpritePalStruct
ldrh r0, [r0, 0x4]
adds r1, r4, 0
bl sub_806A068
@@ -7408,7 +7408,7 @@ _0807B006:
beq _0807B014
b _0807B116
_0807B014:
- bl sub_800A23C
+ bl IsLinkPlayerDataExchangeComplete
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -7508,14 +7508,14 @@ _0807B0F0:
ands r0, r1
cmp r0, 0
bne _0807B116
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _0807B110
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
_0807B110:
ldr r0, =sub_807EA2C
bl SetMainCallback2
@@ -9589,7 +9589,7 @@ _0807C66C:
ldr r0, [r5]
adds r0, 0xF0
ldrh r0, [r0]
- bl IsPokeSpriteNotFlipped
+ bl IsMonSpriteNotFlipped
lsls r0, 24
cmp r0, 0
bne _0807C6E4
@@ -11663,7 +11663,7 @@ _0807DA74:
ldr r0, [r5]
adds r0, 0xF0
ldrh r0, [r0]
- bl IsPokeSpriteNotFlipped
+ bl IsMonSpriteNotFlipped
lsls r0, 24
cmp r0, 0
bne _0807DAEC
@@ -12857,7 +12857,7 @@ _0807E4AE:
_0807E4B2:
strb r0, [r1]
_0807E4B4:
- bl sub_800B33C
+ bl HasLinkErrorOccurred
lsls r0, 24
cmp r0, 0
bne _0807E4C2
@@ -13832,7 +13832,7 @@ _0807EDC0:
movs r0, 0x15
bl IncrementGameStat
_0807EDCE:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _0807EDF6
@@ -14045,7 +14045,7 @@ _0807EFA4:
lsrs r0, 24
cmp r0, 0x1
bne _0807F03A
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _0807EFD8
@@ -14072,7 +14072,7 @@ _0807EFE4:
b _0807F03A
.pool
_0807EFF0:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _0807F028
@@ -14100,7 +14100,7 @@ _0807F028:
ldr r0, =c2_080543C4
bl SetMainCallback2
_0807F03A:
- bl sub_800B33C
+ bl HasLinkErrorOccurred
lsls r0, 24
cmp r0, 0
bne _0807F048
@@ -14142,7 +14142,7 @@ c2_080543C4: @ 807F068
ldr r0, [r4]
bl Free
str r5, [r4]
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _0807F0B6
@@ -14884,7 +14884,7 @@ _0807F6F8:
ldr r0, =c2_080543C4
bl SetMainCallback2
_0807F70C:
- bl sub_800B33C
+ bl HasLinkErrorOccurred
lsls r0, 24
cmp r0, 0
bne _0807F71A
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index 4ccd04e98..d7c96054d 100644
--- a/asm/trainer_card.s
+++ b/asm/trainer_card.s
@@ -187,7 +187,7 @@ _080C2830:
bl sub_80C4630
b _080C28D4
_080C2836:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _080C2852
@@ -198,7 +198,7 @@ _080C2836:
bl sub_800E0E8
movs r0, 0xE6
movs r1, 0x96
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
_080C2852:
movs r6, 0x1
negs r6, r6
@@ -4754,7 +4754,7 @@ sub_80C4FF0: @ 80C4FF0
ldr r1, =0x00000583
adds r0, r1
ldrb r0, [r0]
- bl sub_806EFF0
+ bl FacilityClassToPicIndex
lsls r0, 16
lsrs r0, 16
ldr r4, =gUnknown_0856FB18
@@ -4795,7 +4795,7 @@ _080C5060:
adds r0, r1
adds r0, r2
ldrb r0, [r0]
- bl sub_806EFF0
+ bl FacilityClassToPicIndex
lsls r0, 16
lsrs r0, 16
ldr r4, =gUnknown_0856FB18
diff --git a/common_syms/battle_main.txt b/common_syms/battle_main.txt
new file mode 100644
index 000000000..35a925946
--- /dev/null
+++ b/common_syms/battle_main.txt
@@ -0,0 +1,9 @@
+gPreBattleCallback1
+gBattleMainFunc
+gBattleResults
+gLeveledUpInBattle
+gBattlerControllerFuncs
+gHealthboxSpriteIds
+gMultiUsePlayerCursor
+gNumberOfMovesToChoose
+gUnknown_03005D7C
diff --git a/common_syms/item_menu.txt b/common_syms/item_menu.txt
new file mode 100755
index 000000000..112b591aa
--- /dev/null
+++ b/common_syms/item_menu.txt
@@ -0,0 +1 @@
+gFieldCallback
diff --git a/common_syms/link.txt b/common_syms/link.txt
new file mode 100644
index 000000000..a6d096116
--- /dev/null
+++ b/common_syms/link.txt
@@ -0,0 +1,37 @@
+gLinkPartnersHeldKeys
+gLinkDebugSeed
+gLocalLinkPlayerBlock
+gLinkErrorOccurred
+gLinkDebugFlags
+gFiller_03003074
+gRemoteLinkPlayersNotReceived
+gBlockReceivedStatus
+gFiller_03003080
+gLinkHeldKeys
+gRecvCmds
+gLinkStatus
+gUnknown_030030E4
+gUnknown_030030E8
+gUnknown_030030EC
+gUnknown_030030F0
+gUnknown_030030F4
+gSuppressLinkErrorMessage
+gWirelessCommType
+gSavedLinkPlayerCount
+gSendCmd
+gSavedMultiplayerId
+gReceivedRemoteLinkPlayers
+gLinkTestBGInfo
+gLinkCallback
+gShouldAdvanceLinkState
+gLinkTestBlockChecksums
+gBlockRequestType
+gFiller_03003154
+gFiller_03003158
+gFiller_0300315c
+gLastSendQueueCount
+gLink
+gLastRecvQueueCount
+gLinkSavedIme
+gFiller_03004138
+gFiller_0300413C
diff --git a/common_syms/link_rfu.txt b/common_syms/link_rfu.txt
new file mode 100644
index 000000000..67dd00ca7
--- /dev/null
+++ b/common_syms/link_rfu.txt
@@ -0,0 +1,2 @@
+gUnknown_03004140
+gUnknown_03005000
diff --git a/common_syms/main.txt b/common_syms/main.txt
new file mode 100644
index 000000000..a620083d1
--- /dev/null
+++ b/common_syms/main.txt
@@ -0,0 +1,9 @@
+gKeyRepeatStartDelay
+gLinkTransferringData
+gMain
+gKeyRepeatContinueDelay
+gSoftResetDisabled
+gIntrTable
+gLinkVSyncDisabled
+IntrMain_Buffer
+gPcmDmaCounter
diff --git a/common_syms/window.txt b/common_syms/window.txt
new file mode 100644
index 000000000..e1b52a24f
--- /dev/null
+++ b/common_syms/window.txt
@@ -0,0 +1,5 @@
+filler_03002F58
+filler_03002F5C
+gUnknown_03002F60
+filler_03002F64
+gUnknown_03002F70
diff --git a/constants/battle_constants.inc b/constants/battle_constants.inc
deleted file mode 100644
index 0a5dd1094..000000000
--- a/constants/battle_constants.inc
+++ /dev/null
@@ -1,171 +0,0 @@
-@ battle types
- .set BATTLE_TYPE_DOUBLE , 0x0001
- .set BATTLE_TYPE_LINK, 0x0002
- .set BATTLE_TYPE_WILD, 0x0004
- .set BATTLE_TYPE_TRAINER, 0x0008
- .set BATTLE_TYPE_FIRST_BATTLE, 0x0010
- .set BATTLE_TYPE_20, 0x0020
- .set BATTLE_TYPE_MULTI, 0x0040
- .set BATTLE_TYPE_SAFARI, 0x0080
- .set BATTLE_TYPE_BATTLE_TOWER, 0x0100
- .set BATTLE_TYPE_WALLY_TUTORIAL, 0x0200
- .set BATTLE_TYPE_ROAMER, 0x0400
- .set BATTLE_TYPE_EREADER_TRAINER, 0x0800
- .set BATTLE_TYPE_KYOGRE_GROUDON, 0x1000
- .set BATTLE_TYPE_LEGENDARY, 0x2000
- .set BATTLE_TYPE_REGI, 0x4000
- .set BATTLE_TYPE_TWO_OPPONENTS, 0x8000
- .set BATTLE_TYPE_DOME, 0x10000
- .set BATTLE_TYPE_PALACE, 0x20000
- .set BATTLE_TYPE_ARENA, 0x40000
- .set BATTLE_TYPE_FACTORY, 0x80000
- .set BATTLE_TYPE_PIKE, 0x100000
- .set BATTLE_TYPE_PYRAMID, 0x200000
- .set BATTLE_TYPE_INGAME_PARTNER, 0x400000
- .set BATTLE_TYPE_x800000, 0x800000
- .set BATTLE_TYPE_RECORDED, 0x1000000
- .set BATTLE_TYPE_x2000000, 0x2000000
- .set BATTLE_TYPE_x4000000, 0x4000000
- .set BATTLE_TYPE_SECRET_BASE, 0x8000000
- .set BATTLE_TYPE_GROUDON, 0x10000000
- .set BATTLE_TYPE_KYOGRE, 0x20000000
- .set BATTLE_TYPE_RAYQUAZA, 0x40000000
- .set BATTLE_TYPE_x80000000, 0x80000000
-
-@ battle outcomes
- .set WON, 0x1
- .set LOST, 0x2
- .set DREW, 0x3
- .set RAN, 0x4
- .set PLAYER_TELEPORTED, 0x5
- .set MON_FLED, 0x6
- .set CAUGHT, 0x7
- .set OUT_OF_BALLS, 0x8
- .set FORFEITED, 0x9
- .set OPPONENT_TELEPORTED, 0xA
-
-@ identities
- .set B_POSITION_PLAYER_LEFT, 0
- .set B_POSITION_OPPONENT_LEFT, 1
- .set B_POSITION_PLAYER_RIGHT, 2
- .set B_POSITION_OPPONENT_RIGHT, 3
-
-@ status 1
- .set STATUS1_SLEEP, 0x7
- .set STATUS1_POISON, 0x8
- .set STATUS1_BURN, 0x10
- .set STATUS1_FREEZE, 0x20
- .set STATUS1_PARALYSIS, 0x40
- .set STATUS1_TOXIC_POISON, 0x80
- .set STATUS1_TOXIC_COUNTER, 0xF00
-
- .set STATUS1_ANY, STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON
-
-@ status 2
- .set STATUS2_CONFUSION, 0x00000007
- .set STATUS2_FLINCHED, 0x00000008
- .set STATUS2_UPROAR, 0x00000070
- .set STATUS2_BIDE, 0x00000300
- .set STATUS2_LOCK_CONFUSE, 0x00000C00
- .set STATUS2_MULTIPLETURNS, 0x00001000
- .set STATUS2_WRAPPED, 0x0000E000
- .set STATUS2_INFATUATION, 0x000F0000
- .set STATUS2_FOCUS_ENERGY, 0x00100000
- .set STATUS2_TRANSFORMED, 0x00200000
- .set STATUS2_RECHARGE, 0x00400000
- .set STATUS2_RAGE, 0x00800000
- .set STATUS2_SUBSTITUTE, 0x01000000
- .set STATUS2_DESTINY_BOND, 0x02000000
- .set STATUS2_ESCAPE_PREVENTION, 0x04000000
- .set STATUS2_NIGHTMARE, 0x08000000
- .set STATUS2_CURSED, 0x10000000
- .set STATUS2_FORESIGHT, 0x20000000
- .set STATUS2_DEFENSE_CURL, 0x40000000
- .set STATUS2_TORMENT, 0x80000000
-
-@ status 3
- .set STATUS3_LEECHSEED_BANK, 0x3
- .set STATUS3_LEECHSEED, 0x4
- .set STATUS3_ALWAYS_HITS, 0x18
- .set STATUS3_PERISH_SONG, 0x20
- .set STATUS3_ON_AIR, 0x40
- .set STATUS3_UNDERGROUND, 0x80
- .set STATUS3_MINIMIZED, 0x100
- .set STATUS3_ROOTED, 0x400
- .set STATUS3_CHARGED_UP, 0x200
- .set STATUS3_YAWN, 0x1800
- .set STATUS3_IMPRISONED_OTHERS, 0x2000
- .set STATUS3_GRUDGE, 0x4000
- .set STATUS3_CANT_SCORE_A_CRIT, 0x8000
- .set STATUS3_MUDSPORT, 0x10000
- .set STATUS3_WATERSPORT, 0x20000
- .set STATUS3_UNDERWATER, 0x40000
- .set STATUS3_INTIMIDATE_POKES, 0x80000
- .set STATUS3_TRACE, 0x100000
-
-@ side status
- .set SIDE_STATUS_REFLECT, 0x1
- .set SIDE_STATUS_LIGHTSCREEN, 0x2
- .set SIDE_STATUS_X4, 0x4
- .set SIDE_STATUS_SPIKES, 0x10
- .set SIDE_STATUS_SAFEGUARD, 0x20
- .set SIDE_STATUS_FUTUREATTACK, 0x40
- .set SIDE_STATUS_MIST, 0x100
- .set SIDE_STATUS_SPIKES_DAMAGED, 0x200
-
-@ stats
- .set HP, 0x0
- .set ATK, 0x1
- .set DEF, 0x2
- .set SPEED, 0x3
- .set SPATK, 0x4
- .set SPDEF, 0x5
- .set ACC, 0x6
- .set EVASION, 0x7
-
-@ weather flags
- .set WEATHER_RAIN_TEMPORARY, 0x01
- .set WEATHER_RAIN_DOWNPOUR, 0x02
- .set WEATHER_RAIN_PERMANENT, 0x04
- .set WEATHER_SANDSTORM_TEMPORARY, 0x08
- .set WEATHER_SANDSTORM_PERMANENT, 0x10
- .set WEATHER_SUN_TEMPORARY, 0x20
- .set WEATHER_SUN_PERMANENT, 0x40
- .set WEATHER_HAIL, 0x80
-
-@ hitmarker
- .set HITMARKER_x10, 0x00000010
- .set HITMARKER_x20, 0x00000020
- .set HITMARKER_DESTINYBOND, 0x00000040
- .set HITMARKER_NO_ANIMATIONS, 0x00000080
- .set HITMARKER_IGNORE_SUBSTITUTE, 0x00000100
- .set HITMARKER_NO_ATTACKSTRING, 0x00000200
- .set HITMARKER_ATTACKSTRING_PRINTED, 0x00000400
- .set HITMARKER_NO_PPDEDUCT, 0x00000800
- .set HITMARKER_PURSUIT_TRAP, 0x00001000
- .set HITMARKER_IGNORE_SAFEGUARD, 0x00002000
- .set HITMARKER_SYNCHRONISE_EFFECT, 0x00004000
- .set HITMARKER_RUN, 0x00008000
- .set HITMARKER_IGNORE_ON_AIR, 0x00010000
- .set HITMARKER_IGNORE_UNDERGROUND, 0x00020000
- .set HITMARKER_IGNORE_UNDERWATER, 0x00040000
- .set HITMARKER_UNABLE_TO_USE_MOVE, 0x00080000
- .set HITMARKER_x100000, 0x00100000
- .set HITMARKER_x200000, 0x00200000
- .set HITMARKER_x400000, 0x00400000
- .set HITMARKER_x800000, 0x00800000
- .set HITMARKER_GRUDGE, 0x01000000
- .set HITMARKER_OBEYS, 0x02000000
- .set HITMARKER_x4000000, 0x04000000
- .set HITMARKER_x8000000, 0x08000000
-
-@ move flags
- .set MOVE_RESULT_MISSED, 0x1
- .set MOVE_RESULT_SUPER_EFFECTIVE, 0x2
- .set MOVE_RESULT_NOT_VERY_EFFECTIVE, 0x4
- .set MOVE_RESULT_DOESNT_AFFECT_FOE, 0x8
- .set MOVE_RESULT_ONE_HIT_KO, 0x10
- .set MOVE_RESULT_FAILED, 0x20
- .set MOVE_RESULT_FOE_ENDURED, 0x40
- .set MOVE_RESULT_FOE_HUNG_ON, 0x80
- .set MOVE_RESULT_NO_EFFECT, (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
diff --git a/constants/battle_script_constants.inc b/constants/battle_script_constants.inc
deleted file mode 100644
index fe0e7dddc..000000000
--- a/constants/battle_script_constants.inc
+++ /dev/null
@@ -1,169 +0,0 @@
-@ animation ids
- .set ANIM_CASTFORM_CHANGE, 0x0
- .set ANIM_STATS_CHANGE, 0x1
- .set ANIM_SUBSTITUTE_FADE, 0x2
- .set ANIM_SUBSTITUTE_APPEAR, 0x3
- .set ANIM_x4, 0x4
- .set ANIM_ITEM_KNOCKOFF, 0x5
- .set ANIM_TURN_TRAP, 0x6
- .set ANIM_ITEM_EFFECT, 0x7
- .set ANIM_SMOKEBALL_ESCAPE, 0x8
- .set ANIM_HANGED_ON, 0x9
- .set ANIM_RAIN_CONTINUES, 0xA
- .set ANIM_SUN_CONTINUES, 0xB
- .set ANIM_SANDSTORM_CONTINUES, 0xC
- .set ANIM_HAIL_CONTINUES, 0xD
- .set ANIM_LEECH_SEED_DRAIN, 0xE
- .set ANIM_MON_HIT, 0xF
- .set ANIM_ITEM_STEAL, 0x10
- .set ANIM_SNATCH_MOVE, 0x11
- .set ANIM_FUTURE_SIGHT_HIT, 0x12
- .set ANIM_DOOM_DESIRE_HIT, 0x13
- .set ANIM_x14, 0x14
- .set ANIM_INGRAIN_HEAL, 0x15
- .set ANIM_WISH_HEAL, 0x16
-
-@ atk 80
- .set ATK80_DMG_CHANGE_SIGN, 0x0
- .set ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP, 0x1
- .set ATK80_DMG_DOUBLED, 0x2
-
-@ compare operands
- .set EQUAL, 0x0
- .set NOT_EQUAL, 0x1
- .set GREATER_THAN, 0x2
- .set LESS_THAN, 0x3
- .set COMMON_BITS, 0x4
- .set NO_COMMON_BITS, 0x5
-
-@ move effects
- .set EFFECT_SLEEP, 0x1
- .set EFFECT_POISON, 0x2
- .set EFFECT_BURN, 0x3
- .set EFFECT_FREEZE, 0x4
- .set EFFECT_PARALYSIS, 0x5
- .set EFFECT_TOXIC, 0x6
- .set EFFECT_CONFUSION, 0x7
- .set EFFECT_FLINCH, 0x8
- .set EFFECT_TRI_ATTACK, 0x9
- .set EFFECT_UPROAR, 0xA
- .set EFFECT_PAYDAY, 0xB
- .set EFFECT_CHARGING, 0xC
- .set EFFECT_WRAP, 0xD
- .set EFFECT_RECOIL_25, 0xE
- .set EFFECT_ATK_PLUS_1, 0xF
- .set EFFECT_DEF_PLUS_1, 0x10
- .set EFFECT_SPD_PLUS_1, 0x11
- .set EFFECT_SP_ATK_PLUS_1, 0x12
- .set EFFECT_SP_DEF_PLUS_1, 0x13
- .set EFFECT_ACC_PLUS_1, 0x14
- .set EFFECT_EVS_PLUS_1, 0x15
- .set EFFECT_ATK_MINUS_1, 0x16
- .set EFFECT_DEF_MINUS_1, 0x17
- .set EFFECT_SPD_MINUS_1, 0x18
- .set EFFECT_SP_ATK_MINUS_1, 0x19
- .set EFFECT_SP_DEF_MINUS_1, 0x1A
- .set EFFECT_ACC_MINUS_1, 0x1B
- .set EFFECT_EVS_MINUS_1, 0x1C
- .set EFFECT_RECHARGE, 0x1D
- .set EFFECT_RAGE, 0x1E
- .set EFFECT_STEAL_ITEM, 0x1F
- .set EFFECT_PREVENT_ESCAPE, 0x20
- .set EFFECT_NIGHTMARE, 0x21
- .set EFFECT_ALL_STATS_UP, 0x22
- .set EFFECT_RAPIDSPIN, 0x23
- .set EFFECT_REMOVE_PARALYSIS, 0x24
- .set EFFECT_ATK_DEF_DOWN, 0x25
- .set EFFECT_RECOIL_33_PARALYSIS, 0x26
- .set EFFECT_ATK_PLUS_2, 0x27
- .set EFFECT_DEF_PLUS_2, 0x28
- .set EFFECT_SPD_PLUS_2, 0x29
- .set EFFECT_SP_ATK_PLUS_2, 0x2A
- .set EFFECT_SP_DEF_PLUS_2, 0x2B
- .set EFFECT_ACC_PLUS_2, 0x2C
- .set EFFECT_EVS_PLUS_2, 0x2D
- .set EFFECT_ATK_MINUS_2, 0x2E
- .set EFFECT_DEF_MINUS_2, 0x2F
- .set EFFECT_SPD_MINUS_2, 0x30
- .set EFFECT_SP_ATK_MINUS_2, 0x31
- .set EFFECT_SP_DEF_MINUS_2, 0x32
- .set EFFECT_ACC_MINUS_2, 0x33
- .set EFFECT_EVS_MINUS_2, 0x34
- .set EFFECT_THRASH, 0x35
- .set EFFECT_KNOCK_OFF, 0x36
- .set EFFECT_NOTHING_37, 0x37
- .set EFFECT_NOTHING_38, 0x38
- .set EFFECT_NOTHING_39, 0x39
- .set EFFECT_NOTHING_3A, 0x3A
- .set EFFECT_SP_ATK_TWO_DOWN, 0x3B
- .set EFFECT_NOTHING_3C, 0x3C
- .set EFFECT_NOTHING_3D, 0x3D
- .set EFFECT_NOTHING_3E, 0x3E
- .set EFFECT_NOTHING_3F, 0x3F
-
- .set AFFECTS_USER, 0x40
- .set CERTAIN, 0x80
-
-@ accuracy calc
- .set NO_ACC_CALC, 0xFFFE
- .set NO_ACC_CALC_CHECK_LOCK_ON, 0xFFFF
- .set ACC_CURR_MOVE, 0x0
-
-@ bank values
- .set TARGET, 0x0
- .set ATTACKER, 0x1
- .set EFFECT_BANK, 0x2
- .set GBANK_1, 0x3
- .set ATTACKER_WITH_PARTNER, 0x4 @ only for cmd98
- .set BANK0, 0x7
- .set SCRIPTING_BANK, 0xA
- .set OPPONENT1, 0xC
-
-@ various
- .set VARIOUS_CANCEL_MULTI_TURN_MOVES, 0
- .set VARIOUS_SET_MAGIC_COAT_TARGET, 1
- .set VARIOUS_IS_RUNNING_IMPOSSIBLE, 2
- .set VARIOUS_GET_MOVE_TARGET, 3
- .set VARIOUS_RESET_INTIMIDATE_TRACE_BITS, 5
- .set VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP, 6
- .set VARIOUS_EMIT_YESNOBOX, 13
- .set VARIOUS_WAIT_CRY, 18
- .set VARIOUS_RETURN_OPPONENT_MON1, 19
- .set VARIOUS_RETURN_OPPONENT_MON2, 20
- .set VARIOUS_SET_TELEPORT_OUTCOME, 25
- .set VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC, 26
-
-@ jumpifcant switch flag argument
- .set ATK4F_DONT_CHECK_STATUSES, 0x80
-
-@ battle scripting struct
- .equiv sPAINSPLIT_HP, gBattleScripting
- .equiv sBIDE_DMG, gBattleScripting + 4
- .equiv sMULTIHIT_STRING, gBattleScripting + 8
- .equiv sDMG_MULTIPLIER, gBattleScripting + 0xE
- .equiv sTWOTURN_STRINGID, gBattleScripting + 0xF
- .equiv sANIM_ARG1, gBattleScripting + 0x10
- .equiv sANIM_ARG2, gBattleScripting + 0x11
- .equiv sTRIPLE_KICK_POWER, gBattleScripting + 0x12
- .equiv sMOVEEND_STATE, gBattleScripting + 0x14
- .equiv sBANK_WITH_ABILITY, gBattleScripting + 0x15
- .equiv sMULTIHIT_EFFECT, gBattleScripting + 0x16
- .equiv sBANK, gBattleScripting + 0x17
- .equiv sANIM_TURN, gBattleScripting + 0x18
- .equiv sANIM_TARGETS_HIT, gBattleScripting + 0x19
- .equiv sSTATCHANGER, gBattleScripting + 0x1A
- .equiv sFIELD_1B, gBattleScripting + 0x1B
- .equiv sGIVEEXP_STATE, gBattleScripting + 0x1C
- .equiv sBATTLE_STYLE, gBattleScripting + 0x1D
- .equiv sLVLBOX_STATE, gBattleScripting + 0x1E
- .equiv sLEARNMOVE_STATE, gBattleScripting + 0x1F
- .equiv sFIELD_20, gBattleScripting + 0x20
- .equiv sRESHOW_MAIN_STATE, gBattleScripting + 0x21
- .equiv sRESHOW_HELPER_STATE, gBattleScripting + 0x22
- .equiv sFIELD_23, gBattleScripting + 0x23
- .equiv sFIELD_24, gBattleScripting + 0x24
- .equiv sMULTIPLAYER_ID, gBattleScripting + 0x25
-
-@ battle communication struct
- .equiv cEFFECT_CHOOSER, gBattleCommunication + 3
- .equiv cMULTISTRING_CHOOSER, gBattleCommunication + 5
diff --git a/constants/battle_text.inc b/constants/battle_text.inc
deleted file mode 100644
index 1d3a5f346..000000000
--- a/constants/battle_text.inc
+++ /dev/null
@@ -1,375 +0,0 @@
- .set STRINGID_INTROMSG, 0
- .set STRINGID_INTROSENDOUT, 1
- .set STRINGID_RETURNMON, 2
- .set STRINGID_SWITCHINMON, 3
- .set STRINGID_USEDMOVE, 4
- .set STRINGID_BATTLEEND, 5
- .set STRINGID_TRAINER1LOSETEXT, 12
- .set STRINGID_PKMNGAINEDEXP, 13
- .set STRINGID_PKMNGREWTOLV, 14
- .set STRINGID_PKMNLEARNEDMOVE, 15
- .set STRINGID_TRYTOLEARNMOVE1, 16
- .set STRINGID_TRYTOLEARNMOVE2, 17
- .set STRINGID_TRYTOLEARNMOVE3, 18
- .set STRINGID_PKMNFORGOTMOVE, 19
- .set STRINGID_STOPLEARNINGMOVE, 20
- .set STRINGID_DIDNOTLEARNMOVE, 21
- .set STRINGID_PKMNLEARNEDMOVE2, 22
- .set STRINGID_ATTACKMISSED, 23
- .set STRINGID_PKMNPROTECTEDITSELF, 24
- .set STRINGID_STATSWONTINCREASE2, 25
- .set STRINGID_AVOIDEDDAMAGE, 26
- .set STRINGID_ITDOESNTAFFECT, 27
- .set STRINGID_ATTACKERFAINTED, 28
- .set STRINGID_TARGETFAINTED, 29
- .set STRINGID_PLAYERGOTMONEY, 30
- .set STRINGID_PLAYERWHITEOUT, 31
- .set STRINGID_PLAYERWHITEOUT2, 32
- .set STRINGID_PREVENTSESCAPE, 33
- .set STRINGID_HITXTIMES, 34
- .set STRINGID_PKMNFELLASLEEP, 35
- .set STRINGID_PKMNMADESLEEP, 36
- .set STRINGID_PKMNALREADYASLEEP, 37
- .set STRINGID_PKMNALREADYASLEEP2, 38
- .set STRINGID_PKMNWASNTAFFECTED, 39
- .set STRINGID_PKMNWASPOISONED, 40
- .set STRINGID_PKMNPOISONEDBY, 41
- .set STRINGID_PKMNHURTBYPOISON, 42
- .set STRINGID_PKMNALREADYPOISONED, 43
- .set STRINGID_PKMNBADLYPOISONED, 44
- .set STRINGID_PKMNENERGYDRAINED, 45
- .set STRINGID_PKMNWASBURNED, 46
- .set STRINGID_PKMNBURNEDBY, 47
- .set STRINGID_PKMNHURTBYBURN, 48
- .set STRINGID_PKMNWASFROZEN, 49
- .set STRINGID_PKMNFROZENBY, 50
- .set STRINGID_PKMNISFROZEN, 51
- .set STRINGID_PKMNWASDEFROSTED, 52
- .set STRINGID_PKMNWASDEFROSTED2, 53
- .set STRINGID_PKMNWASDEFROSTEDBY, 54
- .set STRINGID_PKMNWASPARALYZED, 55
- .set STRINGID_PKMNWASPARALYZEDBY, 56
- .set STRINGID_PKMNISPARALYZED, 57
- .set STRINGID_PKMNISALREADYPARALYZED, 58
- .set STRINGID_PKMNHEALEDPARALYSIS, 59
- .set STRINGID_PKMNDREAMEATEN, 60
- .set STRINGID_STATSWONTINCREASE, 61
- .set STRINGID_STATSWONTDECREASE, 62
- .set STRINGID_TEAMSTOPPEDWORKING, 63
- .set STRINGID_FOESTOPPEDWORKING, 64
- .set STRINGID_PKMNISCONFUSED, 65
- .set STRINGID_PKMNHEALEDCONFUSION, 66
- .set STRINGID_PKMNWASCONFUSED, 67
- .set STRINGID_PKMNALREADYCONFUSED, 68
- .set STRINGID_PKMNFELLINLOVE, 69
- .set STRINGID_PKMNINLOVE, 70
- .set STRINGID_PKMNIMMOBILIZEDBYLOVE, 71
- .set STRINGID_PKMNBLOWNAWAY, 72
- .set STRINGID_PKMNCHANGEDTYPE, 73
- .set STRINGID_PKMNFLINCHED, 74
- .set STRINGID_PKMNREGAINEDHEALTH, 75
- .set STRINGID_PKMNHPFULL, 76
- .set STRINGID_PKMNRAISEDSPDEF, 77
- .set STRINGID_PKMNRAISEDDEF, 78
- .set STRINGID_PKMNCOVEREDBYVEIL, 79
- .set STRINGID_PKMNUSEDSAFEGUARD, 80
- .set STRINGID_PKMNSAFEGUARDEXPIRED, 81
- .set STRINGID_PKMNWENTTOSLEEP, 82
- .set STRINGID_PKMNSLEPTHEALTHY, 83
- .set STRINGID_PKMNWHIPPEDWHIRLWIND, 84
- .set STRINGID_PKMNTOOKSUNLIGHT, 85
- .set STRINGID_PKMNLOWEREDHEAD, 86
- .set STRINGID_PKMNISGLOWING, 87
- .set STRINGID_PKMNFLEWHIGH, 88
- .set STRINGID_PKMNDUGHOLE, 89
- .set STRINGID_PKMNSQUEEZEDBYBIND, 90
- .set STRINGID_PKMNTRAPPEDINVORTEX, 91
- .set STRINGID_PKMNWRAPPEDBY, 92
- .set STRINGID_PKMNCLAMPED, 93
- .set STRINGID_PKMNHURTBY, 94
- .set STRINGID_PKMNFREEDFROM, 95
- .set STRINGID_PKMNCRASHED, 96
- .set STRINGID_PKMNSHROUDEDINMIST, 97
- .set STRINGID_PKMNPROTECTEDBYMIST, 98
- .set STRINGID_PKMNGETTINGPUMPED, 99
- .set STRINGID_PKMNHITWITHRECOIL, 100
- .set STRINGID_PKMNPROTECTEDITSELF2, 101
- .set STRINGID_PKMNBUFFETEDBYSANDSTORM, 102
- .set STRINGID_PKMNPELTEDBYHAIL, 103
- .set STRINGID_PKMNSEEDED, 104
- .set STRINGID_PKMNEVADEDATTACK, 105
- .set STRINGID_PKMNSAPPEDBYLEECHSEED, 106
- .set STRINGID_PKMNFASTASLEEP, 107
- .set STRINGID_PKMNWOKEUP, 108
- .set STRINGID_PKMNUPROARKEPTAWAKE, 109
- .set STRINGID_PKMNWOKEUPINUPROAR, 110
- .set STRINGID_PKMNCAUSEDUPROAR, 111
- .set STRINGID_PKMNMAKINGUPROAR, 112
- .set STRINGID_PKMNCALMEDDOWN, 113
- .set STRINGID_PKMNCANTSLEEPINUPROAR, 114
- .set STRINGID_PKMNSTOCKPILED, 115
- .set STRINGID_PKMNCANTSTOCKPILE, 116
- .set STRINGID_PKMNCANTSLEEPINUPROAR2, 117
- .set STRINGID_UPROARKEPTPKMNAWAKE, 118
- .set STRINGID_PKMNSTAYEDAWAKEUSING, 119
- .set STRINGID_PKMNSTORINGENERGY, 120
- .set STRINGID_PKMNUNLEASHEDENERGY, 121
- .set STRINGID_PKMNFATIGUECONFUSION, 122
- .set STRINGID_PKMNPICKEDUPITEM, 123
- .set STRINGID_PKMNUNAFFECTED, 124
- .set STRINGID_PKMNTRANSFORMEDINTO, 125
- .set STRINGID_PKMNMADESUBSTITUTE, 126
- .set STRINGID_PKMNHASSUBSTITUTE, 127
- .set STRINGID_SUBSTITUTEDAMAGED, 128
- .set STRINGID_PKMNSUBSTITUTEFADED, 129
- .set STRINGID_PKMNMUSTRECHARGE, 130
- .set STRINGID_PKMNRAGEBUILDING, 131
- .set STRINGID_PKMNMOVEWASDISABLED, 132
- .set STRINGID_PKMNMOVEISDISABLED, 133
- .set STRINGID_PKMNMOVEDISABLEDNOMORE, 134
- .set STRINGID_PKMNGOTENCORE, 135
- .set STRINGID_PKMNENCOREENDED, 136
- .set STRINGID_PKMNTOOKAIM, 137
- .set STRINGID_PKMNSKETCHEDMOVE, 138
- .set STRINGID_PKMNTRYINGTOTAKEFOE, 139
- .set STRINGID_PKMNTOOKFOE, 140
- .set STRINGID_PKMNREDUCEDPP, 141
- .set STRINGID_PKMNSTOLEITEM, 142
- .set STRINGID_TARGETCANTESCAPENOW, 143
- .set STRINGID_PKMNFELLINTONIGHTMARE, 144
- .set STRINGID_PKMNLOCKEDINNIGHTMARE, 145
- .set STRINGID_PKMNLAIDCURSE, 146
- .set STRINGID_PKMNAFFLICTEDBYCURSE, 147
- .set STRINGID_SPIKESSCATTERED, 148
- .set STRINGID_PKMNHURTBYSPIKES, 149
- .set STRINGID_PKMNIDENTIFIED, 150
- .set STRINGID_PKMNPERISHCOUNTFELL, 151
- .set STRINGID_PKMNBRACEDITSELF, 152
- .set STRINGID_PKMNENDUREDHIT, 153
- .set STRINGID_MAGNITUDESTRENGTH, 154
- .set STRINGID_PKMNCUTHPMAXEDATTACK, 155
- .set STRINGID_PKMNCOPIEDSTATCHANGES, 156
- .set STRINGID_PKMNGOTFREE, 157
- .set STRINGID_PKMNSHEDLEECHSEED, 158
- .set STRINGID_PKMNBLEWAWAYSPIKES, 159
- .set STRINGID_PKMNFLEDFROMBATTLE, 160
- .set STRINGID_PKMNFORESAWATTACK, 161
- .set STRINGID_PKMNTOOKATTACK, 162
- .set STRINGID_PKMNATTACK, 163
- .set STRINGID_PKMNCENTERATTENTION, 164
- .set STRINGID_PKMNCHARGINGPOWER, 165
- .set STRINGID_NATUREPOWERTURNEDINTO, 166
- .set STRINGID_PKMNSTATUSNORMAL, 167
- .set STRINGID_PKMNHASNOMOVESLEFT, 168
- .set STRINGID_PKMNSUBJECTEDTOTORMENT, 169
- .set STRINGID_PKMNCANTUSEMOVETORMENT, 170
- .set STRINGID_PKMNTIGHTENINGFOCUS, 171
- .set STRINGID_PKMNFELLFORTAUNT, 172
- .set STRINGID_PKMNCANTUSEMOVETAUNT, 173
- .set STRINGID_PKMNREADYTOHELP, 174
- .set STRINGID_PKMNSWITCHEDITEMS, 175
- .set STRINGID_PKMNCOPIEDFOE, 176
- .set STRINGID_PKMNMADEWISH, 177
- .set STRINGID_PKMNWISHCAMETRUE, 178
- .set STRINGID_PKMNPLANTEDROOTS, 179
- .set STRINGID_PKMNABSORBEDNUTRIENTS, 180
- .set STRINGID_PKMNANCHOREDITSELF, 181
- .set STRINGID_PKMNWASMADEDROWSY, 182
- .set STRINGID_PKMNKNOCKEDOFF, 183
- .set STRINGID_PKMNSWAPPEDABILITIES, 184
- .set STRINGID_PKMNSEALEDOPPONENTMOVE, 185
- .set STRINGID_PKMNCANTUSEMOVESEALED, 186
- .set STRINGID_PKMNWANTSGRUDGE, 187
- .set STRINGID_PKMNLOSTPPGRUDGE, 188
- .set STRINGID_PKMNSHROUDEDITSELF, 189
- .set STRINGID_PKMNMOVEBOUNCED, 190
- .set STRINGID_PKMNWAITSFORTARGET, 191
- .set STRINGID_PKMNSNATCHEDMOVE, 192
- .set STRINGID_PKMNMADEITRAIN, 193
- .set STRINGID_PKMNRAISEDSPEED, 194
- .set STRINGID_PKMNPROTECTEDBY, 195
- .set STRINGID_PKMNPREVENTSUSAGE, 196
- .set STRINGID_PKMNRESTOREDHPUSING, 197
- .set STRINGID_PKMNCHANGEDTYPEWITH, 198
- .set STRINGID_PKMNPREVENTSPARALYSISWITH, 199
- .set STRINGID_PKMNPREVENTSROMANCEWITH, 200
- .set STRINGID_PKMNPREVENTSPOISONINGWITH, 201
- .set STRINGID_PKMNPREVENTSCONFUSIONWITH, 202
- .set STRINGID_PKMNRAISEDFIREPOWERWITH, 203
- .set STRINGID_PKMNANCHORSITSELFWITH, 204
- .set STRINGID_PKMNCUTSATTACKWITH, 205
- .set STRINGID_PKMNPREVENTSSTATLOSSWITH, 206
- .set STRINGID_PKMNHURTSWITH, 207
- .set STRINGID_PKMNTRACED, 208
- .set STRINGID_STATSHARPLY, 209
- .set STRINGID_STATROSE, 210
- .set STRINGID_STATHARSHLY, 211
- .set STRINGID_STATFELL, 212
- .set STRINGID_PKMNSSTATCHANGED, 213
- .set STRINGID_PKMNSSTATCHANGED2, 214
- .set STRINGID_PKMNSSTATCHANGED3, 215
- .set STRINGID_PKMNSSTATCHANGED4, 216
- .set STRINGID_CRITICALHIT, 217
- .set STRINGID_ONEHITKO, 218
- .set STRINGID_123POOF, 219
- .set STRINGID_ANDELLIPSIS, 220
- .set STRINGID_NOTVERYEFFECTIVE, 221
- .set STRINGID_SUPEREFFECTIVE, 222
- .set STRINGID_GOTAWAYSAFELY, 223
- .set STRINGID_WILDPKMNFLED, 224
- .set STRINGID_NORUNNINGFROMTRAINERS, 225
- .set STRINGID_CANTESCAPE, 226
- .set STRINGID_DONTLEAVEBIRCH, 227
- .set STRINGID_BUTNOTHINGHAPPENED, 228
- .set STRINGID_BUTITFAILED, 229
- .set STRINGID_ITHURTCONFUSION, 230
- .set STRINGID_MIRRORMOVEFAILED, 231
- .set STRINGID_STARTEDTORAIN, 232
- .set STRINGID_DOWNPOURSTARTED, 233
- .set STRINGID_RAINCONTINUES, 234
- .set STRINGID_DOWNPOURCONTINUES, 235
- .set STRINGID_RAINSTOPPED, 236
- .set STRINGID_SANDSTORMBREWED, 237
- .set STRINGID_SANDSTORMRAGES, 238
- .set STRINGID_SANDSTORMSUBSIDED, 239
- .set STRINGID_SUNLIGHTGOTBRIGHT, 240
- .set STRINGID_SUNLIGHTSTRONG, 241
- .set STRINGID_SUNLIGHTFADED, 242
- .set STRINGID_STARTEDHAIL, 243
- .set STRINGID_HAILCONTINUES, 244
- .set STRINGID_HAILSTOPPED, 245
- .set STRINGID_FAILEDTOSPITUP, 246
- .set STRINGID_FAILEDTOSWALLOW, 247
- .set STRINGID_WINDBECAMEHEATWAVE, 248
- .set STRINGID_STATCHANGESGONE, 249
- .set STRINGID_COINSSCATTERED, 250
- .set STRINGID_TOOWEAKFORSUBSTITUTE, 251
- .set STRINGID_SHAREDPAIN, 252
- .set STRINGID_BELLCHIMED, 253
- .set STRINGID_FAINTINTHREE, 254
- .set STRINGID_NOPPLEFT, 255
- .set STRINGID_BUTNOPPLEFT, 256
- .set STRINGID_PLAYERUSEDITEM, 257
- .set STRINGID_WALLYUSEDITEM, 258
- .set STRINGID_TRAINERBLOCKEDBALL, 259
- .set STRINGID_DONTBEATHIEF, 260
- .set STRINGID_ITDODGEDBALL, 261
- .set STRINGID_YOUMISSEDPKMN, 262
- .set STRINGID_PKMNBROKEFREE, 263
- .set STRINGID_ITAPPEAREDCAUGHT, 264
- .set STRINGID_AARGHALMOSTHADIT, 265
- .set STRINGID_SHOOTSOCLOSE, 266
- .set STRINGID_GOTCHAPKMNCAUGHT, 267
- .set STRINGID_GOTCHAPKMNCAUGHT2, 268
- .set STRINGID_GIVENICKNAMECAPTURED, 269
- .set STRINGID_PKMNSENTTOPC, 270
- .set STRINGID_PKMNDATAADDEDTODEX, 271
- .set STRINGID_ITISRAINING, 272
- .set STRINGID_SANDSTORMISRAGING, 273
- .set STRINGID_CANTESCAPE2, 274
- .set STRINGID_PKMNIGNORESASLEEP, 275
- .set STRINGID_PKMNIGNOREDORDERS, 276
- .set STRINGID_PKMNBEGANTONAP, 277
- .set STRINGID_PKMNLOAFING, 278
- .set STRINGID_PKMNWONTOBEY, 279
- .set STRINGID_PKMNTURNEDAWAY, 280
- .set STRINGID_PKMNPRETENDNOTNOTICE, 281
- .set STRINGID_ENEMYABOUTTOSWITCHPKMN, 282
- .set STRINGID_CREPTCLOSER, 283
- .set STRINGID_CANTGETCLOSER, 284
- .set STRINGID_PKMNWATCHINGCAREFULLY, 285
- .set STRINGID_PKMNCURIOUSABOUTX, 286
- .set STRINGID_PKMNENTHRALLEDBYX, 287
- .set STRINGID_PKMNIGNOREDX, 288
- .set STRINGID_THREWPOKEBLOCKATPKMN, 289
- .set STRINGID_OUTOFSAFARIBALLS, 290
- .set STRINGID_PKMNSITEMCUREDPARALYSIS, 291
- .set STRINGID_PKMNSITEMCUREDPOISON, 292
- .set STRINGID_PKMNSITEMHEALEDBURN, 293
- .set STRINGID_PKMNSITEMDEFROSTEDIT, 294
- .set STRINGID_PKMNSITEMWOKEIT, 295
- .set STRINGID_PKMNSITEMSNAPPEDOUT, 296
- .set STRINGID_PKMNSITEMCUREDPROBLEM, 297
- .set STRINGID_PKMNSITEMRESTOREDHEALTH, 298
- .set STRINGID_PKMNSITEMRESTOREDPP, 299
- .set STRINGID_PKMNSITEMRESTOREDSTATUS, 300
- .set STRINGID_PKMNSITEMRESTOREDHPALITTLE, 301
- .set STRINGID_ITEMALLOWSONLYYMOVE, 302
- .set STRINGID_PKMNHUNGONWITHX, 303
- .set STRINGID_EMPTYSTRING3, 304
- .set STRINGID_PKMNSXPREVENTSBURNS, 305
- .set STRINGID_PKMNSXBLOCKSY, 306
- .set STRINGID_PKMNSXRESTOREDHPALITTLE2, 307
- .set STRINGID_PKMNSXWHIPPEDUPSANDSTORM, 308
- .set STRINGID_PKMNSXPREVENTSYLOSS, 309
- .set STRINGID_PKMNSXINFATUATEDY, 310
- .set STRINGID_PKMNSXMADEYINEFFECTIVE, 311
- .set STRINGID_PKMNSXCUREDYPROBLEM, 312
- .set STRINGID_ITSUCKEDLIQUIDOOZE, 313
- .set STRINGID_PKMNTRANSFORMED, 314
- .set STRINGID_ELECTRICITYWEAKENED, 315
- .set STRINGID_FIREWEAKENED, 316
- .set STRINGID_PKMNHIDUNDERWATER, 317
- .set STRINGID_PKMNSPRANGUP, 318
- .set STRINGID_HMMOVESCANTBEFORGOTTEN, 319
- .set STRINGID_XFOUNDONEY, 320
- .set STRINGID_PLAYERDEFEATEDTRAINER1, 321
- .set STRINGID_SOOTHINGAROMA, 322
- .set STRINGID_ITEMSCANTBEUSEDNOW, 323
- .set STRINGID_FORXCOMMAYZ, 324
- .set STRINGID_USINGXTHEYOFZN, 325
- .set STRINGID_PKMNUSEDXTOGETPUMPED, 326
- .set STRINGID_PKMNSXMADEYUSELESS, 327
- .set STRINGID_PKMNTRAPPEDBYSANDTOMB, 328
- .set STRINGID_EMPTYSTRING4, 329
- .set STRINGID_ABOOSTED, 330
- .set STRINGID_PKMNSXINTENSIFIEDSUN, 331
- .set STRINGID_PKMNMAKESGROUNDMISS, 332
- .set STRINGID_YOUTHROWABALLNOWRIGHT, 333
- .set STRINGID_PKMNSXTOOKATTACK, 334
- .set STRINGID_PKMNCHOSEXASDESTINY, 335
- .set STRINGID_PKMNLOSTFOCUS, 336
- .set STRINGID_USENEXTPKMN, 337
- .set STRINGID_PKMNFLEDUSINGITS, 338
- .set STRINGID_PKMNFLEDUSING, 339
- .set STRINGID_PKMNWASDRAGGEDOUT, 340
- .set STRINGID_PREVENTEDFROMWORKING, 341
- .set STRINGID_PKMNSITEMNORMALIZEDSTATUS, 342
- .set STRINGID_TRAINER1USEDITEM, 343
- .set STRINGID_BOXISFULL, 344
- .set STRINGID_PKMNAVOIDEDATTACK, 345
- .set STRINGID_PKMNSXMADEITINEFFECTIVE, 346
- .set STRINGID_PKMNSXPREVENTSFLINCHING, 347
- .set STRINGID_PKMNALREADYHASBURN, 348
- .set STRINGID_STATSWONTDECREASE2, 349
- .set STRINGID_PKMNSXBLOCKSY2, 350
- .set STRINGID_PKMNSXWOREOFF, 351
- .set STRINGID_PKMNRAISEDDEFALITTLE, 352
- .set STRINGID_PKMNRAISEDSPDEFALITTLE, 353
- .set STRINGID_THEWALLSHATTERED, 354
- .set STRINGID_PKMNSXPREVENTSYSZ, 355
- .set STRINGID_PKMNSXCUREDITSYPROBLEM, 356
- .set STRINGID_ATTACKERCANTESCAPE, 357
- .set STRINGID_PKMNOBTAINEDX, 358
- .set STRINGID_PKMNOBTAINEDX2, 359
- .set STRINGID_PKMNOBTAINEDXYOBTAINEDZ, 360
- .set STRINGID_BUTNOEFFECT, 361
- .set STRINGID_PKMNSXHADNOEFFECTONY, 362
- .set STRINGID_TWOENEMIESDEFEATED, 363
- .set STRINGID_TRAINER2LOSETEXT, 364
- .set STRINGID_PKMNINCAPABLEOFPOWER, 365
- .set STRINGID_GLINTAPPEARSINEYE, 366
- .set STRINGID_PKMNGETTINGINTOPOSITION, 367
- .set STRINGID_PKMNBEGANGROWLINGDEEPLY, 368
- .set STRINGID_PKMNEAGERFORMORE, 369
- .set STRINGID_DEFEATEDOPPONENTBYREFEREE, 370
- .set STRINGID_LOSTTOOPPONENTBYREFEREE, 371
- .set STRINGID_TIEDOPPONENTBYREFEREE, 372
- .set STRINGID_QUESTIONFORFEITMATCH, 373
- .set STRINGID_FORFEITEDMATCH, 374
- .set STRINGID_PKMNTRANSFERREDSOMEONESPC, 375
- .set STRINGID_PKMNTRANSFERREDLANETTESPC, 376
- .set STRINGID_PKMNBOXSOMEONESPCFULL, 377
- .set STRINGID_PKMNBOXLANETTESPCFULL, 378
- .set STRINGID_TRAINER1WINTEXT, 379
- .set STRINGID_TRAINER2WINTEXT, 380
diff --git a/constants/constants.inc b/constants/constants.inc
index bed7944ca..10d582eb1 100644
--- a/constants/constants.inc
+++ b/constants/constants.inc
@@ -1,6 +1,5 @@
.include "constants/gba_constants.inc"
.include "constants/misc_constants.inc"
- .include "constants/type_constants.inc"
.include "constants/contest_constants.inc"
.include "constants/pokemon_data_constants.inc"
.include "constants/item_data_constants.inc"
diff --git a/constants/pokemon_data_constants.inc b/constants/pokemon_data_constants.inc
index cf5d4df41..646bd6d4c 100644
--- a/constants/pokemon_data_constants.inc
+++ b/constants/pokemon_data_constants.inc
@@ -1,29 +1,3 @@
- .set NATURE_HARDY, 0
- .set NATURE_LONELY, 1
- .set NATURE_BRAVE, 2
- .set NATURE_ADAMANT, 3
- .set NATURE_NAUGHTY, 4
- .set NATURE_BOLD, 5
- .set NATURE_DOCILE, 6
- .set NATURE_RELAXED, 7
- .set NATURE_IMPISH, 8
- .set NATURE_LAX, 9
- .set NATURE_TIMID, 10
- .set NATURE_HASTY, 11
- .set NATURE_SERIOUS, 12
- .set NATURE_JOLLY, 13
- .set NATURE_NAIVE, 14
- .set NATURE_MODEST, 15
- .set NATURE_MILD, 16
- .set NATURE_QUIET, 17
- .set NATURE_BASHFUL, 18
- .set NATURE_RASH, 19
- .set NATURE_CALM, 20
- .set NATURE_GENTLE, 21
- .set NATURE_SASSY, 22
- .set NATURE_CAREFUL, 23
- .set NATURE_QUIRKY, 24
-
.set GROWTH_MEDIUM_FAST, 0x00
.set GROWTH_ERRATIC, 0x01
.set GROWTH_FLUCTUATING, 0x02
@@ -31,23 +5,6 @@
.set GROWTH_FAST, 0x04
.set GROWTH_SLOW, 0x05
- .set EGG_GROUP_NONE, 0x00
- .set EGG_GROUP_MONSTER, 0x01
- .set EGG_GROUP_WATER_1, 0x02
- .set EGG_GROUP_BUG, 0x03
- .set EGG_GROUP_FLYING, 0x04
- .set EGG_GROUP_FIELD, 0x05
- .set EGG_GROUP_FAIRY, 0x06
- .set EGG_GROUP_GRASS, 0x07
- .set EGG_GROUP_HUMAN_LIKE, 0x08
- .set EGG_GROUP_WATER_3, 0x09
- .set EGG_GROUP_MINERAL, 0x0a
- .set EGG_GROUP_AMORPHOUS, 0x0b
- .set EGG_GROUP_WATER_2, 0x0c
- .set EGG_GROUP_DITTO, 0x0d
- .set EGG_GROUP_DRAGON, 0x0e
- .set EGG_GROUP_UNDISCOVERED, 0x0f
-
.set BODY_COLOR_RED, 0x00
.set BODY_COLOR_BLUE, 0x01
.set BODY_COLOR_YELLOW, 0x02
diff --git a/constants/type_constants.inc b/constants/type_constants.inc
deleted file mode 100644
index 86e3c9df3..000000000
--- a/constants/type_constants.inc
+++ /dev/null
@@ -1,18 +0,0 @@
- .set TYPE_NORMAL, 0x00
- .set TYPE_FIGHTING, 0x01
- .set TYPE_FLYING, 0x02
- .set TYPE_POISON, 0x03
- .set TYPE_GROUND, 0x04
- .set TYPE_ROCK, 0x05
- .set TYPE_BUG, 0x06
- .set TYPE_GHOST, 0x07
- .set TYPE_STEEL, 0x08
- .set TYPE_UNKNOWN, 0x09
- .set TYPE_FIRE, 0x0a
- .set TYPE_WATER, 0x0b
- .set TYPE_GRASS, 0x0c
- .set TYPE_ELECTRIC, 0x0d
- .set TYPE_PSYCHIC, 0x0e
- .set TYPE_ICE, 0x0f
- .set TYPE_DRAGON, 0x10
- .set TYPE_DARK, 0x11
diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s
index afe365231..430f9f403 100644
--- a/data/battle_ai_scripts.s
+++ b/data/battle_ai_scripts.s
@@ -1,11 +1,11 @@
- .include "include/constants/battle_ai.h"
- .include "include/constants/abilities.h"
- .include "include/constants/items.h"
- .include "include/constants/moves.h"
- .include "include/constants/battle_move_effects.h"
- .include "include/constants/hold_effects.h"
- .include "constants/battle_constants.inc"
- .include "constants/type_constants.inc"
+#include "constants/battle.h"
+#include "constants/battle_ai.h"
+#include "constants/abilities.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/battle_move_effects.h"
+#include "constants/hold_effects.h"
+#include "constants/pokemon.h"
.include "asm/macros/battle_ai_script.inc"
.section script_data, "aw", %progbits
@@ -249,64 +249,64 @@ BattleAIScript_82DC341:
if_hp_less_than AI_USER, 51, Score_Minus10
BattleAIScript_82DC348:
- if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
end
BattleAIScript_82DC351:
- if_stat_level_equal AI_USER, DEF, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10
end
BattleAIScript_82DC35A:
- if_stat_level_equal AI_USER, SPEED, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus10
end
BattleAIScript_82DC363:
- if_stat_level_equal AI_USER, SPATK, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10
end
BattleAIScript_82DC36C:
- if_stat_level_equal AI_USER, SPDEF, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus10
end
BattleAIScript_82DC375:
- if_stat_level_equal AI_USER, ACC, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_ACC, 12, Score_Minus10
end
BattleAIScript_82DC37E:
- if_stat_level_equal AI_USER, EVASION, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_EVASION, 12, Score_Minus10
end
BattleAIScript_82DC387:
- if_stat_level_equal AI_TARGET, ATK, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_HYPER_CUTTER, Score_Minus10
goto BattleAIScript_82DC3F6
BattleAIScript_82DC39C:
- if_stat_level_equal AI_TARGET, DEF, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus10
goto BattleAIScript_82DC3F6
BattleAIScript_82DC3A9:
- if_stat_level_equal AI_TARGET, SPEED, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_SPEED, 0, Score_Minus10
if_ability AI_TARGET, ABILITY_SPEED_BOOST, Score_Minus10
goto BattleAIScript_82DC3F6
BattleAIScript_82DC3BF:
- if_stat_level_equal AI_TARGET, SPATK, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus10
goto BattleAIScript_82DC3F6
BattleAIScript_82DC3CC:
- if_stat_level_equal AI_TARGET, SPDEF, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_SPDEF, 0, Score_Minus10
goto BattleAIScript_82DC3F6
BattleAIScript_82DC3D9:
- if_stat_level_equal AI_TARGET, ACC, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_ACC, 0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_KEEN_EYE, Score_Minus10
goto BattleAIScript_82DC3F6
BattleAIScript_82DC3EE:
- if_stat_level_equal AI_TARGET, EVASION, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_EVASION, 0, Score_Minus10
BattleAIScript_82DC3F6:
get_ability AI_TARGET
@@ -315,20 +315,20 @@ BattleAIScript_82DC3F6:
end
BattleAIScript_82DC405:
- if_stat_level_less_than AI_USER, ATK, 6, BattleAIScript_82DC47A
- if_stat_level_less_than AI_USER, DEF, 6, BattleAIScript_82DC47A
- if_stat_level_less_than AI_USER, SPEED, 6, BattleAIScript_82DC47A
- if_stat_level_less_than AI_USER, SPATK, 6, BattleAIScript_82DC47A
- if_stat_level_less_than AI_USER, SPDEF, 6, BattleAIScript_82DC47A
- if_stat_level_less_than AI_USER, ACC, 6, BattleAIScript_82DC47A
- if_stat_level_less_than AI_USER, EVASION, 6, BattleAIScript_82DC47A
- if_stat_level_more_than AI_TARGET, ATK, 6, BattleAIScript_82DC47A
- if_stat_level_more_than AI_TARGET, DEF, 6, BattleAIScript_82DC47A
- if_stat_level_more_than AI_TARGET, SPEED, 6, BattleAIScript_82DC47A
- if_stat_level_more_than AI_TARGET, SPATK, 6, BattleAIScript_82DC47A
- if_stat_level_more_than AI_TARGET, SPDEF, 6, BattleAIScript_82DC47A
- if_stat_level_more_than AI_TARGET, ACC, 6, BattleAIScript_82DC47A
- if_stat_level_more_than AI_TARGET, EVASION, 6, BattleAIScript_82DC47A
+ if_stat_level_less_than AI_USER, STAT_ATK, 6, BattleAIScript_82DC47A
+ if_stat_level_less_than AI_USER, STAT_DEF, 6, BattleAIScript_82DC47A
+ if_stat_level_less_than AI_USER, STAT_SPEED, 6, BattleAIScript_82DC47A
+ if_stat_level_less_than AI_USER, STAT_SPATK, 6, BattleAIScript_82DC47A
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 6, BattleAIScript_82DC47A
+ if_stat_level_less_than AI_USER, STAT_ACC, 6, BattleAIScript_82DC47A
+ if_stat_level_less_than AI_USER, STAT_EVASION, 6, BattleAIScript_82DC47A
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 6, BattleAIScript_82DC47A
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 6, BattleAIScript_82DC47A
+ if_stat_level_more_than AI_TARGET, STAT_SPEED, 6, BattleAIScript_82DC47A
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 6, BattleAIScript_82DC47A
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 6, BattleAIScript_82DC47A
+ if_stat_level_more_than AI_TARGET, STAT_ACC, 6, BattleAIScript_82DC47A
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 6, BattleAIScript_82DC47A
goto Score_Minus10
BattleAIScript_82DC47A:
@@ -436,8 +436,8 @@ BattleAIScript_82DC5B0:
end
BattleAIScript_82DC5BB:
- if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
- if_stat_level_equal AI_USER, DEF, 12, Score_Minus8
+ if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8
end
BattleAIScript_82DC5CC:
@@ -484,8 +484,8 @@ BattleAIScript_82DC635:
end
BattleAIScript_82DC640:
- if_stat_level_equal AI_TARGET, ATK, 0, Score_Minus10
- if_stat_level_equal AI_TARGET, SPATK, 0, Score_Minus8
+ if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus8
BattleAIScript_82DC650:
count_usable_party_mons AI_USER
@@ -574,18 +574,18 @@ BattleAIScript_82DC71E:
end
BattleAIScript_82DC729:
- if_stat_level_equal AI_TARGET, ATK, 0, Score_Minus10
- if_stat_level_equal AI_TARGET, DEF, 0, Score_Minus8
+ if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10
+ if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus8
end
BattleAIScript_82DC73A:
- if_stat_level_equal AI_USER, DEF, 12, Score_Minus10
- if_stat_level_equal AI_USER, SPDEF, 12, Score_Minus8
+ if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8
end
BattleAIScript_82DC74B:
- if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
- if_stat_level_equal AI_USER, DEF, 12, Score_Minus8
+ if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8
end
BattleAIScript_82DC75C:
@@ -593,13 +593,13 @@ BattleAIScript_82DC75C:
end
BattleAIScript_82DC767:
- if_stat_level_equal AI_USER, SPATK, 12, Score_Minus10
- if_stat_level_equal AI_USER, SPDEF, 12, Score_Minus8
+ if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8
end
BattleAIScript_82DC778:
- if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
- if_stat_level_equal AI_USER, SPEED, 12, Score_Minus8
+ if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
+ if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus8
end
Score_Minus1:
@@ -805,9 +805,9 @@ BattleAIScript_82DCAC7:
end
BattleAIScript_82DCAC8:
- if_stat_level_less_than AI_TARGET, EVASION, 7, BattleAIScript_82DCAE2
+ if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, BattleAIScript_82DCAE2
score -1
- if_stat_level_less_than AI_TARGET, EVASION, 10, BattleAIScript_82DCAE2
+ if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, BattleAIScript_82DCAE2
if_random_less_than 128, BattleAIScript_82DCAE2
score -1
@@ -906,7 +906,7 @@ sMovesTable_82DCB6C:
.2byte -1
BattleAIScript_82DCBBC:
- if_stat_level_less_than AI_USER, ATK, 9, BattleAIScript_82DCBD1
+ if_stat_level_less_than AI_USER, STAT_ATK, 9, BattleAIScript_82DCBD1
if_random_less_than 100, BattleAIScript_82DCBE0
score -1
goto BattleAIScript_82DCBE0
@@ -928,7 +928,7 @@ BattleAIScript_82DCBF6:
end
BattleAIScript_82DCBF7:
- if_stat_level_less_than AI_USER, DEF, 9, BattleAIScript_82DCC0C
+ if_stat_level_less_than AI_USER, STAT_DEF, 9, BattleAIScript_82DCC0C
if_random_less_than 100, BattleAIScript_82DCC1B
score -1
goto BattleAIScript_82DCC1B
@@ -986,7 +986,7 @@ BattleAIScript_82DCC72:
end
BattleAIScript_82DCC73:
- if_stat_level_less_than AI_USER, SPATK, 9, BattleAIScript_82DCC88
+ if_stat_level_less_than AI_USER, STAT_SPATK, 9, BattleAIScript_82DCC88
if_random_less_than 100, BattleAIScript_82DCC97
score -1
goto BattleAIScript_82DCC97
@@ -1008,7 +1008,7 @@ BattleAIScript_82DCCAD:
end
BattleAIScript_82DCCAE:
- if_stat_level_less_than AI_USER, SPDEF, 9, BattleAIScript_82DCCC3
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 9, BattleAIScript_82DCCC3
if_random_less_than 100, BattleAIScript_82DCCD2
score -1
goto BattleAIScript_82DCCD2
@@ -1054,7 +1054,7 @@ sTypesTable_82DCD0A:
.byte -1
BattleAIScript_82DCD14:
- if_stat_level_less_than AI_USER, ACC, 9, BattleAIScript_82DCD24
+ if_stat_level_less_than AI_USER, STAT_ACC, 9, BattleAIScript_82DCD24
if_random_less_than 50, BattleAIScript_82DCD24
score -2
@@ -1071,7 +1071,7 @@ BattleAIScript_82DCD2E:
score +3
BattleAIScript_82DCD3D:
- if_stat_level_less_than AI_USER, EVASION, 9, BattleAIScript_82DCD4D
+ if_stat_level_less_than AI_USER, STAT_EVASION, 9, BattleAIScript_82DCD4D
if_random_less_than 128, BattleAIScript_82DCD4D
score -1
@@ -1101,7 +1101,7 @@ BattleAIScript_82DCD90:
BattleAIScript_82DCDA2:
if_hp_more_than AI_USER, 70, BattleAIScript_82DCDC7
- if_stat_level_equal AI_USER, EVASION, 6, BattleAIScript_82DCDC7
+ if_stat_level_equal AI_USER, STAT_EVASION, 6, BattleAIScript_82DCDC7
if_hp_less_than AI_USER, 40, BattleAIScript_82DCDC5
if_hp_less_than AI_TARGET, 40, BattleAIScript_82DCDC5
if_random_less_than 70, BattleAIScript_82DCDC7
@@ -1113,10 +1113,10 @@ BattleAIScript_82DCDC7:
end
BattleAIScript_82DCDC8:
- if_stat_level_more_than AI_TARGET, EVASION, 10, BattleAIScript_82DCDED
- if_stat_level_less_than AI_USER, ACC, 2, BattleAIScript_82DCDED
- if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DCDEF
- if_stat_level_less_than AI_USER, ACC, 4, BattleAIScript_82DCDEF
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 10, BattleAIScript_82DCDED
+ if_stat_level_less_than AI_USER, STAT_ACC, 2, BattleAIScript_82DCDED
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DCDEF
+ if_stat_level_less_than AI_USER, STAT_ACC, 4, BattleAIScript_82DCDEF
goto BattleAIScript_82DCDF7
BattleAIScript_82DCDED:
@@ -1130,13 +1130,13 @@ BattleAIScript_82DCDF7:
end
BattleAIScript_82DCDF8:
- if_stat_level_equal AI_TARGET, ATK, 6, BattleAIScript_82DCE1B
+ if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCE1B
score -1
if_hp_more_than AI_USER, 90, BattleAIScript_82DCE0B
score -1
BattleAIScript_82DCE0B:
- if_stat_level_more_than AI_TARGET, ATK, 3, BattleAIScript_82DCE1B
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 3, BattleAIScript_82DCE1B
if_random_less_than 50, BattleAIScript_82DCE1B
score -2
@@ -1166,7 +1166,7 @@ sTypesTable_82DCE43:
BattleAIScript_82DCE4A:
if_hp_less_than AI_USER, 70, BattleAIScript_82DCE59
- if_stat_level_more_than AI_TARGET, DEF, 3, BattleAIScript_82DCE61
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 3, BattleAIScript_82DCE61
BattleAIScript_82DCE59:
if_random_less_than 50, BattleAIScript_82DCE61
@@ -1198,13 +1198,13 @@ BattleAIScript_82DCE96:
end
BattleAIScript_82DCE97:
- if_stat_level_equal AI_TARGET, ATK, 6, BattleAIScript_82DCEBA
+ if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCEBA
score -1
if_hp_more_than AI_USER, 90, BattleAIScript_82DCEAA
score -1
BattleAIScript_82DCEAA:
- if_stat_level_more_than AI_TARGET, SPATK, 3, BattleAIScript_82DCEBA
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, BattleAIScript_82DCEBA
if_random_less_than 50, BattleAIScript_82DCEBA
score -2
@@ -1236,7 +1236,7 @@ sTypesTable_82DCEE2:
BattleAIScript_82DCEEB:
if_hp_less_than AI_USER, 70, BattleAIScript_82DCEFA
- if_stat_level_more_than AI_TARGET, SPDEF, 3, BattleAIScript_82DCF02
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, BattleAIScript_82DCF02
BattleAIScript_82DCEFA:
if_random_less_than 50, BattleAIScript_82DCF02
@@ -1258,7 +1258,7 @@ BattleAIScript_82DCF1A:
score -1
BattleAIScript_82DCF22:
- if_stat_level_more_than AI_USER, ACC, 4, BattleAIScript_82DCF32
+ if_stat_level_more_than AI_USER, STAT_ACC, 4, BattleAIScript_82DCF32
if_random_less_than 80, BattleAIScript_82DCF32
score -2
@@ -1284,7 +1284,7 @@ BattleAIScript_82DCF68:
BattleAIScript_82DCF7A:
if_hp_more_than AI_USER, 70, BattleAIScript_82DCF9F
- if_stat_level_equal AI_TARGET, ACC, 6, BattleAIScript_82DCF9F
+ if_stat_level_equal AI_TARGET, STAT_ACC, 6, BattleAIScript_82DCF9F
if_hp_less_than AI_USER, 40, BattleAIScript_82DCF9D
if_hp_less_than AI_TARGET, 40, BattleAIScript_82DCF9D
if_random_less_than 70, BattleAIScript_82DCF9F
@@ -1297,7 +1297,7 @@ BattleAIScript_82DCF9F:
BattleAIScript_82DCFA0:
if_hp_less_than AI_USER, 70, BattleAIScript_82DCFAF
- if_stat_level_more_than AI_TARGET, EVASION, 3, BattleAIScript_82DCFB7
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, BattleAIScript_82DCFB7
BattleAIScript_82DCFAF:
if_random_less_than 50, BattleAIScript_82DCFB7
@@ -1311,16 +1311,16 @@ BattleAIScript_82DCFC0:
end
BattleAIScript_82DCFC1:
- if_stat_level_more_than AI_USER, ATK, 8, BattleAIScript_82DD016
- if_stat_level_more_than AI_USER, DEF, 8, BattleAIScript_82DD016
- if_stat_level_more_than AI_USER, SPATK, 8, BattleAIScript_82DD016
- if_stat_level_more_than AI_USER, SPDEF, 8, BattleAIScript_82DD016
- if_stat_level_more_than AI_USER, EVASION, 8, BattleAIScript_82DD016
- if_stat_level_less_than AI_TARGET, ATK, 4, BattleAIScript_82DD016
- if_stat_level_less_than AI_TARGET, DEF, 4, BattleAIScript_82DD016
- if_stat_level_less_than AI_TARGET, SPATK, 4, BattleAIScript_82DD016
- if_stat_level_less_than AI_TARGET, SPDEF, 4, BattleAIScript_82DD016
- if_stat_level_less_than AI_TARGET, ACC, 4, BattleAIScript_82DD016
+ if_stat_level_more_than AI_USER, STAT_ATK, 8, BattleAIScript_82DD016
+ if_stat_level_more_than AI_USER, STAT_DEF, 8, BattleAIScript_82DD016
+ if_stat_level_more_than AI_USER, STAT_SPATK, 8, BattleAIScript_82DD016
+ if_stat_level_more_than AI_USER, STAT_SPDEF, 8, BattleAIScript_82DD016
+ if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD016
+ if_stat_level_less_than AI_TARGET, STAT_ATK, 4, BattleAIScript_82DD016
+ if_stat_level_less_than AI_TARGET, STAT_DEF, 4, BattleAIScript_82DD016
+ if_stat_level_less_than AI_TARGET, STAT_SPATK, 4, BattleAIScript_82DD016
+ if_stat_level_less_than AI_TARGET, STAT_SPDEF, 4, BattleAIScript_82DD016
+ if_stat_level_less_than AI_TARGET, STAT_ACC, 4, BattleAIScript_82DD016
goto BattleAIScript_82DD01E
BattleAIScript_82DD016:
@@ -1328,16 +1328,16 @@ BattleAIScript_82DD016:
score -3
BattleAIScript_82DD01E:
- if_stat_level_more_than AI_TARGET, ATK, 8, BattleAIScript_82DD07B
- if_stat_level_more_than AI_TARGET, DEF, 8, BattleAIScript_82DD07B
- if_stat_level_more_than AI_TARGET, SPATK, 8, BattleAIScript_82DD07B
- if_stat_level_more_than AI_TARGET, SPDEF, 8, BattleAIScript_82DD07B
- if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DD07B
- if_stat_level_less_than AI_USER, ATK, 4, BattleAIScript_82DD07B
- if_stat_level_less_than AI_USER, DEF, 4, BattleAIScript_82DD07B
- if_stat_level_less_than AI_USER, SPATK, 4, BattleAIScript_82DD07B
- if_stat_level_less_than AI_USER, SPDEF, 4, BattleAIScript_82DD07B
- if_stat_level_less_than AI_USER, ACC, 4, BattleAIScript_82DD07B
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD07B
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD07B
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD07B
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD07B
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD07B
+ if_stat_level_less_than AI_USER, STAT_ATK, 4, BattleAIScript_82DD07B
+ if_stat_level_less_than AI_USER, STAT_DEF, 4, BattleAIScript_82DD07B
+ if_stat_level_less_than AI_USER, STAT_SPATK, 4, BattleAIScript_82DD07B
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 4, BattleAIScript_82DD07B
+ if_stat_level_less_than AI_USER, STAT_ACC, 4, BattleAIScript_82DD07B
if_random_less_than 50, BattleAIScript_82DD083
score -1
goto BattleAIScript_82DD083
@@ -1357,11 +1357,11 @@ BattleAIScript_82DD08D:
end
BattleAIScript_82DD08E:
- if_stat_level_more_than AI_TARGET, ATK, 8, BattleAIScript_82DD0BD
- if_stat_level_more_than AI_TARGET, DEF, 8, BattleAIScript_82DD0BD
- if_stat_level_more_than AI_TARGET, SPATK, 8, BattleAIScript_82DD0BD
- if_stat_level_more_than AI_TARGET, SPDEF, 8, BattleAIScript_82DD0BD
- if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DD0BD
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD0BD
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD0BD
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD0BD
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD0BD
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD0BD
score -3
goto BattleAIScript_82DD0C5
@@ -1569,7 +1569,7 @@ BattleAIScript_82DD2B7:
end
BattleAIScript_82DD2B8:
- if_stat_level_more_than AI_TARGET, ATK, 3, BattleAIScript_82DD2D0
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 3, BattleAIScript_82DD2D0
score +3
get_turn_count
if_not_equal 0, BattleAIScript_82DD2D2
@@ -1987,17 +1987,17 @@ BattleAIScript_82DD645:
if_equal TYPE_GHOST, BattleAIScript_82DD68A
get_user_type2
if_equal TYPE_GHOST, BattleAIScript_82DD68A
- if_stat_level_more_than AI_USER, DEF, 9, BattleAIScript_82DD693
+ if_stat_level_more_than AI_USER, STAT_DEF, 9, BattleAIScript_82DD693
if_random_less_than 128, BattleAIScript_82DD665
score +1
BattleAIScript_82DD665:
- if_stat_level_more_than AI_USER, DEF, 7, BattleAIScript_82DD693
+ if_stat_level_more_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD693
if_random_less_than 128, BattleAIScript_82DD675
score +1
BattleAIScript_82DD675:
- if_stat_level_more_than AI_USER, DEF, 6, BattleAIScript_82DD693
+ if_stat_level_more_than AI_USER, STAT_DEF, 6, BattleAIScript_82DD693
if_random_less_than 128, BattleAIScript_82DD693
score +1
goto BattleAIScript_82DD693
@@ -2062,7 +2062,7 @@ BattleAIScript_82DD75D:
if_equal TYPE_GHOST, BattleAIScript_82DD77C
get_user_type2
if_equal TYPE_GHOST, BattleAIScript_82DD77C
- if_stat_level_more_than AI_USER, EVASION, 8, BattleAIScript_82DD782
+ if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD782
score -2
goto BattleAIScript_82DD78A
@@ -2092,11 +2092,11 @@ BattleAIScript_82DD7A8:
end
BattleAIScript_82DD7A9:
- if_stat_level_more_than AI_USER, ATK, 8, BattleAIScript_82DD7D6
- if_stat_level_more_than AI_USER, DEF, 8, BattleAIScript_82DD7D6
- if_stat_level_more_than AI_USER, SPATK, 8, BattleAIScript_82DD7D6
- if_stat_level_more_than AI_USER, SPDEF, 8, BattleAIScript_82DD7D6
- if_stat_level_more_than AI_USER, EVASION, 8, BattleAIScript_82DD7D6
+ if_stat_level_more_than AI_USER, STAT_ATK, 8, BattleAIScript_82DD7D6
+ if_stat_level_more_than AI_USER, STAT_DEF, 8, BattleAIScript_82DD7D6
+ if_stat_level_more_than AI_USER, STAT_SPATK, 8, BattleAIScript_82DD7D6
+ if_stat_level_more_than AI_USER, STAT_SPDEF, 8, BattleAIScript_82DD7D6
+ if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD7D6
goto BattleAIScript_82DD7FC
BattleAIScript_82DD7D6:
@@ -2113,11 +2113,11 @@ BattleAIScript_82DD7EF:
goto BattleAIScript_82DD844
BattleAIScript_82DD7FC:
- if_stat_level_more_than AI_USER, ATK, 7, BattleAIScript_82DD829
- if_stat_level_more_than AI_USER, DEF, 7, BattleAIScript_82DD829
- if_stat_level_more_than AI_USER, SPATK, 7, BattleAIScript_82DD829
- if_stat_level_more_than AI_USER, SPDEF, 7, BattleAIScript_82DD829
- if_stat_level_more_than AI_USER, EVASION, 7, BattleAIScript_82DD829
+ if_stat_level_more_than AI_USER, STAT_ATK, 7, BattleAIScript_82DD829
+ if_stat_level_more_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD829
+ if_stat_level_more_than AI_USER, STAT_SPATK, 7, BattleAIScript_82DD829
+ if_stat_level_more_than AI_USER, STAT_SPDEF, 7, BattleAIScript_82DD829
+ if_stat_level_more_than AI_USER, STAT_EVASION, 7, BattleAIScript_82DD829
goto BattleAIScript_82DD842
BattleAIScript_82DD829:
@@ -2208,19 +2208,19 @@ BattleAIScript_82DD8F1:
end
BattleAIScript_82DD8F2:
- if_stat_level_more_than AI_TARGET, ATK, 8, BattleAIScript_82DD91F
- if_stat_level_more_than AI_TARGET, DEF, 8, BattleAIScript_82DD91F
- if_stat_level_more_than AI_TARGET, SPATK, 8, BattleAIScript_82DD91F
- if_stat_level_more_than AI_TARGET, SPDEF, 8, BattleAIScript_82DD91F
- if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DD91F
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD91F
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD91F
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD91F
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD91F
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD91F
goto BattleAIScript_82DD957
BattleAIScript_82DD91F:
- if_stat_level_less_than AI_USER, ATK, 7, BattleAIScript_82DD954
- if_stat_level_less_than AI_USER, DEF, 7, BattleAIScript_82DD954
- if_stat_level_less_than AI_USER, SPATK, 7, BattleAIScript_82DD954
- if_stat_level_less_than AI_USER, SPDEF, 7, BattleAIScript_82DD954
- if_stat_level_less_than AI_USER, EVASION, 7, BattleAIScript_82DD952
+ if_stat_level_less_than AI_USER, STAT_ATK, 7, BattleAIScript_82DD954
+ if_stat_level_less_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD954
+ if_stat_level_less_than AI_USER, STAT_SPATK, 7, BattleAIScript_82DD954
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 7, BattleAIScript_82DD954
+ if_stat_level_less_than AI_USER, STAT_EVASION, 7, BattleAIScript_82DD952
if_random_less_than 50, BattleAIScript_82DD959
goto BattleAIScript_82DD957
@@ -2515,7 +2515,7 @@ sAbilitiesTable_82DDBDF:
BattleAIScript_82DDBF0:
if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDC1D
if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDC1D
- if_stat_level_less_than AI_USER, ATK, 6, BattleAIScript_82DDC1D
+ if_stat_level_less_than AI_USER, STAT_ATK, 6, BattleAIScript_82DDC1D
if_target_faster BattleAIScript_82DDC16
if_hp_more_than AI_USER, 40, BattleAIScript_82DDC1D
goto BattleAIScript_82DDC1F
@@ -2930,12 +2930,12 @@ sMovesTable_82DDF75:
BattleAIScript_82DDF7B:
get_turn_count
if_equal 0, Score_Minus2
- if_stat_level_more_than AI_USER, ATK, 8, Score_Plus3
- if_stat_level_more_than AI_USER, ATK, 7, Score_Plus2
- if_stat_level_more_than AI_USER, ATK, 6, Score_Plus1
- if_stat_level_more_than AI_USER, SPATK, 8, Score_Plus3
- if_stat_level_more_than AI_USER, SPATK, 7, Score_Plus2
- if_stat_level_more_than AI_USER, SPATK, 6, Score_Plus1
+ if_stat_level_more_than AI_USER, STAT_ATK, 8, Score_Plus3
+ if_stat_level_more_than AI_USER, STAT_ATK, 7, Score_Plus2
+ if_stat_level_more_than AI_USER, STAT_ATK, 6, Score_Plus1
+ if_stat_level_more_than AI_USER, STAT_SPATK, 8, Score_Plus3
+ if_stat_level_more_than AI_USER, STAT_SPATK, 7, Score_Plus2
+ if_stat_level_more_than AI_USER, STAT_SPATK, 6, Score_Plus1
end
BattleAIScript_82DDFB3:
@@ -3073,7 +3073,7 @@ BattleAIScript_82DE178:
goto Score_Minus30_
BattleAIScript_82DE185:
- if_stat_level_more_than AI_TARGET, ATK, 7, BattleAIScript_82DE18F
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 7, BattleAIScript_82DE18F
score +3
BattleAIScript_82DE18F:
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index 878b48ccb..727a62f3d 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -1,7 +1,7 @@
+#include "constants/battle_anim.h"
#include "constants/rgb.h"
#include "constants/songs.h"
.include "asm/macros/battle_anim_script.inc"
- .include "include/constants/battle_anim.h"
.section script_data, "aw", %progbits
diff --git a/data/battle_frontier/battle_frontier_trainers.inc b/data/battle_frontier/battle_frontier_trainers.inc
index 1fe938099..034c1b62c 100644
--- a/data/battle_frontier/battle_frontier_trainers.inc
+++ b/data/battle_frontier/battle_frontier_trainers.inc
@@ -157,7 +157,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Peggy
@ 6
- .4byte FACILITY_CLASS_SCHOOL_KID_1
+ .4byte FACILITY_CLASS_SCHOOL_KID_M
.string "KEITH$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -183,7 +183,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Keith
@ 7
- .4byte FACILITY_CLASS_SCHOOL_KID_1
+ .4byte FACILITY_CLASS_SCHOOL_KID_M
.string "GRAYSON$", 8
@ pre-battle speech
.2byte EC_WORD_A
@@ -209,7 +209,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Grayson
@ 8
- .4byte FACILITY_CLASS_SCHOOL_KID_1
+ .4byte FACILITY_CLASS_SCHOOL_KID_M
.string "GLENN$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -235,7 +235,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Glenn
@ 9
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "LILIANA$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -261,7 +261,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Liliana
@ 10
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "ELISE$", 8
@ pre-battle speech
.2byte EC_WORD_MY
@@ -287,7 +287,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Elise
@ 11
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "ZOEY$", 8
@ pre-battle speech
.2byte EC_WORD_PLEASE
@@ -2965,7 +2965,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Rayna
@ 114
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "EVAN$", 8
@ pre-battle speech
.2byte EC_WORD_EVERY
@@ -2991,7 +2991,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Evan
@ 115
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "JORDAN$", 8
@ pre-battle speech
.2byte EC_WORD_GOOD
@@ -3017,7 +3017,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Jordan
@ 116
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "JOEL$", 8
@ pre-battle speech
.2byte EC_WORD_FUFUFU
@@ -3121,7 +3121,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Chloe
@ 120
- .4byte FACILITY_CLASS_PSYCHIC_1
+ .4byte FACILITY_CLASS_PSYCHIC_M
.string "NORTON$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -3147,7 +3147,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Norton
@ 121
- .4byte FACILITY_CLASS_PSYCHIC_1
+ .4byte FACILITY_CLASS_PSYCHIC_M
.string "LUKAS$", 8
@ pre-battle speech
.2byte EC_WORD_MY
@@ -3173,7 +3173,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Lukas
@ 122
- .4byte FACILITY_CLASS_PSYCHIC_1
+ .4byte FACILITY_CLASS_PSYCHIC_M
.string "ZACH$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
@@ -3199,7 +3199,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Zach
@ 123
- .4byte FACILITY_CLASS_PSYCHIC_2
+ .4byte FACILITY_CLASS_PSYCHIC_F
.string "KAITLYN$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -3225,7 +3225,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Kaitlyn
@ 124
- .4byte FACILITY_CLASS_PSYCHIC_2
+ .4byte FACILITY_CLASS_PSYCHIC_F
.string "BREANNA$", 8
@ pre-battle speech
.2byte EC_WORD_MY
@@ -3251,7 +3251,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Breanna
@ 125
- .4byte FACILITY_CLASS_PSYCHIC_2
+ .4byte FACILITY_CLASS_PSYCHIC_F
.string "KENDRA$", 8
@ pre-battle speech
.2byte EC_WORD_IF
@@ -3641,7 +3641,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Sofia
@ 140
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "BRADEN$", 8
@ pre-battle speech
.2byte EC_WORD_I_CHOOSE_YOU
@@ -3667,7 +3667,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Braden
@ 141
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "KAYDEN$", 8
@ pre-battle speech
.2byte EC_WORD_THEY
@@ -3693,7 +3693,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Kayden
@ 142
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "COOPER$", 8
@ pre-battle speech
.2byte EC_WORD_THIS
@@ -3719,7 +3719,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Cooper
@ 143
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "JULIA$", 8
@ pre-battle speech
.2byte EC_WORD_SPIRIT
@@ -3745,7 +3745,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Julia
@ 144
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "AMARA$", 8
@ pre-battle speech
.2byte EC_WORD_WROOOAAR_EXCL
@@ -3771,7 +3771,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Amara
@ 145
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "LYNN$", 8
@ pre-battle speech
.2byte EC_WORD_YOUR
@@ -3797,7 +3797,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Lynn
@ 146
- .4byte FACILITY_CLASS_PKMN_RANGER_1
+ .4byte FACILITY_CLASS_PKMN_RANGER_M
.string "JOVAN$", 8
@ pre-battle speech
.2byte EC_WORD_YOUR
@@ -3823,7 +3823,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Jovan
@ 147
- .4byte FACILITY_CLASS_PKMN_RANGER_1
+ .4byte FACILITY_CLASS_PKMN_RANGER_M
.string "DOMINIC$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -3849,7 +3849,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Dominic
@ 148
- .4byte FACILITY_CLASS_PKMN_RANGER_1
+ .4byte FACILITY_CLASS_PKMN_RANGER_M
.string "NIKOLAS$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -3875,7 +3875,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Nikolas
@ 149
- .4byte FACILITY_CLASS_PKMN_RANGER_2
+ .4byte FACILITY_CLASS_PKMN_RANGER_F
.string "VALERIA$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -3901,7 +3901,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Valeria
@ 150
- .4byte FACILITY_CLASS_PKMN_RANGER_2
+ .4byte FACILITY_CLASS_PKMN_RANGER_F
.string "DELANEY$", 8
@ pre-battle speech
.2byte EC_WORD_SCHOOL
@@ -3927,7 +3927,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Delaney
@ 151
- .4byte FACILITY_CLASS_PKMN_RANGER_2
+ .4byte FACILITY_CLASS_PKMN_RANGER_F
.string "MEGHAN$", 8
@ pre-battle speech
.2byte EC_WORD_SCHOOL
@@ -4265,7 +4265,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Kaila
@ 164
- .4byte FACILITY_CLASS_SCHOOL_KID_1
+ .4byte FACILITY_CLASS_SCHOOL_KID_M
.string "ISIAH$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -4291,7 +4291,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Isiah
@ 165
- .4byte FACILITY_CLASS_SCHOOL_KID_1
+ .4byte FACILITY_CLASS_SCHOOL_KID_M
.string "GARRETT$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -4317,7 +4317,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Garrett
@ 166
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "HAYLIE$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -4343,7 +4343,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Haylie
@ 167
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "MEGAN$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -5721,7 +5721,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Tess
@ 220
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "LEON$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
@@ -5747,7 +5747,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Leon
@ 221
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "ALONZO$", 8
@ pre-battle speech
.2byte EC_WORD_I_VE
@@ -5773,7 +5773,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Alonzo
@ 222
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "VINCE$", 8
@ pre-battle speech
.2byte EC_WORD_THE
@@ -5799,7 +5799,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Vince
@ 223
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "BRYON$", 8
@ pre-battle speech
.2byte EC_WORD_MY
@@ -5825,7 +5825,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Bryon
@ 224
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "AVA$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
@@ -5851,7 +5851,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Ava
@ 225
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "MIRIAM$", 8
@ pre-battle speech
.2byte EC_WORD_OH
@@ -5877,7 +5877,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Miriam
@ 226
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "CARRIE$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -5903,7 +5903,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Carrie
@ 227
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "GILLIAN$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -5929,7 +5929,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Gillian2
@ 228
- .4byte FACILITY_CLASS_PKMN_RANGER_1
+ .4byte FACILITY_CLASS_PKMN_RANGER_M
.string "TYLER$", 8
@ pre-battle speech
.2byte EC_WORD_YO
@@ -5955,7 +5955,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Tyler
@ 229
- .4byte FACILITY_CLASS_PKMN_RANGER_1
+ .4byte FACILITY_CLASS_PKMN_RANGER_M
.string "CHAZ$", 8
@ pre-battle speech
.2byte EC_WORD_MY
@@ -5981,7 +5981,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Chaz
@ 230
- .4byte FACILITY_CLASS_PKMN_RANGER_1
+ .4byte FACILITY_CLASS_PKMN_RANGER_M
.string "NELSON$", 8
@ pre-battle speech
.2byte EC_WORD_WELL_THEN
@@ -6007,7 +6007,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Nelson
@ 231
- .4byte FACILITY_CLASS_PKMN_RANGER_2
+ .4byte FACILITY_CLASS_PKMN_RANGER_F
.string "SHANIA$", 8
@ pre-battle speech
.2byte EC_WORD_ALL
@@ -6033,7 +6033,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Shania
@ 232
- .4byte FACILITY_CLASS_PKMN_RANGER_2
+ .4byte FACILITY_CLASS_PKMN_RANGER_F
.string "STELLA$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -6059,7 +6059,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Stella
@ 233
- .4byte FACILITY_CLASS_PKMN_RANGER_2
+ .4byte FACILITY_CLASS_PKMN_RANGER_F
.string "DORINE$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
@@ -6319,7 +6319,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Alana
@ 243
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "ALEXAS$", 8
@ pre-battle speech
.2byte EC_WORD_GOOD
@@ -6345,7 +6345,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Alexas
@ 244
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "WESTON$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -6371,7 +6371,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Weston
@ 245
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "JASPER$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
@@ -6475,7 +6475,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Emma
@ 249
- .4byte FACILITY_CLASS_PSYCHIC_1
+ .4byte FACILITY_CLASS_PSYCHIC_M
.string "ROLANDO$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
@@ -6501,7 +6501,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Rolando
@ 250
- .4byte FACILITY_CLASS_PSYCHIC_1
+ .4byte FACILITY_CLASS_PSYCHIC_M
.string "STANLY$", 8
@ pre-battle speech
.2byte EC_WORD_THIS
@@ -6527,7 +6527,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Stanly
@ 251
- .4byte FACILITY_CLASS_PSYCHIC_1
+ .4byte FACILITY_CLASS_PSYCHIC_M
.string "DARIO$", 8
@ pre-battle speech
.2byte EC_WORD_MY
@@ -6553,7 +6553,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Dario
@ 252
- .4byte FACILITY_CLASS_PSYCHIC_2
+ .4byte FACILITY_CLASS_PSYCHIC_F
.string "KARLEE$", 8
@ pre-battle speech
.2byte EC_WORD_SOMETHING
@@ -6579,7 +6579,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Karlee
@ 253
- .4byte FACILITY_CLASS_PSYCHIC_2
+ .4byte FACILITY_CLASS_PSYCHIC_F
.string "JAYLIN$", 8
@ pre-battle speech
.2byte EC_WORD_EVERY
@@ -6605,7 +6605,7 @@ gBattleFrontierTrainers:: @ 85D5ACC
.4byte gBattleFrontierTrainerMons_Jaylin
@ 254
- .4byte FACILITY_CLASS_PSYCHIC_2
+ .4byte FACILITY_CLASS_PSYCHIC_F
.string "INGRID$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
diff --git a/data/battle_frontier/fallarbor_battle_tent_trainers.inc b/data/battle_frontier/fallarbor_battle_tent_trainers.inc
index 4975f0cd4..675314eb3 100644
--- a/data/battle_frontier/fallarbor_battle_tent_trainers.inc
+++ b/data/battle_frontier/fallarbor_battle_tent_trainers.inc
@@ -339,7 +339,7 @@ gFallarborBattleTentTrainers:: @ 85DF084
.4byte gFallarborBattleTentTrainerMons_Conrad
@ 13
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "MAKENNA$", 8
@ pre-battle speech
.2byte EC_WORD_SHOW
@@ -365,7 +365,7 @@ gFallarborBattleTentTrainers:: @ 85DF084
.4byte gFallarborBattleTentTrainerMons_Makenna
@ 14
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "BRAYAN$", 8
@ pre-battle speech
.2byte EC_WORD_CAN
@@ -391,7 +391,7 @@ gFallarborBattleTentTrainers:: @ 85DF084
.4byte gFallarborBattleTentTrainerMons_Brayan
@ 15
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "MARIANA$", 8
@ pre-battle speech
.2byte EC_WORD_A
@@ -469,7 +469,7 @@ gFallarborBattleTentTrainers:: @ 85DF084
.4byte gFallarborBattleTentTrainerMons_Gianna
@ 18
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "YAHIR$", 8
@ pre-battle speech
.2byte EC_WORD_YOU
diff --git a/data/battle_frontier/slateport_battle_tent_trainers.inc b/data/battle_frontier/slateport_battle_tent_trainers.inc
index 6fdd85215..051514b94 100644
--- a/data/battle_frontier/slateport_battle_tent_trainers.inc
+++ b/data/battle_frontier/slateport_battle_tent_trainers.inc
@@ -339,7 +339,7 @@ gSlateportBattleTentTrainers:: @ 85DDA14
.4byte gSlateportBattleTentTrainerMons_Kyler
@ 13
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "MAGGIE$", 8
@ pre-battle speech
.2byte EC_POKEMON(VULPIX)
@@ -365,7 +365,7 @@ gSlateportBattleTentTrainers:: @ 85DDA14
.4byte gSlateportBattleTentTrainerMons_Maggie
@ 14
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "STEPHON$", 8
@ pre-battle speech
.2byte EC_WORD_I_AM
@@ -391,7 +391,7 @@ gSlateportBattleTentTrainers:: @ 85DDA14
.4byte gSlateportBattleTentTrainerMons_Stephon
@ 15
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "REBECCA$", 8
@ pre-battle speech
.2byte EC_WORD_THAT
@@ -469,7 +469,7 @@ gSlateportBattleTentTrainers:: @ 85DDA14
.4byte gSlateportBattleTentTrainerMons_Janae
@ 18
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "CAIDEN$", 8
@ pre-battle speech
.2byte EC_WORD_MY
diff --git a/data/battle_frontier/verdanturf_battle_tent_trainers.inc b/data/battle_frontier/verdanturf_battle_tent_trainers.inc
index a31f52ba6..b375ce811 100644
--- a/data/battle_frontier/verdanturf_battle_tent_trainers.inc
+++ b/data/battle_frontier/verdanturf_battle_tent_trainers.inc
@@ -339,7 +339,7 @@ gVerdanturfBattleTentTrainers:: @ 85DE610
.4byte gVerdanturfBattleTentTrainerMons_Ernesto
@ 13
- .4byte FACILITY_CLASS_SCHOOL_KID_2
+ .4byte FACILITY_CLASS_SCHOOL_KID_F
.string "NALA$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -365,7 +365,7 @@ gVerdanturfBattleTentTrainers:: @ 85DE610
.4byte gVerdanturfBattleTentTrainerMons_Nala
@ 14
- .4byte FACILITY_CLASS_COOLTRAINER_1
+ .4byte FACILITY_CLASS_COOLTRAINER_M
.string "DARNELL$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -391,7 +391,7 @@ gVerdanturfBattleTentTrainers:: @ 85DE610
.4byte gVerdanturfBattleTentTrainerMons_Darnell
@ 15
- .4byte FACILITY_CLASS_COOLTRAINER_2
+ .4byte FACILITY_CLASS_COOLTRAINER_F
.string "ASHLYN$", 8
@ pre-battle speech
.2byte EC_WORD_I
@@ -469,7 +469,7 @@ gVerdanturfBattleTentTrainers:: @ 85DE610
.4byte gVerdanturfBattleTentTrainerMons_Justine
@ 18
- .4byte FACILITY_CLASS_EXPERT_1
+ .4byte FACILITY_CLASS_EXPERT_M
.string "TYSON$", 8
@ pre-battle speech
.2byte EC_WORD_YOU_RE
diff --git a/data/battle_moves.inc b/data/battle_moves.inc
index 586248bf0..c5c090546 100644
--- a/data/battle_moves.inc
+++ b/data/battle_moves.inc
@@ -1917,7 +1917,7 @@ gBattleMoves:: @ 831C898
@ Curse
.byte 0x6d @ effect
.byte 0 @ power
- .byte TYPE_UNKNOWN
+ .byte TYPE_MYSTERY
.byte 0 @ accuracy
.byte 10 @ PP
.byte 0 @ side effect chance
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index 4d8b22186..058833fa9 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -1,15 +1,17 @@
+#include "constants/battle.h"
+#include "constants/pokemon.h"
+#include "constants/battle_script_commands.h"
+#include "constants/battle_anim.h"
+#include "constants/battle_string_ids.h"
#include "constants/abilities.h"
#include "constants/moves.h"
#include "constants/songs.h"
.include "asm/macros.inc"
.include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
- .include "constants/battle_constants.inc"
- .include "constants/battle_script_constants.inc"
- .include "constants/battle_text.inc"
.section script_data, "aw", %progbits
-
+
.align 2
gBattleScriptsForMoveEffects:: @ 82D86A8
.4byte BattleScript_EffectHit
@@ -251,7 +253,7 @@ BattleScript_EffectUnused8d::
BattleScript_EffectUnusedA3::
BattleScript_EffectHit::
jumpifnotmove MOVE_SURF, BattleScript_HitFromAtkCanceler
- jumpifnostatus3 TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler
+ jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler
orword gHitMarker, HITMARKER_IGNORE_UNDERWATER
setbyte sDMG_MULTIPLIER, 0x2
BattleScript_HitFromAtkCanceler::
@@ -270,16 +272,16 @@ BattleScript_HitFromAtkAnimation::
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
seteffectwithchance
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
BattleScript_MoveEnd::
setbyte sMOVEEND_STATE, 0x0
moveend 0x0, 0x0
@@ -302,20 +304,20 @@ BattleScript_EffectSleep::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifstatus TARGET, STATUS1_SLEEP, BattleScript_AlreadyAsleep
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_AlreadyAsleep
jumpifcantmakeasleep BattleScript_CantMakeAsleep
- jumpifstatus TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
- setmoveeffect EFFECT_SLEEP
+ setmoveeffect MOVE_EFFECT_SLEEP
seteffectprimary
goto BattleScript_MoveEnd
BattleScript_AlreadyAsleep::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x20
printstring STRINGID_PKMNALREADYASLEEP
waitmessage 0x40
@@ -335,7 +337,7 @@ BattleScript_CantMakeAsleep::
BattleScript_EffectPoisonHit::
BattleScript_EffectPoisonTail::
- setmoveeffect EFFECT_POISON
+ setmoveeffect MOVE_EFFECT_POISON
goto BattleScript_EffectHit
BattleScript_EffectAbsorb::
@@ -350,44 +352,44 @@ BattleScript_EffectAbsorb::
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
negativedamage
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- jumpifability TARGET, ABILITY_LIQUID_OOZE, BattleScript_AbsorbLiquidOoze
+ jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_AbsorbLiquidOoze
setbyte cMULTISTRING_CHOOSER, 0x0
goto BattleScript_AbsorbUpdateHp
BattleScript_AbsorbLiquidOoze::
manipulatedamage ATK80_DMG_CHANGE_SIGN
setbyte cMULTISTRING_CHOOSER, 0x1
BattleScript_AbsorbUpdateHp::
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
jumpifmovehadnoeffect BattleScript_AbsorbTryFainting
printfromtable gLeechSeedDrainStringIds
waitmessage 0x40
BattleScript_AbsorbTryFainting::
- tryfaintmon ATTACKER, FALSE, NULL
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_EffectBurnHit::
BattleScript_EffectBlazeKick::
- setmoveeffect EFFECT_BURN
+ setmoveeffect MOVE_EFFECT_BURN
goto BattleScript_EffectHit
BattleScript_EffectFreezeHit::
- setmoveeffect EFFECT_FREEZE
+ setmoveeffect MOVE_EFFECT_FREEZE
goto BattleScript_EffectHit
BattleScript_EffectParalyzeHit::
- setmoveeffect EFFECT_PARALYSIS
+ setmoveeffect MOVE_EFFECT_PARALYSIS
goto BattleScript_EffectHit
BattleScript_EffectExplosion::
@@ -397,7 +399,7 @@ BattleScript_EffectExplosion::
faintifabilitynotdamp
setatkhptozero
waitstate
- jumpifbyte NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_82D8B94
+ jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_82D8B94
call BattleScript_82D8BEA
goto BattleScript_82D8B96
BattleScript_82D8B94::
@@ -411,19 +413,19 @@ BattleScript_82D8B96::
adjustnormaldamage
accuracycheck BattleScript_82D8BCF, ACC_CURR_MOVE
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_82D8B96
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
end
BattleScript_82D8BCF::
effectivenesssound
@@ -432,7 +434,7 @@ BattleScript_82D8BCF::
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_82D8B96
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
end
BattleScript_82D8BEA::
@@ -444,8 +446,8 @@ BattleScript_82D8BEA::
BattleScript_EffectDreamEater::
attackcanceler
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_82D8C0E
- jumpifstatus TARGET, STATUS1_SLEEP, BattleScript_82D8C18
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_82D8C0E
+ jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_82D8C18
BattleScript_82D8C0E::
attackstring
ppreduce
@@ -462,23 +464,23 @@ BattleScript_82D8C18::
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
negativedamage
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
jumpifmovehadnoeffect BattleScript_DreamEaterTryFaintEnd
printstring STRINGID_PKMNDREAMEATEN
waitmessage 0x40
BattleScript_DreamEaterTryFaintEnd::
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_EffectMirrorMove::
@@ -493,26 +495,26 @@ BattleScript_EffectMirrorMove::
goto BattleScript_MoveEnd
BattleScript_EffectAttackUp::
- setstatchanger ATK, 1, FALSE
+ setstatchanger STAT_ATK, 1, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectDefenseUp::
- setstatchanger DEF, 1, FALSE
+ setstatchanger STAT_DEF, 1, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectSpecialAttackUp::
- setstatchanger SPATK, 1, FALSE
+ setstatchanger STAT_SPATK, 1, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectEvasionUp::
- setstatchanger EVASION, 1, FALSE
+ setstatchanger STAT_EVASION, 1, FALSE
BattleScript_EffectStatUp::
attackcanceler
BattleScript_EffectStatUpAfterAtkCanceler::
attackstring
ppreduce
- statbuffchange AFFECTS_USER | 0x1, BattleScript_StatUpEnd
- jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatUpAttackAnim
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_StatUpEnd
+ jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatUpAttackAnim
pause 0x20
goto BattleScript_StatUpPrintString
BattleScript_StatUpAttackAnim::
@@ -520,7 +522,7 @@ BattleScript_StatUpAttackAnim::
waitanimation
BattleScript_StatUpDoAnim::
setgraphicalstatchangevalues
- playanimation ATTACKER, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
BattleScript_StatUpPrintString::
printfromtable gStatUpStringIds
waitmessage 0x40
@@ -528,45 +530,45 @@ BattleScript_StatUpEnd::
goto BattleScript_MoveEnd
BattleScript_StatUp::
- playanimation EFFECT_BANK, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage 0x40
return
BattleScript_EffectAttackDown::
- setstatchanger ATK, 1, TRUE
+ setstatchanger STAT_ATK, 1, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectDefenseDown::
- setstatchanger DEF, 1, TRUE
+ setstatchanger STAT_DEF, 1, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectSpeedDown::
- setstatchanger SPEED, 1, TRUE
+ setstatchanger STAT_SPEED, 1, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectAccuracyDown::
- setstatchanger ACC, 1, TRUE
+ setstatchanger STAT_ACC, 1, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectEvasionDown::
- setstatchanger EVASION, 1, TRUE
+ setstatchanger STAT_EVASION, 1, TRUE
BattleScript_EffectStatDown::
attackcanceler
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedAtkStringPpReduce
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedAtkStringPpReduce
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
statbuffchange 0x1, BattleScript_StatDownEnd
- jumpifbyte LESS_THAN, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatDownDoAnim
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x3, BattleScript_StatDownEnd
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatDownDoAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x3, BattleScript_StatDownEnd
pause 0x20
goto BattleScript_StatDownPrintString
BattleScript_StatDownDoAnim::
attackanimation
waitanimation
setgraphicalstatchangevalues
- playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
BattleScript_StatDownPrintString::
printfromtable gStatDownStringIds
waitmessage 0x40
@@ -574,7 +576,7 @@ BattleScript_StatDownEnd::
goto BattleScript_MoveEnd
BattleScript_StatDown::
- playanimation EFFECT_BANK, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatDownStringIds
waitmessage 0x40
return
@@ -604,7 +606,7 @@ BattleScript_EffectRampage::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_82D8DAE
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_82D8DAE
ppreduce
BattleScript_82D8DAE::
confuseifrepeatingattackends
@@ -614,8 +616,8 @@ BattleScript_EffectRoar::
attackcanceler
attackstring
ppreduce
- jumpifability TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut
- jumpifstatus3 TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted
+ jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut
+ jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed
@@ -630,10 +632,10 @@ BattleScript_EffectMultiHit::
initmultihitstring
setbyte sMULTIHIT_EFFECT, 0x0
BattleScript_MultiHitLoop::
- jumpifhasnohp ATTACKER, BattleScript_MultiHitEnd
- jumpifhasnohp TARGET, BattleScript_MultiHitPrintStrings
- jumpifhalfword EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoMultiHit
- jumpifstatus ATTACKER, STATUS1_SLEEP, BattleScript_MultiHitPrintStrings
+ jumpifhasnohp BS_ATTACKER, BattleScript_MultiHitEnd
+ jumpifhasnohp BS_TARGET, BattleScript_MultiHitPrintStrings
+ jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoMultiHit
+ jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_MultiHitPrintStrings
BattleScript_DoMultiHit::
movevaluescleanup
copybyte cEFFECT_CHOOSER, sMULTIHIT_EFFECT
@@ -645,10 +647,10 @@ BattleScript_DoMultiHit::
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
printstring STRINGID_EMPTYSTRING3
@@ -656,7 +658,7 @@ BattleScript_DoMultiHit::
addbyte sMULTIHIT_STRING + 4, 0x1
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
- jumpifbyte COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_MultiHitPrintStrings
+ jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_MultiHitPrintStrings
decrementmultihit BattleScript_MultiHitLoop
goto BattleScript_MultiHitPrintStrings
BattleScript_MultiHitNoMoreHits::
@@ -670,7 +672,7 @@ BattleScript_MultiHitPrintStrings::
waitmessage 0x40
BattleScript_MultiHitEnd::
seteffectwithchance
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0x2
moveend 0x1, 0x0
setbyte sMOVEEND_STATE, 0x4
@@ -689,19 +691,19 @@ BattleScript_EffectConversion::
goto BattleScript_MoveEnd
BattleScript_EffectFlinchHit::
- setmoveeffect EFFECT_FLINCH
+ setmoveeffect MOVE_EFFECT_FLINCH
goto BattleScript_EffectHit
BattleScript_EffectRestoreHp::
attackcanceler
attackstring
ppreduce
- tryhealhalfhealth BattleScript_AlreadyAtFullHp, ATTACKER
+ tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER
attackanimation
waitanimation
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
printstring STRINGID_PKMNREGAINEDHEALTH
waitmessage 0x40
goto BattleScript_MoveEnd
@@ -710,38 +712,38 @@ BattleScript_EffectToxic::
attackcanceler
attackstring
ppreduce
- jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifstatus TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned
- jumpifstatus TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
- jumpifstatus TARGET, STATUS1_ANY, BattleScript_ButItFailed
- jumpiftype TARGET, TYPE_POISON, BattleScript_NotAffected
- jumpiftype TARGET, TYPE_STEEL, BattleScript_NotAffected
+ jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned
+ jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected
+ jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
- setmoveeffect EFFECT_TOXIC
+ setmoveeffect MOVE_EFFECT_TOXIC
seteffectprimary
resultmessage
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_AlreadyPoisoned::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x40
printstring STRINGID_PKMNALREADYPOISONED
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_ImmunityProtected::
- copybyte gEffectBank, gBattlerTarget
+ copybyte gEffectBattler, gBattlerTarget
setbyte cMULTISTRING_CHOOSER, 0x0
call BattleScript_PSNPrevention
goto BattleScript_MoveEnd
BattleScript_EffectPayDay::
- setmoveeffect EFFECT_PAYDAY
+ setmoveeffect MOVE_EFFECT_PAYDAY
goto BattleScript_EffectHit
BattleScript_EffectLightScreen::
@@ -752,20 +754,20 @@ BattleScript_EffectLightScreen::
goto BattleScript_PrintReflectLightScreenSafeguardString
BattleScript_EffectTriAttack::
- setmoveeffect EFFECT_TRI_ATTACK
+ setmoveeffect MOVE_EFFECT_TRI_ATTACK
goto BattleScript_EffectHit
BattleScript_EffectRest::
attackcanceler
attackstring
ppreduce
- jumpifstatus ATTACKER, STATUS1_SLEEP, BattleScript_RestIsAlreadyAsleep
+ jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_RestIsAlreadyAsleep
jumpifcantmakeasleep BattleScript_RestCantSleep
trysetrest BattleScript_AlreadyAtFullHp
pause 0x20
printfromtable gRestUsedStringIds
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
waitstate
goto BattleScript_PresentHealTarget
@@ -776,7 +778,7 @@ BattleScript_RestCantSleep::
goto BattleScript_MoveEnd
BattleScript_RestIsAlreadyAsleep::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x20
printstring STRINGID_PKMNALREADYASLEEP2
waitmessage 0x40
@@ -799,20 +801,20 @@ BattleScript_KOFail::
goto BattleScript_MoveEnd
BattleScript_EffectRazorWind::
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
- jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
setbyte sTWOTURN_STRINGID, 0x0
call BattleScriptFirstChargingTurn
goto BattleScript_MoveEnd
BattleScript_TwoTurnMovesSecondTurn::
attackcanceler
- setmoveeffect EFFECT_CHARGING
- setbyte sANIM_TURN, 0x1
- clearstatusfromeffect ATTACKER
+ setmoveeffect MOVE_EFFECT_CHARGING
+ setbyte sB_ANIM_TURN, 0x1
+ clearstatusfromeffect BS_ATTACKER
orword gHitMarker, HITMARKER_NO_PPDEDUCT
jumpifnotmove MOVE_SKY_ATTACK, BattleScript_HitFromAccCheck
- setmoveeffect EFFECT_FLINCH
+ setmoveeffect MOVE_EFFECT_FLINCH
goto BattleScript_HitFromAccCheck
BattleScriptFirstChargingTurn::
@@ -822,7 +824,7 @@ BattleScriptFirstChargingTurn::
attackanimation
waitanimation
orword gHitMarker, HITMARKER_x8000000
- setmoveeffect EFFECT_CHARGING | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER
seteffectprimary
copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
printfromtable gFirstTurnOfTwoStringIds
@@ -852,11 +854,11 @@ BattleScript_EffectDragonRage::
BattleScript_EffectTrap::
jumpifnotmove MOVE_WHIRLPOOL, BattleScript_DoWrapEffect
- jumpifnostatus3 TARGET, STATUS3_UNDERWATER, BattleScript_DoWrapEffect
+ jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_DoWrapEffect
orword gHitMarker, HITMARKER_IGNORE_UNDERWATER
setbyte sDMG_MULTIPLIER, 0x2
BattleScript_DoWrapEffect::
- setmoveeffect EFFECT_WRAP
+ setmoveeffect MOVE_EFFECT_WRAP
goto BattleScript_EffectHit
BattleScript_EffectDoubleHit::
@@ -879,7 +881,7 @@ BattleScript_MoveMissedDoDamage::
pause 0x40
resultmessage
waitmessage 0x40
- jumpifbyte COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
+ jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
printstring STRINGID_PKMNCRASHED
waitmessage 0x40
damagecalc
@@ -888,9 +890,9 @@ BattleScript_MoveMissedDoDamage::
manipulatedamage ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP
bicbyte gMoveResultFlags, MOVE_RESULT_MISSED
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
- tryfaintmon ATTACKER, FALSE, NULL
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ tryfaintmon BS_ATTACKER, FALSE, NULL
orbyte gMoveResultFlags, MOVE_RESULT_MISSED
goto BattleScript_MoveEnd
@@ -909,7 +911,7 @@ BattleScript_EffectFocusEnergy::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 ATTACKER, STATUS2_FOCUS_ENERGY, BattleScript_ButItFailed
+ jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY, BattleScript_ButItFailed
setfocusenergy
attackanimation
waitanimation
@@ -918,7 +920,7 @@ BattleScript_EffectFocusEnergy::
goto BattleScript_MoveEnd
BattleScript_EffectRecoil::
- setmoveeffect EFFECT_RECOIL_25 | AFFECTS_USER | CERTAIN
+ setmoveeffect MOVE_EFFECT_RECOIL_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit
incrementgamestat 0x1B
goto BattleScript_EffectHit
@@ -927,44 +929,44 @@ BattleScript_EffectConfuse::
attackcanceler
attackstring
ppreduce
- jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifstatus2 TARGET, STATUS2_CONFUSION, BattleScript_AlreadyConfused
+ jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_AlreadyConfused
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
- setmoveeffect EFFECT_CONFUSION
+ setmoveeffect MOVE_EFFECT_CONFUSION
seteffectprimary
resultmessage
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_AlreadyConfused::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x20
printstring STRINGID_PKMNALREADYCONFUSED
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectAttackUp2::
- setstatchanger ATK, 2, FALSE
+ setstatchanger STAT_ATK, 2, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectDefenseUp2::
- setstatchanger DEF, 2, FALSE
+ setstatchanger STAT_DEF, 2, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectSpeedUp2::
- setstatchanger SPEED, 2, FALSE
+ setstatchanger STAT_SPEED, 2, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectSpecialAttackUp2::
- setstatchanger SPATK, 2, FALSE
+ setstatchanger STAT_SPATK, 2, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectSpecialDefenseUp2::
- setstatchanger SPDEF, 2, FALSE
+ setstatchanger STAT_SPDEF, 2, FALSE
goto BattleScript_EffectStatUp
BattleScript_EffectTransform::
@@ -979,19 +981,19 @@ BattleScript_EffectTransform::
goto BattleScript_MoveEnd
BattleScript_EffectAttackDown2::
- setstatchanger ATK, 2, TRUE
+ setstatchanger STAT_ATK, 2, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectDefenseDown2::
- setstatchanger DEF, 2, TRUE
+ setstatchanger STAT_DEF, 2, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectSpeedDown2::
- setstatchanger SPEED, 2, TRUE
+ setstatchanger STAT_SPEED, 2, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectSpecialDefenseDown2::
- setstatchanger SPDEF, 2, TRUE
+ setstatchanger STAT_SPDEF, 2, TRUE
goto BattleScript_EffectStatDown
BattleScript_EffectReflect::
@@ -1010,18 +1012,18 @@ BattleScript_EffectPoison::
attackcanceler
attackstring
ppreduce
- jumpifability TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifstatus TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned
- jumpifstatus TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
- jumpiftype TARGET, TYPE_POISON, BattleScript_NotAffected
- jumpiftype TARGET, TYPE_STEEL, BattleScript_NotAffected
- jumpifstatus TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned
+ jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
+ jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected
+ jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
- setmoveeffect EFFECT_POISON
+ setmoveeffect MOVE_EFFECT_POISON
seteffectprimary
resultmessage
waitmessage 0x40
@@ -1031,74 +1033,74 @@ BattleScript_EffectParalyze::
attackcanceler
attackstring
ppreduce
- jumpifability TARGET, ABILITY_LIMBER, BattleScript_LimberProtected
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifability BS_TARGET, ABILITY_LIMBER, BattleScript_LimberProtected
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
typecalc
jumpifmovehadnoeffect BattleScript_ButItFailed
- jumpifstatus TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed
- jumpifstatus TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
- setmoveeffect EFFECT_PARALYSIS
+ setmoveeffect MOVE_EFFECT_PARALYSIS
seteffectprimary
resultmessage
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_AlreadyParalyzed::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x20
printstring STRINGID_PKMNISALREADYPARALYZED
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_LimberProtected::
- copybyte gEffectBank, gBattlerTarget
+ copybyte gEffectBattler, gBattlerTarget
setbyte cMULTISTRING_CHOOSER, 0x0
call BattleScript_PRLZPrevention
goto BattleScript_MoveEnd
BattleScript_EffectAttackDownHit::
- setmoveeffect EFFECT_ATK_MINUS_1
+ setmoveeffect MOVE_EFFECT_ATK_MINUS_1
goto BattleScript_EffectHit
BattleScript_EffectDefenseDownHit::
- setmoveeffect EFFECT_DEF_MINUS_1
+ setmoveeffect MOVE_EFFECT_DEF_MINUS_1
goto BattleScript_EffectHit
BattleScript_EffectSpeedDownHit::
- setmoveeffect EFFECT_SPD_MINUS_1
+ setmoveeffect MOVE_EFFECT_SPD_MINUS_1
goto BattleScript_EffectHit
BattleScript_EffectSpecialAttackDownHit::
- setmoveeffect EFFECT_SP_ATK_MINUS_1
+ setmoveeffect MOVE_EFFECT_SP_ATK_MINUS_1
goto BattleScript_EffectHit
BattleScript_EffectSpecialDefenseDownHit::
- setmoveeffect EFFECT_SP_DEF_MINUS_1
+ setmoveeffect MOVE_EFFECT_SP_DEF_MINUS_1
goto BattleScript_EffectHit
BattleScript_EffectAccuracyDownHit::
- setmoveeffect EFFECT_ACC_MINUS_1
+ setmoveeffect MOVE_EFFECT_ACC_MINUS_1
goto BattleScript_EffectHit
BattleScript_EffectSkyAttack::
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
- jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
setbyte sTWOTURN_STRINGID, 0x3
call BattleScriptFirstChargingTurn
goto BattleScript_MoveEnd
BattleScript_EffectConfuseHit::
- setmoveeffect EFFECT_CONFUSION
+ setmoveeffect MOVE_EFFECT_CONFUSION
goto BattleScript_EffectHit
BattleScript_EffectTwineedle::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
- setbyte sMULTIHIT_EFFECT, EFFECT_POISON
+ setbyte sMULTIHIT_EFFECT, MOVE_EFFECT_POISON
attackstring
ppreduce
setmultihitcounter 0x2
@@ -1110,22 +1112,22 @@ BattleScript_EffectSubstitute::
ppreduce
attackstring
waitstate
- jumpifstatus2 ATTACKER, STATUS2_SUBSTITUTE, BattleScript_AlreadyHasSubstitute
+ jumpifstatus2 BS_ATTACKER, STATUS2_SUBSTITUTE, BattleScript_AlreadyHasSubstitute
setsubstitute
- jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x1, BattleScript_SubstituteAnim
+ jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, 0x1, BattleScript_SubstituteAnim
pause 0x20
goto BattleScript_SubstituteString
BattleScript_SubstituteAnim::
attackanimation
waitanimation
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
BattleScript_SubstituteString::
printfromtable gSubsituteUsedStringIds
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_AlreadyHasSubstitute::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x20
printstring STRINGID_PKMNHASSUBSTITUTE
waitmessage 0x40
@@ -1134,7 +1136,7 @@ BattleScript_AlreadyHasSubstitute::
BattleScript_EffectRecharge::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
- setmoveeffect EFFECT_RECHARGE | AFFECTS_USER | CERTAIN
+ setmoveeffect MOVE_EFFECT_RECHARGE | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_HitFromAtkString
BattleScript_MoveUsedMustRecharge::
@@ -1145,20 +1147,20 @@ BattleScript_MoveUsedMustRecharge::
BattleScript_EffectRage::
attackcanceler
accuracycheck BattleScript_RageMiss, ACC_CURR_MOVE
- setmoveeffect EFFECT_RAGE
+ setmoveeffect MOVE_EFFECT_RAGE
seteffectprimary
setmoveeffect 0
goto BattleScript_HitFromAtkString
BattleScript_RageMiss::
- setmoveeffect EFFECT_RAGE
- clearstatusfromeffect ATTACKER
+ setmoveeffect MOVE_EFFECT_RAGE
+ clearstatusfromeffect BS_ATTACKER
goto BattleScript_PrintMoveMissed
BattleScript_EffectMimic::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
mimicattackcopy BattleScript_ButItFailed
attackanimation
@@ -1173,8 +1175,8 @@ BattleScript_EffectMetronome::
pause 0x20
attackanimation
waitanimation
- setbyte sANIM_TURN, 0x0
- setbyte sANIM_TARGETS_HIT, 0x0
+ setbyte sB_ANIM_TURN, 0x0
+ setbyte sB_ANIM_TARGETS_HIT, 0x0
metronome
BattleScript_EffectLeechSeed::
@@ -1182,7 +1184,7 @@ BattleScript_EffectLeechSeed::
attackstring
pause 0x20
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
accuracycheck BattleScript_DoLeechSeed, ACC_CURR_MOVE
BattleScript_DoLeechSeed::
setseeded
@@ -1268,31 +1270,31 @@ BattleScript_EffectPainSplit::
attackanimation
waitanimation
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
copyword gBattleMoveDamage, sPAINSPLIT_HP
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
printstring STRINGID_SHAREDPAIN
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectSnore::
attackcanceler
- jumpifstatus ATTACKER, STATUS1_SLEEP, BattleScript_SnoreIsAsleep
+ jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SnoreIsAsleep
attackstring
ppreduce
goto BattleScript_ButItFailed
BattleScript_SnoreIsAsleep::
- jumpifhalfword EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoSnore
+ jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoSnore
printstring STRINGID_PKMNFASTASLEEP
waitmessage 0x40
- statusanimation ATTACKER
+ statusanimation BS_ATTACKER
BattleScript_DoSnore::
attackstring
ppreduce
accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
- setmoveeffect EFFECT_FLINCH
+ setmoveeffect MOVE_EFFECT_FLINCH
goto BattleScript_HitFromCritCalc
BattleScript_EffectConversion2::
@@ -1310,7 +1312,7 @@ BattleScript_EffectLockOn::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
setalwayshitflag
attackanimation
@@ -1323,7 +1325,7 @@ BattleScript_EffectSketch::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
copymovepermanently BattleScript_ButItFailed
attackanimation
waitanimation
@@ -1333,14 +1335,14 @@ BattleScript_EffectSketch::
BattleScript_EffectSleepTalk::
attackcanceler
- jumpifstatus ATTACKER, STATUS1_SLEEP, BattleScript_SleepTalkIsAsleep
+ jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SleepTalkIsAsleep
attackstring
ppreduce
goto BattleScript_ButItFailed
BattleScript_SleepTalkIsAsleep::
printstring STRINGID_PKMNFASTASLEEP
waitmessage 0x40
- statusanimation ATTACKER
+ statusanimation BS_ATTACKER
attackstring
ppreduce
orword gHitMarker, HITMARKER_NO_PPDEDUCT
@@ -1350,8 +1352,8 @@ BattleScript_SleepTalkIsAsleep::
BattleScript_SleepTalkUsingMove::
attackanimation
waitanimation
- setbyte sANIM_TURN, 0x0
- setbyte sANIM_TARGETS_HIT, 0x0
+ setbyte sB_ANIM_TURN, 0x0
+ setbyte sB_ANIM_TARGETS_HIT, 0x0
jumptorandomattack TRUE
BattleScript_EffectDestinyBond::
@@ -1392,15 +1394,15 @@ BattleScript_EffectHealBell::
printfromtable gPartyStatusHealStringIds
waitmessage 0x40
jumpifnotmove MOVE_HEAL_BELL, BattleScript_PartyHealEnd
- jumpifbyte NO_COMMON_BITS, cMULTISTRING_CHOOSER, 0x1, BattleScript_CheckHealBellMon2Unaffected
+ jumpifbyte CMP_NO_COMMON_BITS, cMULTISTRING_CHOOSER, 0x1, BattleScript_CheckHealBellMon2Unaffected
printstring STRINGID_PKMNSXBLOCKSY
waitmessage 0x40
BattleScript_CheckHealBellMon2Unaffected::
- jumpifbyte NO_COMMON_BITS, cMULTISTRING_CHOOSER, 0x2, BattleScript_PartyHealEnd
+ jumpifbyte CMP_NO_COMMON_BITS, cMULTISTRING_CHOOSER, 0x2, BattleScript_PartyHealEnd
printstring STRINGID_PKMNSXBLOCKSY2
waitmessage 0x40
BattleScript_PartyHealEnd::
- updatestatusicon ATTACKER_WITH_PARTNER
+ updatestatusicon BS_ATTACKER_WITH_PARTNER
waitstate
goto BattleScript_MoveEnd
@@ -1412,10 +1414,10 @@ BattleScript_EffectTripleKick::
initmultihitstring
setmultihit 0x3
BattleScript_TripleKickLoop::
- jumpifhasnohp ATTACKER, BattleScript_TripleKickEnd
- jumpifhasnohp TARGET, BattleScript_TripleKickNoMoreHits
- jumpifhalfword EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoTripleKickAttack
- jumpifstatus ATTACKER, STATUS1_SLEEP, BattleScript_TripleKickNoMoreHits
+ jumpifhasnohp BS_ATTACKER, BattleScript_TripleKickEnd
+ jumpifhasnohp BS_TARGET, BattleScript_TripleKickNoMoreHits
+ jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoTripleKickAttack
+ jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_TripleKickNoMoreHits
BattleScript_DoTripleKickAttack::
accuracycheck BattleScript_TripleKickNoMoreHits, ACC_CURR_MOVE
movevaluescleanup
@@ -1430,40 +1432,40 @@ BattleScript_DoTripleKickAttack::
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
printstring STRINGID_EMPTYSTRING3
waitmessage 0x1
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
- jumpifbyte COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_TripleKickPrintStrings
+ jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_TripleKickPrintStrings
decrementmultihit BattleScript_TripleKickLoop
goto BattleScript_TripleKickPrintStrings
BattleScript_TripleKickNoMoreHits::
pause 0x20
- jumpifbyte EQUAL, sMULTIHIT_STRING + 4, 0x0, BattleScript_TripleKickPrintStrings
+ jumpifbyte CMP_EQUAL, sMULTIHIT_STRING + 4, 0x0, BattleScript_TripleKickPrintStrings
bicbyte gMoveResultFlags, MOVE_RESULT_MISSED
BattleScript_TripleKickPrintStrings::
resultmessage
waitmessage 0x40
- jumpifbyte EQUAL, sMULTIHIT_STRING + 4, 0x0, BattleScript_TripleKickEnd
- jumpifbyte COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TripleKickEnd
+ jumpifbyte CMP_EQUAL, sMULTIHIT_STRING + 4, 0x0, BattleScript_TripleKickEnd
+ jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TripleKickEnd
copyarray gBattleTextBuff1, sMULTIHIT_STRING, 0x6
printstring STRINGID_HITXTIMES
waitmessage 0x40
BattleScript_TripleKickEnd::
seteffectwithchance
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0xE
moveend 0x0, 0x0
end
BattleScript_EffectThief::
- setmoveeffect EFFECT_STEAL_ITEM
+ setmoveeffect MOVE_EFFECT_STEAL_ITEM
goto BattleScript_EffectHit
BattleScript_EffectMeanLook::
@@ -1471,11 +1473,11 @@ BattleScript_EffectMeanLook::
attackstring
ppreduce
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC
- jumpifstatus2 TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
attackanimation
waitanimation
- setmoveeffect EFFECT_PREVENT_ESCAPE
+ setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE
seteffectprimary
printstring STRINGID_TARGETCANTESCAPENOW
waitmessage 0x40
@@ -1485,14 +1487,14 @@ BattleScript_EffectNightmare::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifstatus2 TARGET, STATUS2_NIGHTMARE, BattleScript_ButItFailed
- jumpifstatus TARGET, STATUS1_SLEEP, BattleScript_NightmareWorked
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_NIGHTMARE, BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_NightmareWorked
goto BattleScript_ButItFailed
BattleScript_NightmareWorked::
attackanimation
waitanimation
- setmoveeffect EFFECT_NIGHTMARE
+ setmoveeffect MOVE_EFFECT_NIGHTMARE
seteffectprimary
printstring STRINGID_PKMNFELLINTONIGHTMARE
waitmessage 0x40
@@ -1501,57 +1503,57 @@ BattleScript_NightmareWorked::
BattleScript_EffectMinimize::
attackcanceler
setminimize
- setstatchanger EVASION, 1, FALSE
+ setstatchanger STAT_EVASION, 1, FALSE
goto BattleScript_EffectStatUpAfterAtkCanceler
BattleScript_EffectCurse::
- jumpiftype2 ATTACKER, TYPE_GHOST, BattleScript_GhostCurse
+ jumpiftype2 BS_ATTACKER, TYPE_GHOST, BattleScript_GhostCurse
attackcanceler
attackstring
ppreduce
- jumpifstat ATTACKER, GREATER_THAN, SPEED, 0x0, BattleScript_CurseTrySpeed
- jumpifstat ATTACKER, NOT_EQUAL, ATK, 0xC, BattleScript_CurseTrySpeed
- jumpifstat ATTACKER, EQUAL, DEF, 0xC, BattleScript_ButItFailed
+ jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, 0x0, BattleScript_CurseTrySpeed
+ jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, 0xC, BattleScript_CurseTrySpeed
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, 0xC, BattleScript_ButItFailed
BattleScript_CurseTrySpeed::
copybyte gBattlerTarget, gBattlerAttacker
- setbyte sANIM_TURN, 0x1
+ setbyte sB_ANIM_TURN, 0x1
attackanimation
waitanimation
- setstatchanger SPEED, 1, TRUE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_CurseTryAttack
+ setstatchanger STAT_SPEED, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CurseTryAttack
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_CurseTryAttack::
- setstatchanger ATK, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_CurseTryDefence
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CurseTryDefence
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_CurseTryDefence::
- setstatchanger DEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_CurseEnd
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CurseEnd
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_CurseEnd::
goto BattleScript_MoveEnd
BattleScript_GhostCurse::
jumpifbytenotequal gBattlerAttacker, gBattlerTarget, BattleScript_DoGhostCurse
- getmovetarget ATTACKER
+ getmovetarget BS_ATTACKER
BattleScript_DoGhostCurse::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
cursetarget BattleScript_ButItFailed
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- setbyte sANIM_TURN, 0x0
+ setbyte sB_ANIM_TURN, 0x0
attackanimation
waitanimation
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
printstring STRINGID_PKMNLAIDCURSE
waitmessage 0x40
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_EffectProtect::
@@ -1600,7 +1602,7 @@ BattleScript_EffectPerishSong::
waitmessage 0x40
setbyte sBANK, 0x0
BattleScript_PerishSongLoop::
- jumpifability SCRIPTING_BANK, ABILITY_SOUNDPROOF, BattleScript_PerishSongNotAffected
+ jumpifability BS_SCRIPTING, ABILITY_SOUNDPROOF, BattleScript_PerishSongNotAffected
BattleScript_PerishSongLoopIncrement::
addbyte sBANK, 0x1
jumpifbytenotequal sBANK, gBattlersCount, BattleScript_PerishSongLoop
@@ -1621,7 +1623,7 @@ BattleScript_EffectSandstorm::
BattleScript_EffectRollout::
attackcanceler
attackstring
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_RolloutCheckAccuracy
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_RolloutCheckAccuracy
ppreduce
BattleScript_RolloutCheckAccuracy::
accuracycheck BattleScript_RolloutHit, ACC_CURR_MOVE
@@ -1632,24 +1634,24 @@ BattleScript_RolloutHit::
BattleScript_EffectSwagger::
attackcanceler
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
- jumpifconfusedandstatmaxed ATK, BattleScript_ButItFailed
+ jumpifconfusedandstatmaxed STAT_ATK, BattleScript_ButItFailed
attackanimation
waitanimation
- setstatchanger ATK, 2, FALSE
+ setstatchanger STAT_ATK, 2, FALSE
statbuffchange 0x1, BattleScript_SwaggerTryConfuse
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_SwaggerTryConfuse
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_SwaggerTryConfuse
setgraphicalstatchangevalues
- playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_SwaggerTryConfuse::
- jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
- setmoveeffect EFFECT_CONFUSION
+ jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ setmoveeffect MOVE_EFFECT_CONFUSION
seteffectprimary
goto BattleScript_MoveEnd
@@ -1702,7 +1704,7 @@ BattleScript_EffectSafeguard::
goto BattleScript_PrintReflectLightScreenSafeguardString
BattleScript_EffectThawHit::
- setmoveeffect EFFECT_BURN
+ setmoveeffect MOVE_EFFECT_BURN
goto BattleScript_EffectHit
BattleScript_EffectMagnitude::
@@ -1721,25 +1723,25 @@ BattleScript_EffectBatonPass::
attackstring
ppreduce
jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed
- jumpifcantswitch ATK4F_DONT_CHECK_STATUSES | ATTACKER, BattleScript_ButItFailed
+ jumpifcantswitch ATK4F_DONT_CHECK_STATUSES | BS_ATTACKER, BattleScript_ButItFailed
attackanimation
waitanimation
openpartyscreen 0x1, BattleScript_ButItFailed
- switchoutabilities ATTACKER
+ switchoutabilities BS_ATTACKER
waitstate
- switchhandleorder ATTACKER, 0x2
- returntoball ATTACKER
- getswitchedmondata ATTACKER
- switchindataupdate ATTACKER
- hpthresholds ATTACKER
+ switchhandleorder BS_ATTACKER, 0x2
+ returntoball BS_ATTACKER
+ getswitchedmondata BS_ATTACKER
+ switchindataupdate BS_ATTACKER
+ hpthresholds BS_ATTACKER
printstring STRINGID_SWITCHINMON
- switchinanim ATTACKER, TRUE
+ switchinanim BS_ATTACKER, TRUE
waitstate
- switchineffects ATTACKER
+ switchineffects BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_EffectRapidSpin::
- setmoveeffect EFFECT_RAPIDSPIN | AFFECTS_USER | CERTAIN
+ setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_EffectSonicboom::
@@ -1787,15 +1789,15 @@ BattleScript_EffectSunnyDay::
goto BattleScript_MoveWeatherChange
BattleScript_EffectDefenseUpHit::
- setmoveeffect EFFECT_DEF_PLUS_1 | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
goto BattleScript_EffectHit
BattleScript_EffectAttackUpHit::
- setmoveeffect EFFECT_ATK_PLUS_1 | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
goto BattleScript_EffectHit
BattleScript_EffectAllStatsUpHit::
- setmoveeffect EFFECT_ALL_STATS_UP | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_ALL_STATS_UP | MOVE_EFFECT_AFFECTS_USER
goto BattleScript_EffectHit
BattleScript_EffectBellyDrum::
@@ -1806,8 +1808,8 @@ BattleScript_EffectBellyDrum::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
attackanimation
waitanimation
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
printstring STRINGID_PKMNCUTHPMAXEDATTACK
waitmessage 0x40
goto BattleScript_MoveEnd
@@ -1834,26 +1836,26 @@ BattleScript_EffectMirrorCoat::
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectSkullBash::
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
- jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
setbyte sTWOTURN_STRINGID, 0x2
call BattleScriptFirstChargingTurn
- setstatchanger DEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_SkullBashEnd
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_SkullBashEnd
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_SkullBashEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_SkullBashEnd
setgraphicalstatchangevalues
- playanimation ATTACKER, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_SkullBashEnd::
goto BattleScript_MoveEnd
BattleScript_EffectTwister::
- jumpifnostatus3 TARGET, STATUS3_ON_AIR, BattleScript_FlinchEffect
+ jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_FlinchEffect
orword gHitMarker, HITMARKER_IGNORE_ON_AIR
setbyte sDMG_MULTIPLIER, 0x2
BattleScript_FlinchEffect::
- setmoveeffect EFFECT_FLINCH
+ setmoveeffect MOVE_EFFECT_FLINCH
goto BattleScript_EffectHit
BattleScript_EffectEarthquake::
@@ -1863,7 +1865,7 @@ BattleScript_EffectEarthquake::
selectfirstvalidtarget
BattleScript_HitsAllWithUndergroundBonusLoop::
movevaluescleanup
- jumpifnostatus3 TARGET, STATUS3_UNDERGROUND, BattleScript_HitsAllNoUndergroundBonus
+ jumpifnostatus3 BS_TARGET, STATUS3_UNDERGROUND, BattleScript_HitsAllNoUndergroundBonus
orword gHitMarker, HITMARKER_IGNORE_UNDERGROUND
setbyte sDMG_MULTIPLIER, 0x2
goto BattleScript_DoHitAllWithUndergroundBonus
@@ -1879,17 +1881,17 @@ BattleScript_DoHitAllWithUndergroundBonus::
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
printstring STRINGID_EMPTYSTRING3
waitmessage 0x1
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_HitsAllWithUndergroundBonusLoop
@@ -1917,35 +1919,35 @@ BattleScript_EffectFutureSight::
goto BattleScript_MoveEnd
BattleScript_EffectGust::
- jumpifnostatus3 TARGET, STATUS3_ON_AIR, BattleScript_EffectHit
+ jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_EffectHit
orword gHitMarker, HITMARKER_IGNORE_ON_AIR
setbyte sDMG_MULTIPLIER, 0x2
goto BattleScript_EffectHit
BattleScript_EffectStomp::
- jumpifnostatus3 TARGET, STATUS3_MINIMIZED, BattleScript_FlinchEffect
+ jumpifnostatus3 BS_TARGET, STATUS3_MINIMIZED, BattleScript_FlinchEffect
setbyte sDMG_MULTIPLIER, 0x2
goto BattleScript_FlinchEffect
BattleScript_EffectSolarbeam::
jumpifabilitypresent ABILITY_CLOUD_NINE, BattleScript_SolarbeamDecideTurn
jumpifabilitypresent ABILITY_AIR_LOCK, BattleScript_SolarbeamDecideTurn
- jumpifhalfword COMMON_BITS, gBattleWeather, WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT, BattleScript_SolarbeamOnFirstTurn
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT, BattleScript_SolarbeamOnFirstTurn
BattleScript_SolarbeamDecideTurn::
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
- jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
setbyte sTWOTURN_STRINGID, 0x1
call BattleScriptFirstChargingTurn
goto BattleScript_MoveEnd
BattleScript_SolarbeamOnFirstTurn::
orword gHitMarker, HITMARKER_x8000000
- setmoveeffect EFFECT_CHARGING | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER
seteffectprimary
ppreduce
goto BattleScript_TwoTurnMovesSecondTurn
BattleScript_EffectThunder::
- setmoveeffect EFFECT_PARALYSIS
+ setmoveeffect MOVE_EFFECT_PARALYSIS
orword gHitMarker, HITMARKER_IGNORE_ON_AIR
goto BattleScript_EffectHit
@@ -1954,14 +1956,14 @@ BattleScript_EffectTeleport::
attackstring
ppreduce
jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_ButItFailed
- getifcantrunfrombattle ATTACKER
- jumpifbyte EQUAL, gBattleCommunication, 0x1, BattleScript_ButItFailed
- jumpifbyte EQUAL, gBattleCommunication, 0x2, BattleScript_PrintAbilityMadeIneffective
+ getifcantrunfrombattle BS_ATTACKER
+ jumpifbyte CMP_EQUAL, gBattleCommunication, 0x1, BattleScript_ButItFailed
+ jumpifbyte CMP_EQUAL, gBattleCommunication, 0x2, BattleScript_PrintAbilityMadeIneffective
attackanimation
waitanimation
printstring STRINGID_PKMNFLEDFROMBATTLE
waitmessage 0x40
- setoutcomeonteleport ATTACKER
+ setoutcomeonteleport BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_EffectBeatUp::
@@ -1976,22 +1978,22 @@ BattleScript_BeatUpLoop::
trydobeatup BattleScript_BeatUpEnd, BattleScript_ButItFailed
printstring STRINGID_PKMNATTACK
critcalc
- jumpifbyte NOT_EQUAL, gCritMultiplier, 0x2, BattleScript_BeatUpAttack
+ jumpifbyte CMP_NOT_EQUAL, gCritMultiplier, 0x2, BattleScript_BeatUpAttack
manipulatedamage ATK80_DMG_DOUBLED
BattleScript_BeatUpAttack::
adjustnormaldamage
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
goto BattleScript_BeatUpLoop
@@ -1999,8 +2001,8 @@ BattleScript_BeatUpEnd::
end
BattleScript_EffectSemiInvulnerable::
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SecondTurnSemiInvulnerable
- jumpifword COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_SecondTurnSemiInvulnerable
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SecondTurnSemiInvulnerable
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_SecondTurnSemiInvulnerable
jumpifmove MOVE_FLY, BattleScript_FirstTurnFly
jumpifmove MOVE_DIVE, BattleScript_FirstTurnDive
jumpifmove MOVE_BOUNCE, BattleScript_FirstTurnBounce
@@ -2024,12 +2026,12 @@ BattleScript_FirstTurnSemiInvulnerable::
BattleScript_SecondTurnSemiInvulnerable::
attackcanceler
- setmoveeffect EFFECT_CHARGING
- setbyte sANIM_TURN, 0x1
- clearstatusfromeffect ATTACKER
+ setmoveeffect MOVE_EFFECT_CHARGING
+ setbyte sB_ANIM_TURN, 0x1
+ clearstatusfromeffect BS_ATTACKER
orword gHitMarker, HITMARKER_NO_PPDEDUCT
jumpifnotmove MOVE_BOUNCE, BattleScript_SemiInvulnerableTryHit
- setmoveeffect EFFECT_PARALYSIS
+ setmoveeffect MOVE_EFFECT_PARALYSIS
BattleScript_SemiInvulnerableTryHit::
accuracycheck BattleScript_SemiInvulnerableMiss, ACC_CURR_MOVE
clearsemiinvulnerablebit
@@ -2044,9 +2046,9 @@ BattleScript_EffectDefenseCurl::
attackstring
ppreduce
setdefensecurlbit
- setstatchanger DEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_DefenseCurlDoStatUpAnim
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatUpPrintString
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_DefenseCurlDoStatUpAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_StatUpPrintString
attackanimation
waitanimation
BattleScript_DefenseCurlDoStatUpAnim::
@@ -2056,13 +2058,13 @@ BattleScript_EffectSoftboiled::
attackcanceler
attackstring
ppreduce
- tryhealhalfhealth BattleScript_AlreadyAtFullHp, TARGET
+ tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_TARGET
BattleScript_PresentHealTarget::
attackanimation
waitanimation
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
printstring STRINGID_PKMNREGAINEDHEALTH
waitmessage 0x40
goto BattleScript_MoveEnd
@@ -2076,7 +2078,7 @@ BattleScript_AlreadyAtFullHp::
BattleScript_EffectFakeOut::
attackcanceler
jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce
- setmoveeffect EFFECT_FLINCH | CERTAIN
+ setmoveeffect MOVE_EFFECT_FLINCH | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_ButItFailedAtkStringPpReduce::
@@ -2100,9 +2102,9 @@ BattleScript_NotAffected::
BattleScript_EffectUproar::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
- setmoveeffect EFFECT_UPROAR | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_UPROAR | MOVE_EFFECT_AFFECTS_USER
attackstring
- jumpifstatus2 ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_UproarHit
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_UproarHit
ppreduce
BattleScript_UproarHit::
nop
@@ -2121,7 +2123,7 @@ BattleScript_EffectStockpile::
BattleScript_EffectSpitUp::
attackcanceler
- jumpifbyte EQUAL, gBattleCommunication + 6, 0x1, BattleScript_82D9FA2
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 6, 0x1, BattleScript_82D9FA2
attackstring
ppreduce
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@@ -2178,24 +2180,24 @@ BattleScript_EffectTorment::
BattleScript_EffectFlatter::
attackcanceler
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
- jumpifconfusedandstatmaxed SPATK, BattleScript_ButItFailed
+ jumpifconfusedandstatmaxed STAT_SPATK, BattleScript_ButItFailed
attackanimation
waitanimation
- setstatchanger SPATK, 1, FALSE
+ setstatchanger STAT_SPATK, 1, FALSE
statbuffchange 0x1, BattleScript_FlatterTryConfuse
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_FlatterTryConfuse
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_FlatterTryConfuse
setgraphicalstatchangevalues
- playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_FlatterTryConfuse::
- jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
- setmoveeffect EFFECT_CONFUSION
+ jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ setmoveeffect MOVE_EFFECT_CONFUSION
seteffectprimary
goto BattleScript_MoveEnd
@@ -2203,27 +2205,27 @@ BattleScript_EffectWillOWisp::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifstatus TARGET, STATUS1_BURN, BattleScript_AlreadyBurned
- jumpiftype TARGET, TYPE_FIRE, BattleScript_NotAffected
- jumpifability TARGET, ABILITY_WATER_VEIL, BattleScript_WaterVeilPrevents
- jumpifstatus TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_BURN, BattleScript_AlreadyBurned
+ jumpiftype BS_TARGET, TYPE_FIRE, BattleScript_NotAffected
+ jumpifability BS_TARGET, ABILITY_WATER_VEIL, BattleScript_WaterVeilPrevents
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
attackanimation
waitanimation
- setmoveeffect EFFECT_BURN
+ setmoveeffect MOVE_EFFECT_BURN
seteffectprimary
goto BattleScript_MoveEnd
BattleScript_WaterVeilPrevents::
- copybyte gEffectBank, gBattlerTarget
+ copybyte gEffectBattler, gBattlerTarget
setbyte cMULTISTRING_CHOOSER, 0x0
call BattleScript_BRNPrevention
goto BattleScript_MoveEnd
BattleScript_AlreadyBurned::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x20
printstring STRINGID_PKMNALREADYHASBURN
waitmessage 0x40
@@ -2231,31 +2233,31 @@ BattleScript_AlreadyBurned::
BattleScript_EffectMemento::
attackcanceler
- jumpifbyte EQUAL, gBattleCommunication + 6, 0x1, BattleScript_82DA153
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 6, 0x1, BattleScript_82DA153
attackstring
ppreduce
jumpifattackandspecialattackcannotfall BattleScript_ButItFailed
setatkhptozero
attackanimation
waitanimation
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_82DA148
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_82DA148
setbyte sFIELD_1B, 0x0
- playstatchangeanimation TARGET, 0x12, 0x7
- playstatchangeanimation TARGET, 0x2, 0x3
- setstatchanger ATK, 2, TRUE
+ playstatchangeanimation BS_TARGET, 0x12, 0x7
+ playstatchangeanimation BS_TARGET, 0x2, 0x3
+ setstatchanger STAT_ATK, 2, TRUE
statbuffchange 0x1, BattleScript_82DA119
- jumpifbyte GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA119
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA119
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_82DA119::
- playstatchangeanimation TARGET, 0x10, 0x3
- setstatchanger SPATK, 2, TRUE
+ playstatchangeanimation BS_TARGET, 0x10, 0x3
+ setstatchanger STAT_SPATK, 2, TRUE
statbuffchange 0x1, BattleScript_82DA13C
- jumpifbyte GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA13C
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA13C
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_82DA13C::
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_82DA148::
printstring STRINGID_BUTNOEFFECT
@@ -2271,11 +2273,11 @@ BattleScript_82DA15A::
effectivenesssound
resultmessage
waitmessage 0x40
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_EffectFacade::
- jumpifstatus ATTACKER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, BattleScript_FacadeDoubleDmg
+ jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, BattleScript_FacadeDoubleDmg
goto BattleScript_EffectHit
BattleScript_FacadeDoubleDmg::
@@ -2291,9 +2293,9 @@ BattleScript_EffectFocusPunch::
goto BattleScript_MoveEnd
BattleScript_EffectSmellingsalt::
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectHit
- setmoveeffect EFFECT_REMOVE_PARALYSIS | CERTAIN
- jumpifstatus TARGET, STATUS1_PARALYSIS, BattleScript_SmellingsaltDoubleDmg
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectHit
+ setmoveeffect MOVE_EFFECT_REMOVE_PARALYSIS | MOVE_EFFECT_CERTAIN
+ jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_SmellingsaltDoubleDmg
goto BattleScript_EffectHit
BattleScript_SmellingsaltDoubleDmg::
@@ -2358,7 +2360,7 @@ BattleScript_EffectTrick::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
tryswapitems BattleScript_ButItFailed
attackanimation
@@ -2396,8 +2398,8 @@ BattleScript_EffectAssist::
asistattackselect BattleScript_ButItFailedPpReduce
attackanimation
waitanimation
- setbyte sANIM_TURN, 0x0
- setbyte sANIM_TARGETS_HIT, 0x0
+ setbyte sB_ANIM_TURN, 0x0
+ setbyte sB_ANIM_TARGETS_HIT, 0x0
jumptorandomattack TRUE
BattleScript_EffectIngrain::
@@ -2412,7 +2414,7 @@ BattleScript_EffectIngrain::
goto BattleScript_MoveEnd
BattleScript_EffectSuperpower::
- setmoveeffect EFFECT_ATK_DEF_DOWN | AFFECTS_USER | CERTAIN
+ setmoveeffect MOVE_EFFECT_ATK_DEF_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_EffectMagicCoat::
@@ -2451,37 +2453,37 @@ BattleScript_EffectBrickBreak::
damagecalc
typecalc
adjustnormaldamage
- jumpifbyte EQUAL, sANIM_TURN, 0x0, BattleScript_BrickBreakAnim
+ jumpifbyte CMP_EQUAL, sB_ANIM_TURN, 0x0, BattleScript_BrickBreakAnim
bicbyte gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
BattleScript_BrickBreakAnim::
attackanimation
waitanimation
- jumpifbyte LESS_THAN, sANIM_TURN, 0x2, BattleScript_BrickBreakDoHit
+ jumpifbyte CMP_LESS_THAN, sB_ANIM_TURN, 0x2, BattleScript_BrickBreakDoHit
printstring STRINGID_THEWALLSHATTERED
waitmessage 0x40
BattleScript_BrickBreakDoHit::
typecalc2
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
seteffectwithchance
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_EffectYawn::
attackcanceler
attackstring
ppreduce
- jumpifability TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBankAbilityMadeIneffective
- jumpifability TARGET, ABILITY_INSOMNIA, BattleScript_PrintBankAbilityMadeIneffective
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBankAbilityMadeIneffective
+ jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_PrintBankAbilityMadeIneffective
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
jumpifcantmakeasleep BattleScript_ButItFailed
setyawn BattleScript_ButItFailed
@@ -2499,7 +2501,7 @@ BattleScript_PrintAbilityMadeIneffective::
goto BattleScript_MoveEnd
BattleScript_EffectKnockOff::
- setmoveeffect EFFECT_KNOCK_OFF
+ setmoveeffect MOVE_EFFECT_KNOCK_OFF
goto BattleScript_EffectHit
BattleScript_EffectEndeavor::
@@ -2552,7 +2554,7 @@ BattleScript_EffectRefresh::
waitanimation
printstring STRINGID_PKMNSTATUSNORMAL
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_EffectGrudge::
@@ -2591,7 +2593,7 @@ BattleScript_EffectSecretPower::
goto BattleScript_EffectHit
BattleScript_EffectDoubleEdge::
- setmoveeffect EFFECT_RECOIL_33_PARALYSIS | AFFECTS_USER | CERTAIN
+ setmoveeffect MOVE_EFFECT_RECOIL_33_PARALYSIS | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_EffectTeeterDance::
@@ -2601,14 +2603,14 @@ BattleScript_EffectTeeterDance::
setbyte gBattlerTarget, 0x0
BattleScript_TeeterDanceLoop::
movevaluescleanup
- setmoveeffect EFFECT_CONFUSION
+ setmoveeffect MOVE_EFFECT_CONFUSION
jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_TeeterDanceLoopIncrement
- jumpifability TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceOwnTempoPrevents
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_TeeterDanceSubstitutePrevents
- jumpifstatus2 TARGET, STATUS2_CONFUSION, BattleScript_TeeterDanceAlreadyConfused
- jumpifhasnohp TARGET, BattleScript_TeeterDanceLoopIncrement
+ jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceOwnTempoPrevents
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_TeeterDanceSubstitutePrevents
+ jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_TeeterDanceAlreadyConfused
+ jumpifhasnohp BS_TARGET, BattleScript_TeeterDanceLoopIncrement
accuracycheck BattleScript_TeeterDanceMissed, ACC_CURR_MOVE
- jumpifsideaffecting TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_TeeterDanceSafeguardProtected
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_TeeterDanceSafeguardProtected
attackanimation
waitanimation
seteffectprimary
@@ -2641,7 +2643,7 @@ BattleScript_TeeterDanceSubstitutePrevents::
goto BattleScript_TeeterDanceDoMoveEndIncrement
BattleScript_TeeterDanceAlreadyConfused::
- various23 ATTACKER
+ various23 BS_ATTACKER
pause 0x20
printstring STRINGID_PKMNALREADYCONFUSED
waitmessage 0x40
@@ -2665,7 +2667,7 @@ BattleScript_EffectWaterSport::
goto BattleScript_MoveEnd
BattleScript_EffectPoisonFang::
- setmoveeffect EFFECT_TOXIC
+ setmoveeffect MOVE_EFFECT_TOXIC
goto BattleScript_EffectHit
BattleScript_EffectWeatherBall::
@@ -2673,32 +2675,32 @@ BattleScript_EffectWeatherBall::
goto BattleScript_EffectHit
BattleScript_EffectOverheat::
- setmoveeffect EFFECT_SP_ATK_TWO_DOWN | AFFECTS_USER | CERTAIN
+ setmoveeffect MOVE_EFFECT_SP_ATK_TWO_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_EffectTickle::
attackcanceler
attackstring
ppreduce
- jumpifstat TARGET, GREATER_THAN, ATK, 0x0, BattleScript_TickleDoMoveAnim
- jumpifstat TARGET, EQUAL, DEF, 0x0, BattleScript_CantLowerMultipleStats
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, 0x0, BattleScript_TickleDoMoveAnim
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_DEF, 0x0, BattleScript_CantLowerMultipleStats
BattleScript_TickleDoMoveAnim::
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
attackanimation
waitanimation
setbyte sFIELD_1B, 0x0
- playstatchangeanimation TARGET, 0x6, 0x5
- playstatchangeanimation TARGET, 0x2, 0x1
- setstatchanger ATK, 1, TRUE
+ playstatchangeanimation BS_TARGET, 0x6, 0x5
+ playstatchangeanimation BS_TARGET, 0x2, 0x1
+ setstatchanger STAT_ATK, 1, TRUE
statbuffchange 0x1, BattleScript_TickleTryLowerDef
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleTryLowerDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleTryLowerDef
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_TickleTryLowerDef::
- playstatchangeanimation TARGET, 0x4, 0x1
- setstatchanger DEF, 1, TRUE
+ playstatchangeanimation BS_TARGET, 0x4, 0x1
+ setstatchanger STAT_DEF, 1, TRUE
statbuffchange 0x1, BattleScript_TickleEnd
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleEnd
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_TickleEnd::
@@ -2715,22 +2717,22 @@ BattleScript_EffectCosmicPower::
attackcanceler
attackstring
ppreduce
- jumpifstat ATTACKER, LESS_THAN, DEF, 0xC, BattleScript_CosmicPowerDoMoveAnim
- jumpifstat ATTACKER, EQUAL, SPDEF, 0xC, BattleScript_CantRaiseMultipleStats
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, 0xC, BattleScript_CosmicPowerDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0xC, BattleScript_CantRaiseMultipleStats
BattleScript_CosmicPowerDoMoveAnim::
attackanimation
waitanimation
setbyte sFIELD_1B, 0x0
- playstatchangeanimation ATTACKER, 0x24, 0x0
- setstatchanger DEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_CosmicPowerTrySpDef
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CosmicPowerTrySpDef
+ playstatchangeanimation BS_ATTACKER, 0x24, 0x0
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CosmicPowerTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CosmicPowerTrySpDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_CosmicPowerTrySpDef::
- setstatchanger SPDEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_CosmicPowerEnd
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CosmicPowerEnd
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CosmicPowerEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CosmicPowerEnd
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_CosmicPowerEnd::
@@ -2744,22 +2746,22 @@ BattleScript_EffectBulkUp::
attackcanceler
attackstring
ppreduce
- jumpifstat ATTACKER, LESS_THAN, ATK, 0xC, BattleScript_BulkUpDoMoveAnim
- jumpifstat ATTACKER, EQUAL, DEF, 0xC, BattleScript_CantRaiseMultipleStats
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_BulkUpDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, 0xC, BattleScript_CantRaiseMultipleStats
BattleScript_BulkUpDoMoveAnim::
attackanimation
waitanimation
setbyte sFIELD_1B, 0x0
- playstatchangeanimation ATTACKER, 0x6, 0x0
- setstatchanger ATK, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_BulkUpTryDef
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_BulkUpTryDef
+ playstatchangeanimation BS_ATTACKER, 0x6, 0x0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_BulkUpTryDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_BulkUpTryDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_BulkUpTryDef::
- setstatchanger DEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_BulkUpEnd
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_BulkUpEnd
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_BulkUpEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_BulkUpEnd
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_BulkUpEnd::
@@ -2769,22 +2771,22 @@ BattleScript_EffectCalmMind::
attackcanceler
attackstring
ppreduce
- jumpifstat ATTACKER, LESS_THAN, SPATK, 0xC, BattleScript_CalmMindDoMoveAnim
- jumpifstat ATTACKER, EQUAL, SPDEF, 0xC, BattleScript_CantRaiseMultipleStats
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, 0xC, BattleScript_CalmMindDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0xC, BattleScript_CantRaiseMultipleStats
BattleScript_CalmMindDoMoveAnim::
attackanimation
waitanimation
setbyte sFIELD_1B, 0x0
- playstatchangeanimation ATTACKER, 0x30, 0x0
- setstatchanger SPATK, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_CalmMindTrySpDef
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CalmMindTrySpDef
+ playstatchangeanimation BS_ATTACKER, 0x30, 0x0
+ setstatchanger STAT_SPATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CalmMindTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CalmMindTrySpDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_CalmMindTrySpDef::
- setstatchanger SPDEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_CalmMindEnd
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CalmMindEnd
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CalmMindEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CalmMindEnd
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_CalmMindEnd::
@@ -2801,22 +2803,22 @@ BattleScript_EffectDragonDance::
attackcanceler
attackstring
ppreduce
- jumpifstat ATTACKER, LESS_THAN, ATK, 0xC, BattleScript_DragonDanceDoMoveAnim
- jumpifstat ATTACKER, EQUAL, SPEED, 0xC, BattleScript_CantRaiseMultipleStats
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_DragonDanceDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, 0xC, BattleScript_CantRaiseMultipleStats
BattleScript_DragonDanceDoMoveAnim::
attackanimation
waitanimation
setbyte sFIELD_1B, 0x0
- playstatchangeanimation ATTACKER, 0xA, 0x0
- setstatchanger ATK, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_DragonDanceTrySpeed
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DragonDanceTrySpeed
+ playstatchangeanimation BS_ATTACKER, 0xA, 0x0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_DragonDanceTrySpeed
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DragonDanceTrySpeed
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_DragonDanceTrySpeed::
- setstatchanger SPEED, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_DragonDanceEnd
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DragonDanceEnd
+ setstatchanger STAT_SPEED, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_DragonDanceEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DragonDanceEnd
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_DragonDanceEnd::
@@ -2834,85 +2836,85 @@ BattleScript_EffectCamouflage::
goto BattleScript_MoveEnd
BattleScript_FaintAttacker::
- playfaintcry ATTACKER
+ playfaintcry BS_ATTACKER
pause 0x40
- dofaintanimation ATTACKER
- cleareffectsonfaint ATTACKER
+ dofaintanimation BS_ATTACKER
+ cleareffectsonfaint BS_ATTACKER
printstring STRINGID_ATTACKERFAINTED
return
BattleScript_FaintTarget::
- playfaintcry TARGET
+ playfaintcry BS_TARGET
pause 0x40
- dofaintanimation TARGET
- cleareffectsonfaint TARGET
+ dofaintanimation BS_TARGET
+ cleareffectsonfaint BS_TARGET
printstring STRINGID_TARGETFAINTED
return
BattleScript_GiveExp::
setbyte sGIVEEXP_STATE, 0x0
- getexp TARGET
+ getexp BS_TARGET
end2
BattleScript_HandleFaintedMon::
atk24 BattleScript_82DA8F6
- jumpifbyte NOT_EQUAL, gBattleOutcome, 0, BattleScript_FaintedMonEnd
+ jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_FaintedMonEnd
jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonTryChooseAnother
- jumpifword NO_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonTryChooseAnother
+ jumpifword CMP_NO_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonTryChooseAnother
printstring STRINGID_USENEXTPKMN
setbyte gBattleCommunication, 0x0
yesnobox
- jumpifbyte EQUAL, gBattleCommunication + 1, 0x0, BattleScript_FaintedMonTryChooseAnother
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x0, BattleScript_FaintedMonTryChooseAnother
jumpifplayerran BattleScript_FaintedMonEnd
printstring STRINGID_CANTESCAPE2
BattleScript_FaintedMonTryChooseAnother::
openpartyscreen 0x3, BattleScript_FaintedMonEnd
- switchhandleorder GBANK_1, 0x2
+ switchhandleorder BS_FAINTED, 0x2
jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_LINK, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_x2000000, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonChooseAnother
- jumpifword COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonChooseAnother
- jumpifbyte EQUAL, sBATTLE_STYLE, 0x1, BattleScript_FaintedMonChooseAnother
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonChooseAnother
+ jumpifbyte CMP_EQUAL, sBATTLE_STYLE, 0x1, BattleScript_FaintedMonChooseAnother
jumpifcantswitch 11, BattleScript_FaintedMonChooseAnother
printstring STRINGID_ENEMYABOUTTOSWITCHPKMN
setbyte gBattleCommunication, 0x0
yesnobox
- jumpifbyte EQUAL, gBattleCommunication + 1, 0x1, BattleScript_FaintedMonChooseAnother
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x1, BattleScript_FaintedMonChooseAnother
setatktoplayer0
openpartyscreen 0x81, BattleScript_FaintedMonChooseAnother
- switchhandleorder ATTACKER, 0x2
- jumpifbyte EQUAL, gBattleCommunication, 0x6, BattleScript_FaintedMonChooseAnother
+ switchhandleorder BS_ATTACKER, 0x2
+ jumpifbyte CMP_EQUAL, gBattleCommunication, 0x6, BattleScript_FaintedMonChooseAnother
atknameinbuff1
- resetintrimidatetracebits ATTACKER
- hpthresholds2 ATTACKER
+ resetintrimidatetracebits BS_ATTACKER
+ hpthresholds2 BS_ATTACKER
printstring STRINGID_RETURNMON
- switchoutabilities ATTACKER
+ switchoutabilities BS_ATTACKER
waitstate
returnatktoball
waitstate
- drawpartystatussummary ATTACKER
- getswitchedmondata ATTACKER
- switchindataupdate ATTACKER
- hpthresholds ATTACKER
+ drawpartystatussummary BS_ATTACKER
+ getswitchedmondata BS_ATTACKER
+ switchindataupdate BS_ATTACKER
+ hpthresholds BS_ATTACKER
printstring STRINGID_SWITCHINMON
- atk62 ATTACKER
- switchinanim ATTACKER, 0x0
+ atk62 BS_ATTACKER
+ switchinanim BS_ATTACKER, 0x0
waitstate
- switchineffects ATTACKER
+ switchineffects BS_ATTACKER
resetsentmonsvalue
BattleScript_FaintedMonChooseAnother::
- drawpartystatussummary GBANK_1
- getswitchedmondata GBANK_1
- switchindataupdate GBANK_1
- hpthresholds GBANK_1
+ drawpartystatussummary BS_FAINTED
+ getswitchedmondata BS_FAINTED
+ switchindataupdate BS_FAINTED
+ hpthresholds BS_FAINTED
printstring STRINGID_SWITCHINMON
- atk62 GBANK_1
- switchinanim GBANK_1, FALSE
+ atk62 BS_FAINTED
+ switchinanim BS_FAINTED, FALSE
waitstate
- various7 ATTACKER
- switchineffects GBANK_1
+ various7 BS_ATTACKER
+ switchineffects BS_FAINTED
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonEnd
cancelallactions
BattleScript_FaintedMonEnd::
@@ -2921,21 +2923,21 @@ BattleScript_FaintedMonEnd::
BattleScript_82DA8F6::
openpartyscreen 0x5, BattleScript_82DA8FC
BattleScript_82DA8FC::
- switchhandleorder GBANK_1, 0x0
+ switchhandleorder BS_FAINTED, 0x0
openpartyscreen 0x6, BattleScript_82DA92C
- switchhandleorder GBANK_1, 0x0
+ switchhandleorder BS_FAINTED, 0x0
BattleScript_82DA908::
- switchhandleorder GBANK_1, 0x3
- drawpartystatussummary GBANK_1
- getswitchedmondata GBANK_1
- switchindataupdate GBANK_1
- hpthresholds GBANK_1
+ switchhandleorder BS_FAINTED, 0x3
+ drawpartystatussummary BS_FAINTED
+ getswitchedmondata BS_FAINTED
+ switchindataupdate BS_FAINTED
+ hpthresholds BS_FAINTED
printstring STRINGID_SWITCHINMON
- atk62 GBANK_1
- switchinanim GBANK_1, FALSE
+ atk62 BS_FAINTED
+ switchinanim BS_FAINTED, FALSE
waitstate
switchineffects 5
- jumpifbytenotequal gBank1, gBattlersCount, BattleScript_82DA908
+ jumpifbytenotequal gBattlerFainted, gBattlersCount, BattleScript_82DA908
BattleScript_82DA92C::
end2
@@ -2946,13 +2948,13 @@ BattleScript_LocalTrainerBattleWon::
BattleScript_LocalTwoTrainersDefeated::
printstring STRINGID_TWOENEMIESDEFEATED
BattleScript_LocalBattleWonLoseTexts::
- trainerslidein ATTACKER
+ trainerslidein BS_ATTACKER
waitstate
printstring STRINGID_TRAINER1LOSETEXT
jumpifnotbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_LocalBattleWonReward
trainerslideout B_POSITION_OPPONENT_LEFT
waitstate
- trainerslidein GBANK_1
+ trainerslidein BS_FAINTED
waitstate
printstring STRINGID_TRAINER2LOSETEXT
BattleScript_LocalBattleWonReward::
@@ -2969,7 +2971,7 @@ BattleScript_LocalBattleLost::
jumpifbattletype BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID, BattleScript_LocalBattleLostPrintTrainersWinText
jumpifbattletype BATTLE_TYPE_x4000000, BattleScript_LocalBattleLostPrintTrainersWinText
jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd
- jumpifhalfword EQUAL, gTrainerBattleOpponent_A, 0x400, BattleScript_LocalBattleLostEnd
+ jumpifhalfword CMP_EQUAL, gTrainerBattleOpponent_A, 0x400, BattleScript_LocalBattleLostEnd
BattleScript_LocalBattleLostPrintWhiteOut::
printstring STRINGID_PLAYERWHITEOUT
waitmessage 0x40
@@ -2978,14 +2980,14 @@ BattleScript_LocalBattleLostPrintWhiteOut::
BattleScript_LocalBattleLostEnd::
end2
BattleScript_CheckDomeDrew::
- jumpifbyte EQUAL, gBattleOutcome, DREW, BattleScript_LocalBattleLostEnd_
+ jumpifbyte CMP_EQUAL, gBattleOutcome, B_OUTCOME_DREW, BattleScript_LocalBattleLostEnd_
BattleScript_LocalBattleLostPrintTrainersWinText::
jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostPrintWhiteOut
- returnopponentmon1toball ATTACKER
+ returnopponentmon1toball BS_ATTACKER
waitstate
- returnopponentmon2toball ATTACKER
+ returnopponentmon2toball BS_ATTACKER
waitstate
- trainerslidein ATTACKER
+ trainerslidein BS_ATTACKER
waitstate
printstring STRINGID_TRAINER1WINTEXT
jumpifbattletype BATTLE_TYPE_x800000, BattleScript_LocalBattleLostDoTrainer2WinText
@@ -2993,23 +2995,23 @@ BattleScript_LocalBattleLostPrintTrainersWinText::
BattleScript_LocalBattleLostDoTrainer2WinText::
trainerslideout B_POSITION_OPPONENT_LEFT
waitstate
- trainerslidein GBANK_1
+ trainerslidein BS_FAINTED
waitstate
printstring STRINGID_TRAINER2WINTEXT
BattleScript_LocalBattleLostEnd_::
end2
BattleScript_82DAA0B::
- returnopponentmon1toball ATTACKER
+ returnopponentmon1toball BS_ATTACKER
waitstate
- returnopponentmon2toball ATTACKER
+ returnopponentmon2toball BS_ATTACKER
waitstate
- trainerslidein ATTACKER
+ trainerslidein BS_ATTACKER
waitstate
printstring STRINGID_TRAINER1WINTEXT
trainerslideout B_POSITION_OPPONENT_LEFT
waitstate
- trainerslidein GBANK_1
+ trainerslidein BS_FAINTED
waitstate
printstring STRINGID_TRAINER2WINTEXT
jumpifbattletype BATTLE_TYPE_RECORDED, BattleScript_82DAA31
@@ -3029,15 +3031,15 @@ BattleScript_LinkBattleWonOrLostWaitEnd::
end2
BattleScript_82DAA5C::
- playtrainerdefeatbgm ATTACKER
+ playtrainerdefeatbgm BS_ATTACKER
printstring STRINGID_BATTLEEND
waitmessage 0x40
- trainerslidein ATTACKER
+ trainerslidein BS_ATTACKER
waitstate
printstring STRINGID_TRAINER1LOSETEXT
trainerslideout B_POSITION_OPPONENT_LEFT
waitstate
- trainerslidein GBANK_1
+ trainerslidein BS_FAINTED
waitstate
printstring STRINGID_TRAINER2LOSETEXT
jumpifbattletype BATTLE_TYPE_RECORDED, BattleScript_82DAA83
@@ -3054,13 +3056,13 @@ BattleScript_FrontierTrainerBattleWon::
BattleScript_82DAAAB::
printstring STRINGID_TWOENEMIESDEFEATED
BattleScript_82DAAAE::
- trainerslidein ATTACKER
+ trainerslidein BS_ATTACKER
waitstate
printstring STRINGID_TRAINER1LOSETEXT
jumpifnotbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_82DAACB
trainerslideout B_POSITION_OPPONENT_LEFT
waitstate
- trainerslidein GBANK_1
+ trainerslidein BS_FAINTED
waitstate
printstring STRINGID_TRAINER2LOSETEXT
BattleScript_82DAACB::
@@ -3070,7 +3072,7 @@ BattleScript_82DAADA::
end2
BattleScript_SmokeBallEscape::
- playanimation ATTACKER, ANIM_SMOKEBALL_ESCAPE, NULL
+ playanimation BS_ATTACKER, B_ANIM_SMOKEBALL_ESCAPE, NULL
printstring STRINGID_PKMNFLEDUSINGITS
waitmessage 0x40
end2
@@ -3108,7 +3110,7 @@ BattleScript_PrintFullBox::
endselectionscript
BattleScript_ActionSwitch::
- hpthresholds2 ATTACKER
+ hpthresholds2 BS_ATTACKER
printstring STRINGID_RETURNMON
setbyte sDMG_MULTIPLIER, 0x2
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit
@@ -3124,20 +3126,20 @@ BattleScript_PursuitSwitchDmgLoop::
atk5F
BattleScript_DoSwitchOut::
decrementmultihit BattleScript_PursuitSwitchDmgLoop
- switchoutabilities ATTACKER
+ switchoutabilities BS_ATTACKER
waitstate
returnatktoball
waitstate
- drawpartystatussummary ATTACKER
- switchhandleorder ATTACKER, 0x1
- getswitchedmondata ATTACKER
- switchindataupdate ATTACKER
- hpthresholds ATTACKER
+ drawpartystatussummary BS_ATTACKER
+ switchhandleorder BS_ATTACKER, 0x1
+ getswitchedmondata BS_ATTACKER
+ switchindataupdate BS_ATTACKER
+ hpthresholds BS_ATTACKER
printstring STRINGID_SWITCHINMON
- atk62 ATTACKER
- switchinanim ATTACKER, FALSE
+ atk62 BS_ATTACKER
+ switchinanim BS_ATTACKER, FALSE
waitstate
- switchineffects ATTACKER
+ switchineffects BS_ATTACKER
setbyte sMOVEEND_STATE, 0x4
moveend 0x1, 0x0
setbyte sMOVEEND_STATE, 0xF
@@ -3155,21 +3157,21 @@ BattleScript_PursuitDmgOnSwitchOut::
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
critmessage
waitmessage 0x40
resultmessage
waitmessage 0x40
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0x3
moveend 0x2, 0x6
- various4 TARGET
- jumpifbyte EQUAL, gBattleCommunication, 0x0, BattleScript_PursuitDmgOnSwitchOutRet
+ various4 BS_TARGET
+ jumpifbyte CMP_EQUAL, gBattleCommunication, 0x0, BattleScript_PursuitDmgOnSwitchOutRet
setbyte sGIVEEXP_STATE, 0x0
- getexp TARGET
+ getexp BS_TARGET
BattleScript_PursuitDmgOnSwitchOutRet::
return
@@ -3209,7 +3211,7 @@ BattleScript_LearnedNewMove::
fanfare MUS_FANFA1
printstring STRINGID_PKMNLEARNEDMOVE
waitmessage 0x40
- updatechoicemoveonlvlup ATTACKER
+ updatechoicemoveonlvlup BS_ATTACKER
goto BattleScript_TryLearnMoveLoop
BattleScript_LearnMoveReturn::
return
@@ -3217,31 +3219,31 @@ BattleScript_LearnMoveReturn::
BattleScript_RainContinuesOrEnds::
printfromtable gRainContinuesStringIds
waitmessage 0x40
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_RainContinuesOrEndsEnd
- playanimation ATTACKER, ANIM_RAIN_CONTINUES, NULL
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_RainContinuesOrEndsEnd
+ playanimation BS_ATTACKER, B_ANIM_RAIN_CONTINUES, NULL
BattleScript_RainContinuesOrEndsEnd::
end2
BattleScript_DamagingWeatherContinues::
printfromtable gSandStormHailContinuesStringIds
waitmessage 0x40
- playanimation2 ATTACKER, sANIM_ARG1, NULL
+ playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL
setbyte gBattleCommunication, 0x0
BattleScript_DamagingWeatherLoop::
copyarraywithindex gBattlerAttacker, gBattleTurnOrder, gBattleCommunication, 0x1
weatherdamage
- jumpifword EQUAL, gBattleMoveDamage, 0x0, BattleScript_DamagingWeatherLoopIncrement
+ jumpifword CMP_EQUAL, gBattleMoveDamage, 0x0, BattleScript_DamagingWeatherLoopIncrement
printfromtable gSandStormHailDmgStringIds
waitmessage 0x40
orword gHitMarker, HITMARKER_x20 | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 | HITMARKER_GRUDGE
effectivenesssound
- hitanimation ATTACKER
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
- tryfaintmon ATTACKER, FALSE, NULL
+ hitanimation BS_ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ tryfaintmon BS_ATTACKER, FALSE, NULL
atk24 BattleScript_DamagingWeatherLoopIncrement
BattleScript_DamagingWeatherLoopIncrement::
- jumpifbyte NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamagingWeatherContinuesEnd
+ jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamagingWeatherContinuesEnd
addbyte gBattleCommunication, 0x1
jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamagingWeatherLoop
BattleScript_DamagingWeatherContinuesEnd::
@@ -3256,7 +3258,7 @@ BattleScript_SandStormHailEnds::
BattleScript_SunlightContinues::
printstring STRINGID_SUNLIGHTSTRONG
waitmessage 0x40
- playanimation ATTACKER, ANIM_SUN_CONTINUES, NULL
+ playanimation BS_ATTACKER, B_ANIM_SUN_CONTINUES, NULL
end2
BattleScript_SunlightFaded::
@@ -3267,7 +3269,7 @@ BattleScript_SunlightFaded::
BattleScript_OverworldWeatherStarts::
printfromtable gWeatherContinuesStringIds
waitmessage 0x40
- playanimation2 ATTACKER, sANIM_ARG1, NULL
+ playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL
end3
BattleScript_SideStatusWoreOff::
@@ -3288,12 +3290,12 @@ BattleScript_SafeguardEnds::
end2
BattleScript_LeechSeedTurnDrain::
- playanimation ATTACKER, ANIM_LEECH_SEED_DRAIN, sANIM_ARG1
+ playanimation BS_ATTACKER, B_ANIM_LEECH_SEED_DRAIN, sB_ANIM_ARG1
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
copyword gBattleMoveDamage, gHpDealt
- jumpifability ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze
+ jumpifability BS_ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze
manipulatedamage ATK80_DMG_CHANGE_SIGN
setbyte cMULTISTRING_CHOOSER, 0x3
goto BattleScript_LeechSeedTurnPrintAndUpdateHp
@@ -3301,12 +3303,12 @@ BattleScript_LeechSeedTurnPrintLiquidOoze::
setbyte cMULTISTRING_CHOOSER, 0x4
BattleScript_LeechSeedTurnPrintAndUpdateHp::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
printfromtable gLeechSeedStringIds
waitmessage 0x40
- tryfaintmon ATTACKER, FALSE, NULL
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
end2
BattleScript_BideStoringEnergy::
@@ -3316,8 +3318,8 @@ BattleScript_BideStoringEnergy::
BattleScript_BideAttack::
attackcanceler
- setmoveeffect EFFECT_CHARGING
- clearstatusfromeffect ATTACKER
+ setmoveeffect MOVE_EFFECT_CHARGING
+ clearstatusfromeffect BS_ATTACKER
printstring STRINGID_PKMNUNLEASHEDENERGY
waitmessage 0x40
accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE
@@ -3325,23 +3327,23 @@ BattleScript_BideAttack::
bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
copyword gBattleMoveDamage, sBIDE_DMG
adjustsetdamage
- setbyte sANIM_TURN, 0x1
+ setbyte sB_ANIM_TURN, 0x1
attackanimation
waitanimation
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
resultmessage
waitmessage 0x40
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_BideNoEnergyToAttack::
attackcanceler
- setmoveeffect EFFECT_CHARGING
- clearstatusfromeffect ATTACKER
+ setmoveeffect MOVE_EFFECT_CHARGING
+ clearstatusfromeffect BS_ATTACKER
printstring STRINGID_PKMNUNLEASHEDENERGY
waitmessage 0x40
goto BattleScript_ButItFailed
@@ -3349,20 +3351,20 @@ BattleScript_BideNoEnergyToAttack::
BattleScript_SuccessForceOut::
attackanimation
waitanimation
- switchoutabilities TARGET
- returntoball TARGET
+ switchoutabilities BS_TARGET
+ returntoball BS_TARGET
waitstate
jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_TrainerBattleForceOut
- setoutcomeonteleport ATTACKER
+ setoutcomeonteleport BS_ATTACKER
finishaction
BattleScript_TrainerBattleForceOut::
- getswitchedmondata TARGET
- switchindataupdate TARGET
- switchinanim TARGET, FALSE
+ getswitchedmondata BS_TARGET
+ switchindataupdate BS_TARGET
+ switchinanim BS_TARGET, FALSE
waitstate
printstring STRINGID_PKMNWASDRAGGEDOUT
- switchineffects TARGET
+ switchineffects BS_TARGET
goto BattleScript_MoveEnd
BattleScript_MistProtected::
@@ -3406,55 +3408,55 @@ BattleScript_DestinyBondTakesLife::
printstring STRINGID_PKMNTOOKFOE
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
- tryfaintmon ATTACKER, FALSE, NULL
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ tryfaintmon BS_ATTACKER, FALSE, NULL
return
BattleScript_SpikesOnAttacker::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
call BattleScript_PrintHurtBySpikes
- tryfaintmon ATTACKER, FALSE, NULL
- tryfaintmon ATTACKER, TRUE, BattleScript_SpikesOnAttackerFainted
+ tryfaintmon BS_ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, TRUE, BattleScript_SpikesOnAttackerFainted
return
BattleScript_SpikesOnAttackerFainted::
setbyte sGIVEEXP_STATE, 0x0
- getexp ATTACKER
+ getexp BS_ATTACKER
setbyte sMOVEEND_STATE, 0x0
moveend 0x0, 0x0
goto BattleScript_HandleFaintedMon
BattleScript_SpikesOnTarget::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
call BattleScript_PrintHurtBySpikes
- tryfaintmon TARGET, FALSE, NULL
- tryfaintmon TARGET, TRUE, BattleScript_SpikesOnTargetFainted
+ tryfaintmon BS_TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, TRUE, BattleScript_SpikesOnTargetFainted
return
BattleScript_SpikesOnTargetFainted::
setbyte sGIVEEXP_STATE, 0x0
- getexp TARGET
+ getexp BS_TARGET
setbyte sMOVEEND_STATE, 0x0
moveend 0x0, 0x0
goto BattleScript_HandleFaintedMon
-BattleScript_SpikesOngBank1::
+BattleScript_SpikesOnFaintedBattler::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate GBANK_1
- datahpupdate GBANK_1
+ healthbarupdate BS_FAINTED
+ datahpupdate BS_FAINTED
call BattleScript_PrintHurtBySpikes
- tryfaintmon GBANK_1, FALSE, NULL
- tryfaintmon GBANK_1, TRUE, BattleScript_SpikesOngBank1Fainted
+ tryfaintmon BS_FAINTED, FALSE, NULL
+ tryfaintmon BS_FAINTED, TRUE, BattleScript_SpikesOnFaintedBattlerFainted
return
-BattleScript_SpikesOngBank1Fainted::
+BattleScript_SpikesOnFaintedBattlerFainted::
setbyte sGIVEEXP_STATE, 0x0
- getexp GBANK_1
+ getexp BS_FAINTED
setbyte sMOVEEND_STATE, 0x0
moveend 0x0, 0x0
goto BattleScript_HandleFaintedMon
@@ -3468,9 +3470,9 @@ BattleScript_PerishSongTakesLife::
printstring STRINGID_PKMNPERISHCOUNTFELL
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
- tryfaintmon ATTACKER, FALSE, NULL
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ tryfaintmon BS_ATTACKER, FALSE, NULL
end2
BattleScript_PerishSongCountGoesDown::
@@ -3479,36 +3481,36 @@ BattleScript_PerishSongCountGoesDown::
end2
BattleScript_AllStatsUp::
- jumpifstat ATTACKER, LESS_THAN, ATK, 0xC, BattleScript_AllStatsUpAtk
- jumpifstat ATTACKER, LESS_THAN, DEF, 0xC, BattleScript_AllStatsUpAtk
- jumpifstat ATTACKER, LESS_THAN, SPEED, 0xC, BattleScript_AllStatsUpAtk
- jumpifstat ATTACKER, LESS_THAN, SPATK, 0xC, BattleScript_AllStatsUpAtk
- jumpifstat ATTACKER, EQUAL, SPDEF, 0xC, BattleScript_AllStatsUpRet
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, 0xC, BattleScript_AllStatsUpAtk
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, 0xC, BattleScript_AllStatsUpAtk
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, 0xC, BattleScript_AllStatsUpAtk
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, 0xC, BattleScript_AllStatsUpAtk
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0xC, BattleScript_AllStatsUpRet
BattleScript_AllStatsUpAtk::
setbyte sFIELD_1B, 0x0
- playstatchangeanimation ATTACKER, 0x3E, 0x0
- setstatchanger ATK, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_AllStatsUpDef
+ playstatchangeanimation BS_ATTACKER, 0x3E, 0x0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AllStatsUpDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AllStatsUpDef::
- setstatchanger DEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_AllStatsUpSpeed
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AllStatsUpSpeed
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AllStatsUpSpeed::
- setstatchanger SPEED, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_AllStatsUpSpAtk
+ setstatchanger STAT_SPEED, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AllStatsUpSpAtk
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AllStatsUpSpAtk::
- setstatchanger SPATK, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_AllStatsUpSpDef
+ setstatchanger STAT_SPATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AllStatsUpSpDef
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AllStatsUpSpDef::
- setstatchanger SPDEF, 1, FALSE
- statbuffchange AFFECTS_USER | 0x1, BattleScript_AllStatsUpRet
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AllStatsUpRet
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_AllStatsUpRet::
@@ -3537,27 +3539,27 @@ BattleScript_SpikesFree::
BattleScript_MonTookFutureAttack::
printstring STRINGID_PKMNTOOKATTACK
waitmessage 0x40
- jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_CheckDoomDesireMiss
+ jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_CheckDoomDesireMiss
accuracycheck BattleScript_FutureAttackMiss, MOVE_FUTURE_SIGHT
goto BattleScript_FutureAttackAnimate
BattleScript_CheckDoomDesireMiss::
accuracycheck BattleScript_FutureAttackMiss, MOVE_DOOM_DESIRE
BattleScript_FutureAttackAnimate::
adjustnormaldamage2
- jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_FutureHitAnimDoomDesire
- playanimation ATTACKER, ANIM_FUTURE_SIGHT_HIT, NULL
+ jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_FutureHitAnimDoomDesire
+ playanimation BS_ATTACKER, B_ANIM_FUTURE_SIGHT_HIT, NULL
goto BattleScript_DoFutureAttackHit
BattleScript_FutureHitAnimDoomDesire::
- playanimation ATTACKER, ANIM_DOOM_DESIRE_HIT, NULL
+ playanimation BS_ATTACKER, B_ANIM_DOOM_DESIRE_HIT, NULL
BattleScript_DoFutureAttackHit::
effectivenesssound
- hitanimation TARGET
+ hitanimation BS_TARGET
waitstate
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
resultmessage
waitmessage 0x40
- tryfaintmon TARGET, FALSE, NULL
+ tryfaintmon BS_TARGET, FALSE, NULL
atk24 BattleScript_FutureAttackEnd
BattleScript_FutureAttackEnd::
setbyte sMOVEEND_STATE, 0x0
@@ -3619,12 +3621,12 @@ BattleScript_SelectingNotAllowedMoveTauntInPalace::
BattleScript_WishComesTrue::
trywish 0x1, BattleScript_WishButFullHp
- playanimation TARGET, ANIM_WISH_HEAL, NULL
+ playanimation BS_TARGET, B_ANIM_WISH_HEAL, NULL
printstring STRINGID_PKMNWISHCAMETRUE
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
printstring STRINGID_PKMNREGAINEDHEALTH
waitmessage 0x40
end2
@@ -3638,12 +3640,12 @@ BattleScript_WishButFullHp::
end2
BattleScript_IngrainTurnHeal::
- playanimation ATTACKER, ANIM_INGRAIN_HEAL, NULL
+ playanimation BS_ATTACKER, B_ANIM_INGRAIN_HEAL, NULL
printstring STRINGID_PKMNABSORBEDNUTRIENTS
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
end2
BattleScript_PrintMonIsRooted::
@@ -3654,25 +3656,25 @@ BattleScript_PrintMonIsRooted::
BattleScript_AtkDefDown::
setbyte sFIELD_1B, 0x0
- playstatchangeanimation ATTACKER, 0x6, 0xD
- playstatchangeanimation ATTACKER, 0x2, 0x9
- setstatchanger ATK, 1, TRUE
- statbuffchange AFFECTS_USER | CERTAIN | 0x1, BattleScript_82DB144
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB144
+ playstatchangeanimation BS_ATTACKER, 0x6, 0xD
+ playstatchangeanimation BS_ATTACKER, 0x2, 0x9
+ setstatchanger STAT_ATK, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | 0x1, BattleScript_82DB144
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB144
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_82DB144::
- playstatchangeanimation ATTACKER, 0x4, 0x9
- setstatchanger DEF, 1, TRUE
- statbuffchange AFFECTS_USER | CERTAIN | 0x1, BattleScript_82DB167
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB167
+ playstatchangeanimation BS_ATTACKER, 0x4, 0x9
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | 0x1, BattleScript_82DB167
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB167
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_82DB167::
return
BattleScript_KnockedOff::
- playanimation TARGET, ANIM_ITEM_KNOCKOFF, NULL
+ playanimation BS_TARGET, B_ANIM_ITEM_KNOCKOFF, NULL
printstring STRINGID_PKMNKNOCKEDOFF
waitmessage 0x40
return
@@ -3702,14 +3704,14 @@ BattleScript_MagicCoatBounce::
printstring STRINGID_PKMNMOVEBOUNCED
waitmessage 0x40
orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000
- setmagiccoattarget ATTACKER
+ setmagiccoattarget BS_ATTACKER
return
BattleScript_SnatchedMove::
attackstring
ppreduce
snatchsetbanks
- playanimation TARGET, ANIM_SNATCH_MOVE, NULL
+ playanimation BS_TARGET, B_ANIM_SNATCH_MOVE, NULL
printstring STRINGID_PKMNSNATCHEDMOVE
waitmessage 0x40
orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000
@@ -3728,10 +3730,10 @@ BattleScript_OneHitKOMsg::
BattleScript_SAtkDown2::
setbyte sFIELD_1B, 0x0
- playstatchangeanimation ATTACKER, 0x10, 0xB
- setstatchanger SPATK, 2, TRUE
- statbuffchange AFFECTS_USER | CERTAIN | 0x1, BattleScript_82DB1FE
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB1FE
+ playstatchangeanimation BS_ATTACKER, 0x10, 0xB
+ setstatchanger STAT_SPATK, 2, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | 0x1, BattleScript_82DB1FE
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB1FE
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_82DB1FE::
@@ -3740,7 +3742,7 @@ BattleScript_82DB1FE::
BattleScript_FocusPunchSetUp::
printstring STRINGID_EMPTYSTRING3
waitmessage 0x1
- playanimation ATTACKER, ANIM_x14, NULL
+ playanimation BS_ATTACKER, B_ANIM_x14, NULL
printstring STRINGID_PKMNTIGHTENINGFOCUS
waitmessage 0x40
end2
@@ -3748,32 +3750,32 @@ BattleScript_FocusPunchSetUp::
BattleScript_MoveUsedIsAsleep::
printstring STRINGID_PKMNFASTASLEEP
waitmessage 0x40
- statusanimation ATTACKER
+ statusanimation BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_MoveUsedWokeUp::
bicword gHitMarker, HITMARKER_x10
printfromtable gWokeUpStringIds
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
return
BattleScript_MonWokeUpInUproar::
printstring STRINGID_PKMNWOKEUPINUPROAR
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
end2
BattleScript_PoisonTurnDmg::
printstring STRINGID_PKMNHURTBYPOISON
waitmessage 0x40
BattleScript_DoStatusTurnDmg::
- statusanimation ATTACKER
+ statusanimation BS_ATTACKER
BattleScript_DoTurnDmg::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
- tryfaintmon ATTACKER, FALSE, NULL
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ tryfaintmon BS_ATTACKER, FALSE, NULL
atk24 BattleScript_DoTurnDmgEnd
BattleScript_DoTurnDmgEnd::
end2
@@ -3786,26 +3788,26 @@ BattleScript_BurnTurnDmg::
BattleScript_MoveUsedIsFrozen::
printstring STRINGID_PKMNISFROZEN
waitmessage 0x40
- statusanimation ATTACKER
+ statusanimation BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_MoveUsedUnfroze::
printfromtable gGotDefrostedStringIds
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
return
BattleScript_DefrostedViaFireMove::
printstring STRINGID_PKMNWASDEFROSTED
waitmessage 0x40
- updatestatusicon TARGET
+ updatestatusicon BS_TARGET
return
BattleScript_MoveUsedIsParalyzed::
printstring STRINGID_PKMNISPARALYZED
waitmessage 0x40
- statusanimation ATTACKER
- cancelmultiturnmoves ATTACKER
+ statusanimation BS_ATTACKER
+ cancelmultiturnmoves BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_MoveUsedFlinched::
@@ -3819,7 +3821,7 @@ BattleScript_PrintUproarOverTurns::
end2
BattleScript_ThrashConfuses::
- chosenstatus2animation ATTACKER, STATUS2_CONFUSION
+ chosenstatus2animation BS_ATTACKER, STATUS2_CONFUSION
printstring STRINGID_PKMNFATIGUECONFUSION
waitmessage 0x40
end2
@@ -3827,22 +3829,22 @@ BattleScript_ThrashConfuses::
BattleScript_MoveUsedIsConfused::
printstring STRINGID_PKMNISCONFUSED
waitmessage 0x40
- status2animation ATTACKER, STATUS2_CONFUSION
- jumpifbyte EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_MoveUsedIsConfusedRet
+ status2animation BS_ATTACKER, STATUS2_CONFUSION
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x0, BattleScript_MoveUsedIsConfusedRet
BattleScript_DoSelfConfusionDmg::
- cancelmultiturnmoves ATTACKER
+ cancelmultiturnmoves BS_ATTACKER
adjustnormaldamage2
printstring STRINGID_ITHURTCONFUSION
waitmessage 0x40
effectivenesssound
- hitanimation ATTACKER
+ hitanimation BS_ATTACKER
waitstate
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
resultmessage
waitmessage 0x40
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
goto BattleScript_MoveEnd
BattleScript_MoveUsedIsConfusedRet::
return
@@ -3858,7 +3860,7 @@ BattleScript_PrintPayDayMoneyString::
return
BattleScript_WrapTurnDmg::
- playanimation ATTACKER, ANIM_TURN_TRAP, sANIM_ARG1
+ playanimation BS_ATTACKER, B_ANIM_TURN_TRAP, sB_ANIM_ARG1
printstring STRINGID_PKMNHURTBY
waitmessage 0x40
goto BattleScript_DoTurnDmg
@@ -3871,7 +3873,7 @@ BattleScript_WrapEnds::
BattleScript_MoveUsedIsInLove::
printstring STRINGID_PKMNINLOVE
waitmessage 0x40
- status2animation ATTACKER, STATUS2_INFATUATION
+ status2animation BS_ATTACKER, STATUS2_INFATUATION
return
BattleScript_MoveUsedIsParalyzedCantAttack::
@@ -3882,59 +3884,59 @@ BattleScript_MoveUsedIsParalyzedCantAttack::
BattleScript_NightmareTurnDmg::
printstring STRINGID_PKMNLOCKEDINNIGHTMARE
waitmessage 0x40
- status2animation ATTACKER, STATUS2_NIGHTMARE
+ status2animation BS_ATTACKER, STATUS2_NIGHTMARE
goto BattleScript_DoTurnDmg
BattleScript_CurseTurnDmg::
printstring STRINGID_PKMNAFFLICTEDBYCURSE
waitmessage 0x40
- status2animation ATTACKER, STATUS2_CURSED
+ status2animation BS_ATTACKER, STATUS2_CURSED
goto BattleScript_DoTurnDmg
BattleScript_TargetPRLZHeal::
printstring STRINGID_PKMNHEALEDPARALYSIS
waitmessage 0x40
- updatestatusicon TARGET
+ updatestatusicon BS_TARGET
return
BattleScript_MoveEffectSleep::
- statusanimation EFFECT_BANK
+ statusanimation BS_EFFECT_BATTLER
printfromtable gFellAsleepStringIds
waitmessage 0x40
BattleScript_UpdateEffectStatusIconRet::
- updatestatusicon EFFECT_BANK
+ updatestatusicon BS_EFFECT_BATTLER
waitstate
return
BattleScript_YawnMakesAsleep::
- statusanimation EFFECT_BANK
+ statusanimation BS_EFFECT_BATTLER
printstring STRINGID_PKMNFELLASLEEP
waitmessage 0x40
- updatestatusicon EFFECT_BANK
+ updatestatusicon BS_EFFECT_BATTLER
waitstate
- makevisible EFFECT_BANK
+ makevisible BS_EFFECT_BATTLER
end2
BattleScript_MoveEffectPoison::
- statusanimation EFFECT_BANK
+ statusanimation BS_EFFECT_BATTLER
printfromtable gGotPoisonedStringIds
waitmessage 0x40
goto BattleScript_UpdateEffectStatusIconRet
BattleScript_MoveEffectBurn::
- statusanimation EFFECT_BANK
+ statusanimation BS_EFFECT_BATTLER
printfromtable gGotBurnedStringIds
waitmessage 0x40
goto BattleScript_UpdateEffectStatusIconRet
BattleScript_MoveEffectFreeze::
- statusanimation EFFECT_BANK
+ statusanimation BS_EFFECT_BATTLER
printfromtable gGotFrozenStringIds
waitmessage 0x40
goto BattleScript_UpdateEffectStatusIconRet
BattleScript_MoveEffectParalysis::
- statusanimation EFFECT_BANK
+ statusanimation BS_EFFECT_BATTLER
printfromtable gGotParalyzedStringIds
waitmessage 0x40
goto BattleScript_UpdateEffectStatusIconRet
@@ -3945,7 +3947,7 @@ BattleScript_MoveEffectUproar::
return
BattleScript_MoveEffectToxic::
- statusanimation EFFECT_BANK
+ statusanimation BS_EFFECT_BATTLER
printstring STRINGID_PKMNBADLYPOISONED
waitmessage 0x40
goto BattleScript_UpdateEffectStatusIconRet
@@ -3961,26 +3963,26 @@ BattleScript_MoveEffectWrap::
return
BattleScript_MoveEffectConfusion::
- chosenstatus2animation EFFECT_BANK, STATUS2_CONFUSION
+ chosenstatus2animation BS_EFFECT_BATTLER, STATUS2_CONFUSION
printstring STRINGID_PKMNWASCONFUSED
waitmessage 0x40
return
BattleScript_MoveEffectRecoil33::
jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil33
- jumpifability ATTACKER, ABILITY_ROCK_HEAD, BattleScript_Recoil33End
+ jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_Recoil33End
BattleScript_DoRecoil33::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
printstring STRINGID_PKMNHITWITHRECOIL
waitmessage 0x40
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
BattleScript_Recoil33End::
return
BattleScript_ItemSteal::
- playanimation TARGET, ANIM_ITEM_STEAL, NULL
+ playanimation BS_TARGET, B_ANIM_ITEM_STEAL, NULL
printstring STRINGID_PKMNSTOLEITEM
waitmessage 0x40
return
@@ -3989,12 +3991,12 @@ BattleScript_DrizzleActivates::
pause 0x20
printstring STRINGID_PKMNMADEITRAIN
waitstate
- playanimation BANK0, ANIM_RAIN_CONTINUES, NULL
+ playanimation BS_BANK_0, B_ANIM_RAIN_CONTINUES, NULL
call BattleScript_WeatherFormChanges
end3
BattleScript_SpeedBoostActivates::
- playanimation ATTACKER, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printstring STRINGID_PKMNRAISEDSPEED
waitmessage 0x40
end3
@@ -4009,22 +4011,22 @@ BattleScript_RainDishActivates::
printstring STRINGID_PKMNSXRESTOREDHPALITTLE2
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
end3
BattleScript_SandstreamActivates::
pause 0x20
printstring STRINGID_PKMNSXWHIPPEDUPSANDSTORM
waitstate
- playanimation BANK0, ANIM_SANDSTORM_CONTINUES, NULL
+ playanimation BS_BANK_0, B_ANIM_SANDSTORM_CONTINUES, NULL
call BattleScript_WeatherFormChanges
end3
BattleScript_ShedSkinActivates::
printstring STRINGID_PKMNSXCUREDYPROBLEM
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
end3
BattleScript_WeatherFormChanges::
@@ -4054,17 +4056,17 @@ BattleScript_82DB4BE::
pause 0x20
BattleScript_82DB4C1::
setbyte gBattlerTarget, 0x0
- setstatchanger ATK, 1, TRUE
+ setstatchanger STAT_ATK, 1, TRUE
BattleScript_82DB4CD::
trygetintimidatetarget BattleScript_82DB51B
- jumpifstatus2 TARGET, STATUS2_SUBSTITUTE, BattleScript_82DB510
- jumpifability TARGET, ABILITY_CLEAR_BODY, BattleScript_82DB51C
- jumpifability TARGET, ABILITY_HYPER_CUTTER, BattleScript_82DB51C
- jumpifability TARGET, ABILITY_WHITE_SMOKE, BattleScript_82DB51C
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_82DB510
+ jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_82DB51C
+ jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_82DB51C
+ jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_82DB51C
statbuffchange 0x21, BattleScript_82DB510
- jumpifbyte GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DB510
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DB510
setgraphicalstatchangevalues
- playanimation TARGET, ANIM_STATS_CHANGE, sANIM_ARG1
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printstring STRINGID_PKMNCUTSATTACKWITH
waitmessage 0x40
BattleScript_82DB510::
@@ -4083,7 +4085,7 @@ BattleScript_DroughtActivates::
pause 0x20
printstring STRINGID_PKMNSXINTENSIFIEDSUN
waitstate
- playanimation BANK0, ANIM_SUN_CONTINUES, NULL
+ playanimation BS_BANK_0, B_ANIM_SUN_CONTINUES, NULL
call BattleScript_WeatherFormChanges
end3
@@ -4113,8 +4115,8 @@ BattleScript_MoveHPDrain::
attackstring
pause 0x20
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate TARGET
- datahpupdate TARGET
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
printstring STRINGID_PKMNRESTOREDHPUSING
waitmessage 0x40
orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
@@ -4215,15 +4217,15 @@ BattleScript_ColorChangeActivates::
BattleScript_RoughSkinActivates::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
printstring STRINGID_PKMNHURTSWITH
waitmessage 0x40
- tryfaintmon ATTACKER, FALSE, NULL
+ tryfaintmon BS_ATTACKER, FALSE, NULL
return
BattleScript_CuteCharmActivates::
- status2animation ATTACKER, STATUS2_INFATUATION
+ status2animation BS_ATTACKER, STATUS2_INFATUATION
printstring STRINGID_PKMNSXINFATUATEDY
waitmessage 0x40
return
@@ -4247,7 +4249,7 @@ BattleScript_NoItemSteal::
BattleScript_AbilityCuredStatus::
printstring STRINGID_PKMNSXCUREDITSYPROBLEM
waitmessage 0x40
- updatestatusicon SCRIPTING_BANK
+ updatestatusicon BS_SCRIPTING
return
BattleScript_82DB695::
@@ -4263,9 +4265,9 @@ BattleScript_IgnoresAndUsesRandomMove::
jumptorandomattack FALSE
BattleScript_MoveUsedLoafingAround::
- jumpifbyte NOT_EQUAL, cMULTISTRING_CHOOSER, 0x4, BattleScript_82DB6C7
+ jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, 0x4, BattleScript_82DB6C7
setbyte gBattleCommunication, 0x0
- various24 ATTACKER
+ various24 BS_ATTACKER
setbyte cMULTISTRING_CHOOSER, 0x4
BattleScript_82DB6C7::
printfromtable gInobedientStringIds
@@ -4277,7 +4279,7 @@ BattleScript_82DB6C7::
BattleScript_IgnoresAndFallsAsleep::
printstring STRINGID_PKMNBEGANTONAP
waitmessage 0x40
- setmoveeffect EFFECT_SLEEP | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_SLEEP | MOVE_EFFECT_AFFECTS_USER
seteffectprimary
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
@@ -4289,7 +4291,7 @@ BattleScript_82DB6F0::
goto BattleScript_DoSelfConfusionDmg
BattleScript_SubstituteFade::
- playanimation TARGET, ANIM_SUBSTITUTE_FADE, NULL
+ playanimation BS_TARGET, B_ANIM_SUBSTITUTE_FADE, NULL
printstring STRINGID_PKMNSUBSTITUTEFADED
return
@@ -4298,11 +4300,11 @@ BattleScript_BerryCurePrlzEnd2::
end2
BattleScript_BerryCureParRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMCUREDPARALYSIS
waitmessage 0x40
- updatestatusicon SCRIPTING_BANK
- removeitem SCRIPTING_BANK
+ updatestatusicon BS_SCRIPTING
+ removeitem BS_SCRIPTING
return
BattleScript_BerryCurePsnEnd2::
@@ -4310,11 +4312,11 @@ BattleScript_BerryCurePsnEnd2::
end2
BattleScript_BerryCurePsnRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMCUREDPOISON
waitmessage 0x40
- updatestatusicon SCRIPTING_BANK
- removeitem SCRIPTING_BANK
+ updatestatusicon BS_SCRIPTING
+ removeitem BS_SCRIPTING
return
BattleScript_BerryCureBrnEnd2::
@@ -4322,11 +4324,11 @@ BattleScript_BerryCureBrnEnd2::
end2
BattleScript_BerryCureBrnRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMHEALEDBURN
waitmessage 0x40
- updatestatusicon SCRIPTING_BANK
- removeitem SCRIPTING_BANK
+ updatestatusicon BS_SCRIPTING
+ removeitem BS_SCRIPTING
return
BattleScript_BerryCureFrzEnd2::
@@ -4334,11 +4336,11 @@ BattleScript_BerryCureFrzEnd2::
end2
BattleScript_BerryCureFrzRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMDEFROSTEDIT
waitmessage 0x40
- updatestatusicon SCRIPTING_BANK
- removeitem SCRIPTING_BANK
+ updatestatusicon BS_SCRIPTING
+ removeitem BS_SCRIPTING
return
BattleScript_BerryCureSlpEnd2::
@@ -4346,11 +4348,11 @@ BattleScript_BerryCureSlpEnd2::
end2
BattleScript_BerryCureSlpRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMWOKEIT
waitmessage 0x40
- updatestatusicon SCRIPTING_BANK
- removeitem SCRIPTING_BANK
+ updatestatusicon BS_SCRIPTING
+ removeitem BS_SCRIPTING
return
BattleScript_BerryCureConfusionEnd2::
@@ -4358,10 +4360,10 @@ BattleScript_BerryCureConfusionEnd2::
end2
BattleScript_BerryCureConfusionRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMSNAPPEDOUT
waitmessage 0x40
- removeitem SCRIPTING_BANK
+ removeitem BS_SCRIPTING
return
BattleScript_BerryCureChosenStatusEnd2::
@@ -4369,11 +4371,11 @@ BattleScript_BerryCureChosenStatusEnd2::
end2
BattleScript_BerryCureChosenStatusRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printfromtable gBerryEffectStringIds
waitmessage 0x40
- updatestatusicon SCRIPTING_BANK
- removeitem SCRIPTING_BANK
+ updatestatusicon BS_SCRIPTING
+ removeitem BS_SCRIPTING
return
BattleScript_WhiteHerbEnd2::
@@ -4381,27 +4383,27 @@ BattleScript_WhiteHerbEnd2::
end2
BattleScript_WhiteHerbRet::
- playanimation SCRIPTING_BANK, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_SCRIPTING, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMRESTOREDSTATUS
waitmessage 0x40
- removeitem SCRIPTING_BANK
+ removeitem BS_SCRIPTING
return
BattleScript_ItemHealHP_RemoveItem::
- playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_ATTACKER, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMRESTOREDHEALTH
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
- removeitem ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ removeitem BS_ATTACKER
end2
BattleScript_BerryPPHealEnd2::
- playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_ATTACKER, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMRESTOREDPP
waitmessage 0x40
- removeitem ATTACKER
+ removeitem BS_ATTACKER
end2
BattleScript_ItemHealHP_End2::
@@ -4409,12 +4411,12 @@ BattleScript_ItemHealHP_End2::
end2
BattleScript_ItemHealHP_Ret::
- playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_ATTACKER, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
return
BattleScript_SelectingNotAllowedMoveChoiceItem::
@@ -4422,39 +4424,39 @@ BattleScript_SelectingNotAllowedMoveChoiceItem::
endselectionscript
BattleScript_HangedOnMsg::
- playanimation TARGET, ANIM_HANGED_ON, NULL
+ playanimation BS_TARGET, B_ANIM_HANGED_ON, NULL
printstring STRINGID_PKMNHUNGONWITHX
waitmessage 0x40
return
BattleScript_BerryConfuseHealEnd2::
- playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_ATTACKER, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNSITEMRESTOREDHEALTH
waitmessage 0x40
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
printstring STRINGID_FORXCOMMAYZ
waitmessage 0x40
- setmoveeffect EFFECT_CONFUSION | AFFECTS_USER
+ setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER
seteffectprimary
- removeitem ATTACKER
+ removeitem BS_ATTACKER
end2
BattleScript_BerryStatRaiseEnd2::
- playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
- statbuffchange AFFECTS_USER | 0x1, BattleScript_82DB85B
+ playanimation BS_ATTACKER, B_ANIM_ITEM_EFFECT, NULL
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_82DB85B
BattleScript_82DB85B::
setbyte cMULTISTRING_CHOOSER, 0x4
call BattleScript_StatUp
- removeitem ATTACKER
+ removeitem BS_ATTACKER
end2
BattleScript_BerryFocusEnergyEnd2::
- playanimation ATTACKER, ANIM_ITEM_EFFECT, NULL
+ playanimation BS_ATTACKER, B_ANIM_ITEM_EFFECT, NULL
printstring STRINGID_PKMNUSEDXTOGETPUMPED
waitmessage 0x40
- removeitem ATTACKER
+ removeitem BS_ATTACKER
end2
BattleScript_ActionSelectionItemsCantBeUsed::
@@ -4468,8 +4470,8 @@ BattleScript_82DB87D::
BattleScript_82DB881::
setbyte gBattleCommunication + 1, 0x0
BattleScript_82DB887::
- various8 ATTACKER
- jumpifbyte NOT_EQUAL, gBattleCommunication, 0x1, BattleScript_82DB89D
+ various8 BS_ATTACKER
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x1, BattleScript_82DB89D
printfromtable gStringIds_85CCF0A
waitmessage 0x40
BattleScript_82DB89D::
@@ -4480,105 +4482,105 @@ BattleScript_82DB89D::
end2
BattleScript_82DB8BE::
- waitcry ATTACKER
- various21 ATTACKER
+ waitcry BS_ATTACKER
+ various21 BS_ATTACKER
playse 0x109
pause 0x8
playse 0x109
- various14 ATTACKER
+ various14 BS_ATTACKER
various16 8
various17 8
pause 0x40
- various15 ATTACKER
- various22 ATTACKER
+ various15 BS_ATTACKER
+ various22 BS_ATTACKER
end2
BattleScript_82DB8E0::
playse SE_PINPON
- various14 ATTACKER
- various16 TARGET
- various17 TARGET
+ various14 BS_ATTACKER
+ various16 BS_TARGET
+ various17 BS_TARGET
pause 0x40
- various15 ATTACKER
+ various15 BS_ATTACKER
end2
BattleScript_82DB8F3::
makevisible 11
waitstate
- makevisible OPPONENT1
+ makevisible BS_OPPONENT1
waitstate
- various21 ATTACKER
+ various21 BS_ATTACKER
playse 0x109
pause 0x8
playse 0x109
pause 0x40
- various14 ATTACKER
- various16 ATTACKER
- various17 ATTACKER
+ various14 BS_ATTACKER
+ various16 BS_ATTACKER
+ various17 BS_ATTACKER
pause 0x40
setbyte gBattleCommunication, 0x0
- various9 ATTACKER
+ various9 BS_ATTACKER
pause 0x40
- various9 ATTACKER
- various16 EFFECT_BANK
- various17 EFFECT_BANK
- various9 ATTACKER
- various16 GBANK_1
- various17 GBANK_1
- various9 ATTACKER
+ various9 BS_ATTACKER
+ various16 BS_EFFECT_BATTLER
+ various17 BS_EFFECT_BATTLER
+ various9 BS_ATTACKER
+ various16 BS_FAINTED
+ various17 BS_FAINTED
+ various9 BS_ATTACKER
various16 0x4
various17 0x4
- various9 ATTACKER
- jumpifbyte EQUAL, gBattleCommunication + 1, 0x3, BattleScript_82DB973
- jumpifbyte EQUAL, gBattleCommunication + 1, 0x4, BattleScript_82DB992
+ various9 BS_ATTACKER
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x3, BattleScript_82DB973
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0x4, BattleScript_82DB992
various16 0x5
various17 0x5
- various9 ATTACKER
- various15 ATTACKER
+ various9 BS_ATTACKER
+ various15 BS_ATTACKER
printstring STRINGID_DEFEATEDOPPONENTBYREFEREE
waitmessage 0x40
- playfaintcry OPPONENT1
- waitcry ATTACKER
- dofaintanimation OPPONENT1
- cleareffectsonfaint OPPONENT1
- various10 ATTACKER
+ playfaintcry BS_OPPONENT1
+ waitcry BS_ATTACKER
+ dofaintanimation BS_OPPONENT1
+ cleareffectsonfaint BS_OPPONENT1
+ various10 BS_ATTACKER
end2
BattleScript_82DB973::
various16 0x6
various17 0x6
- various9 ATTACKER
- various15 ATTACKER
+ various9 BS_ATTACKER
+ various15 BS_ATTACKER
printstring STRINGID_LOSTTOOPPONENTBYREFEREE
waitmessage 0x40
playfaintcry 11
- waitcry ATTACKER
+ waitcry BS_ATTACKER
dofaintanimation 11
cleareffectsonfaint 11
- various11 ATTACKER
+ various11 BS_ATTACKER
end2
BattleScript_82DB992::
- various16 BANK0
- various17 BANK0
- various9 ATTACKER
- various15 ATTACKER
+ various16 BS_BANK_0
+ various17 BS_BANK_0
+ various9 BS_ATTACKER
+ various15 BS_ATTACKER
printstring STRINGID_TIEDOPPONENTBYREFEREE
waitmessage 0x40
playfaintcry 11
- waitcry ATTACKER
+ waitcry BS_ATTACKER
dofaintanimation 11
cleareffectsonfaint 11
- playfaintcry OPPONENT1
- waitcry ATTACKER
- dofaintanimation OPPONENT1
- cleareffectsonfaint OPPONENT1
- various12 ATTACKER
+ playfaintcry BS_OPPONENT1
+ waitcry BS_ATTACKER
+ dofaintanimation BS_OPPONENT1
+ cleareffectsonfaint BS_OPPONENT1
+ various12 BS_ATTACKER
end2
BattleScript_AskIfWantsToForfeitMatch::
printselectionstring STRINGID_QUESTIONFORFEITMATCH
- forfeityesnobox ATTACKER
+ forfeityesnobox BS_ATTACKER
endselectionscript
BattleScript_PrintPlayerForfeited::
diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s
index 9cd6a4d7d..8020d7c5c 100644
--- a/data/battle_scripts_2.s
+++ b/data/battle_scripts_2.s
@@ -1,11 +1,12 @@
+#include "constants/battle.h"
+#include "constants/battle_script_commands.h"
+#include "constants/battle_anim.h"
+#include "constants/battle_string_ids.h"
#include "constants/items.h"
#include "constants/songs.h"
.include "asm/macros.inc"
.include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
- .include "constants/battle_constants.inc"
- .include "constants/battle_script_constants.inc"
- .include "constants/battle_text.inc"
.section script_data, "aw", %progbits
@@ -46,7 +47,7 @@ gBattlescriptsForSafariActions:: @ 82DBD58
.4byte BattleScript_82DBEE3
BattleScript_BallThrow::
- jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
+ jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
printstring STRINGID_PLAYERUSEDITEM
handleballthrow
@@ -56,11 +57,11 @@ BattleScript_BallThrowByWally::
BattleScript_SafariBallThrow::
printstring STRINGID_PLAYERUSEDITEM
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
handleballthrow
BattleScript_SuccessBallThrow::
- jumpifhalfword EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo
+ jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo
incrementgamestat 0xB
BattleScript_PrintCaughtMonInfo::
printstring STRINGID_GOTCHAPKMNCAUGHT
@@ -81,22 +82,22 @@ BattleScript_TryNicknameCaughtMon::
BattleScript_GiveCaughtMonEnd::
givecaughtmon
BattleScript_SuccessBallThrowEnd::
- setbyte gBattleOutcome, CAUGHT
+ setbyte gBattleOutcome, B_OUTCOME_CAUGHT
finishturn
BattleScript_WallyBallThrow::
printstring STRINGID_GOTCHAPKMNCAUGHT2
- setbyte gBattleOutcome, CAUGHT
+ setbyte gBattleOutcome, B_OUTCOME_CAUGHT
finishturn
BattleScript_ShakeBallThrow::
printfromtable gBallEscapeStringIds
waitmessage 0x40
- jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd
- jumpifbyte NOT_EQUAL, gNumSafariBalls, 0x0, BattleScript_ShakeBallThrowEnd
+ jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd
+ jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0x0, BattleScript_ShakeBallThrowEnd
printstring STRINGID_OUTOFSAFARIBALLS
waitmessage 0x40
- setbyte gBattleOutcome, OUT_OF_BALLS
+ setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS
BattleScript_ShakeBallThrowEnd::
finishaction
@@ -121,11 +122,11 @@ BattleScript_OpponentUsesHealItem::
waitmessage 0x40
useitemonopponent
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate ATTACKER
- datahpupdate ATTACKER
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
printstring STRINGID_PKMNSITEMRESTOREDHEALTH
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
setbyte sMOVEEND_STATE, 0xF
moveend 0x1, 0x0
finishaction
@@ -139,7 +140,7 @@ BattleScript_OpponentUsesStatusCureItem::
useitemonopponent
printfromtable gTrainerItemCuredStatusStringIds
waitmessage 0x40
- updatestatusicon ATTACKER
+ updatestatusicon BS_ATTACKER
setbyte sMOVEEND_STATE, 0xF
moveend 0x1, 0x0
finishaction
@@ -172,7 +173,7 @@ BattleScript_OpponentUsesGuardSpecs::
BattleScript_RunByUsingItem::
playse SE_NIGERU
- setbyte gBattleOutcome, RAN
+ setbyte gBattleOutcome, B_OUTCOME_RAN
finishturn
BattleScript_ActionWatchesCarefully::
@@ -188,7 +189,7 @@ BattleScript_ActionGetNear::
BattleScript_ActionThrowPokeblock::
printstring STRINGID_THREWPOKEBLOCKATPKMN
waitmessage 0x40
- playanimation ATTACKER, ANIM_x4, NULL
+ playanimation BS_ATTACKER, B_ANIM_x4, NULL
printfromtable gSafariPokeblockResultStringIds
waitmessage 0x40
end2
@@ -198,7 +199,7 @@ BattleScript_82DBEE3::
waitmessage 0x40
returnatktoball
waitstate
- trainerslidein TARGET
+ trainerslidein BS_TARGET
waitstate
printstring STRINGID_YOUTHROWABALLNOWRIGHT
waitmessage 0x40
diff --git a/data/battle_tower.s b/data/battle_tower.s
index 9ef2c2d44..2cc0aa639 100644
--- a/data/battle_tower.s
+++ b/data/battle_tower.s
@@ -3,6 +3,7 @@
#include "constants/moves.h"
#include "constants/species.h"
#include "constants/trainers.h"
+#include "constants/pokemon.h"
.include "asm/macros.inc"
.include "constants/constants.inc"
diff --git a/data/data2b.s b/data/data2b.s
index 4d3126215..b65087d7a 100644
--- a/data/data2b.s
+++ b/data/data2b.s
@@ -2,6 +2,7 @@
#include "constants/moves.h"
#include "constants/species.h"
#include "constants/trainers.h"
+#include "constants/pokemon.h"
.include "asm/macros.inc"
.include "constants/constants.inc"
@@ -21,31 +22,31 @@ gUnknown_082FF2B8:: @ 82FF2B8
.align 2
gUnknown_082FF3A8:: @ 82FF3A8
- .byte 0x00, 0x80, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0x88, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0x90, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0x98, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
+ obj_frame_tiles gHeap + 0x8000, 0x800
+ obj_frame_tiles gHeap + 0x8800, 0x800
+ obj_frame_tiles gHeap + 0x9000, 0x800
+ obj_frame_tiles gHeap + 0x9800, 0x800
.align 2
gUnknown_082FF3C8:: @ 82FF3C8
- .byte 0x00, 0xa0, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xa8, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xb0, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xb8, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
+ obj_frame_tiles gHeap + 0xA000, 0x800
+ obj_frame_tiles gHeap + 0xA800, 0x800
+ obj_frame_tiles gHeap + 0xB000, 0x800
+ obj_frame_tiles gHeap + 0xB800, 0x800
.align 2
gUnknown_082FF3E8:: @ 82FF3E8
- .byte 0x00, 0xc0, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xc8, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xd0, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xd8, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
+ obj_frame_tiles gHeap + 0xC000, 0x800
+ obj_frame_tiles gHeap + 0xC800, 0x800
+ obj_frame_tiles gHeap + 0xD000, 0x800
+ obj_frame_tiles gHeap + 0xD800, 0x800
.align 2
gUnknown_082FF408:: @ 82FF408
- .byte 0x00, 0xe0, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xe8, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xf0, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
- .byte 0x00, 0xf8, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00
+ obj_frame_tiles gHeap + 0xE000, 0x800
+ obj_frame_tiles gHeap + 0xE800, 0x800
+ obj_frame_tiles gHeap + 0xF000, 0x800
+ obj_frame_tiles gHeap + 0xF800, 0x800
.align 2
gUnknown_082FF428:: @ 82FF428
diff --git a/data/data2c.s b/data/data2c.s
index 69254d366..8d134ccb2 100644
--- a/data/data2c.s
+++ b/data/data2c.s
@@ -2,6 +2,7 @@
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/species.h"
+#include "constants/pokemon.h"
.include "asm/macros.inc"
.include "constants/constants.inc"
diff --git a/data/data2e.s b/data/data2e.s
deleted file mode 100644
index 597d53067..000000000
--- a/data/data2e.s
+++ /dev/null
@@ -1,151 +0,0 @@
-#include "constants/abilities.h"
-#include "constants/items.h"
-#include "constants/moves.h"
-#include "constants/species.h"
-#include "constants/trainers.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-
-@ 83299EC
- .include "data/graphics/pokemon/front_anim_ids_table.inc"
-
-@ 8329B87
- .include "data/graphics/pokemon/animation_delay_table.inc"
-
- .align 1
-gUnknown_08329D22:: @ 8329D22
-@ Masks for getting PP Up count, also PP Max values
- .byte 0x03, 0x0c, 0x30, 0xc0
-
- .align 1
-gUnknown_08329D26:: @ 8329D26
-@ Masks for setting PP Up count
- .byte 0xfc, 0xf3, 0xcf, 0x3f
-
- .align 1
-gUnknown_08329D2A:: @ 8329D2A
-@ Values added to PP Up count
- .byte 0x01, 0x04, 0x10, 0x40
-
- .align 1
-gStatStageRatios:: @ 8329D2E
- .byte 0x0a, 0x28
- .byte 0x0a, 0x23
- .byte 0x0a, 0x1e
- .byte 0x0a, 0x19
- .byte 0x0a, 0x14
- .byte 0x0a, 0x0f
- .byte 0x0a, 0x0a
- .byte 0x0f, 0x0a
- .byte 0x14, 0x0a
- .byte 0x19, 0x0a
- .byte 0x1e, 0x0a
- .byte 0x23, 0x0a
- .byte 0x28, 0x0a
-
- .align 1
-gUnknown_08329D48:: @ 8329D48
- .2byte 0x0032, 0x005f, 0x005a, 0x00b4, 0x005f, 0x005a
-
- .align 1
-gUnknown_08329D54:: @ 8329D54
- .2byte 0x0003, 0x000a, 0x001b, 0x002b, 0x001e, 0x0043, 0x0042, 0x0019
- .2byte 0x0012, 0x000c, 0x001c, 0x0047, 0x001f, 0x0036, 0x0002, 0x0014
-
- .align 1
-gHoldEffectToType:: @ 8329D74
- .byte 0x1f, 0x06
- .byte 0x2a, 0x08
- .byte 0x2e, 0x04
- .byte 0x2f, 0x05
- .byte 0x30, 0x0c
- .byte 0x31, 0x11
- .byte 0x32, 0x01
- .byte 0x33, 0x0d
- .byte 0x34, 0x0b
- .byte 0x35, 0x02
- .byte 0x36, 0x03
- .byte 0x37, 0x0f
- .byte 0x38, 0x07
- .byte 0x39, 0x0e
- .byte 0x3a, 0x0a
- .byte 0x3b, 0x10
- .byte 0x3c, 0x00
- .byte 0x00, 0x00
-
- .align 2
-gUnknown_08329D98:: @ 8329D98
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF3A8, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACA8, NULL, gUnknown_082FF3C8, gUnknown_082FF694, oac_poke_opponent
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF3E8, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACA8, NULL, gUnknown_082FF408, gUnknown_082FF694, oac_poke_opponent
-
- .align 2
-gUnknown_08329DF8:: @ 8329DF8
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF428, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF448, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF468, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF490, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF4B8, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF4D8, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF4F8, gUnknown_082FF618, sub_8039BB4
- spr_template 0xffff, 0x0000, gUnknown_0831ACB0, NULL, gUnknown_082FF518, gUnknown_082FF618, sub_8039BB4
-
-gSecretBaseTrainerClasses:: @ 8329EB8
- .byte FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_CAMPER, FACILITY_CLASS_COOLTRAINER_1
- .byte FACILITY_CLASS_LASS, FACILITY_CLASS_SCHOOL_KID_2, FACILITY_CLASS_LADY, FACILITY_CLASS_PICNICKER, FACILITY_CLASS_COOLTRAINER_2
-
-gUnknown_08329EC2:: @ 8329EC2
- .byte 0x1a, 0x1b, 0x1c, 0x1d, 0x1f, 0x1e
-
-gUnknown_08329EC8:: @ 8329EC8
- .byte 1, 1, 3, 2, 4, 6
-
-gUnknown_08329ECE:: @ 8329ECE
-@ Happiness deltas
- .byte 0x05, 0x03, 0x02
- .byte 0x05, 0x03, 0x02
- .byte 0x01, 0x01, 0x00
- .byte 0x03, 0x02, 0x01
- .byte 0x01, 0x01, 0x00
- .byte 0x01, 0x01, 0x01
- .byte 0xff, 0xff, 0xff
- .byte 0xfb, 0xfb, 0xf6
- .byte 0xfb, 0xfb, 0xf6
-
- .align 1
-gHMMoves:: @ 8329EEA
- .2byte MOVE_CUT
- .2byte MOVE_FLY
- .2byte MOVE_SURF
- .2byte MOVE_STRENGTH
- .2byte MOVE_FLASH
- .2byte MOVE_ROCK_SMASH
- .2byte MOVE_WATERFALL
- .2byte MOVE_DIVE
- .2byte 0xffff
-
- .align 1
-gAlteringCaveWildMonHeldItems:: @ 8329EFC
- .2byte 0, ITEM_NONE
- .2byte SPECIES_MAREEP, ITEM_GANLON_BERRY
- .2byte SPECIES_PINECO, ITEM_APICOT_BERRY
- .2byte SPECIES_HOUNDOUR, ITEM_BIG_MUSHROOM
- .2byte SPECIES_TEDDIURSA, ITEM_PETAYA_BERRY
- .2byte SPECIES_AIPOM, ITEM_BERRY_JUICE
- .2byte SPECIES_SHUCKLE, ITEM_BERRY_JUICE
- .2byte SPECIES_STANTLER, ITEM_PETAYA_BERRY
- .2byte SPECIES_SMEARGLE, ITEM_SALAC_BERRY
-
- .align 2
-gUnknown_08329F20:: @ 8329F20
- .byte 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_08329F28:: @ 8329F28
- spr_template 0xffff, 0xffff, gUnknown_08329F20, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
diff --git a/data/graphics/pokemon/animation_delay_table.inc b/data/graphics/pokemon/animation_delay_table.inc
deleted file mode 100644
index be517649b..000000000
--- a/data/graphics/pokemon/animation_delay_table.inc
+++ /dev/null
@@ -1,412 +0,0 @@
-gMonAnimationDelayTable:: @ 8329B87
- .byte 0x00 @ SPECIES_BULBASAUR
- .byte 0x00 @ SPECIES_IVYSAUR
- .byte 0x00 @ SPECIES_VENUSAUR
- .byte 0x00 @ SPECIES_CHARMANDER
- .byte 0x00 @ SPECIES_CHARMELEON
- .byte 0x00 @ SPECIES_CHARIZARD
- .byte 0x00 @ SPECIES_SQUIRTLE
- .byte 0x00 @ SPECIES_WARTORTLE
- .byte 0x32 @ SPECIES_BLASTOISE
- .byte 0x00 @ SPECIES_CATERPIE
- .byte 0x00 @ SPECIES_METAPOD
- .byte 0x00 @ SPECIES_BUTTERFREE
- .byte 0x0a @ SPECIES_WEEDLE
- .byte 0x14 @ SPECIES_KAKUNA
- .byte 0x23 @ SPECIES_BEEDRILL
- .byte 0x00 @ SPECIES_PIDGEY
- .byte 0x19 @ SPECIES_PIDGEOTTO
- .byte 0x00 @ SPECIES_PIDGEOT
- .byte 0x00 @ SPECIES_RATTATA
- .byte 0x00 @ SPECIES_RATICATE
- .byte 0x00 @ SPECIES_SPEAROW
- .byte 0x02 @ SPECIES_FEAROW
- .byte 0x1e @ SPECIES_EKANS
- .byte 0x00 @ SPECIES_ARBOK
- .byte 0x00 @ SPECIES_PIKACHU
- .byte 0x00 @ SPECIES_RAICHU
- .byte 0x00 @ SPECIES_SANDSHREW
- .byte 0x00 @ SPECIES_SANDSLASH
- .byte 0x1c @ SPECIES_NIDORAN_F
- .byte 0x00 @ SPECIES_NIDORINA
- .byte 0x00 @ SPECIES_NIDOQUEEN
- .byte 0x00 @ SPECIES_NIDORAN_M
- .byte 0x00 @ SPECIES_NIDORINO
- .byte 0x19 @ SPECIES_NIDOKING
- .byte 0x00 @ SPECIES_CLEFAIRY
- .byte 0x00 @ SPECIES_CLEFABLE
- .byte 0x00 @ SPECIES_VULPIX
- .byte 0x00 @ SPECIES_NINETALES
- .byte 0x00 @ SPECIES_JIGGLYPUFF
- .byte 0x00 @ SPECIES_WIGGLYTUFF
- .byte 0x00 @ SPECIES_ZUBAT
- .byte 0x00 @ SPECIES_GOLBAT
- .byte 0x00 @ SPECIES_ODDISH
- .byte 0x00 @ SPECIES_GLOOM
- .byte 0x00 @ SPECIES_VILEPLUME
- .byte 0x0a @ SPECIES_PARAS
- .byte 0x2d @ SPECIES_PARASECT
- .byte 0x14 @ SPECIES_VENONAT
- .byte 0x00 @ SPECIES_VENOMOTH
- .byte 0x19 @ SPECIES_DIGLETT
- .byte 0x23 @ SPECIES_DUGTRIO
- .byte 0x28 @ SPECIES_MEOWTH
- .byte 0x14 @ SPECIES_PERSIAN
- .byte 0x00 @ SPECIES_PSYDUCK
- .byte 0x00 @ SPECIES_GOLDUCK
- .byte 0x14 @ SPECIES_MANKEY
- .byte 0x00 @ SPECIES_PRIMEAPE
- .byte 0x1e @ SPECIES_GROWLITHE
- .byte 0x28 @ SPECIES_ARCANINE
- .byte 0x00 @ SPECIES_POLIWAG
- .byte 0x05 @ SPECIES_POLIWHIRL
- .byte 0x00 @ SPECIES_POLIWRATH
- .byte 0x00 @ SPECIES_ABRA
- .byte 0x00 @ SPECIES_KADABRA
- .byte 0x00 @ SPECIES_ALAKAZAM
- .byte 0x00 @ SPECIES_MACHOP
- .byte 0x00 @ SPECIES_MACHOKE
- .byte 0x00 @ SPECIES_MACHAMP
- .byte 0x00 @ SPECIES_BELLSPROUT
- .byte 0x03 @ SPECIES_WEEPINBELL
- .byte 0x00 @ SPECIES_VICTREEBEL
- .byte 0x00 @ SPECIES_TENTACOOL
- .byte 0x00 @ SPECIES_TENTACRUEL
- .byte 0x00 @ SPECIES_GEODUDE
- .byte 0x00 @ SPECIES_GRAVELER
- .byte 0x00 @ SPECIES_GOLEM
- .byte 0x00 @ SPECIES_PONYTA
- .byte 0x00 @ SPECIES_RAPIDASH
- .byte 0x00 @ SPECIES_SLOWPOKE
- .byte 0x00 @ SPECIES_SLOWBRO
- .byte 0x00 @ SPECIES_MAGNEMITE
- .byte 0x00 @ SPECIES_MAGNETON
- .byte 0x00 @ SPECIES_FARFETCHD
- .byte 0x00 @ SPECIES_DODUO
- .byte 0x00 @ SPECIES_DODRIO
- .byte 0x00 @ SPECIES_SEEL
- .byte 0x00 @ SPECIES_DEWGONG
- .byte 0x00 @ SPECIES_GRIMER
- .byte 0x2d @ SPECIES_MUK
- .byte 0x14 @ SPECIES_SHELLDER
- .byte 0x00 @ SPECIES_CLOYSTER
- .byte 0x00 @ SPECIES_GASTLY
- .byte 0x17 @ SPECIES_HAUNTER
- .byte 0x00 @ SPECIES_GENGAR
- .byte 0x00 @ SPECIES_ONIX
- .byte 0x30 @ SPECIES_DROWZEE
- .byte 0x28 @ SPECIES_HYPNO
- .byte 0x00 @ SPECIES_KRABBY
- .byte 0x00 @ SPECIES_KINGLER
- .byte 0x00 @ SPECIES_VOLTORB
- .byte 0x00 @ SPECIES_ELECTRODE
- .byte 0x00 @ SPECIES_EXEGGCUTE
- .byte 0x00 @ SPECIES_EXEGGUTOR
- .byte 0x00 @ SPECIES_CUBONE
- .byte 0x00 @ SPECIES_MAROWAK
- .byte 0x00 @ SPECIES_HITMONLEE
- .byte 0x19 @ SPECIES_HITMONCHAN
- .byte 0x00 @ SPECIES_LICKITUNG
- .byte 0x00 @ SPECIES_KOFFING
- .byte 0x00 @ SPECIES_WEEZING
- .byte 0x00 @ SPECIES_RHYHORN
- .byte 0x00 @ SPECIES_RHYDON
- .byte 0x00 @ SPECIES_CHANSEY
- .byte 0x00 @ SPECIES_TANGELA
- .byte 0x00 @ SPECIES_KANGASKHAN
- .byte 0x00 @ SPECIES_HORSEA
- .byte 0x00 @ SPECIES_SEADRA
- .byte 0x00 @ SPECIES_GOLDEEN
- .byte 0x00 @ SPECIES_SEAKING
- .byte 0x00 @ SPECIES_STARYU
- .byte 0x00 @ SPECIES_STARMIE
- .byte 0x00 @ SPECIES_MR_MIME
- .byte 0x0a @ SPECIES_SCYTHER
- .byte 0x00 @ SPECIES_JYNX
- .byte 0x00 @ SPECIES_ELECTABUZZ
- .byte 0x00 @ SPECIES_MAGMAR
- .byte 0x00 @ SPECIES_PINSIR
- .byte 0x0a @ SPECIES_TAUROS
- .byte 0x00 @ SPECIES_MAGIKARP
- .byte 0x00 @ SPECIES_GYARADOS
- .byte 0x00 @ SPECIES_LAPRAS
- .byte 0x00 @ SPECIES_DITTO
- .byte 0x00 @ SPECIES_EEVEE
- .byte 0x00 @ SPECIES_VAPOREON
- .byte 0x00 @ SPECIES_JOLTEON
- .byte 0x00 @ SPECIES_FLAREON
- .byte 0x00 @ SPECIES_PORYGON
- .byte 0x00 @ SPECIES_OMANYTE
- .byte 0x00 @ SPECIES_OMASTAR
- .byte 0x00 @ SPECIES_KABUTO
- .byte 0x00 @ SPECIES_KABUTOPS
- .byte 0x00 @ SPECIES_AERODACTYL
- .byte 0x00 @ SPECIES_SNORLAX
- .byte 0x00 @ SPECIES_ARTICUNO
- .byte 0x00 @ SPECIES_ZAPDOS
- .byte 0x00 @ SPECIES_MOLTRES
- .byte 0x00 @ SPECIES_DRATINI
- .byte 0x00 @ SPECIES_DRAGONAIR
- .byte 0x00 @ SPECIES_DRAGONITE
- .byte 0x00 @ SPECIES_MEWTWO
- .byte 0x00 @ SPECIES_MEW
- .byte 0x00 @ SPECIES_CHIKORITA
- .byte 0x00 @ SPECIES_BAYLEEF
- .byte 0x00 @ SPECIES_MEGANIUM
- .byte 0x00 @ SPECIES_CYNDAQUIL
- .byte 0x00 @ SPECIES_QUILAVA
- .byte 0x14 @ SPECIES_TYPHLOSION
- .byte 0x00 @ SPECIES_TOTODILE
- .byte 0x00 @ SPECIES_CROCONAW
- .byte 0x05 @ SPECIES_FERALIGATR
- .byte 0x00 @ SPECIES_SENTRET
- .byte 0x00 @ SPECIES_FURRET
- .byte 0x00 @ SPECIES_HOOTHOOT
- .byte 0x00 @ SPECIES_NOCTOWL
- .byte 0x00 @ SPECIES_LEDYBA
- .byte 0x00 @ SPECIES_LEDIAN
- .byte 0x00 @ SPECIES_SPINARAK
- .byte 0x00 @ SPECIES_ARIADOS
- .byte 0x00 @ SPECIES_CROBAT
- .byte 0x00 @ SPECIES_CHINCHOU
- .byte 0x00 @ SPECIES_LANTURN
- .byte 0x00 @ SPECIES_PICHU
- .byte 0x00 @ SPECIES_CLEFFA
- .byte 0x00 @ SPECIES_IGGLYBUFF
- .byte 0x00 @ SPECIES_TOGEPI
- .byte 0x00 @ SPECIES_TOGETIC
- .byte 0x1e @ SPECIES_NATU
- .byte 0x00 @ SPECIES_XATU
- .byte 0x32 @ SPECIES_MAREEP
- .byte 0x00 @ SPECIES_FLAAFFY
- .byte 0x0a @ SPECIES_AMPHAROS
- .byte 0x00 @ SPECIES_BELLOSSOM
- .byte 0x00 @ SPECIES_MARILL
- .byte 0x00 @ SPECIES_AZUMARILL
- .byte 0x00 @ SPECIES_SUDOWOODO
- .byte 0x28 @ SPECIES_POLITOED
- .byte 0x00 @ SPECIES_HOPPIP
- .byte 0x00 @ SPECIES_SKIPLOOM
- .byte 0x00 @ SPECIES_JUMPLUFF
- .byte 0x00 @ SPECIES_AIPOM
- .byte 0x00 @ SPECIES_SUNKERN
- .byte 0x00 @ SPECIES_SUNFLORA
- .byte 0x00 @ SPECIES_YANMA
- .byte 0x00 @ SPECIES_WOOPER
- .byte 0x00 @ SPECIES_QUAGSIRE
- .byte 0x00 @ SPECIES_ESPEON
- .byte 0x00 @ SPECIES_UMBREON
- .byte 0x00 @ SPECIES_MURKROW
- .byte 0x00 @ SPECIES_SLOWKING
- .byte 0x00 @ SPECIES_MISDREAVUS
- .byte 0x00 @ SPECIES_UNOWN
- .byte 0x00 @ SPECIES_WOBBUFFET
- .byte 0x00 @ SPECIES_GIRAFARIG
- .byte 0x00 @ SPECIES_PINECO
- .byte 0x00 @ SPECIES_FORRETRESS
- .byte 0x0a @ SPECIES_DUNSPARCE
- .byte 0x00 @ SPECIES_GLIGAR
- .byte 0x2d @ SPECIES_STEELIX
- .byte 0x00 @ SPECIES_SNUBBULL
- .byte 0x00 @ SPECIES_GRANBULL
- .byte 0x27 @ SPECIES_QWILFISH
- .byte 0x13 @ SPECIES_SCIZOR
- .byte 0x00 @ SPECIES_SHUCKLE
- .byte 0x00 @ SPECIES_HERACROSS
- .byte 0x00 @ SPECIES_SNEASEL
- .byte 0x00 @ SPECIES_TEDDIURSA
- .byte 0x00 @ SPECIES_URSARING
- .byte 0x00 @ SPECIES_SLUGMA
- .byte 0x00 @ SPECIES_MAGCARGO
- .byte 0x00 @ SPECIES_SWINUB
- .byte 0x00 @ SPECIES_PILOSWINE
- .byte 0x00 @ SPECIES_CORSOLA
- .byte 0x00 @ SPECIES_REMORAID
- .byte 0x14 @ SPECIES_OCTILLERY
- .byte 0x00 @ SPECIES_DELIBIRD
- .byte 0x00 @ SPECIES_MANTINE
- .byte 0x00 @ SPECIES_SKARMORY
- .byte 0x00 @ SPECIES_HOUNDOUR
- .byte 0x00 @ SPECIES_HOUNDOOM
- .byte 0x00 @ SPECIES_KINGDRA
- .byte 0x00 @ SPECIES_PHANPY
- .byte 0x00 @ SPECIES_DONPHAN
- .byte 0x00 @ SPECIES_PORYGON2
- .byte 0x00 @ SPECIES_STANTLER
- .byte 0x00 @ SPECIES_SMEARGLE
- .byte 0x00 @ SPECIES_TYROGUE
- .byte 0x00 @ SPECIES_HITMONTOP
- .byte 0x28 @ SPECIES_SMOOCHUM
- .byte 0x00 @ SPECIES_ELEKID
- .byte 0x00 @ SPECIES_MAGBY
- .byte 0x00 @ SPECIES_MILTANK
- .byte 0x00 @ SPECIES_BLISSEY
- .byte 0x00 @ SPECIES_RAIKOU
- .byte 0x00 @ SPECIES_ENTEI
- .byte 0x00 @ SPECIES_SUICUNE
- .byte 0x00 @ SPECIES_LARVITAR
- .byte 0x00 @ SPECIES_PUPITAR
- .byte 0x0a @ SPECIES_TYRANITAR
- .byte 0x14 @ SPECIES_LUGIA
- .byte 0x00 @ SPECIES_HO_OH
- .byte 0x00 @ SPECIES_CELEBI
- .byte 0x00 @ 252
- .byte 0x00 @ 253
- .byte 0x00 @ 254
- .byte 0x00 @ 255
- .byte 0x00 @ 256
- .byte 0x00 @ 257
- .byte 0x00 @ 258
- .byte 0x00 @ 259
- .byte 0x00 @ 260
- .byte 0x00 @ 261
- .byte 0x00 @ 262
- .byte 0x00 @ 263
- .byte 0x00 @ 264
- .byte 0x00 @ 265
- .byte 0x00 @ 266
- .byte 0x00 @ 267
- .byte 0x00 @ 268
- .byte 0x00 @ 269
- .byte 0x00 @ 270
- .byte 0x00 @ 271
- .byte 0x00 @ 272
- .byte 0x00 @ 273
- .byte 0x00 @ 274
- .byte 0x00 @ 275
- .byte 0x00 @ 276
- .byte 0x00 @ SPECIES_TREECKO
- .byte 0x00 @ SPECIES_GROVYLE
- .byte 0x00 @ SPECIES_SCEPTILE
- .byte 0x00 @ SPECIES_TORCHIC
- .byte 0x00 @ SPECIES_COMBUSKEN
- .byte 0x00 @ SPECIES_BLAZIKEN
- .byte 0x00 @ SPECIES_MUDKIP
- .byte 0x00 @ SPECIES_MARSHTOMP
- .byte 0x00 @ SPECIES_SWAMPERT
- .byte 0x00 @ SPECIES_POOCHYENA
- .byte 0x00 @ SPECIES_MIGHTYENA
- .byte 0x00 @ SPECIES_ZIGZAGOON
- .byte 0x00 @ SPECIES_LINOONE
- .byte 0x00 @ SPECIES_WURMPLE
- .byte 0x00 @ SPECIES_SILCOON
- .byte 0x00 @ SPECIES_BEAUTIFLY
- .byte 0x00 @ SPECIES_CASCOON
- .byte 0x00 @ SPECIES_DUSTOX
- .byte 0x00 @ SPECIES_LOTAD
- .byte 0x00 @ SPECIES_LOMBRE
- .byte 0x00 @ SPECIES_LUDICOLO
- .byte 0x00 @ SPECIES_SEEDOT
- .byte 0x00 @ SPECIES_NUZLEAF
- .byte 0x00 @ SPECIES_SHIFTRY
- .byte 0x00 @ SPECIES_NINCADA
- .byte 0x00 @ SPECIES_NINJASK
- .byte 0x00 @ SPECIES_SHEDINJA
- .byte 0x00 @ SPECIES_TAILLOW
- .byte 0x00 @ SPECIES_SWELLOW
- .byte 0x00 @ SPECIES_SHROOMISH
- .byte 0x00 @ SPECIES_BRELOOM
- .byte 0x00 @ SPECIES_SPINDA
- .byte 0x00 @ SPECIES_WINGULL
- .byte 0x00 @ SPECIES_PELIPPER
- .byte 0x00 @ SPECIES_SURSKIT
- .byte 0x00 @ SPECIES_MASQUERAIN
- .byte 0x00 @ SPECIES_WAILMER
- .byte 0x0a @ SPECIES_WAILORD
- .byte 0x00 @ SPECIES_SKITTY
- .byte 0x00 @ SPECIES_DELCATTY
- .byte 0x1e @ SPECIES_KECLEON
- .byte 0x00 @ SPECIES_BALTOY
- .byte 0x00 @ SPECIES_CLAYDOL
- .byte 0x00 @ SPECIES_NOSEPASS
- .byte 0x00 @ SPECIES_TORKOAL
- .byte 0x00 @ SPECIES_SABLEYE
- .byte 0x00 @ SPECIES_BARBOACH
- .byte 0x00 @ SPECIES_WHISCASH
- .byte 0x00 @ SPECIES_LUVDISC
- .byte 0x00 @ SPECIES_CORPHISH
- .byte 0x00 @ SPECIES_CRAWDAUNT
- .byte 0x00 @ SPECIES_FEEBAS
- .byte 0x2d @ SPECIES_MILOTIC
- .byte 0x00 @ SPECIES_CARVANHA
- .byte 0x00 @ SPECIES_SHARPEDO
- .byte 0x00 @ SPECIES_TRAPINCH
- .byte 0x00 @ SPECIES_VIBRAVA
- .byte 0x00 @ SPECIES_FLYGON
- .byte 0x00 @ SPECIES_MAKUHITA
- .byte 0x00 @ SPECIES_HARIYAMA
- .byte 0x00 @ SPECIES_ELECTRIKE
- .byte 0x00 @ SPECIES_MANECTRIC
- .byte 0x00 @ SPECIES_NUMEL
- .byte 0x00 @ SPECIES_CAMERUPT
- .byte 0x0f @ SPECIES_SPHEAL
- .byte 0x00 @ SPECIES_SEALEO
- .byte 0x00 @ SPECIES_WALREIN
- .byte 0x00 @ SPECIES_CACNEA
- .byte 0x00 @ SPECIES_CACTURNE
- .byte 0x14 @ SPECIES_SNORUNT
- .byte 0x00 @ SPECIES_GLALIE
- .byte 0x00 @ SPECIES_LUNATONE
- .byte 0x00 @ SPECIES_SOLROCK
- .byte 0x00 @ SPECIES_AZURILL
- .byte 0x00 @ SPECIES_SPOINK
- .byte 0x0f @ SPECIES_GRUMPIG
- .byte 0x00 @ SPECIES_PLUSLE
- .byte 0x00 @ SPECIES_MINUN
- .byte 0x00 @ SPECIES_MAWILE
- .byte 0x00 @ SPECIES_MEDITITE
- .byte 0x00 @ SPECIES_MEDICHAM
- .byte 0x00 @ SPECIES_SWABLU
- .byte 0x00 @ SPECIES_ALTARIA
- .byte 0x0f @ SPECIES_WYNAUT
- .byte 0x00 @ SPECIES_DUSKULL
- .byte 0x1e @ SPECIES_DUSCLOPS
- .byte 0x00 @ SPECIES_ROSELIA
- .byte 0x00 @ SPECIES_SLAKOTH
- .byte 0x00 @ SPECIES_VIGOROTH
- .byte 0x00 @ SPECIES_SLAKING
- .byte 0x00 @ SPECIES_GULPIN
- .byte 0x00 @ SPECIES_SWALOT
- .byte 0x00 @ SPECIES_TROPIUS
- .byte 0x00 @ SPECIES_WHISMUR
- .byte 0x00 @ SPECIES_LOUDRED
- .byte 0x00 @ SPECIES_EXPLOUD
- .byte 0x00 @ SPECIES_CLAMPERL
- .byte 0x00 @ SPECIES_HUNTAIL
- .byte 0x00 @ SPECIES_GOREBYSS
- .byte 0x2d @ SPECIES_ABSOL
- .byte 0x00 @ SPECIES_SHUPPET
- .byte 0x00 @ SPECIES_BANETTE
- .byte 0x00 @ SPECIES_SEVIPER
- .byte 0x00 @ SPECIES_ZANGOOSE
- .byte 0x00 @ SPECIES_RELICANTH
- .byte 0x00 @ SPECIES_ARON
- .byte 0x00 @ SPECIES_LAIRON
- .byte 0x00 @ SPECIES_AGGRON
- .byte 0x00 @ SPECIES_CASTFORM
- .byte 0x00 @ SPECIES_VOLBEAT
- .byte 0x00 @ SPECIES_ILLUMISE
- .byte 0x00 @ SPECIES_LILEEP
- .byte 0x00 @ SPECIES_CRADILY
- .byte 0x00 @ SPECIES_ANORITH
- .byte 0x00 @ SPECIES_ARMALDO
- .byte 0x00 @ SPECIES_RALTS
- .byte 0x00 @ SPECIES_KIRLIA
- .byte 0x00 @ SPECIES_GARDEVOIR
- .byte 0x00 @ SPECIES_BAGON
- .byte 0x00 @ SPECIES_SHELGON
- .byte 0x46 @ SPECIES_SALAMENCE
- .byte 0x00 @ SPECIES_BELDUM
- .byte 0x00 @ SPECIES_METANG
- .byte 0x00 @ SPECIES_METAGROSS
- .byte 0x00 @ SPECIES_REGIROCK
- .byte 0x00 @ SPECIES_REGICE
- .byte 0x00 @ SPECIES_REGISTEEL
- .byte 0x3c @ SPECIES_KYOGRE
- .byte 0x00 @ SPECIES_GROUDON
- .byte 0x3c @ SPECIES_RAYQUAZA
- .byte 0x00 @ SPECIES_LATIAS
- .byte 0x00 @ SPECIES_LATIOS
- .byte 0x00 @ SPECIES_JIRACHI
- .byte 0x00 @ SPECIES_DEOXYS
- .byte 0x00 @ SPECIES_CHIMECHO
diff --git a/data/graphics/pokemon/front_anim_ids_table.inc b/data/graphics/pokemon/front_anim_ids_table.inc
deleted file mode 100644
index 4f225348a..000000000
--- a/data/graphics/pokemon/front_anim_ids_table.inc
+++ /dev/null
@@ -1,412 +0,0 @@
-gMonFrontAnimIdsTable:: @ 83299EC
- .byte 0x06 @ SPECIES_BULBASAUR
- .byte 0x17 @ SPECIES_IVYSAUR
- .byte 0x2f @ SPECIES_VENUSAUR
- .byte 0x52 @ SPECIES_CHARMANDER
- .byte 0x25 @ SPECIES_CHARMELEON
- .byte 0x10 @ SPECIES_CHARIZARD
- .byte 0x0b @ SPECIES_SQUIRTLE
- .byte 0x13 @ SPECIES_WARTORTLE
- .byte 0x19 @ SPECIES_BLASTOISE
- .byte 0x0b @ SPECIES_CATERPIE
- .byte 0x0b @ SPECIES_METAPOD
- .byte 0x1d @ SPECIES_BUTTERFREE
- .byte 0x46 @ SPECIES_WEEDLE
- .byte 0x20 @ SPECIES_KAKUNA
- .byte 0x02 @ SPECIES_BEEDRILL
- .byte 0x47 @ SPECIES_PIDGEY
- .byte 0x17 @ SPECIES_PIDGEOTTO
- .byte 0x29 @ SPECIES_PIDGEOT
- .byte 0x43 @ SPECIES_RATTATA
- .byte 0x2b @ SPECIES_RATICATE
- .byte 0x18 @ SPECIES_SPEAROW
- .byte 0x2b @ SPECIES_FEAROW
- .byte 0x16 @ SPECIES_EKANS
- .byte 0x17 @ SPECIES_ARBOK
- .byte 0x2c @ SPECIES_PIKACHU
- .byte 0x17 @ SPECIES_RAICHU
- .byte 0x2d @ SPECIES_SANDSHREW
- .byte 0x17 @ SPECIES_SANDSLASH
- .byte 0x00 @ SPECIES_NIDORAN_F
- .byte 0x17 @ SPECIES_NIDORINA
- .byte 0x0f @ SPECIES_NIDOQUEEN
- .byte 0x09 @ SPECIES_NIDORAN_M
- .byte 0x13 @ SPECIES_NIDORINO
- .byte 0x0f @ SPECIES_NIDOKING
- .byte 0x00 @ SPECIES_CLEFAIRY
- .byte 0x4a @ SPECIES_CLEFABLE
- .byte 0x17 @ SPECIES_VULPIX
- .byte 0x10 @ SPECIES_NINETALES
- .byte 0x48 @ SPECIES_JIGGLYPUFF
- .byte 0x31 @ SPECIES_WIGGLYTUFF
- .byte 0x00 @ SPECIES_ZUBAT
- .byte 0x1d @ SPECIES_GOLBAT
- .byte 0x00 @ SPECIES_ODDISH
- .byte 0x45 @ SPECIES_GLOOM
- .byte 0x49 @ SPECIES_VILEPLUME
- .byte 0x46 @ SPECIES_PARAS
- .byte 0x0f @ SPECIES_PARASECT
- .byte 0x06 @ SPECIES_VENONAT
- .byte 0x4b @ SPECIES_VENOMOTH
- .byte 0x10 @ SPECIES_DIGLETT
- .byte 0x4c @ SPECIES_DUGTRIO
- .byte 0x52 @ SPECIES_MEOWTH
- .byte 0x17 @ SPECIES_PERSIAN
- .byte 0x06 @ SPECIES_PSYDUCK
- .byte 0x4c @ SPECIES_GOLDUCK
- .byte 0x32 @ SPECIES_MANKEY
- .byte 0x48 @ SPECIES_PRIMEAPE
- .byte 0x25 @ SPECIES_GROWLITHE
- .byte 0x02 @ SPECIES_ARCANINE
- .byte 0x00 @ SPECIES_POLIWAG
- .byte 0x32 @ SPECIES_POLIWHIRL
- .byte 0x19 @ SPECIES_POLIWRATH
- .byte 0x31 @ SPECIES_ABRA
- .byte 0x09 @ SPECIES_KADABRA
- .byte 0x17 @ SPECIES_ALAKAZAM
- .byte 0x00 @ SPECIES_MACHOP
- .byte 0x10 @ SPECIES_MACHOKE
- .byte 0x31 @ SPECIES_MACHAMP
- .byte 0x17 @ SPECIES_BELLSPROUT
- .byte 0x0d @ SPECIES_WEEPINBELL
- .byte 0x32 @ SPECIES_VICTREEBEL
- .byte 0x00 @ SPECIES_TENTACOOL
- .byte 0x00 @ SPECIES_TENTACRUEL
- .byte 0x48 @ SPECIES_GEODUDE
- .byte 0x48 @ SPECIES_GRAVELER
- .byte 0x2f @ SPECIES_GOLEM
- .byte 0x20 @ SPECIES_PONYTA
- .byte 0x11 @ SPECIES_RAPIDASH
- .byte 0x45 @ SPECIES_SLOWPOKE
- .byte 0x0b @ SPECIES_SLOWBRO
- .byte 0x54 @ SPECIES_MAGNEMITE
- .byte 0x2c @ SPECIES_MAGNETON
- .byte 0x48 @ SPECIES_FARFETCHD
- .byte 0x4c @ SPECIES_DODUO
- .byte 0x41 @ SPECIES_DODRIO
- .byte 0x0b @ SPECIES_SEEL
- .byte 0x45 @ SPECIES_DEWGONG
- .byte 0x46 @ SPECIES_GRIMER
- .byte 0x30 @ SPECIES_MUK
- .byte 0x12 @ SPECIES_SHELLDER
- .byte 0x1d @ SPECIES_CLOYSTER
- .byte 0x15 @ SPECIES_GASTLY
- .byte 0x35 @ SPECIES_HAUNTER
- .byte 0x3a @ SPECIES_GENGAR
- .byte 0x43 @ SPECIES_ONIX
- .byte 0x4f @ SPECIES_DROWZEE
- .byte 0x09 @ SPECIES_HYPNO
- .byte 0x03 @ SPECIES_KRABBY
- .byte 0x4b @ SPECIES_KINGLER
- .byte 0x00 @ SPECIES_VOLTORB
- .byte 0x00 @ SPECIES_ELECTRODE
- .byte 0x46 @ SPECIES_EXEGGCUTE
- .byte 0x32 @ SPECIES_EXEGGUTOR
- .byte 0x48 @ SPECIES_CUBONE
- .byte 0x05 @ SPECIES_MAROWAK
- .byte 0x16 @ SPECIES_HITMONLEE
- .byte 0x09 @ SPECIES_HITMONCHAN
- .byte 0x45 @ SPECIES_LICKITUNG
- .byte 0x13 @ SPECIES_KOFFING
- .byte 0x04 @ SPECIES_WEEZING
- .byte 0x10 @ SPECIES_RHYHORN
- .byte 0x13 @ SPECIES_RHYDON
- .byte 0x45 @ SPECIES_CHANSEY
- .byte 0x48 @ SPECIES_TANGELA
- .byte 0x17 @ SPECIES_KANGASKHAN
- .byte 0x12 @ SPECIES_HORSEA
- .byte 0x04 @ SPECIES_SEADRA
- .byte 0x0d @ SPECIES_GOLDEEN
- .byte 0x1c @ SPECIES_SEAKING
- .byte 0x4e @ SPECIES_STARYU
- .byte 0x12 @ SPECIES_STARMIE
- .byte 0x46 @ SPECIES_MR_MIME
- .byte 0x02 @ SPECIES_SCYTHER
- .byte 0x17 @ SPECIES_JYNX
- .byte 0x2c @ SPECIES_ELECTABUZZ
- .byte 0x0f @ SPECIES_MAGMAR
- .byte 0x09 @ SPECIES_PINSIR
- .byte 0x19 @ SPECIES_TAUROS
- .byte 0x05 @ SPECIES_MAGIKARP
- .byte 0x48 @ SPECIES_GYARADOS
- .byte 0x17 @ SPECIES_LAPRAS
- .byte 0x01 @ SPECIES_DITTO
- .byte 0x17 @ SPECIES_EEVEE
- .byte 0x17 @ SPECIES_VAPOREON
- .byte 0x00 @ SPECIES_JOLTEON
- .byte 0x17 @ SPECIES_FLAREON
- .byte 0x52 @ SPECIES_PORYGON
- .byte 0x51 @ SPECIES_OMANYTE
- .byte 0x09 @ SPECIES_OMASTAR
- .byte 0x1d @ SPECIES_KABUTO
- .byte 0x0f @ SPECIES_KABUTOPS
- .byte 0x47 @ SPECIES_AERODACTYL
- .byte 0x0b @ SPECIES_SNORLAX
- .byte 0x09 @ SPECIES_ARTICUNO
- .byte 0x2c @ SPECIES_ZAPDOS
- .byte 0x45 @ SPECIES_MOLTRES
- .byte 0x00 @ SPECIES_DRATINI
- .byte 0x10 @ SPECIES_DRAGONAIR
- .byte 0x47 @ SPECIES_DRAGONITE
- .byte 0x09 @ SPECIES_MEWTWO
- .byte 0x0d @ SPECIES_MEW
- .byte 0x00 @ SPECIES_CHIKORITA
- .byte 0x00 @ SPECIES_BAYLEEF
- .byte 0x17 @ SPECIES_MEGANIUM
- .byte 0x52 @ SPECIES_CYNDAQUIL
- .byte 0x17 @ SPECIES_QUILAVA
- .byte 0x10 @ SPECIES_TYPHLOSION
- .byte 0x31 @ SPECIES_TOTODILE
- .byte 0x0f @ SPECIES_CROCONAW
- .byte 0x0f @ SPECIES_FERALIGATR
- .byte 0x00 @ SPECIES_SENTRET
- .byte 0x32 @ SPECIES_FURRET
- .byte 0x47 @ SPECIES_HOOTHOOT
- .byte 0x17 @ SPECIES_NOCTOWL
- .byte 0x52 @ SPECIES_LEDYBA
- .byte 0x47 @ SPECIES_LEDIAN
- .byte 0x4f @ SPECIES_SPINARAK
- .byte 0x0f @ SPECIES_ARIADOS
- .byte 0x00 @ SPECIES_CROBAT
- .byte 0x45 @ SPECIES_CHINCHOU
- .byte 0x51 @ SPECIES_LANTURN
- .byte 0x1e @ SPECIES_PICHU
- .byte 0x52 @ SPECIES_CLEFFA
- .byte 0x0c @ SPECIES_IGGLYBUFF
- .byte 0x0b @ SPECIES_TOGEPI
- .byte 0x00 @ SPECIES_TOGETIC
- .byte 0x31 @ SPECIES_NATU
- .byte 0x09 @ SPECIES_XATU
- .byte 0x00 @ SPECIES_MAREEP
- .byte 0x1e @ SPECIES_FLAAFFY
- .byte 0x2c @ SPECIES_AMPHAROS
- .byte 0x0b @ SPECIES_BELLOSSOM
- .byte 0x00 @ SPECIES_MARILL
- .byte 0x4a @ SPECIES_AZUMARILL
- .byte 0x46 @ SPECIES_SUDOWOODO
- .byte 0x32 @ SPECIES_POLITOED
- .byte 0x1c @ SPECIES_HOPPIP
- .byte 0x18 @ SPECIES_SKIPLOOM
- .byte 0x51 @ SPECIES_JUMPLUFF
- .byte 0x32 @ SPECIES_AIPOM
- .byte 0x52 @ SPECIES_SUNKERN
- .byte 0x00 @ SPECIES_SUNFLORA
- .byte 0x2b @ SPECIES_YANMA
- .byte 0x00 @ SPECIES_WOOPER
- .byte 0x16 @ SPECIES_QUAGSIRE
- .byte 0x09 @ SPECIES_ESPEON
- .byte 0x10 @ SPECIES_UMBREON
- .byte 0x00 @ SPECIES_MURKROW
- .byte 0x13 @ SPECIES_SLOWKING
- .byte 0x1c @ SPECIES_MISDREAVUS
- .byte 0x0a @ SPECIES_UNOWN
- .byte 0x30 @ SPECIES_WOBBUFFET
- .byte 0x1e @ SPECIES_GIRAFARIG
- .byte 0x0b @ SPECIES_PINECO
- .byte 0x10 @ SPECIES_FORRETRESS
- .byte 0x00 @ SPECIES_DUNSPARCE
- .byte 0x13 @ SPECIES_GLIGAR
- .byte 0x0f @ SPECIES_STEELIX
- .byte 0x17 @ SPECIES_SNUBBULL
- .byte 0x10 @ SPECIES_GRANBULL
- .byte 0x3a @ SPECIES_QWILFISH
- .byte 0x02 @ SPECIES_SCIZOR
- .byte 0x0b @ SPECIES_SHUCKLE
- .byte 0x41 @ SPECIES_HERACROSS
- .byte 0x16 @ SPECIES_SNEASEL
- .byte 0x17 @ SPECIES_TEDDIURSA
- .byte 0x10 @ SPECIES_URSARING
- .byte 0x17 @ SPECIES_SLUGMA
- .byte 0x17 @ SPECIES_MAGCARGO
- .byte 0x00 @ SPECIES_SWINUB
- .byte 0x0f @ SPECIES_PILOSWINE
- .byte 0x03 @ SPECIES_CORSOLA
- .byte 0x52 @ SPECIES_REMORAID
- .byte 0x17 @ SPECIES_OCTILLERY
- .byte 0x52 @ SPECIES_DELIBIRD
- .byte 0x0d @ SPECIES_MANTINE
- .byte 0x17 @ SPECIES_SKARMORY
- .byte 0x17 @ SPECIES_HOUNDOUR
- .byte 0x10 @ SPECIES_HOUNDOOM
- .byte 0x42 @ SPECIES_KINGDRA
- .byte 0x32 @ SPECIES_PHANPY
- .byte 0x19 @ SPECIES_DONPHAN
- .byte 0x00 @ SPECIES_PORYGON2
- .byte 0x00 @ SPECIES_STANTLER
- .byte 0x31 @ SPECIES_SMEARGLE
- .byte 0x16 @ SPECIES_TYROGUE
- .byte 0x02 @ SPECIES_HITMONTOP
- .byte 0x09 @ SPECIES_SMOOCHUM
- .byte 0x2c @ SPECIES_ELEKID
- .byte 0x00 @ SPECIES_MAGBY
- .byte 0x45 @ SPECIES_MILTANK
- .byte 0x00 @ SPECIES_BLISSEY
- .byte 0x2c @ SPECIES_RAIKOU
- .byte 0x09 @ SPECIES_ENTEI
- .byte 0x10 @ SPECIES_SUICUNE
- .byte 0x52 @ SPECIES_LARVITAR
- .byte 0x10 @ SPECIES_PUPITAR
- .byte 0x0f @ SPECIES_TYRANITAR
- .byte 0x3a @ SPECIES_LUGIA
- .byte 0x09 @ SPECIES_HO_OH
- .byte 0x18 @ SPECIES_CELEBI
- .byte 0x00 @ 252
- .byte 0x00 @ 253
- .byte 0x00 @ 254
- .byte 0x00 @ 255
- .byte 0x00 @ 256
- .byte 0x00 @ 257
- .byte 0x00 @ 258
- .byte 0x00 @ 259
- .byte 0x00 @ 260
- .byte 0x00 @ 261
- .byte 0x00 @ 262
- .byte 0x00 @ 263
- .byte 0x00 @ 264
- .byte 0x00 @ 265
- .byte 0x00 @ 266
- .byte 0x00 @ 267
- .byte 0x00 @ 268
- .byte 0x00 @ 269
- .byte 0x00 @ 270
- .byte 0x00 @ 271
- .byte 0x00 @ 272
- .byte 0x00 @ 273
- .byte 0x00 @ 274
- .byte 0x00 @ 275
- .byte 0x00 @ 276
- .byte 0x00 @ SPECIES_TREECKO
- .byte 0x17 @ SPECIES_GROVYLE
- .byte 0x10 @ SPECIES_SCEPTILE
- .byte 0x16 @ SPECIES_TORCHIC
- .byte 0x06 @ SPECIES_COMBUSKEN
- .byte 0x0f @ SPECIES_BLAZIKEN
- .byte 0x01 @ SPECIES_MUDKIP
- .byte 0x04 @ SPECIES_MARSHTOMP
- .byte 0x1e @ SPECIES_SWAMPERT
- .byte 0x10 @ SPECIES_POOCHYENA
- .byte 0x10 @ SPECIES_MIGHTYENA
- .byte 0x03 @ SPECIES_ZIGZAGOON
- .byte 0x09 @ SPECIES_LINOONE
- .byte 0x00 @ SPECIES_WURMPLE
- .byte 0x00 @ SPECIES_SILCOON
- .byte 0x04 @ SPECIES_BEAUTIFLY
- .byte 0x04 @ SPECIES_CASCOON
- .byte 0x06 @ SPECIES_DUSTOX
- .byte 0x00 @ SPECIES_LOTAD
- .byte 0x00 @ SPECIES_LOMBRE
- .byte 0x49 @ SPECIES_LUDICOLO
- .byte 0x05 @ SPECIES_SEEDOT
- .byte 0x00 @ SPECIES_NUZLEAF
- .byte 0x02 @ SPECIES_SHIFTRY
- .byte 0x00 @ SPECIES_NINCADA
- .byte 0x46 @ SPECIES_NINJASK
- .byte 0x1c @ SPECIES_SHEDINJA
- .byte 0x1e @ SPECIES_TAILLOW
- .byte 0x01 @ SPECIES_SWELLOW
- .byte 0x00 @ SPECIES_SHROOMISH
- .byte 0x00 @ SPECIES_BRELOOM
- .byte 0x31 @ SPECIES_SPINDA
- .byte 0x1b @ SPECIES_WINGULL
- .byte 0x1c @ SPECIES_PELIPPER
- .byte 0x00 @ SPECIES_SURSKIT
- .byte 0x00 @ SPECIES_MASQUERAIN
- .byte 0x01 @ SPECIES_WAILMER
- .byte 0x1c @ SPECIES_WAILORD
- .byte 0x00 @ SPECIES_SKITTY
- .byte 0x17 @ SPECIES_DELCATTY
- .byte 0x35 @ SPECIES_KECLEON
- .byte 0x1d @ SPECIES_BALTOY
- .byte 0x51 @ SPECIES_CLAYDOL
- .byte 0x49 @ SPECIES_NOSEPASS
- .byte 0x17 @ SPECIES_TORKOAL
- .byte 0x15 @ SPECIES_SABLEYE
- .byte 0x49 @ SPECIES_BARBOACH
- .byte 0x49 @ SPECIES_WHISCASH
- .byte 0x1d @ SPECIES_LUVDISC
- .byte 0x10 @ SPECIES_CORPHISH
- .byte 0x09 @ SPECIES_CRAWDAUNT
- .byte 0x49 @ SPECIES_FEEBAS
- .byte 0x22 @ SPECIES_MILOTIC
- .byte 0x49 @ SPECIES_CARVANHA
- .byte 0x56 @ SPECIES_SHARPEDO
- .byte 0x10 @ SPECIES_TRAPINCH
- .byte 0x0f @ SPECIES_VIBRAVA
- .byte 0x4b @ SPECIES_FLYGON
- .byte 0x0b @ SPECIES_MAKUHITA
- .byte 0x34 @ SPECIES_HARIYAMA
- .byte 0x00 @ SPECIES_ELECTRIKE
- .byte 0x00 @ SPECIES_MANECTRIC
- .byte 0x04 @ SPECIES_NUMEL
- .byte 0x10 @ SPECIES_CAMERUPT
- .byte 0x53 @ SPECIES_SPHEAL
- .byte 0x17 @ SPECIES_SEALEO
- .byte 0x0f @ SPECIES_WALREIN
- .byte 0x49 @ SPECIES_CACNEA
- .byte 0x04 @ SPECIES_CACTURNE
- .byte 0x45 @ SPECIES_SNORUNT
- .byte 0x0a @ SPECIES_GLALIE
- .byte 0x0e @ SPECIES_LUNATONE
- .byte 0x08 @ SPECIES_SOLROCK
- .byte 0x00 @ SPECIES_AZURILL
- .byte 0x56 @ SPECIES_SPOINK
- .byte 0x32 @ SPECIES_GRUMPIG
- .byte 0x00 @ SPECIES_PLUSLE
- .byte 0x01 @ SPECIES_MINUN
- .byte 0x00 @ SPECIES_MAWILE
- .byte 0x05 @ SPECIES_MEDITITE
- .byte 0x45 @ SPECIES_MEDICHAM
- .byte 0x04 @ SPECIES_SWABLU
- .byte 0x16 @ SPECIES_ALTARIA
- .byte 0x32 @ SPECIES_WYNAUT
- .byte 0x0a @ SPECIES_DUSKULL
- .byte 0x02 @ SPECIES_DUSCLOPS
- .byte 0x45 @ SPECIES_ROSELIA
- .byte 0x45 @ SPECIES_SLAKOTH
- .byte 0x31 @ SPECIES_VIGOROTH
- .byte 0x45 @ SPECIES_SLAKING
- .byte 0x00 @ SPECIES_GULPIN
- .byte 0x45 @ SPECIES_SWALOT
- .byte 0x10 @ SPECIES_TROPIUS
- .byte 0x03 @ SPECIES_WHISMUR
- .byte 0x49 @ SPECIES_LOUDRED
- .byte 0x19 @ SPECIES_EXPLOUD
- .byte 0x12 @ SPECIES_CLAMPERL
- .byte 0x09 @ SPECIES_HUNTAIL
- .byte 0x1c @ SPECIES_GOREBYSS
- .byte 0x11 @ SPECIES_ABSOL
- .byte 0x1c @ SPECIES_SHUPPET
- .byte 0x0d @ SPECIES_BANETTE
- .byte 0x17 @ SPECIES_SEVIPER
- .byte 0x09 @ SPECIES_ZANGOOSE
- .byte 0x1a @ SPECIES_RELICANTH
- .byte 0x45 @ SPECIES_ARON
- .byte 0x00 @ SPECIES_LAIRON
- .byte 0x19 @ SPECIES_AGGRON
- .byte 0x1d @ SPECIES_CASTFORM
- .byte 0x00 @ SPECIES_VOLBEAT
- .byte 0x05 @ SPECIES_ILLUMISE
- .byte 0x17 @ SPECIES_LILEEP
- .byte 0x19 @ SPECIES_CRADILY
- .byte 0x12 @ SPECIES_ANORITH
- .byte 0x10 @ SPECIES_ARMALDO
- .byte 0x45 @ SPECIES_RALTS
- .byte 0x00 @ SPECIES_KIRLIA
- .byte 0x00 @ SPECIES_GARDEVOIR
- .byte 0x19 @ SPECIES_BAGON
- .byte 0x04 @ SPECIES_SHELGON
- .byte 0x0f @ SPECIES_SALAMENCE
- .byte 0x0f @ SPECIES_BELDUM
- .byte 0x04 @ SPECIES_METANG
- .byte 0x10 @ SPECIES_METAGROSS
- .byte 0x01 @ SPECIES_REGIROCK
- .byte 0x44 @ SPECIES_REGICE
- .byte 0x09 @ SPECIES_REGISTEEL
- .byte 0x2d @ SPECIES_KYOGRE
- .byte 0x10 @ SPECIES_GROUDON
- .byte 0x0f @ SPECIES_RAYQUAZA
- .byte 0x2d @ SPECIES_LATIAS
- .byte 0x10 @ SPECIES_LATIOS
- .byte 0x0d @ SPECIES_JIRACHI
- .byte 0x1b @ SPECIES_DEOXYS
- .byte 0x1d @ SPECIES_CHIMECHO
diff --git a/data/item_menu.s b/data/item_menu.s
deleted file mode 100644
index 1b11c5e59..000000000
--- a/data/item_menu.s
+++ /dev/null
@@ -1,127 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_08613F90:: @ 8613F90
- .4byte 0x11F0, 0x1E1, 0x21DE
-
-@ possibly a struct
-gUnknown_08613F9C:: @ 8613F9C
- .4byte 0
- .4byte bag_menu_change_item_callback
- .4byte sub_81AB520
- .4byte 0
- .4byte 0x80000
- .4byte 0x7003011
-
-gUnknown_08613FB4:: @ 8613FB4
- .4byte gMenuText_Use, ItemMenu_UseOutOfBattle
- .4byte gMenuText_Toss, ItemMenu_Toss
- .4byte gMenuText_Register, ItemMenu_Register
- .4byte gMenuText_Give, ItemMenu_Give
- .4byte gText_Cancel2, ItemMenu_Cancel
- .4byte gMenuText_Use, ItemMenu_UseInBattle
- .4byte gMenuText_Check, ItemMenu_UseOutOfBattle
- .4byte gMenuText_Walk, ItemMenu_UseOutOfBattle
- .4byte gMenuText_Deselect, ItemMenu_Register
- .4byte gMenuText_CheckTag, ItemMenu_CheckTag
- .4byte gMenuText_Confirm, unknown_ItemMenu_Confirm
- .4byte gMenuText_Show, unknown_ItemMenu_Show
- .4byte gMenuText_Give2, unknown_ItemMenu_Give2
- .4byte gMenuText_Confirm, unknown_ItemMenu_Confirm2
- .4byte gText_EmptyString2, NULL
-
-gUnknown_0861402C:: @ 861402C
- .byte 0, 3, 1, 4
-
-gUnknown_08614030:: @ 8614030
- .byte 0, 2, 14, 4
-
-gUnknown_08614034:: @ 8614034
- .byte 3, 14, 1, 4
-
-gUnknown_08614038:: @ 8614038
- .byte 0, 3, 14, 4
-
-gUnknown_0861403C:: @ 861403C
- .byte 9, 14, 0, 3, 1, 4
-
-gUnknown_08614042:: @ 8614042
- .byte 5, 4
-
-gUnknown_08614044:: @ 8614044
- .byte 3, 4
-
-gUnknown_08614046:: @ 8614046
- .byte 4
-
-gUnknown_08614047:: @ 8614047
- .byte 10, 9, 14, 4
-
-gUnknown_0861404B:: @ 861404B
- .byte 11, 4
-
-gUnknown_0861404D:: @ 861404D
- .byte 12, 4
-
-gUnknown_0861404F:: @ 861404F
- .byte 13, 4
-
- .align 2
-gUnknown_08614054:: @ 8614054
- .4byte unknown_item_menu_type
- .4byte unknown_item_menu_type
- .4byte item_menu_type_2
- .4byte display_sell_item_ask_str
- .4byte unknown_ItemMenu_Confirm
- .4byte unknown_item_menu_type
- .4byte display_deposit_item_ask_str
- .4byte unknown_item_menu_type
- .4byte unknown_item_menu_type
- .4byte unknown_item_menu_type
- .4byte NULL
- .4byte item_menu_type_b
-
- .align 2
-gUnknown_08614084:: @ 8614084
- .4byte BagMenuActuallyToss
- .4byte BagMenuCancelToss
-
-gUnknown_0861408C:: @ 861408C
- .4byte sub_81AD84C
- .4byte sub_81AD6FC
-
-@ probably a struct
-gUnknown_08614094:: @ 8614094
- .4byte 0x1101C00
- .4byte 0xFFFF1064
- .4byte 0x6FFFFF
- .4byte 0x6F
-
-gUnknown_086140A4:: @ 86140A4
- .incbin "graphics/interface/select_button.4bpp"
-
-gUnknown_08614164:: @ 8614164
- .byte 0, 1, 3, 0, 1, 4, 0, 3, 6, 2, 1, 3, 0, 14, 10, 0
-
-gUnknown_08614174:: @ 8614174
- window_template 0, 14, 2, 15, 16, 1, 0x27
- window_template 0, 0, 13, 14, 6, 1, 0x117
- window_template 0, 4, 1, 8, 2, 1, 0x1A1
- window_template 0, 1, 13, 5, 6, 12, 0x16B
- window_template 0, 7, 13, 4, 6, 12, 0x189
- window_template 1, 2, 15, 27, 4, 15, 0x1B1
- null_window_template
-
-gUnknown_086141AC:: @ 86141AC
- window_template 1, 22, 17, 7, 2, 15, 0x21D
- window_template 1, 22, 15, 7, 4, 15, 0x21D
- window_template 1, 15, 15, 14, 4, 15, 0x21D
- window_template 1, 15, 13, 14, 6, 15, 0x21D
- window_template 1, 2, 15, 27, 4, 15, 0x1B1
- window_template 1, 24, 15, 5, 4, 15, 0x21D
- window_template 1, 21, 9, 5, 4, 15, 0x21D
- window_template 1, 24, 17, 5, 2, 15, 0x21D
- window_template 1, 18, 11, 10, 2, 15, 0x245
- window_template 1, 1, 1, 10, 2, 15, 0x231
diff --git a/data/main_menu.s b/data/main_menu.s
deleted file mode 100644
index 019fdfab8..000000000
--- a/data/main_menu.s
+++ /dev/null
@@ -1,141 +0,0 @@
-@ the second big chunk of data
-
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_082FECFC:: @ 82FECFC
- .incbin "graphics/birch_speech/bg0.gbapal"
- .incbin "graphics/birch_speech/bg1.gbapal"
-
- .align 2
-gBirchIntroShadowGfx:: @ 82FED3C
- .incbin "graphics/birch_speech/shadow.4bpp.lz"
-
- .align 2
-gUnknown_082FEEF0:: @ 82FEEF0
- .incbin "graphics/birch_speech/map.bin.lz"
-
- .align 2
-gUnknown_082FF018:: @ 82FF018
- .incbin "graphics/birch_speech/bg2.gbapal"
-
- .align 2
-gUnknown_082FF028:: @ 82FF028
- .space 16
-
- .align 2
-gUnknown_082FF038:: @ 82FF038
- window_template 0x00, 0x02, 0x01, 0x1a, 0x02, 0x0f, 0x0001
- window_template 0x00, 0x02, 0x05, 0x1a, 0x02, 0x0f, 0x0035
-
- .align 2
-gUnknown_082FF048:: @ 82FF048
- window_template 0x00, 0x02, 0x01, 0x1a, 0x06, 0x0f, 0x0001
- window_template 0x00, 0x02, 0x09, 0x1a, 0x02, 0x0f, 0x009d
- window_template 0x00, 0x02, 0x0d, 0x1a, 0x02, 0x0f, 0x00d1
- window_template 0x00, 0x02, 0x11, 0x1a, 0x02, 0x0f, 0x0105
- window_template 0x00, 0x02, 0x15, 0x1a, 0x02, 0x0f, 0x0139
-
- .align 2
-gUnknown_082FF070:: @ 82FF070
- window_template 0x00, 0x02, 0x0f, 0x1a, 0x04, 0x0f, 0x016d
- null_window_template
-
- .align 2
-gUnknown_082FF080:: @ 82FF080
- window_template 0x00, 0x02, 0x0f, 0x1b, 0x04, 0x0f, 0x0001
-
- .align 2
-gUnknown_082FF088:: @ 82FF088
- window_template 0x00, 0x03, 0x05, 0x06, 0x04, 0x0f, 0x006d
- window_template 0x00, 0x03, 0x02, 0x09, 0x0a, 0x0f, 0x0085
- null_window_template
-
- .align 2
-gMainMenuBgPal:: @ 82FF0A0
- .incbin "graphics/misc/main_menu_bg.gbapal"
-
- .align 2
-gMainMenuTextPal:: @ 82FF0C0
- .incbin "graphics/misc/main_menu_text.gbapal"
-
- .align 2
-gUnknown_082FF0E0:: @ 82FF0E0
- .byte 0x0a, 0x0b, 0x0c
-
-gUnknown_082FF0E3:: @ 82FF0E3
- .byte 0x0a, 0x01, 0x0c
-
- .align 2
-gUnknown_082FF0E8:: @ 82FF0E8
- .4byte 0x000001e8, 0x00003071
-
- .align 2
-gUnknown_082FF0F0:: @ 82FF0F0
- .4byte 0x000001ec
-
- .align 2
-gUnknown_082FF0F4:: @ 82FF0F4
- .byte 0x02, 0x78, 0x08, 0x03, 0x78, 0x98, 0x03, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_082FF104:: @ 82FF104
- .2byte 0xfffe, 0xfffe, 0x3000, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_082FF114:: @ 82FF114
- .4byte gUnknown_082FF104
-
- .align 2
-gUnknown_082FF118:: @ 82FF118
- .4byte gText_BirchBoy, 0x00000000
- .4byte gText_BirchGirl, 0x00000000
-
- .align 2
-gMalePresetNames:: @ 82FF128
- .4byte gText_DefaultNameStu
- .4byte gText_DefaultNameMilton
- .4byte gText_DefaultNameTom
- .4byte gText_DefaultNameKenny
- .4byte gText_DefaultNameReid
- .4byte gText_DefaultNameJude
- .4byte gText_DefaultNameJaxson
- .4byte gText_DefaultNameEaston
- .4byte gText_DefaultNameWalker
- .4byte gText_DefaultNameTeru
- .4byte gText_DefaultNameJohnny
- .4byte gText_DefaultNameBrett
- .4byte gText_DefaultNameSeth
- .4byte gText_DefaultNameTerry
- .4byte gText_DefaultNameCasey
- .4byte gText_DefaultNameDarren
- .4byte gText_DefaultNameLandon
- .4byte gText_DefaultNameCollin
- .4byte gText_DefaultNameStanley
- .4byte gText_DefaultNameQuincy
-
- .align 2
-gFemalePresetNames:: @ 82FF178
- .4byte gText_DefaultNameKimmy
- .4byte gText_DefaultNameTiara
- .4byte gText_DefaultNameBella
- .4byte gText_DefaultNameJayla
- .4byte gText_DefaultNameAllie
- .4byte gText_DefaultNameLianna
- .4byte gText_DefaultNameSara
- .4byte gText_DefaultNameMonica
- .4byte gText_DefaultNameCamila
- .4byte gText_DefaultNameAubree
- .4byte gText_DefaultNameRuthie
- .4byte gText_DefaultNameHazel
- .4byte gText_DefaultNameNadine
- .4byte gText_DefaultNameTanja
- .4byte gText_DefaultNameYasmin
- .4byte gText_DefaultNameNicola
- .4byte gText_DefaultNameLillie
- .4byte gText_DefaultNameTerra
- .4byte gText_DefaultNameLucy
- .4byte gText_DefaultNameHalie
diff --git a/data/link.s b/data/rom_8011DC0.s
index 39f97644f..df212a640 100644
--- a/data/link.s
+++ b/data/rom_8011DC0.s
@@ -7,306 +7,7 @@
.section .rodata
.align 2
-gWirelessLinkDisplayPal:: @ 82EC86C
- .incbin "graphics/interface/wireless_link_display.gbapal"
-gWirelessLinkDisplayGfx:: @ 82EC88C
- .incbin "graphics/interface/wireless_link_display.4bpp.lz"
-
-gWirelessLinkDisplayTilemap:: @ 82ECD34
- .incbin "graphics/interface/wireless_link_display.bin.lz"
-
-gLinkTestDigitsPal:: @ 82ECF20
- .incbin "graphics/interface/link_test_digits.gbapal"
-
-gLinkTestDigitsGfx:: @ 82ECF40
- .incbin "graphics/interface/link_test_digits.4bpp"
-
- .string "{HIGHLIGHT TRANSPARENT}{COLOR WHITE}$"
-
- .align 2
-g2BlankTilesGfx:: @ 82ED168
- .incbin "graphics/interface/blank_1x2.4bpp"
-
-gUnknown_082ED1A8:: @ 82ED1A8
- .4byte gBlockSendBuffer
- .4byte 0x000000C8
- .4byte gBlockSendBuffer
- .4byte 0x000000C8
- .4byte gBlockSendBuffer
- .4byte 0x00000064
- .4byte gBlockSendBuffer
- .4byte 0x000000DC
- .4byte gBlockSendBuffer
- .4byte 0x00000028
-
-gUnknown_082ED1D0:: @ 82ED1D0
- .byte 0x8, 0xA, 0xC, 0xE
-
-gASCIIGameFreakInc:: @ 82ED1D4
- .ascii "GameFreak inc."
-
- .align 2
-gASCIITestPrint:: @ 82ED1E4
- .ascii "TEST PRINT\nP0\nP1\nP2\nP3"
-
- .align 2
-gUnknown_082ED1FC:: @ 82ED1FC BgTemplate
- .4byte 0x000001F8
- .4byte 0x00001081
-
- .align 2
-gUnknown_082ED204:: @ 82ED204
- window_template 0x00, 0x00, 0x00, 0x1E, 0x05, 0x0F, 0x0002
- window_template 0x00, 0x00, 0x06, 0x1E, 0x07, 0x0F, 0x0098
- window_template 0x00, 0x00, 0x0D, 0x1E, 0x07, 0x0F, 0x016A
- null_window_template
-
- .align 2
-gUnknown_082ED224:: @ 82ED224
- .byte 0x00, 0x01, 0x02, 0x00, 0xff, 0xfe, 0xff, 0x00
-
- .align 2
-gWirelessLinkIconPalette:: @ 82ED22C
- .incbin "graphics/interface/wireless_link_icon.gbapal"
-
- .align 2
-gWirelessLinkIconPic:: @ 82ED22C
- .incbin "graphics/interface/wireless_link_icon.4bpp.lz"
-
- .align 2
-gUnknown_082ED370:: @ 82ED370
- .byte 0xff, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x37
- .byte 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f
- .byte 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47
- .byte 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f
- .byte 0x00, 0xab, 0xb5, 0xb6, 0xb1, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0xb2, 0xf1, 0x00, 0xae, 0xad, 0xba
- .byte 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8
- .byte 0xa9, 0xaa, 0x00, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
- .byte 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1
- .byte 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9
- .byte 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1
- .byte 0xd2, 0xd3, 0xd4, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6
- .byte 0x00, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb
- .byte 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3
- .byte 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb
- .byte 0xec, 0xed, 0xee, 0x2d, 0x2f, 0x30, 0x31, 0x32
- .byte 0x33, 0x34, 0x35, 0x36, 0x50, 0x00, 0x01, 0x02
- .byte 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a
- .byte 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12
- .byte 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a
- .byte 0x1b, 0xad, 0xb3, 0xb4, 0x00, 0xaf, 0x7d, 0x7f
- .byte 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0xa0
- .byte 0xae, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57
- .byte 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f
- .byte 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67
- .byte 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f
- .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77
- .byte 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7e, 0xb0, 0xac
- .byte 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23
- .byte 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b
- .byte 0x2c, 0x2e, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c
- .byte 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94
-
- .align 2
-gUnknown_082ED470:: @ 82ED470
- .byte 0x20, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c
- .byte 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94
- .byte 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c
- .byte 0x9d, 0x9e, 0x9f, 0xa0, 0xe0, 0xe1, 0xe2, 0xe3
- .byte 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb
- .byte 0xec, 0xed, 0xee, 0xef, 0xf0, 0x7b, 0xf1, 0x7c
- .byte 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x07
- .byte 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
- .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
- .byte 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
- .byte 0x84, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7
- .byte 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf
- .byte 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7
- .byte 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf
- .byte 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7
- .byte 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xa6, 0xdd, 0xa7
- .byte 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xf2
- .byte 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa
- .byte 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x01, 0x02, 0x03
- .byte 0x04, 0x05, 0x06, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f
- .byte 0xaf, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36
- .byte 0x37, 0x38, 0x39, 0x21, 0xdf, 0xa1, 0xb0, 0xa5
- .byte 0xde, 0x24, 0x2a, 0xa2, 0xa3, 0x22, 0x23, 0x20
- .byte 0xa4, 0x20, 0x2f, 0x41, 0x42, 0x43, 0x44, 0x45
- .byte 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d
- .byte 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55
- .byte 0x56, 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63
- .byte 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b
- .byte 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73
- .byte 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x20
- .byte 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x20
- .byte 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00
-
- .align 2
-gUnknown_082ED570:: @ 82ED570
- .byte 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_082ED578:: @ 82ED578
- .2byte 0x0004, 0x0005, 0x0008, 0x0005, 0x000c, 0x0005, 0x0010, 0x000a
- .2byte 0x000c, 0x0005, 0x0008, 0x0005, 0xfffe, 0x0000
-
- .align 2
-gUnknown_082ED594:: @ 82ED594
- .2byte 0x0004, 0x0005, 0x0008, 0x0005, 0x000c, 0x000a, 0x0008, 0x0005
- .2byte 0xfffe, 0x0000
-
- .align 2
-gUnknown_082ED5A8:: @ 82ED5A8
- .2byte 0x0004, 0x0005, 0x0008, 0x0005, 0xfffe, 0x0000
-
- .align 2
-gUnknown_082ED5B4:: @ 82ED5B4
- .2byte 0x0004, 0x000a, 0x0014, 0x000a, 0xfffe, 0x0000
-
- .align 2
-gUnknown_082ED5C0:: @ 82ED5C0
- .2byte 0x0018, 0x000a, 0x0004, 0x000a, 0xfffe, 0x0000
-
- .align 2
-gUnknown_082ED5CC:: @ 82ED5CC
- .4byte gUnknown_082ED578
- .4byte gUnknown_082ED594
- .4byte gUnknown_082ED5A8
- .4byte gUnknown_082ED5B4
- .4byte gUnknown_082ED5C0
-
- .align 2
-gUnknown_082ED5E0:: @ 82ED5E0
- obj_tiles gWirelessLinkIconPic, 0x0380, 0xD431
-
- .align 2
-gUnknown_082ED5E8:: @ 82ED5E8
- obj_pal gWirelessLinkIconPalette, 0xD432
-
- .align 2
-gUnknown_082ED5F0:: @ 82ED5F0
- spr_template 0xD431, 0xD432, gUnknown_082ED570, gUnknown_082ED5CC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gUnknown_082ED608:: @ 82ED608
- .byte 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
- .byte 0x14, 0x2b, 0x02, 0x02, 0x22, 0x2b, 0x02, 0x02
- .byte 0x01, 0x00, 0x58, 0x02, 0x2c, 0x01, 0x00, 0x00
-
- .align 2
-gUnknown_082ED620:: @ 82ED620
- .byte 0x00, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_082ED628:: @ 82ED628
- .4byte 0x00000000, 0x00000001, 0x00000003, 0x00000007
- .4byte 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f
- .4byte 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff
- .4byte 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff
- .4byte 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff
- .4byte 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff
- .4byte 0x00ffffff
-
-gUnknown_082ED68C:: @ 82ED68C
- .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02
- .byte 0x03
-
-gUnknown_082ED695:: @ 82ED695
- .byte 0x00, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03
- .byte 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04
-
-gUnknown_082ED6A5:: @ 82ED6A5
- .byte 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
- .byte 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
- .byte 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_082ED6B8:: @ 82ED6B8
- .4byte gBlockSendBuffer
- .4byte 0x000000c8
- .4byte gBlockSendBuffer
- .4byte 0x000000c8
- .4byte gBlockSendBuffer
- .4byte 0x00000064
- .4byte gBlockSendBuffer
- .4byte 0x000000dc
- .4byte gBlockSendBuffer
- .4byte 0x00000028
-
- .align 2
-gUnknown_082ED6E0:: @ 82ED6E0
- .2byte 0x0002, 0x7f7d, 0x0000, 0xffff
-
- .ascii "RFU WAIT"
- .space 7
-
- .ascii "RFU BOOT"
- .space 7
-
- .ascii "RFU ERROR"
- .space 6
-
- .ascii "RFU RESET"
- .space 6
-
- .ascii "RFU CONFIG"
- .space 5
-
- .ascii "RFU START"
- .space 6
-
- .ascii "RFU SC POLL"
- .space 4
-
- .ascii "RFU SP POLL"
- .space 4
-
- .ascii "RFU START"
- .space 6
-
- .ascii "RFU SEND ERR"
- .space 3
-
- .ascii "RFU CP POLL"
- .space 4
-
- .ascii " "
- .space 2
-
- .ascii "RECOVER START "
- .space 2
-
- .ascii "DISSCONECT "
- .space 2
-
- .ascii "RECOVER SUUSES"
- .space 2
-
- .ascii "RECOVER FAILED"
- .space 2
-
- .align 2
-gUnknown_082ED7E0:: @ 82ED7E0
- .4byte sub_801084C
- .4byte sub_8010AAC
- .4byte sub_8010D0C
-
- .align 2
-gUnknown_082ED7EC:: @ 82ED7EC
- .ascii "PokemonSioInfo"
-
- .align 2
-gUnknown_082ED7FC:: @ 82ED7FC
- .ascii "LINK LOSS DISCONNECT!"
-
- .align 2
-gUnknown_082ED814:: @ 82ED814
- .ascii "LINK LOSS RECOVERY NOW"
-
- .align 2
gUnknown_082ED82C:: @ 82ED82C
.byte 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
.byte 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
@@ -323,25 +24,25 @@ gUnknown_082ED85B:: @ 82ED85B
gUnknown_082ED868:: @ 82ED868
.asciz "NOWSLOT"
-
+
.asciz " "
-
+
.asciz "CLOCK DRIFT"
.asciz "BUSY SEND "
-
+
.asciz "CMD REJECT "
-
+
.asciz "CLOCK SLAVE"
-
+
.ascii "CHILD "
-
+
.align 2
.ascii "PARENT"
-
+
.align 2
.ascii "SEARCH"
-
+
.align 2
gText_EmptyString:: @ 82ED8C4
.string "$"
@@ -371,7 +72,7 @@ gText_AwaitingCommunication:: @ 82ED960
gText_AwaitingLink:: @ 82ED990
.string "{STR_VAR_1}! Awaiting link!\nPress START when everyone’s ready.$"
-
+
.align 2
gJPText_SingleBattle:: @ 82ED9C8
.string "シングルバトルを かいさいする$" @ "shingurubatoruwo kaisaisuru" ("hold a single battle" in Japanese)
@@ -387,7 +88,7 @@ gJPText_MultiBattle:: @ 82ED9E8
.align 2
gJPText_TradePokemon:: @ 82ED9F8
.string "ポケモンこうかんを かいさいする$" @ "pokemonkoukanwo kaisaisuru" ("trade Pokémon" in Japanese)
-
+
.align 2
gJPText_Chat:: @ 82EDA0C
.string "チャットを かいさいする$" @ "chattowo kaisaisuru" ("chat" in Japanese)
@@ -459,7 +160,7 @@ gText_3PlayerMode:: @ 82EDB35
gText_4PlayerMode:: @ 82EDB43
.string "4-PLAYER\nMODE$"
-
+
gText_5PlayerMode:: @ 82EDB51
.string "5-PLAYER\nMODE$"
@@ -710,7 +411,7 @@ gUnknown_082EE2E8:: @ 82EE2E8
.align 2
gUnknown_082EE308:: @ 82EE308
.string "{STR_VAR_1} has contacted you.{PAUSE 60}$"
-
+
.align 2
gUnknown_082EE324:: @ 82EE324
.4byte gUnknown_082EE2E8
@@ -719,7 +420,7 @@ gUnknown_082EE324:: @ 82EE324
.align 2
gUnknown_082EE32C:: @ 82EE32C
.string "Awaiting a response from\nthe other TRAINER…$"
-
+
.align 2
gUnknown_082EE358:: @ 82EE358
.string "Awaiting a response from\n{STR_VAR_1}…$"
@@ -1622,7 +1323,7 @@ gUnknown_082F0204:: @ 82F0204 struct ListMenuTemplate
.align 2
gUnknown_082F021C:: @ 82F021C
window_template 0x00, 0x14, 0x05, 0x10, 0x08, 0x0f, 0x0001
-
+
.align 2
gUnknown_082F0224:: @ 82F0224
.4byte gUnknown_082EFD70, 0x00000208
@@ -1708,7 +1409,7 @@ gUnknown_082F0354:: @ 82F0354
.4byte gText_EmptyString, 0x00000006
.4byte gText_EmptyString, 0x00000007
.4byte gUnknown_082EFD84, 0x00000008
-
+
.align 2
gUnknown_082F03A4:: @ 82F03A4
.4byte gUnknown_082F0354
@@ -1719,7 +1420,7 @@ gUnknown_082F03A4:: @ 82F03A4
.align 2
window_template 0x00, 0x01, 0x05, 0x1c, 0x0c, 0x0d, 0x0039
-
+
.align 2
gUnknown_082F03C4:: @ 82F03C4
.4byte gText_EmptyString, 0x00000000
@@ -1745,7 +1446,7 @@ gUnknown_082F03C4:: @ 82F03C4
.4byte nullsub_14
.byte 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00
.byte 0x21, 0x31, 0x40, 0x01
-
+
.align 2
gUnknown_082F045C:: @ 82F045C
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -2006,7 +1707,7 @@ gUnknown_082F06F8:: @ 82F06F8
.align 2
gUnknown_082F0720:: @ 82F0720
.byte 0x00, 0x01, 0x02
-
+
.align 2
.byte 0x00, 0x01, 0x02
@@ -2185,7 +1886,7 @@ gWonderCardBgGfx3:: @ 82F1300
.align 2
gWonderCardBgTilemap3:: @ 82F13D4
.incbin "graphics/wonder_transfers/wonder_card_3.bin.lz"
-
+
.align 2
gWonderCardBgGfx7:: @ 82F14A8
.incbin "graphics/wonder_transfers/wonder_card_7.4bpp.lz"
@@ -2193,7 +1894,7 @@ gWonderCardBgGfx7:: @ 82F14A8
.align 2
gWonderCardBgTilemap7:: @ 82F16DC
.incbin "graphics/wonder_transfers/wonder_card_7.bin.lz"
-
+
.align 2
gWonderCardBgGfx8:: @ 82F1824
.incbin "graphics/wonder_transfers/wonder_card_8.4bpp.lz"
@@ -2233,7 +1934,7 @@ gWonderCardShadowPal7:: @ 82F1C5C
.align 2
gWonderCardShadowPal8:: @ 82F1C7C
.incbin "graphics/wonder_transfers/wonder_card_shadow_8.gbapal"
-
+
.align 2
gWonderCardShadowGfx:: @ 82F1C9C
.incbin "graphics/wonder_transfers/wonder_card_shadow.4bpp.lz"
@@ -2248,31 +1949,31 @@ gUnknown_082F1D00:: @ 82F1D00 struct CompressedSpriteSheet
gUnknown_082F1D08:: @ 82F1D08 struct SpritePalette
.4byte gWonderCardShadowPal1
.2byte 0x8000
-
+
.align 2
.4byte gWonderCardShadowPal2
.2byte 0x8000
-
+
.align 2
.4byte gWonderCardShadowPal3
.2byte 0x8000
-
+
.align 2
.4byte gWonderCardShadowPal4
.2byte 0x8000
-
+
.align 2
.4byte gWonderCardShadowPal5
.2byte 0x8000
-
+
.align 2
.4byte gWonderCardShadowPal6
.2byte 0x8000
-
+
.align 2
.4byte gWonderCardShadowPal7
.2byte 0x8000
-
+
.align 2
.4byte gWonderCardShadowPal8
.2byte 0x8000
@@ -2553,7 +2254,7 @@ gUnknown_082F2800:: @ 82F2800
.align 2
gUnknown_082F2884:: @ 82F2884
.byte 0x12, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00
-
+
.4byte gUnknown_082F25F8
.byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00
@@ -2581,13 +2282,13 @@ gUnknown_082F28E4:: @ 82F28E4
.4byte gUnknown_082F2884
.byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
+
.4byte gUnknown_082F2788
.align 2
gUnknown_082F292C:: @ 82F292C
.byte 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00
-
+
.4byte gUnknown_082F26A8
.byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
@@ -2595,7 +2296,7 @@ gUnknown_082F292C:: @ 82F292C
.byte 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00
.byte 0x10, 0x00, 0x00, 0x00
-
+
.4byte gUnknown_082F25E8
.byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
@@ -2639,7 +2340,7 @@ gUnknown_082F29EC:: @ 82F29EC
.byte 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
-
+
.4byte gUnknown_082F26F8
.byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
@@ -2836,15 +2537,15 @@ gUnknown_082F2DF0:: @ 82F2DF0
.align 2
gUnknown_082F2E10:: @ 82F2E10
.incbin "graphics/interface/unk_cursor.4bpp.lz"
-
+
.align 2
gUnknown_082F3094:: @ 82F3094
.incbin "graphics/interface/unk_dash.4bpp.lz"
-
+
.align 2
gUnknown_082F30B4:: @ 82F30B4
.incbin "graphics/interface/unk_cursor_arrow.4bpp.lz"
-
+
.align 2
gUnknown_082F30E0:: @ 82F30E0
.incbin "graphics/interface/unk_rbutton.4bpp.lz"
@@ -2916,7 +2617,7 @@ gUnknown_082F31D4:: @ 82F31D4
.align 2
gUnknown_082F31EC:: @ 82F31EC
.byte 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00
-
+
.align 2
gUnknown_082F31F4:: @ 82F31F4
.byte 0x00, 0x40, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00
@@ -3192,25 +2893,25 @@ gUnknown_082F42D0:: @ 82F42D0
.align 2
gUnknown_082F42E8:: @ 82F42E8
.4byte gUnknown_082F423C
-
+
.align 2
gUnknown_082F42EC:: @ 82F42EC
.4byte gUnknown_082F4244
.4byte gUnknown_082F4254
-
+
.align 2
gUnknown_082F42F4:: @ 82F42F4
.4byte gUnknown_082F4268
.4byte gUnknown_082F4284
-
+
.align 2
gUnknown_082F42FC:: @ 82F42FC
.4byte gUnknown_082F42A8
-
+
.align 2
gUnknown_082F4300:: @ 82F4300
.4byte gUnknown_082F42B0
-
+
.align 2
gUnknown_082F4304:: @ 82F4304
.4byte gUnknown_082F42B8
diff --git a/data/scripts/maps/BirthIsland_Exterior.inc b/data/scripts/maps/BirthIsland_Exterior.inc
index afaf9a605..0435692f4 100644
--- a/data/scripts/maps/BirthIsland_Exterior.inc
+++ b/data/scripts/maps/BirthIsland_Exterior.inc
@@ -86,7 +86,7 @@ BirthIsland_Exterior_EventScript_267FC1:: @ 8267FC1
setvar VAR_0x8004, 410
setvar VAR_0x8005, 30
setvar VAR_0x8006, 0
- special DoScriptedWildBattle
+ special CreateObedientEnemyMon
setflag FLAG_SYS_CTRL_OBJ_DELETE
special BattleSetup_StartLegendaryBattle
waitstate
diff --git a/data/scripts/maps/FarawayIsland_Interior.inc b/data/scripts/maps/FarawayIsland_Interior.inc
index d3132b202..23bdac560 100644
--- a/data/scripts/maps/FarawayIsland_Interior.inc
+++ b/data/scripts/maps/FarawayIsland_Interior.inc
@@ -143,7 +143,7 @@ FarawayIsland_Interior_EventScript_267DF2:: @ 8267DF2
setvar VAR_0x8004, 151
setvar VAR_0x8005, 30
setvar VAR_0x8006, 0
- special DoScriptedWildBattle
+ special CreateObedientEnemyMon
setflag FLAG_SYS_CTRL_OBJ_DELETE
special BattleSetup_StartLegendaryBattle
waitstate
diff --git a/data/scripts/maps/NavelRock_Bottom.inc b/data/scripts/maps/NavelRock_Bottom.inc
index dc99ec7f7..cce93e624 100644
--- a/data/scripts/maps/NavelRock_Bottom.inc
+++ b/data/scripts/maps/NavelRock_Bottom.inc
@@ -59,7 +59,7 @@ NavelRock_Bottom_EventScript_2692A2:: @ 82692A2
setvar VAR_0x8004, 249
setvar VAR_0x8005, 70
setvar VAR_0x8006, 0
- special DoScriptedWildBattle
+ special CreateObedientEnemyMon
setflag FLAG_SYS_CTRL_OBJ_DELETE
special BattleSetup_StartLegendaryBattle
waitstate
diff --git a/data/scripts/maps/NavelRock_Top.inc b/data/scripts/maps/NavelRock_Top.inc
index af3586554..07a90e7b7 100644
--- a/data/scripts/maps/NavelRock_Top.inc
+++ b/data/scripts/maps/NavelRock_Top.inc
@@ -63,7 +63,7 @@ NavelRock_Top_EventScript_26916F:: @ 826916F
setvar VAR_0x8004, 250
setvar VAR_0x8005, 70
setvar VAR_0x8006, 0
- special DoScriptedWildBattle
+ special CreateObedientEnemyMon
setflag FLAG_SYS_CTRL_OBJ_DELETE
special BattleSetup_StartLegendaryBattle
waitstate
diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc
index 057c4581d..cbaaa905a 100644
--- a/data/scripts/maps/SouthernIsland_Interior.inc
+++ b/data/scripts/maps/SouthernIsland_Interior.inc
@@ -121,14 +121,14 @@ SouthernIsland_Interior_EventScript_242BA4:: @ 8242BA4
setvar VAR_0x8004, 408
setvar VAR_0x8005, 50
setvar VAR_0x8006, 191
- special DoScriptedWildBattle
+ special CreateObedientEnemyMon
return
SouthernIsland_Interior_EventScript_242BB7:: @ 8242BB7
setvar VAR_0x8004, 407
setvar VAR_0x8005, 50
setvar VAR_0x8006, 191
- special DoScriptedWildBattle
+ special CreateObedientEnemyMon
return
SouthernIsland_Interior_Movement_242BCA: @ 8242BCA
diff --git a/data/specials.inc b/data/specials.inc
index ac4a47b69..a4bd17699 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -490,7 +490,7 @@ gSpecials:: @ 81DBA64
def_special sub_813AF48
def_special sub_813AFC8
def_special sub_813B1D0
- def_special DoScriptedWildBattle
+ def_special CreateObedientEnemyMon
def_special sub_81BEB54
def_special sub_81BEB68
def_special sub_81BEB7C
diff --git a/include/agb_flash.h b/include/agb_flash.h
new file mode 100644
index 000000000..27e45e8fa
--- /dev/null
+++ b/include/agb_flash.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_AGB_FLASH_H
+#define GUARD_AGB_FLASH_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void));
+
+#endif //GUARD_AGB_FLASH_H
diff --git a/include/battle.h b/include/battle.h
index 81c1d341d..5225b72e3 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -2,6 +2,7 @@
#define GUARD_BATTLE_H
// should they be included here or included individually by every file?
+#include "constants/battle.h"
#include "battle_util.h"
#include "battle_script_commands.h"
#include "battle_main.h"
@@ -10,215 +11,16 @@
#include "battle_util2.h"
#include "battle_bg.h"
-/*
- * A battler may be in one of four positions on the field. The first bit determines
- * what side the battler is on, either the player's side or the opponent's side.
- * The second bit determines what flank the battler is on, either the left or right.
- * Note that the opponent's flanks are drawn corresponding to their perspective, so
- * their right mon appears on the left, and their left mon appears on the right.
- * The battler ID is usually the same as the position, except in the case of link battles.
- *
- * + ------------------------- +
- * | Opponent's side |
- * | Right Left |
- * | 3 1 |
- * | |
- * | Player's side |
- * | Left Right |
- * | 0 2 |
- * ----------------------------+
- * | |
- * | |
- * +---------------------------+
- */
-
-#define MAX_BATTLERS_COUNT 4
-
-#define B_POSITION_PLAYER_LEFT 0
-#define B_POSITION_OPPONENT_LEFT 1
-#define B_POSITION_PLAYER_RIGHT 2
-#define B_POSITION_OPPONENT_RIGHT 3
-
-// These macros can be used with either battler ID or positions to get the partner or the opposite mon
-#define BATTLE_OPPOSITE(id) ((id) ^ 1)
-#define BATTLE_PARTNER(id) ((id) ^ 2)
-
-#define B_SIDE_PLAYER 0
-#define B_SIDE_OPPONENT 1
-
-#define B_FLANK_LEFT 0
-#define B_FLANK_RIGHT 1
-
-#define BIT_SIDE 1
-#define BIT_FLANK 2
-
#define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler])
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
#define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE)
-// Battle Type Flags
-
-#define BATTLE_TYPE_DOUBLE 0x0001
-#define BATTLE_TYPE_LINK 0x0002
-#define BATTLE_TYPE_WILD 0x0004
-#define BATTLE_TYPE_TRAINER 0x0008
-#define BATTLE_TYPE_FIRST_BATTLE 0x0010
-#define BATTLE_TYPE_20 0x0020
-#define BATTLE_TYPE_MULTI 0x0040
-#define BATTLE_TYPE_SAFARI 0x0080
-#define BATTLE_TYPE_BATTLE_TOWER 0x0100
-#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
-#define BATTLE_TYPE_ROAMER 0x0400
-#define BATTLE_TYPE_EREADER_TRAINER 0x0800
-#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
-#define BATTLE_TYPE_LEGENDARY 0x2000
-#define BATTLE_TYPE_REGI 0x4000
-#define BATTLE_TYPE_TWO_OPPONENTS 0x8000
-#define BATTLE_TYPE_DOME 0x10000
-#define BATTLE_TYPE_PALACE 0x20000
-#define BATTLE_TYPE_ARENA 0x40000
-#define BATTLE_TYPE_FACTORY 0x80000
-#define BATTLE_TYPE_PIKE 0x100000
-#define BATTLE_TYPE_PYRAMID 0x200000
-#define BATTLE_TYPE_INGAME_PARTNER 0x400000
-#define BATTLE_TYPE_x800000 0x800000
-#define BATTLE_TYPE_RECORDED 0x1000000
-#define BATTLE_TYPE_x2000000 0x2000000
-#define BATTLE_TYPE_x4000000 0x4000000
-#define BATTLE_TYPE_SECRET_BASE 0x8000000
-#define BATTLE_TYPE_GROUDON 0x10000000
-#define BATTLE_TYPE_KYOGRE 0x20000000
-#define BATTLE_TYPE_RAYQUAZA 0x40000000
-#define BATTLE_TYPE_x80000000 0x80000000
-#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
-#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
-
-extern u32 gBattleTypeFlags;
-
#define TRAINER_OPPONENT_3FE 0x3FE
#define TRAINER_OPPONENT_C00 0xC00
#define TRAINER_OPPONENT_800 0x800
#define STEVEN_PARTNER_ID 0xC03
#define SECRET_BASE_OPPONENT 0x400
-#define B_OUTCOME_WON 0x1
-#define B_OUTCOME_LOST 0x2
-#define B_OUTCOME_DREW 0x3
-#define B_OUTCOME_RAN 0x4
-#define B_OUTCOME_PLAYER_TELEPORTED 0x5
-#define B_OUTCOME_POKE_FLED 0x6
-#define B_OUTCOME_CAUGHT_POKE 0x7
-#define B_OUTCOME_NO_SAFARI_BALLS 0x8
-#define B_OUTCOME_FORFEITED 0x9
-#define B_OUTCOME_POKE_TELEPORTED 0xA
-#define B_OUTCOME_LINK_BATTLE_RAN 0x80
-
-extern u8 gBattleOutcome;
-
-// Non-volatile status conditions
-// These persist remain outside of battle and after switching out
-#define STATUS1_NONE 0x0
-#define STATUS1_SLEEP 0x7
-#define STATUS1_POISON 0x8
-#define STATUS1_BURN 0x10
-#define STATUS1_FREEZE 0x20
-#define STATUS1_PARALYSIS 0x40
-#define STATUS1_TOXIC_POISON 0x80
-#define STATUS1_TOXIC_COUNTER 0xF00
-#define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON)
-#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)
-
-// Volatile status ailments
-// These are removed after exiting the battle or switching out
-#define STATUS2_CONFUSION 0x00000007
-#define STATUS2_FLINCHED 0x00000008
-#define STATUS2_UPROAR 0x00000070
-#define STATUS2_BIDE 0x00000300 // two bits 0x100, 0x200
-#define STATUS2_LOCK_CONFUSE 0x00000C00
-#define STATUS2_MULTIPLETURNS 0x00001000
-#define STATUS2_WRAPPED 0x0000E000
-#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler
-#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
-#define STATUS2_FOCUS_ENERGY 0x00100000
-#define STATUS2_TRANSFORMED 0x00200000
-#define STATUS2_RECHARGE 0x00400000
-#define STATUS2_RAGE 0x00800000
-#define STATUS2_SUBSTITUTE 0x01000000
-#define STATUS2_DESTINY_BOND 0x02000000
-#define STATUS2_ESCAPE_PREVENTION 0x04000000
-#define STATUS2_NIGHTMARE 0x08000000
-#define STATUS2_CURSED 0x10000000
-#define STATUS2_FORESIGHT 0x20000000
-#define STATUS2_DEFENSE_CURL 0x40000000
-#define STATUS2_TORMENT 0x80000000
-
-// Seems like per-battler statuses. Not quite sure how to categorize these
-#define STATUS3_LEECHSEED_BANK 0x3
-#define STATUS3_LEECHSEED 0x4
-#define STATUS3_ALWAYS_HITS 0x18 // two bits
-#define STATUS3_PERISH_SONG 0x20
-#define STATUS3_ON_AIR 0x40
-#define STATUS3_UNDERGROUND 0x80
-#define STATUS3_MINIMIZED 0x100
-#define STATUS3_ROOTED 0x400
-#define STATUS3_CHARGED_UP 0x200
-#define STATUS3_YAWN 0x1800 // two bits
-#define STATUS3_IMPRISONED_OTHERS 0x2000
-#define STATUS3_GRUDGE 0x4000
-#define STATUS3_CANT_SCORE_A_CRIT 0x8000
-#define STATUS3_MUDSPORT 0x10000
-#define STATUS3_WATERSPORT 0x20000
-#define STATUS3_UNDERWATER 0x40000
-#define STATUS3_INTIMIDATE_POKES 0x80000
-#define STATUS3_TRACE 0x100000
-#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)
-
-extern u32 gStatuses3[MAX_BATTLERS_COUNT];
-
-// Not really sure what a "hitmarker" is.
-
-#define HITMARKER_x10 0x00000010
-#define HITMARKER_x20 0x00000020
-#define HITMARKER_DESTINYBOND 0x00000040
-#define HITMARKER_NO_ANIMATIONS 0x00000080
-#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
-#define HITMARKER_NO_ATTACKSTRING 0x00000200
-#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
-#define HITMARKER_NO_PPDEDUCT 0x00000800
-#define HITMARKER_PURSUIT_TRAP 0x00001000
-#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
-#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
-#define HITMARKER_RUN 0x00008000
-#define HITMARKER_IGNORE_ON_AIR 0x00010000
-#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
-#define HITMARKER_IGNORE_UNDERWATER 0x00040000
-#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
-#define HITMARKER_x100000 0x00100000
-#define HITMARKER_x200000 0x00200000
-#define HITMARKER_x400000 0x00400000
-#define HITMARKER_x800000 0x00800000
-#define HITMARKER_GRUDGE 0x01000000
-#define HITMARKER_OBEYS 0x02000000
-#define HITMARKER_x4000000 0x04000000
-#define HITMARKER_x8000000 0x08000000
-#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
-#define HITMARKER_UNK(battler) (0x10000000 << battler)
-
-extern u32 gHitMarker;
-
-// Per-side statuses that affect an entire party
-
-#define SIDE_STATUS_REFLECT (1 << 0)
-#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
-#define SIDE_STATUS_X4 (1 << 2)
-#define SIDE_STATUS_SPIKES (1 << 4)
-#define SIDE_STATUS_SAFEGUARD (1 << 5)
-#define SIDE_STATUS_FUTUREATTACK (1 << 6)
-#define SIDE_STATUS_MIST (1 << 8)
-#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
-
-extern u16 gSideStatuses[2];
-
// Battle Actions
// These determine what each battler will do in a turn
#define B_ACTION_USE_MOVE 0
@@ -238,37 +40,9 @@ extern u16 gSideStatuses[2];
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
#define B_ACTION_NONE 0xFF
-#define MOVE_RESULT_MISSED (1 << 0)
-#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
-#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
-#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
-#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
-#define MOVE_RESULT_FAILED (1 << 5)
-#define MOVE_RESULT_FOE_ENDURED (1 << 6)
-#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
-#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
-
#define MAX_TRAINER_ITEMS 4
#define MAX_MON_MOVES 4
-// Battle Weather flags
-
-#define WEATHER_RAIN_TEMPORARY (1 << 0)
-#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
-#define WEATHER_RAIN_PERMANENT (1 << 2)
-#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT)
-#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
-#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
-#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
-#define WEATHER_SUN_TEMPORARY (1 << 5)
-#define WEATHER_SUN_PERMANENT (1 << 6)
-#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
-#define WEATHER_HAIL (1 << 7)
-#define WEATHER_HAIL_ANY (WEATHER_HAIL)
-#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
-
-extern u16 gBattleWeather;
-
#define BATTLE_TERRAIN_GRASS 0
#define BATTLE_TERRAIN_LONG_GRASS 1
#define BATTLE_TERRAIN_SAND 2
@@ -280,8 +54,6 @@ extern u16 gBattleWeather;
#define BATTLE_TERRAIN_BUILDING 8
#define BATTLE_TERRAIN_PLAIN 9
-extern u8 gBattleTerrain;
-
// array entries for battle communication
#define MULTIUSE_STATE 0x0
#define CURSOR_POSITION 0x1
@@ -318,26 +90,7 @@ extern u8 gBattleTerrain;
#define TYPE_FORESIGHT 0xFE
#define TYPE_ENDTABLE 0xFF
-#define BS_GET_TARGET 0
-#define BS_GET_ATTACKER 1
-#define BS_GET_EFFECT_BANK 2
-#define BS_GET_gBank1 3
-#define BS_GET_BANK_0 7
-#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
-#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
-#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
-#define BS_GET_SCRIPTING_BANK 10
-#define BS_GET_OPPONENT1 12
-#define BS_GET_PLAYER2 13
-#define BS_GET_OPPONENT2 14
-
-// for battle script commands
-#define CMP_EQUAL 0x0
-#define CMP_NOT_EQUAL 0x1
-#define CMP_GREATER_THAN 0x2
-#define CMP_LESS_THAN 0x3
-#define CMP_COMMON_BITS 0x4
-#define CMP_NO_COMMON_BITS 0x5
+#define BATTLE_BUFFER_LINK_SIZE 0x1000
struct TrainerMonNoItemDefaultMoves
{
@@ -346,8 +99,6 @@ struct TrainerMonNoItemDefaultMoves
u16 species;
};
-u8 GetBattlerSide(u8 battler);
-
struct TrainerMonItemDefaultMoves
{
u16 iv;
@@ -441,8 +192,6 @@ struct DisableStruct
/*0x1A*/ u8 unk1A[2];
};
-extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
-
struct ProtectStruct
{
/* field_0 */
@@ -476,13 +225,11 @@ struct ProtectStruct
/* field_4 */ u32 physicalDmg;
/* field_8 */ u32 specialDmg;
- /* field_C */ u8 physicalBank;
- /* field_D */ u8 specialBank;
+ /* field_C */ u8 physicalBattlerId;
+ /* field_D */ u8 specialBattlerId;
/* field_E */ u16 fieldE;
};
-extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
-
struct SpecialStatus
{
u8 statLowered : 1; // 0x1
@@ -494,35 +241,31 @@ struct SpecialStatus
u8 flag40 : 1;
u8 focusBanded : 1;
u8 field1[3];
- s32 moveturnLostHP;
- s32 moveturnLostHP_physical;
- s32 moveturnLostHP_special;
- u8 moveturnPhysicalBank;
- u8 moveturnSpecialBank;
+ s32 dmg;
+ s32 physicalDmg;
+ s32 specialDmg;
+ u8 physicalBattlerId;
+ u8 specialBattlerId;
u8 field12;
u8 field13;
};
-extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
-
struct SideTimer
{
/*0x00*/ u8 reflectTimer;
- /*0x01*/ u8 reflectBank;
+ /*0x01*/ u8 reflectBattlerId;
/*0x02*/ u8 lightscreenTimer;
- /*0x03*/ u8 lightscreenBank;
+ /*0x03*/ u8 lightscreenBattlerId;
/*0x04*/ u8 mistTimer;
- /*0x05*/ u8 mistBank;
+ /*0x05*/ u8 mistBattlerId;
/*0x06*/ u8 safeguardTimer;
- /*0x07*/ u8 safeguardBank;
+ /*0x07*/ u8 safeguardBattlerId;
/*0x08*/ u8 followmeTimer;
/*0x09*/ u8 followmeTarget;
/*0x0A*/ u8 spikesAmount;
/*0x0B*/ u8 fieldB;
};
-extern struct SideTimer gSideTimers[];
-
struct WishFutureKnock
{
u8 futureSightCounter[MAX_BATTLERS_COUNT];
@@ -530,13 +273,11 @@ struct WishFutureKnock
s32 futureSightDmg[MAX_BATTLERS_COUNT];
u16 futureSightMove[MAX_BATTLERS_COUNT];
u8 wishCounter[MAX_BATTLERS_COUNT];
- u8 wishUserID[MAX_BATTLERS_COUNT];
+ u8 wishMonId[MAX_BATTLERS_COUNT];
u8 weatherDuration;
u8 knockedOffPokes[2];
};
-extern struct WishFutureKnock gWishFutureKnock;
-
struct AI_ThinkingStruct
{
u8 aiState;
@@ -600,8 +341,6 @@ struct BattleResources
struct BattleScriptsStack *AI_ScriptsStack;
};
-extern struct BattleResources* gBattleResources;
-
struct BattleResults
{
u8 playerFaintCounter; // 0x0
@@ -625,21 +364,19 @@ struct BattleResults
u16 playerMon2Species; // 0x26
u16 caughtMonSpecies; // 0x28
u8 caughtMonNick[10]; // 0x2A
- u8 filler34[2];
+ u8 filler34[2]; // 0x34
u8 catchAttempts[11]; // 0x36
};
-extern struct BattleResults gBattleResults;
-
struct BattleStruct
{
u8 turnEffectsTracker;
- u8 turnEffectsBank;
+ u8 turnEffectsBattlerId;
u8 filler2;
- u8 turncountersTracker;
+ u8 turnCountersTracker;
u8 wrappedMove[8]; // ask gamefreak why they declared it that way
u8 moveTarget[4];
- u8 expGetterId;
+ u8 expGetterMonId;
u8 field_11;
u8 wildVictorySong;
u8 dynamicMoveType;
@@ -653,13 +390,13 @@ struct BattleStruct
u8 field_45;
u8 field_46;
u8 field_47;
- u8 focusPunchBank;
+ u8 focusPunchBattlerId;
u8 field_49;
u8 moneyMultiplier;
u8 savedTurnActionNumber;
u8 switchInAbilitiesCounter;
u8 faintedActionsState;
- u8 faintedActionsBank;
+ u8 faintedActionsBattlerId;
u8 field_4F;
u16 expValue;
u8 field_52;
@@ -687,7 +424,7 @@ struct BattleStruct
u8 field_8C;
u8 field_8D;
u8 stringMoveType;
- u8 expGetterBank;
+ u8 expGetterBattlerId;
u8 field_90;
u8 field_91;
u8 field_92;
@@ -732,7 +469,7 @@ struct BattleStruct
u8 field_183;
struct BattleEnigmaBerry battleEnigmaBerry;
u8 wishPerishSongState;
- u8 wishPerishSongBank;
+ u8 wishPerishSongBattlerId;
bool8 overworldWeatherDone;
u8 atkCancellerTracker;
u8 field_1A4[96];
@@ -745,8 +482,6 @@ struct BattleStruct
u8 field_2A2;
};
-extern struct BattleStruct* gBattleStruct;
-
#define GET_MOVE_TYPE(move, typeArg) \
{ \
if (gBattleStruct->dynamicMoveType) \
@@ -755,71 +490,8 @@ extern struct BattleStruct* gBattleStruct;
typeArg = gBattleMoves[move].type; \
}
-#define MOVE_EFFECT_SLEEP 0x1
-#define MOVE_EFFECT_POISON 0x2
-#define MOVE_EFFECT_BURN 0x3
-#define MOVE_EFFECT_FREEZE 0x4
-#define MOVE_EFFECT_PARALYSIS 0x5
-#define MOVE_EFFECT_TOXIC 0x6
-#define MOVE_EFFECT_CONFUSION 0x7
-#define MOVE_EFFECT_FLINCH 0x8
-#define MOVE_EFFECT_TRI_ATTACK 0x9
-#define MOVE_EFFECT_UPROAR 0xA
-#define MOVE_EFFECT_PAYDAY 0xB
-#define MOVE_EFFECT_CHARGING 0xC
-#define MOVE_EFFECT_WRAP 0xD
-#define MOVE_EFFECT_RECOIL_25 0xE
-#define MOVE_EFFECT_ATK_PLUS_1 0xF
-#define MOVE_EFFECT_DEF_PLUS_1 0x10
-#define MOVE_EFFECT_SPD_PLUS_1 0x11
-#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
-#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
-#define MOVE_EFFECT_ACC_PLUS_1 0x14
-#define MOVE_EFFECT_EVS_PLUS_1 0x15
-#define MOVE_EFFECT_ATK_MINUS_1 0x16
-#define MOVE_EFFECT_DEF_MINUS_1 0x17
-#define MOVE_EFFECT_SPD_MINUS_1 0x18
-#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
-#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
-#define MOVE_EFFECT_ACC_MINUS_1 0x1B
-#define MOVE_EFFECT_EVS_MINUS_1 0x1C
-#define MOVE_EFFECT_RECHARGE 0x1D
-#define MOVE_EFFECT_RAGE 0x1E
-#define MOVE_EFFECT_STEAL_ITEM 0x1F
-#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
-#define MOVE_EFFECT_NIGHTMARE 0x21
-#define MOVE_EFFECT_ALL_STATS_UP 0x22
-#define MOVE_EFFECT_RAPIDSPIN 0x23
-#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
-#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
-#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
-#define MOVE_EFFECT_ATK_PLUS_2 0x27
-#define MOVE_EFFECT_DEF_PLUS_2 0x28
-#define MOVE_EFFECT_SPD_PLUS_2 0x29
-#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
-#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
-#define MOVE_EFFECT_ACC_PLUS_2 0x2C
-#define MOVE_EFFECT_EVS_PLUS_2 0x2D
-#define MOVE_EFFECT_ATK_MINUS_2 0x2E
-#define MOVE_EFFECT_DEF_MINUS_2 0x2F
-#define MOVE_EFFECT_SPD_MINUS_2 0x30
-#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
-#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
-#define MOVE_EFFECT_ACC_MINUS_2 0x33
-#define MOVE_EFFECT_EVS_MINUS_2 0x34
-#define MOVE_EFFECT_THRASH 0x35
-#define MOVE_EFFECT_KNOCK_OFF 0x36
-#define MOVE_EFFECT_NOTHING_37 0x37
-#define MOVE_EFFECT_NOTHING_38 0x38
-#define MOVE_EFFECT_NOTHING_39 0x39
-#define MOVE_EFFECT_NOTHING_3A 0x3A
-#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
-#define MOVE_EFFECT_NOTHING_3C 0x3C
-#define MOVE_EFFECT_NOTHING_3D 0x3D
-#define MOVE_EFFECT_NOTHING_3E 0x3E
-#define MOVE_EFFECT_NOTHING_3F 0x3F
-#define MOVE_EFFECT_AFFECTS_USER 0x40
-#define MOVE_EFFECT_CERTAIN 0x80
+#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
+#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
@@ -859,8 +531,6 @@ struct BattleScripting
u8 multiplayerId;
};
-extern struct BattleScripting gBattleScripting;
-
enum
{
BACK_PIC_BRENDAN,
@@ -874,7 +544,7 @@ enum
};
// rom_80A5C6C
-u8 GetBattlerSide(u8 bank);
+u8 GetBattlerSide(u8 battler);
u8 GetBattlerPosition(u8 bank);
u8 GetBattlerAtPosition(u8 bank);
@@ -956,18 +626,6 @@ struct BattleSpriteData
struct BattleBarInfo *battleBars;
};
-extern struct BattleSpriteData *gBattleSpritesDataPtr;
-
-#define BATTLE_BUFFER_LINK_SIZE 0x1000
-
-extern u8 *gLinkBattleSendBuffer;
-extern u8 *gLinkBattleRecvBuffer;
-
-extern u8 *gUnknown_0202305C;
-extern u8 *gUnknown_02023060;
-
-// Move this somewhere else
-
#include "sprite.h"
struct MonSpritesGfx
@@ -982,11 +640,106 @@ struct MonSpritesGfx
void *field_17C;
};
-extern struct BattleSpritesGfx* gMonSpritesGfx;
-extern u8 gBattleOutcome;
-extern u16 gLastUsedItem;
+// all battle variables are declared in battle_main.c
extern u32 gBattleTypeFlags;
-extern struct MonSpritesGfx* gMonSpritesGfxPtr;
-extern u16 gTrainerBattleOpponent_A;
+extern u8 gBattleTerrain;
+extern u32 gUnknown_02022FF4;
+extern u8 *gUnknown_0202305C;
+extern u8 *gUnknown_02023060;
+extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
+extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
+extern u8 gActiveBattler;
+extern u32 gBattleControllerExecFlags;
+extern u8 gBattlersCount;
+extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
+extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
+extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
+extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
+extern u8 gCurrentTurnActionNumber;
+extern u8 gCurrentActionFuncId;
+extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
+extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
+extern u8 gCurrMovePos;
+extern u8 gChosenMovePos;
+extern u16 gCurrentMove;
+extern u16 gChosenMove;
+extern u16 gRandomMove;
+extern s32 gBattleMoveDamage;
+extern s32 gHpDealt;
+extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
+extern u16 gLastUsedItem;
+extern u8 gLastUsedAbility;
+extern u8 gBattlerAttacker;
+extern u8 gBattlerTarget;
+extern u8 gBattlerFainted;
+extern u8 gEffectBattler;
+extern u8 gPotentialItemEffectBattler;
+extern u8 gAbsentBattlerFlags;
+extern u8 gCritMultiplier;
+extern u8 gMultiHitCounter;
+extern const u8 *gBattlescriptCurrInstr;
+extern u32 gUnusedBattleMainVar;
+extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
+extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT];
+extern const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
+extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
+extern u16 gLastMoves[MAX_BATTLERS_COUNT];
+extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
+extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
+extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
+extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
+extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
+extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
+extern u8 gMoveResultFlags;
+extern u32 gHitMarker;
+extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
+extern u8 gUnknown_0202428C;
+extern u16 gSideStatuses[2];
+extern struct SideTimer gSideTimers[2];
+extern u32 gStatuses3[MAX_BATTLERS_COUNT];
+extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
+extern u16 gPauseCounterBattle;
+extern u16 gPaydayMoney;
+extern u16 gRandomTurnNumber;
+extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT];
+extern u8 gBattleOutcome;
+extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
+extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
+extern u16 gBattleWeather;
+extern struct WishFutureKnock gWishFutureKnock;
+extern u16 gIntroSlideFlags;
+extern u8 gSentPokesToOpponent[2];
+extern u16 gDynamicBasePower;
+extern u16 gExpShareExp;
+extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
+extern struct BattleScripting gBattleScripting;
+extern struct BattleStruct *gBattleStruct;
+extern u8 *gLinkBattleSendBuffer;
+extern u8 *gLinkBattleRecvBuffer;
+extern struct BattleResources *gBattleResources;
+extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
+extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
+extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
+extern u8 gBattlerInMenuId;
+extern bool8 gDoingBattleAnim;
+extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
+extern u8 gPlayerDpadHoldFrames;
+extern struct BattleSpriteData *gBattleSpritesDataPtr;
+extern struct MonSpritesGfx *gMonSpritesGfxPtr;
+extern struct BattleHealthboxInfo *gUnknown_020244D8;
+extern struct BattleHealthboxInfo *gUnknown_020244DC;
+extern u16 gBattleMovePower;
+extern u16 gMoveToLearn;
+extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
+
+extern void (*gPreBattleCallback1)(void);
+extern void (*gBattleMainFunc)(void);
+extern struct BattleResults gBattleResults;
+extern u8 gLeveledUpInBattle;
+extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
+extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
+extern u8 gMultiUsePlayerCursor;
+extern u8 gNumberOfMovesToChoose;
+extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
#endif // GUARD_BATTLE_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index cc864b024..aa62db46d 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -56,8 +56,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
-bool8 IsBattlerSpriteVisible(u8 bank);
-void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible);
+bool8 IsBattlerSpriteVisible(u8 battlerId);
+void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
bool8 IsContest(void);
s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
@@ -76,7 +76,7 @@ void sub_80A6F3C(struct Sprite *sprite);
void sub_80A8278(void);
void sub_80A6B30(struct UnknownAnimStruct2*);
void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
-u8 sub_80A82E4(u8 bank);
+u8 sub_80A82E4(u8 battlerId);
bool8 AnimateBallThrow(struct Sprite *sprite);
enum
@@ -85,26 +85,26 @@ enum
BANK_Y_POS,
};
-u8 GetBattlerSpriteCoord(u8 bank, u8 attributeId);
+u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
-bool8 IsBattlerSpritePresent(u8 bank);
+bool8 IsBattlerSpritePresent(u8 battlerId);
void sub_80A6C68(u8 arg0);
-u8 GetAnimBattlerSpriteId(u8 wantedBank);
+u8 GetAnimBattlerSpriteId(u8 wantedBattler);
bool8 IsDoubleBattle(void);
u8 sub_80A6D94(void);
u8 sub_80A8364(u8);
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
-u8 GetBattlerSpriteDefault_Y(u8 bank);
-u8 sub_80A82E4(u8 bank);
-u8 GetSubstituteSpriteDefault_Y(u8 bank);
+u8 GetBattlerSpriteDefault_Y(u8 battlerId);
+u8 sub_80A82E4(u8 battlerId);
+u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
// battle_anim_80A9C70.s
-void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
+void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
// battle_anim_8170478.s
u8 ItemIdToBallId(u16 itemId);
u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
-u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
+u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
#endif // GUARD_BATTLE_ANIM_H
diff --git a/include/battle_frontier_2.h b/include/battle_frontier_2.h
index 801c3f3ec..638ff692e 100644
--- a/include/battle_frontier_2.h
+++ b/include/battle_frontier_2.h
@@ -6,5 +6,6 @@ void sub_81A895C(void);
u16 sub_81A89A0(u8);
void sub_81A8AF8(void);
bool8 InBattlePike(void);
+void sub_819FA50(void);
#endif // GUARD_BATTLE_FRONTIER_2_H
diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h
index 75bc3e003..e1c6325b6 100644
--- a/include/battle_gfx_sfx_util.h
+++ b/include/battle_gfx_sfx_util.h
@@ -8,41 +8,41 @@ void sub_805D714(struct Sprite *sprite);
void sub_805D770(struct Sprite *sprite, bool8 arg1);
void sub_805D7AC(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
-bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument);
-void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId);
+bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument);
+void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId);
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
-bool8 mplay_80342A4(u8 bank);
-void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank);
-void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank);
+bool8 mplay_80342A4(u8 battlerId);
+void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
+void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void nullsub_23(void);
void nullsub_24(u16 species);
-void DecompressTrainerFrontPic(u16 frontPicId, u8 bank);
-void DecompressTrainerBackPic(u16 backPicId, u8 bank);
+void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
+void DecompressTrainerBackPic(u16 backPicId, u8 battlerId);
void nullsub_25(u8 arg0);
void FreeTrainerFrontPicPalette(u16 frontPicId);
void sub_805DFFC(void);
bool8 BattleLoadAllHealthBoxesGfx(u8 state);
void LoadBattleBarGfx(u8 arg0);
-bool8 BattleInitAllSprites(u8 *state1, u8 *bank);
+bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId);
void ClearSpritesHealthboxAnimData(void);
void CopyAllBattleSpritesInvisibilities(void);
-void CopyBattleSpriteInvisibility(u8 bank);
-void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform);
-void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite);
-void LoadBattleMonGfxAndAnimate(u8 bank, bool8 loadMonSprite, u8 spriteId);
-void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move);
-void ClearBehindSubstituteBit(u8 bank);
-void HandleLowHpMusicChange(struct Pokemon *mon, u8 bank);
+void CopyBattleSpriteInvisibility(u8 battlerId);
+void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform);
+void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite);
+void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId);
+void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move);
+void ClearBehindSubstituteBit(u8 battlerId);
+void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void);
u8 GetMonHPBarLevel(struct Pokemon *mon);
void sub_805EAE8(void);
void sub_805EB9C(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite);
-void SetBattlerShadowSpriteCallback(u8 bank, u16 species);
-void HideBattlerShadowSprite(u8 bank);
+void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species);
+void HideBattlerShadowSprite(u8 battlerId);
void sub_805EF14(void);
-void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute);
+void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
void AllocateMonSpritesGfx(void);
void FreeMonSpritesGfx(void);
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon);
diff --git a/include/battle_main.h b/include/battle_main.h
index 54b5e7da6..d7a522f17 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -21,8 +21,8 @@ void sub_8039B58(struct Sprite *sprite);
void sub_8039BB4(struct Sprite *sprite);
void sub_80105DC(struct Sprite *sprite);
void sub_8039C00(struct Sprite *sprite);
-void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d);
-void dp11b_obj_free(u8 bank, bool8 b);
+void dp11b_obj_instanciate(u8 battlerId, u8 b, s8 c, s8 d);
+void dp11b_obj_free(u8 battlerId, bool8 b);
void sub_8039E44(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite);
void sub_8039E84(struct Sprite *sprite);
@@ -35,12 +35,12 @@ void sub_803B3AC(void); // unused
void sub_803B598(void); // unused
void BattleTurnPassed(void);
u8 IsRunningFromBattleImpossible(void);
-void sub_803BDA0(u8 bank);
+void sub_803BDA0(u8 battlerId);
void SwapTurnOrder(u8 id1, u8 id2);
-u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
+u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
-bool8 TryRunFromBattle(u8 bank);
+bool8 TryRunFromBattle(u8 battlerId);
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
diff --git a/include/battle_message.h b/include/battle_message.h
index 30ddca469..a68ad1551 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -229,6 +229,14 @@ extern const u8* const gPokeblockWasTooXStringTable[];
extern const u8* const gRefereeStringsTable[];
extern const u8* const gStatNamesTable2[];
+extern const u8 gText_BadEgg[];
+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 u16 gMissStringIds[];
extern const u16 gTrappingMoves[];
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 26659ff20..6c84d1f0f 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -1,51 +1,6 @@
#ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H
#define GUARD_BATTLE_SCRIPT_COMMANDS_H
-#define NO_ACC_CALC 0xFFFE
-#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
-#define ACC_CURR_MOVE 0
-
-#define CMP_EQUAL 0x0
-#define CMP_NOT_EQUAL 0x1
-#define CMP_GREATER_THAN 0x2
-#define CMP_LESS_THAN 0x3
-#define CMP_COMMON_BITS 0x4
-#define CMP_NO_COMMON_BITS 0x5
-
-#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
-#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
-#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
-
-#define ATK48_STAT_NEGATIVE 0x1
-#define ATK48_STAT_BY_TWO 0x2
-#define ATK48_BIT_x4 0x4
-#define ATK48_LOWER_FAIL_CHECK 0x8
-
-#define ATK4F_DONT_CHECK_STATUSES 0x80
-
-#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
-#define VARIOUS_SET_MAGIC_COAT_TARGET 1
-#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
-#define VARIOUS_GET_MOVE_TARGET 3
-#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
-#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
-#define VARIOUS_EMIT_YESNOBOX 13
-#define VARIOUS_WAIT_CRY 18
-#define VARIOUS_RETURN_OPPONENT_MON1 19
-#define VARIOUS_RETURN_OPPONENT_MON2 20
-#define VARIOUS_SET_TELEPORT_OUTCOME 25
-#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
-
-#define ATK80_DMG_CHANGE_SIGN 0
-#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
-#define ATK80_DMG_DOUBLED 2
-
-#define STAT_CHANGE_BS_PTR 0x1
-#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
-
-#define STAT_CHANGE_WORKED 0
-#define STAT_CHANGE_DIDNT_WORK 1
-
#define WINDOW_CLEAR 0x1
#define WINDOW_x80 0x80
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index 2e31a37c5..ffd999660 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -82,7 +82,7 @@ extern const u8 BattleScript_SpikesOnAttacker[];
extern const u8 BattleScript_82DAE7A[];
extern const u8 BattleScript_SpikesOnTarget[];
extern const u8 BattleScript_82DAEB1[];
-extern const u8 BattleScript_SpikesOngBank1[];
+extern const u8 BattleScript_SpikesOnFaintedBattler[];
extern const u8 BattleScript_82DAEE8[];
extern const u8 BattleScript_82DAEFE[];
extern const u8 BattleScript_PerishSongTakesLife[];
diff --git a/include/battle_util.h b/include/battle_util.h
index 56628c11d..d992faa47 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -44,7 +44,7 @@
#define BS_GET_PLAYER2 13
#define BS_GET_OPPONENT2 14
-u8 GetBattleBank(u8 caseId);
+u8 GetBattlerForBattleScript(u8 caseId);
void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
void PressurePPLoseOnUsingImprision(u8 bankAtk);
diff --git a/include/calculate_base_damage.h b/include/calculate_base_damage.h
deleted file mode 100644
index e9146c188..000000000
--- a/include/calculate_base_damage.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef GUARD_CALCULATE_BASE_DAMAGE_H
-#define GUARD_CALCULATE_BASE_DAMAGE_H
-
-s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef);
-
-#endif // GUARD_CALCULATE_BASE_DAMAGE_H
diff --git a/include/constants/battle.h b/include/constants/battle.h
new file mode 100644
index 000000000..f3d7a8e0e
--- /dev/null
+++ b/include/constants/battle.h
@@ -0,0 +1,284 @@
+#ifndef GUARD_CONSTANTS_BATTLE_H
+#define GUARD_CONSTANTS_BATTLE_H
+
+/*
+ * A battler may be in one of four positions on the field. The first bit determines
+ * what side the battler is on, either the player's side or the opponent's side.
+ * The second bit determines what flank the battler is on, either the left or right.
+ * Note that the opponent's flanks are drawn corresponding to their perspective, so
+ * their right mon appears on the left, and their left mon appears on the right.
+ * The battler ID is usually the same as the position, except in the case of link battles.
+ *
+ * + ------------------------- +
+ * | Opponent's side |
+ * | Right Left |
+ * | 3 1 |
+ * | |
+ * | Player's side |
+ * | Left Right |
+ * | 0 2 |
+ * ----------------------------+
+ * | |
+ * | |
+ * +---------------------------+
+ */
+
+#define MAX_BATTLERS_COUNT 4
+
+#define B_POSITION_PLAYER_LEFT 0
+#define B_POSITION_OPPONENT_LEFT 1
+#define B_POSITION_PLAYER_RIGHT 2
+#define B_POSITION_OPPONENT_RIGHT 3
+
+// These macros can be used with either battler ID or positions to get the partner or the opposite mon
+#define BATTLE_OPPOSITE(id) ((id) ^ 1)
+#define BATTLE_PARTNER(id) ((id) ^ 2)
+
+#define B_SIDE_PLAYER 0
+#define B_SIDE_OPPONENT 1
+
+#define B_FLANK_LEFT 0
+#define B_FLANK_RIGHT 1
+
+#define BIT_SIDE 1
+#define BIT_FLANK 2
+
+// Battle Type Flags
+#define BATTLE_TYPE_DOUBLE 0x0001
+#define BATTLE_TYPE_LINK 0x0002
+#define BATTLE_TYPE_WILD 0x0004
+#define BATTLE_TYPE_TRAINER 0x0008
+#define BATTLE_TYPE_FIRST_BATTLE 0x0010
+#define BATTLE_TYPE_20 0x0020
+#define BATTLE_TYPE_MULTI 0x0040
+#define BATTLE_TYPE_SAFARI 0x0080
+#define BATTLE_TYPE_BATTLE_TOWER 0x0100
+#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
+#define BATTLE_TYPE_ROAMER 0x0400
+#define BATTLE_TYPE_EREADER_TRAINER 0x0800
+#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
+#define BATTLE_TYPE_LEGENDARY 0x2000
+#define BATTLE_TYPE_REGI 0x4000
+#define BATTLE_TYPE_TWO_OPPONENTS 0x8000
+#define BATTLE_TYPE_DOME 0x10000
+#define BATTLE_TYPE_PALACE 0x20000
+#define BATTLE_TYPE_ARENA 0x40000
+#define BATTLE_TYPE_FACTORY 0x80000
+#define BATTLE_TYPE_PIKE 0x100000
+#define BATTLE_TYPE_PYRAMID 0x200000
+#define BATTLE_TYPE_INGAME_PARTNER 0x400000
+#define BATTLE_TYPE_x800000 0x800000
+#define BATTLE_TYPE_RECORDED 0x1000000
+#define BATTLE_TYPE_x2000000 0x2000000
+#define BATTLE_TYPE_x4000000 0x4000000
+#define BATTLE_TYPE_SECRET_BASE 0x8000000
+#define BATTLE_TYPE_GROUDON 0x10000000
+#define BATTLE_TYPE_KYOGRE 0x20000000
+#define BATTLE_TYPE_RAYQUAZA 0x40000000
+#define BATTLE_TYPE_x80000000 0x80000000
+#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
+#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
+
+// Battle Outcome defines
+#define B_OUTCOME_WON 0x1
+#define B_OUTCOME_LOST 0x2
+#define B_OUTCOME_DREW 0x3
+#define B_OUTCOME_RAN 0x4
+#define B_OUTCOME_PLAYER_TELEPORTED 0x5
+#define B_OUTCOME_MON_FLED 0x6
+#define B_OUTCOME_CAUGHT 0x7
+#define B_OUTCOME_NO_SAFARI_BALLS 0x8
+#define B_OUTCOME_FORFEITED 0x9
+#define B_OUTCOME_MON_TELEPORTED 0xA
+#define B_OUTCOME_LINK_BATTLE_RAN 0x80
+
+// Non-volatile status conditions
+// These persist remain outside of battle and after switching out
+#define STATUS1_NONE 0x0
+#define STATUS1_SLEEP 0x7
+#define STATUS1_POISON 0x8
+#define STATUS1_BURN 0x10
+#define STATUS1_FREEZE 0x20
+#define STATUS1_PARALYSIS 0x40
+#define STATUS1_TOXIC_POISON 0x80
+#define STATUS1_TOXIC_COUNTER 0xF00
+#define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON)
+#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)
+
+// Volatile status ailments
+// These are removed after exiting the battle or switching out
+#define STATUS2_CONFUSION 0x00000007
+#define STATUS2_FLINCHED 0x00000008
+#define STATUS2_UPROAR 0x00000070
+#define STATUS2_BIDE 0x00000300 // two bits 0x100, 0x200
+#define STATUS2_LOCK_CONFUSE 0x00000C00
+#define STATUS2_MULTIPLETURNS 0x00001000
+#define STATUS2_WRAPPED 0x0000E000
+#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler
+#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
+#define STATUS2_FOCUS_ENERGY 0x00100000
+#define STATUS2_TRANSFORMED 0x00200000
+#define STATUS2_RECHARGE 0x00400000
+#define STATUS2_RAGE 0x00800000
+#define STATUS2_SUBSTITUTE 0x01000000
+#define STATUS2_DESTINY_BOND 0x02000000
+#define STATUS2_ESCAPE_PREVENTION 0x04000000
+#define STATUS2_NIGHTMARE 0x08000000
+#define STATUS2_CURSED 0x10000000
+#define STATUS2_FORESIGHT 0x20000000
+#define STATUS2_DEFENSE_CURL 0x40000000
+#define STATUS2_TORMENT 0x80000000
+
+// Seems like per-battler statuses. Not quite sure how to categorize these
+#define STATUS3_LEECHSEED_BANK 0x3
+#define STATUS3_LEECHSEED 0x4
+#define STATUS3_ALWAYS_HITS 0x18 // two bits
+#define STATUS3_PERISH_SONG 0x20
+#define STATUS3_ON_AIR 0x40
+#define STATUS3_UNDERGROUND 0x80
+#define STATUS3_MINIMIZED 0x100
+#define STATUS3_ROOTED 0x400
+#define STATUS3_CHARGED_UP 0x200
+#define STATUS3_YAWN 0x1800 // two bits
+#define STATUS3_IMPRISONED_OTHERS 0x2000
+#define STATUS3_GRUDGE 0x4000
+#define STATUS3_CANT_SCORE_A_CRIT 0x8000
+#define STATUS3_MUDSPORT 0x10000
+#define STATUS3_WATERSPORT 0x20000
+#define STATUS3_UNDERWATER 0x40000
+#define STATUS3_INTIMIDATE_POKES 0x80000
+#define STATUS3_TRACE 0x100000
+#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)
+
+// Not really sure what a "hitmarker" is.
+#define HITMARKER_x10 0x00000010
+#define HITMARKER_x20 0x00000020
+#define HITMARKER_DESTINYBOND 0x00000040
+#define HITMARKER_NO_ANIMATIONS 0x00000080
+#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
+#define HITMARKER_NO_ATTACKSTRING 0x00000200
+#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
+#define HITMARKER_NO_PPDEDUCT 0x00000800
+#define HITMARKER_PURSUIT_TRAP 0x00001000
+#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
+#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
+#define HITMARKER_RUN 0x00008000
+#define HITMARKER_IGNORE_ON_AIR 0x00010000
+#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
+#define HITMARKER_IGNORE_UNDERWATER 0x00040000
+#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
+#define HITMARKER_x100000 0x00100000
+#define HITMARKER_x200000 0x00200000
+#define HITMARKER_x400000 0x00400000
+#define HITMARKER_x800000 0x00800000
+#define HITMARKER_GRUDGE 0x01000000
+#define HITMARKER_OBEYS 0x02000000
+#define HITMARKER_x4000000 0x04000000
+#define HITMARKER_x8000000 0x08000000
+#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
+#define HITMARKER_UNK(battler) (0x10000000 << battler)
+
+// Per-side statuses that affect an entire party
+#define SIDE_STATUS_REFLECT (1 << 0)
+#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
+#define SIDE_STATUS_X4 (1 << 2)
+#define SIDE_STATUS_SPIKES (1 << 4)
+#define SIDE_STATUS_SAFEGUARD (1 << 5)
+#define SIDE_STATUS_FUTUREATTACK (1 << 6)
+#define SIDE_STATUS_MIST (1 << 8)
+#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
+
+// Flags describing move's result
+#define MOVE_RESULT_MISSED (1 << 0)
+#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
+#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
+#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
+#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
+#define MOVE_RESULT_FAILED (1 << 5)
+#define MOVE_RESULT_FOE_ENDURED (1 << 6)
+#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
+#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
+
+// Battle Weather flags
+#define WEATHER_RAIN_TEMPORARY (1 << 0)
+#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
+#define WEATHER_RAIN_PERMANENT (1 << 2)
+#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT)
+#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
+#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
+#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
+#define WEATHER_SUN_TEMPORARY (1 << 5)
+#define WEATHER_SUN_PERMANENT (1 << 6)
+#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
+#define WEATHER_HAIL (1 << 7)
+#define WEATHER_HAIL_ANY (WEATHER_HAIL)
+#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
+
+// Move Effects
+#define MOVE_EFFECT_SLEEP 0x1
+#define MOVE_EFFECT_POISON 0x2
+#define MOVE_EFFECT_BURN 0x3
+#define MOVE_EFFECT_FREEZE 0x4
+#define MOVE_EFFECT_PARALYSIS 0x5
+#define MOVE_EFFECT_TOXIC 0x6
+#define MOVE_EFFECT_CONFUSION 0x7
+#define MOVE_EFFECT_FLINCH 0x8
+#define MOVE_EFFECT_TRI_ATTACK 0x9
+#define MOVE_EFFECT_UPROAR 0xA
+#define MOVE_EFFECT_PAYDAY 0xB
+#define MOVE_EFFECT_CHARGING 0xC
+#define MOVE_EFFECT_WRAP 0xD
+#define MOVE_EFFECT_RECOIL_25 0xE
+#define MOVE_EFFECT_ATK_PLUS_1 0xF
+#define MOVE_EFFECT_DEF_PLUS_1 0x10
+#define MOVE_EFFECT_SPD_PLUS_1 0x11
+#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
+#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
+#define MOVE_EFFECT_ACC_PLUS_1 0x14
+#define MOVE_EFFECT_EVS_PLUS_1 0x15
+#define MOVE_EFFECT_ATK_MINUS_1 0x16
+#define MOVE_EFFECT_DEF_MINUS_1 0x17
+#define MOVE_EFFECT_SPD_MINUS_1 0x18
+#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
+#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
+#define MOVE_EFFECT_ACC_MINUS_1 0x1B
+#define MOVE_EFFECT_EVS_MINUS_1 0x1C
+#define MOVE_EFFECT_RECHARGE 0x1D
+#define MOVE_EFFECT_RAGE 0x1E
+#define MOVE_EFFECT_STEAL_ITEM 0x1F
+#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
+#define MOVE_EFFECT_NIGHTMARE 0x21
+#define MOVE_EFFECT_ALL_STATS_UP 0x22
+#define MOVE_EFFECT_RAPIDSPIN 0x23
+#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
+#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
+#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
+#define MOVE_EFFECT_ATK_PLUS_2 0x27
+#define MOVE_EFFECT_DEF_PLUS_2 0x28
+#define MOVE_EFFECT_SPD_PLUS_2 0x29
+#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
+#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
+#define MOVE_EFFECT_ACC_PLUS_2 0x2C
+#define MOVE_EFFECT_EVS_PLUS_2 0x2D
+#define MOVE_EFFECT_ATK_MINUS_2 0x2E
+#define MOVE_EFFECT_DEF_MINUS_2 0x2F
+#define MOVE_EFFECT_SPD_MINUS_2 0x30
+#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
+#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
+#define MOVE_EFFECT_ACC_MINUS_2 0x33
+#define MOVE_EFFECT_EVS_MINUS_2 0x34
+#define MOVE_EFFECT_THRASH 0x35
+#define MOVE_EFFECT_KNOCK_OFF 0x36
+#define MOVE_EFFECT_NOTHING_37 0x37
+#define MOVE_EFFECT_NOTHING_38 0x38
+#define MOVE_EFFECT_NOTHING_39 0x39
+#define MOVE_EFFECT_NOTHING_3A 0x3A
+#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
+#define MOVE_EFFECT_NOTHING_3C 0x3C
+#define MOVE_EFFECT_NOTHING_3D 0x3D
+#define MOVE_EFFECT_NOTHING_3E 0x3E
+#define MOVE_EFFECT_NOTHING_3F 0x3F
+#define MOVE_EFFECT_AFFECTS_USER 0x40
+#define MOVE_EFFECT_CERTAIN 0x80
+
+#endif // GUARD_CONSTANTS_BATTLE_H
diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h
index 9d89d75f0..7d2c70307 100644
--- a/include/constants/battle_ai.h
+++ b/include/constants/battle_ai.h
@@ -1,7 +1,7 @@
-#ifndef GUARD_BATTLE_AI_H
-#define GUARD_BATTLE_AI_H
+#ifndef GUARD_CONSTANTS_BATTLE_AI_H
+#define GUARD_CONSTANTS_BATTLE_AI_H
-// banks enum
+// battlers
#define AI_TARGET 0
#define AI_USER 1
#define AI_TARGET_PARTNER 2
@@ -22,7 +22,7 @@
#define AI_EFFECTIVENESS_x0_25 10
#define AI_EFFECTIVENESS_x0 0
-// ai weather enum
+// ai weather
#define AI_WEATHER_SUN 0
#define AI_WEATHER_RAIN 1
#define AI_WEATHER_SANDSTORM 2
@@ -49,4 +49,4 @@
#define AI_SCRIPT_SAFARI (1 << 30)
#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
-#endif // GUARD_BATTLE_AI_H
+#endif // GUARD_CONSTANTS_BATTLE_AI_H
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
index de2fbebb1..270ac55e0 100644
--- a/include/constants/battle_anim.h
+++ b/include/constants/battle_anim.h
@@ -1,7 +1,7 @@
#ifndef GUARD_CONSTANTS_BATTLE_ANIM_H
#define GUARD_CONSTANTS_BATTLE_ANIM_H
-// banks enum used in scripts
+// battlers
#define ANIM_ATTACKER 0
#define ANIM_TARGET 1
#define ANIM_ATK_PARTNER 2
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
new file mode 100644
index 000000000..0390f17f4
--- /dev/null
+++ b/include/constants/battle_script_commands.h
@@ -0,0 +1,97 @@
+#ifndef GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
+#define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
+
+// Battle Scripting and BattleCommunication addresses
+#define sPAINSPLIT_HP gBattleScripting
+#define sBIDE_DMG gBattleScripting + 4
+#define sMULTIHIT_STRING gBattleScripting + 8
+#define sDMG_MULTIPLIER gBattleScripting + 0xE
+#define sTWOTURN_STRINGID gBattleScripting + 0xF
+#define sB_ANIM_ARG1 gBattleScripting + 0x10
+#define sB_ANIM_ARG2 gBattleScripting + 0x11
+#define sTRIPLE_KICK_POWER gBattleScripting + 0x12
+#define sMOVEEND_STATE gBattleScripting + 0x14
+#define sBANK_WITH_ABILITY gBattleScripting + 0x15
+#define sMULTIHIT_EFFECT gBattleScripting + 0x16
+#define sBANK gBattleScripting + 0x17
+#define sB_ANIM_TURN gBattleScripting + 0x18
+#define sB_ANIM_TARGETS_HIT gBattleScripting + 0x19
+#define sSTATCHANGER gBattleScripting + 0x1A
+#define sFIELD_1B gBattleScripting + 0x1B
+#define sGIVEEXP_STATE gBattleScripting + 0x1C
+#define sBATTLE_STYLE gBattleScripting + 0x1D
+#define sLVLBOX_STATE gBattleScripting + 0x1E
+#define sLEARNMOVE_STATE gBattleScripting + 0x1F
+#define sFIELD_20 gBattleScripting + 0x20
+#define sRESHOW_MAIN_STATE gBattleScripting + 0x21
+#define sRESHOW_HELPER_STATE gBattleScripting + 0x22
+#define sFIELD_23 gBattleScripting + 0x23
+#define sFIELD_24 gBattleScripting + 0x24
+#define sMULTIPLAYER_ID gBattleScripting + 0x25
+
+#define cEFFECT_CHOOSER gBattleCommunication + 3
+#define cMULTISTRING_CHOOSER gBattleCommunication + 5
+
+// Battle Script defines for getting the wanted battler
+#define BS_TARGET 0
+#define BS_ATTACKER 1
+#define BS_EFFECT_BATTLER 2
+#define BS_FAINTED 3
+#define BS_BANK_0 7
+#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
+#define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability
+#define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
+#define BS_SCRIPTING 10
+#define BS_PLAYER1 11
+#define BS_OPPONENT1 12
+#define BS_PLAYER2 13
+#define BS_OPPONENT2 14
+
+// atk 01, accuracy calc
+#define NO_ACC_CALC 0xFFFE
+#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
+#define ACC_CURR_MOVE 0
+
+// compare operands
+#define CMP_EQUAL 0x0
+#define CMP_NOT_EQUAL 0x1
+#define CMP_GREATER_THAN 0x2
+#define CMP_LESS_THAN 0x3
+#define CMP_COMMON_BITS 0x4
+#define CMP_NO_COMMON_BITS 0x5
+
+// atk76, various
+#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
+#define VARIOUS_SET_MAGIC_COAT_TARGET 1
+#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
+#define VARIOUS_GET_MOVE_TARGET 3
+#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
+#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_EMIT_YESNOBOX 13
+#define VARIOUS_WAIT_CRY 18
+#define VARIOUS_RETURN_OPPONENT_MON1 19
+#define VARIOUS_RETURN_OPPONENT_MON2 20
+#define VARIOUS_SET_TELEPORT_OUTCOME 25
+#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
+
+// atk80, dmg manipulation
+#define ATK80_DMG_CHANGE_SIGN 0
+#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
+#define ATK80_DMG_DOUBLED 2
+
+// atk4F, a flag used for the jumpifcantswitch command
+#define ATK4F_DONT_CHECK_STATUSES 0x80
+
+// statchange defines
+#define STAT_CHANGE_BS_PTR 0x1
+#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
+#define STAT_CHANGE_WORKED 0
+#define STAT_CHANGE_DIDNT_WORK 1
+
+// atk48
+#define ATK48_STAT_NEGATIVE 0x1
+#define ATK48_STAT_BY_TWO 0x2
+#define ATK48_BIT_x4 0x4
+#define ATK48_LOWER_FAIL_CHECK 0x8
+
+#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/battle_string_ids.h b/include/constants/battle_string_ids.h
index f242284b0..db9ed59bd 100644
--- a/include/battle_string_ids.h
+++ b/include/constants/battle_string_ids.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_BATTLE_STRING_IDS_H
-#define GUARD_BATTLE_STRING_IDS_H
+#ifndef GUARD_CONSTANTS_BATTLE_STRING_IDS_H
+#define GUARD_CONSTANTS_BATTLE_STRING_IDS_H
#define BATTLESTRINGS_COUNT 369
@@ -12,7 +12,6 @@
#define STRINGID_USEDMOVE 4
#define STRINGID_BATTLEEND 5
-
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
#define STRINGID_TRAINER1LOSETEXT 12
#define STRINGID_PKMNGAINEDEXP 13
@@ -384,4 +383,4 @@
#define STRINGID_TRAINER1WINTEXT 379
#define STRINGID_TRAINER2WINTEXT 380
-#endif // GUARD_BATTLE_STRING_IDS_H
+#endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H
diff --git a/include/constants/items.h b/include/constants/items.h
index ca6fdbf64..8717ecbd5 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -464,4 +464,7 @@
#define NUM_TECHNICAL_MACHINES 50
#define NUM_HIDDEN_MACHINES 8
+// Check if the item is one that can be used on a Pokemon.
+#define IS_POKEMON_ITEM(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2)
+
#endif // GUARD_CONSTANTS_ITEMS_H
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
new file mode 100644
index 000000000..78c1583b4
--- /dev/null
+++ b/include/constants/pokemon.h
@@ -0,0 +1,80 @@
+#ifndef GUARD_CONSTANTS_POKEMON_H
+#define GUARD_CONSTANTS_POKEMON_H
+
+// Pokemon types
+#define TYPE_NORMAL 0x00
+#define TYPE_FIGHTING 0x01
+#define TYPE_FLYING 0x02
+#define TYPE_POISON 0x03
+#define TYPE_GROUND 0x04
+#define TYPE_ROCK 0x05
+#define TYPE_BUG 0x06
+#define TYPE_GHOST 0x07
+#define TYPE_STEEL 0x08
+#define TYPE_MYSTERY 0x09
+#define TYPE_FIRE 0x0a
+#define TYPE_WATER 0x0b
+#define TYPE_GRASS 0x0c
+#define TYPE_ELECTRIC 0x0d
+#define TYPE_PSYCHIC 0x0e
+#define TYPE_ICE 0x0f
+#define TYPE_DRAGON 0x10
+#define TYPE_DARK 0x11
+#define NUMBER_OF_MON_TYPES 0x12
+
+// Pokemon egg groups
+#define EGG_GROUP_NONE 0
+#define EGG_GROUP_MONSTER 1
+#define EGG_GROUP_WATER_1 2
+#define EGG_GROUP_BUG 3
+#define EGG_GROUP_FLYING 4
+#define EGG_GROUP_FIELD 5
+#define EGG_GROUP_FAIRY 6
+#define EGG_GROUP_GRASS 7
+#define EGG_GROUP_HUMAN_LIKE 8
+#define EGG_GROUP_WATER_3 9
+#define EGG_GROUP_MINERAL 10
+#define EGG_GROUP_AMORPHOUS 11
+#define EGG_GROUP_WATER_2 12
+#define EGG_GROUP_DITTO 13
+#define EGG_GROUP_DRAGON 14
+#define EGG_GROUP_UNDISCOVERED 15
+
+// Pokemon natures
+#define NATURE_HARDY 0
+#define NATURE_LONELY 1
+#define NATURE_BRAVE 2
+#define NATURE_ADAMANT 3
+#define NATURE_NAUGHTY 4
+#define NATURE_BOLD 5
+#define NATURE_DOCILE 6
+#define NATURE_RELAXED 7
+#define NATURE_IMPISH 8
+#define NATURE_LAX 9
+#define NATURE_TIMID 10
+#define NATURE_HASTY 11
+#define NATURE_SERIOUS 12
+#define NATURE_JOLLY 13
+#define NATURE_NAIVE 14
+#define NATURE_MODEST 15
+#define NATURE_MILD 16
+#define NATURE_QUIET 17
+#define NATURE_BASHFUL 18
+#define NATURE_RASH 19
+#define NATURE_CALM 20
+#define NATURE_GENTLE 21
+#define NATURE_SASSY 22
+#define NATURE_CAREFUL 23
+#define NATURE_QUIRKY 24
+
+// Pokemon Stats
+#define STAT_HP 0
+#define STAT_ATK 1
+#define STAT_DEF 2
+#define STAT_SPEED 3
+#define STAT_SPATK 4
+#define STAT_SPDEF 5
+#define STAT_ACC 6 // only in battles
+#define STAT_EVASION 7 // only in battles
+
+#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index 48d4f081e..a017b6975 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -956,13 +956,13 @@
#define FACILITY_CLASS_HIKER 0x0
#define FACILITY_CLASS_TEAM_AQUA_1 0x1
#define FACILITY_CLASS_PKMN_BREEDER_1 0x2
-#define FACILITY_CLASS_COOLTRAINER_1 0x3
+#define FACILITY_CLASS_COOLTRAINER_M 0x3
#define FACILITY_CLASS_BIRD_KEEPER 0x4
#define FACILITY_CLASS_COLLECTOR 0x5
#define FACILITY_CLASS_TEAM_AQUA_2 0x6
#define FACILITY_CLASS_SWIMMER_M 0x7
#define FACILITY_CLASS_TEAM_MAGMA_1 0x8
-#define FACILITY_CLASS_EXPERT_1 0x9
+#define FACILITY_CLASS_EXPERT_M 0x9
#define FACILITY_CLASS_BLACK_BELT 0xa
#define FACILITY_CLASS_AQUA_LEADER 0xb
#define FACILITY_CLASS_HEX_MANIAC 0xc
@@ -971,7 +971,7 @@
#define FACILITY_CLASS_INTERVIEWER 0xf
#define FACILITY_CLASS_TUBER_1 0x10
#define FACILITY_CLASS_TUBER_2 0x11
-#define FACILITY_CLASS_COOLTRAINER_2 0x12
+#define FACILITY_CLASS_COOLTRAINER_F 0x12
#define FACILITY_CLASS_LADY 0x13
#define FACILITY_CLASS_BEAUTY 0x14
#define FACILITY_CLASS_RICH_BOY 0x15
@@ -983,16 +983,16 @@
#define FACILITY_CLASS_CAMPER 0x1b
#define FACILITY_CLASS_PICNICKER 0x1c
#define FACILITY_CLASS_BUG_MANIAC 0x1d
-#define FACILITY_CLASS_PSYCHIC_1 0x1e
-#define FACILITY_CLASS_PSYCHIC_2 0x1f
+#define FACILITY_CLASS_PSYCHIC_M 0x1e
+#define FACILITY_CLASS_PSYCHIC_F 0x1f
#define FACILITY_CLASS_GENTLEMAN 0x20
#define FACILITY_CLASS_ELITE_FOUR_1 0x21
#define FACILITY_CLASS_ELITE_FOUR_2 0x22
#define FACILITY_CLASS_LEADER_1 0x23
#define FACILITY_CLASS_LEADER_2 0x24
#define FACILITY_CLASS_LEADER_3 0x25
-#define FACILITY_CLASS_SCHOOL_KID_1 0x26
-#define FACILITY_CLASS_SCHOOL_KID_2 0x27
+#define FACILITY_CLASS_SCHOOL_KID_M 0x26
+#define FACILITY_CLASS_SCHOOL_KID_F 0x27
#define FACILITY_CLASS_SR_AND_JR 0x28
#define FACILITY_CLASS_POKEFAN_1 0x29
#define FACILITY_CLASS_POKEFAN_2 0x2a
@@ -1013,28 +1013,28 @@
#define FACILITY_CLASS_TWINS 0x39
#define FACILITY_CLASS_SAILOR 0x3a
#define FACILITY_CLASS_PKMN_TRAINER_1 0x3b
-#define FACILITY_CLASS_PKMN_TRAINER_2 0x3c
+#define FACILITY_CLASS_PKMN_TRAINER_MAY 0x3c
#define FACILITY_CLASS_PKMN_TRAINER_3 0x3d
#define FACILITY_CLASS_PKMN_TRAINER_4 0x3e
-#define FACILITY_CLASS_PKMN_TRAINER_5 0x3f
+#define FACILITY_CLASS_PKMN_TRAINER_BRENDAN 0x3f
#define FACILITY_CLASS_PKMN_TRAINER_6 0x40
#define FACILITY_CLASS_PKMN_TRAINER_7 0x41
#define FACILITY_CLASS_PKMN_BREEDER_2 0x42
#define FACILITY_CLASS_BUG_CATCHER 0x43
-#define FACILITY_CLASS_PKMN_RANGER_1 0x44
-#define FACILITY_CLASS_PKMN_RANGER_2 0x45
+#define FACILITY_CLASS_PKMN_RANGER_M 0x44
+#define FACILITY_CLASS_PKMN_RANGER_F 0x45
#define FACILITY_CLASS_MAGMA_LEADER 0x46
#define FACILITY_CLASS_LASS 0x47
#define FACILITY_CLASS_YOUNG_COUPLE 0x48
#define FACILITY_CLASS_OLD_COUPLE 0x49
#define FACILITY_CLASS_SIS_AND_BRO 0x4a
-#define FACILITY_CLASS_PKMN_TRAINER_8 0x4b
+#define FACILITY_CLASS_PKMN_TRAINER_STEVEN 0x4b
#define FACILITY_CLASS_SALON_MAIDEN 0x4c
#define FACILITY_CLASS_DOME_ACE 0x4d
-#define FACILITY_CLASS_PKMN_TRAINER_9 0x4e
-#define FACILITY_CLASS_PKMN_TRAINER_10 0x4f
-#define FACILITY_CLASS_PKMN_TRAINER_11 0x50
-#define FACILITY_CLASS_PKMN_TRAINER_12 0x51
+#define FACILITY_CLASS_PKMN_TRAINER_RED 0x4e
+#define FACILITY_CLASS_PKMN_TRAINER_LEAF 0x4f
+#define FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN 0x50
+#define FACILITY_CLASS_PKMN_TRAINER_RS_MAY 0x51
#define TRAINER_CLASS_PKMN_TRAINER_1 0x0
#define TRAINER_CLASS_PKMN_TRAINER_2 0x1
diff --git a/include/crt0.h b/include/crt0.h
new file mode 100644
index 000000000..3121eeaed
--- /dev/null
+++ b/include/crt0.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_CRT0_H
+#define GUARD_CRT0_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+extern u32 IntrMain[];
+
+#endif //GUARD_CRT0_H
diff --git a/include/data/pokemon/trainer_class_lookups.h b/include/data/pokemon/trainer_class_lookups.h
index 2ffe9cd85..ec4dbf0fb 100644
--- a/include/data/pokemon/trainer_class_lookups.h
+++ b/include/data/pokemon/trainer_class_lookups.h
@@ -6,13 +6,13 @@ const u8 gFacilityClassToPicIndex[] =
TRAINER_PIC_HIKER, // FACILITY_CLASS_HIKER
TRAINER_PIC_AQUA_GRUNT_M, // FACILITY_CLASS_TEAM_AQUA_1
TRAINER_PIC_POKEMON_BREEDER_F, // FACILITY_CLASS_PKMN_BREEDER_1
- TRAINER_PIC_COOL_TRAINER_M, // FACILITY_CLASS_COOLTRAINER_1
+ TRAINER_PIC_COOL_TRAINER_M, // FACILITY_CLASS_COOLTRAINER_M
TRAINER_PIC_BIRD_KEEPER, // FACILITY_CLASS_BIRD_KEEPER
TRAINER_PIC_COLLECTOR, // FACILITY_CLASS_COLLECTOR
TRAINER_PIC_AQUA_GRUNT_F, // FACILITY_CLASS_TEAM_AQUA_2
TRAINER_PIC_SWIMMER_M, // FACILITY_CLASS_SWIMMER_M
TRAINER_PIC_MAGMA_GRUNT_M, // FACILITY_CLASS_TEAM_MAGMA_1
- TRAINER_PIC_EXPERT_M, // FACILITY_CLASS_EXPERT_1
+ TRAINER_PIC_EXPERT_M, // FACILITY_CLASS_EXPERT_M
TRAINER_PIC_BLACK_BELT, // FACILITY_CLASS_BLACK_BELT
TRAINER_PIC_AQUA_LEADER_ARCHIE, // FACILITY_CLASS_AQUA_LEADER
TRAINER_PIC_HEX_MANIAC, // FACILITY_CLASS_HEX_MANIAC
@@ -21,7 +21,7 @@ const u8 gFacilityClassToPicIndex[] =
TRAINER_PIC_INTERVIEWER, // FACILITY_CLASS_INTERVIEWER
TRAINER_PIC_TUBER_F, // FACILITY_CLASS_TUBER_1
TRAINER_PIC_TUBER_M, // FACILITY_CLASS_TUBER_2
- TRAINER_PIC_COOL_TRAINER_F, // FACILITY_CLASS_COOLTRAINER_2
+ TRAINER_PIC_COOL_TRAINER_F, // FACILITY_CLASS_COOLTRAINER_F
TRAINER_PIC_LADY, // FACILITY_CLASS_LADY
TRAINER_PIC_BEAUTY, // FACILITY_CLASS_BEAUTY
TRAINER_PIC_RICH_BOY, // FACILITY_CLASS_RICH_BOY
@@ -33,16 +33,16 @@ const u8 gFacilityClassToPicIndex[] =
TRAINER_PIC_CAMPER, // FACILITY_CLASS_CAMPER
TRAINER_PIC_PICNICKER, // FACILITY_CLASS_PICNICKER
TRAINER_PIC_BUG_MANIAC, // FACILITY_CLASS_BUG_MANIAC
- TRAINER_PIC_PSYCHIC_M, // FACILITY_CLASS_PSYCHIC_1
- TRAINER_PIC_PSYCHIC_F, // FACILITY_CLASS_PSYCHIC_2
+ TRAINER_PIC_PSYCHIC_M, // FACILITY_CLASS_PSYCHIC_M
+ TRAINER_PIC_PSYCHIC_F, // FACILITY_CLASS_PSYCHIC_F
TRAINER_PIC_GENTLEMAN, // FACILITY_CLASS_GENTLEMAN
TRAINER_PIC_ELITE_FOUR_SIDNEY, // FACILITY_CLASS_ELITE_FOUR_1
TRAINER_PIC_ELITE_FOUR_PHOEBE, // FACILITY_CLASS_ELITE_FOUR_2
TRAINER_PIC_LEADER_ROXANNE, // FACILITY_CLASS_LEADER_1
TRAINER_PIC_LEADER_BRAWLY, // FACILITY_CLASS_LEADER_2
TRAINER_PIC_LEADER_TATE_AND_LIZA, // FACILITY_CLASS_LEADER_3
- TRAINER_PIC_SCHOOL_KID_M, // FACILITY_CLASS_SCHOOL_KID_1
- TRAINER_PIC_SCHOOL_KID_F, // FACILITY_CLASS_SCHOOL_KID_2
+ TRAINER_PIC_SCHOOL_KID_M, // FACILITY_CLASS_SCHOOL_KID_M
+ TRAINER_PIC_SCHOOL_KID_F, // FACILITY_CLASS_SCHOOL_KID_F
TRAINER_PIC_SR_AND_JR, // FACILITY_CLASS_SR_AND_JR
TRAINER_PIC_WINSTRATE_M, // FACILITY_CLASS_POKEFAN_1
TRAINER_PIC_WINSTRATE_F, // FACILITY_CLASS_POKEFAN_2
@@ -63,28 +63,28 @@ const u8 gFacilityClassToPicIndex[] =
TRAINER_PIC_TWINS, // FACILITY_CLASS_TWINS
TRAINER_PIC_SAILOR, // FACILITY_CLASS_SAILOR
TRAINER_PIC_WALLY, // FACILITY_CLASS_PKMN_TRAINER_1
- TRAINER_PIC_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_2
+ TRAINER_PIC_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_MAY
TRAINER_PIC_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_3
TRAINER_PIC_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_4
- TRAINER_PIC_MAY, // FACILITY_CLASS_PKMN_TRAINER_5
+ TRAINER_PIC_MAY, // FACILITY_CLASS_PKMN_TRAINER_BRENDAN
TRAINER_PIC_MAY, // FACILITY_CLASS_PKMN_TRAINER_6
TRAINER_PIC_MAY, // FACILITY_CLASS_PKMN_TRAINER_7
TRAINER_PIC_POKEMON_BREEDER_M, // FACILITY_CLASS_PKMN_BREEDER_2
TRAINER_PIC_BUG_CATCHER, // FACILITY_CLASS_BUG_CATCHER
- TRAINER_PIC_POKEMON_RANGER_M, // FACILITY_CLASS_PKMN_RANGER_1
- TRAINER_PIC_POKEMON_RANGER_F, // FACILITY_CLASS_PKMN_RANGER_2
+ TRAINER_PIC_POKEMON_RANGER_M, // FACILITY_CLASS_PKMN_RANGER_M
+ TRAINER_PIC_POKEMON_RANGER_F, // FACILITY_CLASS_PKMN_RANGER_F
TRAINER_PIC_MAGMA_LEADER_MAXIE, // FACILITY_CLASS_MAGMA_LEADER
TRAINER_PIC_LASS, // FACILITY_CLASS_LASS
TRAINER_PIC_YOUNG_COUPLE, // FACILITY_CLASS_YOUNG_COUPLE
TRAINER_PIC_OLD_COUPLE, // FACILITY_CLASS_OLD_COUPLE
TRAINER_PIC_SIS_AND_BRO, // FACILITY_CLASS_SIS_AND_BRO
- TRAINER_PIC_STEVEN, // FACILITY_CLASS_PKMN_TRAINER_8
+ TRAINER_PIC_STEVEN, // FACILITY_CLASS_PKMN_TRAINER_STEVEN
TRAINER_PIC_SALON_MAIDEN_ANABEL, // FACILITY_CLASS_SALON_MAIDEN
TRAINER_PIC_DOME_ACE_TUCKER, // FACILITY_CLASS_DOME_ACE
- TRAINER_PIC_RED, // FACILITY_CLASS_PKMN_TRAINER_9
- TRAINER_PIC_LEAF, // FACILITY_CLASS_PKMN_TRAINER_10
- TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_11
- TRAINER_PIC_RUBY_SAPPHIRE_MAY, // FACILITY_CLASS_PKMN_TRAINER_12
+ TRAINER_PIC_RED, // FACILITY_CLASS_PKMN_TRAINER_RED
+ TRAINER_PIC_LEAF, // FACILITY_CLASS_PKMN_TRAINER_LEAF
+ TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN
+ TRAINER_PIC_RUBY_SAPPHIRE_MAY, // FACILITY_CLASS_PKMN_TRAINER_RS_MAY
};
const u8 gFacilityClassToTrainerClass[] =
@@ -92,13 +92,13 @@ const u8 gFacilityClassToTrainerClass[] =
TRAINER_CLASS_HIKER, // FACILITY_CLASS_HIKER
TRAINER_CLASS_TEAM_AQUA, // FACILITY_CLASS_TEAM_AQUA_1
TRAINER_CLASS_PKMN_BREEDER, // FACILITY_CLASS_PKMN_BREEDER_1
- TRAINER_CLASS_COOLTRAINER_1, // FACILITY_CLASS_COOLTRAINER_1
+ TRAINER_CLASS_COOLTRAINER_1, // FACILITY_CLASS_COOLTRAINER_M
TRAINER_CLASS_BIRD_KEEPER, // FACILITY_CLASS_BIRD_KEEPER
TRAINER_CLASS_COLLECTOR, // FACILITY_CLASS_COLLECTOR
TRAINER_CLASS_TEAM_AQUA, // FACILITY_CLASS_TEAM_AQUA_2
TRAINER_CLASS_SWIMMER_M, // FACILITY_CLASS_SWIMMER_M
TRAINER_CLASS_TEAM_MAGMA, // FACILITY_CLASS_TEAM_MAGMA_1
- TRAINER_CLASS_EXPERT, // FACILITY_CLASS_EXPERT_1
+ TRAINER_CLASS_EXPERT, // FACILITY_CLASS_EXPERT_M
TRAINER_CLASS_BLACK_BELT, // FACILITY_CLASS_BLACK_BELT
TRAINER_CLASS_AQUA_LEADER, // FACILITY_CLASS_AQUA_LEADER
TRAINER_CLASS_HEX_MANIAC, // FACILITY_CLASS_HEX_MANIAC
@@ -107,7 +107,7 @@ const u8 gFacilityClassToTrainerClass[] =
TRAINER_CLASS_INTERVIEWER, // FACILITY_CLASS_INTERVIEWER
TRAINER_CLASS_TUBER_1, // FACILITY_CLASS_TUBER_1
TRAINER_CLASS_TUBER_2, // FACILITY_CLASS_TUBER_2
- TRAINER_CLASS_COOLTRAINER_1, // FACILITY_CLASS_COOLTRAINER_2
+ TRAINER_CLASS_COOLTRAINER_1, // FACILITY_CLASS_COOLTRAINER_F
TRAINER_CLASS_LADY, // FACILITY_CLASS_LADY
TRAINER_CLASS_BEAUTY, // FACILITY_CLASS_BEAUTY
TRAINER_CLASS_RICH_BOY, // FACILITY_CLASS_RICH_BOY
@@ -119,16 +119,16 @@ const u8 gFacilityClassToTrainerClass[] =
TRAINER_CLASS_CAMPER, // FACILITY_CLASS_CAMPER
TRAINER_CLASS_PICNICKER, // FACILITY_CLASS_PICNICKER
TRAINER_CLASS_BUG_MANIAC, // FACILITY_CLASS_BUG_MANIAC
- TRAINER_CLASS_PSYCHIC, // FACILITY_CLASS_PSYCHIC_1
- TRAINER_CLASS_PSYCHIC, // FACILITY_CLASS_PSYCHIC_2
+ TRAINER_CLASS_PSYCHIC, // FACILITY_CLASS_PSYCHIC_M
+ TRAINER_CLASS_PSYCHIC, // FACILITY_CLASS_PSYCHIC_F
TRAINER_CLASS_GENTLEMAN, // FACILITY_CLASS_GENTLEMAN
TRAINER_CLASS_ELITE_FOUR, // FACILITY_CLASS_ELITE_FOUR_1
TRAINER_CLASS_ELITE_FOUR, // FACILITY_CLASS_ELITE_FOUR_2
TRAINER_CLASS_LEADER, // FACILITY_CLASS_LEADER_1
TRAINER_CLASS_LEADER, // FACILITY_CLASS_LEADER_2
TRAINER_CLASS_LEADER, // FACILITY_CLASS_LEADER_3
- TRAINER_CLASS_SCHOOL_KID, // FACILITY_CLASS_SCHOOL_KID_1
- TRAINER_CLASS_SCHOOL_KID, // FACILITY_CLASS_SCHOOL_KID_2
+ TRAINER_CLASS_SCHOOL_KID, // FACILITY_CLASS_SCHOOL_KID_M
+ TRAINER_CLASS_SCHOOL_KID, // FACILITY_CLASS_SCHOOL_KID_F
TRAINER_CLASS_SR_AND_JR, // FACILITY_CLASS_SR_AND_JR
TRAINER_CLASS_POKEFAN, // FACILITY_CLASS_POKEFAN_1
TRAINER_CLASS_POKEFAN, // FACILITY_CLASS_POKEFAN_2
@@ -149,28 +149,28 @@ const u8 gFacilityClassToTrainerClass[] =
TRAINER_CLASS_TWINS, // FACILITY_CLASS_TWINS
TRAINER_CLASS_SAILOR, // FACILITY_CLASS_SAILOR
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_1
- TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_2
+ TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_MAY
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_3
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_4
- TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_5
+ TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_BRENDAN
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_6
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_7
TRAINER_CLASS_PKMN_BREEDER, // FACILITY_CLASS_PKMN_BREEDER_2
TRAINER_CLASS_BUG_CATCHER, // FACILITY_CLASS_BUG_CATCHER
- TRAINER_CLASS_PKMN_RANGER, // FACILITY_CLASS_PKMN_RANGER_1
- TRAINER_CLASS_PKMN_RANGER, // FACILITY_CLASS_PKMN_RANGER_2
+ TRAINER_CLASS_PKMN_RANGER, // FACILITY_CLASS_PKMN_RANGER_M
+ TRAINER_CLASS_PKMN_RANGER, // FACILITY_CLASS_PKMN_RANGER_F
TRAINER_CLASS_MAGMA_LEADER, // FACILITY_CLASS_MAGMA_LEADER
TRAINER_CLASS_LASS, // FACILITY_CLASS_LASS
TRAINER_CLASS_YOUNG_COUPLE, // FACILITY_CLASS_YOUNG_COUPLE
TRAINER_CLASS_OLD_COUPLE, // FACILITY_CLASS_OLD_COUPLE
TRAINER_CLASS_SIS_AND_BRO, // FACILITY_CLASS_SIS_AND_BRO
- TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_8
+ TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_STEVEN
TRAINER_CLASS_SALON_MAIDEN, // FACILITY_CLASS_SALON_MAIDEN
TRAINER_CLASS_DOME_ACE, // FACILITY_CLASS_DOME_ACE
- TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_9
- TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_10
- TRAINER_CLASS_PKMN_TRAINER_4, // FACILITY_CLASS_PKMN_TRAINER_11
- TRAINER_CLASS_PKMN_TRAINER_4, // FACILITY_CLASS_PKMN_TRAINER_12
+ TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_RED
+ TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_LEAF
+ TRAINER_CLASS_PKMN_TRAINER_4, // FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN
+ TRAINER_CLASS_PKMN_TRAINER_4, // FACILITY_CLASS_PKMN_TRAINER_RS_MAY
};
#endif //POKEEMERALD_TRAINER_CLASS_LOOKUPS_H
diff --git a/include/decompress.h b/include/decompress.h
index 34a678cda..b7515250a 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -28,6 +28,7 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32
void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic);
void LoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic);
+extern u8 gDecompressionBuffer[];
u32 sub_8034974(const u8 *ptr);
#endif // GUARD_DECOMPRESS_H
diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h
index 031c7a8ab..ae96b67d8 100644
--- a/include/field_map_obj_helpers.h
+++ b/include/field_map_obj_helpers.h
@@ -27,5 +27,6 @@ void sub_8098044(u8);
void UnfreezeMapObjects(void);
void FreezeMapObjectsExceptOne(u8 mapObjectId);
void sub_8097B78(u8, u8);
+void FreezeMapObjects(void);
#endif //GUARD_FIELD_MAP_OBJ_HELPERS_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index af602245b..5b9a632fa 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -31,6 +31,8 @@ u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e);
u8 PlayerGetZCoord(void);
void SetPlayerAvatarTransitionFlags(u16 a);
void sub_808BCE8(void);
+void sub_808B864(void);
+void sub_808BCF4(void);
void sub_808D074(u8);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
diff --git a/include/field_specials.h b/include/field_specials.h
index dd72bdd13..c1f70a399 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -4,5 +4,6 @@
u8 GetLeadMonIndex(void);
u8 sub_813B260(void);
u16 get_unknown_box_id(void);
+bool8 InMultiBattleRoom(void);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 0364c38bc..1847b688f 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -623,6 +623,23 @@
#define TIMER_INTR_ENABLE 0x40
#define TIMER_ENABLE 0x80
+// BGCNT
+#define BGCNT_PRIORITY(n) (n) // Values 0 - 3. Lower priority BGs will be drawn on top of higher priority BGs.
+#define BGCNT_CHARBASE(n) ((n) << 2) // Values 0 - 3. Base block for tile pixel data.
+#define BGCNT_MOSAIC 0x0040
+#define BGCNT_16COLOR 0x0000 // 4 bits per pixel
+#define BGCNT_256COLOR 0x0080 // 8 bits per pixel
+#define BGCNT_SCREENBASE(n) ((n) << 8) // Values 0 - 31. Base block for tile map.
+#define BGCNT_WRAP 0x2000 // Only affects affine BGs. Text BGs wrap by default.
+#define BGCNT_TXT256x256 0x0000 // Internal screen size size of text mode BG in pixels.
+#define BGCNT_TXT512x256 0x4000
+#define BGCNT_TXT256x512 0x8000
+#define BGCNT_TXT512x512 0xC000
+#define BGCNT_AFF128x128 0x0000 // Internal screen size size of affine mode BG in pixels.
+#define BGCNT_AFF256x256 0x4000
+#define BGCNT_AFF512x512 0x8000
+#define BGCNT_AFF1024x1024 0xC000
+
// serial
#define SIO_ID 0x0030 // Communication ID
diff --git a/include/global.h b/include/global.h
index 0e5615eb0..4a71a8a87 100644
--- a/include/global.h
+++ b/include/global.h
@@ -11,6 +11,7 @@
// to help in decompiling
#define asm_comment(x) asm volatile("@ -- " x " -- ")
#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided")
+#define ASM_DIRECT __attribute__((naked))
// IDE support
#if defined (__APPLE__) || defined (__CYGWIN__)
@@ -87,6 +88,7 @@ enum LanguageId
LANGUAGE_SPANISH = 7,
};
+#define GAME_VERSION (VERSION_EMERALD)
#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
enum
@@ -605,6 +607,11 @@ struct WaldaPhrase
bool8 patternUnlocked;
};
+struct UnkSaveSubstruct_3b98 {
+ u32 trainerId;
+ u8 trainerName[8];
+};
+
struct SaveBlock1
{
/*0x00*/ struct Coords16 pos;
@@ -689,7 +696,9 @@ struct SaveBlock1
/*0x3B14*/ struct RecordMixingGift recordMixingGift;
/*0x3B24*/ u8 seen2[52];
/*0x3B58*/ LilycoveLady lilycoveLady;
- /*0x3B88*/ u8 filler_3B88[0x1E8];
+ /*0x3B88*/ u8 filler_3B88[0x10];
+ /*0x3B98*/ struct UnkSaveSubstruct_3b98 unk_3B98[20];
+ /*0x3C88*/ u8 filler_3C88[0xE8];
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
// sizeof: 0x3D88
};
diff --git a/include/graphics.h b/include/graphics.h
index 4eac25856..6e5de9ef4 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2713,19 +2713,16 @@ extern const u8 gRaySceneHushBg_Pal[];
extern const u8 gRaySceneHushBg_Gfx[];
extern const u8 gRaySceneHushRing_Gfx[];
-//main menu/birch graphics
-extern const u16 gMainMenuBgPal[];
-extern const u16 gMainMenuTextPal[];
-extern const u16 gUnknown_082FECFC[];
-extern const u16 gUnknown_082FF028[];
-extern const u16 gUnknown_082FF018[];
-extern const u8 gBirchIntroShadowGfx[];
-extern const u8 gUnknown_082FEEF0[];
-
//menu graphics
extern const u16 gFireRedMenuElements1_Pal[16];
extern const u16 gFireRedMenuElements2_Pal[16];
extern const u16 gFireRedMenuElements3_Pal[16];
extern const u8 gFireRedMenuElements_Gfx[];
+//item menu graphics
+extern const u8 gBagScreen_Gfx[];
+extern const u16 gBagScreenFemale_Pal[];
+extern const u16 gBagScreenMale_Pal[];
+extern const u8 gBagMenuHMIcon_Gfx[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/intro.h b/include/intro.h
index 53a446418..aae3438fe 100644
--- a/include/intro.h
+++ b/include/intro.h
@@ -1,6 +1,12 @@
#ifndef GUARD_INTRO_H
#define GUARD_INTRO_H
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void c2_copyright_1(void);
void CB2_InitCopyrightScreenAfterBootup(void);
void CB2_InitCopyrightScreenAfterTitleScreen(void);
void sub_816F2A8(u16, u16, u16, u16);
diff --git a/include/item.h b/include/item.h
index 06eb08046..d81a3de33 100644
--- a/include/item.h
+++ b/include/item.h
@@ -61,5 +61,8 @@ ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
u8 ItemId_GetSecondaryId(u16 itemId);
u16 itemid_get_market_price(u16 itemId);
u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 pocketPos);
+void sub_80D6FB4(struct BagPocket*);
+void sub_80D6F64(struct BagPocket*);
+void sub_80D702C(struct ItemSlot*, s16, u16);
#endif // ITEM_H
diff --git a/include/item_menu.h b/include/item_menu.h
index 0ddd6766b..5c1b26faa 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -17,6 +17,8 @@ extern struct BagStruct gUnknown_0203CE58;
// Exported RAM declarations
+extern u16 gSpecialVar_ItemId;
+
// Exported ROM declarations
void sub_81AAC50(void);
void sub_81AAC70(void);
diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h
index c3932390c..56e012421 100644
--- a/include/item_menu_icons.h
+++ b/include/item_menu_icons.h
@@ -8,5 +8,9 @@ u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3);
u8 CreateBerryTagSprite(u8 id, s16 x, s16 y);
void FreeBerryTagSpritePalette(void);
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/item_use.h b/include/item_use.h
index ee7939824..6f84a63df 100644
--- a/include/item_use.h
+++ b/include/item_use.h
@@ -50,5 +50,6 @@ void ItemUseOutOfBattle_EnigmaBerry(u8);
void ItemUseInBattle_EnigmaBerry(u8);
void ItemUseOutOfBattle_CannotUse(u8);
u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId);
+void sub_80FDD10(u8);
#endif // GUARD_ITEM_USE_H
diff --git a/include/librfu.h b/include/librfu.h
index dbc8a41a6..aae7df4e9 100644
--- a/include/librfu.h
+++ b/include/librfu.h
@@ -67,6 +67,28 @@ union RfuPacket
struct RfuPacket8 rfuPacket8;
};
+struct __attribute__((packed)) UnkLinkRfuStruct_02022B14
+{
+ u16 unk_00_0:4;
+ u16 unk_00_4:1;
+ u16 unk_00_5:1;
+ u16 unk_00_6:1;
+ u16 unk_00_7:1;
+ u16 unk_01_0:1;
+ u16 unk_01_1:1;
+ u16 unk_01_2:4;
+ u16 unk_01_6:2;
+ u8 playerTrainerId[2];
+ u8 unk_04[4];
+ u16 unk_08_0:10;
+ u16 unk_09_2:6;
+ u8 unk_0a_0:7;
+ u8 unk_0a_7:1;
+ u8 playerGender:1;
+ u8 unk_0b_1:7;
+ u8 unk_0c;
+};
+
struct RfuStruct
{
vs32 unk_0;
@@ -103,6 +125,127 @@ struct RfuIntrStruct
u8 block2[0x30];
};
+struct RfuUnk1
+{
+ u16 unk_0;
+ u8 unk_2;
+ u8 unk_3;
+ u8 fill_4[14];
+ u8 unk_12;
+ u32 unk_14;
+ u32 unk_18;
+ struct RfuIntrStruct unk_1c;
+};
+
+struct RfuUnk2
+{
+ u16 unk_0;
+ u16 unk_2;
+ u8 fill_4[0x16];
+ u8 unk_1a;
+ u8 fill_1b[0x19];
+ u16 unk_34;
+ u16 unk_36;
+ u8 fill_38[0x16];
+ u8 unk_4e;
+ u8 fill_4f[0x12];
+ u8 unk_61;
+ u8 fill_62[6];
+ void *unk_68;
+ void *unk_6c;
+ u8 unk_70[0x70];
+};
+
+struct RfuUnk3
+{
+ u32 unk_0;
+ u32 unk_4;
+ u8 unk_8[0xD4];
+ u32 unk_dc;
+};
+
+struct RfuUnk5Sub {
+ u16 unk_00;
+ u8 unk_02;
+ u16 unk_04;
+ struct UnkLinkRfuStruct_02022B14 unk_06;
+ u8 fill_13[2];
+ u8 unk_15[8];
+};
+
+struct RfuUnk5
+{
+ u8 unk_00;
+ u8 unk_01;
+ u8 unk_02;
+ u8 unk_03;
+ u8 unk_04;
+ u8 unk_05;
+ u8 unk_06;
+ u8 unk_07;
+ u8 unk_08;
+ u8 filler_09[1];
+ u8 unk_0a[4];
+ u8 filler_0e[6];
+ struct RfuUnk5Sub unk_14[4];
+};
+
extern struct RfuStruct *gRfuState;
+extern struct RfuUnk5 *gUnknown_03007890;
+extern u32 *gUnknown_03007894;
+extern struct RfuUnk3* gUnknown_03007898;
+extern struct RfuUnk2* gUnknown_03007880[4];
+extern struct RfuUnk1* gUnknown_03007870[4];
+extern void* sub_82E53F4;
+extern void rfu_STC_clearAPIVariables(void);
+
+struct UnkLinkRfuStruct_02022B14;
+
void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam);
+void rfu_REQ_stopMode(void);
+void rfu_waitREQComplete(void);
+u32 rfu_REQBN_softReset_and_checkID(void);
+void rfu_REQ_sendData(u8);
+void rfu_setMSCCallback(void (*func)(u16));
+void rfu_setREQCallback(void (*func)(u16, u16));
+bool8 rfu_getMasterSlave(void);
+void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3);
+bool16 rfu_syncVBlank(void);
+void rfu_REQ_reset(void);
+void rfu_REQ_configSystem(u16, u8, u8);
+void rfu_REQ_configGameData(u8, u16, struct UnkLinkRfuStruct_02022B14 *, u8 *);
+void rfu_REQ_startSearchChild(void);
+void rfu_REQ_pollSearchChild(void);
+void rfu_REQ_endSearchChild(void);
+void rfu_REQ_startSearchParent(void);
+void rfu_REQ_pollSearchParent(void);
+void rfu_REQ_endSearchParent(void);
+void rfu_REQ_startConnectParent(u16);
+void rfu_REQ_pollConnectParent(void);
+void rfu_REQ_endConnectParent(void);
+void rfu_REQ_CHILD_startConnectRecovery(u8);
+void rfu_REQ_CHILD_pollConnectRecovery(void);
+void rfu_REQ_CHILD_endConnectRecovery(void);
+void rfu_REQ_changeMasterSlave(void);
+void rfu_REQ_RFUStatus(void);
+void rfu_getRFUStatus(u8 *status);
+u8 *rfu_getSTWIRecvBuffer(void);
+u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1);
+void rfu_clearSlot(u8 a0, u8 a1);
+void rfu_clearAllSlot(void);
+bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status);
+bool16 rfu_getConnectParentStatus(u8 *status, u8 *a1);
+bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0);
+void rfu_REQ_disconnect(u8 who);
+void rfu_changeSendTarget(u8 a0, u8 who, u8 a2);
+void rfu_NI_stopReceivingData(u8 who);
+u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam);
+void rfu_setTimerInterrupt(u8 which, IntrFunc *intr);
+void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3);
+bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size);
+void rfu_REQ_recvData(void);
+void rfu_UNI_readySendData(u8 a0);
+void rfu_UNI_clearRecvNewDataFlag(u8 a0);
+void rfu_REQ_PARENT_resumeRetransmitAndChange(void);
+void rfu_NI_setSendData(u8, u8, u8 *, u8);
diff --git a/include/link.h b/include/link.h
index 202e2a4d7..0fa4d39c2 100644
--- a/include/link.h
+++ b/include/link.h
@@ -7,6 +7,9 @@
#define QUEUE_CAPACITY 50
#define BLOCK_BUFFER_SIZE 0x100
+#define LINK_SLAVE 0
+#define LINK_MASTER 8
+
#define LINK_STAT_LOCAL_ID 0x00000003
#define LINK_STAT_PLAYER_COUNT 0x0000001C
#define LINK_STAT_PLAYER_COUNT_SHIFT 2
@@ -16,7 +19,23 @@
#define LINK_STAT_CONN_ESTABLISHED_SHIFT 6
#define LINK_STAT_RECEIVED_NOTHING 0x00000100
#define LINK_STAT_RECEIVED_NOTHING_SHIFT 8
+#define LINK_STAT_UNK_FLAG_9 0x00000200
+#define LINK_STAT_UNK_FLAG_9_SHIFT 9
#define LINK_STAT_ERRORS 0x0007F000
+#define LINK_STAT_ERRORS_SHIFT 12
+
+#define LINK_STAT_ERROR_HARDWARE 0x00001000
+#define LINK_STAT_ERROR_HARDWARE_SHIFT 12
+#define LINK_STAT_ERROR_CHECKSUM 0x00002000
+#define LINK_STAT_ERROR_CHECKSUM_SHIFT 13
+#define LINK_STAT_ERROR_QUEUE_FULL 0x00004000
+#define LINK_STAT_ERROR_QUEUE_FULL_SHIFT 14
+#define LINK_STAT_ERROR_LAG_MASTER 0x00010000
+#define LINK_STAT_ERROR_LAG_MASTER_SHIFT 16
+#define LINK_STAT_ERROR_INVALID_ID 0x00020000
+#define LINK_STAT_ERROR_INVALID_ID_SHIFT 17
+#define LINK_STAT_ERROR_LAG_SLAVE 0x00040000
+#define LINK_STAT_ERROR_LAG_SLAVE_SHIFT 18
#define EXTRACT_PLAYER_COUNT(status) \
(((status) & LINK_STAT_PLAYER_COUNT) >> LINK_STAT_PLAYER_COUNT_SHIFT)
@@ -26,10 +45,41 @@
(((status) >> LINK_STAT_CONN_ESTABLISHED_SHIFT) & 1)
#define EXTRACT_RECEIVED_NOTHING(status) \
(((status) >> LINK_STAT_RECEIVED_NOTHING_SHIFT) & 1)
+#define EXTRACT_LINK_ERRORS(status) \
+(((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT)
+
+#define LINKCMD_SEND_LINK_TYPE 0x2222
+#define LINKCMD_0x2FFE 0x2FFE
+#define LINKCMD_SEND_HELD_KEYS 0x4444
+#define LINKCMD_0x5555 0x5555
+#define LINKCMD_0x5566 0x5566
+#define LINKCMD_0x5FFF 0x5FFF
+#define LINKCMD_0x6666 0x6666
+#define LINKCMD_0x7777 0x7777
+#define LINKCMD_CONT_BLOCK 0x8888
+#define LINKCMD_0xAAAA 0xAAAA
+#define LINKCMD_0xAAAB 0xAAAB
+#define LINKCMD_INIT_BLOCK 0xBBBB
+#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE
+#define LINKCMD_0xCCCC 0xCCCC
+
+struct LinkStatus
+{
+ u32 localId:2;
+ u32 playerCount:3;
+ u32 master:1;
+ u32 connEstablished:1;
+ u32 unused_7:1;
+ u32 receivedNothing:1;
+ u32 unused_9:7;
+ u32 errors:7;
+};
#define MASTER_HANDSHAKE 0x8FFF
#define SLAVE_HANDSHAKE 0xB9A0
+#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT)
+
enum
{
LINK_STATE_START0,
@@ -45,6 +95,9 @@ enum
EXCHANGE_COMPLETE,
EXCHANGE_TIMED_OUT,
EXCHANGE_IN_PROGRESS,
+ EXCHANGE_STAT_4,
+ EXCHANGE_STAT_5,
+ EXCHANGE_STAT_6
};
enum
@@ -75,18 +128,18 @@ struct LinkPlayer
struct LinkPlayerBlock
{
- u8 magic1[16];
+ char magic1[16];
struct LinkPlayer linkPlayer;
- u8 magic2[16];
+ char magic2[16];
};
// circular queues
struct SendQueue
{
- u16 data[CMD_LENGTH][QUEUE_CAPACITY];
- u8 pos;
- u8 count;
+ /* 0x000 */ u16 data[CMD_LENGTH][QUEUE_CAPACITY];
+ /* 0x320 */ u8 pos;
+ /* 0x321 */ u8 count;
};
struct RecvQueue
@@ -98,29 +151,29 @@ struct RecvQueue
struct Link
{
- u8 isMaster; // 0: slave, 8: master
- u8 state;
- u8 localId; // local multi-player ID
- u8 playerCount;
- u16 tempRecvBuffer[4];
- bool8 receivedNothing;
- s8 serialIntrCounter;
- bool8 handshakeAsMaster;
- u8 link_field_F;
+ /* 0x000 */ u8 isMaster; // 0: slave, 8: master
+ /* 0x001 */ u8 state;
+ /* 0x002 */ u8 localId; // local multi-player ID
+ /* 0x003 */ u8 playerCount;
+ /* 0x004 */ u16 tempRecvBuffer[4];
+ /* 0x00c */ bool8 receivedNothing;
+ /* 0x00d */ s8 serialIntrCounter;
+ /* 0x00e */ bool8 handshakeAsMaster;
+ /* 0x00f */ u8 link_field_F;
// error conditions
- bool8 hardwareError; // hardware reported an error
- bool8 badChecksum; // checksum didn't match between devices
- u8 queueFull; // send or recv queue out of space
- u8 lag; // connection is lagging
+ /* 0x010 */ bool8 hardwareError; // hardware reported an error
+ /* 0x011 */ bool8 badChecksum; // checksum didn't match between devices
+ /* 0x012 */ u8 queueFull; // send or recv queue out of space
+ /* 0x013 */ u8 lag; // connection is lagging
- u16 checksum;
+ /* 0x014 */ u16 checksum;
- u8 sendCmdIndex;
- u8 recvCmdIndex;
+ /* 0x016 */ u8 sendCmdIndex;
+ /* 0x017 */ u8 recvCmdIndex;
- struct SendQueue sendQueue;
- struct RecvQueue recvQueue;
+ /* 0x018 */ struct SendQueue sendQueue;
+ /* 0x33c */ struct RecvQueue recvQueue;
};
struct BlockRequest
@@ -136,12 +189,12 @@ extern u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE];
extern u16 gLinkType;
extern u32 gLinkStatus;
-extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2];
+extern u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2];
extern u16 gSendCmd[CMD_LENGTH];
-extern u8 gShouldAdvanceLinkState;
-extern struct LinkPlayer gLinkPlayers[];
+extern struct LinkPlayer gLinkPlayers[5];
extern u16 word_3002910[];
extern bool8 gReceivedRemoteLinkPlayers;
+extern u32 gUnknown_020223C0;
extern bool8 gLinkVSyncDisabled;
extern u32 gLinkStatus;
@@ -152,14 +205,14 @@ bool8 sub_80093CC(void);
void Task_DestroySelf(u8 taskId);
void OpenLink(void);
void CloseLink(void);
-u16 LinkMain2(u16 *);
+u16 LinkMain2(const u16 *);
void sub_8007B14(void);
bool32 sub_8007B24(void);
void ClearLinkCallback(void);
void ClearLinkCallback_2(void);
u8 GetLinkPlayerCount(void);
void OpenLinkTimed(void);
-u8 GetLinkPlayerDataExchangeStatusTimed(void);
+u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper);
bool8 IsLinkPlayerDataExchangeComplete(void);
u32 GetLinkPlayerTrainerId(u8);
void ResetLinkPlayers(void);
@@ -167,11 +220,10 @@ void sub_8007E24(void);
void sub_8007E4C(void);
u8 GetMultiplayerId(void);
u8 bitmask_all_link_players_but_self(void);
-bool8 SendBlock(u8, void *, u16);
+bool8 SendBlock(u8, const void *, u16);
u8 GetBlockReceivedStatus(void);
void ResetBlockReceivedFlags(void);
void ResetBlockReceivedFlag(u8);
-void SetLinkDebugValues(u32, u32);
u8 GetLinkPlayerCount_2(void);
bool8 IsLinkMaster(void);
void CB2_LinkError(void);
@@ -180,23 +232,64 @@ bool8 IsLinkConnectionEstablished(void);
void SetSuppressLinkErrorMessage(bool8);
bool8 HasLinkErrorOccurred(void);
void ResetSerial(void);
-u32 LinkMain1(u8 *, u16 *, u16[CMD_LENGTH][MAX_LINK_PLAYERS]);
+u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENGTH]);
void LinkVSync(void);
void Timer3Intr(void);
void SerialCB(void);
u8 GetLinkPlayerCount(void);
bool32 InUnionRoom(void);
-
void sub_800E0E8(void);
bool8 sub_800A520(void);
-bool8 sub_8010500(void);
-void sub_800DFB4(u8, u8);
+void CreateWirelessStatusIndicatorSprite(u8, u8);
void sub_800ADF8(void);
void sub_800B488(void);
-void OpenLink(void);
void sub_800A620(void);
void sub_8011BD0(void);
+u8 IsLinkMaster(void);
void sub_800AC34(void);
-u8 sub_800A0C8(s32, s32);
+bool8 HandleLinkConnection(void);
+void SetLinkDebugValues(u32 seed, u32 flags);
+void sub_800A418(void);
+void SetSuppressLinkErrorMessage(bool8 flag);
+void sub_800B524(struct LinkPlayer *linkPlayer);
+u8 GetSioMultiSI(void);
+void sub_800AAF4(void);
+void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
+void sub_800B348(void);
+void sub_800B3A4(u32 who);
+
+extern u16 gLinkPartnersHeldKeys[6];
+extern u32 gLinkDebugSeed;
+extern struct LinkPlayerBlock gLocalLinkPlayerBlock;
+extern bool8 gLinkErrorOccurred;
+extern u32 gLinkDebugFlags;
+extern bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
+extern u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
+extern u16 gLinkHeldKeys;
+extern u32 gLinkStatus;
+extern u8 gUnknown_030030E4;
+extern u8 gUnknown_030030E8;
+extern u8 gUnknown_030030EC[MAX_LINK_PLAYERS];
+extern u8 gUnknown_030030F0[MAX_LINK_PLAYERS];
+extern u16 gUnknown_030030F4;
+extern u8 gSuppressLinkErrorMessage;
+extern u8 gWirelessCommType;
+extern bool8 gSavedLinkPlayerCount;
+extern u8 gSavedMultiplayerId;
+extern struct LinkTestBGInfo gLinkTestBGInfo;
+extern void (*gLinkCallback)(void);
+extern bool8 gShouldAdvanceLinkState;
+extern u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
+extern u8 gBlockRequestType;
+extern u8 gLastSendQueueCount;
+extern u8 gLastRecvQueueCount;
+extern u16 gLinkSavedIme;
+extern u32 gFiller_03003074;
+extern u32 gFiller_03003154;
+extern u32 gFiller_03003158;
+extern u32 gFiller_0300315c;
+extern u32 gFiller_03004138;
+extern u32 gFiller_0300413C;
+extern u32 gFiller_03003080;
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
new file mode 100644
index 000000000..a6084b138
--- /dev/null
+++ b/include/link_rfu.h
@@ -0,0 +1,235 @@
+#ifndef GUARD_LINK_RFU_H
+#define GUARD_LINK_RFU_H
+
+// Exported type declarations
+
+struct UnkLinkRfuStruct_02022B2C
+{
+ u8 unk_00;
+ u8 unk_01;
+ u16 unk_02;
+ u8 unk_04;
+ u16 unk_06;
+ struct UnkLinkRfuStruct_02022B14 *unk_08;
+ u8 *unk_0c;
+ u8 unk_10;
+ u8 unk_11;
+ u16 unk_12;
+ u16 unk_14;
+};
+
+struct UnkLinkRfuStruct_02022B44
+{
+ u8 fill_00[6];
+ u16 unk_06;
+ u8 fill_08[6];
+ vu8 unk_0e;
+ u8 unk_0f;
+ u8 fill_10[0x54];
+ u16 unk_64;
+ u8 fill_66[0x1d];
+ u8 unk_83;
+ u8 fill_84[0x58];
+};
+
+struct UnkRfuStruct_1 {
+ /* 0x000 */ u8 unk_00;
+ /* 0x001 */ u8 unk_01;
+ /* 0x002 */ vu8 unk_02;
+ /* 0x003 */ vu8 unk_03;
+ /* 0x004 */ u8 unk_04;
+ /* 0x005 */ u8 unk_05;
+ /* 0x006 */ u8 unk_06;
+ /* 0x007 */ u8 unk_07;
+ /* 0x008 */ u8 unk_08;
+ /* 0x009 */ u8 unk_09;
+ /* 0x00a */ u8 unk_0a;
+ /* 0x00b */ u8 unk_0b;
+ /* 0x00c */ u8 unk_0c;
+ /* 0x00d */ u8 unk_0d;
+ /* 0x00e */ u8 unk_0e;
+ /* 0x00f */ u8 unk_0f;
+ /* 0x010 */ u8 unk_10;
+ /* 0x011 */ u8 unk_11;
+ /* 0x012 */ u8 unk_12;
+ // aligned
+ /* 0x014 */ u16 unk_14;
+ /* 0x016 */ u16 unk_16;
+ /* 0x018 */ u16 unk_18;
+ /* 0x01a */ u16 unk_1a;
+ /* 0x01c */ u16 unk_1c;
+ /* 0x01e */ u16 unk_1e;
+ /* 0x020 */ const u16 *unk_20;
+ /* 0x024 */ u8 unk_24;
+ /* 0x026 */ u16 unk_26;
+ /* 0x028 */ u16 unk_28[4];
+ /* 0x030 */ u8 unk_30;
+ // aligned
+ /* 0x032 */ u16 unk_32;
+ /* 0x034 */ u16 unk_34[4];
+ /* 0x03c */ const struct UnkLinkRfuStruct_02022B2C *unk_3c;
+ /* 0x040 */ void (*unk_40)(u8, u8);
+ /* 0x044 */ void (*unk_44)(u16);
+ /* 0x048 */ u8 filler_48[8];
+ /* 0x050 */ u32 unk_50[0x399];
+ /* 0xeb4 */ u8 filler_e64[12];
+};
+
+struct UnkRfuStruct_2_Sub_6c {
+ /* 0x00 */ u16 unk_00;
+ /* 0x02 */ u16 unk_02;
+ /* 0x04 */ const u8 *unk_04;
+ /* 0x08 */ u32 unk_08;
+ /* 0x0c */ u32 unk_0c;
+ /* 0x10 */ u8 unk_10;
+ /* 0x11 */ u8 unk_11;
+ /* 0x12 */ u8 unk_12;
+};
+
+struct UnkRfuStruct_2_Sub_124 {
+ /* 0x000 */ u8 unk_00[32][70];
+ /* 0x8c0 */ vu8 unk_8c0;
+ /* 0x8c1 */ vu8 unk_8c1;
+ /* 0x8c2 */ vu8 unk_8c2;
+ /* 0x8c3 */ vu8 unk_8c3;
+};
+
+struct UnkRfuStruct_2_Sub_9e8 {
+ /* 0x000 */ u8 unk_00[40][14];
+ /* 0x230 */ vu8 unk_230;
+ /* 0x231 */ vu8 unk_231;
+ /* 0x232 */ vu8 unk_232;
+ /* 0x233 */ vu8 unk_233;
+};
+
+struct UnkRfuStruct_2_Sub_c1c {
+ /* 0x00 */ u8 unk_00[2][14];
+ /* 0x1c */ vu8 unk_1c;
+ /* 0x1d */ vu8 unk_1d;
+ /* 0x1e */ vu8 unk_1e;
+};
+
+struct UnkRfuStruct_Sub_Unused {
+ /* 0x000 */ u8 unk_00[2][256];
+ /* 0x200 */ vu8 unk_200;
+ /* 0x201 */ vu8 unk_201;
+ /* 0x202 */ vu8 unk_202;
+ /* 0x203 */ vu8 unk_203;
+};
+
+struct UnkRfuStruct_2 {
+ /* 0x000 */ void (*unk_00)(void);
+ /* 0x004 */ u16 unk_04;
+ /* 0x006 */ u8 filler_06[4];
+ /* 0x00a */ u16 unk_0a;
+ /* 0x00c */ u8 unk_0c;
+ /* 0x00d */ u8 playerCount;
+ /* 0x00e */ u8 unk_0e;
+ /* 0x00f */ u8 unk_0f;
+ /* 0x010 */ u16 unk_10;
+ /* 0x012 */ u16 unk_12;
+ /* 0x014 */ u8 unk_14[4][14];
+ /* 0x04c */ u8 unk_4c[14];
+ /* 0x05a */ u8 unk_5a;
+ /* 0x05b */ u8 unk_5b;
+ /* 0x05c */ u8 unk_5c[5];
+ /* 0x061 */ u8 unk_61[5];
+ /* 0x066 */ u8 unk_66;
+ /* 0x067 */ u8 unk_67;
+ /* 0x068 */ u8 filler_68[4];
+ /* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
+ /* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
+ /* 0x0e4 */ u8 unk_e4[5];
+ /* 0x0e9 */ u8 unk_e9[5];
+ /* 0x0ee */ vu8 unk_ee;
+ /* 0x0ef */ u8 unk_ef;
+ /* 0x0f0 */ u8 unk_f0;
+ /* 0x0f1 */ u8 unk_f1;
+ /* 0x0f2 */ u16 unk_f2[6];
+ /* 0x0fe */ u16 unk_fe;
+ /* 0x100 */ u16 unk_100;
+ /* 0x102 */ u8 unk_102;
+ /* 0x103 */ u8 filler_103[0x21];
+ /* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
+ /* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
+ /* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
+ /* 0xc3c */ vu8 unk_c3c;
+ /* 0xc3d */ u8 unk_c3d;
+ /* 0xc3e */ vu8 unk_c3e;
+ /* 0xc3f */ u8 unk_c3f[70];
+ /* 0xc85 */ u8 unk_c85;
+ /* 0xc86 */ u8 unk_c86;
+ /* 0xc87 */ u8 unk_c87[5][7][2];
+ /* 0xccd */ u8 unk_ccd;
+ /* 0xcce */ u8 unk_cce;
+ /* 0xccf */ u8 unk_ccf;
+ /* 0xcd0 */ vu8 unk_cd0;
+ /* 0xcd1 */ u8 unk_cd1[4];
+ /* 0xcd5 */ u8 unk_cd5[4];
+ /* 0xcd9 */ u8 unk_cd9;
+ /* 0xcda */ u8 unk_cda;
+ /* 0xcdb */ vu8 unk_cdb;
+ /* 0xcdc */ vu8 unk_cdc;
+ /* 0xcdd */ u8 unk_cdd;
+ /* 0xcde */ u8 unk_cde[4];
+ /* 0xce2 */ u8 unk_ce2;
+ /* 0xce2 */ u8 unk_ce3;
+ /* 0xce4 */ u8 unk_ce4;
+ /* 0xce5 */ u8 unk_ce5;
+ /* 0xce5 */ u8 unk_ce6;
+ /* 0xce7 */ u8 unk_ce7;
+ /* 0xce8 */ u8 unk_ce8;
+ /* 0xce9 */ u8 unk_ce9;
+ /* 0xcea */ u8 unk_cea[4];
+ /* 0xcee */ u8 unk_cee[4];
+}; // size = 0xcf4
+
+struct UnkRfuStruct_8010A14 {
+ char unk_00[15];
+ u8 unk_0f;
+ u8 unk_10[4];
+ struct LinkPlayer unk_14[5];
+ u8 fill_a0[0x5c];
+};
+
+// Exported RAM declarations
+
+extern struct UnkRfuStruct_1 gUnknown_03004140;
+extern struct UnkRfuStruct_2 gUnknown_03005000;
+
+// Exported ROM declarations
+u32 sub_800BEC0(void);
+void sub_800E700(void);
+void sub_800EDD4(void);
+void sub_800F6FC(u8 who);
+void sub_800F728(u8 who);
+bool32 sub_800F7E4(void);
+void sub_800F804(void);
+void sub_800F850(void);
+u8 sub_800FCD8(void);
+bool32 sub_800FE84(const u8 *src, size_t size);
+void Rfu_set_zero(void);
+u8 sub_80104F4(void);
+u8 rfu_get_multiplayer_id(void);
+bool8 sub_8010100(u8 a0);
+bool8 sub_8010500(void);
+bool8 Rfu_IsMaster(void);
+void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
+void sub_8010434(void);
+void sub_800E604(void);
+void sub_800E174(void);
+void sub_800E6D0(void);
+bool32 sub_8010EC0(void);
+bool32 sub_8010F1C(void);
+bool32 sub_8011A80(void);
+bool32 sub_800F0B8(void);
+u32 sub_80124D4(void);
+void RfuVSync(void);
+void sub_80111B0(bool32 a0);
+u8 sub_8011A74(void);
+struct UnkLinkRfuStruct_02022B14 *sub_800F7DC(void);
+void sub_8011068(u8 a0);
+void sub_8011170(u32 a0);
+void sub_8011A64(u8 a0, u16 a1);
+
+#endif //GUARD_LINK_RFU_H
diff --git a/include/list_menu.h b/include/list_menu.h
index 8b793c0e4..77d00bf97 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -57,5 +57,6 @@ u8 ListMenuInit(struct ListMenuTemplate *template, u16 cursorPage, u16 cursorPos
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);
#endif //GUARD_LIST_MENU_H
diff --git a/include/load_save.h b/include/load_save.h
index 1f406bbad..92c99fd90 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -2,6 +2,8 @@
#define GUARD_LOAD_SAVE_H
extern bool32 gFlashMemoryPresent;
+extern struct SaveBlock2 gSaveblock2;
+extern struct PokemonStorage gPokemonStorage;
void ClearSav2(void);
void ClearSav1(void);
@@ -19,6 +21,5 @@ void LoadSerializedGame(void);
void LoadPlayerBag(void);
void SavePlayerBag(void);
void SetSaveBlocksPointers(u16);
-void MoveSaveBlocks_ResetHeap(void);
#endif // GUARD_LOAD_SAVE_H
diff --git a/include/m4a.h b/include/m4a.h
index 8c3380dd8..a1f413cf5 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -17,4 +17,9 @@ void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo);
+extern struct MusicPlayerInfo gMPlayInfo_SE1;
+extern struct MusicPlayerInfo gMPlayInfo_SE2;
+extern struct MusicPlayerInfo gMPlayInfo_SE3;
+extern struct SoundInfo gSoundInfo;
+
#endif //GUARD_M4A_H
diff --git a/include/main.h b/include/main.h
index 40a2580a2..3de34de13 100644
--- a/include/main.h
+++ b/include/main.h
@@ -42,14 +42,19 @@ struct Main
/*0x439*/ u8 field_439_x4:1;
};
-extern u8 gUnknown_3001764;
-extern struct Main gMain;
-extern bool8 gSoftResetDisabled;
-extern bool8 gLinkVSyncDisabled;
-
extern const u8 gGameVersion;
extern const u8 gGameLanguage;
+extern u16 gKeyRepeatStartDelay;
+extern bool8 gLinkTransferringData;
+extern struct Main gMain;
+extern u16 gKeyRepeatContinueDelay;
+extern bool8 gSoftResetDisabled;
+extern IntrFunc gIntrTable[];
+extern u8 gLinkVSyncDisabled;
+extern u32 IntrMain_Buffer[];
+extern u8 gPcmDmaCounter;
+
void AgbMain(void);
void SetMainCallback2(MainCallback callback);
void InitKeys(void);
@@ -60,6 +65,7 @@ void SetSerialCallback(IntrCallback callback);
void InitFlashTimer(void);
void DoSoftReset(void);
void ClearPokemonCrySongs(void);
+void RestoreSerialTimer3IntrHandlers(void);
void StartTimer1(void);
void SeedRngAndSetTrainerId(void);
diff --git a/include/malloc.h b/include/malloc.h
index 003ee1f03..6efa8fbef 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -1,6 +1,7 @@
#ifndef GUARD_MALLOC_H
#define GUARD_MALLOC_H
+#define HEAP_SIZE 0x1C000
#define malloc Alloc
#define calloc(ct, sz) AllocZeroed((ct) * (sz))
#define free Free
diff --git a/include/menu.h b/include/menu.h
index 18d391317..c2f15422a 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -17,6 +17,8 @@ struct MenuAction
} func;
};
+extern const u16 gUnknown_0860F074[];
+
void sub_81971D0(void);
void sub_8197200(void);
u16 sub_8197224(void);
@@ -49,6 +51,7 @@ void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, int size,
bool8 free_temp_tile_data_buffers_if_possible(void);
struct WindowTemplate sub_8198A50(u8, u8, u8, u8, u8, u8, u16);
void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos);
+void copy_decompressed_tile_data_to_vram_autofree(u8 bgId, const void *src, int size, u16 offset, u8 mode);
s8 ProcessMenuInputNoWrap_(void);
void do_scheduled_bg_tilemap_copies_to_vram(void);
void clear_scheduled_bg_copies_to_vram(void);
@@ -60,5 +63,10 @@ u16 sub_8198AA4(u8, u8, u8, u8, u8, u8, u16);
void *malloc_and_decompress(const void *src, int *sizeOut);
u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode);
void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress);
+void AddItemMenuActionTextPrinters (u8, u8, u8, u8, u8, u8, u8, const struct MenuAction*, const u8*);
+void sub_8198DBC(u8, u8, u8, u8, u8, u8, u8, const struct MenuAction*, const u8*);
+u8 sub_8199944(u8, u8, u8, u8, u8);
+u8 sub_8199134(s8, s8);
+void sub_819A2BC(u8, u8);
#endif // GUARD_MENU_H
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 048a4aa43..e744c293c 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -32,5 +32,10 @@ void DisplayMessageAndContinueTask(u8 taskId, u8 arg1, u16 arg2, u8 arg3, u8 arg
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo);
u8 GetLRKeysState(void);
u8 sub_812210C(void);
+bool8 sub_81221EC(void);
+bool8 sub_81221AC(void);
+bool8 sub_8122148(u16);
+bool8 AdjustQuantityAccordingToDPadInput(s16*, u16);
+bool8 itemid_80BF6D8_mail_related(u16);
#endif //GUARD_MENU_HELPERS_H
diff --git a/include/menu_indicators.h b/include/menu_indicators.h
index 694c01fd9..b82e48725 100644
--- a/include/menu_indicators.h
+++ b/include/menu_indicators.h
@@ -6,8 +6,17 @@
// Exported RAM declarations
// Exported ROM declarations
+
+struct ArrowStruct {
+ u8 unk0[6];
+ u16 unk6[4];
+ u8 unkE;
+};
+
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);
#endif //GUARD_MENU_INDICATORS_H
diff --git a/include/overworld.h b/include/overworld.h
index 36198e124..db4d96a89 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -25,8 +25,6 @@ struct UCoords32
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4];
extern MainCallback gFieldCallback;
-void IncrementGameStat(u8 index);
-
void Overworld_SetMapObjTemplateCoords(u8, s16, s16);
void Overworld_SetMapObjTemplateMovementType(u8, u8);
@@ -54,6 +52,7 @@ void Overworld_ChangeMusicToDefault(void);
void Overworld_ChangeMusicTo(u16);
bool32 is_c1_link_related_active(void);
+extern u16 gUnknown_03005DA8;
void CB2_NewGame(void);
void strange_npc_table_clear(void);
@@ -73,7 +72,12 @@ void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
void mapldr_default(void);
u8 get_map_light_from_warp0(void);
bool8 is_light_level_1_2_3_5_or_6(u8 a1);
+void sub_8086194(void);
+void sub_80861B0(void);
+bool32 sub_80875C8(void);
+bool32 sub_8087634(void);
+bool32 sub_808766C(void);
void IncrementGameStat(u8);
u32 GetGameStat(u8);
diff --git a/include/party_menu.h b/include/party_menu.h
index 1d1661cee..14aacce88 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -18,5 +18,6 @@ u8 pokemon_ailments_get_primary(u32 status);
u8 *GetMonNickname(struct Pokemon *mon, u8 *dst);
u8 GetCursorSelectionMonId(void);
bool8 FieldCallback_Teleport(void);
+void sub_81B7F60(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/player_pc.h b/include/player_pc.h
index b14d1ede3..cc2e85b2b 100644
--- a/include/player_pc.h
+++ b/include/player_pc.h
@@ -8,5 +8,6 @@
// Exported ROM declarations
void sub_816B060(u8 taskId);
+void sub_816B31C(void);
#endif //GUARD_PLAYER_PC_H
diff --git a/include/pokemon.h b/include/pokemon.h
index ce3074a0b..6df9ce313 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -1,6 +1,9 @@
#ifndef GUARD_POKEMON_H
#define GUARD_POKEMON_H
+#include "constants/pokemon.h"
+#include "sprite.h"
+
#define MON_DATA_PERSONALITY 0
#define MON_DATA_OT_ID 1
#define MON_DATA_NICKNAME 2
@@ -107,81 +110,11 @@
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF
-#define TYPE_NORMAL 0x00
-#define TYPE_FIGHTING 0x01
-#define TYPE_FLYING 0x02
-#define TYPE_POISON 0x03
-#define TYPE_GROUND 0x04
-#define TYPE_ROCK 0x05
-#define TYPE_BUG 0x06
-#define TYPE_GHOST 0x07
-#define TYPE_STEEL 0x08
-#define TYPE_MYSTERY 0x09
-#define TYPE_FIRE 0x0a
-#define TYPE_WATER 0x0b
-#define TYPE_GRASS 0x0c
-#define TYPE_ELECTRIC 0x0d
-#define TYPE_PSYCHIC 0x0e
-#define TYPE_ICE 0x0f
-#define TYPE_DRAGON 0x10
-#define TYPE_DARK 0x11
-
-#define NUMBER_OF_MON_TYPES 0x12
-
#define MAX_TOTAL_EVS 510
#define NUM_STATS 6
#define UNOWN_FORM_COUNT 28
#define MAX_MON_LEVEL 100
-enum
-{
- EGG_GROUP_NONE,
- EGG_GROUP_MONSTER,
- EGG_GROUP_WATER_1,
- EGG_GROUP_BUG,
- EGG_GROUP_FLYING,
- EGG_GROUP_FIELD,
- EGG_GROUP_FAIRY,
- EGG_GROUP_GRASS,
- EGG_GROUP_HUMAN_LIKE,
- EGG_GROUP_WATER_3,
- EGG_GROUP_MINERAL,
- EGG_GROUP_AMORPHOUS,
- EGG_GROUP_WATER_2,
- EGG_GROUP_DITTO,
- EGG_GROUP_DRAGON,
- EGG_GROUP_UNDISCOVERED
-};
-
-enum
-{
- NATURE_HARDY,
- NATURE_LONELY,
- NATURE_BRAVE,
- NATURE_ADAMANT,
- NATURE_NAUGHTY,
- NATURE_BOLD,
- NATURE_DOCILE,
- NATURE_RELAXED,
- NATURE_IMPISH,
- NATURE_LAX,
- NATURE_TIMID,
- NATURE_HASTY,
- NATURE_SERIOUS,
- NATURE_JOLLY,
- NATURE_NAIVE,
- NATURE_MODEST,
- NATURE_MILD,
- NATURE_QUIET,
- NATURE_BASHFUL,
- NATURE_RASH,
- NATURE_CALM,
- NATURE_GENTLE,
- NATURE_SASSY,
- NATURE_CAREFUL,
- NATURE_QUIRKY,
-};
-
struct PokemonSubstruct0
{
u16 species;
@@ -334,6 +267,46 @@ struct UnknownPokemonStruct
u8 friendship;
};
+struct UnknownPokemonSubStruct2
+{
+ u16 species;
+ u16 moves[4];
+ u16 item;
+};
+
+struct UnknownPokemonStruct2
+{
+ u8 field_0_0 : 5;
+ u8 field_0_1 : 2;
+ u8 field_1;
+ u8 field_2;
+ u8 field_3;
+ struct UnknownPokemonSubStruct2 mons[3];
+ u8 field_28[23];
+ u8 language;
+};
+
+struct UnknownPokemonStruct3
+{
+ u8 field_0[48];
+ u16 field_30;
+ u8 field_32[38];
+};
+
+struct Unknown_806F160_Struct
+{
+ u8 field_0_0 : 4;
+ u8 field_0_1 : 4;
+ u8 field_1;
+ u8 magic;
+ u8 field_3_0 : 4;
+ u8 field_3_1 : 4;
+ void *bytes;
+ u8 **byteArrays;
+ struct SpriteTemplate *templates;
+ struct SpriteFrameImage *frameImages;
+};
+
#define BATTLE_STATS_NO 8
struct BattlePokemon
@@ -374,28 +347,6 @@ struct BattlePokemon
/*0x54*/ u32 otId;
};
-enum
-{
- STAT_STAGE_HP, // 0
- STAT_STAGE_ATK, // 1
- STAT_STAGE_DEF, // 2
- STAT_STAGE_SPEED, // 3
- STAT_STAGE_SPATK, // 4
- STAT_STAGE_SPDEF, // 5
- STAT_STAGE_ACC, // 6
- STAT_STAGE_EVASION, // 7
-};
-
-enum
-{
- STAT_HP, // 0
- STAT_ATK, // 1
- STAT_DEF, // 2
- STAT_SPD, // 3
- STAT_SPATK, // 4
- STAT_SPDEF, // 5
-};
-
struct BaseStats
{
/* 0x00 */ u8 baseHP;
@@ -514,17 +465,22 @@ extern u8 gPlayerPartyCount;
extern struct Pokemon gPlayerParty[PARTY_SIZE];
extern u8 gEnemyPartyCount;
extern struct Pokemon gEnemyParty[PARTY_SIZE];
+extern struct SpriteTemplate gUnknown_0202499C;
+extern struct PokemonStorage* gPokemonStoragePtr;
+
+extern const u8 gFacilityClassToPicIndex[];
+extern const u8 gFacilityClassToTrainerClass[];
extern const struct BaseStats gBaseStats[];
extern const u8 *const gItemEffectTable[];
extern const struct Evolution gEvolutionTable[][EVOS_PER_MON];
-extern struct PokemonStorage* gPokemonStoragePtr;
extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
-
-u8 CountAliveMonsInBattle(u8 caseId);
-#define BATTLE_ALIVE_EXCEPT_ACTIVE 0
-#define BATTLE_ALIVE_ATK_SIDE 1
-#define BATTLE_ALIVE_DEF_SIDE 2
+extern const u8 gUnknown_08329D22[];
+extern const u8 gUnknown_08329D26[];
+extern const u8 gUnknown_08329D2A[];
+extern const u8 gStatStageRatios[][2];
+extern const u16 gUnknown_08329D54[];
+extern const struct SpriteTemplate gUnknown_08329D98[];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
void ZeroMonData(struct Pokemon *mon);
@@ -538,26 +494,45 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level);
void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality);
void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId);
void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread);
-u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon);
+void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src);
+void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50);
+void sub_8068528(struct Pokemon *mon, const struct UnknownPokemonStruct2 *src, u8 monId);
+void CreateMonWithEVSpreadPersonalityOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId);
+void sub_80686FC(struct Pokemon *mon, struct UnknownPokemonStruct *dest);
+void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
+bool8 sub_80688F8(u8 caseId, u8 battlerId);
+void SetDeoxysStats(void);
+u16 sub_8068B48(void);
+u16 sub_8068BB0(void);
+void CreateObedientEnemyMon(void);
void CalculateMonStats(struct Pokemon *mon);
+void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest);
u8 GetLevelFromMonExp(struct Pokemon *mon);
u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon);
u16 GiveMoveToMon(struct Pokemon *mon, u16 move);
u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move);
-void MonRestorePP(struct Pokemon *mon);
void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot);
void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot);
void GiveMonInitialMoveset(struct Pokemon *mon);
void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon);
+u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove);
void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move);
void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef);
+u8 CountAliveMonsInBattle(u8 caseId);
+#define BATTLE_ALIVE_EXCEPT_ACTIVE 0
+#define BATTLE_ALIVE_ATK_SIDE 1
+#define BATTLE_ALIVE_DEF_SIDE 2
+
+u8 GetDefaultMoveTarget(u8 battlerId);
u8 GetMonGender(struct Pokemon *mon);
u8 GetBoxMonGender(struct BoxPokemon *boxMon);
u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality);
-void EncryptBoxMon(struct BoxPokemon *boxMon);
-void DecryptBoxMon(struct BoxPokemon *boxMon);
+void sub_806A068(u16 species, u8 battlerPosition);
+void sub_806A12C(u16 trainerSpriteId, u8 battlerPosition);
+void sub_806A1C0(u16 arg0, u8 battlerPosition);
// These are full type signatures for GetMonData() and GetBoxMonData(),
// but they are not used since some code erroneously omits the third arg.
@@ -566,93 +541,105 @@ void DecryptBoxMon(struct BoxPokemon *boxMon);
u32 GetMonData();
u32 GetBoxMonData();
-void SetMonData(struct Pokemon *mon, s32 field, const void *data);
-void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *data);
+void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg);
+void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg);
void CopyMon(void *dest, void *src, size_t size);
u8 GiveMonToPlayer(struct Pokemon *mon);
-u8 SendMonToPC(struct Pokemon *mon);
+u8 SendMonToPC(struct Pokemon* mon);
u8 CalculatePlayerPartyCount(void);
u8 CalculateEnemyPartyCount(void);
-
+u8 GetMonsStateToDoubles(void);
+u8 GetMonsStateToDoubles_2(void);
u8 GetAbilityBySpecies(u16 species, bool8 altAbility);
u8 GetMonAbility(struct Pokemon *mon);
void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord);
u8 GetSecretBaseTrainerPicIndex(void);
-u8 GetSecretBaseTrainerNameIndex(void);
+u8 GetSecretBaseTrainerClass(void);
bool8 IsPlayerPartyAndPokemonStorageFull(void);
bool8 IsPokemonStorageFull(void);
void GetSpeciesName(u8 *name, u16 species);
u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex);
void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
-void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex);
-
+void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex);
+bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
+bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
+bool8 HealStatusConditions(struct Pokemon *mon, u32 battlePartyId, u32 healMask, u8 battlerId);
+u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
+u8 *sub_806CF78(u16 itemId);
u8 GetNature(struct Pokemon *mon);
u8 GetNatureFromPersonality(u32 personality);
-
-u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex);
-
-void MonRestorePP(struct Pokemon *);
-void BoxMonRestorePP(struct BoxPokemon *);
-
+u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem);
+u16 HoennPokedexNumToSpecies(u16 hoennNum);
u16 NationalPokedexNumToSpecies(u16 nationalNum);
-u16 NationalToHoennOrder(u16);
-u16 SpeciesToNationalPokedexNum(u16);
-u16 HoennToNationalOrder(u16);
+u16 NationalToHoennOrder(u16 nationalNum);
+u16 SpeciesToNationalPokedexNum(u16 species);
+u16 SpeciesToHoennPokedexNum(u16 species);
+u16 HoennToNationalOrder(u16 hoennNum);
u16 SpeciesToCryId(u16 species);
-void DrawSpindaSpots(u16, u32, u8 *, u8);
-void AdjustFriendship(struct Pokemon *, u8);
-u8 CheckPartyHasHadPokerus(struct Pokemon *, u8);
-void UpdatePartyPokerusTime(u16);
-u32 CanMonLearnTMHM(struct Pokemon *, u8);
-u32 CanSpeciesLearnTMHM(u16 species, u8 tm);
-u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves);
-void ClearBattleMonForms(void);
-const u8 *GetMonFrontSpritePal(struct Pokemon *mon);
-const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16, u32, u32);
-const struct CompressedSpritePalette *sub_80409C8(u16, u32, u32);
-bool8 IsOtherTrainer(u32, u8 *);
-void SetWildMonHeldItem(void);
-u16 GetMonEVCount(struct Pokemon *);
-
-const struct CompressedSpritePalette *sub_806E794(struct Pokemon *mon);
-const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality);
-bool32 IsHMMove2(u16 move);
-bool8 IsPokeSpriteNotFlipped(u16 species);
-bool8 IsMonShiny(struct Pokemon *mon);
-bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
-
-void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
-bool8 IsTradedMon(struct Pokemon *mon);
-void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality);
-s32 GetBattlerMultiplayerId(u16 a1);
+void sub_806D544(u16 species, u32 personality, u8 *dest);
+void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4);
+void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
+bool8 sub_806D7EC(void);
bool16 sub_806D82C(u8 id);
-u16 MonTryLearningNewMove(struct Pokemon* mon, bool8);
-void sub_8068AA4(void); // sets stats for deoxys
-bool8 HasTwoFramesAnimation(u16 species);
-u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem);
+s32 GetBattlerMultiplayerId(u16 a1);
+u8 GetTrainerEncounterMusicId(u16 trainerOpponentId);
+u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex);
+void AdjustFriendship(struct Pokemon *mon, u8 event);
+void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
+u16 GetMonEVCount(struct Pokemon *mon);
void RandomlyGivePartyPokerus(struct Pokemon *party);
u8 CheckPartyPokerus(struct Pokemon *party, u8 selection);
u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection);
void UpdatePartyPokerusTime(u16 days);
void PartySpreadPokerus(struct Pokemon *party);
-s8 GetMonFlavorRelation(struct Pokemon *mon, u8 a2);
-s8 GetFlavorRelationByPersonality(u32 personality, u8 a2);
-u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
-u8 GetDefaultMoveTarget(u8 atkBank);
-u16 PlayerGenderToFrontTrainerPicId(u8 playerGender);
-void sub_806A1C0(u16 arg0, u8 bankIdentity);
-void sub_806A12C(u16 trainerSpriteId, u8 bankIdentity);
-u8 GetSecretBaseTrainerPicIndex(void);
bool8 TryIncrementMonLevel(struct Pokemon *mon);
-void BoxMonToMon(struct BoxPokemon *srcMon, struct Pokemon *dstMon);
+u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm);
+u32 CanSpeciesLearnTMHM(u16 species, u8 tm);
+u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves);
u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves);
-u8 GetMonsStateToDoubles_2(void);
-
-#include "sprite.h"
-
-void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3);
+u8 GetNumberOfRelearnableMoves(struct Pokemon *mon);
+u16 SpeciesToPokedexNum(u16 species);
+bool32 sub_806E3F8(u16 species);
+void ClearBattleMonForms(void);
+u16 GetBattleBGM(void);
+void PlayBattleBGM(void);
+void PlayMapChosenOrBattleBGM(u16 songId);
+void sub_806E694(u16 songId);
+const u8 *GetMonFrontSpritePal(struct Pokemon *mon);
+const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality);
+const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon);
+const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality);
+bool32 IsHMMove2(u16 move);
+bool8 IsMonSpriteNotFlipped(u16 species);
+s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor);
+s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor);
+bool8 IsTradedMon(struct Pokemon *mon);
+bool8 IsOtherTrainer(u32 otId, u8 *otName);
+void MonRestorePP(struct Pokemon *mon);
+void BoxMonRestorePP(struct BoxPokemon *boxMon);
+void sub_806E994(void);
+void SetWildMonHeldItem(void);
+bool8 IsMonShiny(struct Pokemon *mon);
+bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
+const u8 *GetTrainerPartnerName(void);
void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3);
+void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3);
+void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneFrame);
+void sub_806EE98(void);
void BattleAnimateBackSprite(struct Sprite* sprite, u16 species);
+u8 sub_806EF08(u8 arg0);
+u8 sub_806EF84(u8 arg0, u8 arg1);
+u16 sub_806EFF0(u16 arg0);
+u16 FacilityClassToPicIndex(u16 facilityClass);
+u16 PlayerGenderToFrontTrainerPicId(u8 playerGender);
+void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality);
+const u8 *GetTrainerClassNameFromId(u16 trainerId);
+const u8 *GetTrainerNameFromId(u16 trainerId);
+bool8 HasTwoFramesAnimation(u16 species);
+bool8 sub_806F104(void);
+struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1);
+void sub_806F47C(u8 id);
+u8 *sub_806F4F8(u8 id, u8 arg1);
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_item_effects.h b/include/pokemon_item_effects.h
deleted file mode 100644
index 505cc0f25..000000000
--- a/include/pokemon_item_effects.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef GUARD_POKEMON_ITEM_EFFECTS
-#define GUARD_POKEMON_ITEM_EFFECTS
-
-#include "pokemon.h"
-
-// TODO once pokemon item effects is decompiled
-/*
-struct PokemonItemEffect
-{
- //field 0
- u8 xAtk : 4; // x1, x2, x4, x8 = xF
- u8 field_0_x10 : 1; // x10
- u8 critRatioUp : 1; // x20
- u8 field_0_x40 : 1; // x40
- u8 cureInfatuation : 1; // x80
-
- /*field 1
- u8 xSpeed : 4; // x1, x2, x4, x8 = xF
- u8 xDefense : 4; // x10, x20, x40, xF0
-
- /*field 2
- u8 xSpAtk : 4; // x1, x2, x4, x8 = xF
- u8 xAccuracy : 4; // x10, x20, x40, xF0
-
- /*field 3
- u8 cureConfusion : 1; // x1
- u8 cureParalysis : 1; // x2
- u8 cureFreeze : 1; // x4
- u8 cureBurn : 1; // x8
- u8 curePoison : 1; // x10
- u8 cureSleep : 1; // x20
- u8 field_3_x40 : 1; // x40
- u8 cantLowerStats : 1; // x80
-
- /*field 4
- u8 hpEv : 1; // x1
- u8 attackEv : 1; // x2
- u8 healHp : 1; // x4
- u8 field_4_x8 : 1; // x8
- u8 field_4_x10 : 1; // x10
- u8 ppUp : 1; // x20
- u8 levelUp : 1; // x40
- u8 evolutionStone : 1; // x80
-
- /*field 5
- u8 defEv: 1; // x1
- u8 speedEv : 1; // x2
- u8 spDefEv : 1; // x4
- u8 spAtkEv : 1; // x8
- u8 ppMax : 1; // x10
- u8 field_5_x20 : 1; // x20
- u8 field_5_x40 : 1; // x40
- u8 field_5_x80 : 1; // x80
-
- /*field 6
- u8 value;
-};
-*/
-
-bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 itemId, u8 partyId, u8 monMoveIndex, u8 a5);
-
-#endif // GUARD_POKEMON_ITEM_EFFECTS
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
new file mode 100755
index 000000000..adadcea03
--- /dev/null
+++ b/include/pokemon_summary_screen.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_POKEMON_SUMMARY_SCREEN_H
+#define GUARD_POKEMON_SUMMARY_SCREEN_H
+
+void sub_81C4F98(u8, void(*)(void));
+
+#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
index 296245a24..8b1fa258d 100644
--- a/include/recorded_battle.h
+++ b/include/recorded_battle.h
@@ -7,9 +7,9 @@ extern u8 gUnknown_0203C7B4;
void sub_8184DA4(u8 arg0);
void sub_8184E58(void);
-void RecordedBattle_SetBattlerAction(u8 bank, u8 action);
-void RecordedBattle_ClearBattlerAction(u8 bank, u8 bytesToClear);
-u8 RecordedBattle_GetBattlerAction(u8 bank);
+void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action);
+void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear);
+u8 RecordedBattle_GetBattlerAction(u8 battlerId);
u8 sub_81850D0(void);
u8 sub_81850DC(u8 *arg0);
void sub_81851A8(u8 *arg0);
@@ -19,13 +19,13 @@ void PlayRecordedBattle(void (*CB2_After)(void));
u8 sub_8185EA0(void);
u8 sub_8185EAC(void);
void RecordedBattle_SaveParties(void);
-u8 GetActiveBankLinkPlayerGender(void);
+u8 GetActiveBattlerLinkPlayerGender(void);
void sub_8185F84(void);
void sub_8185F90(u16 arg0);
u8 sub_8185FAC(void);
u8 GetBattleStyleInRecordedBattle(void);
u8 GetTextSpeedInRecordedBattle(void);
-void RecordedBattle_CopyBankMoves(void);
+void RecordedBattle_CopyBattlerMoves(void);
void sub_818603C(u8 arg0);
u32 GetAiScriptsInRecordedBattle(void);
void sub_8186444(void);
diff --git a/include/reset_save_heap.h b/include/reset_save_heap.h
new file mode 100644
index 000000000..12fd186ec
--- /dev/null
+++ b/include/reset_save_heap.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_RESET_SAVE_HEAP_H
+#define GUARD_RESET_SAVE_HEAP_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void sub_81700F8(void);
+
+#endif //GUARD_RESET_SAVE_HEAP_H
diff --git a/include/rom_8011DC0.h b/include/rom_8011DC0.h
new file mode 100644
index 000000000..fd8c35f56
--- /dev/null
+++ b/include/rom_8011DC0.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_rom_8011DC0_H
+#define GUARD_rom_8011DC0_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void sub_8018438(void);
+
+#endif //GUARD_rom_8011DC0_H
diff --git a/include/shop.h b/include/shop.h
index d3e86408c..9b14a672e 100644
--- a/include/shop.h
+++ b/include/shop.h
@@ -6,5 +6,6 @@ extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3];
void CreatePokemartMenu(const u16 *);
void CreateDecorationShop1Menu(const u16 *);
void CreateDecorationShop2Menu(const u16 *);
+void CB2_ExitSellMenu(void);
#endif // GUARD_SHOP_H
diff --git a/include/strings.h b/include/strings.h
index a3d2a2fb7..59ca5719c 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -101,6 +101,11 @@ extern const u8 gText_NoRegistry[];
extern const u8 gText_OkayToDeleteFromRegistry[];
extern const u8 gText_RegisteredDataDeleted[];
extern const u8 gUnknown_085EA79D[];
+extern const u8 gText_CommErrorEllipsis[];
+extern const u8 gText_MoveCloserToLinkPartner[];
+extern const u8 gText_CommErrorCheckConnections[];
+extern const u8 gText_ABtnTitleScreen[];
+extern const u8 gText_ABtnRegistrationCounter[];
extern const u8 gText_EmptyString2[];
extern const u8 gText_Confirm3[];
extern const u8 gText_Cancel4[];
@@ -134,6 +139,14 @@ extern const u8 gMenuText_Use[];
extern const u8 gMenuText_Toss[];
extern const u8 gMenuText_Give[];
extern const u8 gMenuText_Give2[];
+extern const u8 gMenuText_Register[];
+extern const u8 gMenuText_Check[];
+extern const u8 gMenuText_Walk[];
+extern const u8 gMenuText_Deselect[];
+extern const u8 gMenuText_CheckTag[];
+extern const u8 gMenuText_Confirm[];
+extern const u8 gMenuText_Show[];
+extern const u8 gMenuText_Give2[];
extern const u8 gText_Cancel2[];
@@ -245,6 +258,48 @@ extern const u8 gText_ContinueMenuPlayer[];
extern const u8 gText_ContinueMenuTime[];
extern const u8 gText_ContinueMenuPokedex[];
extern const u8 gText_ContinueMenuBadges[];
+extern const u8 gText_BirchBoy[];
+extern const u8 gText_BirchGirl[];
+extern const u8 gText_DefaultNameStu[];
+extern const u8 gText_DefaultNameMilton[];
+extern const u8 gText_DefaultNameTom[];
+extern const u8 gText_DefaultNameKenny[];
+extern const u8 gText_DefaultNameReid[];
+extern const u8 gText_DefaultNameJude[];
+extern const u8 gText_DefaultNameJaxson[];
+extern const u8 gText_DefaultNameEaston[];
+extern const u8 gText_DefaultNameWalker[];
+extern const u8 gText_DefaultNameTeru[];
+extern const u8 gText_DefaultNameJohnny[];
+extern const u8 gText_DefaultNameBrett[];
+extern const u8 gText_DefaultNameSeth[];
+extern const u8 gText_DefaultNameTerry[];
+extern const u8 gText_DefaultNameCasey[];
+extern const u8 gText_DefaultNameDarren[];
+extern const u8 gText_DefaultNameLandon[];
+extern const u8 gText_DefaultNameCollin[];
+extern const u8 gText_DefaultNameStanley[];
+extern const u8 gText_DefaultNameQuincy[];
+extern const u8 gText_DefaultNameKimmy[];
+extern const u8 gText_DefaultNameTiara[];
+extern const u8 gText_DefaultNameBella[];
+extern const u8 gText_DefaultNameJayla[];
+extern const u8 gText_DefaultNameAllie[];
+extern const u8 gText_DefaultNameLianna[];
+extern const u8 gText_DefaultNameSara[];
+extern const u8 gText_DefaultNameMonica[];
+extern const u8 gText_DefaultNameCamila[];
+extern const u8 gText_DefaultNameAubree[];
+extern const u8 gText_DefaultNameRuthie[];
+extern const u8 gText_DefaultNameHazel[];
+extern const u8 gText_DefaultNameNadine[];
+extern const u8 gText_DefaultNameTanja[];
+extern const u8 gText_DefaultNameYasmin[];
+extern const u8 gText_DefaultNameNicola[];
+extern const u8 gText_DefaultNameLillie[];
+extern const u8 gText_DefaultNameTerra[];
+extern const u8 gText_DefaultNameLucy[];
+extern const u8 gText_DefaultNameHalie[];
// mystery event menu text
extern const u8 gText_EventSafelyLoaded[];
@@ -267,4 +322,30 @@ extern const u8 gText_Var1DotVar2[];
extern const u8 gText_ThreeMarks[];
extern const u8 gText_FirmSlash[];
+//item menu screen text
+extern const u8 gText_CloseBag[];
+extern const u8 gText_ClearTo11Var1Clear5Var2[];
+extern const u8 gText_UnkF908Var1Clear7Var2[];
+extern const u8 gText_xVar1[];
+extern const u8 gText_ReturnToVar1[];
+extern const u8 gText_SelectorArrow2[];
+extern const u8 gText_MoveVar1Where[];
+extern const u8 gText_Var1IsSelected[];
+extern const u8 gText_TossHowManyVar1s[];
+extern const u8 gText_ConfirmTossItems[];
+extern const u8 gText_ThrewAwayVar2Var1s[];
+extern const u8 gText_CantWriteMail[];
+extern const u8 gText_NoPokemon[];
+extern const u8 gText_Var1CantBeHeld[];
+extern const u8 gText_Var1CantBeHeldHere[];
+extern const u8 gText_CantBuyKeyItem[];
+extern const u8 gText_HowManyToSell[];
+extern const u8 gText_ICanPayVar1[];
+extern const u8 gText_TurnedOverVar1ForVar2[];
+extern const u8 gText_DepositHowManyVar1[];
+extern const u8 gText_CantStoreImportantItems[];
+extern const u8 gText_DepositedVar2Var1s[];
+extern const u8 gText_NoRoomForItems[];
+extern const u8 gText_ThreeDashes[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index e073c3762..81c066426 100644
--- a/include/text.h
+++ b/include/text.h
@@ -208,6 +208,7 @@ void DecompressGlyphTile(const u16 *src, u16 *dest);
u8 GetLastTextColor(u8 colorType);
void CopyGlyphToWindow(struct TextPrinter *x);
void ClearTextSpan(struct TextPrinter *textPrinter, u32 width);
+u8 GetMenuCursorDimensionByFont(u8, u8);
u16 Font0Func(struct TextPrinter *textPrinter);
u16 Font1Func(struct TextPrinter *textPrinter);
diff --git a/include/trade.h b/include/trade.h
new file mode 100644
index 000000000..15438ff3f
--- /dev/null
+++ b/include/trade.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_TRADE_H
+#define GUARD_TRADE_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+int sub_807A728(void);
+
+#endif //GUARD_TRADE_H
diff --git a/include/window.h b/include/window.h
index 07c642a09..1a6ff3808 100644
--- a/include/window.h
+++ b/include/window.h
@@ -68,5 +68,11 @@ void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, u8 *pixels, u16 srcX, u16 src
void CopyWindowToVram8Bit(u8 windowId, u8 mode);
extern struct Window gWindows[];
+extern void* gUnknown_03002F70[];
+extern u32 filler_03002F58;
+extern u32 filler_03002F5C;
+extern u32 filler_03002F64;
+
+extern u8 gUnknown_03002F60;
#endif // GUARD_WINDOW_H
diff --git a/ld_script.txt b/ld_script.txt
index 4998743ce..3860ae313 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -52,7 +52,10 @@ SECTIONS {
src/text.o(.text);
src/sprite.o(.text);
src/string_util.o(.text);
- asm/link.o(.text);
+ src/link.o(.text);
+ src/link_rfu.o(.text);
+ asm/link_rfu.o(.text);
+ asm/rom_8011DC0.o(.text);
src/rtc.o(.text);
src/main_menu.o(.text);
src/battle_controllers.o(.text);
@@ -68,13 +71,7 @@ SECTIONS {
src/battle_controller_opponent.o(.text);
src/battle_ai_switch_items.o(.text);
src/battle_controller_link_opponent.o(.text);
- src/pokemon_1.o(.text);
- asm/pokemon_1.o(.text);
- src/calculate_base_damage.o(.text);
- src/pokemon_2.o(.text);
- asm/pokemon_item_effect.o(.text);
- src/pokemon_3.o(.text);
- asm/pokemon_3.o(.text);
+ src/pokemon.o(.text);
src/trig.o(.text);
src/random.o(.text);
src/util.o(.text);
@@ -249,7 +246,7 @@ SECTIONS {
asm/battle_frontier_1.o(.text);
src/menu.o(.text);
asm/battle_frontier_2.o(.text);
- asm/item_menu.o(.text);
+ src/item_menu.o(.text);
asm/list_menu.o(.text);
asm/menu_indicators.o(.text);
src/unk_text_util.o(.text);
@@ -370,9 +367,11 @@ SECTIONS {
src/sprite.o(.rodata);
data/io_reg.o(.rodata);
src/string_util.o(.rodata);
- data/link.o(.rodata);
+ src/link.o(.rodata);
+ src/link_rfu.o(.rodata);
+ data/rom_8011DC0.o(.rodata);
src/rtc.o(.rodata);
- data/main_menu.o(.rodata);
+ src/main_menu.o(.rodata);
data/battle_1.o(.rodata);
data/data2b.o(.rodata);
src/battle_main.o(.rodata);
@@ -383,8 +382,7 @@ SECTIONS {
src/battle_controller_opponent.o(.rodata);
src/battle_controller_link_opponent.o(.rodata);
data/data2c.o(.rodata);
- src/pokemon_1.o(.rodata);
- data/data2e.o(.rodata);
+ src/pokemon.o(.rodata);
src/trig.o(.rodata);
src/util.o(.rodata);
src/daycare.o(.rodata);
@@ -522,7 +520,7 @@ SECTIONS {
data/battle_frontier_1.o(.rodata);
src/menu.o(.rodata);
data/battle_frontier_2.o(.rodata);
- data/item_menu.o(.rodata);
+ src/item_menu.o(.rodata);
data/menu_indicators.o(.rodata);
src/save_location.o(.rodata);
data/item_icon.o(.rodata);
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 355d81d2c..d6ccf9305 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -2,6 +2,7 @@
#include "battle_ai_script_commands.h"
#include "pokemon.h"
#include "battle.h"
+#include "battle_setup.h"
#include "constants/species.h"
#include "constants/abilities.h"
#include "random.h"
@@ -44,26 +45,7 @@ in order to read the next command correctly. refer to battle_ai_scripts.s for th
AI scripts.
*/
-extern u32 gBattleTypeFlags;
-extern u8 gActiveBattler;
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u16 gCurrentMove;
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern u16 gLastMoves[MAX_BATTLERS_COUNT];
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
-extern u32 gStatuses3[MAX_BATTLERS_COUNT];
-extern u16 gSideStatuses[2];
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u16 gDynamicBasePower;
-extern u8 gMoveResultFlags;
-extern s32 gBattleMoveDamage;
-extern u8 gCritMultiplier;
-extern u16 gBattleWeather;
-
extern const struct BattleMove gBattleMoves[];
-extern const struct BaseStats gBaseStats[];
extern const u8 * const gBattleAI_ScriptsTable[];
extern u32 GetAiScriptsInRecordedBattle();
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index 23d223308..c3bb0d422 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -8,23 +8,8 @@
#include "random.h"
#include "util.h"
#include "constants/items.h"
-#include "pokemon_item_effects.h"
-
-extern u8 gActiveBattler;
-extern u8 gAbsentBattlerFlags;
-extern u32 gBattleTypeFlags;
-extern u32 gStatuses3[MAX_BATTLERS_COUNT];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
-extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
-extern u16 gDynamicBasePower;
-extern u8 gMoveResultFlags;
-extern u8 gCritMultiplier;
-extern s32 gBattleMoveDamage;
extern const struct BattleMove gBattleMoves[];
-extern const struct BaseStats gBaseStats[];
extern const u8 gTypeEffectiveness[];
extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 34b7a7476..7606f701d 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -25,8 +25,6 @@
#define ANIM_SPRITE_INDEX_COUNT 8
-extern u8 gBattlerAttacker;
-extern u8 gBattlerTarget;
extern u16 gBattle_WIN0H;
extern u16 gBattle_WIN0V;
extern u16 gBattle_WIN1H;
@@ -35,12 +33,9 @@ extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
-extern u8 gDecompressionBuffer[];
extern const u16 gUnknown_082C8D64[];
extern const u8 * const gBattleAnims_Moves[];
diff --git a/src/battle_bg.c b/src/battle_bg.c
index 51c54f0a3..f493bafea 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -18,6 +18,7 @@
#include "window.h"
#include "text_window.h"
#include "menu.h"
+#include "battle_setup.h"
struct BattleBackground
{
@@ -35,13 +36,10 @@ extern const struct BgTemplate gUnknown_0831AA08[4];
extern const struct WindowTemplate *gUnknown_0831ABA0[];
extern const struct BattleBackground gBattleTerrainTable[];
-extern u8 gBattleTerrain;
-extern u16 gTrainerBattleOpponent_A;
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
-extern u16 gPartnerTrainerId;
extern u8 GetCurrentMapBattleScene(void);
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 1b12a7a80..a399adf25 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -24,47 +24,21 @@
#include "reshow_battle_screen.h"
#include "pokeball.h"
#include "data2.h"
+#include "battle_setup.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void (*gPreBattleCallback1)(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u16 gSpecialVar_ItemId;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
-extern u16 gUnknown_020243FC;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u16 gPartnerTrainerId;
-extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern u8 gUnknown_020244B4[];
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct UnusedControllerStruct gUnknown_02022D0C;
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct BattleMove gBattleMoves[];
-extern const u8 gFacilityClassToPicIndex[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
extern u16 sub_8068B48(void);
+extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions
static void LinkOpponentHandleGetMonData(void);
@@ -1270,7 +1244,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
{
- if (gActiveBattler == 1)
+ if (gActiveBattler == B_POSITION_OPPONENT_LEFT)
trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_A);
else
trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B);
@@ -1280,18 +1254,18 @@ static void LinkOpponentHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN)
{
- if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != 0)
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_10];
+ if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE)
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_LEAF];
else
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_9];
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RED];
}
else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE)
{
- if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != 0)
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_12];
+ if (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender != MALE)
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_MAY];
else
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_11];
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN];
}
else
{
@@ -1310,17 +1284,17 @@ static void LinkOpponentHandleDrawTrainerPic(void)
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN)
{
if (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].gender != 0)
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_10];
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_LEAF];
else
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_9];
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RED];
}
else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_SAPPHIRE)
{
if (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].gender != 0)
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_12];
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_MAY];
else
- trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_11];
+ trainerPicId = gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN];
}
else
{
@@ -1722,7 +1696,7 @@ static void LinkOpponentHandleFaintingCry(void)
static void LinkOpponentHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
LinkOpponentBufferExecCompleted();
}
@@ -1744,7 +1718,7 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_28;
@@ -1804,7 +1778,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
}
}
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
@@ -1826,7 +1800,7 @@ static void sub_806782C(void)
static void LinkOpponentHandleCmd49(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
LinkOpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 340a2b566..1734abe62 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -23,34 +23,10 @@
#include "reshow_battle_screen.h"
#include "pokeball.h"
#include "data2.h"
+#include "battle_setup.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void (*gPreBattleCallback1)(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u16 gSpecialVar_ItemId;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
-extern u16 gUnknown_020243FC;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u16 gPartnerTrainerId;
-extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern u8 gUnknown_020244B4[];
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
@@ -60,6 +36,7 @@ extern const struct BattleMove gBattleMoves[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
+extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions
static void LinkPartnerHandleGetMonData(void);
@@ -1543,7 +1520,7 @@ static void LinkPartnerHandleFaintingCry(void)
static void LinkPartnerHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
LinkPartnerBufferExecCompleted();
}
@@ -1589,7 +1566,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_112;
@@ -1636,7 +1613,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
@@ -1658,7 +1635,7 @@ static void sub_814DE9C(void)
static void LinkPartnerHandleCmd49(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
LinkPartnerBufferExecCompleted();
}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 760205d90..26e0191cb 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -27,33 +27,12 @@
#include "random.h"
#include "pokeball.h"
#include "data2.h"
+#include "battle_setup.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern bool8 gDoingBattleAnim;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void *gUnknown_020244D8;
-extern void *gUnknown_020244DC;
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
-extern struct UnusedControllerStruct gUnknown_02022D0C;
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
-extern u16 gUnknown_020243FC;
-extern u8 gUnknown_020244B4[];
-extern void (*gPreBattleCallback1)(void);
+extern struct MusicPlayerInfo gMPlayInfo_BGM;
+extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct BattleMove gBattleMoves[];
@@ -1866,7 +1845,7 @@ static void OpponentHandleFaintingCry(void)
static void OpponentHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
OpponentBufferExecCompleted();
}
@@ -1888,7 +1867,7 @@ static void OpponentHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_26;
@@ -1953,7 +1932,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
}
}
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
@@ -1975,7 +1954,7 @@ static void sub_8062A2C(void)
static void OpponentHandleCmd49(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
OpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 08af2e902..8847715f6 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -26,44 +26,19 @@
#include "random.h"
#include "pokeball.h"
#include "data2.h"
+#include "battle_setup.h"
+#include "item_use.h"
+#include "recorded_battle.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gAbsentBattlerFlags;
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern u8 gPlayerDpadHoldFrames;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void (*gPreBattleCallback1)(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern u8 gMultiUsePlayerCursor;
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern u16 gPartnerTrainerId;
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u16 gSpecialVar_ItemId;
extern u8 gUnknown_0203CEE8;
extern u8 gUnknown_0203CEE9;
extern u8 gUnknown_0203CF00[];
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
-extern u8 gNumberOfMovesToChoose;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern s32 gUnknown_0203CD70;
-extern u8 gBankInMenu;
-extern u32 gBattlePalaceMoveSelectionRngValue;
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
-extern u8 gUnknown_020244B4[];
-extern u16 gUnknown_020243FC;
extern struct UnusedControllerStruct gUnknown_02022D0C;
+extern struct MusicPlayerInfo gMPlayInfo_BGM;
+extern struct SpriteTemplate gUnknown_0202499C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
@@ -897,7 +872,7 @@ static void HandleMoveSwitchting(void)
static void sub_80586F8(void)
{
- if (gLinkVSyncDisabled == 0)
+ if (gWirelessCommType == 0)
{
if (gReceivedRemoteLinkPlayers == 0)
{
@@ -933,7 +908,7 @@ void sub_80587B0(void)
{
if (sub_800A520())
{
- if (gLinkVSyncDisabled == 0)
+ if (gWirelessCommType == 0)
sub_800AC34();
else
sub_800ADF8();
@@ -2677,7 +2652,7 @@ static void PlayerHandleChooseItem(void)
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
- gBankInMenu = gActiveBattler;
+ gBattlerInMenuId = gActiveBattler;
for (i = 0; i < 3; i++)
gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][1 + i];
@@ -2704,7 +2679,7 @@ static void PlayerHandleChoosePokemon(void)
*(&gBattleStruct->field_B0) = gBattleBufferA[gActiveBattler][3];
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gBattlerControllerFuncs[gActiveBattler] = sub_80597CC;
- gBankInMenu = gActiveBattler;
+ gBattlerInMenuId = gActiveBattler;
}
}
@@ -2953,7 +2928,7 @@ static void PlayerHandleFaintingCry(void)
static void PlayerHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
PlayerBufferExecCompleted();
}
@@ -2981,7 +2956,7 @@ static void PlayerHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
@@ -3039,7 +3014,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
@@ -3061,7 +3036,7 @@ static void sub_805CE38(void)
static void PlayerHandleCmd49(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
PlayerBufferExecCompleted();
}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index b2b6baa0a..d2f85f85e 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -22,35 +22,11 @@
#include "reshow_battle_screen.h"
#include "pokeball.h"
#include "data2.h"
+#include "battle_setup.h"
+#include "item_use.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void (*gPreBattleCallback1)(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u16 gSpecialVar_ItemId;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
-extern u8 gBankInMenu;
-extern u16 gUnknown_020243FC;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u16 gPartnerTrainerId;
-extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern u8 gUnknown_020244B4[];
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
@@ -60,6 +36,7 @@ extern const struct BattleMove gBattleMoves[];
extern void sub_81358F4(void);
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
+extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions
static void PlayerPartnerHandleGetMonData(void);
@@ -1796,7 +1773,7 @@ static void PlayerPartnerHandleFaintingCry(void)
static void PlayerPartnerHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
PlayerPartnerBufferExecCompleted();
}
@@ -1835,7 +1812,7 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_77;
@@ -1882,7 +1859,7 @@ static void PlayerPartnerHandleDrawPartyStatusSummary(void)
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
@@ -1904,7 +1881,7 @@ static void sub_81BE498(void)
static void PlayerPartnerHandleCmd49(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
PlayerPartnerBufferExecCompleted();
}
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 8078d0af2..2295c4a75 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -24,38 +24,13 @@
#include "reshow_battle_screen.h"
#include "pokeball.h"
#include "data2.h"
+#include "item_use.h"
+#include "battle_setup.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void (*gPreBattleCallback1)(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u16 gSpecialVar_ItemId;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
-extern u16 gUnknown_020243FC;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u16 gPartnerTrainerId;
-extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern u8 gUnknown_020244B4[];
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct UnusedControllerStruct gUnknown_02022D0C;
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
extern u8 gUnknown_0203C7B4;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
@@ -63,6 +38,7 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u16 sub_8068B48(void);
+extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions
static void RecordedOpponentHandleGetMonData(void);
@@ -1258,7 +1234,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
}
else
{
- trainerPicId = PlayerGenderToFrontTrainerPicId(GetActiveBankLinkPlayerGender());
+ trainerPicId = PlayerGenderToFrontTrainerPicId(GetActiveBattlerLinkPlayerGender());
}
}
else
@@ -1661,7 +1637,7 @@ static void RecordedOpponentHandleFaintingCry(void)
static void RecordedOpponentHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
RecordedOpponentBufferExecCompleted();
}
@@ -1683,7 +1659,7 @@ static void RecordedOpponentHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_70;
@@ -1743,7 +1719,7 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void)
}
}
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
@@ -1765,7 +1741,7 @@ static void sub_818975C(void)
static void RecordedOpponentHandleCmd49(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
RecordedOpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 953f989e9..0d06e26eb 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -23,36 +23,11 @@
#include "reshow_battle_screen.h"
#include "pokeball.h"
#include "data2.h"
+#include "item_use.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void (*gPreBattleCallback1)(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u16 gSpecialVar_ItemId;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
-extern u8 gBankInMenu;
-extern u16 gUnknown_020243FC;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u16 gPartnerTrainerId;
-extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern u8 gUnknown_020244B4[];
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
-extern u8 gBattleCommunication[];
extern u8 gUnknown_0203C7B4;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct UnusedControllerStruct gUnknown_02022D0C;
@@ -63,6 +38,7 @@ extern const struct BattleMove gBattleMoves[];
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
+extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions
static void RecordedPlayerHandleGetMonData(void);
@@ -1230,7 +1206,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- trainerPicId = GetActiveBankLinkPlayerGender();
+ trainerPicId = GetActiveBattlerLinkPlayerGender();
else
trainerPicId = gLinkPlayers[gUnknown_0203C7B4].gender;
}
@@ -1684,7 +1660,7 @@ static void RecordedPlayerHandleFaintingCry(void)
static void RecordedPlayerHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
RecordedPlayerBufferExecCompleted();
}
@@ -1719,7 +1695,7 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_120;
@@ -1766,7 +1742,7 @@ static void RecordedPlayerHandleDrawPartyStatusSummary(void)
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
if (gBattleBufferA[gActiveBattler][2] != 0)
@@ -1788,7 +1764,7 @@ static void sub_818CDF4(void)
static void RecordedPlayerHandleCmd49(void)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
RecordedPlayerBufferExecCompleted();
}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index 608d59418..39eab24ee 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -21,27 +21,11 @@
#include "pokeball.h"
#include "data2.h"
#include "pokeblock.h"
+#include "item_use.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern void (*gPreBattleCallback1)(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u16 gSpecialVar_ItemId;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
-extern u8 gBankInMenu;
-extern u16 gUnknown_020243FC;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
@@ -500,7 +484,7 @@ static void SafariHandleChooseItem(void)
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
gBattlerControllerFuncs[gActiveBattler] = SafariOpenPokeblockCase;
- gBankInMenu = gActiveBattler;
+ gBattlerInMenuId = gActiveBattler;
}
static void SafariHandleChoosePokemon(void)
@@ -648,7 +632,7 @@ static void SafariHandleFaintingCry(void)
static void SafariHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
SafariBufferExecCompleted();
}
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index dd01e5996..445feaf7a 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -27,38 +27,12 @@
#include "pokeball.h"
#include "data2.h"
#include "party_menu.h"
+#include "battle_setup.h"
+#include "item_use.h"
-extern u32 gBattleControllerExecFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gAbsentBattlerFlags;
-extern u8 gBattlersCount;
-extern bool8 gDoingBattleAnim;
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern u8 gMultiUsePlayerCursor;
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern u16 gPartnerTrainerId;
-extern struct SpriteTemplate gUnknown_0202499C;
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u16 gSpecialVar_ItemId;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleOutcome;
-extern u8 gNumberOfMovesToChoose;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern s32 gUnknown_0203CD70;
-extern u8 gBankInMenu;
-extern u32 gBattlePalaceMoveSelectionRngValue;
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
-extern u8 gUnknown_020244B4[];
-extern u16 gUnknown_020243FC;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
@@ -1282,7 +1256,7 @@ static void WallyHandleChooseItem(void)
{
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
gBattlerControllerFuncs[gActiveBattler] = OpenBagAfterPaletteFade;
- gBankInMenu = gActiveBattler;
+ gBattlerInMenuId = gActiveBattler;
}
static void WallyHandleChoosePokemon(void)
@@ -1452,7 +1426,7 @@ static void WallyHandleFaintingCry(void)
static void WallyHandleIntroSlide(void)
{
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
- gUnknown_020243FC |= 1;
+ gIntroSlideFlags |= 1;
WallyBufferExecCompleted();
}
@@ -1480,7 +1454,7 @@ static void WallyHandleIntroTrainerBallThrow(void)
gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
@@ -1541,7 +1515,7 @@ static void WallyHandleDrawPartyStatusSummary(void)
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
- gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
WallyBufferExecCompleted();
}
}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 4f523cfa0..3c8b1563f 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -12,37 +12,29 @@
#include "constants/abilities.h"
#include "battle_message.h"
-extern u32 gBattleTypeFlags;
-extern u32 gBattleControllerExecFlags;
-extern void (*gBattleMainFunc)(void);
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern u8 gActiveBattler;
-extern u8 gUnknown_0202428C;
-extern u32 gUnknown_02022FF4;
-extern u8 gUnknown_0203C7B4;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBuffersTransferData[0x100];
+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 gBattlerAttacker;
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
+extern u8 gBankAttacker;
+extern u8 gBankTarget;
+extern u8 gAbsentBankFlags;
extern u8 gEffectBank;
-extern u16 gBattleWeather;
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u16 gCurrentMove;
-extern u16 gChosenMove;
-extern u16 gLastUsedItem;
-extern u8 gBattleOutcome;
-extern u8 gLastUsedAbility;
-extern u8 gStringBattler;
+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[];
@@ -61,7 +53,7 @@ void HandleLinkBattleSetup(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800B488();
if (!gReceivedRemoteLinkPlayers)
OpenLink();
@@ -757,7 +749,7 @@ void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_SIZE_LO] = alignedSize;
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8;
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_ABSENT_BANK_FLAGS] = gAbsentBattlerFlags;
- gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_EFFECT_BANK] = gEffectBank;
+ gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_EFFECT_BANK] = gEffectBattler;
for (i = 0; i < size; i++)
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_DATA + i] = data[i];
@@ -782,7 +774,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
gTasks[taskId].data[11]++;
break;
case 2:
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
{
gTasks[taskId].data[11]++;
}
@@ -923,7 +915,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 2];
gBattlerTarget = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 3];
gAbsentBattlerFlags = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 6];
- gEffectBank = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 7];
+ gEffectBattler = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 7];
}
break;
case 1:
@@ -941,171 +933,171 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck)
{
- gBattleBuffersTransferData[0] = CONTROLLER_GETMONDATA;
- gBattleBuffersTransferData[1] = requestId;
- gBattleBuffersTransferData[2] = monToCheck;
- gBattleBuffersTransferData[3] = 0;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_GETMONDATA;
+ sBattleBuffersTransferData[1] = requestId;
+ sBattleBuffersTransferData[2] = monToCheck;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes)
{
- gBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA;
- gBattleBuffersTransferData[1] = monId;
- gBattleBuffersTransferData[2] = bytes;
- gBattleBuffersTransferData[3] = 0;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA;
+ sBattleBuffersTransferData[1] = monId;
+ sBattleBuffersTransferData[2] = bytes;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
- gBattleBuffersTransferData[1] = requestId;
- gBattleBuffersTransferData[2] = monToCheck;
+ sBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
+ sBattleBuffersTransferData[1] = requestId;
+ sBattleBuffersTransferData[2] = monToCheck;
for (i = 0; i < bytes; i++)
- gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 3 + bytes);
+ sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes);
}
void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA;
- gBattleBuffersTransferData[1] = monId;
- gBattleBuffersTransferData[2] = bytes;
+ sBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA;
+ sBattleBuffersTransferData[1] = monId;
+ sBattleBuffersTransferData[2] = bytes;
for (i = 0; i < bytes; i++)
- gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, bytes + 3);
+ sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3);
}
void BtlController_EmitLoadMonSprite(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_LOADMONSPRITE;
- gBattleBuffersTransferData[1] = CONTROLLER_LOADMONSPRITE;
- gBattleBuffersTransferData[2] = CONTROLLER_LOADMONSPRITE;
- gBattleBuffersTransferData[3] = CONTROLLER_LOADMONSPRITE;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_LOADMONSPRITE;
+ sBattleBuffersTransferData[1] = CONTROLLER_LOADMONSPRITE;
+ sBattleBuffersTransferData[2] = CONTROLLER_LOADMONSPRITE;
+ sBattleBuffersTransferData[3] = CONTROLLER_LOADMONSPRITE;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit)
{
- gBattleBuffersTransferData[0] = CONTROLLER_SWITCHINANIM;
- gBattleBuffersTransferData[1] = partyId;
- gBattleBuffersTransferData[2] = dontClearSubstituteBit;
- gBattleBuffersTransferData[3] = 5;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_SWITCHINANIM;
+ sBattleBuffersTransferData[1] = partyId;
+ sBattleBuffersTransferData[2] = dontClearSubstituteBit;
+ sBattleBuffersTransferData[3] = 5;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1)
{
- gBattleBuffersTransferData[0] = CONTROLLER_RETURNMONTOBALL;
- gBattleBuffersTransferData[1] = arg1;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
+ sBattleBuffersTransferData[0] = CONTROLLER_RETURNMONTOBALL;
+ sBattleBuffersTransferData[1] = arg1;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
void BtlController_EmitDrawTrainerPic(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_DRAWTRAINERPIC;
- gBattleBuffersTransferData[1] = CONTROLLER_DRAWTRAINERPIC;
- gBattleBuffersTransferData[2] = CONTROLLER_DRAWTRAINERPIC;
- gBattleBuffersTransferData[3] = CONTROLLER_DRAWTRAINERPIC;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_DRAWTRAINERPIC;
+ sBattleBuffersTransferData[1] = CONTROLLER_DRAWTRAINERPIC;
+ sBattleBuffersTransferData[2] = CONTROLLER_DRAWTRAINERPIC;
+ sBattleBuffersTransferData[3] = CONTROLLER_DRAWTRAINERPIC;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitTrainerSlide(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDE;
- gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDE;
- gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDE;
- gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDE;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDE;
+ sBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDE;
+ sBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDE;
+ sBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDE;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitTrainerSlideBack(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDEBACK;
- gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDEBACK;
- gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDEBACK;
- gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDEBACK;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDEBACK;
+ sBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDEBACK;
+ sBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDEBACK;
+ sBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDEBACK;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitFaintAnimation(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_FAINTANIMATION;
- gBattleBuffersTransferData[1] = CONTROLLER_FAINTANIMATION;
- gBattleBuffersTransferData[2] = CONTROLLER_FAINTANIMATION;
- gBattleBuffersTransferData[3] = CONTROLLER_FAINTANIMATION;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_FAINTANIMATION;
+ sBattleBuffersTransferData[1] = CONTROLLER_FAINTANIMATION;
+ sBattleBuffersTransferData[2] = CONTROLLER_FAINTANIMATION;
+ sBattleBuffersTransferData[3] = CONTROLLER_FAINTANIMATION;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitPaletteFade(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
- gBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE;
- gBattleBuffersTransferData[2] = CONTROLLER_PALETTEFADE;
- gBattleBuffersTransferData[3] = CONTROLLER_PALETTEFADE;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
+ sBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE;
+ sBattleBuffersTransferData[2] = CONTROLLER_PALETTEFADE;
+ sBattleBuffersTransferData[3] = CONTROLLER_PALETTEFADE;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitSuccessBallThrowAnim(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
- gBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM;
- gBattleBuffersTransferData[2] = CONTROLLER_SUCCESSBALLTHROWANIM;
- gBattleBuffersTransferData[3] = CONTROLLER_SUCCESSBALLTHROWANIM;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ sBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ sBattleBuffersTransferData[2] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ sBattleBuffersTransferData[3] = CONTROLLER_SUCCESSBALLTHROWANIM;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_BALLTHROWANIM;
- gBattleBuffersTransferData[1] = caseId;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
+ sBattleBuffersTransferData[0] = CONTROLLER_BALLTHROWANIM;
+ sBattleBuffersTransferData[1] = caseId;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
- gBattleBuffersTransferData[1] = toWait;
+ sBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
+ sBattleBuffersTransferData[1] = toWait;
for (i = 0; i < toWait * 3; i++)
- gBattleBuffersTransferData[2 + i] = *(u8*)(data++);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, toWait * 3 + 2);
+ sBattleBuffersTransferData[2 + i] = *(u8*)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2);
}
void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit)
{
- gBattleBuffersTransferData[0] = CONTROLLER_MOVEANIMATION;
- gBattleBuffersTransferData[1] = move;
- gBattleBuffersTransferData[2] = (move & 0xFF00) >> 8;
- gBattleBuffersTransferData[3] = turnOfMove;
- gBattleBuffersTransferData[4] = movePower;
- gBattleBuffersTransferData[5] = (movePower & 0xFF00) >> 8;
- gBattleBuffersTransferData[6] = dmg;
- gBattleBuffersTransferData[7] = (dmg & 0x0000FF00) >> 8;
- gBattleBuffersTransferData[8] = (dmg & 0x00FF0000) >> 16;
- gBattleBuffersTransferData[9] = (dmg & 0xFF000000) >> 24;
- gBattleBuffersTransferData[10] = friendship;
- gBattleBuffersTransferData[11] = multihit;
+ sBattleBuffersTransferData[0] = CONTROLLER_MOVEANIMATION;
+ sBattleBuffersTransferData[1] = move;
+ sBattleBuffersTransferData[2] = (move & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = turnOfMove;
+ sBattleBuffersTransferData[4] = movePower;
+ sBattleBuffersTransferData[5] = (movePower & 0xFF00) >> 8;
+ sBattleBuffersTransferData[6] = dmg;
+ sBattleBuffersTransferData[7] = (dmg & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[8] = (dmg & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[9] = (dmg & 0xFF000000) >> 24;
+ sBattleBuffersTransferData[10] = friendship;
+ sBattleBuffersTransferData[11] = multihit;
if (WEATHER_HAS_EFFECT2)
{
- gBattleBuffersTransferData[12] = gBattleWeather;
- gBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8;
+ sBattleBuffersTransferData[12] = gBattleWeather;
+ sBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8;
}
else
{
- gBattleBuffersTransferData[12] = 0;
- gBattleBuffersTransferData[13] = 0;
+ sBattleBuffersTransferData[12] = 0;
+ sBattleBuffersTransferData[13] = 0;
}
- gBattleBuffersTransferData[14] = 0;
- gBattleBuffersTransferData[15] = 0;
- memcpy(&gBattleBuffersTransferData[16], disableStructPtr, sizeof(struct DisableStruct));
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 16 + sizeof(struct DisableStruct));
+ sBattleBuffersTransferData[14] = 0;
+ sBattleBuffersTransferData[15] = 0;
+ memcpy(&sBattleBuffersTransferData[16], disableStructPtr, sizeof(struct DisableStruct));
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 16 + sizeof(struct DisableStruct));
}
void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
@@ -1113,12 +1105,12 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
s32 i;
struct StringInfoBattle* stringInfo;
- gBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
- gBattleBuffersTransferData[1] = gBattleOutcome;
- gBattleBuffersTransferData[2] = stringID;
- gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
+ sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
+ sBattleBuffersTransferData[1] = gBattleOutcome;
+ sBattleBuffersTransferData[2] = stringID;
+ sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
- stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
+ stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
@@ -1126,7 +1118,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->scrActive = gBattleScripting.battler;
stringInfo->unk1605E = gBattleStruct->field_52;
stringInfo->hpScale = gBattleStruct->hpScale;
- stringInfo->StringBank = gStringBattler;
+ stringInfo->StringBank = gPotentialItemEffectBattler;
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
@@ -1137,7 +1129,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
}
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
}
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
@@ -1145,12 +1137,12 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
s32 i;
struct StringInfoBattle *stringInfo;
- gBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
- gBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
- gBattleBuffersTransferData[2] = stringID;
- gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
+ sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
+ sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
+ sBattleBuffersTransferData[2] = stringID;
+ sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
- stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
+ stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
@@ -1166,386 +1158,386 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
}
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
}
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
{
- gBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION;
- gBattleBuffersTransferData[1] = arg1;
- gBattleBuffersTransferData[2] = arg2;
- gBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION;
+ sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[2] = arg2;
+ sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitUnknownYesNoBox(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
- gBattleBuffersTransferData[1] = CONTROLLER_UNKNOWNYESNOBOX;
- gBattleBuffersTransferData[2] = CONTROLLER_UNKNOWNYESNOBOX;
- gBattleBuffersTransferData[3] = CONTROLLER_UNKNOWNYESNOBOX;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
+ sBattleBuffersTransferData[1] = CONTROLLER_UNKNOWNYESNOBOX;
+ sBattleBuffersTransferData[2] = CONTROLLER_UNKNOWNYESNOBOX;
+ sBattleBuffersTransferData[3] = CONTROLLER_UNKNOWNYESNOBOX;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_CHOOSEMOVE;
- gBattleBuffersTransferData[1] = isDoubleBattle;
- gBattleBuffersTransferData[2] = NoPpNumber;
- gBattleBuffersTransferData[3] = 0;
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEMOVE;
+ sBattleBuffersTransferData[1] = isDoubleBattle;
+ sBattleBuffersTransferData[2] = NoPpNumber;
+ sBattleBuffersTransferData[3] = 0;
for (i = 0; i < sizeof(*movePpData); i++)
- gBattleBuffersTransferData[4 + i] = *((u8*)(movePpData) + i);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(*movePpData) + 4);
+ sBattleBuffersTransferData[4 + i] = *((u8*)(movePpData) + i);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4);
}
void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
+ sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG;
for (i = 0; i < 3; i++)
- gBattleBuffersTransferData[1 + i] = arg1[i];
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[1 + i] = arg1[i];
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
- gBattleBuffersTransferData[1] = caseId;
- gBattleBuffersTransferData[2] = arg2;
- gBattleBuffersTransferData[3] = abilityId;
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
+ sBattleBuffersTransferData[1] = caseId;
+ sBattleBuffersTransferData[2] = arg2;
+ sBattleBuffersTransferData[3] = abilityId;
for (i = 0; i < 3; i++)
- gBattleBuffersTransferData[4 + i] = arg4[i];
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 8); // but only 7 bytes were written
+ sBattleBuffersTransferData[4 + i] = arg4[i];
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // but only 7 bytes were written
}
void BtlController_EmitCmd23(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_23;
- gBattleBuffersTransferData[1] = CONTROLLER_23;
- gBattleBuffersTransferData[2] = CONTROLLER_23;
- gBattleBuffersTransferData[3] = CONTROLLER_23;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_23;
+ sBattleBuffersTransferData[1] = CONTROLLER_23;
+ sBattleBuffersTransferData[2] = CONTROLLER_23;
+ sBattleBuffersTransferData[3] = CONTROLLER_23;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// why is the argument u16 if it's being cast to s16 anyway?
void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue)
{
- gBattleBuffersTransferData[0] = CONTROLLER_HEALTHBARUPDATE;
- gBattleBuffersTransferData[1] = 0;
- gBattleBuffersTransferData[2] = (s16)hpValue;
- gBattleBuffersTransferData[3] = ((s16)hpValue & 0xFF00) >> 8;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_HEALTHBARUPDATE;
+ sBattleBuffersTransferData[1] = 0;
+ sBattleBuffersTransferData[2] = (s16)hpValue;
+ sBattleBuffersTransferData[3] = ((s16)hpValue & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
// why is the argument u16 if it's being cast to s16 anyway?
void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints)
{
- gBattleBuffersTransferData[0] = CONTROLLER_EXPUPDATE;
- gBattleBuffersTransferData[1] = partyId;
- gBattleBuffersTransferData[2] = (s16)expPoints;
- gBattleBuffersTransferData[3] = ((s16)expPoints & 0xFF00) >> 8;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_EXPUPDATE;
+ sBattleBuffersTransferData[1] = partyId;
+ sBattleBuffersTransferData[2] = (s16)expPoints;
+ sBattleBuffersTransferData[3] = ((s16)expPoints & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2)
{
- gBattleBuffersTransferData[0] = CONTROLLER_STATUSICONUPDATE;
- gBattleBuffersTransferData[1] = status1;
- gBattleBuffersTransferData[2] = (status1 & 0x0000FF00) >> 8;
- gBattleBuffersTransferData[3] = (status1 & 0x00FF0000) >> 16;
- gBattleBuffersTransferData[4] = (status1 & 0xFF000000) >> 24;
- gBattleBuffersTransferData[5] = status2;
- gBattleBuffersTransferData[6] = (status2 & 0x0000FF00) >> 8;
- gBattleBuffersTransferData[7] = (status2 & 0x00FF0000) >> 16;
- gBattleBuffersTransferData[8] = (status2 & 0xFF000000) >> 24;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 9);
+ sBattleBuffersTransferData[0] = CONTROLLER_STATUSICONUPDATE;
+ sBattleBuffersTransferData[1] = status1;
+ sBattleBuffersTransferData[2] = (status1 & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[3] = (status1 & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[4] = (status1 & 0xFF000000) >> 24;
+ sBattleBuffersTransferData[5] = status2;
+ sBattleBuffersTransferData[6] = (status2 & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[7] = (status2 & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[8] = (status2 & 0xFF000000) >> 24;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 9);
}
void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status)
{
- gBattleBuffersTransferData[0] = CONTROLLER_STATUSANIMATION;
- gBattleBuffersTransferData[1] = status2;
- gBattleBuffersTransferData[2] = status;
- gBattleBuffersTransferData[3] = (status & 0x0000FF00) >> 8;
- gBattleBuffersTransferData[4] = (status & 0x00FF0000) >> 16;
- gBattleBuffersTransferData[5] = (status & 0xFF000000) >> 24;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 6);
+ sBattleBuffersTransferData[0] = CONTROLLER_STATUSANIMATION;
+ sBattleBuffersTransferData[1] = status2;
+ sBattleBuffersTransferData[2] = status;
+ sBattleBuffersTransferData[3] = (status & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[4] = (status & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[5] = (status & 0xFF000000) >> 24;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6);
}
void BtlController_EmitStatusXor(u8 bufferId, u8 b)
{
- gBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR;
- gBattleBuffersTransferData[1] = b;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
+ sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR;
+ sBattleBuffersTransferData[1] = b;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_DATATRANSFER;
- gBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
- gBattleBuffersTransferData[2] = size;
- gBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
+ sBattleBuffersTransferData[0] = CONTROLLER_DATATRANSFER;
+ sBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
+ sBattleBuffersTransferData[2] = size;
+ sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
for (i = 0; i < size; i++)
- gBattleBuffersTransferData[4 + i] = *(u8*)(data++);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 4);
+ sBattleBuffersTransferData[4 + i] = *(u8*)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4);
}
void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_DMA3TRANSFER;
- gBattleBuffersTransferData[1] = (u32)(dst);
- gBattleBuffersTransferData[2] = ((u32)(dst) & 0x0000FF00) >> 8;
- gBattleBuffersTransferData[3] = ((u32)(dst) & 0x00FF0000) >> 16;
- gBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24;
- gBattleBuffersTransferData[5] = size;
- gBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
+ sBattleBuffersTransferData[0] = CONTROLLER_DMA3TRANSFER;
+ sBattleBuffersTransferData[1] = (u32)(dst);
+ sBattleBuffersTransferData[2] = ((u32)(dst) & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[3] = ((u32)(dst) & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24;
+ sBattleBuffersTransferData[5] = size;
+ sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
for (i = 0; i < size; i++)
- gBattleBuffersTransferData[7 + i] = *(u8*)(data++);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 7);
+ sBattleBuffersTransferData[7 + i] = *(u8*)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7);
}
void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_31;
- gBattleBuffersTransferData[1] = songId;
- gBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
+ sBattleBuffersTransferData[0] = CONTROLLER_31;
+ sBattleBuffersTransferData[1] = songId;
+ sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
for (i = 0; i < songId; i++) // ????
- gBattleBuffersTransferData[3 + i] = *(u8*)(unusedDumbDataParameter++);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, songId + 3);
+ sBattleBuffersTransferData[3 + i] = *(u8*)(unusedDumbDataParameter++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3);
}
void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_32;
- gBattleBuffersTransferData[1] = size;
- gBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
+ sBattleBuffersTransferData[0] = CONTROLLER_32;
+ sBattleBuffersTransferData[1] = size;
+ sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
for (i = 0; i < size; i++)
- gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 3);
+ sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3);
}
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
{
- gBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
- gBattleBuffersTransferData[1] = arg1;
- gBattleBuffersTransferData[2] = arg2;
- gBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
+ sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[2] = arg2;
+ sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
- gBattleBuffersTransferData[1] = b;
+ sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
+ sBattleBuffersTransferData[1] = b;
for (i = 0; i < 3; i++)
- gBattleBuffersTransferData[2 + i] = c[i];
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 5);
+ sBattleBuffersTransferData[2 + i] = c[i];
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5);
}
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1)
{
- gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
- gBattleBuffersTransferData[1] = arg1;
- gBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
- gBattleBuffersTransferData[3] = 0;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
+ sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b)
{
- gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
- gBattleBuffersTransferData[1] = b;
- gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
- gBattleBuffersTransferData[3] = 0;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
+ sBattleBuffersTransferData[1] = b;
+ sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitCmd37(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_37;
- gBattleBuffersTransferData[1] = CONTROLLER_37;
- gBattleBuffersTransferData[2] = CONTROLLER_37;
- gBattleBuffersTransferData[3] = CONTROLLER_37;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_37;
+ sBattleBuffersTransferData[1] = CONTROLLER_37;
+ sBattleBuffersTransferData[2] = CONTROLLER_37;
+ sBattleBuffersTransferData[3] = CONTROLLER_37;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitCmd38(u8 bufferId, u8 b)
{
- gBattleBuffersTransferData[0] = CONTROLLER_38;
- gBattleBuffersTransferData[1] = b;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
+ sBattleBuffersTransferData[0] = CONTROLLER_38;
+ sBattleBuffersTransferData[1] = b;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
void BtlController_EmitCmd39(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_39;
- gBattleBuffersTransferData[1] = CONTROLLER_39;
- gBattleBuffersTransferData[2] = CONTROLLER_39;
- gBattleBuffersTransferData[3] = CONTROLLER_39;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_39;
+ sBattleBuffersTransferData[1] = CONTROLLER_39;
+ sBattleBuffersTransferData[2] = CONTROLLER_39;
+ sBattleBuffersTransferData[3] = CONTROLLER_39;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitCmd40(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_40;
- gBattleBuffersTransferData[1] = CONTROLLER_40;
- gBattleBuffersTransferData[2] = CONTROLLER_40;
- gBattleBuffersTransferData[3] = CONTROLLER_40;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_40;
+ sBattleBuffersTransferData[1] = CONTROLLER_40;
+ sBattleBuffersTransferData[2] = CONTROLLER_40;
+ sBattleBuffersTransferData[3] = CONTROLLER_40;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitHitAnimation(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_HITANIMATION;
- gBattleBuffersTransferData[1] = CONTROLLER_HITANIMATION;
- gBattleBuffersTransferData[2] = CONTROLLER_HITANIMATION;
- gBattleBuffersTransferData[3] = CONTROLLER_HITANIMATION;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_HITANIMATION;
+ sBattleBuffersTransferData[1] = CONTROLLER_HITANIMATION;
+ sBattleBuffersTransferData[2] = CONTROLLER_HITANIMATION;
+ sBattleBuffersTransferData[3] = CONTROLLER_HITANIMATION;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitCmd42(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_42;
- gBattleBuffersTransferData[1] = CONTROLLER_42;
- gBattleBuffersTransferData[2] = CONTROLLER_42;
- gBattleBuffersTransferData[3] = CONTROLLER_42;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_42;
+ sBattleBuffersTransferData[1] = CONTROLLER_42;
+ sBattleBuffersTransferData[2] = CONTROLLER_42;
+ sBattleBuffersTransferData[3] = CONTROLLER_42;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitPlaySE(u8 bufferId, u16 songId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND;
- gBattleBuffersTransferData[1] = songId;
- gBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
- gBattleBuffersTransferData[3] = 0;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND;
+ sBattleBuffersTransferData[1] = songId;
+ sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = 0;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM)
{
- gBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM;
- gBattleBuffersTransferData[1] = songId;
- gBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
- gBattleBuffersTransferData[3] = playBGM;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_PLAYFANFAREORBGM;
+ sBattleBuffersTransferData[1] = songId;
+ sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8;
+ sBattleBuffersTransferData[3] = playBGM;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitFaintingCry(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_FAINTINGCRY;
- gBattleBuffersTransferData[1] = CONTROLLER_FAINTINGCRY;
- gBattleBuffersTransferData[2] = CONTROLLER_FAINTINGCRY;
- gBattleBuffersTransferData[3] = CONTROLLER_FAINTINGCRY;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_FAINTINGCRY;
+ sBattleBuffersTransferData[1] = CONTROLLER_FAINTINGCRY;
+ sBattleBuffersTransferData[2] = CONTROLLER_FAINTINGCRY;
+ sBattleBuffersTransferData[3] = CONTROLLER_FAINTINGCRY;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_INTROSLIDE;
- gBattleBuffersTransferData[1] = terrainId;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
+ sBattleBuffersTransferData[0] = CONTROLLER_INTROSLIDE;
+ sBattleBuffersTransferData[1] = terrainId;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
void BtlController_EmitIntroTrainerBallThrow(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_INTROTRAINERBALLTHROW;
- gBattleBuffersTransferData[1] = CONTROLLER_INTROTRAINERBALLTHROW;
- gBattleBuffersTransferData[2] = CONTROLLER_INTROTRAINERBALLTHROW;
- gBattleBuffersTransferData[3] = CONTROLLER_INTROTRAINERBALLTHROW;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_INTROTRAINERBALLTHROW;
+ sBattleBuffersTransferData[1] = CONTROLLER_INTROTRAINERBALLTHROW;
+ sBattleBuffersTransferData[2] = CONTROLLER_INTROTRAINERBALLTHROW;
+ sBattleBuffersTransferData[3] = CONTROLLER_INTROTRAINERBALLTHROW;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2)
{
s32 i;
- gBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
- gBattleBuffersTransferData[1] = arg2 & 0x7F;
- gBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
- gBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[1] = arg2 & 0x7F;
+ sBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
+ sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * 6); i++)
- gBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct HpAndStatus) * 6 + 4);
+ sBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * 6 + 4);
}
void BtlController_EmitCmd49(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_49;
- gBattleBuffersTransferData[1] = CONTROLLER_49;
- gBattleBuffersTransferData[2] = CONTROLLER_49;
- gBattleBuffersTransferData[3] = CONTROLLER_49;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_49;
+ sBattleBuffersTransferData[1] = CONTROLLER_49;
+ sBattleBuffersTransferData[2] = CONTROLLER_49;
+ sBattleBuffersTransferData[3] = CONTROLLER_49;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitCmd50(u8 bufferId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_50;
- gBattleBuffersTransferData[1] = CONTROLLER_50;
- gBattleBuffersTransferData[2] = CONTROLLER_50;
- gBattleBuffersTransferData[3] = CONTROLLER_50;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_50;
+ sBattleBuffersTransferData[1] = CONTROLLER_50;
+ sBattleBuffersTransferData[2] = CONTROLLER_50;
+ sBattleBuffersTransferData[3] = CONTROLLER_50;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible)
{
- gBattleBuffersTransferData[0] = CONTROLLER_SPRITEINVISIBILITY;
- gBattleBuffersTransferData[1] = isInvisible;
- gBattleBuffersTransferData[2] = CONTROLLER_SPRITEINVISIBILITY;
- gBattleBuffersTransferData[3] = CONTROLLER_SPRITEINVISIBILITY;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_SPRITEINVISIBILITY;
+ sBattleBuffersTransferData[1] = isInvisible;
+ sBattleBuffersTransferData[2] = CONTROLLER_SPRITEINVISIBILITY;
+ sBattleBuffersTransferData[3] = CONTROLLER_SPRITEINVISIBILITY;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument)
{
- gBattleBuffersTransferData[0] = CONTROLLER_BATTLEANIMATION;
- gBattleBuffersTransferData[1] = animationId;
- gBattleBuffersTransferData[2] = argument;
- gBattleBuffersTransferData[3] = (argument & 0xFF00) >> 8;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[0] = CONTROLLER_BATTLEANIMATION;
+ sBattleBuffersTransferData[1] = animationId;
+ sBattleBuffersTransferData[2] = argument;
+ sBattleBuffersTransferData[3] = (argument & 0xFF00) >> 8;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2)
{
bool8 arg2_ = arg2;
- gBattleBuffersTransferData[0] = CONTROLLER_LINKSTANDBYMSG;
- gBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[0] = CONTROLLER_LINKSTANDBYMSG;
+ sBattleBuffersTransferData[1] = arg1;
if (arg2_)
- gBattleBuffersTransferData[3] = gBattleBuffersTransferData[2] = sub_81850DC(&gBattleBuffersTransferData[4]);
+ sBattleBuffersTransferData[3] = sBattleBuffersTransferData[2] = sub_81850DC(&sBattleBuffersTransferData[4]);
else
- gBattleBuffersTransferData[3] = gBattleBuffersTransferData[2] = 0;
+ sBattleBuffersTransferData[3] = sBattleBuffersTransferData[2] = 0;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, gBattleBuffersTransferData[2] + 4);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sBattleBuffersTransferData[2] + 4);
}
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId)
{
- gBattleBuffersTransferData[0] = CONTROLLER_RESETACTIONMOVESELECTION;
- gBattleBuffersTransferData[1] = caseId;
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
+ sBattleBuffersTransferData[0] = CONTROLLER_RESETACTIONMOVESELECTION;
+ sBattleBuffersTransferData[1] = caseId;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
void BtlController_EmitCmd55(u8 bufferId, u8 arg1)
{
- gBattleBuffersTransferData[0] = CONTROLLER_55;
- gBattleBuffersTransferData[1] = arg1;
- gBattleBuffersTransferData[2] = gSaveBlock2Ptr->field_CA9_b;
- gBattleBuffersTransferData[3] = gSaveBlock2Ptr->field_CA9_b;
- gBattleBuffersTransferData[5] = gBattleBuffersTransferData[4] = sub_81850DC(&gBattleBuffersTransferData[6]);
- PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, gBattleBuffersTransferData[4] + 6);
+ sBattleBuffersTransferData[0] = CONTROLLER_55;
+ sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[2] = gSaveBlock2Ptr->field_CA9_b;
+ sBattleBuffersTransferData[3] = gSaveBlock2Ptr->field_CA9_b;
+ sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = sub_81850DC(&sBattleBuffersTransferData[6]);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sBattleBuffersTransferData[4] + 6);
}
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 7958d07b3..4dc88ab6a 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -22,18 +22,8 @@
#include "blend_palette.h"
#include "contest.h"
#include "constants/songs.h"
+#include "constants/rgb.h"
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gActiveBattler;
-extern u8 gBattlersCount;
-extern u16 gUnknown_020243FC;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
@@ -49,7 +39,6 @@ extern const struct CompressedSpriteSheet gTrainerBackPicTable[];
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern const union AnimCmd* const * const gMonAnimationsSpriteAnimsPtrTable[];
-extern const struct SpriteTemplate gUnknown_08329D98[4];
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
extern const u8 gEnemyMonElevation[];
@@ -68,7 +57,7 @@ extern const u8 gBlankGfxCompressed[];
extern const u16 gBattleInterface_BallStatusBarPal[];
extern const u16 gBattleInterface_BallDisplayPal[];
-extern u8 sub_80688F8(u8, u8 bank);
+extern u8 sub_80688F8(u8, u8 battlerId);
extern u8 pokemon_order_func(u8); // party menu
extern void sub_81B8C68(void);
@@ -366,7 +355,7 @@ void sub_805D770(struct Sprite *sprite, bool8 arg1)
void sub_805D7AC(struct Sprite *sprite)
{
- if (!(gUnknown_020243FC & 1))
+ if (!(gIntroSlideFlags & 1))
{
sprite->pos2.x += sprite->data[0];
if (sprite->pos2.x == 0)
@@ -421,7 +410,7 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status)
}
}
-#define tBank data[0]
+#define tBattlerId data[0]
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument)
{
@@ -451,8 +440,8 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank,
gBattleSpritesDataPtr->animationData->animArg = argument;
LaunchBattleAnimation(gBattleAnims_VariousTable, tableId, FALSE);
taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10);
- gTasks[taskId].tBank = activeBank;
- gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].animFromTableActive = 1;
+ gTasks[taskId].tBattlerId = activeBank;
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1;
return FALSE;
}
@@ -462,12 +451,12 @@ static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].animFromTableActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 0;
DestroyTask(taskId);
}
}
-#undef tBank
+#undef tBattlerId
static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
{
@@ -485,7 +474,7 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
}
}
-#define tBank data[0]
+#define tBattlerId data[0]
void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId)
{
@@ -495,8 +484,8 @@ void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tab
gBattleAnimTarget = defBank;
LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE);
taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10);
- gTasks[taskId].tBank = activeBank;
- gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].specialAnimActive = 1;
+ gTasks[taskId].tBattlerId = activeBank;
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1;
}
static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
@@ -504,12 +493,12 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].specialAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 0;
DestroyTask(taskId);
}
}
-#undef tBank
+#undef tBattlerId
// great function to include newly added moves that don't have animation yet
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
@@ -517,13 +506,13 @@ bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
return FALSE;
}
-bool8 mplay_80342A4(u8 bank)
+bool8 mplay_80342A4(u8 battlerId)
{
u8 zero = 0;
if (IsSEPlaying())
{
- gBattleSpritesDataPtr->healthBoxesData[bank].field_8++;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8++;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_8 < 30)
return TRUE;
@@ -532,14 +521,14 @@ bool8 mplay_80342A4(u8 bank)
}
if (zero == 0)
{
- gBattleSpritesDataPtr->healthBoxesData[bank].field_8 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8 = 0;
return FALSE;
}
return TRUE;
}
-void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank)
+void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
{
u32 monsPersonality, currentPersonality, otId;
u16 species;
@@ -549,50 +538,50 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank)
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
- if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
{
species = GetMonData(mon, MON_DATA_SPECIES);
currentPersonality = monsPersonality;
}
else
{
- species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
- currentPersonality = gTransformedPersonalities[bank];
+ species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
+ currentPersonality = gTransformedPersonalities[battlerId];
}
otId = GetMonData(mon, MON_DATA_OT_ID);
- position = GetBattlerPosition(bank);
+ position = GetBattlerPosition(battlerId);
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
gMonSpritesGfxPtr->sprites[position],
species, currentPersonality);
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + battlerId * 16;
- if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
lzPaletteData = GetMonFrontSpritePal(mon);
else
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
- LoadPalette(gDecompressionBuffer, 0x80 + bank * 16, 0x20);
+ LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + battlerId * 16;
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
- LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[bank]], paletteOffset, 0x20);
+ LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
}
// transform's pink color
- if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
{
- BlendPalette(paletteOffset, 16, 6, 0x7FFF);
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
}
-void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
+void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
{
u32 monsPersonality, currentPersonality, otId;
u16 species;
@@ -602,21 +591,21 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
- if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
{
species = GetMonData(mon, MON_DATA_SPECIES);
currentPersonality = monsPersonality;
}
else
{
- species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
- currentPersonality = gTransformedPersonalities[bank];
+ species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
+ currentPersonality = gTransformedPersonalities[battlerId];
}
otId = GetMonData(mon, MON_DATA_OT_ID);
- position = GetBattlerPosition(bank);
+ position = GetBattlerPosition(battlerId);
- if (sub_80688F8(1, bank) == 1 || gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
+ if (sub_80688F8(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
{
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
gMonSpritesGfxPtr->sprites[position],
@@ -629,28 +618,28 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
species, currentPersonality);
}
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + battlerId * 16;
- if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
lzPaletteData = GetMonFrontSpritePal(mon);
else
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
- LoadPalette(gDecompressionBuffer, 0x80 + bank * 16, 0x20);
+ LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
if (species == SPECIES_CASTFORM)
{
- paletteOffset = 0x100 + bank * 16;
+ paletteOffset = 0x100 + battlerId * 16;
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
- LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[bank]], paletteOffset, 0x20);
+ LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
}
// transform's pink color
- if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
{
- BlendPalette(paletteOffset, 16, 6, 0x7FFF);
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
}
@@ -663,23 +652,23 @@ void nullsub_24(u16 species)
{
}
-void DecompressTrainerFrontPic(u16 frontPicId, u8 bank)
+void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId)
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
DecompressPicFromTable_2(&gTrainerFrontPicTable[frontPicId],
gMonSpritesGfxPtr->sprites[position],
SPECIES_NONE);
LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[frontPicId]);
}
-void DecompressTrainerBackPic(u16 backPicId, u8 bank)
+void DecompressTrainerBackPic(u16 backPicId, u8 battlerId)
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
DecompressPicFromTable_2(&gTrainerBackPicTable[backPicId],
gMonSpritesGfxPtr->sprites[position],
SPECIES_NONE);
LoadCompressedPalette(gTrainerBackPicPaletteTable[backPicId].data,
- 0x100 + 16 * bank, 0x20);
+ 0x100 + 16 * battlerId, 0x20);
}
void nullsub_25(u8 arg0)
@@ -776,7 +765,7 @@ void LoadBattleBarGfx(u8 arg0)
LZDecompressWram(gUnknown_08C093F0, gMonSpritesGfxPtr->barFontGfx);
}
-bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
+bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId)
{
bool8 retVal = FALSE;
@@ -787,13 +776,13 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
(*state1)++;
break;
case 1:
- if (!BattleLoadAllHealthBoxesGfx(*bank))
+ if (!BattleLoadAllHealthBoxesGfx(*battlerId))
{
- (*bank)++;
+ (*battlerId)++;
}
else
{
- *bank = 0;
+ *battlerId = 0;
(*state1)++;
}
break;
@@ -801,47 +790,47 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
(*state1)++;
break;
case 3:
- if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && *bank == 0)
- gHealthboxSpriteIds[*bank] = CreateSafariPlayerHealthboxSprites();
+ if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && *battlerId == 0)
+ gHealthboxSpriteIds[*battlerId] = CreateSafariPlayerHealthboxSprites();
else
- gHealthboxSpriteIds[*bank] = CreateBattlerHealthboxSprites(*bank);
+ gHealthboxSpriteIds[*battlerId] = CreateBattlerHealthboxSprites(*battlerId);
- (*bank)++;
- if (*bank == gBattlersCount)
+ (*battlerId)++;
+ if (*battlerId == gBattlersCount)
{
- *bank = 0;
+ *battlerId = 0;
(*state1)++;
}
break;
case 4:
- InitBattlerHealthboxCoords(*bank);
- if (gBattlerPositions[*bank] <= 1)
- DummyBattleInterfaceFunc(gHealthboxSpriteIds[*bank], FALSE);
+ InitBattlerHealthboxCoords(*battlerId);
+ if (gBattlerPositions[*battlerId] <= 1)
+ DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], FALSE);
else
- DummyBattleInterfaceFunc(gHealthboxSpriteIds[*bank], TRUE);
+ DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], TRUE);
- (*bank)++;
- if (*bank == gBattlersCount)
+ (*battlerId)++;
+ if (*battlerId == gBattlersCount)
{
- *bank = 0;
+ *battlerId = 0;
(*state1)++;
}
break;
case 5:
- if (GetBattlerSide(*bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(*battlerId) == B_SIDE_PLAYER)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
- UpdateHealthboxAttribute(gHealthboxSpriteIds[*bank], &gPlayerParty[gBattlerPartyIndexes[*bank]], HEALTHBOX_ALL);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gPlayerParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
}
else
{
- UpdateHealthboxAttribute(gHealthboxSpriteIds[*bank], &gEnemyParty[gBattlerPartyIndexes[*bank]], HEALTHBOX_ALL);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gEnemyParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
}
- SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*bank]);
- (*bank)++;
- if (*bank == gBattlersCount)
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*battlerId]);
+ (*battlerId)++;
+ if (*battlerId == gBattlersCount)
{
- *bank = 0;
+ *battlerId = 0;
(*state1)++;
}
break;
@@ -875,9 +864,9 @@ void CopyAllBattleSpritesInvisibilities(void)
gBattleSpritesDataPtr->battlerData[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible;
}
-void CopyBattleSpriteInvisibility(u8 bank)
+void CopyBattleSpriteInvisibility(u8 battlerId)
{
- gBattleSpritesDataPtr->battlerData[bank].invisible = gSprites[gBattlerSpriteIds[bank]].invisible;
+ gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
}
void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
@@ -896,7 +885,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
gBattleMonForms[bankAtk] = gBattleSpritesDataPtr->animationData->animArg;
if (gBattleSpritesDataPtr->battlerData[bankAtk].transformSpecies != SPECIES_NONE)
{
- BlendPalette(paletteOffset, 16, 6, 0x7FFF);
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
gSprites[gBattlerSpriteIds[bankAtk]].pos1.y = GetBattlerSpriteDefault_Y(bankAtk);
@@ -965,7 +954,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[bankDef] * 16, paletteOffset, 32);
}
- BlendPalette(paletteOffset, 16, 6, 0x7FFF);
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
if (!IsContest())
@@ -979,7 +968,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
}
}
-void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
+void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
{
u8 position;
s32 i;
@@ -991,17 +980,17 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
if (IsContest())
position = 0;
else
- position = GetBattlerPosition(bank);
+ position = GetBattlerPosition(battlerId);
if (IsContest())
LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]);
- else if (GetBattlerSide(bank) != B_SIDE_PLAYER)
+ else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites[position]);
else
LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]);
i = 1;
- var = bank * 16;
+ var = battlerId * 16;
substitutePal = gSubstituteDollPal;
for (; i < 4; i++)
{
@@ -1018,59 +1007,59 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
{
if (!IsContest())
{
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
else
- BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[bank]], bank);
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
}
}
}
-void LoadBattleMonGfxAndAnimate(u8 bank, bool8 loadMonSprite, u8 spriteId)
+void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId)
{
- BattleLoadSubstituteOrMonSpriteGfx(bank, loadMonSprite);
- StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[bank]);
+ BattleLoadSubstituteOrMonSpriteGfx(battlerId, loadMonSprite);
+ StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[battlerId]);
if (!loadMonSprite)
- gSprites[spriteId].pos1.y = GetSubstituteSpriteDefault_Y(bank);
+ gSprites[spriteId].pos1.y = GetSubstituteSpriteDefault_Y(battlerId);
else
- gSprites[spriteId].pos1.y = GetBattlerSpriteDefault_Y(bank);
+ gSprites[spriteId].pos1.y = GetBattlerSpriteDefault_Y(battlerId);
}
-void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move)
+void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move)
{
if (move == MOVE_SUBSTITUTE)
- gBattleSpritesDataPtr->battlerData[bank].behindSubstitute = 1;
+ gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 1;
}
-void ClearBehindSubstituteBit(u8 bank)
+void ClearBehindSubstituteBit(u8 battlerId)
{
- gBattleSpritesDataPtr->battlerData[bank].behindSubstitute = 0;
+ gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 0;
}
-void HandleLowHpMusicChange(struct Pokemon *mon, u8 bank)
+void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
{
u16 hp = GetMonData(mon, MON_DATA_HP);
u16 maxHP = GetMonData(mon, MON_DATA_MAX_HP);
if (GetHPBarLevel(hp, maxHP) == HP_BAR_RED)
{
- if (!gBattleSpritesDataPtr->battlerData[bank].lowHpSong)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong)
{
- if (!gBattleSpritesDataPtr->battlerData[bank ^ BIT_FLANK].lowHpSong)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
PlaySE(SE_HINSI);
- gBattleSpritesDataPtr->battlerData[bank].lowHpSong = 1;
+ gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 1;
}
}
else
{
- gBattleSpritesDataPtr->battlerData[bank].lowHpSong = 0;
+ gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 0;
if (!IsDoubleBattle())
{
m4aSongNumStop(SE_HINSI);
return;
}
- if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[bank ^ BIT_FLANK].lowHpSong)
+ if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
{
m4aSongNumStop(SE_HINSI);
return;
@@ -1135,44 +1124,44 @@ void sub_805EB9C(u8 affineMode)
}
}
-#define tBank data[0]
+#define tBattlerId data[0]
void LoadAndCreateEnemyShadowSprites(void)
{
- u8 bank;
+ u8 battlerId;
LoadCompressedObjectPic(&gSpriteSheet_EnemyShadow);
- bank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(bank, 0), GetBattlerSpriteCoord(bank, 1) + 29, 0xC8);
- gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].data[0] = bank;
+ battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
if (IsDoubleBattle())
{
- bank = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
- gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(bank, 0), GetBattlerSpriteCoord(bank, 1) + 29, 0xC8);
- gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].data[0] = bank;
+ battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
}
}
void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
{
bool8 invisible = FALSE;
- u8 bank = shadowSprite->tBank;
- struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[bank]];
+ u8 battlerId = shadowSprite->tBattlerId;
+ struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[battlerId]];
- if (!bankSprite->inUse || !IsBattlerSpritePresent(bank))
+ if (!bankSprite->inUse || !IsBattlerSpritePresent(battlerId))
{
shadowSprite->callback = SpriteCB_SetInvisible;
return;
}
if (gAnimScriptActive || bankSprite->invisible)
invisible = TRUE;
- else if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE
- && gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[bank].transformSpecies] == 0)
+ else if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE
+ && gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies] == 0)
invisible = TRUE;
- if (gBattleSpritesDataPtr->battlerData[bank].behindSubstitute)
+ if (gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute)
invisible = TRUE;
shadowSprite->pos1.x = bankSprite->pos1.x;
@@ -1180,31 +1169,31 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
shadowSprite->invisible = invisible;
}
-#undef tBank
+#undef tBattlerId
void SpriteCB_SetInvisible(struct Sprite *sprite)
{
sprite->invisible = 1;
}
-void SetBattlerShadowSpriteCallback(u8 bank, u16 species)
+void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species)
{
// The player's shadow is never seen
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
return;
- if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
- species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
+ if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
+ species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
if (gEnemyMonElevation[species] != 0)
- gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_EnemyShadow;
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_EnemyShadow;
else
- gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_SetInvisible;
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
}
-void HideBattlerShadowSprite(u8 bank)
+void HideBattlerShadowSprite(u8 battlerId)
{
- gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_SetInvisible;
+ gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
}
void sub_805EF14(void)
@@ -1230,12 +1219,12 @@ void sub_805EF14(void)
}
}
-void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute)
+void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute)
{
- gBattleSpritesDataPtr->battlerData[bank].transformSpecies = SPECIES_NONE;
- gBattleMonForms[bank] = 0;
+ gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE;
+ gBattleMonForms[battlerId] = 0;
if (!dontClearSubstitute)
- ClearBehindSubstituteBit(bank);
+ ClearBehindSubstituteBit(battlerId);
}
void AllocateMonSpritesGfx(void)
diff --git a/src/battle_interface.c b/src/battle_interface.c
index ce37564b7..96462ec04 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -153,11 +153,6 @@ enum
HEALTHBOX_GFX_117,
};
-extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-
extern const u8 * const gNatureNamePointers[];
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
@@ -177,9 +172,6 @@ extern const u16 gBattleInterface_BallStatusBarPal[];
extern const u16 gBattleInterface_BallDisplayPal[];
extern const u8 gHealthboxElementsGfxTable[][32];
-// functions
-extern void LoadBattleBarGfx(u8 arg0);
-
// this file's functions
static const u8 *GetHealthboxElementGfxPtr(u8 elementId);
@@ -658,7 +650,7 @@ static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
}
#else
-__attribute__((naked))
+ASM_DIRECT
static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
{
asm(".syntax unified\n\
@@ -1536,7 +1528,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
gSprites[barSpriteId].pos1.x += 96;
}
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9);
diff --git a/src/battle_main.c b/src/battle_main.c
index 3704ff3b4..78b69212d 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -7,6 +7,7 @@
#include "scanline_effect.h"
#include "battle_setup.h"
#include "battle_scripts.h"
+#include "battle_interface.h"
#include "pokemon.h"
#include "palette.h"
#include "task.h"
@@ -19,6 +20,7 @@
#include "constants/hold_effects.h"
#include "constants/trainers.h"
#include "link.h"
+#include "link_rfu.h"
#include "bg.h"
#include "dma3.h"
#include "string_util.h"
@@ -43,10 +45,13 @@
#include "roamer.h"
#include "tv.h"
#include "safari_zone.h"
-#include "battle_string_ids.h"
+#include "constants/battle_string_ids.h"
#include "data2.h"
+#include "decompress.h"
+#include "international_string_util.h"
+#include "pokeball.h"
-struct UnknownPokemonStruct2
+struct UnknownPokemonStruct4
{
/*0x00*/ u16 species;
/*0x02*/ u16 heldItem;
@@ -60,8 +65,6 @@ struct UnknownPokemonStruct2
/*0x1D*/ u8 language;
};
-extern u8 gBattleCommunication[];
-extern u8 gBattleTerrain;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern u16 gBattle_BG1_X;
@@ -70,84 +73,19 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
-extern u16 gPartnerTrainerId;
extern u16 gBattle_WIN0H;
extern u16 gBattle_WIN0V;
extern u16 gBattle_WIN1H;
extern u16 gBattle_WIN1V;
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
-extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
-extern void (*gPreBattleCallback1)(void);
-extern void (*gBattleMainFunc)(void);
-extern void (*gCB2_AfterEvolution)(void);
-extern struct UnknownPokemonStruct2 gUnknown_02022FF8[3]; // what is it used for?
-extern struct UnknownPokemonStruct2* gUnknown_02023058; // what is it used for?
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
-extern u8 gDecompressionBuffer[];
-extern u16 gUnknown_020243FC;
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern u8 gStringBattler;
-extern u32 gUnknown_02022F88;
-extern u32 gHitMarker;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u16 gPaydayMoney;
-extern u16 gBattleWeather;
-extern u16 gPauseCounterBattle;
-extern u16 gRandomTurnNumber;
-extern u8 gActiveBattler;
-extern u8 gBattlersCount;
-extern u8 gBattlerAttacker;
-extern u8 gBattlerTarget;
-extern u8 gLeveledUpInBattle;
-extern u8 gAbsentBattlerFlags;
-extern u32 gBattleControllerExecFlags;
-extern u8 gMultiHitCounter;
-extern u8 gMoveResultFlags;
-extern s32 gBattleMoveDamage;
-extern const u8* gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
-extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
-extern u16 gLastMoves[MAX_BATTLERS_COUNT];
-extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
-extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
-extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
-extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
-extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
-extern u8 gUnknown_02024284[MAX_BATTLERS_COUNT];
-extern u32 gStatuses3[MAX_BATTLERS_COUNT];
-extern u16 gSideStatuses[2];
-extern u16 gCurrentMove;
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
-extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
-extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
-extern u8 gCurrentActionFuncId;
-extern u8 gLastUsedAbility;
extern u8 gUnknown_0203CF00[];
-extern const u8* gSelectionBattleScripts[MAX_BATTLERS_COUNT];
-extern const u8* gBattlescriptCurrInstr;
-extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
-extern u8 gCurrentTurnActionNumber;
-extern u16 gDynamicBasePower;
-extern u8 gCritMultiplier;
-extern u8 gCurrMovePos;
-extern u8 gUnknown_020241E9;
-extern u16 gChosenMove;
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[];
extern const u8 gUnknown_0831ACE0[];
-extern const u8 gStatStageRatios[][2];
extern const u8 * const gBattleScriptsForMoveEffects[];
extern const u8 * const gBattlescriptsForBallThrow[];
extern const u8 * const gBattlescriptsForRunningByItem[];
@@ -172,20 +110,14 @@ extern const u8 gText_Confusion[];
extern const u8 gText_Love[];
// functions
-extern void ScanlineEffect_Clear(void);
-extern void sub_80356D0(void);
extern void GetFrontierTrainerName(u8* dst, u16 trainerId); // battle tower
extern void sub_8166188(void); // battle tower, sets link battle mons level but why?
extern void sub_8165B88(u8* dst, u16 trainerId); // battle tower, gets language
-extern void PadNameString(u8* dst, u8 arg2); //
extern void sub_81B9150(void);
-extern void sub_800AC34(void);
extern void sub_80B3AF8(u8 taskId); // cable club
-extern void sub_8076918(u8 bank);
-extern void SetHealthboxSpriteVisible(u8 healthoxSpriteId);
extern void sub_81A56B4(void); // battle frontier 2
extern u8 sub_81A9E28(void); // battle frontier 2
-extern void sub_81A56E8(u8 bank); // battle frontier 2
+extern void sub_81A56E8(u8 battlerId); // battle frontier 2
extern void sub_81B8FB0(u8, u8); // party menu
extern u8 pokemon_order_func(u8); // party menu
extern bool8 InBattlePyramid(void);
@@ -233,7 +165,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void);
static void TryDoEventsBeforeFirstTurn(void);
static void HandleTurnActionSelectionState(void);
static void RunTurnActionsFunctions(void);
-static void SetActionsAndBanksTurnOrder(void);
+static void SetActionsAndBattlersTurnOrder(void);
static void sub_803CDF8(void);
static bool8 sub_803CDB8(void);
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void);
@@ -261,6 +193,113 @@ static void HandleAction_Action11(void);
static void HandleAction_NothingIsFainted(void);
static void HandleAction_ActionFinished(void);
+// EWRAM vars
+EWRAM_DATA static u32 sUnusedUnknownArray[25] = {0};
+EWRAM_DATA u32 gBattleTypeFlags = 0;
+EWRAM_DATA u8 gBattleTerrain = 0;
+EWRAM_DATA u32 gUnknown_02022FF4 = 0;
+EWRAM_DATA struct UnknownPokemonStruct4 gUnknown_02022FF8[3] = {0}; // what is it used for?
+EWRAM_DATA struct UnknownPokemonStruct4* gUnknown_02023058 = NULL; // what is it used for?
+EWRAM_DATA u8 *gUnknown_0202305C = NULL;
+EWRAM_DATA u8 *gUnknown_02023060 = NULL;
+EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0};
+EWRAM_DATA u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200] = {0};
+EWRAM_DATA u8 gActiveBattler = 0;
+EWRAM_DATA u32 gBattleControllerExecFlags = 0;
+EWRAM_DATA u8 gBattlersCount = 0;
+EWRAM_DATA u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gBattlerPositions[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gBattleTurnOrder[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gCurrentTurnActionNumber = 0;
+EWRAM_DATA u8 gCurrentActionFuncId = 0;
+EWRAM_DATA struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gCurrMovePos = 0;
+EWRAM_DATA u8 gChosenMovePos = 0;
+EWRAM_DATA u16 gCurrentMove = 0;
+EWRAM_DATA u16 gChosenMove = 0;
+EWRAM_DATA u16 gRandomMove = 0;
+EWRAM_DATA s32 gBattleMoveDamage = 0;
+EWRAM_DATA s32 gHpDealt = 0;
+EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gLastUsedItem = 0;
+EWRAM_DATA u8 gLastUsedAbility = 0;
+EWRAM_DATA u8 gBattlerAttacker = 0;
+EWRAM_DATA u8 gBattlerTarget = 0;
+EWRAM_DATA u8 gBattlerFainted = 0;
+EWRAM_DATA u8 gEffectBattler = 0;
+EWRAM_DATA u8 gPotentialItemEffectBattler = 0;
+EWRAM_DATA u8 gAbsentBattlerFlags = 0;
+EWRAM_DATA u8 gCritMultiplier = 0;
+EWRAM_DATA u8 gMultiHitCounter = 0;
+EWRAM_DATA const u8 *gBattlescriptCurrInstr = NULL;
+EWRAM_DATA u32 gUnusedBattleMainVar = 0;
+EWRAM_DATA u8 gChosenActionByBattler[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
+EWRAM_DATA const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
+EWRAM_DATA u16 gLastPrintedMoves[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gLastMoves[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gLastLandedMoves[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gLastHitByType[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gLastResultingMoves[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gLockedMoves[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gLastHitBy[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gMoveResultFlags = 0;
+EWRAM_DATA u32 gHitMarker = 0;
+EWRAM_DATA static u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gUnknown_0202428C = 0;
+EWRAM_DATA u16 gSideStatuses[2] = {0};
+EWRAM_DATA struct SideTimer gSideTimers[2] = {0};
+EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gPauseCounterBattle = 0;
+EWRAM_DATA u16 gPaydayMoney = 0;
+EWRAM_DATA u16 gRandomTurnNumber = 0;
+EWRAM_DATA u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT] = {0};
+EWRAM_DATA u8 gBattleOutcome = 0;
+EWRAM_DATA struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gBattleWeather = 0;
+EWRAM_DATA struct WishFutureKnock gWishFutureKnock = {0};
+EWRAM_DATA u16 gIntroSlideFlags = 0;
+EWRAM_DATA u8 gSentPokesToOpponent[2] = {0};
+EWRAM_DATA u16 gDynamicBasePower = 0;
+EWRAM_DATA u16 gExpShareExp = 0;
+EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA struct BattleScripting gBattleScripting = {0};
+EWRAM_DATA struct BattleStruct *gBattleStruct = NULL;
+EWRAM_DATA u8 *gLinkBattleSendBuffer = NULL;
+EWRAM_DATA u8 *gLinkBattleRecvBuffer = NULL;
+EWRAM_DATA struct BattleResources *gBattleResources = NULL;
+EWRAM_DATA u8 gActionSelectionCursor[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gBattlerInMenuId = 0;
+EWRAM_DATA bool8 gDoingBattleAnim = FALSE;
+EWRAM_DATA u32 gTransformedPersonalities[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gPlayerDpadHoldFrames = 0;
+EWRAM_DATA struct BattleSpriteData *gBattleSpritesDataPtr = NULL;
+EWRAM_DATA struct MonSpritesGfx *gMonSpritesGfxPtr = NULL;
+EWRAM_DATA struct BattleHealthboxInfo *gUnknown_020244D8 = NULL;
+EWRAM_DATA struct BattleHealthboxInfo *gUnknown_020244DC = NULL;
+EWRAM_DATA u16 gBattleMovePower = 0;
+EWRAM_DATA u16 gMoveToLearn = 0;
+EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0};
+
+// IWRAM common vars
+void (*gPreBattleCallback1)(void);
+void (*gBattleMainFunc)(void);
+struct BattleResults gBattleResults;
+u8 gLeveledUpInBattle;
+void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
+u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
+u8 gMultiUsePlayerCursor;
+u8 gNumberOfMovesToChoose;
+u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
+
// rom const data
static void (* const sTurnActionsFuncsTable[])(void) =
{
@@ -288,11 +327,11 @@ static void (* const sEndTurnFuncsTable[])(void) =
HandleEndTurn_BattleLost, // B_OUTCOME_DREW
HandleEndTurn_RanFromBattle, // B_OUTCOME_RAN
HandleEndTurn_FinishBattle, // B_OUTCOME_PLAYER_TELEPORTED
- HandleEndTurn_MonFled, // B_OUTCOME_POKE_FLED
- HandleEndTurn_FinishBattle, // B_OUTCOME_CAUGHT_POKE
+ HandleEndTurn_MonFled, // B_OUTCOME_MON_FLED
+ HandleEndTurn_FinishBattle, // B_OUTCOME_CAUGHT
HandleEndTurn_FinishBattle, // battle outcome 8
HandleEndTurn_FinishBattle, // B_OUTCOME_FORFEITED
- HandleEndTurn_FinishBattle, // B_OUTCOME_POKE_TELEPORTED
+ HandleEndTurn_FinishBattle, // B_OUTCOME_MON_TELEPORTED
};
const u8 gStatusConditionString_PoisonJpn[8] = _("どく$$$$$");
@@ -699,7 +738,7 @@ static void CB2_HandleStartBattle(void)
sub_805EF14();
gBattleCommunication[MULTIUSE_STATE] = 1;
}
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800E0E8();
break;
case 1:
@@ -723,8 +762,8 @@ static void CB2_HandleStartBattle(void)
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
gBattleCommunication[MULTIUSE_STATE] = 2;
}
- if (gLinkVSyncDisabled)
- sub_800DFB4(0, 0);
+ if (gWirelessCommType)
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
}
else
@@ -751,7 +790,7 @@ static void CB2_HandleStartBattle(void)
gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1];
sub_8185F90(gBlockRecvBuffer[playerMultiplayerId][1]);
sub_8185F90(gBlockRecvBuffer[enemyMultiplayerId][1]);
- sub_8068AA4();
+ SetDeoxysStats();
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -894,7 +933,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
sub_805EF14();
gBattleCommunication[MULTIUSE_STATE] = 1;
}
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800E0E8();
// fall through
case 1:
@@ -925,8 +964,8 @@ static void CB2_HandleStartMultiPartnerBattle(void)
gBattleCommunication[MULTIUSE_STATE] = 2;
}
- if (gLinkVSyncDisabled)
- sub_800DFB4(0, 0);
+ if (gWirelessCommType)
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
}
else
@@ -1163,9 +1202,9 @@ static void CB2_PreInitMultiBattle(void)
case 0:
if (gReceivedRemoteLinkPlayers != 0 && sub_800A520())
{
- gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct2) * 3);
+ gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
sub_80379F8(0);
- SendBlock(bitmask_all_link_players_but_self(), gUnknown_02023058, sizeof(struct UnknownPokemonStruct2) * 3);
+ SendBlock(bitmask_all_link_players_but_self(), gUnknown_02023058, sizeof(struct UnknownPokemonStruct4) * 3);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1183,12 +1222,12 @@ static void CB2_PreInitMultiBattle(void)
if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerMultiplierId].lp_field_18 & 1))
|| (gLinkPlayers[i].lp_field_18 & 1 && gLinkPlayers[playerMultiplierId].lp_field_18 & 1))
{
- memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct2) * 3);
+ memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3);
}
}
else
{
- memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct2) * 3);
+ memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3);
}
}
gBattleCommunication[MULTIUSE_STATE]++;
@@ -1202,14 +1241,14 @@ static void CB2_PreInitMultiBattle(void)
if (sub_800A520() && !gPaletteFade.active)
{
gBattleCommunication[MULTIUSE_STATE]++;
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800ADF8();
else
sub_800AC34();
}
break;
case 3:
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
{
if (sub_8010500())
{
@@ -1247,7 +1286,7 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void)
switch (gBattleCommunication[MULTIUSE_STATE])
{
case 0:
- gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct2) * 3);
+ gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
sub_80379F8(3);
gBattleCommunication[MULTIUSE_STATE]++;
*savedCallback = gMain.savedCallback;
@@ -1294,7 +1333,7 @@ static void CB2_HandleStartMultiBattle(void)
sub_805EF14();
gBattleCommunication[MULTIUSE_STATE] = 1;
}
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800E0E8();
break;
case 1:
@@ -1312,8 +1351,8 @@ static void CB2_HandleStartMultiBattle(void)
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
gBattleCommunication[MULTIUSE_STATE]++;
}
- if (gLinkVSyncDisabled)
- sub_800DFB4(0, 0);
+ if (gWirelessCommType)
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
}
else
@@ -1330,7 +1369,7 @@ static void CB2_HandleStartMultiBattle(void)
ResetBlockReceivedFlags();
sub_8036EB8(4, playerMultiplayerId);
SetAllPlayersBerryData();
- sub_8068AA4();
+ SetDeoxysStats();
var = CreateTask(sub_8035D74, 0);
gTasks[var].data[1] = 0x10E;
gTasks[var].data[2] = 0x5A;
@@ -1698,7 +1737,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
else
personalityValue = 0x88;
- for (j = 0; gTrainers[trainerNum].trainerName[j] != 0xFF; j++)
+ for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; j++)
nameHash += gTrainers[trainerNum].trainerName[j];
switch (gTrainers[trainerNum].partyFlags)
@@ -2097,12 +2136,12 @@ static void sub_8038F34(void)
}
break;
case 8:
- if (!gLinkVSyncDisabled)
+ if (!gWirelessCommType)
sub_800AC34();
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 9:
- if (!gMain.field_439_x4 || gLinkVSyncDisabled || gReceivedRemoteLinkPlayers != 1)
+ if (!gMain.field_439_x4 || gWirelessCommType || gReceivedRemoteLinkPlayers != 1)
{
gMain.field_439_x4 = 0;
SetMainCallback2(gMain.savedCallback);
@@ -2281,13 +2320,13 @@ static void sub_803939C(void)
case 8:
if (--gBattleCommunication[1] == 0)
{
- if (gMain.field_439_x4 && !gLinkVSyncDisabled)
+ if (gMain.field_439_x4 && !gWirelessCommType)
sub_800AC34();
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
case 9:
- if (!gMain.field_439_x4 || gLinkVSyncDisabled || gReceivedRemoteLinkPlayers != 1)
+ if (!gMain.field_439_x4 || gWirelessCommType || gReceivedRemoteLinkPlayers != 1)
{
gMain.field_439_x4 = 0;
if (!gPaletteFade.active)
@@ -2383,7 +2422,7 @@ void oac_poke_opponent(struct Sprite *sprite)
static void sub_803980C(struct Sprite *sprite)
{
- if ((gUnknown_020243FC & 1) == 0)
+ if ((gIntroSlideFlags & 1) == 0)
{
sprite->pos2.x += 2;
if (sprite->pos2.x == 0)
@@ -2437,7 +2476,7 @@ static void sub_80398D0(struct Sprite *sprite)
{
sprite->invisible = FALSE;
sprite->callback = SpriteCallbackDummy_2;
- gUnknown_02022F88 = 0;
+ sUnusedUnknownArray[0] = 0;
}
}
}
@@ -2560,7 +2599,7 @@ void sub_8039BB4(struct Sprite *sprite)
static void oac_poke_ally_(struct Sprite *sprite)
{
- if ((gUnknown_020243FC & 1) == 0)
+ if ((gIntroSlideFlags & 1) == 0)
{
sprite->pos2.x -= 2;
if (sprite->pos2.x == 0)
@@ -2582,7 +2621,7 @@ static void SpriteCallbackDummy_3(struct Sprite *sprite)
void sub_8039C00(struct Sprite *sprite)
{
- if (!(gUnknown_020243FC & 1))
+ if (!(gIntroSlideFlags & 1))
{
sprite->pos2.x += sprite->data[1];
sprite->pos2.y += sprite->data[2];
@@ -2731,7 +2770,7 @@ static void BattleStartClearSetData(void)
dataPtr[j] = 0;
gDisableStructs[i].isFirstTurn = 2;
- gUnknown_02024284[i] = 0;
+ sUnusedBattlersArray[i] = 0;
gLastMoves[i] = 0;
gLastLandedMoves[i] = 0;
gLastHitByType[i] = 0;
@@ -2784,7 +2823,7 @@ static void BattleStartClearSetData(void)
gPauseCounterBattle = 0;
gBattleMoveDamage = 0;
- gUnknown_020243FC = 0;
+ gIntroSlideFlags = 0;
gBattleScripting.animTurn = 0;
gBattleScripting.animTargetsHit = 0;
gLeveledUpInBattle = 0;
@@ -3350,7 +3389,7 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void)
}
#else
-__attribute__((naked))
+ASM_DIRECT
static void BattleIntroOpponent1SendsOutMonAnimation(void)
{
asm(".syntax unified\n\
@@ -3656,12 +3695,12 @@ static void TryDoEventsBeforeFirstTurn(void)
gBattleMons[i].status2 &= ~(STATUS2_FLINCHED);
*(&gBattleStruct->turnEffectsTracker) = 0;
- *(&gBattleStruct->turnEffectsBank) = 0;
+ *(&gBattleStruct->turnEffectsBattlerId) = 0;
*(&gBattleStruct->wishPerishSongState) = 0;
- *(&gBattleStruct->wishPerishSongBank) = 0;
+ *(&gBattleStruct->wishPerishSongBattlerId) = 0;
gBattleScripting.atk49_state = 0;
gBattleStruct->faintedActionsState = 0;
- gBattleStruct->turncountersTracker = 0;
+ gBattleStruct->turnCountersTracker = 0;
gMoveResultFlags = 0;
gRandomTurnNumber = Random();
@@ -3689,10 +3728,10 @@ static void HandleEndTurn_ContinueBattle(void)
CancelMultiTurnMoves(i);
}
gBattleStruct->turnEffectsTracker = 0;
- gBattleStruct->turnEffectsBank = 0;
+ gBattleStruct->turnEffectsBattlerId = 0;
gBattleStruct->wishPerishSongState = 0;
- gBattleStruct->wishPerishSongBank = 0;
- gBattleStruct->turncountersTracker = 0;
+ gBattleStruct->wishPerishSongBattlerId = 0;
+ gBattleStruct->turnCountersTracker = 0;
gMoveResultFlags = 0;
}
}
@@ -3773,7 +3812,7 @@ u8 IsRunningFromBattleImpossible(void)
else
holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item);
- gStringBattler = gActiveBattler;
+ gPotentialItemEffectBattler = gActiveBattler;
if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
return 0;
@@ -3884,7 +3923,7 @@ static void HandleTurnActionSelectionState(void)
switch (gBattleCommunication[gActiveBattler])
{
case STATE_TURN_START_RECORD: // recorded battle related on start of every turn
- RecordedBattle_CopyBankMoves();
+ RecordedBattle_CopyBattlerMoves();
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
break;
case STATE_BEFORE_ACTION_CHOSEN: // choose an action
@@ -4288,7 +4327,7 @@ static void HandleTurnActionSelectionState(void)
if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount)
{
sub_818603C(1);
- gBattleMainFunc = SetActionsAndBanksTurnOrder;
+ gBattleMainFunc = SetActionsAndBattlersTurnOrder;
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
@@ -4345,162 +4384,162 @@ void SwapTurnOrder(u8 id1, u8 id2)
gBattleTurnOrder[id2] = temp;
}
-u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves)
+u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
{
u8 strikesFirst = 0;
- u8 speedMultiplierBank1 = 0, speedMultiplierBank2 = 0;
- u32 speedBank1 = 0, speedBank2 = 0;
+ u8 speedMultiplierBattler1 = 0, speedMultiplierBattler2 = 0;
+ u32 speedBattler1 = 0, speedBattler2 = 0;
u8 holdEffect = 0;
u8 holdEffectParam = 0;
- u16 moveBank1 = 0, moveBank2 = 0;
+ u16 moveBattler1 = 0, moveBattler2 = 0;
if (WEATHER_HAS_EFFECT)
{
- if ((gBattleMons[bank1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
- || (gBattleMons[bank1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
- speedMultiplierBank1 = 2;
+ if ((gBattleMons[battler1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
+ || (gBattleMons[battler1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
+ speedMultiplierBattler1 = 2;
else
- speedMultiplierBank1 = 1;
+ speedMultiplierBattler1 = 1;
- if ((gBattleMons[bank2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
- || (gBattleMons[bank2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
- speedMultiplierBank2 = 2;
+ if ((gBattleMons[battler2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
+ || (gBattleMons[battler2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
+ speedMultiplierBattler2 = 2;
else
- speedMultiplierBank2 = 1;
+ speedMultiplierBattler2 = 1;
}
else
{
- speedMultiplierBank1 = 1;
- speedMultiplierBank2 = 1;
+ speedMultiplierBattler1 = 1;
+ speedMultiplierBattler2 = 1;
}
- speedBank1 = (gBattleMons[bank1].speed * speedMultiplierBank1)
- * (gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][0])
- / (gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][1]);
+ speedBattler1 = (gBattleMons[battler1].speed * speedMultiplierBattler1)
+ * (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][0])
+ / (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][1]);
- if (gBattleMons[bank1].item == ITEM_ENIGMA_BERRY)
+ if (gBattleMons[battler1].item == ITEM_ENIGMA_BERRY)
{
- holdEffect = gEnigmaBerries[bank1].holdEffect;
- holdEffectParam = gEnigmaBerries[bank1].holdEffectParam;
+ holdEffect = gEnigmaBerries[battler1].holdEffect;
+ holdEffectParam = gEnigmaBerries[battler1].holdEffectParam;
}
else
{
- holdEffect = ItemId_GetHoldEffect(gBattleMons[bank1].item);
- holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank1].item);
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[battler1].item);
+ holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler1].item);
}
// badge boost
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
&& FlagGet(FLAG_BADGE03_GET)
- && GetBattlerSide(bank1) == B_SIDE_PLAYER)
+ && GetBattlerSide(battler1) == B_SIDE_PLAYER)
{
- speedBank1 = (speedBank1 * 110) / 100;
+ speedBattler1 = (speedBattler1 * 110) / 100;
}
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
- speedBank1 /= 2;
+ speedBattler1 /= 2;
- if (gBattleMons[bank1].status1 & STATUS1_PARALYSIS)
- speedBank1 /= 4;
+ if (gBattleMons[battler1].status1 & STATUS1_PARALYSIS)
+ speedBattler1 /= 4;
if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
- speedBank1 = UINT_MAX;
+ speedBattler1 = UINT_MAX;
- // check second bank's speed
+ // check second battlerId's speed
- speedBank2 = (gBattleMons[bank2].speed * speedMultiplierBank2)
- * (gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][0])
- / (gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][1]);
+ speedBattler2 = (gBattleMons[battler2].speed * speedMultiplierBattler2)
+ * (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][0])
+ / (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][1]);
- if (gBattleMons[bank2].item == ITEM_ENIGMA_BERRY)
+ if (gBattleMons[battler2].item == ITEM_ENIGMA_BERRY)
{
- holdEffect = gEnigmaBerries[bank2].holdEffect;
- holdEffectParam = gEnigmaBerries[bank2].holdEffectParam;
+ holdEffect = gEnigmaBerries[battler2].holdEffect;
+ holdEffectParam = gEnigmaBerries[battler2].holdEffectParam;
}
else
{
- holdEffect = ItemId_GetHoldEffect(gBattleMons[bank2].item);
- holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank2].item);
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[battler2].item);
+ holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler2].item);
}
// badge boost
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
&& FlagGet(FLAG_BADGE03_GET)
- && GetBattlerSide(bank2) == B_SIDE_PLAYER)
+ && GetBattlerSide(battler2) == B_SIDE_PLAYER)
{
- speedBank2 = (speedBank2 * 110) / 100;
+ speedBattler2 = (speedBattler2 * 110) / 100;
}
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
- speedBank2 /= 2;
+ speedBattler2 /= 2;
- if (gBattleMons[bank2].status1 & STATUS1_PARALYSIS)
- speedBank2 /= 4;
+ if (gBattleMons[battler2].status1 & STATUS1_PARALYSIS)
+ speedBattler2 /= 4;
if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
- speedBank2 = UINT_MAX;
+ speedBattler2 = UINT_MAX;
if (ignoreChosenMoves)
{
- moveBank1 = MOVE_NONE;
- moveBank2 = MOVE_NONE;
+ moveBattler1 = MOVE_NONE;
+ moveBattler2 = MOVE_NONE;
}
else
{
- if (gChosenActionByBattler[bank1] == B_ACTION_USE_MOVE)
+ if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE)
{
- if (gProtectStructs[bank1].onlyStruggle)
- moveBank1 = MOVE_STRUGGLE;
+ if (gProtectStructs[battler1].onlyStruggle)
+ moveBattler1 = MOVE_STRUGGLE;
else
- moveBank1 = gBattleMons[bank1].moves[*(gBattleStruct->chosenMovePositions + bank1)];
+ moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)];
}
else
- moveBank1 = MOVE_NONE;
+ moveBattler1 = MOVE_NONE;
- if (gChosenActionByBattler[bank2] == B_ACTION_USE_MOVE)
+ if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE)
{
- if (gProtectStructs[bank2].onlyStruggle)
- moveBank2 = MOVE_STRUGGLE;
+ if (gProtectStructs[battler2].onlyStruggle)
+ moveBattler2 = MOVE_STRUGGLE;
else
- moveBank2 = gBattleMons[bank2].moves[*(gBattleStruct->chosenMovePositions + bank2)];
+ moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)];
}
else
- moveBank2 = MOVE_NONE;
+ moveBattler2 = MOVE_NONE;
}
// both move priorities are different than 0
- if (gBattleMoves[moveBank1].priority != 0 || gBattleMoves[moveBank2].priority != 0)
+ if (gBattleMoves[moveBattler1].priority != 0 || gBattleMoves[moveBattler2].priority != 0)
{
// both priorities are the same
- if (gBattleMoves[moveBank1].priority == gBattleMoves[moveBank2].priority)
+ if (gBattleMoves[moveBattler1].priority == gBattleMoves[moveBattler2].priority)
{
- if (speedBank1 == speedBank2 && Random() & 1)
+ if (speedBattler1 == speedBattler2 && Random() & 1)
strikesFirst = 2; // same speeds, same priorities
- else if (speedBank1 < speedBank2)
- strikesFirst = 1; // bank2 has more speed
+ else if (speedBattler1 < speedBattler2)
+ strikesFirst = 1; // battler2 has more speed
- // else bank1 has more speed
+ // else battler1 has more speed
}
- else if (gBattleMoves[moveBank1].priority < gBattleMoves[moveBank2].priority)
- strikesFirst = 1; // bank2's move has greater priority
+ else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority)
+ strikesFirst = 1; // battler2's move has greater priority
- // else bank1's move has greater priority
+ // else battler1's move has greater priority
}
// both priorities are equal to 0
else
{
- if (speedBank1 == speedBank2 && Random() & 1)
+ if (speedBattler1 == speedBattler2 && Random() & 1)
strikesFirst = 2; // same speeds, same priorities
- else if (speedBank1 < speedBank2)
- strikesFirst = 1; // bank2 has more speed
+ else if (speedBattler1 < speedBattler2)
+ strikesFirst = 1; // battler2 has more speed
- // else bank1 has more speed
+ // else battler1 has more speed
}
return strikesFirst;
}
-static void SetActionsAndBanksTurnOrder(void)
+static void SetActionsAndBattlersTurnOrder(void)
{
s32 var = 0;
s32 i, j;
@@ -4556,7 +4595,7 @@ static void SetActionsAndBanksTurnOrder(void)
}
}
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
- gBattleStruct->focusPunchBank = 0;
+ gBattleStruct->focusPunchBattlerId = 0;
return;
}
else
@@ -4583,14 +4622,14 @@ static void SetActionsAndBanksTurnOrder(void)
{
for (j = i + 1; j < gBattlersCount; j++)
{
- u8 bank1 = gBattleTurnOrder[i];
- u8 bank2 = gBattleTurnOrder[j];
+ u8 battler1 = gBattleTurnOrder[i];
+ u8 battler2 = gBattleTurnOrder[j];
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
&& gActionsByTurnOrder[j] != B_ACTION_SWITCH)
{
- if (GetWhoStrikesFirst(bank1, bank2, FALSE))
+ if (GetWhoStrikesFirst(battler1, battler2, FALSE))
SwapTurnOrder(i, j);
}
}
@@ -4598,7 +4637,7 @@ static void SetActionsAndBanksTurnOrder(void)
}
}
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
- gBattleStruct->focusPunchBank = 0;
+ gBattleStruct->focusPunchBattlerId = 0;
}
static void TurnValuesCleanUp(bool8 var0)
@@ -4654,10 +4693,10 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
{
if (!(gHitMarker & HITMARKER_RUN))
{
- while (gBattleStruct->focusPunchBank < gBattlersCount)
+ while (gBattleStruct->focusPunchBattlerId < gBattlersCount)
{
- gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBank;
- gBattleStruct->focusPunchBank++;
+ gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId;
+ gBattleStruct->focusPunchBattlerId++;
if (gChosenMoveByBattler[gActiveBattler] == MOVE_FOCUS_PUNCH
&& !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
&& !(gDisableStructs[gBattlerAttacker].truantCounter)
@@ -4700,7 +4739,7 @@ static void RunTurnActionsFunctions(void)
}
else
{
- if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank
+ if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId
{
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
@@ -4934,7 +4973,7 @@ static void TryEvolvePokemon(void)
while (gLeveledUpInBattle != 0)
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (gLeveledUpInBattle & gBitTable[i])
{
@@ -4983,7 +5022,7 @@ static void ReturnFromBattleToOverworld(void)
if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
{
UpdateRoamerHPStatus(&gEnemyParty[0]);
- if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
+ if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT)
SetRoamerInactive();
}
@@ -5031,7 +5070,7 @@ static void HandleAction_UseMove(void)
gMoveResultFlags = 0;
gMultiHitCounter = 0;
gBattleCommunication[6] = 0;
- gCurrMovePos = gUnknown_020241E9 = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
+ gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
// choose move
if (gProtectStructs[gBattlerAttacker].onlyStruggle)
@@ -5050,14 +5089,14 @@ static void HandleAction_UseMove(void)
&& gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove;
- gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBattlerAttacker].encoredMovePos;
+ gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
*(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0);
}
// check if the encored move wasn't overwritten
else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
&& gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
- gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBattlerAttacker].encoredMovePos;
+ gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE;
gDisableStructs[gBattlerAttacker].encoredMovePos = 0;
@@ -5338,7 +5377,7 @@ bool8 TryRunFromBattle(u8 battler)
else
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item);
- gStringBattler = battler;
+ gPotentialItemEffectBattler = battler;
if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
{
@@ -5454,7 +5493,7 @@ static void HandleAction_Run(void)
else
{
gCurrentTurnActionNumber = gBattlersCount;
- gBattleOutcome = B_OUTCOME_POKE_FLED;
+ gBattleOutcome = B_OUTCOME_MON_FLED;
}
}
}
diff --git a/src/battle_message.c b/src/battle_message.c
index 181ad9d9e..9a4a062ad 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "battle.h"
#include "battle_message.h"
-#include "battle_string_ids.h"
+#include "constants/battle_string_ids.h"
#include "constants/moves.h"
#include "text.h"
#include "string_util.h"
@@ -13,23 +13,11 @@
#include "palette.h"
#include "battle_controllers.h"
#include "battle_setup.h"
+#include "menu.h"
+#include "recorded_battle.h"
+#include "international_string_util.h"
-extern u16 gLastUsedItem;
-extern u8 gLastUsedAbility;
-extern u8 gActiveBattler;
-extern u8 gBattlerAttacker;
-extern u8 gBattlerTarget;
-extern u8 gStringBattler;
-extern u8 gEffectBank;
extern u8 gBattlerAbilities[MAX_BATTLERS_COUNT];
-extern u32 gBattleTypeFlags;
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
-extern u16 gPartnerTrainerId;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
extern u8 gUnknown_0203C7B4;
extern struct StringInfoBattle *gStringInfo;
@@ -56,9 +44,6 @@ extern void GetEreaderTrainerName(u8 *txtPtr);
extern void sub_81A36D0(u8 arg0, u16 trainerId); // battle_frontier_2
extern void sub_81D572C(u8 arg0, u16 trainerId); // pokenav
extern void GetFrontierTrainerName(u8 *dst, u16 trainerId);
-extern s32 GetStringCenterAlignXOffsetWithLetterSpacing(u8 fontId, const u8 *str, s32 totalWidth, s16 letterSpacing);
-extern u8 GetTextSpeedInRecordedBattle(void);
-extern u8 GetPlayerTextSpeed(void);
// this file's functions
static void sub_814F8F8(u8 *textPtr);
@@ -1436,7 +1421,7 @@ void BufferStringBattle(u16 stringID)
gBattleScripting.battler = gStringInfo->scrActive;
*(&gBattleStruct->field_52) = gStringInfo->unk1605E;
*(&gBattleStruct->hpScale) = gStringInfo->hpScale;
- gStringBattler = gStringInfo->StringBank;
+ gPotentialItemEffectBattler = gStringInfo->StringBank;
*(&gBattleStruct->stringMoveType) = gStringInfo->moveType;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
@@ -1903,7 +1888,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
break;
case B_TXT_EFF_NAME_WITH_PREFIX: // effect bank name with prefix
- HANDLE_NICKNAME_STRING_CASE(gEffectBank, gBattlerPartyIndexes[gEffectBank])
+ HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
break;
case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active bank name with prefix
HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
@@ -1930,10 +1915,10 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- if ((gBattleScripting.multiplayerId != 0 && (gStringBattler & BIT_SIDE))
- || (gBattleScripting.multiplayerId == 0 && !(gStringBattler & BIT_SIDE)))
+ if ((gBattleScripting.multiplayerId != 0 && (gPotentialItemEffectBattler & BIT_SIDE))
+ || (gBattleScripting.multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE)))
{
- StringCopy(text, gEnigmaBerries[gStringBattler].name);
+ StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
StringAppend(text, gText_BerrySuffix);
toCpy = text;
}
@@ -1944,9 +1929,9 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
}
else
{
- if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gStringBattler)
+ if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
{
- StringCopy(text, gEnigmaBerries[gStringBattler].name);
+ StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
StringAppend(text, gText_BerrySuffix);
toCpy = text;
}
@@ -1979,11 +1964,11 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
toCpy = gAbilityNames[gBattlerAbilities[gBattleScripting.battler]];
break;
case B_TXT_EFF_ABILITY: // effect bank ability
- toCpy = gAbilityNames[gBattlerAbilities[gEffectBank]];
+ toCpy = gAbilityNames[gBattlerAbilities[gEffectBattler]];
break;
case B_TXT_TRAINER1_CLASS: // trainer class name
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
- toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()];
+ toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
toCpy = gTrainerClassNames[sub_8068BB0()];
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
@@ -2313,9 +2298,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{
if (hword == ITEM_ENIGMA_BERRY)
{
- if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gStringBattler)
+ if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
{
- StringCopy(dst, gEnigmaBerries[gStringBattler].name);
+ StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
StringAppend(dst, gText_BerrySuffix);
}
else
@@ -2360,20 +2345,20 @@ static void sub_814F8F8(u8* textBuff)
// 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.
// It resulted in the translation "<NAME>'s <ATTACK>!".
-//
+//
// gText_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
// names were verbs, such as Recover, and resulted in translations like "<NAME>
// recovered itself!".
-//
+//
// gText_ExclamationMark4 was "を した!" This resulted in a translation of
// "<NAME> did an <ATTACK>!".
-//
+//
// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of
// "<NAME>'s <ATTACK> attack!".
static void sub_814F950(u8* dst)
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index fab1c18bb..75f05e86f 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "battle.h"
#include "constants/battle_move_effects.h"
+#include "constants/battle_script_commands.h"
#include "battle_message.h"
#include "battle_ai_script_commands.h"
#include "battle_scripts.h"
@@ -11,7 +12,6 @@
#include "constants/hold_effects.h"
#include "util.h"
#include "pokemon.h"
-#include "calculate_base_damage.h"
#include "random.h"
#include "battle_controllers.h"
#include "battle_interface.h"
@@ -31,75 +31,16 @@
#include "bg.h"
#include "string_util.h"
#include "pokemon_icon.h"
-#include "pokemon_item_effects.h"
#include "m4a.h"
#include "mail.h"
#include "event_data.h"
#include "pokemon_storage_system.h"
#include "task.h"
#include "naming_screen.h"
-#include "battle_string_ids.h"
-
-// variables
-
-extern u8 gCritMultiplier;
-extern s32 gBattleMoveDamage;
-extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u8 gActiveBattler;
-extern u32 gBattleControllerExecFlags;
-extern u8 gBattlersCount;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
-extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
-extern u16 gCurrentMove;
-extern u8 gLastUsedAbility;
-extern u8 gStringBattler;
-extern u8 gEffectBank;
-extern u8 gAbsentBattlerFlags;
-extern u8 gMultiHitCounter;
-extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
-extern u16 gPauseCounterBattle;
-extern u16 gPaydayMoney;
-extern u16 gRandomTurnNumber;
-extern u8 gBattlerAttacker;
-extern u8 gBattlerTarget;
-extern const u8* gBattlescriptCurrInstr;
-extern u8 gCurrMovePos;
-extern u8 gCurrentActionFuncId;
-extern u8 gMoveResultFlags;
-extern u8 gBattleCommunication[];
-extern u16 gLastLandedMoves[4];
-extern u16 gLastHitByType[4];
-extern u16 gLastResultingMoves[4];
-extern u8 gLastHitBy[4];
-extern u8 gStringBattler;
-extern u16 gDynamicBasePower;
-extern u16 gLastUsedItem;
-extern u16 gBattleMovePower;
-extern s32 gHpDealt;
-extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
-extern u8 gTakenDmgBanks[MAX_BATTLERS_COUNT];
-extern u8 gSentPokesToOpponent[2];
-extern u8 gBank1;
-extern u16 gExpShareExp;
-extern u8 gLeveledUpInBattle;
-extern void (*gBattleMainFunc)(void);
-extern u8 gPlayerPartyCount;
-extern u16 gMoveToLearn;
-extern u16 gRandomMove;
-extern u8 gBankInMenu;
-extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
-extern u8 gCurrentTurnActionNumber;
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
-extern u16 gPartnerTrainerId;
-extern u16 gChosenMove;
-extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
-extern u16 gLastMoves[MAX_BATTLERS_COUNT];
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
-extern u8 gUnknown_020241E9;
+#include "constants/battle_string_ids.h"
+#include "battle_setup.h"
+#include "overworld.h"
+
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
extern u16 gBattle_BG2_X;
@@ -114,17 +55,15 @@ struct TrainerMoney
};
extern const struct BattleMove gBattleMoves[];
-extern const struct BaseStats gBaseStats[];
extern const u8 gTypeEffectiveness[336];
extern const struct TrainerMoney gTrainerMoneyTable[];
extern const u8* const gBattleScriptsForMoveEffects[];
// functions
-extern void sub_81A5718(u8 bank); // battle frontier 2
+extern void sub_81A5718(u8 battlerId); // battle frontier 2
extern void sub_81A56B4(void); // battle frontier 2
extern void sub_81BFA38(struct Pokemon* party, u8 monPartyId, u8 monCount, void (*callback)(void), u16 move); // pokemon summary screen
extern u8 sub_81C1B94(void); // pokemon summary screen
-extern void IncrementGameStat(u8 statId); // rom_4
extern void sub_81D388C(struct Pokemon* mon, void* statStoreLocation); // pokenav.s
extern void sub_81D3640(u8 arg0, void* statStoreLocation1, void* statStoreLocation2, u8 arg3, u8 arg4, u8 arg5); // pokenav.s
extern void sub_81D3784(u8 arg0, void* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4); // pokenav.s
@@ -132,7 +71,7 @@ extern u8* GetMonNickname(struct Pokemon* mon, u8* dst); // party_menu
extern u8 sub_81A5258(u8* arg0); // battle frontier 2
extern void sub_81A5BF8(void); // battle frontier 2
extern void sub_81A5D44(void); // battle frontier 2
-extern void sub_81B8E80(u8 bank, u8, u8); // party menu
+extern void sub_81B8E80(u8 battlerId, u8, u8); // party menu
extern bool8 sub_81B1250(void); // ?
extern bool8 InBattlePike(void);
extern bool8 InBattlePyramid(void);
@@ -140,7 +79,6 @@ extern u16 GetBattlePyramidPickupItemId(void);
extern u8 sav1_map_get_light_level(void);
extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void);
-extern void sub_80356D0(void);
// strings
extern const u8 gText_BattleYesNoChoice[];
@@ -157,13 +95,13 @@ extern const u8 gText_BattleYesNoChoice[];
#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
-#define TARGET_TURN_DAMAGED (gSpecialStatuses[gBattlerTarget].moveturnLostHP_physical != 0 \
- || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special != 0)
+#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);
-static u8 AttacksThisTurn(u8 bank, u16 move); // Note: returns 1 if it's a charging turn, otherwise 2.
+static u8 AttacksThisTurn(u8 battlerId, u16 move); // Note: returns 1 if it's a charging turn, otherwise 2.
static void CheckWonderGuardAndLevitate(void);
static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8, const u8* BS_ptr);
static bool32 IsMonGettingExpSentOut(void);
@@ -1217,7 +1155,7 @@ static void atk01_accuracycheck(void)
}
else
{
- u8 type, moveAcc, holdEffect, quality;
+ u8 type, moveAcc, holdEffect, param;
s8 buff;
u16 calc;
@@ -1233,13 +1171,13 @@ static void atk01_accuracycheck(void)
if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
{
- u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_STAGE_ACC];
+ u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
buff = acc;
}
else
{
- u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_STAGE_ACC];
- buff = acc + 6 - gBattleMons[gBattlerTarget].statStages[STAT_STAGE_EVASION];
+ u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
+ buff = acc + 6 - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
}
if (buff < 0)
@@ -1265,18 +1203,18 @@ static void atk01_accuracycheck(void)
if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
{
holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- quality = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
}
else
{
holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- quality = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
}
- gStringBattler = gBattlerTarget;
+ gPotentialItemEffectBattler = gBattlerTarget;
if (holdEffect == HOLD_EFFECT_EVASION_UP)
- calc = (calc * (100 - quality)) / 100;
+ calc = (calc * (100 - param)) / 100;
// final calculation
if ((Random() % 100 + 1) > calc)
@@ -1366,7 +1304,7 @@ static void atk04_critcalc(void)
else
holdEffect = ItemId_GetHoldEffect(item);
- gStringBattler = gBattlerAttacker;
+ gPotentialItemEffectBattler = gBattlerAttacker;
critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0)
+ (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL)
@@ -1760,23 +1698,24 @@ static void Unused_ApplyRandomDmgMultiplier(void)
static void atk07_adjustnormaldamage(void)
{
- u8 holdEffect, quality;
+ u8 holdEffect, param;
ApplyRandomDmgMultiplier();
if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
{
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect, quality = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
}
else
{
holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- quality = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
}
- gStringBattler = gBattlerTarget;
+ gPotentialItemEffectBattler = gBattlerTarget;
- if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality)
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
{
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
@@ -1808,23 +1747,24 @@ static void atk07_adjustnormaldamage(void)
static void atk08_adjustnormaldamage2(void) // The same as 0x7 except it doesn't check for false swipe move effect.
{
- u8 holdEffect, quality;
+ u8 holdEffect, param;
ApplyRandomDmgMultiplier();
if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
{
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect, quality = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
}
else
{
holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- quality = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
}
- gStringBattler = gBattlerTarget;
+ gPotentialItemEffectBattler = gBattlerTarget;
- if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality)
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
{
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
@@ -1919,7 +1859,7 @@ static void atk0B_healthbarupdate(void)
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
{
@@ -1964,20 +1904,20 @@ static void atk0C_datahpupdate(void)
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
{
if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage)
{
- if (gSpecialStatuses[gActiveBattler].moveturnLostHP == 0)
- gSpecialStatuses[gActiveBattler].moveturnLostHP = gBattleMoveDamage;
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = gBattleMoveDamage;
gDisableStructs[gActiveBattler].substituteHP -= gBattleMoveDamage;
gHpDealt = gBattleMoveDamage;
}
else
{
- if (gSpecialStatuses[gActiveBattler].moveturnLostHP == 0)
- gSpecialStatuses[gActiveBattler].moveturnLostHP = gDisableStructs[gActiveBattler].substituteHP;
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = gDisableStructs[gActiveBattler].substituteHP;
gHpDealt = gDisableStructs[gActiveBattler].substituteHP;
gDisableStructs[gActiveBattler].substituteHP = 0;
}
@@ -2009,10 +1949,10 @@ static void atk0C_datahpupdate(void)
else
{
gTakenDmg[gActiveBattler] += gBattleMoveDamage;
- if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
- gTakenDmgBanks[gActiveBattler] = gBattlerAttacker;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ gTakenDmgByBattler[gActiveBattler] = gBattlerAttacker;
else
- gTakenDmgBanks[gActiveBattler] = gBattlerTarget;
+ gTakenDmgByBattler[gActiveBattler] = gBattlerTarget;
}
if (gBattleMons[gActiveBattler].hp > gBattleMoveDamage)
@@ -2026,37 +1966,37 @@ static void atk0C_datahpupdate(void)
gBattleMons[gActiveBattler].hp = 0;
}
- if (!gSpecialStatuses[gActiveBattler].moveturnLostHP && !(gHitMarker & HITMARKER_x100000))
- gSpecialStatuses[gActiveBattler].moveturnLostHP = gHpDealt;
+ if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_x100000))
+ gSpecialStatuses[gActiveBattler].dmg = gHpDealt;
- if (moveType <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
+ if (IS_MOVE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
{
gProtectStructs[gActiveBattler].physicalDmg = gHpDealt;
- gSpecialStatuses[gActiveBattler].moveturnLostHP_physical = gHpDealt;
- if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
+ gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
{
- gProtectStructs[gActiveBattler].physicalBank = gBattlerAttacker;
- gSpecialStatuses[gActiveBattler].moveturnPhysicalBank = gBattlerAttacker;
+ gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerAttacker;
+ gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerAttacker;
}
else
{
- gProtectStructs[gActiveBattler].physicalBank = gBattlerTarget;
- gSpecialStatuses[gActiveBattler].moveturnPhysicalBank = gBattlerTarget;
+ gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerTarget;
+ gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget;
}
}
- else if (moveType > 8 && !(gHitMarker & HITMARKER_x100000))
+ else if (!IS_MOVE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000))
{
gProtectStructs[gActiveBattler].specialDmg = gHpDealt;
- gSpecialStatuses[gActiveBattler].moveturnLostHP_special = gHpDealt;
- if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
+ gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
{
- gProtectStructs[gActiveBattler].specialBank = gBattlerAttacker;
- gSpecialStatuses[gActiveBattler].moveturnSpecialBank = gBattlerAttacker;
+ gProtectStructs[gActiveBattler].specialBattlerId = gBattlerAttacker;
+ gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerAttacker;
}
else
{
- gProtectStructs[gActiveBattler].specialBank = gBattlerTarget;
- gSpecialStatuses[gActiveBattler].moveturnSpecialBank = gBattlerTarget;
+ gProtectStructs[gActiveBattler].specialBattlerId = gBattlerTarget;
+ gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerTarget;
}
}
}
@@ -2067,9 +2007,9 @@ static void atk0C_datahpupdate(void)
}
else
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
- if (gSpecialStatuses[gActiveBattler].moveturnLostHP == 0)
- gSpecialStatuses[gActiveBattler].moveturnLostHP = 0xFFFF;
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = 0xFFFF;
}
gBattlescriptCurrInstr += 2;
}
@@ -2171,7 +2111,7 @@ static void atk0F_resultmessage(void)
break;
case MOVE_RESULT_FOE_HUNG_ON:
gLastUsedItem = gBattleMons[gBattlerTarget].item;
- gStringBattler = gBattlerTarget;
+ gPotentialItemEffectBattler = gBattlerTarget;
gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
@@ -2200,7 +2140,7 @@ static void atk0F_resultmessage(void)
else if (gMoveResultFlags & MOVE_RESULT_FOE_HUNG_ON)
{
gLastUsedItem = gBattleMons[gBattlerTarget].item;
- gStringBattler = gBattlerTarget;
+ gPotentialItemEffectBattler = gBattlerTarget;
gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
@@ -2296,12 +2236,12 @@ static void atk14_printselectionstringfromtable(void)
}
}
-u8 GetBattlerTurnOrderNum(u8 bank)
+u8 GetBattlerTurnOrderNum(u8 battlerId)
{
s32 i;
for (i = 0; i < gBattlersCount; i++)
{
- if (gBattleTurnOrder[i] == bank)
+ if (gBattleTurnOrder[i] == battlerId)
break;
}
return i;
@@ -2328,31 +2268,31 @@ void SetMoveEffect(bool8 primary, u8 certain)
if (gBattleCommunication[MOVE_EFFECT_BYTE] & MOVE_EFFECT_AFFECTS_USER)
{
- gEffectBank = gBattlerAttacker; // bank that effects get applied on
+ gEffectBattler = gBattlerAttacker; // battlerId that effects get applied on
gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(MOVE_EFFECT_AFFECTS_USER);
affectsUser = MOVE_EFFECT_AFFECTS_USER;
gBattleScripting.battler = gBattlerTarget; // theoretically the attacker
}
else
{
- gEffectBank = gBattlerTarget;
+ gEffectBattler = gBattlerTarget;
gBattleScripting.battler = gBattlerAttacker;
}
- if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9)
INCREMENT_RESET_RETURN
- if (gSideStatuses[GET_BATTLER_SIDE(gEffectBank)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ if (gSideStatuses[GET_BATTLER_SIDE(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7)
INCREMENT_RESET_RETURN
- if (gBattleMons[gEffectBank].hp == 0
+ if (gBattleMons[gEffectBattler].hp == 0
&& gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_PAYDAY
&& gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_STEAL_ITEM)
INCREMENT_RESET_RETURN
- if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && affectsUser != MOVE_EFFECT_AFFECTS_USER)
+ if (gBattleMons[gEffectBattler].status2 & STATUS2_SUBSTITUTE && affectsUser != MOVE_EFFECT_AFFECTS_USER)
INCREMENT_RESET_RETURN
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) // status change
@@ -2361,7 +2301,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
{
case STATUS1_SLEEP:
// check active uproar
- if (gBattleMons[gEffectBank].ability != ABILITY_SOUNDPROOF)
+ if (gBattleMons[gEffectBattler].ability != ABILITY_SOUNDPROOF)
{
for (gActiveBattler = 0;
gActiveBattler < gBattlersCount && !(gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR);
@@ -2371,24 +2311,24 @@ void SetMoveEffect(bool8 primary, u8 certain)
else
gActiveBattler = gBattlersCount;
- if (gBattleMons[gEffectBank].status1)
+ if (gBattleMons[gEffectBattler].status1)
break;
if (gActiveBattler != gBattlersCount)
break;
- if (gBattleMons[gEffectBank].ability == ABILITY_VITAL_SPIRIT)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_VITAL_SPIRIT)
break;
- if (gBattleMons[gEffectBank].ability == ABILITY_INSOMNIA)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_INSOMNIA)
break;
- CancelMultiTurnMoves(gEffectBank);
+ CancelMultiTurnMoves(gEffectBattler);
statusChanged = TRUE;
break;
case STATUS1_POISON:
- if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
gLastUsedAbility = ABILITY_IMMUNITY;
- RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY);
+ RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY);
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_PSNPrevention;
@@ -2404,8 +2344,8 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON
- || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
+ if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON
+ || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2415,27 +2355,27 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
RESET_RETURN
}
- if (gBattleMons[gEffectBank].type1 == TYPE_POISON)
+ if (gBattleMons[gEffectBattler].type1 == TYPE_POISON)
break;
- if (gBattleMons[gEffectBank].type2 == TYPE_POISON)
+ if (gBattleMons[gEffectBattler].type2 == TYPE_POISON)
break;
- if (gBattleMons[gEffectBank].type1 == TYPE_STEEL)
+ if (gBattleMons[gEffectBattler].type1 == TYPE_STEEL)
break;
- if (gBattleMons[gEffectBank].type2 == TYPE_STEEL)
+ if (gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
break;
- if (gBattleMons[gEffectBank].status1)
+ if (gBattleMons[gEffectBattler].status1)
break;
- if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
break;
statusChanged = TRUE;
break;
case STATUS1_BURN:
- if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL
+ if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
gLastUsedAbility = ABILITY_WATER_VEIL;
- RecordAbilityBattle(gEffectBank, ABILITY_WATER_VEIL);
+ RecordAbilityBattle(gEffectBattler, ABILITY_WATER_VEIL);
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_BRNPrevention;
@@ -2450,8 +2390,8 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE
- || gBattleMons[gEffectBank].type2 == TYPE_FIRE)
+ if ((gBattleMons[gEffectBattler].type1 == TYPE_FIRE
+ || gBattleMons[gEffectBattler].type2 == TYPE_FIRE)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2461,13 +2401,13 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
RESET_RETURN
}
- if (gBattleMons[gEffectBank].type1 == TYPE_FIRE)
+ if (gBattleMons[gEffectBattler].type1 == TYPE_FIRE)
break;
- if (gBattleMons[gEffectBank].type2 == TYPE_FIRE)
+ if (gBattleMons[gEffectBattler].type2 == TYPE_FIRE)
break;
- if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL)
break;
- if (gBattleMons[gEffectBank].status1)
+ if (gBattleMons[gEffectBattler].status1)
break;
statusChanged = TRUE;
@@ -2475,27 +2415,27 @@ void SetMoveEffect(bool8 primary, u8 certain)
case STATUS1_FREEZE:
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY)
noSunCanFreeze = FALSE;
- if (gBattleMons[gEffectBank].type1 == TYPE_ICE)
+ if (gBattleMons[gEffectBattler].type1 == TYPE_ICE)
break;
- if (gBattleMons[gEffectBank].type2 == TYPE_ICE)
+ if (gBattleMons[gEffectBattler].type2 == TYPE_ICE)
break;
- if (gBattleMons[gEffectBank].status1)
+ if (gBattleMons[gEffectBattler].status1)
break;
if (noSunCanFreeze == 0)
break;
- if (gBattleMons[gEffectBank].ability == ABILITY_MAGMA_ARMOR)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_MAGMA_ARMOR)
break;
- CancelMultiTurnMoves(gEffectBank);
+ CancelMultiTurnMoves(gEffectBattler);
statusChanged = TRUE;
break;
case STATUS1_PARALYSIS:
- if (gBattleMons[gEffectBank].ability == ABILITY_LIMBER)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_LIMBER)
{
if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)
{
gLastUsedAbility = ABILITY_LIMBER;
- RecordAbilityBattle(gEffectBank, ABILITY_LIMBER);
+ RecordAbilityBattle(gEffectBattler, ABILITY_LIMBER);
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_PRLZPrevention;
@@ -2514,16 +2454,16 @@ void SetMoveEffect(bool8 primary, u8 certain)
else
break;
}
- if (gBattleMons[gEffectBank].status1)
+ if (gBattleMons[gEffectBattler].status1)
break;
statusChanged = TRUE;
break;
case STATUS1_TOXIC_POISON:
- if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
gLastUsedAbility = ABILITY_IMMUNITY;
- RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY);
+ RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY);
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_PSNPrevention;
@@ -2539,8 +2479,8 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON
- || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
+ if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON
+ || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2550,19 +2490,19 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
RESET_RETURN
}
- if (gBattleMons[gEffectBank].status1)
+ if (gBattleMons[gEffectBattler].status1)
break;
- if (gBattleMons[gEffectBank].type1 != TYPE_POISON
- && gBattleMons[gEffectBank].type2 != TYPE_POISON
- && gBattleMons[gEffectBank].type1 != TYPE_STEEL
- && gBattleMons[gEffectBank].type2 != TYPE_STEEL)
+ if (gBattleMons[gEffectBattler].type1 != TYPE_POISON
+ && gBattleMons[gEffectBattler].type2 != TYPE_POISON
+ && gBattleMons[gEffectBattler].type1 != TYPE_STEEL
+ && gBattleMons[gEffectBattler].type2 != TYPE_STEEL)
{
- if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
break;
// It's redundant, because at this point we know the status1 value is 0.
- gBattleMons[gEffectBank].status1 &= ~(STATUS1_TOXIC_POISON);
- gBattleMons[gEffectBank].status1 &= ~(STATUS1_POISON);
+ gBattleMons[gEffectBattler].status1 &= ~(STATUS1_TOXIC_POISON);
+ gBattleMons[gEffectBattler].status1 &= ~(STATUS1_POISON);
statusChanged = TRUE;
break;
}
@@ -2577,14 +2517,14 @@ void SetMoveEffect(bool8 primary, u8 certain)
BattleScriptPush(gBattlescriptCurrInstr + 1);
if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS1_SLEEP)
- gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2);
+ gBattleMons[gEffectBattler].status1 |= ((Random() & 3) + 2);
else
- gBattleMons[gEffectBank].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
- gActiveBattler = gEffectBank;
- BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1);
+ gActiveBattler = gEffectBattler;
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBattler].status1);
MarkBattlerForControllerExec(gActiveBattler);
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
@@ -2620,7 +2560,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
- if (gBattleMons[gEffectBank].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ if (gBattleMons[gEffectBattler].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
gBattlescriptCurrInstr++;
}
@@ -2630,26 +2570,26 @@ void SetMoveEffect(bool8 primary, u8 certain)
switch (gBattleCommunication[MOVE_EFFECT_BYTE])
{
case MOVE_EFFECT_CONFUSION:
- if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO
- || gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_OWN_TEMPO
+ || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION)
{
gBattlescriptCurrInstr++;
}
else
{
- gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2;
+ gBattleMons[gEffectBattler].status2 |= (((Random()) % 0x4)) + 2;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
}
break;
case MOVE_EFFECT_FLINCH:
- if (gBattleMons[gEffectBank].ability == ABILITY_INNER_FOCUS)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_INNER_FOCUS)
{
if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)
{
gLastUsedAbility = ABILITY_INNER_FOCUS;
- RecordAbilityBattle(gEffectBank, ABILITY_INNER_FOCUS);
+ RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS);
gBattlescriptCurrInstr = BattleScript_FlinchPrevention;
}
else
@@ -2659,18 +2599,18 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
- if (GetBattlerTurnOrderNum(gEffectBank) > gCurrentTurnActionNumber)
- gBattleMons[gEffectBank].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber)
+ gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
gBattlescriptCurrInstr++;
}
break;
case MOVE_EFFECT_UPROAR:
- if (!(gBattleMons[gEffectBank].status2 & STATUS2_UPROAR))
+ if (!(gBattleMons[gEffectBattler].status2 & STATUS2_UPROAR))
{
- gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
- gLockedMoves[gEffectBank] = gCurrentMove;
- gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4;
+ gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
+ gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 2) << 4;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
@@ -2692,7 +2632,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case MOVE_EFFECT_TRI_ATTACK:
- if (gBattleMons[gEffectBank].status1)
+ if (gBattleMons[gEffectBattler].status1)
{
gBattlescriptCurrInstr++;
}
@@ -2703,23 +2643,23 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
break;
case MOVE_EFFECT_CHARGING:
- gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
- gLockedMoves[gEffectBank] = gCurrentMove;
- gProtectStructs[gEffectBank].chargingTurn = 1;
+ gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
+ gProtectStructs[gEffectBattler].chargingTurn = 1;
gBattlescriptCurrInstr++;
break;
case MOVE_EFFECT_WRAP:
- if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED)
+ if (gBattleMons[gEffectBattler].status2 & STATUS2_WRAPPED)
{
gBattlescriptCurrInstr++;
}
else
{
- gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 3) << 0xD;
+ gBattleMons[gEffectBattler].status2 |= ((Random() & 3) + 3) << 0xD;
- *(gBattleStruct->wrappedMove + gEffectBank * 2 + 0) = gCurrentMove;
- *(gBattleStruct->wrappedMove + gEffectBank * 2 + 1) = gCurrentMove >> 8;
- *(gBattleStruct->wrappedBy + gEffectBank) = gBattlerAttacker;
+ *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 0) = gCurrentMove;
+ *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 1) = gCurrentMove >> 8;
+ *(gBattleStruct->wrappedBy + gEffectBattler) = gBattlerAttacker;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
@@ -2826,9 +2766,9 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
break;
case MOVE_EFFECT_RECHARGE:
- gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE;
- gDisableStructs[gEffectBank].rechargeCounter = 2;
- gLockedMoves[gEffectBank] = gCurrentMove;
+ gBattleMons[gEffectBattler].status2 |= STATUS2_RECHARGE;
+ gDisableStructs[gEffectBattler].rechargeCounter = 2;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
gBattlescriptCurrInstr++;
break;
case MOVE_EFFECT_RAGE:
@@ -2950,21 +2890,21 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case MOVE_EFFECT_THRASH:
- if (gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)
+ if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE)
{
gBattlescriptCurrInstr++;
}
else
{
- gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
- gLockedMoves[gEffectBank] = gCurrentMove;
- gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA);
+ gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
+ gLockedMoves[gEffectBattler] = gCurrentMove;
+ gBattleMons[gEffectBattler].status2 |= (((Random() & 1) + 2) << 0xA);
}
break;
case MOVE_EFFECT_KNOCK_OFF:
- if (gBattleMons[gEffectBank].ability == ABILITY_STICKY_HOLD)
+ if (gBattleMons[gEffectBattler].ability == ABILITY_STICKY_HOLD)
{
- if (gBattleMons[gEffectBank].item == 0)
+ if (gBattleMons[gEffectBattler].item == 0)
{
gBattlescriptCurrInstr++;
}
@@ -2972,23 +2912,23 @@ void SetMoveEffect(bool8 primary, u8 certain)
{
gLastUsedAbility = ABILITY_STICKY_HOLD;
gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
- RecordAbilityBattle(gEffectBank, ABILITY_STICKY_HOLD);
+ RecordAbilityBattle(gEffectBattler, ABILITY_STICKY_HOLD);
}
break;
}
- if (gBattleMons[gEffectBank].item)
+ if (gBattleMons[gEffectBattler].item)
{
- side = GetBattlerSide(gEffectBank);
+ side = GetBattlerSide(gEffectBattler);
- gLastUsedItem = gBattleMons[gEffectBank].item;
- gBattleMons[gEffectBank].item = 0;
- gWishFutureKnock.knockedOffPokes[side] |= gBitTable[gBattlerPartyIndexes[gEffectBank]];
+ gLastUsedItem = gBattleMons[gEffectBattler].item;
+ gBattleMons[gEffectBattler].item = 0;
+ gWishFutureKnock.knockedOffPokes[side] |= gBitTable[gBattlerPartyIndexes[gEffectBattler]];
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_KnockedOff;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBank]) + 0) = 0;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBank]) + 1) = 0;
+ *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBattler]) + 0) = 0;
+ *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBattler]) + 1) = 0;
}
else
{
@@ -3051,7 +2991,7 @@ static void atk17_seteffectsecondary(void)
static void atk18_clearstatusfromeffect(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattleCommunication[MOVE_EFFECT_BYTE] <= MOVE_EFFECT_TOXIC)
gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
@@ -3069,7 +3009,7 @@ static void atk19_tryfaintmon(void)
if (gBattlescriptCurrInstr[2] != 0)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
{
BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
@@ -3085,18 +3025,18 @@ static void atk19_tryfaintmon(void)
}
else
{
- u8 bank;
+ u8 battlerId;
- if (gBattlescriptCurrInstr[1] == BS_GET_ATTACKER)
+ if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
{
gActiveBattler = gBattlerAttacker;
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
BS_ptr = BattleScript_FaintAttacker;
}
else
{
gActiveBattler = gBattlerTarget;
- bank = gBattlerAttacker;
+ battlerId = gBattlerAttacker;
BS_ptr = BattleScript_FaintTarget;
}
if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler])
@@ -3122,7 +3062,7 @@ static void atk19_tryfaintmon(void)
{
gHitMarker &= ~(HITMARKER_DESTINYBOND);
BattleScriptPush(gBattlescriptCurrInstr);
- gBattleMoveDamage = gBattleMons[bank].hp;
+ gBattleMoveDamage = gBattleMons[battlerId].hp;
gBattlescriptCurrInstr = BattleScript_DestinyBondTakesLife;
}
if ((gStatuses3[gBattlerTarget] & STATUS3_GRUDGE)
@@ -3154,7 +3094,7 @@ static void atk1A_dofaintanimation(void)
{
if (gBattleControllerExecFlags == 0)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitFaintAnimation(0);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 2;
@@ -3165,7 +3105,7 @@ static void atk1B_cleareffectsonfaint(void)
{
if (gBattleControllerExecFlags == 0)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || gBattleMons[gActiveBattler].hp == 0)
{
@@ -3181,11 +3121,11 @@ static void atk1B_cleareffectsonfaint(void)
static void atk1C_jumpifstatus(void)
{
- u8 bank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
- if (gBattleMons[bank].status1 & flags && gBattleMons[bank].hp)
+ if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp)
gBattlescriptCurrInstr = jumpPtr;
else
gBattlescriptCurrInstr += 10;
@@ -3193,11 +3133,11 @@ static void atk1C_jumpifstatus(void)
static void atk1D_jumpifstatus2(void)
{
- u8 bank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
- if (gBattleMons[bank].status2 & flags && gBattleMons[bank].hp)
+ if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp)
gBattlescriptCurrInstr = jumpPtr;
else
gBattlescriptCurrInstr += 10;
@@ -3205,45 +3145,45 @@ static void atk1D_jumpifstatus2(void)
static void atk1E_jumpifability(void)
{
- u8 bank;
+ u8 battlerId;
u8 ability = gBattlescriptCurrInstr[2];
const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
- if (gBattlescriptCurrInstr[1] == BS_GET_ATTACKER_SIDE)
+ if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE)
{
- bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_BANK_SIDE, gBattlerAttacker, ability, 0, 0);
- if (bank)
+ battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BANK_SIDE, gBattlerAttacker, ability, 0, 0);
+ if (battlerId)
{
gLastUsedAbility = ability;
gBattlescriptCurrInstr = jumpPtr;
- RecordAbilityBattle(bank - 1, gLastUsedAbility);
- gBattleScripting.battlerWithAbility = bank - 1;
+ RecordAbilityBattle(battlerId - 1, gLastUsedAbility);
+ gBattleScripting.battlerWithAbility = battlerId - 1;
}
else
gBattlescriptCurrInstr += 7;
}
- else if (gBattlescriptCurrInstr[1] == BS_GET_NOT_ATTACKER_SIDE)
+ else if (gBattlescriptCurrInstr[1] == BS_NOT_ATTACKER_SIDE)
{
- bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBattlerAttacker, ability, 0, 0);
- if (bank)
+ battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBattlerAttacker, ability, 0, 0);
+ if (battlerId)
{
gLastUsedAbility = ability;
gBattlescriptCurrInstr = jumpPtr;
- RecordAbilityBattle(bank - 1, gLastUsedAbility);
- gBattleScripting.battlerWithAbility = bank - 1;
+ RecordAbilityBattle(battlerId - 1, gLastUsedAbility);
+ gBattleScripting.battlerWithAbility = battlerId - 1;
}
else
gBattlescriptCurrInstr += 7;
}
else
{
- bank = GetBattleBank(gBattlescriptCurrInstr[1]);
- if (gBattleMons[bank].ability == ability)
+ battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gBattleMons[battlerId].ability == ability)
{
gLastUsedAbility = ability;
gBattlescriptCurrInstr = jumpPtr;
- RecordAbilityBattle(bank, gLastUsedAbility);
- gBattleScripting.battlerWithAbility = bank;
+ RecordAbilityBattle(battlerId, gLastUsedAbility);
+ gBattleScripting.battlerWithAbility = battlerId;
}
else
gBattlescriptCurrInstr += 7;
@@ -3256,7 +3196,7 @@ static void atk1F_jumpifsideaffecting(void)
u16 flags;
const u8* jumpPtr;
- if (gBattlescriptCurrInstr[1] == BS_GET_ATTACKER)
+ if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
side = GET_BATTLER_SIDE(gBattlerAttacker);
else
side = GET_BATTLER_SIDE(gBattlerTarget);
@@ -3273,8 +3213,8 @@ static void atk1F_jumpifsideaffecting(void)
static void atk20_jumpifstat(void)
{
u8 ret = 0;
- u8 bank = GetBattleBank(gBattlescriptCurrInstr[1]);
- u8 value = gBattleMons[bank].statStages[gBattlescriptCurrInstr[3]];
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ u8 value = gBattleMons[battlerId].statStages[gBattlescriptCurrInstr[3]];
switch (gBattlescriptCurrInstr[2])
{
@@ -3315,7 +3255,7 @@ static void atk21_jumpifstatus3condition(void)
u32 flags;
const u8 *jumpPtr;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7);
@@ -3337,11 +3277,11 @@ static void atk21_jumpifstatus3condition(void)
static void atk22_jumpiftype(void)
{
- u8 bank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u8 type = gBattlescriptCurrInstr[2];
const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
- if (gBattleMons[bank].type1 == type || gBattleMons[bank].type2 == type)
+ if (gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type)
gBattlescriptCurrInstr = jumpPtr;
else
gBattlescriptCurrInstr += 7;
@@ -3357,13 +3297,13 @@ static void atk23_getexp(void)
s32 viaExpShare = 0;
u16* exp = &gBattleStruct->expValue;
- gBank1 = GetBattleBank(gBattlescriptCurrInstr[1]);
- sentIn = gSentPokesToOpponent[(gBank1 & 2) >> 1];
+ gBattlerFainted = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1];
switch (gBattleScripting.atk23_state)
{
case 0: // check if should receive exp at all
- if (GetBattlerSide(gBank1) != B_SIDE_OPPONENT || (gBattleTypeFlags &
+ if (GetBattlerSide(gBattlerFainted) != B_SIDE_OPPONENT || (gBattleTypeFlags &
(BATTLE_TYPE_LINK
| BATTLE_TYPE_x2000000
| BATTLE_TYPE_x4000000
@@ -3377,7 +3317,7 @@ static void atk23_getexp(void)
else
{
gBattleScripting.atk23_state++;
- gBattleStruct->field_DF |= gBitTable[gBattlerPartyIndexes[gBank1]];
+ gBattleStruct->field_DF |= gBitTable[gBattlerPartyIndexes[gBattlerFainted]];
}
break;
case 1: // calculate experience points to redistribute
@@ -3403,7 +3343,7 @@ static void atk23_getexp(void)
viaExpShare++;
}
- calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7;
+ calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7;
if (viaExpShare) // at least one mon is getting exp via exp share
{
@@ -3424,14 +3364,14 @@ static void atk23_getexp(void)
}
gBattleScripting.atk23_state++;
- gBattleStruct->expGetterId = 0;
+ gBattleStruct->expGetterMonId = 0;
gBattleStruct->sentInPokes = sentIn;
}
// fall through
case 2: // set exp value to the poke in expgetter_id and print message
if (gBattleControllerExecFlags == 0)
{
- item = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_HELD_ITEM);
+ item = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HELD_ITEM);
if (item == ITEM_ENIGMA_BERRY)
holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
@@ -3444,7 +3384,7 @@ static void atk23_getexp(void)
gBattleScripting.atk23_state = 5;
gBattleMoveDamage = 0; // used for exp
}
- else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_LEVEL) == MAX_MON_LEVEL)
+ else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_MON_LEVEL)
{
*(&gBattleStruct->sentInPokes) >>= 1;
gBattleScripting.atk23_state = 5;
@@ -3460,7 +3400,7 @@ static void atk23_getexp(void)
gBattleStruct->wildVictorySong++;
}
- if (GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_HP))
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP))
{
if (gBattleStruct->sentInPokes & 1)
gBattleMoveDamage = *exp;
@@ -3474,10 +3414,10 @@ static void atk23_getexp(void)
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
- if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterId]))
+ if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterMonId]))
{
// check if the pokemon doesn't belong to the player
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gBattleStruct->expGetterId >= 3)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gBattleStruct->expGetterMonId >= 3)
{
i = 0x149;
}
@@ -3492,31 +3432,31 @@ static void atk23_getexp(void)
i = 0x149;
}
- // get exp getter bank
+ // get exp getter battlerId
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- if (!(gBattlerPartyIndexes[2] != gBattleStruct->expGetterId) && !(gAbsentBattlerFlags & gBitTable[2]))
- gBattleStruct->expGetterBank = 2;
+ if (!(gBattlerPartyIndexes[2] != gBattleStruct->expGetterMonId) && !(gAbsentBattlerFlags & gBitTable[2]))
+ gBattleStruct->expGetterBattlerId = 2;
else
{
if (!(gAbsentBattlerFlags & gBitTable[0]))
- gBattleStruct->expGetterBank = 0;
+ gBattleStruct->expGetterBattlerId = 0;
else
- gBattleStruct->expGetterBank = 2;
+ gBattleStruct->expGetterBattlerId = 2;
}
}
else
- gBattleStruct->expGetterBank = 0;
+ gBattleStruct->expGetterBattlerId = 0;
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBank, gBattleStruct->expGetterId)
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBattlerId, gBattleStruct->expGetterMonId)
// buffer 'gained' or 'gained a boosted'
PREPARE_STRING_BUFFER(gBattleTextBuff2, i)
PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage)
- PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBank);
- MonGainEVs(&gPlayerParty[gBattleStruct->expGetterId], gBattleMons[gBank1].species);
+ PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBattlerId);
+ MonGainEVs(&gPlayerParty[gBattleStruct->expGetterMonId], gBattleMons[gBattlerFainted].species);
}
gBattleStruct->sentInPokes >>= 1;
gBattleScripting.atk23_state++;
@@ -3526,18 +3466,18 @@ static void atk23_getexp(void)
case 3: // Set stats and give exp
if (gBattleControllerExecFlags == 0)
{
- gBattleBufferB[gBattleStruct->expGetterBank][0] = 0;
- if (GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_LEVEL) != MAX_MON_LEVEL)
+ gBattleBufferB[gBattleStruct->expGetterBattlerId][0] = 0;
+ if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) != MAX_MON_LEVEL)
{
- gBattleResources->statsBeforeLvlUp->hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_MAX_HP);
- gBattleResources->statsBeforeLvlUp->atk = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_ATK);
- gBattleResources->statsBeforeLvlUp->def = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_DEF);
- gBattleResources->statsBeforeLvlUp->spd = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPEED);
- gBattleResources->statsBeforeLvlUp->spAtk = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPATK);
- gBattleResources->statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPDEF);
+ gBattleResources->statsBeforeLvlUp->hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
+ gBattleResources->statsBeforeLvlUp->atk = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
+ gBattleResources->statsBeforeLvlUp->def = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
+ gBattleResources->statsBeforeLvlUp->spd = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleResources->statsBeforeLvlUp->spAtk = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
+ gBattleResources->statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
- gActiveBattler = gBattleStruct->expGetterBank;
- BtlController_EmitExpUpdate(0, gBattleStruct->expGetterId, gBattleMoveDamage);
+ gActiveBattler = gBattleStruct->expGetterBattlerId;
+ BtlController_EmitExpUpdate(0, gBattleStruct->expGetterMonId, gBattleMoveDamage);
MarkBattlerForControllerExec(gActiveBattler);
}
gBattleScripting.atk23_state++;
@@ -3546,50 +3486,50 @@ static void atk23_getexp(void)
case 4: // lvl up if necessary
if (gBattleControllerExecFlags == 0)
{
- gActiveBattler = gBattleStruct->expGetterBank;
+ gActiveBattler = gBattleStruct->expGetterBattlerId;
if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELLED_UP)
{
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterId)
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId)
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattleStruct->expGetterId)
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattleStruct->expGetterMonId)
- PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_LEVEL))
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL))
BattleScriptPushCursor();
- gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterId];
+ gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterMonId];
gBattlescriptCurrInstr = BattleScript_LevelUp;
gBattleMoveDamage = (gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8));
- AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterId], 0);
+ AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], 0);
// update battle mon structure after level up
- if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterId && gBattleMons[0].hp)
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId && gBattleMons[0].hp)
{
- gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_LEVEL);
- gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_HP);
- gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_MAX_HP);
- gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_ATK);
- gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_DEF);
+ gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
+ gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
+ gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
+ gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
+ gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
// Why is this duplicated?
- gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPEED);
- gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPEED);
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
- gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPATK);
- gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPDEF);
+ gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
+ gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
}
// What is else if?
- if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
- gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_LEVEL);
- gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_HP);
- gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_MAX_HP);
- gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_ATK);
- gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_DEF);
+ gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
+ gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
+ gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
+ gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
+ gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
// Duplicated again, but this time there's no Sp Defense
- gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPEED);
- gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPEED);
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
- gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPATK);
+ gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
}
gBattleScripting.atk23_state = 5;
}
@@ -3605,8 +3545,8 @@ static void atk23_getexp(void)
gBattleScripting.atk23_state = 3;
else
{
- gBattleStruct->expGetterId++;
- if (gBattleStruct->expGetterId <= 5)
+ gBattleStruct->expGetterMonId++;
+ if (gBattleStruct->expGetterMonId <= 5)
gBattleScripting.atk23_state = 2; // loop again
else
gBattleScripting.atk23_state = 6; // we're done
@@ -3616,8 +3556,8 @@ static void atk23_getexp(void)
if (gBattleControllerExecFlags == 0)
{
// not sure why gf clears the item and ability here
- gBattleMons[gBank1].item = 0;
- gBattleMons[gBank1].ability = 0;
+ gBattleMons[gBattlerFainted].item = 0;
+ gBattleMons[gBattlerFainted].ability = 0;
gBattlescriptCurrInstr += 2;
}
break;
@@ -3707,7 +3647,7 @@ static void atk24(void)
}
}
#else
-__attribute__((naked))
+ASM_DIRECT
static void atk24(void)
{
asm("\n\
@@ -4322,7 +4262,7 @@ static void atk3A_waitstate(void)
static void atk3B_healthbar_update(void)
{
- if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
gActiveBattler = gBattlerTarget;
else
gActiveBattler = gBattlerAttacker;
@@ -4369,9 +4309,9 @@ static void atk41_call(void)
static void atk42_jumpiftype2(void)
{
- u8 bank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- if (gBattlescriptCurrInstr[2] == gBattleMons[bank].type1 || gBattlescriptCurrInstr[2] == gBattleMons[bank].type2)
+ if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2)
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
else
gBattlescriptCurrInstr += 7;
@@ -4394,7 +4334,7 @@ static void atk45_playanimation(void)
{
const u16* argumentPtr;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE
@@ -4436,7 +4376,7 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
const u16* argumentPtr;
const u8* animationIdPtr;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
animationIdPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
@@ -4505,7 +4445,7 @@ static void atk48_playstatchangeanimation(void)
s32 changeableStats = 0;
u32 statsToCheck = 0;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
statsToCheck = gBattlescriptCurrInstr[2];
if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down
@@ -4526,8 +4466,8 @@ static void atk48_playstatchangeanimation(void)
else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
&& gBattleMons[gActiveBattler].ability != ABILITY_CLEAR_BODY
&& gBattleMons[gActiveBattler].ability != ABILITY_WHITE_SMOKE
- && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_STAGE_ACC)
- && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_STAGE_ATK))
+ && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC)
+ && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK))
{
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
{
@@ -4587,7 +4527,7 @@ static void atk48_playstatchangeanimation(void)
}
}
#else
-__attribute__((naked))
+ASM_DIRECT
static void atk48_playstatchangeanimation(void)
{
asm("\n\
@@ -4606,7 +4546,7 @@ static void atk48_playstatchangeanimation(void)
ldr r0, [r5]\n\
ldrb r0, [r0, 0x1]\n\
str r3, [sp]\n\
- bl GetBattleBank\n\
+ bl GetBattlerForBattleScript\n\
ldr r2, =gActiveBattler\n\
strb r0, [r2]\n\
ldr r0, [r5]\n\
@@ -4870,7 +4810,6 @@ static void atk49_moveend(void)
holdEffectAtk = ItemId_GetHoldEffect(gBattleMons[gBattlerAttacker].item);
choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker];
-
GET_MOVE_TYPE(gCurrentMove, moveType);
do
@@ -4882,9 +4821,9 @@ static void atk49_moveend(void)
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED
- && gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_STAGE_ATK] <= 0xB)
+ && gBattleMoves[gCurrentMove].power && gBattleMons[gBattlerTarget].statStages[STAT_ATK] <= 0xB)
{
- gBattleMons[gBattlerTarget].statStages[STAT_STAGE_ATK]++;
+ gBattleMons[gBattlerTarget].statStages[STAT_ATK]++;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_RageIsBuilding;
effect = TRUE;
@@ -4894,7 +4833,7 @@ static void atk49_moveend(void)
case 1: // defrosting check
if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
- && gSpecialStatuses[gBattlerTarget].moveturnLostHP_special
+ && gSpecialStatuses[gBattlerTarget].specialDmg
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && moveType == TYPE_FIRE)
{
gBattleMons[gBattlerTarget].status1 &= ~(STATUS1_FREEZE);
@@ -4919,7 +4858,7 @@ static void atk49_moveend(void)
break;
case 4: // status immunities
if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
- effect = TRUE; // it loops through all banks, so we increment after its done with all banks
+ effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers
else
gBattleScripting.atk49_state++;
break;
@@ -4963,7 +4902,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
- case 11: // item effects for all banks
+ case 11: // item effects for all battlers
if (ItemBattleEffects(3, 0, FALSE))
effect = TRUE;
else
@@ -5097,10 +5036,10 @@ static void atk49_moveend(void)
&& !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
&& !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
{
- u8 bank = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget)));
- if (gBattleMons[bank].hp != 0)
+ u8 battlerId = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget)));
+ if (gBattleMons[battlerId].hp != 0)
{
- gBattlerTarget = bank;
+ gBattlerTarget = battlerId;
gHitMarker |= HITMARKER_NO_ATTACKSTRING;
gBattleScripting.atk49_state = 0;
MoveValuesCleanUp();
@@ -5241,7 +5180,7 @@ static void atk4C_getswitchedmondata(void)
if (gBattleControllerExecFlags)
return;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
gBattlerPartyIndexes[gActiveBattler] = *(gBattleStruct->monToSwitchIntoId + gActiveBattler);
@@ -5260,7 +5199,7 @@ static void atk4D_switchindataupdate(void)
if (gBattleControllerExecFlags)
return;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
oldData = gBattleMons[gActiveBattler];
monData = (u8*)(&gBattleMons[gActiveBattler]);
@@ -5309,7 +5248,7 @@ static void atk4E_switchinanim(void)
if (gBattleControllerExecFlags)
return;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT
&& !(gBattleTypeFlags & (BATTLE_TYPE_LINK
@@ -5337,7 +5276,7 @@ static void atk4F_jumpifcantswitch(void)
struct Pokemon *party = NULL;
s32 r7 = 0;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
if (!(gBattlescriptCurrInstr[1] & ATK4F_DONT_CHECK_STATUSES)
&& ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
@@ -5498,10 +5437,10 @@ static void atk50_openpartyscreen(void)
{
u32 flags;
u8 hitmarkerFaintBits;
- u8 bank;
+ u8 battlerId;
const u8 *jumpPtr;
- bank = 0;
+ battlerId = 0;
flags = 0;
jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
@@ -5713,17 +5652,17 @@ static void atk50_openpartyscreen(void)
hitmarkerFaintBits = gHitMarker >> 0x1C;
- gBank1 = 0;
+ gBattlerFainted = 0;
while (1)
{
- if (gBitTable[gBank1] & hitmarkerFaintBits)
+ if (gBitTable[gBattlerFainted] & hitmarkerFaintBits)
break;
- if (gBank1 >= gBattlersCount)
+ if (gBattlerFainted >= gBattlersCount)
break;
- gBank1++;
+ gBattlerFainted++;
}
- if (gBank1 == gBattlersCount)
+ if (gBattlerFainted == gBattlersCount)
gBattlescriptCurrInstr = jumpPtr;
}
else
@@ -5733,21 +5672,21 @@ static void atk50_openpartyscreen(void)
else
hitmarkerFaintBits = 1;
- bank = GetBattleBank(gBattlescriptCurrInstr[1] & ~(0x80));
- if (gSpecialStatuses[bank].flag40)
+ battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80));
+ if (gSpecialStatuses[battlerId].flag40)
{
gBattlescriptCurrInstr += 6;
}
- else if (sub_80423F4(bank, 6, 6))
+ else if (sub_80423F4(battlerId, 6, 6))
{
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
gBattlescriptCurrInstr = jumpPtr;
}
else
{
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
*(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]);
@@ -5764,7 +5703,7 @@ static void atk50_openpartyscreen(void)
{
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
- if (gActiveBattler != bank)
+ if (gActiveBattler != battlerId)
{
BtlController_EmitLinkStandbyMsg(0, 2, 0);
MarkBattlerForControllerExec(gActiveBattler);
@@ -5773,7 +5712,7 @@ static void atk50_openpartyscreen(void)
}
else
{
- gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(bank) ^ BIT_SIDE);
+ gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(battlerId) ^ BIT_SIDE);
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
gActiveBattler ^= BIT_FLANK;
@@ -5790,7 +5729,7 @@ static void atk51_switchhandleorder(void)
if (gBattleControllerExecFlags)
return;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
switch (gBattlescriptCurrInstr[2])
{
@@ -5855,7 +5794,7 @@ static void atk52_switchineffects(void)
{
s32 i;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
sub_803FA70(gActiveBattler);
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5882,12 +5821,12 @@ static void atk52_switchineffects(void)
gBattleScripting.battler = gActiveBattler;
BattleScriptPushCursor();
- if (gBattlescriptCurrInstr[1] == BS_GET_TARGET)
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
gBattlescriptCurrInstr = BattleScript_SpikesOnTarget;
- else if (gBattlescriptCurrInstr[1] == BS_GET_ATTACKER)
+ else if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
gBattlescriptCurrInstr = BattleScript_SpikesOnAttacker;
else
- gBattlescriptCurrInstr = BattleScript_SpikesOngBank1;
+ gBattlescriptCurrInstr = BattleScript_SpikesOnFaintedBattler;
}
else
{
@@ -5917,14 +5856,14 @@ static void atk52_switchineffects(void)
{
u32 hitmarkerFaintBits = gHitMarker >> 0x1C;
- gBank1++;
+ gBattlerFainted++;
while (1)
{
- if (hitmarkerFaintBits & gBitTable[gBank1] && !(gAbsentBattlerFlags & gBitTable[gBank1]))
+ if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted]))
break;
- if (gBank1 >= gBattlersCount)
+ if (gBattlerFainted >= gBattlersCount)
break;
- gBank1++;
+ gBattlerFainted++;
}
}
gBattlescriptCurrInstr += 2;
@@ -5961,7 +5900,7 @@ static void atk55_fanfare(void)
static void atk56_playfaintcry(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitFaintingCry(0);
MarkBattlerForControllerExec(gActiveBattler);
@@ -5979,7 +5918,7 @@ static void atk57(void)
static void atk58_returntoball(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitReturnMonToBall(0, 1);
MarkBattlerForControllerExec(gActiveBattler);
@@ -5991,9 +5930,9 @@ static void atk59_handlelearnnewmove(void)
const u8 *jumpPtr1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
const u8 *jumpPtr2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
- u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterId], gBattlescriptCurrInstr[9]);
+ u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]);
while (ret == 0xFFFE)
- ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterId], 0);
+ ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], 0);
if (ret == 0)
{
@@ -6007,7 +5946,7 @@ static void atk59_handlelearnnewmove(void)
{
gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterId
+ if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
{
GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret);
@@ -6015,7 +5954,7 @@ static void atk59_handlelearnnewmove(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
- if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterId
+ if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
{
GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret);
@@ -6078,7 +6017,7 @@ static void atk5A_yesnoboxlearnmove(void)
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
- sub_81BFA38(gPlayerParty, gBattleStruct->expGetterId, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
+ sub_81BFA38(gPlayerParty, gBattleStruct->expGetterMonId, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
gBattleScripting.learnMoveState++;
}
break;
@@ -6098,7 +6037,7 @@ static void atk5A_yesnoboxlearnmove(void)
}
else
{
- u16 moveId = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_MOVE1 + movePosition);
+ u16 moveId = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition);
if (IsHMMove2(moveId))
{
PrepareStringBattle(STRINGID_HMMOVESCANTBEFORGOTTEN, gActiveBattler);
@@ -6110,10 +6049,10 @@ static void atk5A_yesnoboxlearnmove(void)
PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId)
- RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterId], movePosition);
- SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterId], gMoveToLearn, movePosition);
+ RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterMonId], movePosition);
+ SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterMonId], gMoveToLearn, movePosition);
- if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterId
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId
&& !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[0].unk18_b & gBitTable[movePosition]))
{
@@ -6121,7 +6060,7 @@ static void atk5A_yesnoboxlearnmove(void)
SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition);
}
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && gBattlerPartyIndexes[2] == gBattleStruct->expGetterId
+ && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId
&& !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[2].unk18_b & gBitTable[movePosition]))
{
@@ -6194,7 +6133,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
static void atk5C_hitanimation(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
@@ -6284,7 +6223,7 @@ static void atk5D_getmoneyreward(void)
static void atk5E(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
switch (gBattleCommunication[0])
{
@@ -6340,7 +6279,7 @@ static void atk61_drawpartystatussummary(void)
if (gBattleControllerExecFlags)
return;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty;
@@ -6370,7 +6309,7 @@ static void atk61_drawpartystatussummary(void)
static void atk62(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitCmd49(0);
MarkBattlerForControllerExec(gActiveBattler);
@@ -6391,7 +6330,7 @@ static void atk64_statusanimation(void)
{
if (gBattleControllerExecFlags == 0)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
&& gDisableStructs[gActiveBattler].substituteHP == 0
&& !(gHitMarker & HITMARKER_NO_ANIMATIONS))
@@ -6409,7 +6348,7 @@ static void atk65_status2animation(void)
if (gBattleControllerExecFlags == 0)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
wantedToAnimate = BSScriptRead32(gBattlescriptCurrInstr + 2);
if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
&& gDisableStructs[gActiveBattler].substituteHP == 0
@@ -6428,7 +6367,7 @@ static void atk66_chosenstatusanimation(void)
if (gBattleControllerExecFlags == 0)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
wantedStatus = BSScriptRead32(gBattlescriptCurrInstr + 3);
if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
&& gDisableStructs[gActiveBattler].substituteHP == 0
@@ -6496,21 +6435,22 @@ static void atk68_cancelallactions(void)
static void atk69_adjustsetdamage(void) // The same as 0x7, except there's no random damage multiplier.
{
- u8 holdEffect, quality;
+ u8 holdEffect, param;
if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
{
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect, quality = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
}
else
{
holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- quality = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
}
- gStringBattler = gBattlerTarget;
+ gPotentialItemEffectBattler = gBattlerTarget;
- if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality)
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
{
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
@@ -6544,7 +6484,7 @@ static void atk6A_removeitem(void)
{
u16* usedHeldItem;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler];
*usedHeldItem = gBattleMons[gActiveBattler].item;
@@ -6659,7 +6599,7 @@ static void sub_804F100(void)
{
struct StatsArray currentStats;
- sub_81D388C(&gPlayerParty[gBattleStruct->expGetterId], &currentStats);
+ sub_81D388C(&gPlayerParty[gBattleStruct->expGetterMonId], &currentStats);
sub_81D3640(0xD, gBattleResources->statsBeforeLvlUp, &currentStats, 0xE, 0xD, 0xF);
}
@@ -6667,7 +6607,7 @@ static void sub_804F144(void)
{
struct StatsArray currentStats;
- sub_81D388C(&gPlayerParty[gBattleStruct->expGetterId], &currentStats);
+ sub_81D388C(&gPlayerParty[gBattleStruct->expGetterMonId], &currentStats);
sub_81D3784(0xD, &currentStats, 0xE, 0xD, 0xF);
}
@@ -6710,9 +6650,9 @@ static void PutLevelAndGenderOnLvlUpBox(void)
u8 *txtPtr;
u32 var;
- monLevel = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_LEVEL);
- monGender = GetMonGender(&gPlayerParty[gBattleStruct->expGetterId]);
- GetMonNickname(&gPlayerParty[gBattleStruct->expGetterId], gStringVar4);
+ monLevel = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
+ monGender = GetMonGender(&gPlayerParty[gBattleStruct->expGetterMonId]);
+ GetMonNickname(&gPlayerParty[gBattleStruct->expGetterMonId], gStringVar4);
subPrinter.current_text_offset = gStringVar4;
subPrinter.windowId = 14;
@@ -6788,8 +6728,8 @@ static void PutMonIconOnLvlUpBox(void)
struct SpriteSheet iconSheet;
struct SpritePalette iconPalSheet;
- u16 species = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_SPECIES);
- u32 personality = GetMonData(&gPlayerParty[gBattleStruct->expGetterId], MON_DATA_PERSONALITY);
+ u16 species = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPECIES);
+ u32 personality = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_PERSONALITY);
const u8* iconPtr = GetMonIconPtr(species, personality, 1);
iconSheet.data = iconPtr;
@@ -6829,9 +6769,9 @@ static void SpriteCB_MonIconOnLvlUpBox(struct Sprite* sprite)
static bool32 IsMonGettingExpSentOut(void)
{
- if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterId)
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId)
return TRUE;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[2] == gBattleStruct->expGetterId)
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId)
return TRUE;
return FALSE;
@@ -6851,7 +6791,7 @@ static void atk6E_setatktoplayer0(void)
static void atk6F_makevisible(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitSpriteInvisibility(0, FALSE);
MarkBattlerForControllerExec(gActiveBattler);
@@ -6860,9 +6800,9 @@ static void atk6F_makevisible(void)
static void atk70_recordlastability(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
- gBattlescriptCurrInstr += 1; // UB: Should be + 2, one byte for command and one byte for bank argument.
+ gBattlescriptCurrInstr += 1; // UB: Should be + 2, one byte for command and one byte for battlerId argument.
}
void BufferMoveToLearnIntoBattleTextBuff2(void)
@@ -6878,7 +6818,7 @@ static void atk71_buffermovetolearn(void)
static void atk72_jumpifplayerran(void)
{
- if (TryRunFromBattle(gBank1))
+ if (TryRunFromBattle(gBattlerFainted))
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
@@ -6891,7 +6831,7 @@ static void atk73_hpthresholds(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
opposingBank = gActiveBattler ^ BIT_SIDE;
result = gBattleMons[opposingBank].hp * 100 / gBattleMons[opposingBank].maxHP;
@@ -6919,7 +6859,7 @@ static void atk74_hpthresholds2(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
opposingBank = gActiveBattler ^ BIT_SIDE;
hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBank));
result = (hpSwitchout - gBattleMons[opposingBank].hp) * 100 / hpSwitchout;
@@ -6939,9 +6879,8 @@ static void atk74_hpthresholds2(void)
static void atk75_useitemonopponent(void)
{
- gBankInMenu = gBattlerAttacker;
- ExecuteTableBasedItemEffect(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, 1);
-
+ gBattlerInMenuId = gBattlerAttacker;
+ PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, 1);
gBattlescriptCurrInstr += 1;
}
@@ -6950,7 +6889,7 @@ static void atk76_various(void)
u8 side;
s32 i;
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
switch (gBattlescriptCurrInstr[2])
{
@@ -6982,11 +6921,11 @@ static void atk76_various(void)
gSpecialStatuses[gActiveBattler].traced = 0;
break;
case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP:
- if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterId)
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId)
{
u16 *choicedMove;
- if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterId)
+ if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId)
gActiveBattler = 0;
else
gActiveBattler = 2;
@@ -7113,7 +7052,7 @@ static void atk76_various(void)
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED;
else
- gBattleOutcome = B_OUTCOME_POKE_TELEPORTED;
+ gBattleOutcome = B_OUTCOME_MON_TELEPORTED;
break;
case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC:
BtlController_EmitPlayFanfareOrBGM(0, MUS_KACHI1, TRUE);
@@ -7236,7 +7175,7 @@ static void atk7B_tryhealhalfhealth(void)
{
const u8* failPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
- if (gBattlescriptCurrInstr[5] == BS_GET_ATTACKER)
+ if (gBattlescriptCurrInstr[5] == BS_ATTACKER)
gBattlerTarget = gBattlerAttacker;
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
@@ -7327,7 +7266,7 @@ static void atk7E_setreflect(void)
{
gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_REFLECT;
gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 5;
- gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectBank = gBattlerAttacker;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
@@ -7420,13 +7359,13 @@ static void atk83_nop(void)
gBattlescriptCurrInstr++;
}
-bool8 UproarWakeUpCheck(u8 bank)
+bool8 UproarWakeUpCheck(u8 battlerId)
{
s32 i;
for (i = 0; i < gBattlersCount; i++)
{
- if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF)
+ if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[battlerId].ability == ABILITY_SOUNDPROOF)
continue;
gBattleScripting.battler = i;
@@ -7626,7 +7565,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
return STAT_CHANGE_DIDNT_WORK;
}
else if (gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE
- && !certain && statId == STAT_STAGE_ACC)
+ && !certain && statId == STAT_ACC)
{
if (flags == STAT_CHANGE_BS_PTR)
{
@@ -7639,7 +7578,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
return STAT_CHANGE_DIDNT_WORK;
}
else if (gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER
- && !certain && statId == STAT_STAGE_ATK)
+ && !certain && statId == STAT_ATK)
{
if (flags == STAT_CHANGE_BS_PTR)
{
@@ -7810,8 +7749,8 @@ static bool8 TryDoForceSwitchOut(void)
static void atk8F_forcerandomswitch(void)
{
s32 i;
- s32 bank1PartyId = 0;
- s32 bank2PartyId = 0;
+ s32 battler1PartyId = 0;
+ s32 battler2PartyId = 0;
#ifdef NONMATCHING
s32 lastMonId = 0; // + 1
@@ -7848,8 +7787,8 @@ static void atk8F_forcerandomswitch(void)
}
monsCount = 3;
minNeeded = 1;
- bank2PartyId = gBattlerPartyIndexes[gBattlerTarget];
- bank1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
+ battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
+ battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
}
else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|| (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_x2000000))
@@ -7866,8 +7805,8 @@ static void atk8F_forcerandomswitch(void)
}
monsCount = 3;
minNeeded = 1;
- bank2PartyId = gBattlerPartyIndexes[gBattlerTarget];
- bank1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
+ battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
+ battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
}
else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
{
@@ -7893,8 +7832,8 @@ static void atk8F_forcerandomswitch(void)
monsCount = 3;
minNeeded = 1;
}
- bank2PartyId = gBattlerPartyIndexes[gBattlerTarget];
- bank1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
+ battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
+ battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
}
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
@@ -7902,8 +7841,8 @@ static void atk8F_forcerandomswitch(void)
lastMonId = 6;
monsCount = 6;
minNeeded = 2;
- bank2PartyId = gBattlerPartyIndexes[gBattlerTarget];
- bank1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
+ battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
+ battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
}
else
{
@@ -7911,8 +7850,8 @@ static void atk8F_forcerandomswitch(void)
lastMonId = 6;
monsCount = 6;
minNeeded = 1;
- bank2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles
- bank1PartyId = gBattlerPartyIndexes[gBattlerTarget];
+ battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles
+ battler1PartyId = gBattlerPartyIndexes[gBattlerTarget];
}
for (i = firstMonId; i < lastMonId; i++)
@@ -7938,8 +7877,8 @@ static void atk8F_forcerandomswitch(void)
i = Random() % monsCount;
i += firstMonId;
}
- while (i == bank2PartyId
- || i == bank1PartyId
+ while (i == battler2PartyId
+ || i == battler1PartyId
|| GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE
|| GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE
|| GetMonData(&party[i], MON_DATA_HP) == 0);
@@ -8061,7 +8000,7 @@ static void atk92_setlightscreen(void)
{
gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_LIGHTSCREEN;
gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5;
- gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenBank = gBattlerAttacker;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
gBattleCommunication[MULTISTRING_CHOOSER] = 4;
@@ -8087,7 +8026,7 @@ static void atk93_tryKO(void)
param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
}
- gStringBattler = gBattlerTarget;
+ gPotentialItemEffectBattler = gBattlerTarget;
if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
{
@@ -8288,7 +8227,7 @@ static void atk98_updatestatusicon(void)
if (gBattlescriptCurrInstr[1] != BS_ATTACKER_WITH_PARTNER)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitStatusIconUpdate(0, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 2;
@@ -8324,7 +8263,7 @@ static void atk99_setmist(void)
else
{
gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer = 5;
- gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistBank = gBattlerAttacker;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistBattlerId = gBattlerAttacker;
gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_MIST;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
@@ -8520,18 +8459,18 @@ static void atkA0_psywavedamageeffect(void)
static void atkA1_counterdamagecalculator(void)
{
u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
- u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBank);
+ u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId);
if (gProtectStructs[gBattlerAttacker].physicalDmg
&& sideAttacker != sideTarget
- && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBank].hp)
+ && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp)
{
gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 2;
if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
else
- gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBank;
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId;
gBattlescriptCurrInstr += 5;
}
@@ -8545,16 +8484,16 @@ static void atkA1_counterdamagecalculator(void)
static void atkA2_mirrorcoatdamagecalculator(void) // a copy of atkA1 with the physical -> special field changes
{
u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
- u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBank);
+ u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId);
- if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].specialBank].hp)
+ if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp)
{
gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 2;
if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
else
- gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBank;
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId;
gBattlescriptCurrInstr += 5;
}
@@ -8636,7 +8575,7 @@ static void atkA5_painsplitdmgcalc(void)
storeLoc[3] = (painSplitHp & 0xFF000000) >> 24;
gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp - hpDiff;
- gSpecialStatuses[gBattlerTarget].moveturnLostHP = 0xFFFF;
+ gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF;
gBattlescriptCurrInstr += 5;
}
@@ -8795,7 +8734,7 @@ static bool8 IsInvalidForSleepTalkOrAssist(u16 move)
return FALSE;
}
-static u8 AttacksThisTurn(u8 bank, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2
+static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2
{
// first argument is unused
if (gBattleMoves[move].effect == EFFECT_SOLARBEAM
@@ -9224,7 +9163,7 @@ static void atkB8_setsafeguard(void)
{
gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_SAFEGUARD;
gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].safeguardTimer = 5;
- gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].safeguardBank = gBattlerAttacker;
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].safeguardBattlerId = gBattlerAttacker;
gBattleCommunication[MULTISTRING_CHOOSER] = 5;
}
@@ -9318,7 +9257,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
}
gCurrentMove = MOVE_PURSUIT;
- gCurrMovePos = gUnknown_020241E9 = *(gBattleStruct->chosenMovePositions + gBattlerTarget);
+ gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget);
gBattlescriptCurrInstr += 5;
gBattleScripting.animTurn = 1;
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
@@ -9353,10 +9292,10 @@ static void atkBC_maxattackhalvehp(void) // belly drum
if (!(gBattleMons[gBattlerAttacker].maxHP / 2))
halfHp = 1;
- if (gBattleMons[gBattlerAttacker].statStages[STAT_STAGE_ATK] < 12
+ if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < 12
&& gBattleMons[gBattlerAttacker].hp > halfHp)
{
- gBattleMons[gBattlerAttacker].statStages[STAT_STAGE_ATK] = 12;
+ gBattleMons[gBattlerAttacker].statStages[STAT_ATK] = 12;
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
@@ -9480,7 +9419,7 @@ static void atkC1_hiddenpowercalc(void)
}
#else
-__attribute__((naked))
+ASM_DIRECT
static void atkC1_hiddenpowercalc(void)
{
asm(".syntax unified\n\
@@ -9776,8 +9715,8 @@ static void atkC8_sethail(void)
static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
{
- if (gBattleMons[gBattlerTarget].statStages[STAT_STAGE_ATK] == 0
- && gBattleMons[gBattlerTarget].statStages[STAT_STAGE_SPATK] == 0
+ if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == 0
+ && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0
&& gBattleCommunication[6] != 1)
{
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
@@ -9995,7 +9934,7 @@ static void atkD4_trywish(void)
if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0)
{
gWishFutureKnock.wishCounter[gBattlerAttacker] = 2;
- gWishFutureKnock.wishUserID[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker];
+ gWishFutureKnock.wishMonId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker];
gBattlescriptCurrInstr += 6;
}
else
@@ -10004,7 +9943,7 @@ static void atkD4_trywish(void)
}
break;
case 1: // heal effect
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishUserID[gBattlerTarget])
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishMonId[gBattlerTarget])
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
if (gBattleMoveDamage == 0)
@@ -10036,9 +9975,9 @@ static void atkD5_trysetroots(void) // ingrain
static void atkD6_doubledamagedealtifdamaged(void)
{
if ((gProtectStructs[gBattlerAttacker].physicalDmg
- && gProtectStructs[gBattlerAttacker].physicalBank == gBattlerTarget)
+ && gProtectStructs[gBattlerAttacker].physicalBattlerId == gBattlerTarget)
|| (gProtectStructs[gBattlerAttacker].specialDmg
- && gProtectStructs[gBattlerAttacker].specialBank == gBattlerTarget))
+ && gProtectStructs[gBattlerAttacker].specialBattlerId == gBattlerTarget))
{
gBattleScripting.dmgMultiplier = 2;
}
@@ -10113,13 +10052,13 @@ static void atkDB_tryimprision(void)
}
else
{
- u8 bank, sideAttacker;
+ u8 battlerId, sideAttacker;
sideAttacker = GetBattlerSide(gBattlerAttacker);
PressurePPLoseOnUsingImprision(gBattlerAttacker);
- for (bank = 0; bank < gBattlersCount; bank++)
+ for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
{
- if (sideAttacker != GetBattlerSide(bank))
+ if (sideAttacker != GetBattlerSide(battlerId))
{
s32 attackerMoveId;
for (attackerMoveId = 0; attackerMoveId < 4; attackerMoveId++)
@@ -10127,7 +10066,7 @@ static void atkDB_tryimprision(void)
s32 i;
for (i = 0; i < 4; i++)
{
- if (gBattleMons[gBattlerAttacker].moves[attackerMoveId] == gBattleMons[bank].moves[i]
+ if (gBattleMons[gBattlerAttacker].moves[attackerMoveId] == gBattleMons[battlerId].moves[i]
&& gBattleMons[gBattlerAttacker].moves[attackerMoveId] != MOVE_NONE)
break;
}
@@ -10142,7 +10081,7 @@ static void atkDB_tryimprision(void)
}
}
}
- if (bank == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes
+ 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);
}
}
@@ -10284,7 +10223,7 @@ static void atkE1_trygetintimidatetarget(void)
static void atkE2_switchoutabilities(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
switch (gBattleMons[gActiveBattler].ability)
{
@@ -10300,7 +10239,7 @@ static void atkE2_switchoutabilities(void)
static void atkE3_jumpifhasnohp(void)
{
- gActiveBattler = GetBattleBank(gBattlescriptCurrInstr[1]);
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattleMons[gActiveBattler].hp == 0)
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
@@ -10560,14 +10499,14 @@ static void atkEC_pursuitrelated(void)
static void atkEF_snatchsetbanks(void)
{
- gEffectBank = gBattlerAttacker;
+ gEffectBattler = gBattlerAttacker;
if (gBattlerAttacker == gBattlerTarget)
gBattlerAttacker = gBattlerTarget = gBattleScripting.battler;
else
gBattlerTarget = gBattleScripting.battler;
- gBattleScripting.battler = gEffectBank;
+ gBattleScripting.battler = gEffectBattler;
gBattlescriptCurrInstr++;
}
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 96af536fe..fdf6e77b6 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -5,7 +5,6 @@
#include "battle_transition.h"
#include "main.h"
#include "task.h"
-#include "pokemon_3.h"
#include "safari_zone.h"
#include "script.h"
#include "constants/game_stat.h"
@@ -30,6 +29,8 @@
#include "strings.h"
#include "secret_base.h"
#include "string_util.h"
+#include "overworld.h"
+#include "field_weather.h"
enum
{
@@ -59,14 +60,11 @@ extern void sub_81BE72C(void);
extern void FreezeMapObjects(void);
extern void sub_808BCF4(void);
extern void sub_80EECC8(void);
-extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
-extern void c2_exit_to_overworld_2_switch(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 GetSav1Weather(void);
extern u8 Overworld_GetFlashLevel(void);
extern u16 sub_81A9AA8(u8 localId);
extern u16 sub_81D6180(u8 localId);
@@ -82,12 +80,6 @@ extern void sub_81D61E8(void);
extern void sub_80982B8(void);
extern void sub_81A9EDC(u16 a0);
extern void sub_81D572C(u8 a0, u16 arg1);
-extern void IncrementGameStat(u8 statId);
-extern u32 GetGameStat(u8 statId);
-
-extern u32 gBattleTypeFlags;
-extern u8 gBattleOutcome;
-extern void (*gFieldCallback)(void);
// this file's functions
static void DoBattlePikeWildBattle(void);
@@ -996,8 +988,8 @@ static bool32 IsPlayerDefeated(u32 battleOutcome)
case B_OUTCOME_WON:
case B_OUTCOME_RAN:
case B_OUTCOME_PLAYER_TELEPORTED:
- case B_OUTCOME_POKE_FLED:
- case B_OUTCOME_CAUGHT_POKE:
+ case B_OUTCOME_MON_FLED:
+ case B_OUTCOME_CAUGHT:
return FALSE;
default:
return FALSE;
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 0ff8cd903..e0d208f23 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -61,9 +61,7 @@ extern u16 gBattle_BG0_Y;
extern const struct OamData gFieldObjectBaseOam_32x32;
-extern void c2_exit_to_overworld_2_switch(void);
extern void sub_80AC3D0(void);
-extern void ScanlineEffect_Clear(void);
// this file's functions
static void LaunchBattleTransitionTask(u8 transitionId);
diff --git a/src/battle_util.c b/src/battle_util.c
index bbb4bf41d..a457ce15d 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "battle.h"
+#include "constants/battle_script_commands.h"
#include "constants/abilities.h"
#include "constants/moves.h"
#include "constants/hold_effects.h"
@@ -15,53 +16,13 @@
#include "text.h"
#include "string_util.h"
#include "battle_message.h"
-#include "battle_string_ids.h"
+#include "constants/battle_string_ids.h"
#include "battle_ai_script_commands.h"
#include "battle_controllers.h"
#include "event_data.h"
-#include "calculate_base_damage.h"
#include "link.h"
#include "berry.h"
-extern const u8* gBattlescriptCurrInstr;
-extern const u8* gSelectionBattleScripts[MAX_BATTLERS_COUNT];
-extern const u8* gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u8 gActiveBattler;
-extern u8 gStringBattler;
-extern u16 gCurrentMove;
-extern u16 gLastUsedItem;
-extern u8 gBattlersCount;
-extern u32 gStatuses3[MAX_BATTLERS_COUNT];
-extern u8 gBattlerAttacker;
-extern u8 gBattlerTarget;
-extern u8 gAbsentBattlerFlags;
-extern u16 gBattleWeather;
-extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
-extern u16 gSideStatuses[2];
-extern u8 gBattleCommunication[];
-extern void (*gBattleMainFunc)(void);
-extern s32 gBattleMoveDamage;
-extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
-extern u32 gBattleTypeFlags;
-extern u16 gLastMoves[MAX_BATTLERS_COUNT];
-extern u32 gHitMarker;
-extern u8 gEffectBank;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBank1;
-extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
-extern u8 gMoveResultFlags;
-extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
-extern u8 gTakenDmgBanks[MAX_BATTLERS_COUNT];
-extern u8 gLastUsedAbility;
-extern u8 gCurrentActionFuncId;
-extern u32 gBattleControllerExecFlags;
-extern u16 gRandomMove;
-extern u8 gCurrMovePos;
-extern u8 gUnknown_020241E9;
-extern u8 gSentPokesToOpponent[2];
-
extern const struct BattleMove gBattleMoves[];
extern u8 weather_get_current(void);
@@ -73,46 +34,46 @@ static const u16 sSoundMovesTable[] =
MOVE_UPROAR, MOVE_METAL_SOUND, MOVE_GRASS_WHISTLE, MOVE_HYPER_VOICE, 0xFFFF
};
-u8 GetBattleBank(u8 caseId)
+u8 GetBattlerForBattleScript(u8 caseId)
{
u8 ret = 0;
switch (caseId)
{
- case BS_GET_TARGET:
+ case BS_TARGET:
ret = gBattlerTarget;
break;
- case BS_GET_ATTACKER:
+ case BS_ATTACKER:
ret = gBattlerAttacker;
break;
- case BS_GET_EFFECT_BANK:
- ret = gEffectBank;
+ case BS_EFFECT_BATTLER:
+ ret = gEffectBattler;
break;
- case BS_GET_BANK_0:
+ case BS_BANK_0:
ret = 0;
break;
- case BS_GET_SCRIPTING_BANK:
+ case BS_SCRIPTING:
ret = gBattleScripting.battler;
break;
- case BS_GET_gBank1:
- ret = gBank1;
+ case BS_FAINTED:
+ ret = gBattlerFainted;
break;
case 5:
- ret = gBank1;
+ ret = gBattlerFainted;
break;
case 4:
case 6:
case 8:
case 9:
- case BS_GET_PLAYER1:
+ case BS_PLAYER1:
ret = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
break;
- case BS_GET_OPPONENT1:
+ case BS_OPPONENT1:
ret = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
break;
- case BS_GET_PLAYER2:
+ case BS_PLAYER2:
ret = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
break;
- case BS_GET_OPPONENT2:
+ case BS_OPPONENT2:
ret = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
break;
}
@@ -421,7 +382,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
else
holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item);
- gStringBattler = gActiveBattler;
+ gPotentialItemEffectBattler = gActiveBattler;
if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != move)
{
@@ -454,36 +415,36 @@ u8 TrySetCantSelectMoveBattleScript(void)
return limitations;
}
-u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check)
+u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check)
{
u8 holdEffect;
- u16 *choicedMove = &gBattleStruct->choicedMove[bank];
+ u16 *choicedMove = &gBattleStruct->choicedMove[battlerId];
s32 i;
- if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY)
- holdEffect = gEnigmaBerries[bank].holdEffect;
+ if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
+ holdEffect = gEnigmaBerries[battlerId].holdEffect;
else
- holdEffect = ItemId_GetHoldEffect(gBattleMons[bank].item);
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
- gStringBattler = bank;
+ gPotentialItemEffectBattler = battlerId;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- if (gBattleMons[bank].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE)
+ if (gBattleMons[battlerId].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE)
unusableMoves |= gBitTable[i];
- if (gBattleMons[bank].pp[i] == 0 && check & MOVE_LIMITATION_PP)
+ if (gBattleMons[battlerId].pp[i] == 0 && check & MOVE_LIMITATION_PP)
unusableMoves |= gBitTable[i];
- if (gBattleMons[bank].moves[i] == gDisableStructs[bank].disabledMove && check & MOVE_LIMITATION_DISABLED)
+ if (gBattleMons[battlerId].moves[i] == gDisableStructs[battlerId].disabledMove && check & MOVE_LIMITATION_DISABLED)
unusableMoves |= gBitTable[i];
- if (gBattleMons[bank].moves[i] == gLastMoves[bank] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[bank].status2 & STATUS2_TORMENT)
+ if (gBattleMons[battlerId].moves[i] == gLastMoves[battlerId] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[battlerId].status2 & STATUS2_TORMENT)
unusableMoves |= gBitTable[i];
- if (gDisableStructs[bank].tauntTimer1 && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[bank].moves[i]].power == 0)
+ if (gDisableStructs[battlerId].tauntTimer1 && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[battlerId].moves[i]].power == 0)
unusableMoves |= gBitTable[i];
- if (GetImprisonedMovesCount(bank, gBattleMons[bank].moves[i]) && check & MOVE_LIMITATION_IMPRISION)
+ if (GetImprisonedMovesCount(battlerId, gBattleMons[battlerId].moves[i]) && check & MOVE_LIMITATION_IMPRISION)
unusableMoves |= gBitTable[i];
- if (gDisableStructs[bank].encoreTimer1 && gDisableStructs[bank].encoredMove != gBattleMons[bank].moves[i])
+ if (gDisableStructs[battlerId].encoreTimer1 && gDisableStructs[battlerId].encoredMove != gBattleMons[battlerId].moves[i])
unusableMoves |= gBitTable[i];
- if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != gBattleMons[bank].moves[i])
+ if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != gBattleMons[battlerId].moves[i])
unusableMoves |= gBitTable[i];
}
return unusableMoves;
@@ -507,11 +468,11 @@ bool8 AreAllMovesUnusable(void)
return (unusable == 0xF);
}
-u8 GetImprisonedMovesCount(u8 bank, u16 move)
+u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
{
s32 i;
u8 imprisionedMoves = 0;
- u8 bankSide = GetBattlerSide(bank);
+ u8 bankSide = GetBattlerSide(battlerId);
for (i = 0; i < gBattlersCount; i++)
{
@@ -547,7 +508,7 @@ u8 UpdateTurnCounters(void)
{
u8 sideBank;
- switch (gBattleStruct->turncountersTracker)
+ switch (gBattleStruct->turnCountersTracker)
{
case 0:
for (i = 0; i < gBattlersCount; i++)
@@ -566,7 +527,7 @@ u8 UpdateTurnCounters(void)
// It's stupid, but won't match without it
{
- u8* var = &gBattleStruct->turncountersTracker;
+ u8* var = &gBattleStruct->turnCountersTracker;
(*var)++;
gBattleStruct->turnSideTracker = 0;
}
@@ -575,7 +536,7 @@ u8 UpdateTurnCounters(void)
while (gBattleStruct->turnSideTracker < 2)
{
sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].reflectBank;
+ gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].reflectBattlerId;
if (gSideStatuses[sideBank] & SIDE_STATUS_REFLECT)
{
if (--gSideTimers[sideBank].reflectTimer == 0)
@@ -592,7 +553,7 @@ u8 UpdateTurnCounters(void)
}
if (!effect)
{
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
gBattleStruct->turnSideTracker = 0;
}
break;
@@ -600,7 +561,7 @@ u8 UpdateTurnCounters(void)
while (gBattleStruct->turnSideTracker < 2)
{
sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].lightscreenBank;
+ gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].lightscreenBattlerId;
if (gSideStatuses[sideBank] & SIDE_STATUS_LIGHTSCREEN)
{
if (--gSideTimers[sideBank].lightscreenTimer == 0)
@@ -618,7 +579,7 @@ u8 UpdateTurnCounters(void)
}
if (!effect)
{
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
gBattleStruct->turnSideTracker = 0;
}
break;
@@ -626,7 +587,7 @@ u8 UpdateTurnCounters(void)
while (gBattleStruct->turnSideTracker < 2)
{
sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].mistBank;
+ gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].mistBattlerId;
if (gSideTimers[sideBank].mistTimer != 0
&& --gSideTimers[sideBank].mistTimer == 0)
{
@@ -642,7 +603,7 @@ u8 UpdateTurnCounters(void)
}
if (!effect)
{
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
gBattleStruct->turnSideTracker = 0;
}
break;
@@ -650,7 +611,7 @@ u8 UpdateTurnCounters(void)
while (gBattleStruct->turnSideTracker < 2)
{
sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].safeguardBank;
+ gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].safeguardBattlerId;
if (gSideStatuses[sideBank] & SIDE_STATUS_SAFEGUARD)
{
if (--gSideTimers[sideBank].safeguardTimer == 0)
@@ -666,7 +627,7 @@ u8 UpdateTurnCounters(void)
}
if (!effect)
{
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
gBattleStruct->turnSideTracker = 0;
}
break;
@@ -688,7 +649,7 @@ u8 UpdateTurnCounters(void)
}
if (!effect)
{
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
}
break;
case 6:
@@ -719,7 +680,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(BattleScript_RainContinuesOrEnds);
effect++;
}
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
break;
case 7:
if (gBattleWeather & WEATHER_SANDSTORM_ANY)
@@ -739,7 +700,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
break;
case 8:
if (gBattleWeather & WEATHER_SUN_ANY)
@@ -757,7 +718,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
break;
case 9:
if (gBattleWeather & WEATHER_HAIL)
@@ -777,7 +738,7 @@ u8 UpdateTurnCounters(void)
BattleScriptExecute(gBattlescriptCurrInstr);
effect++;
}
- gBattleStruct->turncountersTracker++;
+ gBattleStruct->turnCountersTracker++;
break;
case 10:
effect++;
@@ -794,12 +755,12 @@ u8 TurnBasedEffects(void)
u8 effect = 0;
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
- while (gBattleStruct->turnEffectsBank < gBattlersCount && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
+ while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
{
- gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->turnEffectsBank];
+ gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->turnEffectsBattlerId];
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{
- gBattleStruct->turnEffectsBank++;
+ gBattleStruct->turnEffectsBattlerId++;
}
else
{
@@ -839,7 +800,7 @@ u8 TurnBasedEffects(void)
&& gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BANK].hp != 0
&& gBattleMons[gActiveBattler].hp != 0)
{
- gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BANK; //funny how the 'target' is actually the bank that receives HP
+ gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BANK; //funny how the 'target' is actually the battlerId that receives HP
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
@@ -1090,7 +1051,7 @@ u8 TurnBasedEffects(void)
gBattleMons[gActiveBattler].status1 |= (Random() & 3) + 2;
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
MarkBattlerForControllerExec(gActiveBattler);
- gEffectBank = gActiveBattler;
+ gEffectBattler = gActiveBattler;
BattleScriptExecute(BattleScript_YawnMakesAsleep);
effect++;
}
@@ -1099,7 +1060,7 @@ u8 TurnBasedEffects(void)
break;
case 19: // done
gBattleStruct->turnEffectsTracker = 0;
- gBattleStruct->turnEffectsBank++;
+ gBattleStruct->turnEffectsBattlerId++;
break;
}
if (effect != 0)
@@ -1117,16 +1078,16 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
switch (gBattleStruct->wishPerishSongState)
{
case 0:
- while (gBattleStruct->wishPerishSongBank < gBattlersCount)
+ while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount)
{
- gActiveBattler = gBattleStruct->wishPerishSongBank;
+ gActiveBattler = gBattleStruct->wishPerishSongBattlerId;
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{
- gBattleStruct->wishPerishSongBank++;
+ gBattleStruct->wishPerishSongBattlerId++;
continue;
}
- gBattleStruct->wishPerishSongBank++;
+ gBattleStruct->wishPerishSongBattlerId++;
if (gWishFutureKnock.futureSightCounter[gActiveBattler] != 0
&& --gWishFutureKnock.futureSightCounter[gActiveBattler] == 0
&& gBattleMons[gActiveBattler].hp != 0)
@@ -1141,7 +1102,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
gBattlerTarget = gActiveBattler;
gBattlerAttacker = gWishFutureKnock.futureSightAttacker[gActiveBattler];
gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBattler];
- gSpecialStatuses[gBattlerTarget].moveturnLostHP = 0xFFFF;
+ gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF;
BattleScriptExecute(BattleScript_MonTookFutureAttack);
if (gWishFutureKnock.futureSightCounter[gActiveBattler] == 0
@@ -1156,19 +1117,19 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
{
u8 *state = &gBattleStruct->wishPerishSongState;
*state = 1;
- gBattleStruct->wishPerishSongBank = 0;
+ gBattleStruct->wishPerishSongBattlerId = 0;
}
// fall through
case 1:
- while (gBattleStruct->wishPerishSongBank < gBattlersCount)
+ while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount)
{
- gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->wishPerishSongBank];
+ gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->wishPerishSongBattlerId];
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{
- gBattleStruct->wishPerishSongBank++;
+ gBattleStruct->wishPerishSongBattlerId++;
continue;
}
- gBattleStruct->wishPerishSongBank++;
+ gBattleStruct->wishPerishSongBattlerId++;
if (gStatuses3[gActiveBattler] & STATUS3_PERISH_SONG)
{
PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gActiveBattler].perishSongTimer1);
@@ -1191,7 +1152,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
{
u8 *state = &gBattleStruct->wishPerishSongState;
*state = 2;
- gBattleStruct->wishPerishSongBank = 0;
+ gBattleStruct->wishPerishSongBattlerId = 0;
}
// fall through
case 2:
@@ -1229,7 +1190,7 @@ bool8 HandleFaintedMonActions(void)
switch (gBattleStruct->faintedActionsState)
{
case 0:
- gBattleStruct->faintedActionsBank = 0;
+ gBattleStruct->faintedActionsBattlerId = 0;
gBattleStruct->faintedActionsState++;
for (i = 0; i < gBattlersCount; i++)
{
@@ -1240,45 +1201,45 @@ bool8 HandleFaintedMonActions(void)
case 1:
do
{
- gBank1 = gBattlerTarget = gBattleStruct->faintedActionsBank;
- if (gBattleMons[gBattleStruct->faintedActionsBank].hp == 0
- && !(gBattleStruct->field_DF & gBitTable[gBattlerPartyIndexes[gBattleStruct->faintedActionsBank]])
- && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBank]))
+ gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId;
+ if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0
+ && !(gBattleStruct->field_DF & gBitTable[gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId]])
+ && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
{
BattleScriptExecute(BattleScript_GiveExp);
gBattleStruct->faintedActionsState = 2;
return TRUE;
}
- } while (++gBattleStruct->faintedActionsBank != gBattlersCount);
+ } while (++gBattleStruct->faintedActionsBattlerId != gBattlersCount);
gBattleStruct->faintedActionsState = 3;
break;
case 2:
- sub_803F9EC(gBank1);
- if (++gBattleStruct->faintedActionsBank == gBattlersCount)
+ sub_803F9EC(gBattlerFainted);
+ if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount)
gBattleStruct->faintedActionsState = 3;
else
gBattleStruct->faintedActionsState = 1;
break;
case 3:
- gBattleStruct->faintedActionsBank = 0;
+ gBattleStruct->faintedActionsBattlerId = 0;
gBattleStruct->faintedActionsState++;
// fall through
case 4:
do
{
- gBank1 = gBattlerTarget = gBattleStruct->faintedActionsBank;
- if (gBattleMons[gBattleStruct->faintedActionsBank].hp == 0
- && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBank]))
+ gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId;
+ if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0
+ && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId]))
{
BattleScriptExecute(BattleScript_HandleFaintedMon);
gBattleStruct->faintedActionsState = 5;
return TRUE;
}
- } while (++gBattleStruct->faintedActionsBank != gBattlersCount);
+ } while (++gBattleStruct->faintedActionsBattlerId != gBattlersCount);
gBattleStruct->faintedActionsState = 6;
break;
case 5:
- if (++gBattleStruct->faintedActionsBank == gBattlersCount)
+ if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount)
gBattleStruct->faintedActionsState = 6;
else
gBattleStruct->faintedActionsState = 4;
@@ -1535,7 +1496,7 @@ u8 AtkCanceller_UnableToUseMove(void)
{
gCurrentMove = MOVE_BIDE;
*bideDmg = gTakenDmg[gBattlerAttacker] * 2;
- gBattlerTarget = gTakenDmgBanks[gBattlerAttacker];
+ gBattlerTarget = gTakenDmgByBattler[gBattlerAttacker];
if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
gBattlerTarget = GetMoveTarget(MOVE_BIDE, 1);
gBattlescriptCurrInstr = BattleScript_BideAttack;
@@ -1950,9 +1911,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
break;
case ABILITY_SPEED_BOOST:
- if (gBattleMons[battler].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[battler].isFirstTurn != 2)
+ if (gBattleMons[battler].statStages[STAT_SPEED] < 0xC && gDisableStructs[battler].isFirstTurn != 2)
{
- gBattleMons[battler].statStages[STAT_STAGE_SPEED]++;
+ gBattleMons[battler].statStages[STAT_SPEED]++;
gBattleScripting.animArg1 = 0x11;
gBattleScripting.animArg2 = 0;
BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates);
@@ -2063,7 +2024,7 @@ 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].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& gBattleMons[battler].type1 != moveType
&& gBattleMons[battler].type2 != moveType
&& gBattleMons[battler].hp != 0)
@@ -2080,7 +2041,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].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT))
{
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
@@ -2095,7 +2056,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].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 10) == 0)
{
@@ -2118,7 +2079,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].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 3) == 0)
{
@@ -2133,7 +2094,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].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 3) == 0)
{
@@ -2149,7 +2110,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].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& (Random() % 3) == 0)
{
gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
@@ -2164,7 +2125,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].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& gBattleMons[gBattlerTarget].hp != 0
&& (Random() % 3) == 0
&& gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS
@@ -2535,7 +2496,7 @@ enum
ITEM_STATS_CHANGE, // 5
};
-u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
+u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
int i = 0;
u8 effect = ITEM_NO_EFFECT;
@@ -2544,11 +2505,11 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
u8 bankQuality, atkQuality, defQuality;
u16 atkItem, defItem;
- gLastUsedItem = gBattleMons[bank].item;
+ gLastUsedItem = gBattleMons[battlerId].item;
if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{
- bankHoldEffect = gEnigmaBerries[bank].holdEffect;
- bankQuality = gEnigmaBerries[bank].holdEffectParam;
+ bankHoldEffect = gEnigmaBerries[battlerId].holdEffect;
+ bankQuality = gEnigmaBerries[battlerId].holdEffectParam;
}
else
{
@@ -2587,39 +2548,39 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
switch (bankHoldEffect)
{
case HOLD_EFFECT_DOUBLE_PRIZE:
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
gBattleStruct->moneyMultiplier = 2;
break;
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < BATTLE_STATS_NO; i++)
{
- if (gBattleMons[bank].statStages[i] < 6)
+ if (gBattleMons[battlerId].statStages[i] < 6)
{
- gBattleMons[bank].statStages[i] = 6;
+ gBattleMons[battlerId].statStages[i] = 6;
effect = ITEM_STATS_CHANGE;
}
}
if (effect)
{
- gBattleScripting.battler = bank;
- gStringBattler = bank;
- gActiveBattler = gBattlerAttacker = bank;
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = gBattlerAttacker = battlerId;
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
}
break;
}
break;
case 1:
- if (gBattleMons[bank].hp)
+ if (gBattleMons[battlerId].hp)
{
switch (bankHoldEffect)
{
case HOLD_EFFECT_RESTORE_HP:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{
gBattleMoveDamage = bankQuality;
- if (gBattleMons[bank].hp + bankQuality > gBattleMons[bank].maxHP)
- gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ if (gBattleMons[battlerId].hp + bankQuality > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
effect = 4;
@@ -2632,10 +2593,10 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
u8 ppBonuses;
u16 move;
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
- mon = &gPlayerParty[gBattlerPartyIndexes[bank]];
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
else
- mon = &gEnemyParty[gBattlerPartyIndexes[bank]];
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
for (i = 0; i < 4; i++)
{
move = GetMonData(mon, MON_DATA_MOVE1 + i);
@@ -2664,47 +2625,47 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < BATTLE_STATS_NO; i++)
{
- if (gBattleMons[bank].statStages[i] < 6)
+ if (gBattleMons[battlerId].statStages[i] < 6)
{
- gBattleMons[bank].statStages[i] = 6;
+ gBattleMons[battlerId].statStages[i] = 6;
effect = ITEM_STATS_CHANGE;
}
}
if (effect)
{
- gBattleScripting.battler = bank;
- gStringBattler = bank;
- gActiveBattler = gBattlerAttacker = bank;
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = gBattlerAttacker = battlerId;
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
}
break;
case HOLD_EFFECT_LEFTOVERS:
- if (gBattleMons[bank].hp < gBattleMons[bank].maxHP && !moveTurn)
+ if (gBattleMons[battlerId].hp < gBattleMons[battlerId].maxHP && !moveTurn)
{
- gBattleMoveDamage = gBattleMons[bank].maxHP / 16;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / 16;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
- gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
BattleScriptExecute(BattleScript_ItemHealHP_End2);
effect = ITEM_HP_CHANGE;
- RecordItemEffectBattle(bank, bankHoldEffect);
+ RecordItemEffectBattle(battlerId, bankHoldEffect);
}
break;
// nice copy/paste there gamefreak, making a function for confuse berries was too much eh?
case HOLD_EFFECT_CONFUSE_SPICY:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SPICY);
- gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
- gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
- if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SPICY) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SPICY) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2712,17 +2673,17 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CONFUSE_DRY:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_DRY);
- gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
- gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
- if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_DRY) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_DRY) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2730,17 +2691,17 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CONFUSE_SWEET:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SWEET);
- gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
- gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
- if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SWEET) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SWEET) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2748,17 +2709,17 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CONFUSE_BITTER:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_BITTER);
- gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
- gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
- if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_BITTER) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_BITTER) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2766,17 +2727,17 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CONFUSE_SOUR:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SOUR);
- gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP)
- gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp;
+ if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
- if (GetFlavorRelationByPersonality(gBattleMons[bank].personality, FLAVOR_SOUR) < 0)
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, FLAVOR_SOUR) < 0)
BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
else
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2785,85 +2746,85 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
break;
// copy/paste again, smh
case HOLD_EFFECT_ATTACK_UP:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_ATK] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC)
{
- PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_ATK);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE);
- gEffectBank = bank;
- SET_STATCHANGER(STAT_STAGE_ATK, 1, FALSE);
- gBattleScripting.animArg1 = 0xE + STAT_STAGE_ATK;
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_ATK, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_ATK;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
break;
case HOLD_EFFECT_DEFENSE_UP:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_DEF] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC)
{
- PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_DEF);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF);
- gEffectBank = bank;
- SET_STATCHANGER(STAT_STAGE_DEF, 1, FALSE);
- gBattleScripting.animArg1 = 0xE + STAT_STAGE_DEF;
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_DEF, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_DEF;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
break;
case HOLD_EFFECT_SPEED_UP:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC)
{
- PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_SPEED);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED);
- gEffectBank = bank;
- SET_STATCHANGER(STAT_STAGE_SPEED, 1, FALSE);
- gBattleScripting.animArg1 = 0xE + STAT_STAGE_SPEED;
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_SPEED, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_SPEED;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
break;
case HOLD_EFFECT_SP_ATTACK_UP:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPATK] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC)
{
- PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_SPATK);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
- gEffectBank = bank;
- SET_STATCHANGER(STAT_STAGE_SPATK, 1, FALSE);
- gBattleScripting.animArg1 = 0xE + STAT_STAGE_SPATK;
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_SPATK, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_SPATK;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
break;
case HOLD_EFFECT_SP_DEFENSE_UP:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPDEF] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC)
{
- PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_STAGE_SPDEF);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF);
- gEffectBank = bank;
- SET_STATCHANGER(STAT_STAGE_SPDEF, 1, FALSE);
- gBattleScripting.animArg1 = 0xE + STAT_STAGE_SPDEF;
+ gEffectBattler = battlerId;
+ SET_STATCHANGER(STAT_SPDEF, 1, FALSE);
+ gBattleScripting.animArg1 = 0xE + STAT_SPDEF;
gBattleScripting.animArg2 = 0;
BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
effect = ITEM_STATS_CHANGE;
}
break;
case HOLD_EFFECT_CRITICAL_UP:
- if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && !(gBattleMons[bank].status2 & STATUS2_FOCUS_ENERGY))
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
{
- gBattleMons[bank].status2 |= STATUS2_FOCUS_ENERGY;
+ gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
effect = ITEM_EFFECT_OTHER;
}
break;
case HOLD_EFFECT_RANDOM_STAT_UP:
- if (!moveTurn && gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality)
+ if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality)
{
for (i = 0; i < 5; i++)
{
- if (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] < 0xC)
+ if (gBattleMons[battlerId].statStages[STAT_ATK + i] < 0xC)
break;
}
if (i != 5)
@@ -2871,7 +2832,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
do
{
i = Random() % 5;
- } while (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] == 0xC);
+ } while (gBattleMons[battlerId].statStages[STAT_ATK + i] == 0xC);
PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1);
@@ -2884,7 +2845,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleTextBuff2[6] = STRINGID_STATROSE >> 8;
gBattleTextBuff2[7] = EOS;
- gEffectBank = bank;
+ gEffectBattler = battlerId;
SET_STATCHANGER(i + 1, 2, FALSE);
gBattleScripting.animArg1 = 0x21 + i + 6;
gBattleScripting.animArg2 = 0;
@@ -2894,85 +2855,85 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_PAR:
- if (gBattleMons[bank].status1 & STATUS1_PARALYSIS)
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
{
- gBattleMons[bank].status1 &= ~(STATUS1_PARALYSIS);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PARALYSIS);
BattleScriptExecute(BattleScript_BerryCurePrlzEnd2);
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_PSN:
- if (gBattleMons[bank].status1 & STATUS1_PSN_ANY)
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
{
- gBattleMons[bank].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
BattleScriptExecute(BattleScript_BerryCurePsnEnd2);
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_BRN:
- if (gBattleMons[bank].status1 & STATUS1_BURN)
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
{
- gBattleMons[bank].status1 &= ~(STATUS1_BURN);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_BURN);
BattleScriptExecute(BattleScript_BerryCureBrnEnd2);
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_FRZ:
- if (gBattleMons[bank].status1 & STATUS1_FREEZE)
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
{
- gBattleMons[bank].status1 &= ~(STATUS1_FREEZE);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE);
BattleScriptExecute(BattleScript_BerryCureFrzEnd2);
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_SLP:
- if (gBattleMons[bank].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
{
- gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
- gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
BattleScriptExecute(BattleScript_BerryCureSlpEnd2);
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_CONFUSION:
- if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
{
- gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
BattleScriptExecute(BattleScript_BerryCureConfusionEnd2);
effect = ITEM_EFFECT_OTHER;
}
break;
case HOLD_EFFECT_CURE_STATUS:
- if (gBattleMons[bank].status1 & STATUS1_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
{
i = 0;
- if (gBattleMons[bank].status1 & STATUS1_PSN_ANY)
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
i++;
}
- if (gBattleMons[bank].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
{
- gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
i++;
}
- if (gBattleMons[bank].status1 & STATUS1_PARALYSIS)
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
i++;
}
- if (gBattleMons[bank].status1 & STATUS1_BURN)
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
i++;
}
- if (gBattleMons[bank].status1 & STATUS1_FREEZE)
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
i++;
}
- if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
i++;
@@ -2981,16 +2942,16 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
- gBattleMons[bank].status1 = 0;
- gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ gBattleMons[battlerId].status1 = 0;
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2);
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_ATTRACT:
- if (gBattleMons[bank].status2 & STATUS2_INFATUATION)
+ if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
{
- gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_INFATUATION);
StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2);
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -3000,18 +2961,18 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- gBattleScripting.battler = bank;
- gStringBattler = bank;
- gActiveBattler = gBattlerAttacker = bank;
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = gBattlerAttacker = battlerId;
switch (effect)
{
case ITEM_STATUS_CHANGE:
- BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1);
+ BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1);
MarkBattlerForControllerExec(gActiveBattler);
break;
case ITEM_PP_CHANGE:
- if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[bank].unk18_b & gBitTable[i]))
- gBattleMons[bank].pp[i] = changedPP;
+ if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[battlerId].unk18_b & gBitTable[i]))
+ gBattleMons[battlerId].pp[i] = changedPP;
break;
}
}
@@ -3020,13 +2981,13 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case 2:
break;
case 3:
- for (bank = 0; bank < gBattlersCount; bank++)
+ for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
{
- gLastUsedItem = gBattleMons[bank].item;
- if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY)
+ gLastUsedItem = gBattleMons[battlerId].item;
+ if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
{
- bankHoldEffect = gEnigmaBerries[bank].holdEffect;
- bankQuality = gEnigmaBerries[bank].holdEffectParam;
+ bankHoldEffect = gEnigmaBerries[battlerId].holdEffect;
+ bankQuality = gEnigmaBerries[battlerId].holdEffectParam;
}
else
{
@@ -3036,64 +2997,64 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
switch (bankHoldEffect)
{
case HOLD_EFFECT_CURE_PAR:
- if (gBattleMons[bank].status1 & STATUS1_PARALYSIS)
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
{
- gBattleMons[bank].status1 &= ~(STATUS1_PARALYSIS);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PARALYSIS);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_BerryCureParRet;
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_PSN:
- if (gBattleMons[bank].status1 & STATUS1_PSN_ANY)
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
{
- gBattleMons[bank].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_BerryCurePsnRet;
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_BRN:
- if (gBattleMons[bank].status1 & STATUS1_BURN)
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
{
- gBattleMons[bank].status1 &= ~(STATUS1_BURN);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_BURN);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet;
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_FRZ:
- if (gBattleMons[bank].status1 & STATUS1_FREEZE)
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
{
- gBattleMons[bank].status1 &= ~(STATUS1_FREEZE);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet;
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_SLP:
- if (gBattleMons[bank].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
{
- gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
- gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet;
effect = ITEM_STATUS_CHANGE;
}
break;
case HOLD_EFFECT_CURE_CONFUSION:
- if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
{
- gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet;
effect = ITEM_EFFECT_OTHER;
}
break;
case HOLD_EFFECT_CURE_ATTRACT:
- if (gBattleMons[bank].status2 & STATUS2_INFATUATION)
+ if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
{
- gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_INFATUATION);
StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
BattleScriptPushCursor();
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -3102,35 +3063,35 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_STATUS:
- if (gBattleMons[bank].status1 & STATUS1_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
{
- if (gBattleMons[bank].status1 & STATUS1_PSN_ANY)
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
}
- if (gBattleMons[bank].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
{
- gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
}
- if (gBattleMons[bank].status1 & STATUS1_PARALYSIS)
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
}
- if (gBattleMons[bank].status1 & STATUS1_BURN)
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
}
- if (gBattleMons[bank].status1 & STATUS1_FREEZE)
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
}
- if (gBattleMons[bank].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
{
StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
}
- gBattleMons[bank].status1 = 0;
- gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION);
+ gBattleMons[battlerId].status1 = 0;
+ gBattleMons[battlerId].status2 &= ~(STATUS2_CONFUSION);
BattleScriptPushCursor();
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet;
@@ -3140,16 +3101,16 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
case HOLD_EFFECT_RESTORE_STATS:
for (i = 0; i < BATTLE_STATS_NO; i++)
{
- if (gBattleMons[bank].statStages[i] < 6)
+ if (gBattleMons[battlerId].statStages[i] < 6)
{
- gBattleMons[bank].statStages[i] = 6;
+ gBattleMons[battlerId].statStages[i] = 6;
effect = ITEM_STATS_CHANGE;
}
}
if (effect)
{
- gBattleScripting.battler = bank;
- gStringBattler = bank;
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_WhiteHerbRet;
return effect; // unnecessary return
@@ -3158,9 +3119,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
}
if (effect)
{
- gBattleScripting.battler = bank;
- gStringBattler = bank;
- gActiveBattler = bank;
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = battlerId;
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
MarkBattlerForControllerExec(gActiveBattler);
break;
@@ -3174,7 +3135,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
{
case HOLD_EFFECT_FLINCH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && (gSpecialStatuses[gBattlerTarget].moveturnLostHP_physical || gSpecialStatuses[gBattlerTarget].moveturnLostHP_special)
+ && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
&& (Random() % 100) < atkQuality
&& gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED
&& gBattleMons[gBattlerTarget].hp)
@@ -3187,19 +3148,19 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
break;
case HOLD_EFFECT_SHELL_BELL:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gSpecialStatuses[gBattlerTarget].moveturnLostHP != 0
- && gSpecialStatuses[gBattlerTarget].moveturnLostHP != 0xFFFF
+ && gSpecialStatuses[gBattlerTarget].dmg != 0
+ && gSpecialStatuses[gBattlerTarget].dmg != 0xFFFF
&& gBattlerAttacker != gBattlerTarget
&& gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP
&& gBattleMons[gBattlerAttacker].hp != 0)
{
gLastUsedItem = atkItem;
- gStringBattler = gBattlerAttacker;
+ gPotentialItemEffectBattler = gBattlerAttacker;
gBattleScripting.battler = gBattlerAttacker;
- gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].moveturnLostHP / atkQuality) * -1;
+ gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkQuality) * -1;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = -1;
- gSpecialStatuses[gBattlerTarget].moveturnLostHP = 0;
+ gSpecialStatuses[gBattlerTarget].dmg = 0;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret;
effect++;
@@ -3213,11 +3174,11 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn)
return effect;
}
-void ClearFuryCutterDestinyBondGrudge(u8 bank)
+void ClearFuryCutterDestinyBondGrudge(u8 battlerId)
{
- gDisableStructs[bank].furyCutterCounter = 0;
- gBattleMons[bank].status2 &= ~(STATUS2_DESTINY_BOND);
- gStatuses3[bank] &= ~(STATUS3_GRUDGE);
+ gDisableStructs[battlerId].furyCutterCounter = 0;
+ gBattleMons[battlerId].status2 &= ~(STATUS2_DESTINY_BOND);
+ gStatuses3[battlerId] &= ~(STATUS3_GRUDGE);
}
void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands
@@ -3305,14 +3266,14 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
return targetBank;
}
-static bool32 HasObedientBitSet(u8 bank)
+static bool32 HasObedientBitSet(u8 battlerId)
{
- if (GetBattlerSide(bank) == B_SIDE_OPPONENT)
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
return TRUE;
- if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS
- && GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES, NULL) != SPECIES_MEW)
+ if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS
+ && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW)
return TRUE;
- return GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_OBEDIENCE, NULL);
+ return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_OBEDIENCE, NULL);
}
u8 IsMonDisobedient(void)
@@ -3380,7 +3341,7 @@ u8 IsMonDisobedient(void)
{
do
{
- gCurrMovePos = gUnknown_020241E9 = Random() & 3;
+ gCurrMovePos = gChosenMovePos = Random() & 3;
} while (gBitTable[gCurrMovePos] & calc);
gRandomMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
diff --git a/src/battle_util2.c b/src/battle_util2.c
index ba42d4ea9..c1bbabc85 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -8,12 +8,7 @@
#include "random.h"
#include "battle_scripts.h"
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
extern u8 gUnknown_0203CF00[];
-extern const u8 *gBattlescriptCurrInstr;
-extern u8 gBattleCommunication[];
-extern u8 gActiveBattler;
extern void sub_81D55D0(void);
extern void sub_81D5694(void);
@@ -79,7 +74,7 @@ void FreeBattleResources(void)
}
}
-void AdjustFriendshipOnBattleFaint(u8 bank)
+void AdjustFriendshipOnBattleFaint(u8 battlerId)
{
u8 opposingBank;
@@ -98,22 +93,22 @@ void AdjustFriendshipOnBattleFaint(u8 bank)
opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
}
- if (gBattleMons[opposingBank].level > gBattleMons[bank].level)
+ if (gBattleMons[opposingBank].level > gBattleMons[battlerId].level)
{
- if (gBattleMons[opposingBank].level - gBattleMons[bank].level > 29)
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 8);
+ if (gBattleMons[opposingBank].level - gBattleMons[battlerId].level > 29)
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 8);
else
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 6);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
}
else
{
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 6);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
}
}
-void sub_80571DC(u8 bank, u8 arg1)
+void sub_80571DC(u8 battlerId, u8 arg1)
{
- if (GetBattlerSide(bank) != B_SIDE_OPPONENT)
+ if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT)
{
s32 i;
@@ -122,14 +117,14 @@ void sub_80571DC(u8 bank, u8 arg1)
for (i = 0; i < 3; i++)
gUnknown_0203CF00[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60));
- sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[bank]), pokemon_order_func(arg1));
+ sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[battlerId]), pokemon_order_func(arg1));
for (i = 0; i < 3; i++)
*(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
}
}
-u32 sub_805725C(u8 bank)
+u32 sub_805725C(u8 battlerId)
{
u32 effect = 0;
@@ -138,12 +133,12 @@ u32 sub_805725C(u8 bank)
switch (gBattleCommunication[MULTIUSE_STATE])
{
case 0:
- if (gBattleMons[bank].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
{
- if (UproarWakeUpCheck(bank))
+ if (UproarWakeUpCheck(battlerId))
{
- gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
- gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
BattleScriptPushCursor();
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
@@ -153,24 +148,24 @@ u32 sub_805725C(u8 bank)
{
u32 toSub;
- if (gBattleMons[bank].ability == ABILITY_EARLY_BIRD)
+ if (gBattleMons[battlerId].ability == ABILITY_EARLY_BIRD)
toSub = 2;
else
toSub = 1;
- if ((gBattleMons[bank].status1 & STATUS1_SLEEP) < toSub)
- gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
+ if ((gBattleMons[battlerId].status1 & STATUS1_SLEEP) < toSub)
+ gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
else
- gBattleMons[bank].status1 -= toSub;
+ gBattleMons[battlerId].status1 -= toSub;
- if (gBattleMons[bank].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
{
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
effect = 2;
}
else
{
- gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
+ gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
BattleScriptPushCursor();
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
@@ -181,7 +176,7 @@ u32 sub_805725C(u8 bank)
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 1:
- if (gBattleMons[bank].status1 & STATUS1_FREEZE)
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
{
if (Random() % 5 != 0)
{
@@ -189,7 +184,7 @@ u32 sub_805725C(u8 bank)
}
else
{
- gBattleMons[bank].status1 &= ~(STATUS1_FREEZE);
+ gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -206,7 +201,7 @@ u32 sub_805725C(u8 bank)
if (effect == 2)
{
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
MarkBattlerForControllerExec(gActiveBattler);
}
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 45e3acd24..23594ba46 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -160,7 +160,7 @@ 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 sub_8009F8C(void);
+extern void ClearLinkCallback(void);
extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
extern void sub_8153430(void);
extern bool8 sub_8153474(void);
@@ -952,10 +952,10 @@ static void sub_807FAC8(void)
sBerryBlenderData->syncArrowSpriteIds[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[i]], i + 8);
}
- if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
{
sub_800E0E8();
- sub_800DFB4(0, 0);
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
SetVBlankCallback(VBlankCB0_BerryBlender);
sBerryBlenderData->mainState++;
@@ -1158,10 +1158,10 @@ static void sub_8080018(void)
sBerryBlenderData->syncArrowSprite2Ids[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSprite2Ids[i]], i + 8);
}
- if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
{
sub_800E0E8();
- sub_800DFB4(0, 0);
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
sBerryBlenderData->mainState++;
break;
@@ -1874,7 +1874,7 @@ static void sub_8081370(u16 a0)
static bool32 sub_80814B0(u16 arg0, u16 arg1, u16 arg2)
{
- if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
{
if ((arg0 & 0xFF00) == arg2)
return TRUE;
@@ -2316,7 +2316,7 @@ static void sub_8081E20(void)
static void sub_8081F94(u16 *a0)
{
- if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
*a0 = 0x2F00;
else
*a0 = 0x2FFF;
@@ -2345,7 +2345,7 @@ static void CB2_HandleBlenderEndGame(void)
sBerryBlenderData->field_4C -= 32;
if (sBerryBlenderData->field_4C <= 0)
{
- sub_8009F8C();
+ ClearLinkCallback();
sBerryBlenderData->field_4C = 0;
if (gReceivedRemoteLinkPlayers != 0)
@@ -2365,7 +2365,7 @@ static void CB2_HandleBlenderEndGame(void)
}
else if (sub_800A520())
{
- if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
{
sBerryBlenderData->gameBlock.timeRPM.time = sBerryBlenderData->gameFrameTime;
sBerryBlenderData->gameBlock.timeRPM.max_RPM = sBerryBlenderData->max_RPM;
@@ -2394,7 +2394,7 @@ static void CB2_HandleBlenderEndGame(void)
ResetBlockReceivedFlags();
sBerryBlenderData->gameEndState++;
- if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
{
struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock*)(&gBlockRecvBuffer);
@@ -2871,7 +2871,7 @@ static void sub_8082D28(void)
if (gReceivedRemoteLinkPlayers != 0)
playerId = GetMultiplayerId();
- if (gLinkVSyncDisabled && gReceivedRemoteLinkPlayers != 0)
+ if (gWirelessCommType && gReceivedRemoteLinkPlayers != 0)
{
if (playerId == 0)
{
diff --git a/src/bg.c b/src/bg.c
index b699a0b1f..22861b64d 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -463,7 +463,7 @@ bool8 IsDma3ManagerBusyWithBgCopy(void)
return FALSE;
}
#else
-__attribute__((naked))
+ASM_DIRECT
bool8 IsDma3ManagerBusyWithBgCopy(void)
{
asm("push {r4-r7,lr}\n\
@@ -1048,7 +1048,7 @@ void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8
}
}
}*/
-__attribute__((naked))
+ASM_DIRECT
void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
{
asm("push {r4-r7,lr}\n\
@@ -1495,7 +1495,7 @@ void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 pal
*dest = test;
}
#else
-__attribute__((naked))
+ASM_DIRECT
void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2)
{
asm("push {r4-r6,lr}\n\
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index d6924de9f..55e75bfbf 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -421,7 +421,7 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
return FALSE;
}
#else
-__attribute__((naked))
+ASM_DIRECT
bool8 ShouldDoBrailleRegicePuzzle(void)
{
asm(".syntax unified\n\
diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c
deleted file mode 100644
index b6b83086b..000000000
--- a/src/calculate_base_damage.c
+++ /dev/null
@@ -1,283 +0,0 @@
-#include "global.h"
-#include "constants/abilities.h"
-#include "battle.h"
-#include "constants/hold_effects.h"
-#include "event_data.h"
-#include "item.h"
-#include "constants/items.h"
-#include "pokemon.h"
-#include "constants/species.h"
-#include "constants/moves.h"
-#include "constants/battle_move_effects.h"
-
-extern u32 gBattleTypeFlags;
-extern struct BattlePokemon gBattleMons[4];
-extern u16 gCurrentMove;
-extern u8 gCritMultiplier;
-extern u16 gBattleWeather;
-extern struct BattleEnigmaBerry gEnigmaBerries[];
-extern u16 gBattleMovePower;
-extern u16 gTrainerBattleOpponent_A;
-
-bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 bank);
-
-extern const struct BattleMove gBattleMoves[];
-extern const u8 gHoldEffectToType[][2];
-extern const u8 gStatStageRatios[][2];
-
-#define APPLY_STAT_MOD(var, mon, stat, statIndex) \
-{ \
- (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)]][0]; \
- (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)
-{
- u32 i;
- s32 damage = 0;
- s32 damageHelper;
- u8 type;
- u16 attack, defense;
- u16 spAttack, spDefense;
- u8 defenderHoldEffect;
- u8 defenderHoldEffectParam;
- u8 attackerHoldEffect;
- u8 attackerHoldEffectParam;
-
- if (!powerOverride)
- gBattleMovePower = gBattleMoves[move].power;
- else
- gBattleMovePower = powerOverride;
-
- if (!typeOverride)
- type = gBattleMoves[move].type;
- else
- type = typeOverride & 0x3F;
-
- attack = attacker->attack;
- defense = defender->defense;
- spAttack = attacker->spAttack;
- spDefense = defender->spDefense;
-
- if (attacker->item == ITEM_ENIGMA_BERRY)
- {
- attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect;
- attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam;
- }
- else
- {
- attackerHoldEffect = ItemId_GetHoldEffect(attacker->item);
- attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item);
- }
-
- if (defender->item == ITEM_ENIGMA_BERRY)
- {
- defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect;
- defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam;
- }
- else
- {
- defenderHoldEffect = ItemId_GetHoldEffect(defender->item);
- defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item);
- }
-
- if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER)
- attack *= 2;
-
- if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, bankAtk))
- attack = (110 * attack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, bankDef))
- defense = (110 * defense) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankAtk))
- spAttack = (110 * spAttack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankDef))
- spDefense = (110 * spDefense) / 100;
-
- for (i = 0; i < 17; i++)
- {
- if (attackerHoldEffect == gHoldEffectToType[i][0]
- && type == gHoldEffectToType[i][1])
- {
- if (type <= 8)
- attack = (attack * (attackerHoldEffectParam + 100)) / 100;
- else
- spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100;
- break;
- }
- }
-
- if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND)
- attack = (150 * attack) / 100;
- if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS))
- spAttack = (150 * spAttack) / 100;
- if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS))
- spDefense = (150 * spDefense) / 100;
- if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL)
- spAttack *= 2;
- if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL)
- spDefense *= 2;
- if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU)
- spAttack *= 2;
- if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO)
- defense *= 2;
- if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK))
- attack *= 2;
- if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE))
- spAttack /= 2;
- if (attacker->ability == ABILITY_HUSTLE)
- attack = (150 * attack) / 100;
- if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MINUS, 0, 0))
- spAttack = (150 * spAttack) / 100;
- if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_PLUS, 0, 0))
- spAttack = (150 * spAttack) / 100;
- if (attacker->ability == ABILITY_GUTS && attacker->status1)
- attack = (150 * attack) / 100;
- if (defender->ability == ABILITY_MARVEL_SCALE && defender->status1)
- defense = (150 * defense) / 100;
- if (type == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFD, 0))
- gBattleMovePower /= 2;
- if (type == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFE, 0))
- gBattleMovePower /= 2;
- if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
- if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
- if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
- if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
- if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
- defense /= 2;
-
- if (type < TYPE_MYSTERY) // is physical
- {
- if (gCritMultiplier == 2)
- {
- if (attacker->statStages[STAT_STAGE_ATK] > 6)
- APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
- else
- damage = attack;
- }
- else
- APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
-
- damage = damage * gBattleMovePower;
- damage *= (2 * attacker->level / 5 + 2);
-
- if (gCritMultiplier == 2)
- {
- if (defender->statStages[STAT_STAGE_DEF] < 6)
- APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
- else
- damageHelper = defense;
- }
- else
- APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
-
- damage = damage / damageHelper;
- damage /= 50;
-
- if ((attacker->status1 & STATUS1_BURN) && attacker->ability != ABILITY_GUTS)
- damage /= 2;
-
- if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1)
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
- damage = 2 * (damage / 3);
- else
- damage /= 2;
- }
-
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
- damage /= 2;
-
- // moves always do at least 1 damage.
- if (damage == 0)
- damage = 1;
- }
-
- if (type == TYPE_MYSTERY)
- damage = 0; // is ??? type. does 0 damage.
-
- if (type > TYPE_MYSTERY) // is special?
- {
- if (gCritMultiplier == 2)
- {
- if (attacker->statStages[STAT_STAGE_SPATK] > 6)
- APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
- else
- damage = spAttack;
- }
- else
- APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
-
- damage = damage * gBattleMovePower;
- damage *= (2 * attacker->level / 5 + 2);
-
- if (gCritMultiplier == 2)
- {
- if (defender->statStages[STAT_STAGE_SPDEF] < 6)
- APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
- else
- damageHelper = spDefense;
- }
- else
- APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
-
- damage = (damage / damageHelper);
- damage /= 50;
-
- if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1)
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
- damage = 2 * (damage / 3);
- else
- damage /= 2;
- }
-
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
- damage /= 2;
-
- // are effects of weather negated with cloud nine or air lock
- if (!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0)
- && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0))
- {
- if (gBattleWeather & WEATHER_RAIN_TEMPORARY)
- {
- switch (type)
- {
- case TYPE_FIRE:
- damage /= 2;
- break;
- case TYPE_WATER:
- damage = (15 * damage) / 10;
- break;
- }
- }
-
- // any weather except sun weakens solar beam
- if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL)) && gCurrentMove == MOVE_SOLAR_BEAM)
- damage /= 2;
-
- // sunny
- if (gBattleWeather & WEATHER_SUN_ANY)
- {
- switch (type)
- {
- case TYPE_FIRE:
- damage = (15 * damage) / 10;
- break;
- case TYPE_WATER:
- damage /= 2;
- break;
- }
- }
- }
-
- // flash fire triggered
- if ((gBattleResources->flags->flags[bankAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
- damage = (15 * damage) / 10;
- }
-
- return damage + 2;
-}
diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c
index 6d6a1545b..ca2037d2f 100644
--- a/src/clear_save_data_screen.c
+++ b/src/clear_save_data_screen.c
@@ -14,8 +14,6 @@
extern u8 gText_ClearAllSaveData[];
extern u8 gText_ClearingData[];
-extern u16 gUnknown_0860F074[];
-
static void Task_DoClearSaveDataScreenYesNo(u8);
static void Task_ClearSaveDataScreenYesNoChoice(u8);
static void Task_ClearSaveData(u8);
diff --git a/src/decompress.c b/src/decompress.c
index 8e8827194..fb288bf4a 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -117,7 +117,7 @@ void Unused_LZDecompressWramIndirect(const void **src, void *dest)
}
// This one (unused) function is really challenging, won't even try to decompile it.
-__attribute__((naked))
+ASM_DIRECT
void sub_803471C()
{
asm(".syntax unified\n\
diff --git a/src/decoration.c b/src/decoration.c
index db19ff4c6..8eb875560 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -2542,7 +2542,7 @@ void sub_812A0E8(u8 taskId)
}
}
#else
-__attribute__((naked)) void sub_812A0E8(u8 taskId)
+ASM_DIRECT void sub_812A0E8(u8 taskId)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tlsls r0, 24\n"
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 5a2fe5ca2..b78b9433e 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -44,7 +44,6 @@ struct EggHatchData
u8 textColor[3];
};
-extern struct SpriteTemplate gUnknown_0202499C;
extern void (*gFieldCallback)(void);
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
@@ -58,20 +57,14 @@ extern const u8 gText_HatchedFromEgg[];
extern const u8 gText_NickHatchPrompt[];
extern u8 sav1_map_get_name(void);
-extern s8 ProcessMenuInputNoWrap_(void);
extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8);
extern void sub_806A068(u16, u8);
extern void FadeScreen(u8, u8);
extern void overworld_free_bg_tilemaps(void);
extern void sub_80AF168(void);
-extern void AllocateMonSpritesGfx(void);
-extern void FreeMonSpritesGfx(void);
extern void ScanlineEffect_Stop(void);
-extern void reset_temp_tile_data_buffers(void);
extern void c2_exit_to_overworld_2_switch(void);
extern void play_some_sound(void);
-extern void copy_decompressed_tile_data_to_vram_autofree(u8 bg_id, const void* src, u16 size, u16 offset, u8 mode);
-extern void CreateYesNoMenu(const struct WindowTemplate*, u16, u8, u8);
extern void DoNamingScreen(u8, const u8*, u16, u8, u32, MainCallback);
extern u16 sub_80D22D0(void);
extern u8 CountPartyAliveNonEggMonsExcept(u8);
@@ -440,12 +433,12 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
gMonSpritesGfxPtr->sprites[(a0 * 2) + 1],
species, pid);
- LoadCompressedObjectPalette(sub_806E794(mon));
+ LoadCompressedObjectPalette(GetMonSpritePalStruct(mon));
*speciesLoc = species;
}
break;
case 1:
- sub_806A068(sub_806E794(mon)->tag, r5);
+ sub_806A068(GetMonSpritePalStruct(mon)->tag, r5);
spriteID = CreateSprite(&gUnknown_0202499C, 120, 75, 6);
gSprites[spriteID].invisible = 1;
gSprites[spriteID].callback = SpriteCallbackDummy;
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index ec99fb030..1b929c9bd 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -21,7 +21,7 @@
#include "constants/songs.h"
#include "overworld.h"
#include "battle_message.h"
-#include "battle_string_ids.h"
+#include "constants/battle_string_ids.h"
#include "gpu_regs.h"
#include "bg.h"
#include "link.h"
@@ -48,13 +48,10 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
-extern u8 gBattleTerrain;
-extern struct SpriteTemplate gUnknown_0202499C;
extern bool8 gAffineAnimsDisabled;
extern u16 gMoveToLearn;
extern const u8 gSpeciesNames[][11];
-extern u8 gBattleCommunication[];
#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
#define sEvoGraphicsTaskID gBattleCommunication[2]
@@ -69,9 +66,6 @@ extern const u8 gText_PkmnStoppedEvolving[];
extern const u8 gText_EllipsisQuestionMark[];
extern const u8 gText_CommunicationStandby5[];
-extern void copy_decompressed_tile_data_to_vram_autofree(u8 arg0, const void *arg1, bool32 arg2, u16 arg3, u8 arg4);
-extern u32 sub_80391E0(u8, u8);
-extern void SpriteCallbackDummy_2(struct Sprite *sprite);
extern void sub_80356D0(void);
extern void sub_807B154(void);
extern void sub_806A068(u16, u8);
@@ -473,10 +467,10 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
}
break;
case 6:
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
{
sub_800E0E8();
- sub_800DFB4(0, 0);
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
BlendPalettes(-1,0x10, 0);
gMain.state++;
@@ -1257,7 +1251,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
case 5:
if (!gPaletteFade.active)
{
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800E084();
Free(GetBgTilemapBuffer(3));
diff --git a/src/item_menu.c b/src/item_menu.c
new file mode 100755
index 000000000..ecd910b65
--- /dev/null
+++ b/src/item_menu.c
@@ -0,0 +1,2448 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_controllers.h"
+#include "battle_frontier_2.h"
+#include "berry_tag_screen.h"
+#include "bg.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "field_map_obj_helpers.h"
+#include "field_player_avatar.h"
+#include "field_specials.h"
+#include "graphics.h"
+#include "gpu_regs.h"
+#include "international_string_util.h"
+#include "item.h"
+#include "item_menu_icons.h"
+#include "item_use.h"
+#include "lilycove_lady.h"
+#include "list_menu.h"
+#include "link.h"
+#include "mail.h"
+#include "main.h"
+#include "malloc.h"
+#include "map_name_popup.h"
+#include "menu.h"
+#include "menu_indicators.h"
+#include "money.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "player_pc.h"
+#include "pokemon.h"
+#include "pokemon_summary_screen.h"
+#include "rom_818CFC8.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "shop.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string.h"
+#include "strings.h"
+#include "string_util.h"
+#include "task.h"
+#include "text_window.h"
+#include "menu_helpers.h"
+#include "window.h"
+
+void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
+void CB2_Bag(void);
+bool8 setup_bag_menu(void);
+void bag_menu_init_bgs(void);
+bool8 load_bag_menu_graphics(void);
+void setup_bag_menu_textboxes(void);
+void allocate_bag_item_list_buffers(void);
+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);
+bool8 IsWallysBag(void);
+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 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);
+bool8 itemid_is_unique(u16);
+u16 BagGetQuantityByPocketPosition(u8, u16);
+void sub_81AB89C(void);
+void task_close_bag_menu_2(u8);
+u8 AddItemMessageWindow(u8);
+void bag_menu_RemoveBagItem_message_window(u8);
+void set_callback3_to_bag(u8);
+void sub_81ABC54(u8, s16);
+u8 bag_menu_add_window(u8);
+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);
+void sub_81AC590(u8);
+void PrintTMHMMoveData(u16);
+void sub_81ACAF8(u8);
+void sub_81ACB54(u8, u8, u8);
+void Task_HandleInBattleItemMenuInput(u8);
+void Task_HandleOutOfBattleItemMenuInput(u8);
+bool8 sub_81ACDFC(s8);
+void bag_menu_remove_window(u8);
+void bag_menu_print_there_is_no_pokemon(u8);
+void Task_ChooseHowManyToToss(u8);
+void BagMenuConfirmToss(u8);
+void bag_menu_yes_no(u8, u8, const struct YesNoFuncTable*);
+void Task_ActuallyToss(u8);
+void ItemMenu_Cancel(u8);
+void sub_81AD350(u8);
+void bag_menu_print_cant_be_held_msg(u8);
+void bag_menu_AddMoney_window(void);
+void sub_81AD680(u8);
+void sub_81AD730(u8);
+void sub_81AD6E4(u8);
+void bag_menu_remove_money_window(void);
+void bag_menu_RemoveBagItem_message_window(u8);
+void sub_81AD794(u8);
+void sub_81AD8C8(u8);
+void sub_81AD9C0(u8);
+void sub_81ADB14(u8);
+void sub_81ADA7C(u8);
+void sub_81ADC0C(u8);
+void bag_menu_leave_maybe_3(void);
+void bag_menu_leave_maybe_2(void);
+void bag_menu_leave_maybe(void);
+void sub_81ABA6C(void);
+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 sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a);
+void ItemMenu_UseOutOfBattle(u8 taskId);
+void ItemMenu_Toss(u8 taskId);
+void ItemMenu_Register(u8 taskId);
+void ItemMenu_Give(u8 taskId);
+void ItemMenu_Cancel(u8 taskId);
+void ItemMenu_UseInBattle(u8 taskId);
+void ItemMenu_CheckTag(u8 taskId);
+void unknown_ItemMenu_Confirm(u8 taskId);
+void unknown_ItemMenu_Show(u8 taskId);
+void unknown_ItemMenu_Give2(u8 taskId);
+void unknown_ItemMenu_Confirm2(u8 taskId);
+void unknown_item_menu_type(u8 taskId);
+void item_menu_type_2(u8 taskId);
+void display_sell_item_ask_str(u8 taskId);
+void unknown_ItemMenu_Confirm(u8 taskId);
+void display_deposit_item_ask_str(u8 taskId);
+void item_menu_type_b(u8 taskId);
+void BagMenuActuallyToss(u8 taskId);
+void BagMenuCancelToss(u8 taskId);
+void sub_81AD84C(u8 taskId);
+void sub_81AD6FC(u8 taskId);
+
+// .rodata
+
+const struct BgTemplate gUnknown_08613F90[3] = {
+ {0, 0, 31, 0, 0, 1, 0},
+ {1, 0, 30, 0, 0, 0, 0},
+ {2, 3, 29, 0, 0, 2, 0}
+};
+
+const struct ListMenuTemplate gUnknown_08613F9C = {
+ NULL, bag_menu_change_item_callback, sub_81AB520, 0, 0, 0, 0, 8, 0, 1, 1, 0, 3, 0, 0, 0, 7, 0
+};
+
+const struct MenuAction gUnknown_08613FB4[] = {
+ {gMenuText_Use, ItemMenu_UseOutOfBattle},
+ {gMenuText_Toss, ItemMenu_Toss},
+ {gMenuText_Register, ItemMenu_Register},
+ {gMenuText_Give, ItemMenu_Give},
+ {gText_Cancel2, ItemMenu_Cancel},
+ {gMenuText_Use, ItemMenu_UseInBattle},
+ {gMenuText_Check, ItemMenu_UseOutOfBattle},
+ {gMenuText_Walk, ItemMenu_UseOutOfBattle},
+ {gMenuText_Deselect, ItemMenu_Register},
+ {gMenuText_CheckTag, ItemMenu_CheckTag},
+ {gMenuText_Confirm, unknown_ItemMenu_Confirm},
+ {gMenuText_Show, unknown_ItemMenu_Show},
+ {gMenuText_Give2, unknown_ItemMenu_Give2},
+ {gMenuText_Confirm, unknown_ItemMenu_Confirm2},
+ {gText_EmptyString2, NULL}
+};
+
+const u8 gUnknown_0861402C[] = {0, 3, 1, 4};
+const u8 gUnknown_08614030[] = {0, 2, 14, 4};
+const u8 gUnknown_08614034[] = {3, 14, 1, 4};
+const u8 gUnknown_08614038[] = {0, 3, 14, 4};
+const u8 gUnknown_0861403C[] = {9, 14, 0, 3, 1, 4};
+const u8 gUnknown_08614042[] = {5, 4};
+const u8 gUnknown_08614044[] = {3, 4};
+const u8 gUnknown_08614046 = 4;
+const u8 gUnknown_08614047[] = {10, 9, 14, 4};
+const u8 gUnknown_0861404B[] = {11, 4};
+const u8 gUnknown_0861404D[] = {12, 4};
+const u8 gUnknown_0861404F[] = {13, 4};
+
+const TaskFunc gUnknown_08614054[] = {
+ unknown_item_menu_type,
+ unknown_item_menu_type,
+ item_menu_type_2,
+ display_sell_item_ask_str,
+ unknown_ItemMenu_Confirm,
+ unknown_item_menu_type,
+ display_deposit_item_ask_str,
+ unknown_item_menu_type,
+ unknown_item_menu_type,
+ unknown_item_menu_type,
+ NULL,
+ item_menu_type_b
+};
+
+const struct YesNoFuncTable gUnknown_08614084 = {BagMenuActuallyToss, BagMenuCancelToss};
+
+const struct YesNoFuncTable gUnknown_0861408C = {sub_81AD84C, sub_81AD6FC};
+
+const struct ArrowStruct gUnknown_08614094 = {0, 0x1C, 16, 1, 100, 16, -1, -1, 0x6F, 0x6F, 0};
+
+const u8 gUnknown_086140A4[] = INCBIN_U8("graphics/interface/select_button.4bpp");
+
+const u8 gUnknown_08614164[][3] = {
+ {0, 1, 3},
+ {0, 1, 4},
+ {0, 3, 6},
+ {2, 1, 3},
+ {0, 14, 10}
+};
+
+const struct WindowTemplate gUnknown_08614174[] = {
+ {0, 14, 2, 15, 16, 1, 0x27},
+ {0, 0, 13, 14, 6, 1, 0x117},
+ {0, 4, 1, 8, 2, 1, 0x1A1},
+ {0, 1, 13, 5, 6, 12, 0x16B},
+ {0, 7, 13, 4, 6, 12, 0x189},
+ {1, 2, 15, 27, 4, 15, 0x1B1},
+ {0xFF, 0, 0, 0, 0, 0, 0}
+};
+
+const struct WindowTemplate gUnknown_086141AC[] = {
+ {1, 22, 17, 7, 2, 15, 0x21D},
+ {1, 22, 15, 7, 4, 15, 0x21D},
+ {1, 15, 15, 14, 4, 15, 0x21D},
+ {1, 15, 13, 14, 6, 15, 0x21D},
+ {1, 2, 15, 27, 4, 15, 0x1B1},
+ {1, 24, 15, 5, 4, 15, 0x21D},
+ {1, 21, 9, 5, 4, 15, 0x21D},
+ {1, 24, 17, 5, 2, 15, 0x21D},
+ {1, 18, 11, 10, 2, 15, 0x245},
+ {1, 1, 1, 10, 2, 15, 0x231}
+};
+
+// .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];
+};
+
+struct ListBuffer2 {
+ s8 name[65][24];
+};
+
+struct TempWallyStruct {
+ struct ItemSlot bagPocket_Items[30];
+ struct ItemSlot bagPocket_PokeBalls[16];
+ u16 cursorPosition[5];
+ u16 scrollPosition[5];
+ u8 filler[0x2];
+ u16 pocket;
+};
+
+EWRAM_DATA struct UnkBagStruct *gUnknown_0203CE54 = 0;
+EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0, 0, 0, {0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}};
+EWRAM_DATA struct ListBuffer1 *gUnknown_0203CE74 = 0;
+EWRAM_DATA struct ListBuffer2 *gUnknown_0203CE78 = 0;
+EWRAM_DATA u16 gSpecialVar_ItemId = 0;
+EWRAM_DATA struct TempWallyStruct *gUnknown_0203CE80 = 0;
+
+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 u8* gReturnToXStringsTable[];
+extern u32 gUnknown_0203CE5E[];
+extern u8 EventScript_2736B3[];
+extern const u16 gUnknown_0860F074[];
+extern struct BattleMove gBattleMoves[];
+
+void ResetBagScrollPositions(void)
+{
+ gUnknown_0203CE58.pocket = 0;
+ memset(gUnknown_0203CE58.cursorPosition, 0, 10);
+ memset(gUnknown_0203CE58.scrollPosition, 0, 10);
+}
+
+void CB2_BagMenuFromStartMenu(void)
+{
+ GoToBagMenu(0, 5, sub_8086194);
+}
+
+void sub_81AABB0(void)
+{
+ if (!InBattlePyramid())
+ GoToBagMenu(1, 5, SetCB2ToReshowScreenAfterMenu2);
+ else
+ sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2);
+}
+
+void CB2_ChooseBerry(void)
+{
+ GoToBagMenu(4, 3, sub_80861B0);
+}
+
+void sub_81AABF0(void(*callback)(void))
+{
+ GoToBagMenu(5, 3, callback);
+}
+
+void CB2_GoToSellMenu(void)
+{
+ GoToBagMenu(3, 5, CB2_ExitSellMenu);
+}
+
+void sub_81AAC14(void)
+{
+ GoToBagMenu(6, 5, sub_816B31C);
+}
+
+void sub_81AAC28(void)
+{
+ GoToBagMenu(9, 5, bag_menu_leave_maybe_3);
+ gSpecialVar_0x8005 = 0;
+ gSpecialVar_Result = 0;
+}
+
+void sub_81AAC50(void)
+{
+ GoToBagMenu(7, 5, bag_menu_leave_maybe_2);
+ gSpecialVar_Result = 0;
+}
+
+void sub_81AAC70(void)
+{
+ GoToBagMenu(8, 5, bag_menu_leave_maybe);
+ gSpecialVar_Result = 0;
+}
+
+void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)())
+{
+ u8 temp;
+ gUnknown_0203CE54 = AllocZeroed(sizeof(struct UnkBagStruct));
+ if (gUnknown_0203CE54 == 0)
+ {
+ SetMainCallback2(postExitMenuMainCallback2);
+ }
+ else
+ {
+ if (bagMenuType != 12)
+ gUnknown_0203CE58.location = bagMenuType;
+ if (postExitMenuMainCallback2)
+ gUnknown_0203CE58.bagCallback = postExitMenuMainCallback2;
+ if (pocketId <= 4)
+ gUnknown_0203CE58.pocket = pocketId;
+ temp = gUnknown_0203CE58.location - 4;
+ if (temp <= 1)
+ gUnknown_0203CE54->unk81B = 1;
+ gUnknown_0203CE54->unk0 = 0;
+ gUnknown_0203CE54->unk81A = 0xFF;
+ gUnknown_0203CE54->unk81E = -1;
+ gUnknown_0203CE54->unk81F = -1;
+ memset(&gUnknown_0203CE54->unk804, 0xFF, 12);
+ memset(gUnknown_0203CE54->unk810, 0xFF, 10);
+ SetMainCallback2(CB2_Bag);
+ }
+}
+
+void c2_bag_3(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ do_scheduled_bg_tilemap_copies_to_vram();
+ UpdatePaletteFade();
+}
+
+void vblank_cb_bag_menu(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_Bag(void)
+{
+ while(sub_81221EC() != TRUE && setup_bag_menu() != TRUE && sub_81221AC() != TRUE) {};
+}
+
+bool8 setup_bag_menu(void)
+{
+ u32 index;
+ u8 taskId;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankHBlankCallbacksToNull();
+ clear_scheduled_bg_copies_to_vram();
+ gMain.state++;
+ break;
+ case 1:
+ ScanlineEffect_Stop();
+ gMain.state++;
+ break;
+ case 2:
+ FreeAllSpritePalettes();
+ gMain.state++;
+ break;
+ case 3:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gMain.state++;
+ break;
+ case 4:
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 5:
+ gMain.state++;
+ break;
+ case 6:
+ if (sub_81221AC() == FALSE)
+ ResetTasks();
+ gMain.state++;
+ break;
+ case 7:
+ bag_menu_init_bgs();
+ gUnknown_0203CE54->unk834 = 0;
+ gMain.state++;
+ break;
+ case 8:
+ if (!load_bag_menu_graphics())
+ break;
+ gMain.state++;
+ break;
+ case 9:
+ setup_bag_menu_textboxes();
+ gMain.state++;
+ break;
+ case 10:
+ sub_81ABA6C();
+ sub_81ABAC4();
+ sub_81ABAE0();
+ gMain.state++;
+ break;
+ case 11:
+ allocate_bag_item_list_buffers();
+ gMain.state++;
+ break;
+ case 12:
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ gMain.state++;
+ break;
+ case 13:
+ bag_menu_print_pocket_names(gPocketNamesStringsTable[gUnknown_0203CE58.pocket], 0);
+ bag_menu_copy_pocket_name_to_window(0);
+ bag_menu_draw_pocket_indicator_square(gUnknown_0203CE58.pocket, 1);
+ gMain.state++;
+ break;
+ case 14:
+ taskId = sub_81AB1F0(gUnknown_0203CE58.location);
+ gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[8] = 0;
+ gMain.state++;
+ break;
+ case 15:
+ AddBagVisualObject(gUnknown_0203CE58.pocket);
+ gMain.state++;
+ break;
+ case 16:
+ sub_80D4FAC();
+ gMain.state++;
+ break;
+ case 17:
+ bag_menu_add_pocket_scroll_arrow_indicators_maybe();
+ bag_menu_add_list_scroll_arrow_indicators_maybe();
+ gMain.state++;
+ break;
+ case 18:
+ bag_menu_prepare_tmhm_move_window();
+ gMain.state++;
+ break;
+ case 19:
+ BlendPalettes(-1, 16, 0);
+ gMain.state++;
+ break;
+ case 20:
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gMain.state++;
+ break;
+ default:
+ SetVBlankCallback(vblank_cb_bag_menu);
+ SetMainCallback2(c2_bag_3);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void bag_menu_init_bgs(void)
+{
+ ResetVramOamAndBgCntRegs();
+ memset(gUnknown_0203CE54->unk4, 0, 0x800);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_08613F90, 3);
+ SetBgTilemapBuffer(2, gUnknown_0203CE54->unk4);
+ ResetAllBgsCoordinates();
+ schedule_bg_copy_tilemap_to_vram(2);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+}
+
+bool8 load_bag_menu_graphics(void)
+{
+ switch (gUnknown_0203CE54->unk834)
+ {
+ case 0:
+ reset_temp_tile_data_buffers();
+ decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0);
+ gUnknown_0203CE54->unk834++;
+ break;
+ case 1:
+ if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ {
+ LZDecompressWram(gUnknown_08D9A88C, gUnknown_0203CE54->unk4);
+ gUnknown_0203CE54->unk834++;
+ }
+ break;
+ case 2:
+ if (!IsWallysBag() && gSaveBlock2Ptr->playerGender != MALE)
+ LoadCompressedPalette(gBagScreenFemale_Pal, 0, 0x40);
+ else
+ LoadCompressedPalette(gBagScreenMale_Pal, 0, 0x40);
+ gUnknown_0203CE54->unk834++;
+ break;
+ case 3:
+ if (IsWallysBag() == TRUE || gSaveBlock2Ptr->playerGender == MALE)
+ LoadCompressedObjectPic(&gUnknown_0857FB34);
+ else
+ LoadCompressedObjectPic(&gUnknown_0857FB3C);
+ gUnknown_0203CE54->unk834++;
+ break;
+ case 4:
+ LoadCompressedObjectPalette(&gUnknown_0857FB44);
+ gUnknown_0203CE54->unk834++;
+ break;
+ default:
+ LoadListMenuArrowsGfx();
+ gUnknown_0203CE54->unk834 = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u8 sub_81AB1F0(u8 a)
+{
+ u8 taskId;
+ if (a == 10)
+ taskId = CreateTask(Task_WallyTutorialBagMenu, 0);
+ else
+ taskId = CreateTask(Task_BagMenu, 0);
+ return taskId;
+}
+
+void allocate_bag_item_list_buffers(void)
+{
+ gUnknown_0203CE74 = Alloc(sizeof(struct ListBuffer1));
+ gUnknown_0203CE78 = Alloc(sizeof(struct ListBuffer2));
+}
+
+void load_bag_item_list_buffers(u8 pocketId)
+{
+ u16 i;
+ struct BagPocket *pocket = &gBagPockets[pocketId];
+ struct ListMenuItem *subBuffer;
+
+ if (!gUnknown_0203CE54->unk81B_2)
+ {
+ for (i = 0; i < gUnknown_0203CE54->unk829[pocketId] - 1; i++)
+ {
+ get_name(gUnknown_0203CE78->name[i], pocket->itemSlots[i].itemId);
+ subBuffer = gUnknown_0203CE74->subBuffers;
+ subBuffer[i].name = gUnknown_0203CE78->name[i];
+ subBuffer[i].id = i;
+ }
+ StringCopy(gUnknown_0203CE78->name[i], gText_CloseBag);
+ subBuffer = gUnknown_0203CE74->subBuffers;
+ subBuffer[i].name = gUnknown_0203CE78->name[i];
+ subBuffer[i].id = -2;
+ }
+ else
+ {
+ for (i = 0; i < gUnknown_0203CE54->unk829[pocketId]; i++)
+ {
+ get_name(gUnknown_0203CE78->name[i], pocket->itemSlots[i].itemId);
+ subBuffer = gUnknown_0203CE74->subBuffers;
+ subBuffer[i].name = gUnknown_0203CE78->name[i];
+ subBuffer[i].id = i;
+ }
+ }
+ gMultiuseListMenuTemplate = gUnknown_08613F9C;
+ gMultiuseListMenuTemplate.totalItems = gUnknown_0203CE54->unk829[pocketId];
+ gMultiuseListMenuTemplate.items = gUnknown_0203CE74->subBuffers;
+ gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CE54->unk82E[pocketId];
+}
+
+void get_name(s8 *dest, u16 itemId)
+{
+ switch (gUnknown_0203CE58.pocket)
+ {
+ case 2:
+ StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]);
+ if (itemId >= ITEM_HM01)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, 2, 1);
+ StringExpandPlaceholders(dest, gText_ClearTo11Var1Clear5Var2);
+ }
+ else
+ {
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, 2, 2);
+ StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2);
+ }
+ break;
+ case 3:
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_CHERI_BERRY + 1, 2, 2);
+ CopyItemName(itemId, gStringVar2);
+ StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2);
+ break;
+ default:
+ CopyItemName(itemId, dest);
+ break;
+ }
+}
+
+void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu *unused)
+{
+ if (b != 1)
+ {
+ PlaySE(SE_SELECT);
+ ShakeBagVisual();
+ }
+ if (gUnknown_0203CE54->unk81A == 0xFF)
+ {
+ RemoveBagItemIconObject(1 ^ gUnknown_0203CE54->unk81B_1);
+ if (a != -2)
+ AddBagItemIconObject(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1);
+ else
+ AddBagItemIconObject(-1, gUnknown_0203CE54->unk81B_1);
+ gUnknown_0203CE54->unk81B_1 ^= 1;
+ if (!gUnknown_0203CE54->unk81B_3)
+ bag_menu_print_description_box_text(a);
+ }
+}
+
+void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a)
+{
+ u16 itemId;
+ u16 itemQuantity;
+ bool8 unique;
+ int offset;
+ if (item_index_in_pocket != -2)
+ {
+ if (gUnknown_0203CE54->unk81A != 0xFF)
+ {
+ if (gUnknown_0203CE54->unk81A == (u8)item_index_in_pocket)
+ bag_menu_print_cursor(a, 2);
+ else
+ bag_menu_print_cursor(a, -1);
+ }
+ itemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, item_index_in_pocket);
+ itemQuantity = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, item_index_in_pocket);
+ if ((u16)(itemId - ITEM_HM01) <= 7)
+ BlitBitmapToWindow(rboxId, gBagMenuHMIcon_Gfx, 8, a - 1, 16, 16);
+ if (gUnknown_0203CE58.pocket == 3)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 3);
+ StringExpandPlaceholders(gStringVar4, gText_xVar1);
+ offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
+ bag_menu_print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0);
+ }
+ else if (gUnknown_0203CE58.pocket != 4 && (unique = itemid_is_unique(itemId)) == FALSE)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 2);
+ StringExpandPlaceholders(gStringVar4, gText_xVar1);
+ offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
+ bag_menu_print(rboxId, 7, gStringVar4, offset, a, unique, unique, -1, unique);
+ }
+ else
+ {
+ if (gSaveBlock1Ptr->registeredItem && gSaveBlock1Ptr->registeredItem == itemId)
+ BlitBitmapToWindow(rboxId, gUnknown_086140A4, 0x60, a - 1, 0x18, 16);
+ }
+ }
+}
+
+void bag_menu_print_description_box_text(int a)
+{
+ u8* str;
+ if (a != -2)
+ {
+ str = (u8*)ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a));
+ }
+ else
+ {
+ StringCopy(gStringVar1, gReturnToXStringsTable[gUnknown_0203CE58.location]);
+ StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1);
+ str = gStringVar4;
+ }
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, str, 3, 1, 0, 0, 0, 0);
+}
+
+void bag_menu_print_cursor_(u8 a, u8 b)
+{
+ bag_menu_print_cursor(ListMenuGetYCoordForPrintingArrowCursor(a), b);
+}
+
+void bag_menu_print_cursor(u8 a, u8 b)
+{
+ if (b == 0xFF)
+ FillWindowPixelRect(0, 0, 0, a, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
+ else
+ bag_menu_print(0, 1, gText_SelectorArrow2, 0, a, 0, 0, 0, b);
+
+}
+
+void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void)
+{
+ if (gUnknown_0203CE54->unk81E == 0xFF)
+ gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParametrized(2, 0xAC, 12, 0x94, gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->unk82E[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]);
+}
+
+void sub_81AB824(void)
+{
+ if (gUnknown_0203CE54->unk81E != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(gUnknown_0203CE54->unk81E);
+ gUnknown_0203CE54->unk81E = 0xFF;
+ }
+ sub_81AB89C();
+}
+
+void bag_menu_add_list_scroll_arrow_indicators_maybe(void)
+{
+ if (gUnknown_0203CE54->unk81B != 1 && gUnknown_0203CE54->unk81F == 0xFF)
+ gUnknown_0203CE54->unk81F = AddScrollIndicatorArrowPair(&gUnknown_08614094, gUnknown_0203CE58.unk6);
+}
+
+void sub_81AB89C(void)
+{
+ if (gUnknown_0203CE54->unk81F != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(gUnknown_0203CE54->unk81F);
+ gUnknown_0203CE54->unk81F = 0xFF;
+ }
+}
+
+void free_bag_item_list_buffers(void)
+{
+ Free(gUnknown_0203CE78);
+ Free(gUnknown_0203CE74);
+ FreeAllWindowBuffers();
+ Free(gUnknown_0203CE54);
+}
+
+void unknown_ItemMenu_Confirm(u8 taskId)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gTasks[taskId].func = task_close_bag_menu_2;
+}
+
+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]);
+ if (gUnknown_0203CE54->unk0 != 0)
+ SetMainCallback2(gUnknown_0203CE54->unk0);
+ else
+ SetMainCallback2(gUnknown_0203CE58.bagCallback);
+ sub_81AB824();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ free_bag_item_list_buffers();
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81AB9A8(u8 pocketId)
+{
+ u16 i;
+ struct BagPocket *pocket = &gBagPockets[pocketId];
+ switch (pocketId)
+ {
+ case 2:
+ case 3:
+ sub_80D6FB4(pocket);
+ break;
+ default:
+ sub_80D6F64(pocket);
+ break;
+ }
+ gUnknown_0203CE54->unk829[pocketId] = 0;
+ for (i = 0; i < pocket->capacity && pocket->itemSlots[i].itemId; i++)
+ gUnknown_0203CE54->unk829[pocketId]++;
+ if (!gUnknown_0203CE54->unk81B_2)
+ gUnknown_0203CE54->unk829[pocketId]++;
+ if (gUnknown_0203CE54->unk829[pocketId] > 8)
+ gUnknown_0203CE54->unk82E[pocketId] = 8;
+ else
+ gUnknown_0203CE54->unk82E[pocketId] = gUnknown_0203CE54->unk829[pocketId];
+}
+
+void sub_81ABA6C(void)
+{
+ u8 i;
+ for (i = 0; i < 5; i++)
+ sub_81AB9A8(i);
+}
+
+void sub_81ABA88(u8 a)
+{
+ sub_812225C(&gUnknown_0203CE58.scrollPosition[a], &gUnknown_0203CE58.cursorPosition[a], gUnknown_0203CE54->unk82E[a], gUnknown_0203CE54->unk829[a]);
+}
+
+void sub_81ABAC4(void)
+{
+ u8 i;
+ for (i = 0; i < 5; i++)
+ sub_81ABA88(i);
+}
+
+void sub_81ABAE0(void)
+{
+ u8 i;
+ for (i = 0; i < 5; i++)
+ sub_8122298(&gUnknown_0203CE58.scrollPosition[i], &gUnknown_0203CE58.cursorPosition[i], gUnknown_0203CE54->unk82E[i], gUnknown_0203CE54->unk829[i], 8);
+}
+
+u8 sub_81ABB2C(u8 a)
+{
+ return gUnknown_0203CE58.scrollPosition[a] + gUnknown_0203CE58.cursorPosition[a];
+}
+
+void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u8 taskId))
+{
+ s16* data = gTasks[taskId].data;
+
+ data[10] = AddItemMessageWindow(4);
+ FillWindowPixelBuffer(data[10], 17);
+ DisplayMessageAndContinueTask(taskId, data[10], 10, 13, fontId, GetPlayerTextSpeed(), str, callback);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+void bag_menu_inits_lists_menu(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ 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);
+ sub_81AB9A8(gUnknown_0203CE58.pocket);
+ sub_81ABA88(gUnknown_0203CE58.pocket);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ schedule_bg_copy_tilemap_to_vram(0);
+ set_callback3_to_bag(taskId);
+}
+
+void sub_81ABC3C(u8 a)
+{
+ sub_81ABC54(bag_menu_add_window(a), 1);
+}
+
+void sub_81ABC54(u8 a, s16 b)
+{
+ u8 r3 = (gUnknown_0203CE58.pocket == 3) ? 3 : 2;
+ ConvertIntToDecimalStringN(gStringVar1, b, 2, r3);
+ StringExpandPlaceholders(gStringVar4, gText_xVar1);
+ PrintTextOnWindow(a, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0);
+}
+
+void sub_81ABCC0(int a, int b, int c)
+{
+ u8 r3 = (gUnknown_0203CE58.pocket == 3) ? 3 : 2;
+ ConvertIntToDecimalStringN(gStringVar1, b, 2, r3);
+ StringExpandPlaceholders(gStringVar4, gText_xVar1);
+ PrintTextOnWindow(a, 1, gStringVar4, 0, 1, -1, 0);
+ PrintMoneyAmount(a, 0x26, 1, c, 0);
+}
+
+void Task_BagMenu(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+ u16 select;
+ if (sub_81221EC() != TRUE && !gPaletteFade.active)
+ {
+ switch (GetSwitchBagPocketDirection())
+ {
+ case 1:
+ SwitchBagPocket(taskId, -1, 0);
+ return;
+ case 2:
+ SwitchBagPocket(taskId, 1, 0);
+ return;
+ }
+ if ((select = (gMain.newKeys & SELECT_BUTTON)))
+ {
+ if (sub_81AC2C0() == 1)
+ {
+ sub_81AE860(data[0], scrollPos, cursorPos);
+ if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_swap_items(taskId);
+ }
+ }
+ return;
+ }
+ else
+ {
+ int r4 = ListMenuHandleInputGetItemId(data[0]);
+ sub_81AE860(data[0], scrollPos, cursorPos);
+ switch (r4)
+ {
+ case -1:
+ break;
+ case -2:
+ if (gUnknown_0203CE58.location == 5)
+ {
+ PlaySE(SE_HAZURE);
+ break;
+ }
+ PlaySE(SE_SELECT);
+ gSpecialVar_ItemId = select;
+ gTasks[taskId].func = unknown_ItemMenu_Confirm;
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sub_81AB824();
+ bag_menu_print_cursor_(data[0], 2);
+ data[1] = r4;
+ data[2] = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
+ gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
+ gUnknown_08614054[gUnknown_0203CE58.location](taskId);
+ break;
+ }
+ }
+ }
+}
+
+void set_callback3_to_bag(u8 taskId)
+{
+ bag_menu_add_pocket_scroll_arrow_indicators_maybe();
+ bag_menu_add_list_scroll_arrow_indicators_maybe();
+ ClearWindowTilemap(3);
+ ClearWindowTilemap(4);
+ PutWindowTilemap(1);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = Task_BagMenu;
+}
+
+u8 GetSwitchBagPocketDirection(void)
+{
+ u8 LRKeys;
+ if (gUnknown_0203CE54->unk81B != 0)
+ return 0;
+ LRKeys = GetLRKeysState();
+ if ((gMain.newKeys & DPAD_LEFT) || LRKeys == 1)
+ {
+ PlaySE(SE_SELECT);
+ return 1;
+ }
+ if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == 2)
+ {
+ PlaySE(SE_SELECT);
+ return 2;
+ }
+ return 0;
+}
+
+
+void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
+{
+ if (deltaBagPocketId == 1 && *bagPocketId == 4)
+ *bagPocketId = 0;
+ else if (deltaBagPocketId == -1 && *bagPocketId == 0)
+ *bagPocketId = 4;
+ else
+ *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;
+ if (a3 == 0)
+ {
+ ClearWindowTilemap(0);
+ ClearWindowTilemap(1);
+ sub_81AE6C8(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;
+ sub_81AB824();
+ }
+ pocketId = gUnknown_0203CE58.pocket;
+ ChangeBagPocketId(&pocketId, deltaBagPocketId);
+ if (deltaBagPocketId == 1)
+ {
+ bag_menu_print_pocket_names(gPocketNamesStringsTable[gUnknown_0203CE58.pocket], gPocketNamesStringsTable[pocketId]);
+ bag_menu_copy_pocket_name_to_window(0);
+ }
+ else
+ {
+ bag_menu_print_pocket_names(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gUnknown_0203CE58.pocket]);
+ bag_menu_copy_pocket_name_to_window(8);
+ }
+ bag_menu_draw_pocket_indicator_square(gUnknown_0203CE58.pocket, 0);
+ bag_menu_draw_pocket_indicator_square(pocketId, 1);
+ FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
+ schedule_bg_copy_tilemap_to_vram(2);
+ SetBagVisualPocketId(pocketId, 1);
+ RemoveBagObject(1);
+ AddSwitchPocketRotatingBallObject(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)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (!sub_81221AC() && !IsWallysBag())
+ {
+ switch (GetSwitchBagPocketDirection())
+ {
+ case 1:
+ ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
+ SwitchTaskToFollowupFunc(taskId);
+ SwitchBagPocket(taskId, -1, 1);
+ return;
+ case 2:
+ ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
+ SwitchTaskToFollowupFunc(taskId);
+ SwitchBagPocket(taskId, 1, 1);
+ return;
+ }
+ }
+ switch (data[13])
+ {
+ case 0:
+ sub_81AC23C(data[12]);
+ if (!(++data[12] & 1))
+ {
+ if (data[11] == 1)
+ bag_menu_copy_pocket_name_to_window((u8)(data[12] >> 1));
+ else
+ bag_menu_copy_pocket_name_to_window((u8)(8 - (data[12] >> 1)));
+ }
+ if (data[12] == 16)
+ data[13]++;
+ break;
+ case 1:
+ ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ PutWindowTilemap(1);
+ PutWindowTilemap(2);
+ schedule_bg_copy_tilemap_to_vram(0);
+ bag_menu_add_pocket_scroll_arrow_indicators_maybe();
+ bag_menu_add_list_scroll_arrow_indicators_maybe();
+ SwitchTaskToFollowupFunc(taskId);
+ }
+}
+
+void sub_81AC23C(u8 a)
+{
+ FillBgTilemapBufferRect_Palette0(2, 17, 14, a + 2, 15, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void bag_menu_draw_pocket_indicator_square(u8 x, u8 is_current_bag)
+{
+ if (is_current_bag == 0)
+ FillBgTilemapBufferRect_Palette0(2, 0x1017, x + 5, 3, 1, 1);
+ else
+ FillBgTilemapBufferRect_Palette0(2, 0x102B, x + 5, 3, 1, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+bool8 sub_81AC2C0(void)
+{
+ if (gUnknown_0203CE58.location <= 1)
+ {
+ u8 temp = gUnknown_0203CE58.pocket - 2;
+ if (temp > 1)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void bag_menu_swap_items(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ sub_81AF15C(data[0], 16, 1);
+ data[1] = gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket] + gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+ gUnknown_0203CE54->unk81A = data[1];
+ CopyItemName(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, data[1]), gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ sub_80D4FEC(data[1]);
+ sub_81AB89C();
+ bag_menu_print_cursor_(data[0], 2);
+ gTasks[taskId].func = sub_81AC3C0;
+}
+
+void sub_81AC3C0(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ int r7;
+
+ if (sub_81221EC() != TRUE)
+ {
+ if (gMain.newKeys & SELECT_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_81AE860(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]);
+ sub_80D4FC8(0);
+ sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ switch (r7)
+ {
+ case -1:
+ break;
+ case -2:
+ PlaySE(SE_SELECT);
+ if (gMain.newKeys & A_BUTTON)
+ sub_81AC498(taskId);
+ else
+ sub_81AC590(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sub_81AC498(taskId);
+ }
+ }
+ }
+}
+
+void sub_81AC498(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+ u16 realPos = (*scrollPos + *cursorPos);
+
+ if (data[1] == realPos || data[1] == (realPos - 1))
+ sub_81AC590(taskId);
+ else
+ {
+ sub_80D702C(gBagPockets[gUnknown_0203CE58.pocket].itemSlots, data[1], realPos);
+ gUnknown_0203CE54->unk81A = -1;
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ if (data[1] < realPos)
+ gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ sub_80D4FC8(1);
+ bag_menu_add_list_scroll_arrow_indicators_maybe();
+ gTasks[taskId].func = Task_BagMenu;
+ }
+}
+
+void sub_81AC590(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ gUnknown_0203CE54->unk81A = -1;
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ if (data[1] < (*scrollPos + *cursorPos))
+ gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ sub_80D4FC8(1);
+ bag_menu_add_list_scroll_arrow_indicators_maybe();
+ gTasks[taskId].func = Task_BagMenu;
+}
+
+void sub_81AC644(u8 unused)
+{
+ switch (gUnknown_0203CE58.location - 1)
+ {
+ case 0:
+ case 9:
+ if (ItemId_GetBattleUsage(gSpecialVar_ItemId))
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614042;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = &gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 4:
+ gUnknown_0203CE54->unk820 = gUnknown_08614047;
+ gUnknown_0203CE54->unk828 = 4;
+ break;
+ case 8:
+ if (!itemid_is_unique(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_0861404B;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = &gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 6:
+ if (!itemid_is_unique(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_0861404D;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = &gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 7:
+ if (!itemid_is_unique(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_0861404F;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = &gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 1:
+ case 2:
+ case 3:
+ case 5:
+ default:
+ if (sub_81221AC() == TRUE || InUnionRoom() == TRUE)
+ {
+ if (gUnknown_0203CE58.pocket == 4 || !sub_8122148(gSpecialVar_ItemId))
+ {
+ gUnknown_0203CE54->unk820 = &gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614044;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ }
+ else
+ {
+ switch (gUnknown_0203CE58.pocket)
+ {
+ case 0:
+ gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824;
+ gUnknown_0203CE54->unk828 = 4;
+ memcpy(&gUnknown_0203CE54->unk824, &gUnknown_0861402C, 4);
+ if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
+ gUnknown_0203CE54->unk824 = 6;
+ break;
+ case 4:
+ gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824;
+ gUnknown_0203CE54->unk828 = 4;
+ memcpy(&gUnknown_0203CE54->unk824, &gUnknown_08614030, 4);
+ if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
+ gUnknown_0203CE54->unk825 = 8;
+ if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE)
+ {
+ if (TestPlayerAvatarFlags(6))
+ gUnknown_0203CE54->unk824 = 7;
+ }
+ break;
+ case 1:
+ gUnknown_0203CE54->unk820 = gUnknown_08614034;
+ gUnknown_0203CE54->unk828 = 4;
+ break;
+ case 2:
+ gUnknown_0203CE54->unk820 = gUnknown_08614038;
+ gUnknown_0203CE54->unk828 = 4;
+ break;
+ case 3:
+ gUnknown_0203CE54->unk820 = gUnknown_0861403C;
+ gUnknown_0203CE54->unk828 = 6;
+ break;
+ }
+ }
+ }
+ if (gUnknown_0203CE58.pocket == 2)
+ {
+ ClearWindowTilemap(1);
+ PrintTMHMMoveData(gSpecialVar_ItemId);
+ PutWindowTilemap(3);
+ PutWindowTilemap(4);
+ schedule_bg_copy_tilemap_to_vram(0);
+ }
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ }
+ if (gUnknown_0203CE54->unk828 == 1)
+ sub_81ACAF8(bag_menu_add_window(0));
+ else if (gUnknown_0203CE54->unk828 == 2)
+ sub_81ACAF8(bag_menu_add_window(1));
+ else if (gUnknown_0203CE54->unk828 == 4)
+ sub_81ACB54(bag_menu_add_window(2), 2, 2);
+ else
+ sub_81ACB54(bag_menu_add_window(3), 2, 3);
+}
+
+void sub_81ACAF8(u8 a)
+{
+ AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gUnknown_0203CE54->unk828, gUnknown_08613FB4, gUnknown_0203CE54->unk820);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gUnknown_0203CE54->unk828, 0);
+}
+
+void sub_81ACB54(u8 a, u8 b, u8 c)
+{
+ sub_8198DBC(a, 7, 8, 1, 0x38, b, c, gUnknown_08613FB4, gUnknown_0203CE54->unk820);
+ sub_8199944(a, 0x38, b, c, 0);
+}
+
+void unknown_item_menu_type(u8 taskId)
+{
+ sub_81AC644(taskId);
+ if (gUnknown_0203CE54->unk828 <= 2)
+ gTasks[taskId].func = Task_HandleInBattleItemMenuInput;
+ else
+ gTasks[taskId].func = Task_HandleOutOfBattleItemMenuInput;
+}
+
+void Task_HandleInBattleItemMenuInput(u8 taskId)
+{
+ if (sub_81221EC() != TRUE)
+ {
+ s8 r4 = ProcessMenuInputNoWrapAround();
+ switch (r4)
+ {
+ case -2:
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[4].func.void_u8(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[gUnknown_0203CE54->unk820[r4]].func.void_u8(taskId);
+ break;
+ }
+ }
+}
+
+void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
+{
+ if (sub_81221EC() != TRUE)
+ {
+ s8 cursorPos = GetMenuCursorPos();
+ if (gMain.newKeys & DPAD_UP)
+ {
+ if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(0, -1);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (cursorPos < (gUnknown_0203CE54->unk828 - 2) && sub_81ACDFC(cursorPos + 2))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(0, 1);
+ }
+ }
+ else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysState() == 1)
+ {
+ if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(-1, 0);
+ }
+ }
+ else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysState() == 2)
+ {
+ if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(1, 0);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[gUnknown_0203CE54->unk820[cursorPos]].func.void_u8(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[4].func.void_u8(taskId);
+ }
+ }
+}
+
+bool8 sub_81ACDFC(s8 a)
+{
+ if (a < 0)
+ return FALSE;
+ if (a > gUnknown_0203CE54->unk828)
+ return FALSE;
+ if (gUnknown_0203CE54->unk820[a] == 14)
+ return FALSE;
+ return TRUE;
+}
+
+void bag_menu_remove_some_window(void)
+{
+ if (gUnknown_0203CE54->unk828 == 1)
+ bag_menu_remove_window(0);
+ else if (gUnknown_0203CE54->unk828 == 2)
+ {
+ bag_menu_remove_window(1);
+ }
+ else if (gUnknown_0203CE54->unk828 == 4)
+ {
+ bag_menu_remove_window(2);
+ }
+ else
+ bag_menu_remove_window(3);
+}
+
+void ItemMenu_UseOutOfBattle(u8 taskId)
+{
+ if (ItemId_GetFieldFunc(gSpecialVar_ItemId))
+ {
+ bag_menu_remove_some_window();
+ if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1)
+ bag_menu_print_there_is_no_pokemon(taskId);
+ else
+ {
+ FillWindowPixelBuffer(1, 0);
+ schedule_bg_copy_tilemap_to_vram(0);
+ if (gUnknown_0203CE58.pocket != 3)
+ ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
+ else
+ sub_80FDD10(taskId);
+ }
+ }
+}
+
+void ItemMenu_Toss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_remove_some_window();
+ data[8] = 1;
+ if (data[2] == 1)
+ {
+ BagMenuConfirmToss(taskId);
+ }
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ sub_81ABC3C(7);
+ gTasks[taskId].func = Task_ChooseHowManyToToss;
+ }
+}
+
+void BagMenuConfirmToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ bag_menu_yes_no(taskId, 5, &gUnknown_08614084);
+}
+
+void BagMenuCancelToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_print_description_box_text(data[1]);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+}
+
+void Task_ChooseHowManyToToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
+ {
+ sub_81ABC54(gUnknown_0203CE54->unk817, data[8]);
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(7);
+ BagMenuConfirmToss(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(7);
+ BagMenuCancelToss(taskId);
+ }
+}
+
+void BagMenuActuallyToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = Task_ActuallyToss;
+}
+
+void Task_ActuallyToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ RemoveBagItem(gSpecialVar_ItemId, data[8]);
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ sub_81AB9A8(gUnknown_0203CE58.pocket);
+ sub_81ABA88(gUnknown_0203CE58.pocket);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ schedule_bg_copy_tilemap_to_vram(0);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+void ItemMenu_Register(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
+ gSaveBlock1Ptr->registeredItem = 0;
+ else
+ gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId;
+ sub_81AE6C8(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);
+ ItemMenu_Cancel(taskId);
+}
+
+void ItemMenu_Give(u8 taskId)
+{
+ bag_menu_remove_some_window();
+ if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
+ {
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ }
+ else if (!itemid_is_unique(gSpecialVar_ItemId))
+ {
+ if (CalculatePlayerPartyCount() == 0)
+ bag_menu_print_there_is_no_pokemon(taskId);
+ else
+ {
+ gUnknown_0203CE54->unk0 = sub_81B7F60;
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ }
+ else
+ {
+ bag_menu_print_cant_be_held_msg(taskId);
+ }
+}
+
+void bag_menu_print_there_is_no_pokemon(u8 taskId)
+{
+ DisplayItemMessage(taskId, 1, gText_NoPokemon, sub_81AD350);
+}
+
+void bag_menu_print_cant_be_held_msg(u8 taskId)
+{
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350);
+}
+
+void sub_81AD350(u8 taskId)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_inits_lists_menu(taskId);
+ }
+}
+
+void ItemMenu_CheckTag(u8 taskId)
+{
+ gUnknown_0203CE54->unk0 = DoBerryTagScreen;
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void ItemMenu_Cancel(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_remove_some_window();
+ bag_menu_print_description_box_text(data[1]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ schedule_bg_copy_tilemap_to_vram(1);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+}
+
+void ItemMenu_UseInBattle(u8 taskId)
+{
+ if (ItemId_GetBattleFunc(gSpecialVar_ItemId))
+ {
+ bag_menu_remove_some_window();
+ ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId);
+ }
+}
+
+void bag_menu_mail_related(void)
+{
+ GoToBagMenu(12, 5, NULL);
+}
+
+void item_menu_type_2(u8 taskId)
+{
+ if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
+ {
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ }
+ else if (!sub_8122148(gSpecialVar_ItemId))
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeldHere);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350);
+ }
+ else if (gUnknown_0203CE58.pocket != 4 && !itemid_is_unique(gSpecialVar_ItemId))
+ {
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ else
+ {
+ bag_menu_print_cant_be_held_msg(taskId);
+ }
+}
+
+void item_menu_type_b(u8 taskId)
+{
+ if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ else if (gUnknown_0203CE58.pocket != 4 && !itemid_is_unique(gSpecialVar_ItemId))
+ gTasks[taskId].func = unknown_ItemMenu_Confirm;
+ else
+ bag_menu_print_cant_be_held_msg(taskId);
+}
+
+bool8 UseRegisteredKeyItemOnField(void)
+{
+ u8 taskId;
+
+ if (InUnionRoom() == TRUE || InBattlePyramid() || InBattlePike() || InMultiBattleRoom() == TRUE)
+ return FALSE;
+ HideMapNamePopUpWindow();
+ ChangeBgY_ScreenOff(0, 0, 0);
+ if (gSaveBlock1Ptr->registeredItem != ITEM_NONE)
+ {
+ if (CheckBagHasItem(gSaveBlock1Ptr->registeredItem, 1) == TRUE)
+ {
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ sub_808B864();
+ sub_808BCF4();
+ gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem;
+ taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8);
+ gTasks[taskId].data[3] = 1;
+ return TRUE;
+ }
+ else
+ gSaveBlock1Ptr->registeredItem = ITEM_NONE;
+ }
+ ScriptContext1_SetupScript(EventScript_2736B3);
+ return TRUE;
+}
+
+void display_sell_item_ask_str(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (itemid_get_market_price(gSpecialVar_ItemId) == 0)
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_CantBuyKeyItem);
+ DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu);
+ }
+ else
+ {
+ data[8] = 1;
+ if (data[2] == 1)
+ {
+ bag_menu_AddMoney_window();
+ sub_81AD680(taskId);
+ }
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_HowManyToSell);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD730);
+ }
+ }
+}
+
+void sub_81AD680(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ ConvertIntToDecimalStringN(gStringVar1, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8], 0, 6);
+ StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD6E4);
+}
+
+void sub_81AD6E4(u8 taskId)
+{
+ bag_menu_yes_no(taskId, 6, &gUnknown_0861408C);
+}
+
+void sub_81AD6FC(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_remove_money_window();
+ bag_menu_RemoveBagItem_message_window(4);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+}
+
+void sub_81AD730(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u8 windowId = bag_menu_add_window(8);
+
+ sub_81ABCC0(windowId, 1, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]);
+ bag_menu_AddMoney_window();
+ gTasks[taskId].func = sub_81AD794;
+}
+
+void sub_81AD794(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
+ {
+ sub_81ABCC0(gUnknown_0203CE54->unk818, data[8], (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]);
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(8);
+ sub_81AD680(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_print_cursor_(data[0], 0);
+ bag_menu_remove_money_window();
+ bag_menu_remove_window(8);
+ bag_menu_RemoveBagItem_message_window(4);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+void sub_81AD84C(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ ConvertIntToDecimalStringN(gStringVar1, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8], 0, 6);
+ StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD8C8);
+}
+
+void sub_81AD8C8(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ 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);
+ sub_81AB9A8(gUnknown_0203CE58.pocket);
+ sub_81ABA88(gUnknown_0203CE58.pocket);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ bag_menu_print_cursor_(data[0], 2);
+ PrintMoneyAmountInMoneyBox(gUnknown_0203CE54->unk819, GetMoney(&gSaveBlock1Ptr->money), 0);
+ gTasks[taskId].func = sub_81AD9C0;
+}
+
+void sub_81AD9C0(u8 taskId)
+{
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_money_window();
+ bag_menu_inits_lists_menu(taskId);
+ }
+}
+
+void display_deposit_item_ask_str(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ data[8] = 1;
+ if (data[2] == 1)
+ {
+ sub_81ADB14(taskId);
+ }
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_DepositHowManyVar1);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ sub_81ABC3C(7);
+ gTasks[taskId].func = sub_81ADA7C;
+ }
+}
+
+void sub_81ADA7C(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
+ {
+ sub_81ABC54(gUnknown_0203CE54->unk817, data[8]);
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(7);
+ sub_81ADB14(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_print_description_box_text(data[1]);
+ bag_menu_print_cursor_(data[0], 0);
+ bag_menu_remove_window(7);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+void sub_81ADB14(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ FillWindowPixelBuffer(1, 0);
+ if (itemid_is_unique(gSpecialVar_ItemId))
+ {
+ bag_menu_print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = sub_81ADC0C;
+ }
+ else if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE)
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = Task_ActuallyToss;
+ }
+ else
+ {
+ bag_menu_print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = sub_81ADC0C;
+ }
+}
+
+void sub_81ADC0C(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_print_description_box_text(data[1]);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+bool8 IsWallysBag(void)
+{
+ if (gUnknown_0203CE58.location == 10)
+ return TRUE;
+ return FALSE;
+}
+
+void PrepareBagForWallyTutorial(void)
+{
+ u32 i;
+
+ gUnknown_0203CE80 = AllocZeroed(sizeof(struct TempWallyStruct));
+ memcpy(gUnknown_0203CE80->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, sizeof(gSaveBlock1Ptr->bagPocket_Items));
+ memcpy(gUnknown_0203CE80->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, sizeof(gSaveBlock1Ptr->bagPocket_PokeBalls));
+ gUnknown_0203CE80->pocket = gUnknown_0203CE58.pocket;
+ for (i = 0; i <= 4; i++)
+ {
+ gUnknown_0203CE80->cursorPosition[i] = gUnknown_0203CE58.cursorPosition[i];
+ gUnknown_0203CE80->scrollPosition[i] = gUnknown_0203CE58.scrollPosition[i];
+ }
+ ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, 30);
+ ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, 16);
+ ResetBagScrollPositions();
+}
+
+void RestoreBagAfterWallyTutorial(void)
+{
+ u32 i;
+
+ memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_0203CE80->bagPocket_Items, sizeof(gUnknown_0203CE80->bagPocket_Items));
+ memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_0203CE80->bagPocket_PokeBalls, sizeof(gUnknown_0203CE80->bagPocket_PokeBalls));
+ gUnknown_0203CE58.pocket = gUnknown_0203CE80->pocket;
+ for (i = 0; i <= 4; i++)
+ {
+ gUnknown_0203CE58.cursorPosition[i] = gUnknown_0203CE80->cursorPosition[i];
+ gUnknown_0203CE58.scrollPosition[i] = gUnknown_0203CE80->scrollPosition[i];
+ }
+ Free(gUnknown_0203CE80);
+}
+
+void DoWallyTutorialBagMenu(void)
+{
+ PrepareBagForWallyTutorial();
+ AddBagItem(ITEM_POTION, 1);
+ AddBagItem(ITEM_POKE_BALL, 1);
+ GoToBagMenu(10, 0, SetCB2ToReshowScreenAfterMenu2);
+}
+
+void Task_WallyTutorialBagMenu(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ switch (data[8])
+ {
+ case 0x66:
+ PlaySE(SE_SELECT);
+ SwitchBagPocket(taskId, 1, 0);
+ data[8]++;
+ break;
+ case 0xCC:
+ PlaySE(SE_SELECT);
+ bag_menu_print_cursor_(data[0], 2);
+ gSpecialVar_ItemId = ITEM_POKE_BALL;
+ sub_81AC644(taskId);
+ data[8]++;
+ break;
+ case 0x132:
+ PlaySE(SE_SELECT);
+ bag_menu_remove_some_window();
+ sub_81AE6C8(data[0], 0, 0);
+ RestoreBagAfterWallyTutorial();
+ unknown_ItemMenu_Confirm(taskId);
+ break;
+ default:
+ data[8]++;
+ break;
+ }
+ }
+}
+
+void unknown_ItemMenu_Show(u8 taskId)
+{
+ gSpecialVar_0x8005 = gSpecialVar_ItemId;
+ gSpecialVar_Result = 1;
+ bag_menu_remove_some_window();
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void bag_menu_leave_maybe_3(void)
+{
+ gFieldCallback = sub_819FA50;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+}
+
+void unknown_ItemMenu_Give2(u8 taskId)
+{
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ gSpecialVar_Result = 1;
+ bag_menu_remove_some_window();
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void bag_menu_leave_maybe_2(void)
+{
+ gFieldCallback = sub_818DEF4;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+}
+
+void unknown_ItemMenu_Confirm2(u8 taskId)
+{
+ gSpecialVar_Result = 1;
+ bag_menu_remove_some_window();
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void bag_menu_leave_maybe(void)
+{
+ gFieldCallback = sub_818E564;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+}
+
+void bag_menu_print_pocket_names(u8 *pocketName1, u8 *pocketName2)
+{
+ struct WindowTemplate window = {0, 0, 0, 0, 0, 0, 0};
+ u16 windowId;
+ int offset;
+
+ window.width = 16;
+ window.height = 2;
+ windowId = AddWindow(&window);
+ FillWindowPixelBuffer(windowId, 0);
+ offset = GetStringCenterAlignXOffset(1, pocketName1, 0x40);
+ bag_menu_print(windowId, 1, pocketName1, offset, 1, 0, 0, -1, 1);
+ if (pocketName2)
+ {
+ offset = GetStringCenterAlignXOffset(1, pocketName2, 0x40);
+ bag_menu_print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, -1, 1);
+ }
+ CpuCopy32((u8*)GetWindowAttribute(windowId, 7), gUnknown_0203CE54->unk844, 0x400);
+ RemoveWindow(windowId);
+}
+
+void bag_menu_copy_pocket_name_to_window(u32 a)
+{
+ u8 (* r4)[32][32];
+ u8* windowAttribute;
+ int b;
+ if (a > 8)
+ a = 8;
+ r4 = &gUnknown_0203CE54->unk844;
+ windowAttribute = (u8*)GetWindowAttribute(2, 7);
+ CpuCopy32(r4[0][a], windowAttribute, 0x100);
+ b = a + 16;
+ CpuCopy32(r4[0][b], windowAttribute + 0x100, 0x100);
+ CopyWindowToVram(2, 2);
+}
+
+void setup_bag_menu_textboxes(void)
+{
+ u8 i;
+
+ InitWindows(gUnknown_08614174);
+ DeactivateAllTextPrinters();
+ sub_809882C(0, 1, -32);
+ copy_textbox_border_tile_patterns_to_vram(0, 10, -48);
+ sub_819A2BC(-64, 1);
+ LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
+ for (i = 0; i < 3; i++)
+ {
+ FillWindowPixelBuffer(i, 0);
+ PutWindowTilemap(i);
+ }
+ schedule_bg_copy_tilemap_to_vram(0);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+void bag_menu_print(u8 a, u8 b, const u8 *str, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h)
+{
+ AddTextPrinterParameterized2(a, b, c, d, e, f, gUnknown_08614164[h], g, str);
+}
+
+u8 sub_81AE124(u8 a)
+{
+ return gUnknown_0203CE54->unk810[a];
+}
+
+u8 bag_menu_add_window(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr == 0xFF)
+ {
+ *ptr = AddWindow(&gUnknown_086141AC[a]);
+ SetWindowBorderStyle(*ptr, 0, 1, 14);
+ schedule_bg_copy_tilemap_to_vram(1);
+ }
+ return *ptr;
+}
+
+void bag_menu_remove_window(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr != 0xFF)
+ {
+ sub_8198070(*ptr, 0);
+ ClearWindowTilemap(*ptr);
+ RemoveWindow(*ptr);
+ schedule_bg_copy_tilemap_to_vram(1);
+ *ptr = 0xFF;
+ }
+}
+
+u8 AddItemMessageWindow(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr == 0xFF)
+ *ptr = AddWindow(&gUnknown_086141AC[a]);
+ return *ptr;
+}
+
+void bag_menu_RemoveBagItem_message_window(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr != 0xFF)
+ {
+ sub_8197DF8(*ptr, 0);
+ ClearWindowTilemap(*ptr);
+ RemoveWindow(*ptr);
+ schedule_bg_copy_tilemap_to_vram(1);
+ *ptr = 0xFF;
+ }
+}
+
+void bag_menu_yes_no(u8 a, u8 b, const struct YesNoFuncTable *funcTable)
+{
+ CreateYesNoMenuWithCallbacks(a, &gUnknown_086141AC[b], 1, 0, 2, 1, 14, funcTable);
+}
+
+void bag_menu_AddMoney_window(void)
+{
+ u8 windowId = bag_menu_add_window(9);
+ PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money));
+ AddMoneyLabelObject(19, 11);
+}
+
+void bag_menu_remove_money_window(void)
+{
+ bag_menu_remove_window(9);
+ RemoveMoneyLabelObject();
+}
+
+void bag_menu_prepare_tmhm_move_window(void)
+{
+ FillWindowPixelBuffer(3, 0);
+ blit_move_info_icon(3, 19, 0, 0);
+ blit_move_info_icon(3, 20, 0, 12);
+ blit_move_info_icon(3, 21, 0, 24);
+ blit_move_info_icon(3, 22, 0, 36);
+ CopyWindowToVram(3, 2);
+}
+
+void PrintTMHMMoveData(u16 itemId)
+{
+ u8 i;
+ u16 moveId;
+ const u8* text;
+
+ FillWindowPixelBuffer(4, 0);
+ if (itemId == ITEM_NONE)
+ {
+ for (i = 0; i < 4; i++)
+ bag_menu_print(4, 1, gText_ThreeDashes, 7, i * 12, 0, 0, -1, 4);
+ CopyWindowToVram(4, 2);
+ }
+ else
+ {
+ moveId = ItemIdToBattleMoveId(itemId);
+ blit_move_info_icon(4, gBattleMoves[moveId].type + 1, 0, 0);
+ if (gBattleMoves[moveId].power <= 1)
+ {
+ text = gText_ThreeDashes;
+ }
+ else
+ {
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, 1, 3);
+ text = gStringVar1;
+ }
+ bag_menu_print(4, 1, text, 7, 12, 0, 0, -1, 4);
+ if (gBattleMoves[moveId].accuracy == 0)
+ {
+ text = gText_ThreeDashes;
+ }
+ else
+ {
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, 1, 3);
+ text = gStringVar1;
+ }
+ bag_menu_print(4, 1, text, 7, 24, 0, 0, -1, 4);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, 1, 3);
+ bag_menu_print(4, 1, gStringVar1, 7, 36, 0, 0, -1, 4);
+ CopyWindowToVram(4, 2);
+ }
+}
diff --git a/src/item_use.c b/src/item_use.c
index 8e4a5cf2d..2e47e6f14 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "item_use.h"
#include "battle.h"
#include "berry.h"
#include "bike.h"
@@ -28,7 +29,6 @@
#include "task.h"
#include "text.h"
-extern u16 gSpecialVar_ItemId;
extern void(**gUnknown_0203CE54)(void);
extern void(**gUnknown_0203CF2C)(void);
extern void(*gUnknown_0203A0F4)(u8 taskId);
@@ -87,15 +87,12 @@ extern void sub_81ABA88(u8);
extern void sub_80B7CC8(void);
extern void flagmods_08054D70(void);
extern u8* sub_806CF78(u16);
-extern bool8 ExecuteTableBasedItemEffect_(struct Pokemon*, u16, u8, u8);
-extern u8 gBankInMenu;
-extern u16 gBattlerPartyIndexes[];
extern void sub_81B89F0(void);
extern u8 GetItemEffectType(u16);
extern struct MapConnection *sub_8088A8C(s16, s16);
void MapPostLoadHook_UseItem(void);
-extern void sub_80AF6D4(void);
+void sub_80AF6D4(void);
void Task_CallItemUseOnFieldCallback(u8 taskId);
void bag_menu_inits_lists_menu(u8 taskId);
void ItemUseOnFieldCB_Bike(u8 taskId);
@@ -116,7 +113,7 @@ void sub_80FE024(u8 taskId);
void sub_80FE124(u8 taskId);
void sub_80FE164(u8 taskId);
-void DisplayItemMessage(u8 taskId, u8 a, u8* str, void(*callback)(u8 taskId));
+void DisplayItemMessage(u8 taskId, u8 a, const u8* str, void(*callback)(u8 taskId));
void DisplayItemMessageInBattlePyramid(u8 taskId, u8* str, void(*callback)(u8 taskId));
void DisplayItemMessageOnField(u8 taskId, u8* str, void(*callback)(u8 taskId));
void sub_81C6714(u8 taskId);
@@ -984,9 +981,9 @@ void sub_80FE440(u8 taskId)
void ItemUseInBattle_StatIncrease(u8 taskId)
{
- u16 partyId = gBattlerPartyIndexes[gBankInMenu];
+ u16 partyId = gBattlerPartyIndexes[gBattlerInMenuId];
- if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
+ if (ExecuteTableBasedItemEffect(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
{
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gText_WontHaveEffect, bag_menu_inits_lists_menu);
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index cf3fe12ad..c5aa25c10 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -3,38 +3,6 @@
#include "librfu.h"
-struct RfuUnk1
-{
- u8 unk_0[0x14];
- u32 unk_14;
- u32 unk_18;
- struct RfuIntrStruct unk_1c;
-};
-
-struct RfuUnk2
-{
- u8 unk_0[0x68];
- u32 unk_68;
- u32 unk_6c;
- u8 unk_70[0x70];
-};
-
-struct RfuUnk3
-{
- u32 unk_0;
- u32 unk_4;
- u8 unk_8[0xD4];
- u32 unk_dc;
-};
-
-extern u32 *gUnknown_03007890;
-extern u32 *gUnknown_03007894;
-extern struct RfuUnk3* gUnknown_03007898;
-extern struct RfuUnk2* gUnknown_03007880[4];
-extern struct RfuUnk1* gUnknown_03007870[4];
-extern void* sub_82E53F4;
-extern void rfu_STC_clearAPIVariables(void);
-
// Nonmatching, only register differences
/*u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam)
{
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index 927b87c72..dcdf9b45a 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -641,7 +641,7 @@ static u8 sub_818E13C(void)
return retval;
}
#else
-__attribute__((naked)) static u8 sub_818E13C(void)
+ASM_DIRECT static u8 sub_818E13C(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmovs r7, 0x1\n"
diff --git a/src/link.c b/src/link.c
index ae2cd1992..8f7aa71b6 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1,6 +1,32 @@
// Includes
#include "global.h"
+#include "m4a.h"
+#include "malloc.h"
+#include "reset_save_heap.h"
+#include "save.h"
+#include "bg.h"
+#include "window.h"
+#include "librfu.h"
+#include "random.h"
+#include "decompress.h"
+#include "string_util.h"
+#include "event_data.h"
+#include "item_menu.h"
+#include "overworld.h"
+#include "gpu_regs.h"
+#include "palette.h"
+#include "task.h"
+#include "scanline_effect.h"
+#include "menu.h"
+#include "text.h"
+#include "strings.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "trade.h"
+#include "battle.h"
+#include "link.h"
+#include "link_rfu.h"
// Static type declarations
@@ -8,7 +34,7 @@ struct BlockTransfer
{
u16 pos;
u16 size;
- void *src;
+ const u8 *src;
bool8 active;
u8 multiplayerId;
};
@@ -23,34 +49,2392 @@ struct LinkTestBGInfo
// Static RAM declarations
-IWRAM_DATA struct BlockTransfer gUnknown_03000D10;
+IWRAM_DATA struct BlockTransfer sBlockSend;
IWRAM_DATA u32 link_c_unused_03000d1c;
-IWRAM_DATA struct BlockTransfer gUnknown_03000D20[4];
-IWRAM_DATA u32 gUnknown_03000D50;
+IWRAM_DATA struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
+IWRAM_DATA u32 sBlockSendDelayCounter;
IWRAM_DATA u32 gUnknown_03000D54;
IWRAM_DATA u8 gUnknown_03000D58;
-IWRAM_DATA u32 gUnknown_03000D5C;
+IWRAM_DATA u32 sPlayerDataExchangeStatus;
IWRAM_DATA u32 gUnknown_03000D60;
-IWRAM_DATA u8 gUnknown_03000D64[4]; // not really, but won't match otherwise
-IWRAM_DATA u8 gUnknown_03000D68[4];
-IWRAM_DATA u8 gUnknown_03000D6C;
-IWRAM_DATA bool8 gUnknown_03000D6D;
-IWRAM_DATA u16 gUnknown_03000D6E;
-IWRAM_DATA u16 gUnknown_03000D70;
-IWRAM_DATA u8 gUnknown_03000D72;
-IWRAM_DATA u8 gUnknown_03000D73;
-IWRAM_DATA u8 gUnknown_03000D74[4]; // not really, but won't match otherwise
-IWRAM_DATA u8 gUnknown_03000D78[8]; // not really, but won't match otherwise
-IWRAM_DATA u8 gUnknown_03000D80[16];
-IWRAM_DATA u16 gUnknown_03000D90[8];
-IWRAM_DATA u32 gUnknown_03000DA0;
-IWRAM_DATA u32 gUnknown_03000DA4;
-IWRAM_DATA void *gUnknown_03000DA8;
-IWRAM_DATA void *gUnknown_03000DAC;
-IWRAM_DATA bool32 gUnknown_03000DB0;
+IWRAM_DATA u8 sLinkTestLastBlockSendPos;
+ALIGNED() IWRAM_DATA u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
+IWRAM_DATA u8 sNumVBlanksWithoutSerialIntr;
+IWRAM_DATA bool8 sSendBufferEmpty;
+IWRAM_DATA u16 sSendNonzeroCheck;
+IWRAM_DATA u16 sRecvNonzeroCheck;
+IWRAM_DATA u8 sChecksumAvailable;
+IWRAM_DATA u8 sHandshakePlayerCount;
+
+u16 gLinkPartnersHeldKeys[6];
+u32 gLinkDebugSeed;
+struct LinkPlayerBlock gLocalLinkPlayerBlock;
+bool8 gLinkErrorOccurred;
+u32 gLinkDebugFlags;
+u32 gFiller_03003074;
+bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
+u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
+u32 gFiller_03003080;
+u16 gLinkHeldKeys;
+u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
+u32 gLinkStatus;
+bool8 gUnknown_030030E4;
+bool8 gUnknown_030030E8;
+bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
+bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
+u16 gUnknown_030030F4;
+u8 gSuppressLinkErrorMessage;
+bool8 gWirelessCommType;
+bool8 gSavedLinkPlayerCount;
+u16 gSendCmd[CMD_LENGTH];
+u8 gSavedMultiplayerId;
+bool8 gReceivedRemoteLinkPlayers;
+struct LinkTestBGInfo gLinkTestBGInfo;
+void (*gLinkCallback)(void);
+u8 gShouldAdvanceLinkState;
+u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
+u8 gBlockRequestType;
+u32 gFiller_03003154;
+u32 gFiller_03003158;
+u32 gFiller_0300315c;
+u8 gLastSendQueueCount;
+struct Link gLink;
+u8 gLastRecvQueueCount;
+u16 gLinkSavedIme;
+u32 gFiller_03004138;
+u32 gFiller_0300413C;
+
+EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0;
+EWRAM_DATA u8 gUnknown_020223BD = 0;
+EWRAM_DATA u32 gUnknown_020223C0 = 0;
+EWRAM_DATA u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2] = {};
+EWRAM_DATA u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE] = {};
+EWRAM_DATA bool8 gLinkOpen = FALSE;
+EWRAM_DATA u16 gLinkType = 0;
+EWRAM_DATA u16 gLinkTimeOutCounter = 0;
+EWRAM_DATA struct LinkPlayer gLocalLinkPlayer = {};
+EWRAM_DATA struct LinkPlayer gLinkPlayers[MAX_RFU_PLAYERS] = {};
+EWRAM_DATA struct LinkPlayer gSavedLinkPlayers[MAX_RFU_PLAYERS] = {};
+EWRAM_DATA struct {
+ u32 status;
+ u8 lastRecvQueueCount;
+ u8 lastSendQueueCount;
+ u8 unk_06;
+} sLinkErrorBuffer = {};
+EWRAM_DATA u16 gUnknown_02022B08 = 0;
+EWRAM_DATA void *gUnknown_02022B0C = NULL;
// Static ROM declarations
+static void InitLocalLinkPlayer(void);
+static void sub_80096BC(void);
+static void CB2_LinkTest(void);
+static void ProcessRecvCmds(u8 unused);
+static void sub_8009F70(void);
+static void ResetBlockSend(void);
+static bool32 InitBlockSend(const void *src, size_t size);
+static void LinkCB_BlockSendBegin(void);
+static void LinkCB_BlockSend(void);
+static void LinkCB_BlockSendEnd(void);
+static void SetBlockReceivedFlag(u8 who);
+static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
+static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
+static void LinkCB_RequestPlayerDataExchange(void);
+static void Task_PrintTestData(u8 taskId);
+
+static void sub_800AC80(void);
+static void sub_800ACAC(void);
+static void sub_800AD5C(void);
+static void sub_800AD88(void);
+static void sub_800AE30(void);
+static void sub_800AE5C(void);
+
+static void CheckErrorStatus(void);
+static void CB2_PrintErrorMessage(void);
+static bool8 IsSioMultiMaster(void);
+static void sub_800B4A4(void);
+static void DisableSerial(void);
+static void EnableSerial(void);
+static void CheckMasterOrSlave(void);
+static void InitTimer(void);
+static void EnqueueSendCmd(u16 *sendCmd);
+static void DequeueRecvCmds(u16 (*recvCmds)[CMD_LENGTH]);
+
+static void StartTransfer(void);
+static bool8 DoHandshake(void);
+static void DoRecv(void);
+static void DoSend(void);
+static void StopTimer(void);
+static void SendRecvDone(void);
+
// .rodata
+ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
+const u8 gWirelessLinkDisplayGfx[] = INCBIN_U8("graphics/interface/wireless_link_display.4bpp.lz");
+const u8 gWirelessLinkDisplayTilemap[] = INCBIN_U8("graphics/interface/wireless_link_display.bin.lz");
+const u16 gLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal");
+const u16 gLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp");
+const u8 unkstring_82ed160[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}");
+const u16 g2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp");
+const struct BlockRequest gUnknown_082ED1A8[] = {
+ {gBlockSendBuffer, 200},
+ {gBlockSendBuffer, 200},
+ {gBlockSendBuffer, 100},
+ {gBlockSendBuffer, 220},
+ {gBlockSendBuffer, 40}
+};
+const u8 gBGControlRegs[] = {
+ REG_OFFSET_BG0CNT,
+ REG_OFFSET_BG1CNT,
+ REG_OFFSET_BG2CNT,
+ REG_OFFSET_BG3CNT
+};
+const char gASCIIGameFreakInc[] = "GameFreak inc.";
+const char gASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3";
+const struct BgTemplate gUnknown_082ED1FC[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .priority = 0
+ }, {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 8,
+ .priority = 1
+ }
+};
+const struct WindowTemplate gUnknown_082ED204[] = {
+ {0x00, 0x00, 0x00, 0x1E, 0x05, 0x0F, 0x0002},
+ {0x00, 0x00, 0x06, 0x1E, 0x07, 0x0F, 0x0098},
+ {0x00, 0x00, 0x0D, 0x1E, 0x07, 0x0F, 0x016A},
+ DUMMY_WIN_TEMPLATE
+};
+const u8 gUnknown_082ED224[] = {
+ 0x00, 0x01, 0x02, 0x00,
+ 0xff, 0xfe, 0xff, 0x00
+};
+
// .text
+
+bool8 sub_80093CC(void)
+{
+ sub_800B488();
+ sub_800E700();
+ if (sub_800BEC0() == 0x8001)
+ {
+ rfu_REQ_stopMode();
+ rfu_waitREQComplete();
+ return TRUE;
+ }
+ sub_800B4A4();
+ CloseLink();
+ RestoreSerialTimer3IntrHandlers();
+ return FALSE;
+}
+
+void Task_DestroySelf(u8 taskId)
+{
+ DestroyTask(taskId);
+}
+
+static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4)
+{
+ LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
+ DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx);
+ gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
+ gLinkTestBGInfo.paletteNum = paletteNum;
+ gLinkTestBGInfo.dummy_8 = a4;
+ switch (bgNum)
+ {
+ case 1:
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock));
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock));
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock));
+ break;
+ }
+ SetGpuReg(REG_OFFSET_BG0HOFS + bgNum * 4, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS + bgNum * 4, 0);
+}
+
+void sub_80094EC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock)
+{
+ LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
+ DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx);
+ gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
+ gLinkTestBGInfo.paletteNum = paletteNum;
+ gLinkTestBGInfo.dummy_8 = 0;
+ SetGpuReg(gBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock));
+}
+
+void LinkTestScreen(void)
+{
+ int i;
+
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ SetVBlankCallback(sub_80096BC);
+ ResetBlockSend();
+ gLinkType = 0x1111;
+ OpenLink();
+ SeedRng(gMain.vblankCounter2);
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256;
+ }
+ InitLinkTestBG(0, 2, 4, 0, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON);
+ CreateTask(Task_DestroySelf, 0);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ gUnknown_03000D60 = 0;
+ InitLocalLinkPlayer();
+ CreateTask(Task_PrintTestData, 0);
+ SetMainCallback2(CB2_LinkTest);
+}
+
+void sub_8009628(u8 a0)
+{
+ gLocalLinkPlayer.lp_field_18 = a0;
+}
+
+static void InitLocalLinkPlayer(void)
+{
+ gLocalLinkPlayer.trainerId = gSaveBlock2Ptr->playerTrainerId[0] | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
+ StringCopy(gLocalLinkPlayer.name, gSaveBlock2Ptr->playerName);
+ gLocalLinkPlayer.gender = gSaveBlock2Ptr->playerGender;
+ gLocalLinkPlayer.linkType = gLinkType;
+ gLocalLinkPlayer.language = gGameLanguage;
+ gLocalLinkPlayer.version = gGameVersion + 0x4000;
+ gLocalLinkPlayer.lp_field_2 = 0x8000;
+ gLocalLinkPlayer.name[8] = IsNationalPokedexEnabled();
+ if (FlagGet(FLAG_0x87F))
+ {
+ gLocalLinkPlayer.name[8] |= 0x10;
+ }
+}
+
+static void sub_80096BC(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void InitLink(void)
+{
+ int i;
+
+ for (i = 0; i < 8; i++)
+ {
+ gSendCmd[i] = 0xefff;
+ }
+ gLinkOpen = TRUE;
+ EnableSerial();
+}
+
+static void Task_TriggerHandshake(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 5)
+ {
+ gShouldAdvanceLinkState = 1;
+ DestroyTask(taskId);
+ }
+}
+
+void OpenLink(void)
+{
+ int i;
+
+ if (!gWirelessCommType)
+ {
+ ResetSerial();
+ InitLink();
+ gLinkCallback = LinkCB_RequestPlayerDataExchange;
+ gLinkVSyncDisabled = FALSE;
+ gLinkErrorOccurred = FALSE;
+ gSuppressLinkErrorMessage = FALSE;
+ ResetBlockReceivedFlags();
+ ResetBlockSend();
+ gUnknown_03000D54 = 0;
+ gUnknown_030030E8 = FALSE;
+ gUnknown_030030E4 = FALSE;
+ gUnknown_030030F4 = 0;
+ CreateTask(Task_TriggerHandshake, 2);
+ }
+ else
+ {
+ sub_800E700();
+ }
+ gReceivedRemoteLinkPlayers = 0;
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ gRemoteLinkPlayersNotReceived[i] = TRUE;
+ gUnknown_030030F0[i] = FALSE;
+ gUnknown_030030EC[i] = FALSE;
+ }
+}
+
+void CloseLink(void)
+{
+ gReceivedRemoteLinkPlayers = FALSE;
+ if (gWirelessCommType)
+ {
+ sub_800EDD4();
+ }
+ gLinkOpen = FALSE;
+ DisableSerial();
+}
+
+static void TestBlockTransfer(u8 nothing, u8 is, u8 used)
+{
+ u8 i;
+ u8 status;
+
+ if (sLinkTestLastBlockSendPos != sBlockSend.pos)
+ {
+ LinkTest_prnthex(sBlockSend.pos, 2, 3, 2);
+ sLinkTestLastBlockSendPos = sBlockSend.pos;
+ }
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ if (sLinkTestLastBlockRecvPos[i] != sBlockRecv[i].pos)
+ {
+ LinkTest_prnthex(sBlockRecv[i].pos, 2, i + 4, 2);
+ sLinkTestLastBlockRecvPos[i] = sBlockRecv[i].pos;
+ }
+ }
+ status = GetBlockReceivedStatus();
+ if (status == 0xF) // 0b1111
+ {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ if ((status >> i) & 1)
+ {
+ gLinkTestBlockChecksums[i] = LinkTestCalcBlockChecksum(gBlockRecvBuffer[i], sBlockRecv[i].size);
+ ResetBlockReceivedFlag(i);
+ if (gLinkTestBlockChecksums[i] != 0x0342)
+ {
+ gLinkTestDebugValuesEnabled = FALSE;
+ gUnknown_020223BD = FALSE;
+ }
+ }
+ }
+ }
+}
+
+static void LinkTestProcessKeyInput(void)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ gShouldAdvanceLinkState = 1;
+ }
+ if (gMain.heldKeys & B_BUTTON)
+ {
+ InitBlockSend(gHeap + 0x4000, 0x00002004);
+ }
+ if (gMain.newKeys & L_BUTTON)
+ {
+ BeginNormalPaletteFade(-1, 0, 16, 0, 2);
+ }
+ if (gMain.newKeys & START_BUTTON)
+ {
+ SetSuppressLinkErrorMessage(TRUE);
+ }
+ if (gMain.newKeys & R_BUTTON)
+ {
+ TrySavingData(1);
+ }
+ if (gMain.newKeys & SELECT_BUTTON)
+ {
+ sub_800AC34();
+ }
+ if (gLinkTestDebugValuesEnabled)
+ {
+ SetLinkDebugValues(gMain.vblankCounter2, gLinkCallback ? gLinkVSyncDisabled : gLinkVSyncDisabled | 0x10);
+ }
+}
+
+static void CB2_LinkTest(void)
+{
+ LinkTestProcessKeyInput();
+ TestBlockTransfer(1, 1, 0);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+u16 LinkMain2(const u16 *heldKeys)
+{
+ u8 i;
+
+ if (!gLinkOpen)
+ {
+ return 0;
+ }
+ for (i = 0; i < 8; i++)
+ {
+ gSendCmd[i] = 0;
+ }
+ gLinkHeldKeys = *heldKeys;
+ if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED)
+ {
+ ProcessRecvCmds(SIO_MULTI_CNT->id);
+ if (gLinkCallback != NULL)
+ {
+ gLinkCallback();
+ }
+ CheckErrorStatus();
+ }
+ return gLinkStatus;
+}
+
+static void HandleReceiveRemoteLinkPlayer(u8 who)
+{
+ int i;
+ int count;
+
+ count = 0;
+ gRemoteLinkPlayersNotReceived[who] = FALSE;
+ for (i = 0; i < GetLinkPlayerCount_2(); i++)
+ {
+ count += gRemoteLinkPlayersNotReceived[i];
+ }
+ if (count == 0 && gReceivedRemoteLinkPlayers == 0)
+ {
+ gReceivedRemoteLinkPlayers = 1;
+ }
+}
+
+static void ProcessRecvCmds(u8 unused)
+{
+ u16 i;
+
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ gLinkPartnersHeldKeys[i] = 0;
+ if (gRecvCmds[i][0] == 0)
+ {
+ continue;
+ }
+ switch (gRecvCmds[i][0])
+ {
+ case LINKCMD_SEND_LINK_TYPE:
+ {
+ struct LinkPlayerBlock *block;
+
+ InitLocalLinkPlayer();
+ block = &gLocalLinkPlayerBlock;
+ block->linkPlayer = gLocalLinkPlayer;
+ memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1);
+ memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1);
+ InitBlockSend(block, sizeof(*block));
+ break;
+ }
+ case LINKCMD_SEND_HELD_KEYS:
+ gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
+ break;
+ case LINKCMD_0x5555:
+ gUnknown_030030E8 = TRUE;
+ break;
+ case LINKCMD_0x5566:
+ gUnknown_030030E8 = TRUE;
+ break;
+ case LINKCMD_INIT_BLOCK:
+ {
+ struct BlockTransfer *blockRecv;
+
+ blockRecv = &sBlockRecv[i];
+ blockRecv->pos = 0;
+ blockRecv->size = gRecvCmds[i][1];
+ blockRecv->multiplayerId = gRecvCmds[i][2];
+ break;
+ }
+ case LINKCMD_CONT_BLOCK:
+ {
+ if (sBlockRecv[i].size > BLOCK_BUFFER_SIZE)
+ {
+ u16 *buffer;
+ u16 j;
+
+ buffer = (u16 *)gDecompressionBuffer;
+ for (j = 0; j < CMD_LENGTH - 1; j++)
+ {
+ buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[i][j + 1];
+ }
+ }
+ else
+ {
+ u16 j;
+
+ for (j = 0; j < CMD_LENGTH - 1; j++)
+ {
+ gBlockRecvBuffer[i][(sBlockRecv[i].pos / 2) + j] = gRecvCmds[i][j + 1];
+ }
+ }
+
+ sBlockRecv[i].pos += (CMD_LENGTH - 1) * 2;
+
+ if (sBlockRecv[i].pos >= sBlockRecv[i].size)
+ {
+ if (gRemoteLinkPlayersNotReceived[i] == TRUE)
+ {
+ struct LinkPlayerBlock *block;
+ struct LinkPlayer *linkPlayer;
+
+ block = (struct LinkPlayerBlock *)&gBlockRecvBuffer[i];
+ linkPlayer = &gLinkPlayers[i];
+ *linkPlayer = block->linkPlayer;
+ if ((linkPlayer->version & 0xFF) == VERSION_RUBY || (linkPlayer->version & 0xFF) == VERSION_SAPPHIRE)
+ {
+ linkPlayer->name[10] = 0;
+ linkPlayer->name[9] = 0;
+ linkPlayer->name[8] = 0;
+ }
+ sub_800B524(linkPlayer);
+ if (strcmp(block->magic1, gASCIIGameFreakInc) != 0
+ || strcmp(block->magic2, gASCIIGameFreakInc) != 0)
+ {
+ SetMainCallback2(CB2_LinkError);
+ }
+ else
+ {
+ HandleReceiveRemoteLinkPlayer(i);
+ }
+ }
+ else
+ {
+ SetBlockReceivedFlag(i);
+ }
+ }
+ }
+ break;
+ case LINKCMD_0x5FFF:
+ gUnknown_030030F0[i] = TRUE;
+ break;
+ case LINKCMD_0x2FFE:
+ gUnknown_030030EC[i] = TRUE;
+ break;
+ case LINKCMD_0xAAAA:
+ sub_800A418();
+ break;
+ case LINKCMD_0xCCCC:
+ SendBlock(0, gUnknown_082ED1A8[gRecvCmds[i][1]].address, gUnknown_082ED1A8[gRecvCmds[i][1]].size);
+ break;
+ case LINKCMD_SEND_HELD_KEYS_2:
+ gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
+ break;
+ }
+ }
+}
+
+static void BuildSendCmd(u16 command)
+{
+ switch (command)
+ {
+ case LINKCMD_SEND_LINK_TYPE:
+ gSendCmd[0] = LINKCMD_SEND_LINK_TYPE;
+ gSendCmd[1] = gLinkType;
+ break;
+ case LINKCMD_0x2FFE:
+ gSendCmd[0] = LINKCMD_0x2FFE;
+ break;
+ case LINKCMD_SEND_HELD_KEYS:
+ gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
+ gSendCmd[1] = gMain.heldKeys;
+ break;
+ case LINKCMD_0x5555:
+ gSendCmd[0] = LINKCMD_0x5555;
+ break;
+ case LINKCMD_0x6666:
+ gSendCmd[0] = LINKCMD_0x6666;
+ gSendCmd[1] = 0;
+ break;
+ case LINKCMD_0x7777:
+ {
+ u8 i;
+
+ gSendCmd[0] = LINKCMD_0x7777;
+ for (i = 0; i < 5; i++)
+ {
+ gSendCmd[i + 1] = 0xEE;
+ }
+ break;
+ }
+ case LINKCMD_INIT_BLOCK:
+ gSendCmd[0] = LINKCMD_INIT_BLOCK;
+ gSendCmd[1] = sBlockSend.size;
+ gSendCmd[2] = sBlockSend.multiplayerId + 0x80;
+ break;
+ case LINKCMD_0xAAAA:
+ gSendCmd[0] = LINKCMD_0xAAAA;
+ break;
+ case LINKCMD_0xAAAB:
+ gSendCmd[0] = LINKCMD_0xAAAB;
+ gSendCmd[1] = gSpecialVar_ItemId;
+ break;
+ case LINKCMD_0xCCCC:
+ gSendCmd[0] = LINKCMD_0xCCCC;
+ gSendCmd[1] = gBlockRequestType;
+ break;
+ case LINKCMD_0x5FFF:
+ gSendCmd[0] = LINKCMD_0x5FFF;
+ gSendCmd[1] = gUnknown_030030F4;
+ break;
+ case LINKCMD_0x5566:
+ gSendCmd[0] = LINKCMD_0x5566;
+ break;
+ case LINKCMD_SEND_HELD_KEYS_2:
+ if (gUnknown_03005DA8 == 0 || gLinkTransferringData)
+ {
+ break;
+ }
+ gSendCmd[0] = LINKCMD_SEND_HELD_KEYS_2;
+ gSendCmd[1] = gUnknown_03005DA8;
+ break;
+ }
+}
+
+void sub_8009F18(void)
+{
+ if (gWirelessCommType)
+ {
+ sub_800F804();
+ }
+ gLinkCallback = sub_8009F70;
+}
+
+bool32 sub_8009F3C(void)
+{
+ if (gWirelessCommType)
+ {
+ return sub_800F7E4();
+ }
+ if (gLinkCallback == sub_8009F70)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_8009F70(void)
+{
+ if (gReceivedRemoteLinkPlayers == TRUE)
+ {
+ BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2);
+ }
+}
+
+void ClearLinkCallback(void)
+{
+ if (gWirelessCommType)
+ {
+ Rfu_set_zero();
+ }
+ else
+ {
+ gLinkCallback = NULL;
+ }
+}
+
+void ClearLinkCallback_2(void)
+{
+ if (gWirelessCommType)
+ {
+ Rfu_set_zero();
+ }
+ else
+ {
+ gLinkCallback = NULL;
+ }
+}
+
+u8 GetLinkPlayerCount(void)
+{
+ if (gWirelessCommType)
+ {
+ return sub_80104F4();
+ }
+ return EXTRACT_PLAYER_COUNT(gLinkStatus);
+}
+
+static int sub_8009FF8(u32 version1, u32 version2)
+{
+ int i;
+ u8 nPlayers;
+
+ nPlayers = GetLinkPlayerCount();
+ for (i = 0; i < nPlayers; i++)
+ {
+ if ((gLinkPlayers[i].version & 0xFF) == version1 || (gLinkPlayers[i].version & 0xFF) == version2)
+ {
+ return 1;
+ }
+ }
+ return -1;
+}
+
+u32 sub_800A03C(void)
+{
+ return 2;
+}
+
+bool32 sub_800A040(void)
+{
+ if (GetLinkPlayerCount() != 4 || sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) < 0)
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool32 sub_800A064(void)
+{
+ if (sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) >= 0)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 sub_800A07C(void)
+{
+ int i;
+
+ i = sub_8009FF8(VERSION_FIRE_RED, VERSION_LEAF_GREEN);
+ if (i >= 0 && gLinkPlayers[i].language == LANGUAGE_JAPANESE)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void OpenLinkTimed(void)
+{
+ sPlayerDataExchangeStatus = EXCHANGE_NOT_STARTED;
+ gLinkTimeOutCounter = 0;
+ OpenLink();
+}
+
+u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
+{
+ int i;
+ int count;
+ u32 index;
+ u8 cmpVal;
+ u32 linkType1;
+ u32 linkType2;
+
+ count = 0;
+ if (gReceivedRemoteLinkPlayers == TRUE)
+ {
+ cmpVal = GetLinkPlayerCount_2();
+ if (lower > cmpVal || cmpVal > upper)
+ {
+ sPlayerDataExchangeStatus = EXCHANGE_STAT_6;
+ return 6;
+ }
+ else
+ {
+ if (GetLinkPlayerCount() == 0)
+ {
+ gLinkErrorOccurred = TRUE;
+ CloseLink();
+ }
+ for (i = 0, index = 0; i < GetLinkPlayerCount(); index++, i++)
+ {
+ if (gLinkPlayers[index].linkType == gLinkPlayers[0].linkType)
+ {
+ count++;
+ }
+ }
+ if (count == GetLinkPlayerCount())
+ {
+ if (gLinkPlayers[0].linkType == 0x1133)
+ {
+ switch (sub_807A728())
+ {
+ case 1:
+ sPlayerDataExchangeStatus = EXCHANGE_STAT_4;
+ break;
+ case 2:
+ sPlayerDataExchangeStatus = EXCHANGE_STAT_5;
+ break;
+ case 0:
+ sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
+ break;
+ }
+ }
+ else
+ {
+ sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
+ }
+ }
+ else
+ {
+ sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
+ linkType1 = gLinkPlayers[GetMultiplayerId()].linkType;
+ linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType;
+ if ((linkType1 == 0x2266 && linkType2 == 0x2277) || (linkType1 == 0x2277 && linkType2 == 0x2266))
+ {
+ gSpecialVar_0x8005 = 3;
+ }
+ }
+ }
+ }
+ else if (++gLinkTimeOutCounter > 600)
+ {
+ sPlayerDataExchangeStatus = EXCHANGE_TIMED_OUT;
+ }
+ return sPlayerDataExchangeStatus;
+}
+
+bool8 IsLinkPlayerDataExchangeComplete(void)
+{
+ u8 i;
+ u8 count;
+ bool8 retval;
+
+ count = 0;
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ if (gLinkPlayers[i].linkType == gLinkPlayers[0].linkType)
+ {
+ count++;
+ }
+ }
+ if (count == GetLinkPlayerCount())
+ {
+ retval = TRUE;
+ sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
+ }
+ else
+ {
+ retval = FALSE;
+ sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
+ }
+ return retval;
+}
+
+u32 GetLinkPlayerTrainerId(u8 who)
+{
+ return gLinkPlayers[who].trainerId;
+}
+
+void ResetLinkPlayers(void)
+{
+ int i;
+
+ for (i = 0; i <= MAX_LINK_PLAYERS; i++)
+ {
+ gLinkPlayers[i] = (struct LinkPlayer){};
+ }
+}
+
+static void ResetBlockSend(void)
+{
+ sBlockSend.active = FALSE;
+ sBlockSend.pos = 0;
+ sBlockSend.size = 0;
+ sBlockSend.src = NULL;
+}
+
+static bool32 InitBlockSend(const void *src, size_t size)
+{
+ if (sBlockSend.active)
+ {
+ return FALSE;
+ }
+ sBlockSend.multiplayerId = GetMultiplayerId();
+ sBlockSend.active = TRUE;
+ sBlockSend.size = size;
+ sBlockSend.pos = 0;
+ if (size > 0x100)
+ {
+ sBlockSend.src = src;
+ }
+ else
+ {
+ if (src != gBlockSendBuffer)
+ {
+ memcpy(gBlockSendBuffer, src, size);
+ }
+ sBlockSend.src = gBlockSendBuffer;
+ }
+ BuildSendCmd(LINKCMD_INIT_BLOCK);
+ gLinkCallback = LinkCB_BlockSendBegin;
+ sBlockSendDelayCounter = 0;
+ return TRUE;
+}
+
+static void LinkCB_BlockSendBegin(void)
+{
+ if (++sBlockSendDelayCounter > 2)
+ {
+ gLinkCallback = LinkCB_BlockSend;
+ }
+}
+
+static void LinkCB_BlockSend(void)
+{
+ int i;
+ const u8 *src;
+
+ src = sBlockSend.src;
+ gSendCmd[0] = LINKCMD_CONT_BLOCK;
+ for (i = 0; i < 7; i++)
+ {
+ gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2];
+ }
+ sBlockSend.pos += 14;
+ if (sBlockSend.size <= sBlockSend.pos)
+ {
+ sBlockSend.active = FALSE;
+ gLinkCallback = LinkCB_BlockSendEnd;
+ }
+}
+
+static void LinkCB_BlockSendEnd(void)
+{
+ gLinkCallback = NULL;
+}
+
+static void sub_800A3F8(void)
+{
+ GetMultiplayerId();
+ BuildSendCmd(LINKCMD_SEND_HELD_KEYS);
+ gUnknown_020223C0++;
+}
+
+void sub_800A418(void)
+{
+ gUnknown_020223C0 = 0;
+ if (gWirelessCommType)
+ {
+ sub_800F850();
+ }
+ else
+ {
+ gLinkCallback = sub_800A3F8;
+ }
+}
+
+u32 sub_800A44C(void)
+{
+ return gUnknown_020223C0;
+}
+
+void sub_800A458(void)
+{
+ BuildSendCmd(LINKCMD_0xAAAA);
+}
+
+u8 GetMultiplayerId(void)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ return rfu_get_multiplayer_id();
+ }
+ return SIO_MULTI_CNT->id;
+}
+
+u8 bitmask_all_link_players_but_self(void)
+{
+ u8 mpId;
+
+ mpId = GetMultiplayerId();
+ return ((1 << MAX_LINK_PLAYERS) - 1) ^ (1 << mpId);
+}
+
+bool8 SendBlock(u8 unused, const void *src, u16 size)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ return sub_800FE84(src, size);
+ }
+ return InitBlockSend(src, size);
+}
+
+bool8 sub_800A4D8(u8 a0)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ return sub_8010100(a0);
+ }
+ if (gLinkCallback == NULL)
+ {
+ gBlockRequestType = a0;
+ BuildSendCmd(LINKCMD_0xCCCC);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_800A520(void)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ return sub_8010500();
+ }
+ return gLinkCallback == NULL;
+}
+
+u8 GetBlockReceivedStatus(void)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ return sub_800FCD8();
+ }
+ return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0);
+}
+
+static void SetBlockReceivedFlag(u8 who)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ sub_800F6FC(who);
+ }
+ else
+ {
+ gBlockReceivedStatus[who] = TRUE;
+ }
+}
+
+void ResetBlockReceivedFlags(void)
+{
+ int i;
+
+ if (gWirelessCommType == TRUE)
+ {
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ sub_800F728(i);
+ }
+ }
+ else
+ {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ gBlockReceivedStatus[i] = FALSE;
+ }
+ }
+}
+
+void ResetBlockReceivedFlag(u8 who)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ sub_800F728(who);
+ }
+ else if (gBlockReceivedStatus[who])
+ {
+ gBlockReceivedStatus[who] = FALSE;
+ }
+}
+
+void sub_800A620(void)
+{
+ if ((gLinkStatus & LINK_STAT_MASTER) && EXTRACT_PLAYER_COUNT(gLinkStatus) > 1)
+ {
+ gShouldAdvanceLinkState = 1;
+ }
+}
+
+static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size)
+{
+ u16 chksum;
+ u16 i;
+
+ chksum = 0;
+ for (i = 0; i < size / 2; i++)
+ {
+ chksum += src[i];
+ }
+ return chksum;
+}
+
+static void LinkTest_prnthexchar(char a0, u8 a1, u8 a2)
+{
+ u16 *vAddr;
+
+ vAddr = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock);
+ vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + 1 + gLinkTestBGInfo.dummy_8);
+}
+
+static void LinkTest_prntchar(char a0, u8 a1, u8 a2)
+{
+ u16 *vAddr;
+
+ vAddr = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock);
+ vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + gLinkTestBGInfo.dummy_8);
+}
+
+static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2)
+{
+ char sp[32 / 2];
+ int i;
+
+ for (i = 0; i < a2; i++)
+ {
+ sp[i] = pos & 0xf;
+ pos >>= 4;
+ }
+ for (i = a2 - 1; i >= 0; i--)
+ {
+ LinkTest_prnthexchar(sp[i], a0, a1);
+ a0++;
+ }
+}
+
+static void LinkTest_prntint(int a0, u8 a1, u8 a2, u8 a3)
+{
+ char sp[32 / 2];
+ int sp10;
+ int i;
+
+ sp10 = -1;
+ if (a0 < 0)
+ {
+ sp10 = a1;
+ a0 = -a0;
+ }
+ for (i = 0; i < a3; i++)
+ {
+ sp[i] = a0 % 10;
+ a0 /= 10;
+ }
+ for (i = a3 - 1; i >= 0; i--)
+ {
+ LinkTest_prnthexchar(sp[i], a1, a2);
+ a1++;
+ }
+ if (sp10 != -1)
+ {
+ LinkTest_prnthexchar(*"\n", sp10, a2);
+ }
+}
+
+static void LinkTest_prntstr(const char *a0, u8 a1, u8 a2)
+{
+ int r6;
+ int i;
+ int r5;
+
+ r5 = 0;
+ r6 = 0;
+ for (i = 0; a0[i] != 0; a0++)
+ {
+ if (a0[i] == *"\n")
+ {
+ r5++;
+ r6 = 0;
+ }
+ else
+ {
+ LinkTest_prntchar(a0[i], a1 + r6, a2 + r5);
+ r6++;
+ }
+ }
+}
+
+static void LinkCB_RequestPlayerDataExchange(void)
+{
+ if (gLinkStatus & LINK_STAT_MASTER)
+ {
+ BuildSendCmd(LINKCMD_SEND_LINK_TYPE);
+ }
+ gLinkCallback = NULL;
+}
+
+static void Task_PrintTestData(u8 taskId)
+{
+ char sp[32];
+ int i;
+
+ strcpy(sp, gASCIITestPrint);
+ LinkTest_prntstr(sp, 5, 2);
+ LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2);
+ LinkTest_prnthex(gLinkStatus, 15, 1, 8);
+ LinkTest_prnthex(gLink.state, 2, 10, 2);
+ LinkTest_prnthex(EXTRACT_PLAYER_COUNT(gLinkStatus), 15, 10, 2);
+ LinkTest_prnthex(GetMultiplayerId(), 15, 12, 2);
+ LinkTest_prnthex(gLastSendQueueCount, 25, 1, 2);
+ LinkTest_prnthex(gLastRecvQueueCount, 25, 2, 2);
+ LinkTest_prnthex(GetBlockReceivedStatus(), 15, 5, 2);
+ LinkTest_prnthex(gLinkDebugSeed, 2, 12, 8);
+ LinkTest_prnthex(gLinkDebugFlags, 2, 13, 8);
+ LinkTest_prnthex(GetSioMultiSI(), 25, 5, 1);
+ LinkTest_prnthex(IsSioMultiMaster(), 25, 6, 1);
+ LinkTest_prnthex(IsLinkConnectionEstablished(), 25, 7, 1);
+ LinkTest_prnthex(HasLinkErrorOccurred(), 25, 8, 1);
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ LinkTest_prnthex(gLinkTestBlockChecksums[i], 10, 4 + i, 4);
+ }
+}
+
+void SetLinkDebugValues(u32 seed, u32 flags)
+{
+ gLinkDebugSeed = seed;
+ gLinkDebugFlags = flags;
+}
+
+u8 sub_800A9A8(void)
+{
+ int i;
+ u8 flags;
+
+ flags = 0;
+ for (i = 0; i < gSavedLinkPlayerCount; i++)
+ {
+ flags |= (1 << i);
+ }
+ return flags;
+}
+
+u8 sub_800A9D8(void)
+{
+ int i;
+ u8 flags;
+
+ flags = 0;
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ flags |= (1 << i);
+ }
+ return flags;
+}
+
+void sub_800AA04(u8 a0)
+{
+ int i;
+
+ gSavedLinkPlayerCount = a0;
+ gSavedMultiplayerId = GetMultiplayerId();
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ gSavedLinkPlayers[i] = gLinkPlayers[i];
+ }
+}
+
+u8 sub_800AA48(void)
+{
+ return gSavedLinkPlayerCount;
+}
+
+u8 sub_800AA54(void)
+{
+ return gSavedMultiplayerId;
+}
+
+bool8 sub_800AA60(void)
+{
+ int i;
+ unsigned count;
+
+ count = 0;
+ for (i = 0; i < gSavedLinkPlayerCount; i++)
+ {
+ if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
+ {
+ if (gLinkType == 0x2288)
+ {
+ if (gLinkType == gLinkPlayers[i].linkType)
+ {
+ count++;
+ }
+ }
+ else
+ {
+ count++;
+ }
+ }
+ }
+ if (count == gSavedLinkPlayerCount)
+ {
+ if (GetLinkPlayerCount_2() == gSavedLinkPlayerCount)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void sub_800AAF4(void)
+{
+ int i;
+
+ // Clearly not what was meant to be written, but here it is anyway.
+ for (i = 0; i < 4; i++)
+ {
+ CpuSet(&gSavedLinkPlayers[i], NULL, sizeof(struct LinkPlayer));
+ }
+}
+
+void sub_800AB18(void)
+{
+ u8 i;
+
+ for (i = 0; i < gSavedLinkPlayerCount; i++)
+ {
+ if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0)
+ {
+ gLinkErrorOccurred = TRUE;
+ CloseLink();
+ SetMainCallback2(CB2_LinkError);
+ }
+ }
+}
+
+void sub_800AB98(void)
+{
+ gSavedLinkPlayerCount = 0;
+ gSavedMultiplayerId = 0;
+}
+
+u8 GetLinkPlayerCount_2(void)
+{
+ return EXTRACT_PLAYER_COUNT(gLinkStatus);
+}
+
+bool8 IsLinkMaster(void)
+{
+ if (gWirelessCommType)
+ {
+ return Rfu_IsMaster();
+ }
+ return EXTRACT_MASTER(gLinkStatus);
+}
+
+u8 sub_800ABE8(void)
+{
+ return gUnknown_03000D58;
+}
+
+void sub_800ABF4(u16 a0)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ task_add_05_task_del_08FA224_when_no_RfuFunc();
+ }
+ else
+ {
+ if (gLinkCallback == NULL)
+ {
+ gLinkCallback = sub_800AC80;
+ gUnknown_030030E4 = FALSE;
+ gUnknown_030030F4 = a0;
+ }
+ }
+}
+
+void sub_800AC34(void)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ task_add_05_task_del_08FA224_when_no_RfuFunc();
+ }
+ else
+ {
+ if (gLinkCallback != NULL)
+ {
+ gUnknown_02022B08++;
+ }
+ else
+ {
+ gLinkCallback = sub_800AC80;
+ gUnknown_030030E4 = FALSE;
+ gUnknown_030030F4 = 0;
+ }
+ }
+}
+
+static void sub_800AC80(void)
+{
+ if (gLastRecvQueueCount == 0)
+ {
+ BuildSendCmd(LINKCMD_0x5FFF);
+ gLinkCallback = sub_800ACAC;
+ }
+}
+
+static void sub_800ACAC(void)
+{
+ int i;
+ unsigned count;
+ u8 linkPlayerCount;
+
+ linkPlayerCount = GetLinkPlayerCount();
+ count = 0;
+ for (i = 0; i < linkPlayerCount; i++)
+ {
+ if (gUnknown_030030F0[i])
+ {
+ count++;
+ }
+ }
+ if (count == linkPlayerCount)
+ {
+ gBattleTypeFlags &= ~BATTLE_TYPE_20;
+ gLinkVSyncDisabled = TRUE;
+ CloseLink();
+ gLinkCallback = NULL;
+ gUnknown_030030E4 = TRUE;
+ }
+}
+
+void sub_800AD10(void)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ task_add_05_task_del_08FA224_when_no_RfuFunc();
+ }
+ else
+ {
+ if (gLinkCallback != NULL)
+ {
+ gUnknown_02022B08++;
+ }
+ else
+ {
+ gLinkCallback = sub_800AD5C;
+ gUnknown_030030E4 = FALSE;
+ gUnknown_030030F4 = 0;
+ }
+ }
+}
+
+static void sub_800AD5C(void)
+{
+ if (gLastRecvQueueCount == 0)
+ {
+ BuildSendCmd(LINKCMD_0x5FFF);
+ gLinkCallback = sub_800AD88;
+ }
+}
+
+static void sub_800AD88(void)
+{
+ int i;
+ unsigned count;
+ u8 linkPlayerCount;
+
+ linkPlayerCount = GetLinkPlayerCount();
+ count = 0;
+ for (i = 0; i < linkPlayerCount; i++)
+ {
+ if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
+ {
+ count++;
+ }
+ else if (gUnknown_030030F0[i])
+ {
+ count++;
+ }
+ }
+ if (count == linkPlayerCount)
+ {
+ gBattleTypeFlags &= ~BATTLE_TYPE_20;
+ gLinkVSyncDisabled = TRUE;
+ CloseLink();
+ gLinkCallback = NULL;
+ gUnknown_030030E4 = TRUE;
+ }
+}
+
+void sub_800ADF8(void)
+{
+ if (gWirelessCommType == TRUE)
+ {
+ sub_8010434();
+ }
+ else
+ {
+ if (gLinkCallback == NULL)
+ {
+ gLinkCallback = sub_800AE30;
+ }
+ gUnknown_030030E4 = FALSE;
+ }
+}
+
+static void sub_800AE30(void)
+{
+ if (gLastRecvQueueCount == 0)
+ {
+ BuildSendCmd(LINKCMD_0x2FFE);
+ gLinkCallback = sub_800AE5C;
+ }
+}
+
+static void sub_800AE5C(void)
+{
+ u8 i;
+ u8 linkPlayerCount;
+
+ linkPlayerCount = GetLinkPlayerCount();
+ for (i = 0; i < linkPlayerCount; i++)
+ {
+ if (!gUnknown_030030EC[i])
+ {
+ break;
+ }
+ }
+ if (i == linkPlayerCount)
+ {
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ gUnknown_030030EC[i] = FALSE;
+ }
+ gLinkCallback = NULL;
+ }
+}
+
+static void CheckErrorStatus(void)
+{
+ if (gLinkOpen && EXTRACT_LINK_ERRORS(gLinkStatus))
+ {
+ if (!gSuppressLinkErrorMessage)
+ {
+ sLinkErrorBuffer.status = gLinkStatus;
+ sLinkErrorBuffer.lastRecvQueueCount = gLastRecvQueueCount;
+ sLinkErrorBuffer.lastSendQueueCount = gLastSendQueueCount;
+ SetMainCallback2(CB2_LinkError);
+ }
+ gLinkErrorOccurred = TRUE;
+ CloseLink();
+ }
+}
+
+void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
+{
+ sLinkErrorBuffer.status = status;
+ sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount;
+ sLinkErrorBuffer.lastRecvQueueCount = lastRecvQueueCount;
+ sLinkErrorBuffer.unk_06 = unk_06;
+}
+
+void CB2_LinkError(void)
+{
+ u8 *tilemapBuffer;
+
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ m4aMPlayStop(&gMPlayInfo_SE1);
+ m4aMPlayStop(&gMPlayInfo_SE2);
+ m4aMPlayStop(&gMPlayInfo_SE3);
+ InitHeap(gHeap, HEAP_SIZE);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetPaletteFadeControl();
+ FillPalette(0, 0, 2);
+ ResetTasks();
+ ScanlineEffect_Stop();
+ if (gWirelessCommType)
+ {
+ if (!sLinkErrorBuffer.unk_06)
+ {
+ gWirelessCommType = 3;
+ }
+ sub_800E604();
+ }
+ SetVBlankCallback(sub_80096BC);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_082ED1FC, 2);
+ gUnknown_02022B0C = tilemapBuffer = malloc(0x800);
+ SetBgTilemapBuffer(1, tilemapBuffer);
+ if (InitWindows(gUnknown_082ED204))
+ {
+ DeactivateAllTextPrinters();
+ reset_temp_tile_data_buffers();
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
+ LoadPalette(gUnknown_0860F074, 0xf0, 0x20);
+ gSoftResetDisabled = FALSE;
+ CreateTask(Task_DestroySelf, 0);
+ StopMapMusic();
+ gMain.callback1 = NULL;
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ SetMainCallback2(CB2_PrintErrorMessage);
+ }
+}
+
+static void sub_800B080(void)
+{
+ LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
+ copy_decompressed_tile_data_to_vram_autofree(1, gWirelessLinkDisplayGfx, FALSE, 0, 0);
+ CopyToBgTilemapBuffer(1, gWirelessLinkDisplayTilemap, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+ LoadPalette(gWirelessLinkDisplayPal, 0, 0x20);
+ FillWindowPixelBuffer(0, 0x00);
+ FillWindowPixelBuffer(2, 0x00);
+ box_print(0, 3, 2, 6, gUnknown_082ED224, 0, gText_CommErrorEllipsis);
+ box_print(2, 3, 2, 1, gUnknown_082ED224, 0, gText_MoveCloserToLinkPartner);
+ PutWindowTilemap(0);
+ PutWindowTilemap(2);
+ CopyWindowToVram(0, 0);
+ CopyWindowToVram(2, 3);
+}
+
+static void sub_800B138(void)
+{
+ LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
+ FillWindowPixelBuffer(1, 0x00);
+ FillWindowPixelBuffer(2, 0x00);
+ box_print(1, 3, 2, 0, gUnknown_082ED224, 0, gText_CommErrorCheckConnections);
+ PutWindowTilemap(1);
+ PutWindowTilemap(2);
+ CopyWindowToVram(1, 0);
+ CopyWindowToVram(2, 3);
+}
+
+static void CB2_PrintErrorMessage(void)
+{
+ switch (gMain.state)
+ {
+ case 00:
+ if (sLinkErrorBuffer.unk_06)
+ {
+ sub_800B080();
+ }
+ else
+ {
+ sub_800B138();
+ }
+ break;
+ case 02:
+ ShowBg(0);
+ if (sLinkErrorBuffer.unk_06)
+ {
+ ShowBg(1);
+ }
+ break;
+ case 30:
+ PlaySE(SE_BOO);
+ break;
+ case 60:
+ PlaySE(SE_BOO);
+ break;
+ case 90:
+ PlaySE(SE_BOO);
+ break;
+ case 130:
+ if (gWirelessCommType == 2)
+ {
+ box_print(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnTitleScreen);
+ }
+ else if (gWirelessCommType == 1)
+ {
+ box_print(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnRegistrationCounter);
+ }
+ break;
+ }
+ if (gMain.state == 160)
+ {
+ if (gWirelessCommType == 1)
+ {
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_PIN);
+ gWirelessCommType = 0;
+ sLinkErrorBuffer.unk_06 = 0;
+ sub_81700F8();
+ }
+ }
+ else if (gWirelessCommType == 2)
+ {
+ if (gMain.newKeys & A_BUTTON)
+ {
+ rfu_REQ_stopMode();
+ rfu_waitREQComplete();
+ DoSoftReset();
+ }
+ }
+ }
+ if (gMain.state != 160)
+ {
+ gMain.state++;
+ }
+}
+
+// TODO: there might be a file boundary here, let's name it
+
+bool8 GetSioMultiSI(void)
+{
+ return (REG_SIOCNT & 0x04) != 0;
+}
+
+static bool8 IsSioMultiMaster(void)
+{
+ return (REG_SIOCNT & 0x8) && !(REG_SIOCNT & 0x04);
+}
+
+bool8 IsLinkConnectionEstablished(void)
+{
+ return EXTRACT_CONN_ESTABLISHED(gLinkStatus);
+}
+
+void SetSuppressLinkErrorMessage(bool8 flag)
+{
+ gSuppressLinkErrorMessage = flag;
+}
+
+bool8 HasLinkErrorOccurred(void)
+{
+ return gLinkErrorOccurred;
+}
+
+void sub_800B348(void)
+{
+ struct LinkPlayerBlock *block;
+
+ InitLocalLinkPlayer();
+ block = &gLocalLinkPlayerBlock;
+ block->linkPlayer = gLocalLinkPlayer;
+ memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1);
+ memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1);
+ memcpy(gBlockSendBuffer, block, sizeof(*block));
+}
+
+void sub_800B3A4(u32 who)
+{
+ u8 who_ = who;
+ struct LinkPlayerBlock *block;
+ struct LinkPlayer *player;
+
+ block = (struct LinkPlayerBlock *)gBlockRecvBuffer[who_];
+ player = &gLinkPlayers[who_];
+ *player = block->linkPlayer;
+ sub_800B524(player);
+ if (strcmp(block->magic1, gASCIIGameFreakInc) != 0 || strcmp(block->magic2, gASCIIGameFreakInc) != 0)
+ {
+ SetMainCallback2(CB2_LinkError);
+ }
+}
+
+bool8 HandleLinkConnection(void)
+{
+ bool32 r4;
+ bool32 r5;
+
+ if (gWirelessCommType == 0)
+ {
+ gLinkStatus = LinkMain1(&gShouldAdvanceLinkState, gSendCmd, gRecvCmds);
+ LinkMain2(&gMain.heldKeys);
+ if ((gLinkStatus & LINK_STAT_RECEIVED_NOTHING) && sub_808766C() == TRUE)
+ {
+ return TRUE;
+ }
+ }
+ else
+ {
+ r4 = sub_8010EC0();
+ r5 = sub_8010F1C();
+ if (sub_808766C() == TRUE)
+ {
+ if (r4 == TRUE || sub_800F0B8() || r5)
+ {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+void sub_800B488(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gWirelessCommType = 1;
+ }
+}
+
+static void sub_800B4A4(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gWirelessCommType = 0;
+ }
+}
+
+void sub_800B4C0(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gWirelessCommType = 0;
+ }
+}
+
+u32 sub_800B4DC(void)
+{
+ if (gWirelessCommType != 0)
+ {
+ return sub_80124D4();
+ }
+ return gLink.recvQueue.count;
+}
+
+bool8 sub_800B504(void)
+{
+ if (sub_800B4DC() > 2)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u8 sub_800B518(void)
+{
+ return gWirelessCommType;
+}
+
+void sub_800B524(struct LinkPlayer *player)
+{
+ player->name[10] = player->name[8];
+ ConvertInternationalString(player->name, player->language);
+}
+
+static void DisableSerial(void)
+{
+ DisableInterrupts(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ REG_SIOCNT = SIO_MULTI_MODE;
+ REG_TMCNT_H(3) = 0;
+ REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL;
+ REG_SIOMLT_SEND = 0;
+ REG_SIOMLT_RECV = 0;
+ CpuFill32(0, &gLink, sizeof(gLink));
+}
+
+static void EnableSerial(void)
+{
+ DisableInterrupts(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ REG_RCNT = 0;
+ REG_SIOCNT = SIO_MULTI_MODE;
+ REG_SIOCNT |= SIO_115200_BPS | SIO_INTR_ENABLE;
+ EnableInterrupts(INTR_FLAG_SERIAL);
+ REG_SIOMLT_SEND = 0;
+ CpuFill32(0, &gLink, sizeof(gLink));
+ sNumVBlanksWithoutSerialIntr = 0;
+ sSendNonzeroCheck = 0;
+ sRecvNonzeroCheck = 0;
+ sChecksumAvailable = 0;
+ sHandshakePlayerCount = 0;
+ gLastSendQueueCount = 0;
+ gLastRecvQueueCount = 0;
+}
+
+void ResetSerial(void)
+{
+ EnableSerial();
+ DisableSerial();
+}
+
+// link_main1.c
+
+u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENGTH])
+{
+ u32 retVal;
+ u32 retVal2;
+
+ switch (gLink.state)
+ {
+ case LINK_STATE_START0:
+ DisableSerial();
+ gLink.state = 1;
+ break;
+ case LINK_STATE_START1:
+ if (*shouldAdvanceLinkState == 1)
+ {
+ EnableSerial();
+ gLink.state = 2;
+ }
+ break;
+ case LINK_STATE_HANDSHAKE:
+ switch (*shouldAdvanceLinkState)
+ {
+ default:
+ CheckMasterOrSlave();
+ break;
+ case 1:
+ if (gLink.isMaster == LINK_MASTER && gLink.playerCount > 1)
+ {
+ gLink.handshakeAsMaster = TRUE;
+ }
+ break;
+ case 2:
+ gLink.state = LINK_STATE_START0;
+ REG_SIOMLT_SEND = 0;
+ break;
+ }
+ break;
+ case LINK_STATE_INIT_TIMER:
+ InitTimer();
+ gLink.state = LINK_STATE_CONN_ESTABLISHED;
+ // fallthrough
+ case LINK_STATE_CONN_ESTABLISHED:
+ EnqueueSendCmd(sendCmd);
+ DequeueRecvCmds(recvCmds);
+ break;
+ }
+ *shouldAdvanceLinkState = 0;
+ retVal = gLink.localId;
+ retVal |= (gLink.playerCount << LINK_STAT_PLAYER_COUNT_SHIFT);
+ if (gLink.isMaster == LINK_MASTER)
+ {
+ retVal |= LINK_STAT_MASTER;
+ }
+ {
+ u32 receivedNothing = gLink.receivedNothing << LINK_STAT_RECEIVED_NOTHING_SHIFT;
+ u32 link_field_F = gLink.link_field_F << LINK_STAT_UNK_FLAG_9_SHIFT;
+ u32 hardwareError = gLink.hardwareError << LINK_STAT_ERROR_HARDWARE_SHIFT;
+ u32 badChecksum = gLink.badChecksum << LINK_STAT_ERROR_CHECKSUM_SHIFT;
+ u32 queueFull = gLink.queueFull << LINK_STAT_ERROR_QUEUE_FULL_SHIFT;
+ u32 val;
+
+ if (gLink.state == LINK_STATE_CONN_ESTABLISHED)
+ {
+ val = LINK_STAT_CONN_ESTABLISHED;
+ val |= receivedNothing;
+ val |= retVal;
+ val |= link_field_F;
+ val |= hardwareError;
+ val |= badChecksum;
+ val |= queueFull;
+ }
+ else
+ {
+ val = retVal;
+ val |= receivedNothing;
+ val |= link_field_F;
+ val |= hardwareError;
+ val |= badChecksum;
+ val |= queueFull;
+ }
+
+ retVal = val;
+ }
+
+ if (gLink.lag == LAG_MASTER)
+ {
+ retVal |= LINK_STAT_ERROR_LAG_MASTER;
+ }
+
+ if (gLink.localId >= MAX_LINK_PLAYERS)
+ {
+ retVal |= LINK_STAT_ERROR_INVALID_ID;
+ }
+
+ retVal2 = retVal;
+ if (gLink.lag == LAG_SLAVE)
+ {
+ retVal2 |= LINK_STAT_ERROR_LAG_SLAVE;
+ }
+
+ return retVal2;
+}
+
+static void CheckMasterOrSlave(void)
+{
+ u32 terminals;
+
+ terminals = *(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SD | SIO_MULTI_SI);
+ if (terminals == SIO_MULTI_SD && gLink.localId == 0)
+ {
+ gLink.isMaster = LINK_MASTER;
+ }
+ else
+ {
+ gLink.isMaster = LINK_SLAVE;
+ }
+}
+
+static void InitTimer(void)
+{
+ if (gLink.isMaster)
+ {
+ REG_TM3CNT_L = -197;
+ REG_TM3CNT_H = TIMER_64CLK | TIMER_INTR_ENABLE;
+ EnableInterrupts(INTR_FLAG_TIMER3);
+ }
+}
+
+static void EnqueueSendCmd(u16 *sendCmd)
+{
+ u8 i;
+ u8 offset;
+
+ gLinkSavedIme = REG_IME;
+ REG_IME = 0;
+ if (gLink.sendQueue.count < QUEUE_CAPACITY)
+ {
+ offset = gLink.sendQueue.pos + gLink.sendQueue.count;
+ if (offset >= QUEUE_CAPACITY)
+ {
+ offset -= QUEUE_CAPACITY;
+ }
+ for (i = 0; i < CMD_LENGTH; i++)
+ {
+ sSendNonzeroCheck |= *sendCmd;
+ gLink.sendQueue.data[i][offset] = *sendCmd;
+ *sendCmd = 0;
+ sendCmd++;
+ }
+ }
+ else
+ {
+ gLink.queueFull = QUEUE_FULL_SEND;
+ }
+ if (sSendNonzeroCheck)
+ {
+ gLink.sendQueue.count++;
+ sSendNonzeroCheck = 0;
+ }
+ REG_IME = gLinkSavedIme;
+ gLastSendQueueCount = gLink.sendQueue.count;
+}
+
+
+static void DequeueRecvCmds(u16 (*recvCmds)[CMD_LENGTH])
+{
+ u8 i;
+ u8 j;
+
+ gLinkSavedIme = REG_IME;
+ REG_IME = 0;
+ if (gLink.recvQueue.count == 0)
+ {
+ for (i = 0; i < gLink.playerCount; i++)
+ {
+ for (j = 0; j < CMD_LENGTH; j++)
+ {
+ recvCmds[i][j] = 0;
+ }
+ }
+
+ gLink.receivedNothing = TRUE;
+ }
+ else
+ {
+ for (i = 0; i < gLink.playerCount; i++)
+ {
+ for (j = 0; j < CMD_LENGTH; j++)
+ {
+ recvCmds[i][j] = gLink.recvQueue.data[i][j][gLink.recvQueue.pos];
+ }
+ }
+ gLink.recvQueue.count--;
+ gLink.recvQueue.pos++;
+ if (gLink.recvQueue.pos >= QUEUE_CAPACITY)
+ {
+ gLink.recvQueue.pos = 0;
+ }
+ gLink.receivedNothing = FALSE;
+ }
+ REG_IME = gLinkSavedIme;
+}
+
+// link_intr.c
+
+void LinkVSync(void)
+{
+ if (gLink.isMaster)
+ {
+ switch (gLink.state)
+ {
+ case LINK_STATE_CONN_ESTABLISHED:
+ if (gLink.serialIntrCounter < 9)
+ {
+ if (gLink.hardwareError != TRUE)
+ {
+ gLink.lag = LAG_MASTER;
+ }
+ else
+ {
+ StartTransfer();
+ }
+ }
+ else if (gLink.lag != LAG_MASTER)
+ {
+ gLink.serialIntrCounter = 0;
+ StartTransfer();
+ }
+ break;
+ case LINK_STATE_HANDSHAKE:
+ StartTransfer();
+ break;
+ }
+ }
+ else if (gLink.state == LINK_STATE_CONN_ESTABLISHED || gLink.state == LINK_STATE_HANDSHAKE)
+ {
+ if (++sNumVBlanksWithoutSerialIntr > 10)
+ {
+ if (gLink.state == LINK_STATE_CONN_ESTABLISHED)
+ {
+ gLink.lag = LAG_SLAVE;
+ }
+ if (gLink.state == LINK_STATE_HANDSHAKE)
+ {
+ gLink.playerCount = 0;
+ gLink.link_field_F = FALSE;
+ }
+ }
+ }
+}
+
+void Timer3Intr(void)
+{
+ StopTimer();
+ StartTransfer();
+}
+
+void SerialCB(void)
+{
+ gLink.localId = SIO_MULTI_CNT->id;
+ switch (gLink.state)
+ {
+ case LINK_STATE_CONN_ESTABLISHED:
+ gLink.hardwareError = SIO_MULTI_CNT->error;
+ DoRecv();
+ DoSend();
+ SendRecvDone();
+ break;
+ case LINK_STATE_HANDSHAKE:
+ if (DoHandshake())
+ {
+ if (gLink.isMaster)
+ {
+ gLink.state = LINK_STATE_INIT_TIMER;
+ gLink.serialIntrCounter = 8;
+ }
+ else
+ {
+ gLink.state = LINK_STATE_CONN_ESTABLISHED;
+ }
+ }
+ break;
+ }
+ gLink.serialIntrCounter++;
+ sNumVBlanksWithoutSerialIntr = 0;
+ if (gLink.serialIntrCounter == 8)
+ {
+ gLastRecvQueueCount = gLink.recvQueue.count;
+ }
+}
+
+static void StartTransfer(void)
+{
+ REG_SIOCNT |= SIO_START;
+}
+
+static bool8 DoHandshake(void)
+{
+ u8 i;
+ u8 playerCount;
+ u16 minRecv;
+
+ playerCount = 0;
+ minRecv = 0xFFFF;
+ if (gLink.handshakeAsMaster == TRUE)
+ {
+ REG_SIOMLT_SEND = MASTER_HANDSHAKE;
+ }
+ else
+ {
+ REG_SIOMLT_SEND = SLAVE_HANDSHAKE;
+ }
+ *(u64 *)gLink.tempRecvBuffer = REG_SIOMLT_RECV;
+ REG_SIOMLT_RECV = 0;
+ gLink.handshakeAsMaster = FALSE;
+ for (i = 0; i < 4; i++)
+ {
+ if ((gLink.tempRecvBuffer[i] & ~0x3) == SLAVE_HANDSHAKE || gLink.tempRecvBuffer[i] == MASTER_HANDSHAKE)
+ {
+ playerCount++;
+ if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0)
+ {
+ minRecv = gLink.tempRecvBuffer[i];
+ }
+ }
+ else
+ {
+ if (gLink.tempRecvBuffer[i] != 0xFFFF)
+ {
+ playerCount = 0;
+ }
+ break;
+ }
+ }
+ gLink.playerCount = playerCount;
+ if (gLink.playerCount > 1 && gLink.playerCount == sHandshakePlayerCount && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE)
+ {
+ return TRUE;
+ }
+ if (gLink.playerCount > 1)
+ {
+ gLink.link_field_F = (minRecv & 3) + 1;
+ }
+ else
+ {
+ gLink.link_field_F = 0;
+ }
+ sHandshakePlayerCount = gLink.playerCount;
+ return FALSE;
+}
+
+static void DoRecv(void)
+{
+ u16 recv[4];
+ u8 i;
+ u8 index;
+
+ *(u64 *)recv = REG_SIOMLT_RECV;
+ if (gLink.sendCmdIndex == 0)
+ {
+ for (i = 0; i < gLink.playerCount; i++)
+ {
+ if (gLink.checksum != recv[i] && sChecksumAvailable)
+ {
+ gLink.badChecksum = TRUE;
+ }
+ }
+ gLink.checksum = 0;
+ sChecksumAvailable = TRUE;
+ }
+ else
+ {
+ index = gLink.recvQueue.pos + gLink.recvQueue.count;
+ if (index >= QUEUE_CAPACITY)
+ {
+ index -= QUEUE_CAPACITY;
+ }
+ if (gLink.recvQueue.count < QUEUE_CAPACITY)
+ {
+ for (i = 0; i < gLink.playerCount; i++)
+ {
+ gLink.checksum += recv[i];
+ sRecvNonzeroCheck |= recv[i];
+ gLink.recvQueue.data[i][gLink.recvCmdIndex][index] = recv[i];
+ }
+ }
+ else
+ {
+ gLink.queueFull = QUEUE_FULL_RECV;
+ }
+ gLink.recvCmdIndex++;
+ if (gLink.recvCmdIndex == CMD_LENGTH && sRecvNonzeroCheck)
+ {
+ gLink.recvQueue.count++;
+ sRecvNonzeroCheck = 0;
+ }
+ }
+}
+
+static void DoSend(void)
+{
+ if (gLink.sendCmdIndex == CMD_LENGTH)
+ {
+ REG_SIOMLT_SEND = gLink.checksum;
+ if (!sSendBufferEmpty)
+ {
+ gLink.sendQueue.count--;
+ gLink.sendQueue.pos++;
+ if (gLink.sendQueue.pos >= QUEUE_CAPACITY)
+ {
+ gLink.sendQueue.pos = 0;
+ }
+ }
+ else
+ {
+ sSendBufferEmpty = FALSE;
+ }
+ }
+ else
+ {
+ if (!sSendBufferEmpty && gLink.sendQueue.count == 0)
+ {
+ sSendBufferEmpty = TRUE;
+ }
+ if (sSendBufferEmpty)
+ {
+ REG_SIOMLT_SEND = 0;
+ }
+ else
+ {
+ REG_SIOMLT_SEND = gLink.sendQueue.data[gLink.sendCmdIndex][gLink.sendQueue.pos];
+ }
+ gLink.sendCmdIndex++;
+ }
+}
+
+static void StopTimer(void)
+{
+ if (gLink.isMaster)
+ {
+ REG_TM3CNT_H &= ~TIMER_ENABLE;
+ REG_TM3CNT_L = -197;
+ }
+}
+
+static void SendRecvDone(void)
+{
+ if (gLink.recvCmdIndex == CMD_LENGTH)
+ {
+ gLink.sendCmdIndex = 0;
+ gLink.recvCmdIndex = 0;
+ }
+ else if (gLink.isMaster)
+ {
+ REG_TM3CNT_H |= TIMER_ENABLE;
+ }
+}
+
+void ResetSendBuffer(void)
+{
+ u8 i;
+ u8 j;
+
+ gLink.sendQueue.count = 0;
+ gLink.sendQueue.pos = 0;
+ for (i = 0; i < CMD_LENGTH; i++)
+ {
+ for (j = 0; j < QUEUE_CAPACITY; j++)
+ {
+ gLink.sendQueue.data[i][j] = 0xEFFF;
+ }
+ }
+}
+
+void ResetRecvBuffer(void)
+{
+ u8 i;
+ u8 j;
+ u8 k;
+
+ gLink.recvQueue.count = 0;
+ gLink.recvQueue.pos = 0;
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ for (j = 0; j < CMD_LENGTH; j++)
+ {
+ for (k = 0; k < QUEUE_CAPACITY; k++)
+ {
+ gLink.recvQueue.data[i][j][k] = 0xEFFF;
+ }
+ }
+ }
+}
diff --git a/src/link_rfu.c b/src/link_rfu.c
new file mode 100644
index 000000000..186d54fd3
--- /dev/null
+++ b/src/link_rfu.c
@@ -0,0 +1,4940 @@
+
+// Includes
+#include "global.h"
+#include "malloc.h"
+#include "battle.h"
+#include "berry_blender.h"
+#include "task.h"
+#include "random.h"
+#include "decompress.h"
+#include "text.h"
+#include "string_util.h"
+#include "event_data.h"
+#include "overworld.h"
+#include "link.h"
+#include "librfu.h"
+#include "rom_8011DC0.h"
+#include "link_rfu.h"
+
+// Static type declarations
+
+// Static RAM declarations
+
+struct UnkRfuStruct_1 gUnknown_03004140;
+struct UnkRfuStruct_2 gUnknown_03005000;
+
+IWRAM_DATA u8 gUnknown_03000D74;
+ALIGNED(4) IWRAM_DATA u8 gUnknown_03000D78[8];
+IWRAM_DATA u8 gUnknown_03000D80[16];
+IWRAM_DATA u16 gUnknown_03000D90[8];
+
+EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0;
+EWRAM_DATA ALIGNED(4) struct UnkLinkRfuStruct_02022B14 gUnknown_02022B14 = {};
+EWRAM_DATA ALIGNED(2) u8 gUnknown_02022B22[8] = {};
+EWRAM_DATA struct UnkLinkRfuStruct_02022B2C gUnknown_02022B2C = {};
+EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_02022B44 = {};
+
+// Static ROM declarations
+
+static void sub_800C000(void);
+static void sub_800C7B4(u16 r8, u16 r6);
+static void sub_800C744(u32 a0);
+static void sub_800CEB0(u16 r6);
+static void sub_800CF34(void);
+static void sub_800D158(void);
+static void sub_800D20C(void);
+static void sub_800D268(void);
+static u8 sub_800D294(void);
+static void sub_800D30C(u8 a0, u8 a1);
+static void sub_800D334(u8 a0);
+static void sub_800D358(u8 a0);
+static void sub_800D434(void);
+static void sub_800D610(void);
+void sub_800D630(void);
+static bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
+static void sub_800EAB4(void);
+static void sub_800EAFC(void);
+void sub_800ED34(u16 unused);
+static void sub_800EDBC(u16 unused);
+static void sub_800F048(void);
+static void sub_800F86C(u8 unused);
+static void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data);
+void sub_800FD14(u16 command);
+static void rfufunc_80F9F44(void);
+static void sub_800FFB0(void);
+static void rfufunc_80FA020(void);
+bool32 sub_8010454(u32 a0);
+static void sub_8010528(void);
+void sub_8010750(void);
+int sub_80107A0(void);
+void sub_801084C(u8 taskId);
+void sub_80109E8(u16 a0);
+void sub_8010A70(void *a0);
+void sub_8010AAC(u8 taskId);
+void sub_8010D0C(u8 taskId);
+void sub_80115EC(u16 a0);
+u8 sub_8011CE4(const u8 *a0, u16 a1);
+void sub_8011D6C(u8 a0);
+void sub_8011E94(u8 a0, u8 a1);
+u8 sub_8012224(void);
+void sub_801227C(void);
+
+// .rodata
+
+const u16 gWirelessLinkIconPalette[] = INCBIN_U16("graphics/interface/wireless_link_icon.gbapal");
+const u8 gWirelessLinkIconPic[] = INCBIN_U8("graphics/interface/wireless_link_icon.4bpp.lz");
+const u8 sWireless_ASCIItoRSETable[] = {
+ 0xff, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x00, 0xab, 0xb5, 0xb6, 0xb1, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xb2, 0xf1, 0x00, 0xae, 0xad, 0xba,
+ 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
+ 0xa9, 0xaa, 0x00, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1,
+ 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
+ 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1,
+ 0xd2, 0xd3, 0xd4, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
+ 0x00, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
+ 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3,
+ 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
+ 0xec, 0xed, 0xee, 0x2d, 0x2f, 0x30, 0x31, 0x32,
+ 0x33, 0x34, 0x35, 0x36, 0x50, 0x00, 0x01, 0x02,
+ 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
+ 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a,
+ 0x1b, 0xad, 0xb3, 0xb4, 0x00, 0xaf, 0x7d, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0xa0,
+ 0xae, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7e, 0xb0, 0xac,
+ 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
+ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
+ 0x2c, 0x2e, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c,
+ 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94
+};
+const u8 sWireless_RSEtoASCIITable[] = {
+ 0x20, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c,
+ 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c,
+ 0x9d, 0x9e, 0x9f, 0xa0, 0xe0, 0xe1, 0xe2, 0xe3,
+ 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
+ 0xec, 0xed, 0xee, 0xef, 0xf0, 0x7b, 0xf1, 0x7c,
+ 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x84, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xa6, 0xdd, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xf2,
+ 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,
+ 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x01, 0x02, 0x03,
+ 0x04, 0x05, 0x06, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0xaf, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
+ 0x37, 0x38, 0x39, 0x21, 0xdf, 0xa1, 0xb0, 0xa5,
+ 0xde, 0x24, 0x2a, 0xa2, 0xa3, 0x22, 0x23, 0x20,
+ 0xa4, 0x20, 0x2f, 0x41, 0x42, 0x43, 0x44, 0x45,
+ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d,
+ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
+ 0x56, 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63,
+ 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
+ 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73,
+ 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x20,
+ 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00
+};
+const struct OamData sWirelessStatusIndicatorOamData = {
+ .size = 1
+};
+static const union AnimCmd sWirelessStatusIndicatorAnim0[] = {
+ // 3 bars
+ ANIMCMD_FRAME( 4, 5),
+ ANIMCMD_FRAME( 8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(16, 10),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME( 8, 5),
+ ANIMCMD_JUMP(0)
+};
+static const union AnimCmd sWirelessStatusIndicatorAnim1[] = {
+ // 2 bars
+ ANIMCMD_FRAME( 4, 5),
+ ANIMCMD_FRAME( 8, 5),
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_FRAME( 8, 5),
+ ANIMCMD_JUMP(0)
+};
+static const union AnimCmd sWirelessStatusIndicatorAnim2[] = {
+ // 1 bar
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_JUMP(0)
+};
+static const union AnimCmd sWirelessStatusIndicatorAnim3[] = {
+ // searching
+ ANIMCMD_FRAME( 4, 10),
+ ANIMCMD_FRAME(20, 10),
+ ANIMCMD_JUMP(0)
+};
+static const union AnimCmd sWirelessStatusIndicatorAnim4[] = {
+ // error
+ ANIMCMD_FRAME(24, 10),
+ ANIMCMD_FRAME( 4, 10),
+ ANIMCMD_JUMP(0)
+};
+static const union AnimCmd *const sWirelessStatusIndicatorAnims[] = {
+ sWirelessStatusIndicatorAnim0,
+ sWirelessStatusIndicatorAnim1,
+ sWirelessStatusIndicatorAnim2,
+ sWirelessStatusIndicatorAnim3,
+ sWirelessStatusIndicatorAnim4
+};
+const struct CompressedSpriteSheet sWirelessStatusIndicatorSpriteSheet = {
+ gWirelessLinkIconPic, 0x0380, 0xD431
+};
+const struct SpritePalette sWirelessStatusIndicatorSpritePalette = {
+ gWirelessLinkIconPalette, 0xD432
+};
+static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
+ 0xD431,
+ 0xD432,
+ &sWirelessStatusIndicatorOamData,
+ sWirelessStatusIndicatorAnims,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+const struct UnkLinkRfuStruct_02022B2C gUnknown_082ED608 = {
+ 0x04, 0x20, 0x00, 0x00, 0x02,
+ &gUnknown_02022B14,
+ gUnknown_02022B22,
+ 0x01, 0x00, 0x258, 0x12c
+};
+const u8 gUnknown_082ED620[] = {
+ 0, 3, 2, 1, 0
+};
+const u32 gUnknown_082ED628[] = {
+ 0x000000,
+ 0x000001,
+ 0x000003,
+ 0x000007,
+ 0x00000f,
+ 0x00001f,
+ 0x00003f,
+ 0x00007f,
+ 0x0000ff,
+ 0x0001ff,
+ 0x0003ff,
+ 0x0007ff,
+ 0x000fff,
+ 0x001fff,
+ 0x003fff,
+ 0x007fff,
+ 0x00ffff,
+ 0x01ffff,
+ 0x03ffff,
+ 0x07ffff,
+ 0x0fffff,
+ 0x1fffff,
+ 0x3fffff,
+ 0x7fffff,
+ 0xffffff
+};
+const u8 gUnknown_082ED68C[] = {
+ 0, 0, 1,
+ 1, 2, 2,
+ 2, 2, 3
+};
+const u8 gUnknown_082ED695[] = {
+ 0, 1, 1, 2,
+ 1, 2, 2, 3,
+ 1, 2, 2, 3,
+ 2, 3, 3, 4
+};
+const u8 gUnknown_082ED6A5[] = {
+ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
+};
+const struct {
+ u8 *buffer;
+ u32 size;
+} gUnknown_082ED6B8[] = {
+ { gBlockSendBuffer, 200 },
+ { gBlockSendBuffer, 200 },
+ { gBlockSendBuffer, 100 },
+ { gBlockSendBuffer, 220 },
+ { gBlockSendBuffer, 40 }
+};
+const u16 gUnknown_082ED6E0[] = {
+ 0x0002, 0x7f7d, 0x0000, 0xffff
+};
+
+const char sUnref_082ED6E8[][15] = {
+ "RFU WAIT",
+ "RFU BOOT",
+ "RFU ERROR",
+ "RFU RESET",
+ "RFU CONFIG",
+ "RFU START",
+ "RFU SC POLL",
+ "RFU SP POLL",
+ "RFU START",
+ "RFU SEND ERR",
+ "RFU CP POLL"
+};
+const char sUnref_082ED6E9[][16] = {
+ " ",
+ "RECOVER START ",
+ "DISSCONECT ",
+ "RECOVER SUUSES",
+ "RECOVER FAILED"
+};
+const TaskFunc gUnknown_082ED7E0[] = {
+ sub_801084C,
+ sub_8010AAC,
+ sub_8010D0C
+};
+const char gUnknown_082ED7EC[] = "PokemonSioInfo";
+const char gUnknown_082ED7FC[] = "LINK LOSS DISCONNECT!";
+const char gUnknown_082ED814[] = "LINK LOSS RECOVERY NOW";
+
+// .text
+
+u32 sub_800BEC0(void)
+{
+ u32 r4;
+
+ r4 = rfu_REQBN_softReset_and_checkID();
+ if (r4 == 0x8001)
+ {
+ gUnknown_03004140.unk_08 = 1;
+ }
+ if (gUnknown_03004140.unk_04 != 0x17 && gUnknown_03004140.unk_04 != 0x01)
+ {
+ gUnknown_03004140.unk_05 = 0;
+ gUnknown_03004140.unk_04 = 0;
+ }
+ gUnknown_03004140.unk_07 = 0;
+ gUnknown_03004140.unk_0d = 0;
+ gUnknown_03004140.unk_01 = 0;
+ gUnknown_03004140.unk_00 = 0;
+ gUnknown_03004140.unk_06 = -1;
+ sub_800D610();
+ return r4;
+}
+
+void rfu_REQ_sendData_wrapper(u8 r2)
+{
+ u8 val;
+ if (!gUnknown_03007890->unk_00)
+ {
+ val = gUnknown_03004140.unk_02;
+ r2 = 0;
+ if (val == 1)
+ {
+ r2 = 1;
+ }
+ }
+ else
+ {
+ gUnknown_03004140.unk_03 = 0;
+ }
+ rfu_REQ_sendData(r2);
+}
+
+int sub_800BF4C(void (*func1)(u8, u8), void (*func2)(u16))
+{
+ if (func1 == NULL)
+ {
+ return 4;
+ }
+ CpuFill16(0, &gUnknown_03004140, offsetof(struct UnkRfuStruct_1, filler_48));
+ gUnknown_03004140.unk_06 = -1;
+ gUnknown_03004140.unk_40 = func1;
+ gUnknown_03004140.unk_44 = func2;
+ rfu_setMSCCallback(sub_800CEB0);
+ rfu_setREQCallback(sub_800C7B4);
+ return 0;
+}
+
+void sub_800BFA0(void)
+{
+ CpuFill16(0, &gUnknown_03004140, offsetof(struct UnkRfuStruct_1, unk_40));
+ gUnknown_03004140.unk_06 = -1;
+}
+
+void sub_800BFCC(const struct UnkLinkRfuStruct_02022B2C *unk0)
+{
+ sub_800C000();
+ gUnknown_03004140.unk_04 = 1;
+ gUnknown_03004140.unk_05 = 2;
+ gUnknown_03004140.unk_3c = unk0;
+ gUnknown_03004140.unk_09 = unk0->unk_11;
+ gUnknown_03004140.unk_32 = unk0->unk_12;
+ gUnknown_03004140.unk_18 = unk0->unk_14;
+ if (unk0->unk_10)
+ {
+ gUnknown_03004140.unk_0b = 1;
+ }
+}
+
+static void sub_800C000(void)
+{
+ u8 i;
+
+ gUnknown_03004140.unk_05 = 0;
+ gUnknown_03004140.unk_04 = 0;
+ gUnknown_03004140.unk_06 = -1;
+ gUnknown_03004140.unk_07 = 0;
+ gUnknown_03004140.unk_10 = 0;
+ gUnknown_03004140.unk_0c = 0;
+ gUnknown_03004140.unk_24 = 0;
+ gUnknown_03004140.unk_30 = 0;
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_03004140.unk_28[i] = 0;
+ gUnknown_03004140.unk_34[i] = 0;
+ }
+}
+
+void sub_800C048(void)
+{
+ gUnknown_03004140.unk_04 = 0x15;
+}
+
+u8 sub_800C054(u8 r5, u16 r7, u16 r8, const u16 *r6)
+{
+ u8 i;
+ const u16 *buffer;
+
+ if (gUnknown_03004140.unk_04 != 0 && (gUnknown_03004140.unk_04 != 0x08 || r5 != 1))
+ {
+ gUnknown_03004140.unk_14 = 1;
+ sub_800D30C(0xf3, 0x01);
+ return 1;
+ }
+ if (!rfu_getMasterSlave())
+ {
+ gUnknown_03004140.unk_14 = 2;
+ sub_800D30C(0xf3, 0x01);
+ return 2;
+ }
+ for (i = 0, buffer = r6; i < 16; i++)
+ {
+ if (*buffer++ == 0xFFFF)
+ {
+ break;
+ }
+ }
+ if (i == 16)
+ {
+ gUnknown_03004140.unk_14 = 4;
+ sub_800D30C(0xf3, 0x01);
+ return 4;
+ }
+ if (r5 > 1)
+ {
+ gUnknown_03004140.unk_07 = 1;
+ r5 = 1;
+ r7 = 0;
+ }
+ else
+ {
+ gUnknown_03004140.unk_07 = 0;
+ }
+ if (r5 != 0)
+ {
+ gUnknown_03004140.unk_04 = 5;
+ }
+ else
+ {
+ gUnknown_03004140.unk_04 = 9;
+ if (gUnknown_03004140.unk_0b)
+ {
+ gUnknown_03004140.unk_0b = 2;
+ }
+ }
+ gUnknown_03004140.unk_06 = r5;
+ gUnknown_03004140.unk_1a = r7;
+ gUnknown_03004140.unk_26 = r8;
+ gUnknown_03004140.unk_20 = r6;
+ return 0;
+}
+
+u8 sub_800C12C(u16 r6, u16 r8)
+{
+ u8 i;
+ struct RfuUnk5 *tmp;
+
+ if (gUnknown_03004140.unk_04 != 0 && (gUnknown_03004140.unk_04 < 9 || gUnknown_03004140.unk_04 > 11))
+ {
+ gUnknown_03004140.unk_14 = 1;
+ sub_800D30C(0xF3, 0x01);
+ return 1;
+ }
+ if (!rfu_getMasterSlave())
+ {
+ gUnknown_03004140.unk_14 = 2;
+ sub_800D30C(0xF3, 0x01);
+ return 2;
+ }
+ for (i = 0; i < gUnknown_03007890->unk_08; i++)
+ {
+ if (gUnknown_03007890->unk_14[i].unk_00 == r6)
+ {
+ break;
+ }
+ }
+ if (gUnknown_03007890->unk_08 == 0 || i == gUnknown_03007890->unk_08)
+ {
+ gUnknown_03004140.unk_14 = 3;
+ sub_800D30C(0xF3, 0x01);
+ return 3;
+ }
+ if (gUnknown_03004140.unk_04 == 0 || gUnknown_03004140.unk_04 == 9)
+ {
+ gUnknown_03004140.unk_04 = 12;
+ gUnknown_03004140.unk_05 = 13;
+ }
+ else
+ {
+ gUnknown_03004140.unk_04 = 11;
+ gUnknown_03004140.unk_05 = 12;
+ }
+ gUnknown_03004140.unk_1e = r6;
+ gUnknown_03004140.unk_1a = r8;
+ if (gUnknown_03004140.unk_07 != 0)
+ {
+ gUnknown_03004140.unk_07 = 7;
+ }
+ return 0;
+}
+
+void sub_800C210(u8 a0)
+{
+ u8 i;
+
+ if (a0 & gUnknown_03004140.unk_30)
+ {
+ gUnknown_03004140.unk_30 &= ~a0;
+ for (i = 0; i < 4; i++)
+ {
+ if ((a0 >> i) & 1)
+ {
+ gUnknown_03004140.unk_34[i] = 0;
+ }
+ }
+ i = gUnknown_03007890->unk_03 & a0;
+ if (i)
+ {
+ sub_800D334(i);
+ }
+ gUnknown_03004140.unk_14 = i;
+ sub_800D30C(0x33, i);
+ }
+}
+
+void sub_800C27C(bool8 a0)
+{
+ u8 r2;
+
+ r2 = 0;
+ gUnknown_03004140.unk_07 = 0;
+ if (a0)
+ {
+ sub_800C000();
+ gUnknown_03004140.unk_04 = 23;
+ }
+ else
+ {
+ switch (gUnknown_03004140.unk_04)
+ {
+ case 5:
+ gUnknown_03004140.unk_04 = 8;
+ gUnknown_03004140.unk_05 = 0;
+ r2 = 0x13;
+ break;
+ case 6:
+ gUnknown_03004140.unk_04 = 7;
+ gUnknown_03004140.unk_05 = 8;
+ break;
+ case 7:
+ gUnknown_03004140.unk_04 = 7;
+ gUnknown_03004140.unk_05 = 8;
+ break;
+ case 8:
+ break;
+ case 9:
+ gUnknown_03004140.unk_05 = 0;
+ gUnknown_03004140.unk_04 = 0;
+ r2 = 0x21;
+ break;
+ case 10:
+ gUnknown_03004140.unk_04 = 11;
+ gUnknown_03004140.unk_05 = 0;
+ break;
+ case 11:
+ gUnknown_03004140.unk_04 = 11;
+ gUnknown_03004140.unk_05 = 0;
+ break;
+ case 12:
+ gUnknown_03004140.unk_05 = 0;
+ gUnknown_03004140.unk_04 = 0;
+ r2 = 0x23;
+ break;
+ case 13:
+ gUnknown_03004140.unk_04 = 14;
+ break;
+ case 14:
+ gUnknown_03004140.unk_04 = 14;
+ break;
+ case 15:
+ break;
+ case 16:
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_11;
+ gUnknown_03004140.unk_05 = gUnknown_03004140.unk_12;
+ sub_800D334(gUnknown_03007890->unk_03);
+ gUnknown_03004140.unk_14 = gUnknown_03007890->unk_03;
+ sub_800D30C(0x33, 0x01);
+ return;
+ case 17:
+ gUnknown_03004140.unk_04 = 18;
+ break;
+ case 18:
+ gUnknown_03004140.unk_04 = 18;
+ break;
+ default:
+ gUnknown_03004140.unk_05 = 0;
+ gUnknown_03004140.unk_04 = 0;
+ r2 = 0x43;
+ break;
+ }
+ if (gUnknown_03004140.unk_04 == 0)
+ {
+ sub_800D30C(r2, 0);
+ }
+ }
+}
+
+bool8 sub_800C36C(u16 a0)
+{
+ bool8 retVal;
+ u8 i;
+ u8 sp0;
+ u8 sp1;
+ u8 sp2;
+ u8 flags;
+
+ retVal = FALSE;
+ rfu_REQBN_watchLink(a0, &sp0, &sp1, &sp2);
+ if (sp0)
+ {
+ gUnknown_03004140.unk_14 = sp0;
+ gUnknown_03004140.unk_16 = sp1;
+ if (gUnknown_03004140.unk_09)
+ {
+ gUnknown_03004140.unk_0a = 1;
+ if (gUnknown_03004140.unk_06 == 0 && sp1 == 0)
+ {
+ gUnknown_03004140.unk_0a = 4;
+ }
+ if (gUnknown_03004140.unk_0a == 1)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if ((sp0 >> i) & 1)
+ {
+ gUnknown_03004140.unk_30 |= (1 << i);
+ gUnknown_03004140.unk_34[i] = gUnknown_03004140.unk_32;
+ }
+ }
+ sub_800D30C(0x31, 0x01);
+ }
+ else
+ {
+ gUnknown_03004140.unk_0a = 0;
+ sub_800D334(sp0);
+ retVal = TRUE;
+ sub_800D30C(0x33, 0x01);
+ }
+ }
+ else
+ {
+ sub_800D334(sp0);
+ retVal = TRUE;
+ sub_800D30C(0x30, 0x02);
+ }
+ sub_800D610();
+ }
+ if (gUnknown_03007890->unk_00 == 1)
+ {
+ if (sp2)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_03004140.unk_30 >> i) & 1 && (sp2 >> i) & 1)
+ {
+ gUnknown_03004140.unk_34[i] = 0;
+ }
+ }
+ gUnknown_03004140.unk_30 &= ~sp2;
+ gUnknown_03004140.unk_14 = sp2;
+ sub_800D30C(0x32, 0x01);
+ }
+ if (gUnknown_03004140.unk_30)
+ {
+ flags = 0;
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_03004140.unk_30 >> i) & 1 && gUnknown_03004140.unk_34[i] && --gUnknown_03004140.unk_34[i] == 0)
+ {
+ gUnknown_03004140.unk_30 &= ~(1 << i);
+ flags |= (1 << i);
+ }
+ }
+ if (flags)
+ {
+ sub_800D334(flags);
+ retVal = TRUE;
+ gUnknown_03004140.unk_14 = flags;
+ sub_800D30C(0x33, 0x01);
+ }
+ }
+ if (!gUnknown_03004140.unk_30)
+ {
+ gUnknown_03004140.unk_0a = 0;
+ }
+ }
+ return retVal;
+}
+
+void rfu_syncVBlank_(void)
+{
+ if (rfu_syncVBlank())
+ {
+ sub_800D30C(0xF1, 0x00);
+ sub_800D610();
+ }
+}
+
+void sub_800C54C(u32 a0)
+{
+ u8 r2;
+
+ if (gUnknown_03004140.unk_40 == NULL && gUnknown_03004140.unk_04 != 0)
+ {
+ gUnknown_03004140.unk_04 = 0;
+ }
+ else
+ {
+ if (gUnknown_03004140.unk_07 != 0)
+ {
+ sub_800C744(a0);
+ }
+ do
+ {
+ if (gUnknown_03004140.unk_04 != 0)
+ {
+ rfu_waitREQComplete();
+ gUnknown_03004140.unk_0e = 1;
+ switch (gUnknown_03004140.unk_04)
+ {
+ case 23:
+ r2 = sub_800BEC0() == 0x8001 ? 0x44 : 0xFF;
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D30C(r2, 0);
+ break;
+ case 1:
+ if (sub_800BEC0() == 0x8001)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05;
+ gUnknown_03004140.unk_05 = 3;
+ }
+ else
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D30C(0xFF, 0);
+ }
+ break;
+ case 2:
+ rfu_REQ_reset();
+ break;
+ case 3:
+ rfu_REQ_configSystem(gUnknown_03004140.unk_3c->unk_02, gUnknown_03004140.unk_3c->unk_00, gUnknown_03004140.unk_3c->unk_01);
+ break;
+ case 4:
+ rfu_REQ_configGameData(gUnknown_03004140.unk_3c->unk_04, gUnknown_03004140.unk_3c->unk_06, gUnknown_03004140.unk_3c->unk_08, gUnknown_03004140.unk_3c->unk_0c);
+ break;
+ case 5:
+ rfu_REQ_startSearchChild();
+ break;
+ case 6:
+ rfu_REQ_pollSearchChild();
+ break;
+ case 7:
+ rfu_REQ_endSearchChild();
+ break;
+ case 8:
+ break;
+ case 9:
+ rfu_REQ_startSearchParent();
+ break;
+ case 10:
+ rfu_REQ_pollSearchParent();
+ break;
+ case 11:
+ rfu_REQ_endSearchParent();
+ break;
+ case 12:
+ rfu_REQ_startConnectParent(gUnknown_03004140.unk_1e);
+ break;
+ case 13:
+ rfu_REQ_pollConnectParent();
+ break;
+ case 14:
+ rfu_REQ_endConnectParent();
+ break;
+ case 15:
+ break;
+ case 16:
+ rfu_REQ_CHILD_startConnectRecovery(gUnknown_03007890->unk_03);
+ break;
+ case 17:
+ rfu_REQ_CHILD_pollConnectRecovery();
+ break;
+ case 18:
+ rfu_REQ_CHILD_endConnectRecovery();
+ break;
+ case 19:
+ rfu_REQ_changeMasterSlave();
+ break;
+ case 20:
+ break;
+ case 21:
+ rfu_REQ_stopMode();
+ break;
+ case 22:
+ break;
+ }
+ rfu_waitREQComplete();
+ gUnknown_03004140.unk_0e = 0;
+ }
+ } while (gUnknown_03004140.unk_04 == 18 || gUnknown_03004140.unk_04 == 19);
+ if (gUnknown_03007890->unk_00 != 1 || !sub_800C36C(0))
+ {
+ sub_800CF34();
+ sub_800D158();
+ sub_800D268();
+ sub_800D434();
+ }
+ }
+}
+
+static void sub_800C744(u32 a0)
+{
+ if (gUnknown_03004140.unk_07 == 5)
+ {
+ gUnknown_03004140.unk_06 = 1;
+ gUnknown_03004140.unk_04 = 5;
+ gUnknown_03004140.unk_1a = gUnknown_03004140.unk_1c;
+ if (gUnknown_03004140.unk_1a)
+ {
+ gUnknown_03004140.unk_07 = 6;
+ }
+ else
+ {
+ gUnknown_03004140.unk_07 = 1;
+ }
+ }
+ if (gUnknown_03004140.unk_07 == 1)
+ {
+ gUnknown_03004140.unk_06 = 1;
+ gUnknown_03004140.unk_04 = 5;
+ gUnknown_03004140.unk_1a = a0 % 140;
+ gUnknown_03004140.unk_1c = 140 - gUnknown_03004140.unk_1a;
+ if (gUnknown_03004140.unk_1a)
+ {
+ gUnknown_03004140.unk_07 = 2;
+ }
+ else
+ {
+ gUnknown_03004140.unk_07 = 3;
+ }
+ }
+ if (gUnknown_03004140.unk_07 == 3)
+ {
+ gUnknown_03004140.unk_06 = 0;
+ gUnknown_03004140.unk_1a = 40;
+ gUnknown_03004140.unk_07 = 4;
+ gUnknown_03004140.unk_04 = 9;
+ }
+}
+
+static void sub_800C7B4(u16 r8, u16 r6)
+{
+ u8 sp0;
+ register u8 *stwiRecvBuffer asm("r0");
+ u8 *tmp;
+ u8 i;
+
+ if (gUnknown_03004140.unk_0e != 0)
+ {
+ gUnknown_03004140.unk_0e = 0;
+ switch (r8)
+ {
+ case 16:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05;
+ gUnknown_03004140.unk_05 = 4;
+ }
+ break;
+ case 23:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05;
+ gUnknown_03004140.unk_05 = 0;
+ }
+ break;
+ case 22:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D30C(0x00, 0x00);
+ }
+ break;
+ case 25:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 6;
+ }
+ break;
+ case 26:
+ if (gUnknown_03004140.unk_1a && --gUnknown_03004140.unk_1a == 0)
+ {
+ gUnknown_03004140.unk_04 = 7;
+ gUnknown_03004140.unk_05 = 8;
+ }
+ break;
+ case 27:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05;
+ gUnknown_03004140.unk_05 = 0;
+ if (gUnknown_03004140.unk_07 == 0)
+ {
+ sub_800D30C(0x13, 0x00);
+ }
+ }
+ break;
+ case 28:
+ if (r6 == 0)
+ {
+ if (gUnknown_03004140.unk_0b == 1 && gUnknown_03004140.unk_1a > 1)
+ {
+ gUnknown_03004140.unk_1a--;
+ }
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 10;
+ }
+ break;
+ case 29:
+ if (r6 == 0)
+ {
+ sp0 = sub_800D294();
+ gUnknown_03004140.unk_14 = sp0;
+ if (sp0)
+ {
+ sub_800D30C(0x20, 0x01);
+ }
+ if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gUnknown_03007890->unk_08 == 4)
+ {
+ rfu_REQ_endSearchParent();
+ rfu_waitREQComplete();
+ gUnknown_03004140.unk_04 = 9;
+ gUnknown_03004140.unk_0b = 1;
+ }
+ }
+ if (gUnknown_03004140.unk_1a && --gUnknown_03004140.unk_1a == 0)
+ {
+ gUnknown_03004140.unk_04 = 11;
+ gUnknown_03004140.unk_05 = 0;
+ }
+ break;
+ case 30:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05;
+ if (gUnknown_03004140.unk_07 == 0)
+ {
+ if (gUnknown_03004140.unk_04 == 0)
+ {
+ sub_800D30C(0x21, 0x00);
+ }
+ }
+ else if (gUnknown_03004140.unk_07 != 7)
+ {
+ gUnknown_03004140.unk_04 = 5;
+ gUnknown_03004140.unk_07 = 5;
+ }
+ }
+ break;
+ case 31:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 13;
+ }
+ break;
+ case 32:
+ if (r6 == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_03004140.unk_10) && !sp0)
+ {
+ gUnknown_03004140.unk_04 = 14;
+ }
+ if (gUnknown_03004140.unk_1a && --gUnknown_03004140.unk_1a == 0)
+ {
+ gUnknown_03004140.unk_04 = 14;
+ }
+ break;
+ case 33:
+ if (r6 == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_03004140.unk_10))
+ {
+ if (!sp0)
+ {
+ gUnknown_03004140.unk_04 = 19;
+ gUnknown_03004140.unk_05 = 15;
+ gUnknown_03004140.unk_1e = 0x22;
+ gUnknown_03004140.unk_14 = gUnknown_03004140.unk_10;
+ }
+ else
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ gUnknown_03004140.unk_1e = 0x23;
+ gUnknown_03004140.unk_14 = sp0;
+ if (gUnknown_03004140.unk_07)
+ {
+ gUnknown_03004140.unk_07 = 3;
+ gUnknown_03004140.unk_04 = 9;
+ }
+ }
+ sub_800D30C(gUnknown_03004140.unk_1e, 0x01);
+ gUnknown_03004140.unk_1e = 0;
+ }
+ break;
+ case 50:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_14 = gUnknown_03007890->unk_03;
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 17;
+ for (gUnknown_03004140.unk_10 = 0; gUnknown_03004140.unk_10 < 4; gUnknown_03004140.unk_10 ++)
+ {
+ if ((gUnknown_03007890->unk_03 >> gUnknown_03004140.unk_10) & 1)
+ {
+ break;
+ }
+ }
+ }
+ break;
+ case 51:
+ if (r6 == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0) && sp0 < 2)
+ {
+ gUnknown_03004140.unk_04 = 18;
+ }
+ if (gUnknown_03004140.unk_34[gUnknown_03004140.unk_10] && --gUnknown_03004140.unk_34[gUnknown_03004140.unk_10] == 0)
+ {
+ gUnknown_03004140.unk_04 = 18;
+ }
+ break;
+ case 52:
+ if (r6 == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0))
+ {
+ if (!sp0)
+ {
+ gUnknown_03004140.unk_04 = 19;
+ gUnknown_03004140.unk_05 = 22;
+ gUnknown_03004140.unk_1e = 0x32;
+ }
+ else
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D334(gUnknown_03007890->unk_03);
+ gUnknown_03004140.unk_1e = 0x33;
+ }
+ gUnknown_03004140.unk_34[gUnknown_03004140.unk_10] = 0;
+ gUnknown_03004140.unk_30 = 0;
+ gUnknown_03004140.unk_0a = 0;
+ sub_800D30C(gUnknown_03004140.unk_1e, 0x01);
+ gUnknown_03004140.unk_1e = 0;
+ }
+ break;
+ case 39:
+ if (r6 == 0)
+ {
+ if (gUnknown_03004140.unk_05 == 22)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_11;
+ gUnknown_03004140.unk_05 = gUnknown_03004140.unk_12;
+ gUnknown_03004140.unk_02 = 1;
+ sub_800D30C(0x41, 0x00);
+ }
+ else if (gUnknown_03004140.unk_05 == 15)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05;
+ gUnknown_03004140.unk_02 = 1;
+ sub_800D30C(0x41, 0x00);
+ gUnknown_03004140.unk_24 |= 1 << gUnknown_03004140.unk_10;
+ gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] = gUnknown_03004140.unk_26;
+ rfu_clearSlot(4, gUnknown_03004140.unk_10);
+ tmp = &sp0;
+ *tmp = rfu_NI_CHILD_setSendGameName(gUnknown_03004140.unk_10, 0x0e);
+ if (*tmp)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D610();
+ sub_800D334(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03);
+ gUnknown_03004140.unk_14 = sp0;
+ sub_800D30C(0x25, 0x01);
+ }
+ }
+ }
+ break;
+ case 61:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D30C(0x42, 0x00);
+ }
+ break;
+ }
+ gUnknown_03004140.unk_0e = 1;
+ }
+ else if (r6 == 3 && gUnknown_03004140.unk_0f && (r8 == 0x24 || r8 == 0x26 || r8 == 0x27))
+ {
+ rfu_REQ_RFUStatus();
+ rfu_waitREQComplete();
+ rfu_getRFUStatus(&sp0);
+ if (sp0 == 0 && gUnknown_03007890->unk_00 == 0)
+ {
+ stwiRecvBuffer = rfu_getSTWIRecvBuffer();
+ stwiRecvBuffer[4] = gUnknown_03007890->unk_02;
+ stwiRecvBuffer[5] = 1;
+ sub_800C36C(0x29);
+ r6 = 0;
+ }
+ }
+ switch (r8)
+ {
+ case 48:
+ if (r6 == 0)
+ {
+ stwiRecvBuffer = rfu_getSTWIRecvBuffer();
+ gUnknown_03004140.unk_14 = stwiRecvBuffer[8];
+ sub_800D358(gUnknown_03004140.unk_14);
+ if (gUnknown_03004140.unk_30)
+ {
+ gUnknown_03004140.unk_30 &= ~gUnknown_03004140.unk_14;
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_03004140.unk_14 >> i) & 1)
+ {
+ gUnknown_03004140.unk_34[i] = 0;
+ }
+ }
+ if (gUnknown_03004140.unk_06 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ }
+ }
+ sp0 = gUnknown_03004140.unk_00 & gUnknown_03004140.unk_14;
+ for (i = 0; i < 4; i++)
+ {
+ if ((sp0 >> i) & 1 && gUnknown_03004140.unk_01)
+ {
+ gUnknown_03004140.unk_01--;
+ }
+ }
+ gUnknown_03004140.unk_00 &= ~gUnknown_03004140.unk_14;
+ if (gUnknown_03004140.unk_07)
+ {
+ if (gUnknown_03007890->unk_00 == 0xFF)
+ {
+ if (gUnknown_03004140.unk_07 == 8)
+ {
+ gUnknown_03004140.unk_1a = gUnknown_03004140.unk_1c;
+ gUnknown_03004140.unk_07 = 6;
+ gUnknown_03004140.unk_04 = 6;
+ }
+ else if (gUnknown_03004140.unk_04 != 6 && gUnknown_03004140.unk_04 != 7)
+ {
+ gUnknown_03004140.unk_07 = 1;
+ gUnknown_03004140.unk_04 = 5;
+ }
+ }
+ }
+ if (gUnknown_03007890->unk_00 == 0xFF)
+ {
+ if (gUnknown_03004140.unk_04 == 0)
+ {
+ gUnknown_03004140.unk_06 = -1;
+ }
+ }
+ if (gUnknown_03004140.unk_0e == 0)
+ {
+ sub_800D30C(0x40, 0x01);
+ }
+ }
+ break;
+ case 38:
+ sub_800D20C();
+ if (gUnknown_03007890->unk_00 != 0xFF)
+ {
+ sub_800D30C(0x50, 0x00);
+ }
+ break;
+ case 16:
+ case 61:
+ if (r6 == 0)
+ {
+ gUnknown_03004140.unk_0d = 0;
+ gUnknown_03004140.unk_01 = 0;
+ gUnknown_03004140.unk_00 = 0;;
+ gUnknown_03004140.unk_06 = -1;
+ sub_800D610();
+ if (r8 == 61)
+ {
+ sub_800BFA0();
+ }
+ }
+ break;
+ }
+ if (r6 != 0)
+ {
+ if (r8 == 28 && r6 != 0 && gUnknown_03004140.unk_07 == 4)
+ {
+ gUnknown_03007890->unk_00 = 1;
+ gUnknown_03007890->unk_02 = 15;
+ sub_800D334(15);
+ rfu_waitREQComplete();
+ return;
+ }
+ else
+ {
+ gUnknown_03004140.unk_14 = r8;
+ gUnknown_03004140.unk_16 = r6;
+ if (gUnknown_03004140.unk_0e)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ }
+ sub_800D30C(0xf0, 0x02);
+ sub_800D610();
+ }
+ }
+ if (r8 == 0xFF)
+ {
+ sub_800D30C(0xf2, 0x00);
+ sub_800D610();
+ }
+}
+
+static void sub_800CEB0(u16 r6)
+{
+ u8 r7;
+ u8 sp0;
+
+ r7 = gUnknown_03004140.unk_0e;
+ gUnknown_03004140.unk_0e = 0;
+ gUnknown_03004140.unk_0f = 1;
+ if (gUnknown_03007890->unk_00 == 0)
+ {
+ sub_800C36C(r6);
+ if (gUnknown_03004140.unk_02 != 1)
+ {
+ sub_800D610();
+ gUnknown_03004140.unk_0f = 0;
+ gUnknown_03004140.unk_0e = r7;
+ return;
+ }
+ }
+ else
+ {
+ if (!rfu_UNI_PARENT_getDRAC_ACK(&sp0))
+ {
+ gUnknown_03004140.unk_03 |= sp0;
+ }
+ }
+ if (gUnknown_03004140.unk_44 != NULL)
+ {
+ gUnknown_03004140.unk_44(r6);
+ rfu_waitREQComplete();
+ if (gUnknown_03004140.unk_02 == 2)
+ {
+ sub_800D610();
+ }
+ }
+ gUnknown_03004140.unk_0f = 0;
+ gUnknown_03004140.unk_0e = r7;
+}
+
+static void sub_800CF34(void)
+{
+ u8 flags;
+ u8 sp0;
+ u8 i;
+ u8 r5;
+ u8 r4;
+ const u16 *ptr;
+
+ if (gUnknown_03004140.unk_04 == 5 || gUnknown_03004140.unk_04 == 6 || gUnknown_03004140.unk_04 == 7 || gUnknown_03004140.unk_04 == 8)
+ {
+ flags = ((gUnknown_03007890->unk_02 ^ gUnknown_03004140.unk_0c) & gUnknown_03007890->unk_02) & ~gUnknown_03007890->unk_07;
+ gUnknown_03004140.unk_0c = gUnknown_03007890->unk_02;
+ if (flags)
+ {
+ gUnknown_03004140.unk_14 = flags;
+ sub_800D30C(0x10, 0x01);
+ }
+ sp0 = 0x00;
+ for (i = 0; i < 4; i++)
+ {
+ r4 = 1 << i;
+ r5 = 0x00;
+ if (flags & r4)
+ {
+ gUnknown_03004140.unk_28[i] = gUnknown_03004140.unk_26;
+ gUnknown_03004140.unk_24 |= r4;
+ }
+ else if (gUnknown_03004140.unk_24 & r4)
+ {
+ if (gUnknown_03007880[i]->unk_34 == 0x46)
+ {
+ if (gUnknown_03007880[i]->unk_61 == 1)
+ {
+ r5 = 0x02;
+ for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++)
+ {
+ if (gUnknown_03007890->unk_14[i].unk_04 == *ptr)
+ {
+ gUnknown_03004140.unk_00 |= r4;
+ gUnknown_03004140.unk_01++;
+ sp0 |= r4;
+ r5 |= 0x01;
+ break;
+ }
+ }
+ if (!(r5 & 0x01))
+ {
+ r5 |= 0x04;
+ }
+ }
+ }
+ else if (--gUnknown_03004140.unk_28[i] == 0)
+ {
+ r5 = 0x06;
+ }
+ if (r5 & 0x02)
+ {
+ gUnknown_03004140.unk_24 &= ~r4;
+ gUnknown_03004140.unk_28[i] = 0;
+ rfu_clearSlot(0x08, i);
+ }
+ if (r5 & 0x04)
+ {
+ gUnknown_03004140.unk_0d |= r4;
+ }
+ }
+ }
+ if (sp0)
+ {
+ gUnknown_03004140.unk_14 = sp0;
+ sub_800D30C(0x11, 0x01);
+ }
+ if (gUnknown_03004140.unk_0d)
+ {
+ r5 = 0x01;
+ if (gUnknown_03007890->unk_06 && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00))
+ {
+ r5 = 0x00;
+ }
+ if (r5)
+ {
+ sub_800D334(gUnknown_03004140.unk_0d);
+ gUnknown_03004140.unk_14 = gUnknown_03004140.unk_0d;
+ gUnknown_03004140.unk_0d = 0;
+ sub_800D30C(0x12, 0x01);
+ }
+ }
+ if (gUnknown_03004140.unk_24 == 0 && gUnknown_03004140.unk_04 == 8)
+ {
+ if (gUnknown_03004140.unk_07 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D30C(0x14, 0x00);
+ }
+ else
+ {
+ if (gUnknown_03004140.unk_07 == 2)
+ {
+ gUnknown_03004140.unk_07 = 3;
+ gUnknown_03004140.unk_04 = 9;
+ }
+ else
+ {
+ gUnknown_03004140.unk_07 = 1;
+ gUnknown_03004140.unk_04 = 5;
+ }
+ if (gUnknown_03004140.unk_00)
+ {
+ gUnknown_03004140.unk_1a = 0;
+ gUnknown_03004140.unk_07 = 8;
+ gUnknown_03004140.unk_04 = 5;
+ }
+ }
+ }
+ }
+}
+
+static void sub_800D158(void)
+{
+ u16 imeBak = REG_IME;
+ REG_IME = 0;
+ if (gUnknown_03004140.unk_04 == 15)
+ {
+ if (--gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] == 0 || gUnknown_03007880[gUnknown_03004140.unk_10]->unk_0 == 0x27)
+ {
+ sub_800D630();
+ gUnknown_03004140.unk_04 = 24;
+ rfu_clearSlot(4, gUnknown_03004140.unk_10);
+ gUnknown_03004140.unk_24 &= ~(1 << gUnknown_03004140.unk_10);
+ gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] = 0;
+ }
+ }
+ REG_IME = imeBak;
+ if (gUnknown_03004140.unk_04 == 24)
+ {
+ if (gUnknown_03004140.unk_02 == 1)
+ {
+ sub_800D630();
+ }
+ if (gUnknown_03004140.unk_02 == 0)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ sub_800D334(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03);
+ gUnknown_03004140.unk_14 = 0;
+ sub_800D30C(0x25, 0x01);
+ }
+ }
+}
+
+static void sub_800D20C(void)
+{
+ if (gUnknown_03004140.unk_04 == 15 && gUnknown_03007880[gUnknown_03004140.unk_10]->unk_0 == 0x26)
+ {
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ rfu_clearSlot(4, gUnknown_03004140.unk_10);
+ gUnknown_03004140.unk_24 &= ~(1 << gUnknown_03004140.unk_10);
+ gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] = 0;
+ sub_800D30C(0x24, 0x00);
+ }
+}
+
+static void sub_800D268(void)
+{
+ if (gUnknown_03004140.unk_06 == 0 && gUnknown_03004140.unk_0a == 1)
+ {
+ gUnknown_03004140.unk_11 = gUnknown_03004140.unk_04;
+ gUnknown_03004140.unk_12 = gUnknown_03004140.unk_05;
+ gUnknown_03004140.unk_04 = 16;
+ gUnknown_03004140.unk_05 = 17;
+ gUnknown_03004140.unk_0a = 2;
+ }
+}
+
+static u8 sub_800D294(void)
+{
+ u8 i;
+ const u16 *ptr;
+ u8 flags = 0x00;
+
+ for (i = 0; i < gUnknown_03007890->unk_08; i++)
+ {
+ for (ptr = gUnknown_03004140.unk_20; *ptr != 0xffff; ptr++)
+ {
+ if (gUnknown_03007890->unk_14[i].unk_04 == *ptr)
+ {
+ flags |= (1 << i);
+ }
+ }
+ }
+ return flags;
+}
+
+static void sub_800D30C(u8 a0, u8 a1)
+{
+ if (gUnknown_03004140.unk_40 != NULL)
+ {
+ gUnknown_03004140.unk_40(a0, a1);
+ }
+ gUnknown_03004140.unk_14 = gUnknown_03004140.unk_16 = 0;
+}
+
+static void sub_800D334(u8 a0)
+{
+ u8 unk_0e_bak = gUnknown_03004140.unk_0e;
+ gUnknown_03004140.unk_0e = 1;
+ rfu_REQ_disconnect(a0);
+ rfu_waitREQComplete();
+ gUnknown_03004140.unk_0e = unk_0e_bak;
+}
+
+static void sub_800D358(u8 a0)
+{
+ u8 i;
+
+ if (gUnknown_03007890->unk_04)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03007880[i]->unk_0 & 0x8000 && gUnknown_03007880[i]->unk_1a & a0)
+ {
+ rfu_changeSendTarget(0x20, i, gUnknown_03007880[i]->unk_1a & ~a0);
+ }
+ }
+ }
+ if (gUnknown_03007890->unk_05)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03007880[i]->unk_34 & 0x8000 && gUnknown_03007880[i]->unk_4e & a0)
+ {
+ rfu_NI_stopReceivingData(i);
+ }
+ }
+ }
+ if (gUnknown_03007890->unk_06)
+ {
+ gUnknown_03007890->unk_06 &= ~a0;
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03007870[i]->unk_0 == 0x8024 && a0 & gUnknown_03007870[i]->unk_3)
+ {
+ gUnknown_03007870[i]->unk_3 &= ~a0;
+ }
+ }
+ }
+}
+
+static void sub_800D434(void)
+{
+ u8 i;
+ u8 j;
+ u8 flags;
+
+ if (gUnknown_03004140.unk_18)
+ {
+ if (gUnknown_03007890->unk_04)
+ {
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_03007880[i]->unk_0 & 0x8000)
+ {
+ flags = 0;
+ for (j = 0; j < 4; j++)
+ {
+ if ((gUnknown_03007880[i]->unk_1a >> j) & 1 && gUnknown_03007880[j]->unk_2 > gUnknown_03004140.unk_18)
+ {
+ flags |= (1 << j);
+ }
+ if (flags)
+ {
+ rfu_changeSendTarget(0x20, i, flags ^ gUnknown_03007880[i]->unk_1a);
+ }
+ }
+ }
+ }
+ }
+ if (gUnknown_03007890->unk_05)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03007880[i]->unk_34 & 0x8000 && gUnknown_03007880[i]->unk_36 > gUnknown_03004140.unk_18)
+ {
+ rfu_NI_stopReceivingData(i);
+ }
+ }
+ }
+ }
+}
+
+void sub_800D52C(void (*func)(u16))
+{
+ gUnknown_03004140.unk_44 = func;
+ rfu_setMSCCallback(sub_800CEB0);
+}
+
+void sub_800D544(void (*func)(u8, u8))
+{
+ gUnknown_03004140.unk_40 = func;
+}
+
+u8 sub_800D550(u8 a0, u16 a1)
+{
+ u16 imeBak;
+ if (gUnknown_03004140.unk_09 && a0 == 0 && gUnknown_03004140.unk_30)
+ {
+ return 5;
+ }
+ imeBak = REG_IME;
+ REG_IME = 0;
+ gUnknown_03004140.unk_09 = a0;
+ gUnknown_03004140.unk_32 = a1;
+ REG_IME = imeBak;
+ return 0;
+}
+
+u8 sub_800D594(u16 a0)
+{
+ if (gUnknown_03007890->unk_04 | gUnknown_03007890->unk_05)
+ {
+ gUnknown_03004140.unk_14 = 6;
+ sub_800D30C(0xf3, 0x01);
+ return 6;
+ }
+ gUnknown_03004140.unk_18 = a0;
+ return 0;
+}
+
+u8 sub_800D5D0(u8 a0)
+{
+ if (gUnknown_03004140.unk_04 == 9 || gUnknown_03004140.unk_04 == 10 || gUnknown_03004140.unk_04 == 11)
+ {
+ gUnknown_03004140.unk_14 = 7;
+ sub_800D30C(0xf3, 0x01);
+ return 7;
+ }
+ if (a0)
+ {
+ gUnknown_03004140.unk_0b = 1;
+ }
+ else
+ {
+ gUnknown_03004140.unk_0b = 0;
+ }
+ return 0;
+}
+
+static void sub_800D610(void)
+{
+ if (gUnknown_03004140.unk_02)
+ {
+ gUnknown_03004140.unk_02 = 0;
+ sub_800D30C(0x45, 0x00);
+ }
+}
+
+void sub_800D630(void)
+{
+ if (gUnknown_03004140.unk_02 == 0)
+ {
+ sub_800D30C(0x45, 0x00);
+ }
+ else if (gUnknown_03004140.unk_02 == 1)
+ {
+ gUnknown_03004140.unk_02 = 2;
+ }
+}
+
+void sub_800D658(void)
+{
+ if (gUnknown_03004140.unk_07)
+ {
+ switch (gUnknown_03004140.unk_04)
+ {
+ case 5:
+ gUnknown_03004140.unk_07 = 3;
+ gUnknown_03004140.unk_04 = 9;
+ break;
+ case 6:
+ gUnknown_03004140.unk_07 = 2;
+ gUnknown_03004140.unk_1a = 1;
+ break;
+ case 7:
+ case 8:
+ gUnknown_03004140.unk_07 = 2;
+ break;
+ case 9:
+ case 10:
+ gUnknown_03004140.unk_1a = 40;
+ break;
+ case 11:
+ gUnknown_03004140.unk_1a = 40;
+ gUnknown_03004140.unk_04 = 10;
+ break;
+ }
+ }
+}
+
+// TODO: Is there a file boundary here?
+
+void sub_800D6C8(struct UnkRfuStruct_2_Sub_124 *ptr)
+{
+ int i;
+ int j;
+
+ for (i = 0; i < 32; i++)
+ {
+ for (j = 0; j < 70; j++)
+ {
+ ptr->unk_00[i][j] = 0;
+ }
+ }
+ ptr->unk_8c1 = 0;
+ ptr->unk_8c0 = 0;
+ ptr->unk_8c2 = 0;
+ ptr->unk_8c3 = 0;
+}
+
+void sub_800D724(struct UnkRfuStruct_2_Sub_9e8 *ptr)
+{
+ int i;
+ int j;
+
+ for (i = 0; i < 40; i++)
+ {
+ for (j = 0; j < 14; j++)
+ {
+ ptr->unk_00[i][j] = 0;
+ }
+ }
+ ptr->unk_231 = 0;
+ ptr->unk_230 = 0;
+ ptr->unk_232 = 0;
+ ptr->unk_233 = 0;
+}
+
+void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr)
+{
+ int i;
+ int j;
+
+ for (i = 0; i < 2; i++)
+ {
+ for (j = 0; j < 256; j++)
+ {
+ ptr->unk_00[i][j] = 0;
+ }
+ }
+ ptr->unk_201 = 0;
+ ptr->unk_200 = 0;
+ ptr->unk_202 = 0;
+ ptr->unk_203 = 0;
+}
+
+void sub_800D7D8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+{
+ int i;
+ u16 imeBak;
+ u8 count;
+
+ if (q1->unk_8c2 < 32)
+ {
+ imeBak = REG_IME;
+ REG_IME = 0;
+ count = 0;
+ for (i = 0; i < 70; i += 14)
+ {
+ if (q2[i] == 0 && q2[i + 1] == 0)
+ {
+ count++;
+ }
+ }
+ if (count != 5)
+ {
+ for (i = 0; i < 70; i++)
+ {
+ q1->unk_00[q1->unk_8c0][i] = q2[i];
+ }
+ q1->unk_8c0++;
+ q1->unk_8c0 %= 32;
+ q1->unk_8c2++;
+ for (i = 0; i < 70; i++)
+ {
+ q2[i] = 0;
+ }
+ }
+ REG_IME = imeBak;
+ }
+ else
+ {
+ q1->unk_8c3 = 1;
+ }
+}
+
+void sub_800D888(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+{
+ int i;
+ u16 imeBak;
+
+ if (q1->unk_232 < 40)
+ {
+ imeBak = REG_IME;
+ REG_IME = 0;
+ for (i = 0; i < 14; i++)
+ {
+ if (q2[i] != 0)
+ {
+ break;
+ }
+ }
+ if (i != 14)
+ {
+ for (i = 0; i < 14; i++)
+ {
+ q1->unk_00[q1->unk_230][i] = q2[i];
+ }
+ q1->unk_230++;
+ q1->unk_230 %= 40;
+ q1->unk_232++;
+ for (i = 0; i < 14; i++)
+ {
+ q2[i] = 0;
+ }
+ }
+ REG_IME = imeBak;
+ }
+ else
+ {
+ q1->unk_233 = 1;
+ }
+}
+
+bool8 sub_800D934(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+{
+ u16 imeBak;
+ int i;
+
+ imeBak = REG_IME;
+ REG_IME = 0;
+ if (q1->unk_8c0 == q1->unk_8c1 || q1->unk_8c3 != 0)
+ {
+ for (i = 0; i < 70; i++)
+ {
+ q2[i] = 0;
+ }
+ REG_IME = imeBak;
+ return FALSE;
+ }
+ for (i = 0; i < 70; i++)
+ {
+ q2[i] = q1->unk_00[q1->unk_8c1][i];
+ }
+ q1->unk_8c1++;
+ q1->unk_8c1 %= 32;
+ q1->unk_8c2--;
+ REG_IME = imeBak;
+ return TRUE;
+}
+
+bool8 sub_800D9DC(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+{
+ int i;
+ u16 imeBak;
+
+ if (q1->unk_230 == q1->unk_231 || q1->unk_233 != 0)
+ {
+ return FALSE;
+ }
+ imeBak = REG_IME;
+ REG_IME = 0;
+ for (i = 0; i < 14; i++)
+ {
+ q2[i] = q1->unk_00[q1->unk_231][i];
+ }
+ q1->unk_231++;
+ q1->unk_231 %= 40;
+ q1->unk_232--;
+ REG_IME = imeBak;
+ return TRUE;
+}
+
+void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2)
+{
+ int i;
+
+ if (q2[1] == 0)
+ {
+ sub_800DAC8(q1, NULL);
+ }
+ else
+ {
+ for (i = 0; i < 14; i++)
+ {
+ q1->unk_00[q1->unk_1c][i] = q2[i];
+ }
+ q1->unk_1c++;
+ q1->unk_1c %= 2;
+ if (q1->unk_1e < 2)
+ {
+ q1->unk_1e++;
+ }
+ else
+ {
+ q1->unk_1d = q1->unk_1c;
+ }
+ }
+}
+
+static bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2)
+{
+ int i;
+
+ if (q1->unk_1e == 0)
+ {
+ return FALSE;
+ }
+ if (q2 != NULL)
+ {
+ for (i = 0; i < 14; i++)
+ {
+ q2[i] = q1->unk_00[q1->unk_1d][i];
+ }
+ }
+ q1->unk_1d++;
+ q1->unk_1d %= 2;
+ q1->unk_1e--;
+ return TRUE;
+}
+
+void sub_800DB18(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+{
+ int i;
+
+ if (q1->unk_202 < 2)
+ {
+ for (i = 0; i < 256; i++)
+ {
+ q1->unk_00[q1->unk_200][i] = q2[i];
+ }
+ q1->unk_200++;
+ q1->unk_200 %= 2;
+ q1->unk_202++;
+ }
+ else
+ {
+ q1->unk_203 = 1;
+ }
+}
+
+bool8 sub_800DB84(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+{
+ int i;
+
+ if (q1->unk_200 == q1->unk_201 || q1->unk_203)
+ {
+ return FALSE;
+ }
+ for (i = 0; i < 256; i++)
+ {
+ q2[i] = q1->unk_00[q1->unk_201][i];
+ }
+ q1->unk_201++;
+ q1->unk_201 %= 2;
+ q1->unk_202--;
+ return TRUE;
+}
+
+void sub_800DBF8(u8 *q1, u8 mode)
+{
+ int i;
+ u8 rval;
+ u16 r5 = 0;
+ switch (mode)
+ {
+ case 0:
+ for (i = 0; i < 200; i++)
+ {
+ q1[i] = i + 1;
+ r5 += i + 1;
+ }
+ *((u16 *)(q1 + i)) = r5;
+ break;
+ case 1:
+ for (i = 0; i < 100; i++)
+ {
+ q1[i] = i + 1;
+ r5 += i + 1;
+ }
+ *((u16 *)(q1 + 200)) = r5;
+ break;
+ case 2:
+ for (i = 0; i < 200; i++)
+ {
+ rval = Random();
+ q1[i] = rval;
+ r5 += rval;
+ }
+ *((u16 *)(q1 + i)) = r5;
+ break;
+ case 3:
+ for (i = 0; i < 200; i++)
+ {
+ q1[i] = i + 1 + gUnknown_03000D74;
+ r5 += (i + 1 + gUnknown_03000D74) & 0xFF;
+ }
+ *((u16 *)(q1 + i)) = r5;
+ gUnknown_03000D74++;
+ break;
+ }
+}
+
+void PkmnStrToASCII(u8 *q1, const u8 *q2)
+{
+ int i;
+
+ for (i = 0; q2[i] != EOS; i++)
+ {
+ q1[i] = sWireless_RSEtoASCIITable[q2[i]];
+ }
+ q1[i] = 0;
+}
+
+void ASCIIToPkmnStr(u8 *q1, const u8 *q2)
+{
+ int i;
+
+ for (i = 0; q2[i] != 0; i++)
+ {
+ q1[i] = sWireless_ASCIItoRSETable[q2[i]];
+ }
+ q1[i] = EOS;
+}
+
+#ifdef NONMATCHING
+u8 sub_800DD1C(u8 maxFlags)
+{
+ u8 flagCount = 0;
+ u8 flags = gUnknown_03007890->unk_02;
+ u8 i;
+
+ if (gUnknown_03007890->unk_00 == 1)
+ {
+ i = 0;
+ for (i = 0; i < 4; flags >>= 1, i++)
+ {
+ if (flags & 1)
+ {
+ if (maxFlags == flagCount + 1)
+ {
+ return gUnknown_03007890->unk_0a[i];
+ }
+ flagCount++;
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < 4; flags >>= 1, i++)
+ {
+ if (flags & 1)
+ {
+ return gUnknown_03007890->unk_0a[i];
+ }
+ }
+ }
+ return 0;
+}
+#else
+ASM_DIRECT u8 sub_800DD1C(u8 maxFlags)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tmovs r6, 0\n"
+ "\tldr r0, =gUnknown_03007890\n"
+ "\tldr r4, [r0]\n"
+ "\tldrb r2, [r4, 0x2]\n"
+ "\tldrb r1, [r4]\n"
+ "\tadds r7, r0, 0\n"
+ "\tcmp r1, 0x1\n"
+ "\tbne _0800DD72\n"
+ "\tmovs r3, 0\n"
+ "\tands r1, r2\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _0800DD4E\n"
+ "\tcmp r5, 0x1\n"
+ "\tbne _0800DD48\n"
+ "\tldrb r0, [r4, 0xA]\n"
+ "\tb _0800DD8C\n"
+ "\t.pool\n"
+ "_0800DD48:\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "_0800DD4E:\n"
+ "\tlsrs r2, 1\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tcmp r3, 0x3\n"
+ "\tbhi _0800DD8A\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0800DD4E\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tcmp r5, r0\n"
+ "\tbne _0800DD48\n"
+ "_0800DD68:\n"
+ "\tldr r0, [r7]\n"
+ "\tadds r0, 0xA\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tb _0800DD8C\n"
+ "_0800DD72:\n"
+ "\tmovs r3, 0\n"
+ "\tmovs r1, 0x1\n"
+ "_0800DD76:\n"
+ "\tadds r0, r2, 0\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0800DD68\n"
+ "\tlsrs r2, 1\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tcmp r3, 0x3\n"
+ "\tbls _0800DD76\n"
+ "_0800DD8A:\n"
+ "\tmovs r0, 0\n"
+ "_0800DD8C:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+void sub_800DD94(struct UnkLinkRfuStruct_02022B14 *data, u8 r9, bool32 r2, int r3)
+{
+ int i;
+
+ for (i = 0; i < 2; i++)
+ {
+ data->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
+ }
+ for (i = 0; i < 4; i++)
+ {
+ data->unk_04[i] = r3;
+ r3 >>= 8;
+ }
+ data->playerGender = gSaveBlock2Ptr->playerGender;
+ data->unk_0a_0 = r9;
+ data->unk_0a_7 = r2;
+ data->unk_00_0 = 2;
+ data->unk_01_2 = 3;
+ data->unk_00_4 = 0;
+ data->unk_00_5 = 0;
+ data->unk_00_6 = 0;
+ data->unk_00_7 = FlagGet(FLAG_0x87F);
+ data->unk_01_0 = IsNationalPokedexEnabled();
+ data->unk_01_1 = FlagGet(FLAG_SYS_GAME_CLEAR);
+}
+
+bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx)
+{
+ bool8 retVal;
+
+ if (gUnknown_03004140.unk_06 == 1)
+ {
+ retVal = TRUE;
+ if (sub_8010454(gUnknown_03007890->unk_14[idx].unk_04) && ((gUnknown_03007890->unk_07 >> idx) & 1))
+ {
+ memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memcpy(buff2, gUnknown_03007890->unk_14[idx].unk_15, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
+ }
+ else
+ {
+ memset(buff1, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memset(buff2, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
+ }
+ }
+ else
+ {
+ retVal = FALSE;
+ if (sub_8010454(gUnknown_03007890->unk_14[idx].unk_04))
+ {
+ memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memcpy(buff2, gUnknown_03007890->unk_14[idx].unk_15, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
+ }
+ else
+ {
+ memset(buff1, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memset(buff2, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
+ }
+ }
+ return retVal;
+}
+
+bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx)
+{
+ bool8 retVal = FALSE;
+ if (gUnknown_03007890->unk_14[idx].unk_04 == 0x7F7D)
+ {
+ *buff1 = gUnknown_03007890->unk_14[idx].unk_06;
+ memcpy(buff2, gUnknown_03007890->unk_14[idx].unk_15, 8);
+ retVal = TRUE;
+ }
+ else
+ {
+ *buff1 = (struct UnkLinkRfuStruct_02022B14){};
+ memset(buff2, 0, 8);
+ }
+ return retVal;
+}
+
+void sub_800DF90(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2)
+{
+ *buff1 = gUnknown_02022B14;
+ memcpy(buff2, gUnknown_02022B22, 8);
+}
+
+void CreateWirelessStatusIndicatorSprite(u8 x, u8 y)
+{
+ u8 sprId;
+
+ if (x == 0 && y == 0)
+ {
+ x = 0xE7;
+ y = 0x08;
+ }
+ if (gUnknown_03007890->unk_00 == 1)
+ {
+ sprId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0);
+ gSprites[sprId].data[7] = 0x1234;
+ gSprites[sprId].data[6] = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
+ gSprites[sprId].invisible = TRUE;
+ gWirelessStatusIndicatorSpriteId = sprId;
+ }
+ else
+ {
+ gWirelessStatusIndicatorSpriteId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0);
+ gSprites[gWirelessStatusIndicatorSpriteId].data[7] = 0x1234;
+ gSprites[gWirelessStatusIndicatorSpriteId].data[6] = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
+ gSprites[gWirelessStatusIndicatorSpriteId].invisible = TRUE;
+ }
+}
+
+void sub_800E084(void)
+{
+ if (gSprites[gWirelessStatusIndicatorSpriteId].data[7] == 0x1234)
+ {
+ gSprites[gWirelessStatusIndicatorSpriteId].data[7] = 0;
+ DestroySprite(&gSprites[gWirelessStatusIndicatorSpriteId]);
+ gMain.oamBuffer[125] = gDummyOamData;
+ CpuCopy16(&gDummyOamData, (struct OamData *)OAM + 125, sizeof(struct OamData));
+ }
+}
+
+void sub_800E0E8(void)
+{
+ if (GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag) == 0xFFFF)
+ {
+ LoadCompressedObjectPic(&sWirelessStatusIndicatorSpriteSheet);
+ }
+ LoadSpritePalette(&sWirelessStatusIndicatorSpritePalette);
+ gWirelessStatusIndicatorSpriteId = 0xFF;
+}
+
+u8 sub_800E124(void)
+{
+ u8 i;
+ u8 flags = gUnknown_03007890->unk_02;
+ for (i = 0; i < 4; i++)
+ {
+ if (flags & 1)
+ {
+ return gUnknown_03007890->unk_0a[i];
+ }
+ flags >>= 1;
+ }
+ return 0;
+}
+
+void sub_800E15C(struct Sprite *sprite, int signalStrengthAnimNum)
+{
+ if (sprite->data[2] != signalStrengthAnimNum)
+ {
+ sprite->data[2] = signalStrengthAnimNum;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ }
+}
+
+void sub_800E174(void)
+{
+ if (gWirelessStatusIndicatorSpriteId != 0xFF && gSprites[gWirelessStatusIndicatorSpriteId].data[7] == 0x1234)
+ {
+ struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId];
+ u8 signalStrength = 255;
+ u8 i = 0;
+ if (gUnknown_03007890->unk_00 == 1)
+ {
+ for (i = 0; i < GetLinkPlayerCount() - 1; i++)
+ {
+ if (signalStrength >= sub_800DD1C(i + 1))
+ {
+ signalStrength = sub_800DD1C(i + 1);
+ }
+ }
+ }
+ else
+ {
+ signalStrength = sub_800E124();
+ }
+ if (sub_8012224() == TRUE)
+ {
+ sprite->data[0] = 4;
+ }
+ else if (signalStrength < 25)
+ {
+ sprite->data[0] = 3;
+ }
+ else if (signalStrength >= 25 && signalStrength < 127)
+ {
+ sprite->data[0] = 2;
+ }
+ else if (signalStrength >= 127 && signalStrength < 229)
+ {
+ sprite->data[0] = 1;
+ }
+ else if (signalStrength >= 229)
+ {
+ sprite->data[0] = 0;
+ }
+ if (sprite->data[0] != sprite->data[1])
+ {
+ sub_800E15C(sprite, sprite->data[0]);
+ sprite->data[1] = sprite->data[0];
+ }
+ if (sprite->anims[sprite->data[2]][sprite->data[4]].frame.duration < sprite->data[3])
+ {
+ sprite->data[4]++;
+ sprite->data[3] = 0;
+ if (sprite->anims[sprite->data[2]][sprite->data[4]].type == -2)
+ {
+ sprite->data[4] = 0;
+ }
+ }
+ else
+ {
+ sprite->data[3]++;
+ }
+ gMain.oamBuffer[125] = sWirelessStatusIndicatorOamData;
+ gMain.oamBuffer[125].x = sprite->pos1.x + sprite->centerToCornerVecX;
+ gMain.oamBuffer[125].y = sprite->pos1.y + sprite->centerToCornerVecY;
+ gMain.oamBuffer[125].paletteNum = sprite->oam.paletteNum;
+ gMain.oamBuffer[125].tileNum = sprite->data[6] + sprite->anims[sprite->data[2]][sprite->data[4]].frame.imageValue;
+ CpuCopy16(gMain.oamBuffer + 125, (struct OamData *)OAM + 125, sizeof(struct OamData));
+ if (sub_8011A74() == 1)
+ {
+ sub_800E084();
+ }
+ }
+}
+
+void sub_800E378(struct UnkSaveSubstruct_3b98 *dest, u32 trainerId, const u8 *name)
+{
+ dest->trainerId = trainerId;
+ StringCopy(dest->trainerName, name);
+}
+
+bool32 sub_800E388(const u8 *name)
+{
+ int i;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (name[i] != 0)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void sub_800E3A8(void)
+{
+ if (gWirelessCommType != 0)
+ {
+ int i;
+ int j;
+ int cnt;
+ int sp0[5];
+ struct UnkSaveSubstruct_3b98 *sp14 = calloc(20, sizeof(struct UnkSaveSubstruct_3b98));
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ sp0[i] = -1;
+ for (j = 0; j < 20; j++)
+ {
+ if ((u16)gLinkPlayers[i].trainerId == gSaveBlock1Ptr->unk_3B98[j].trainerId && StringCompare(gLinkPlayers[i].name, gSaveBlock1Ptr->unk_3B98[j].trainerName) == 0)
+ {
+ sp0[i] = j;
+ }
+ }
+ }
+ cnt = 0;
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ if (i != GetMultiplayerId() && gLinkPlayers[i].language != LANGUAGE_JAPANESE)
+ {
+ sub_800E378(&sp14[cnt], (u16)gLinkPlayers[i].trainerId, gLinkPlayers[i].name);
+ if (sp0[i] >= 0)
+ {
+ memset(gSaveBlock1Ptr->unk_3B98[sp0[i]].trainerName, 0, 8);
+ }
+ cnt++;
+ }
+ }
+ for (i = 0; i < 20; i++)
+ {
+ if (sub_800E388(gSaveBlock1Ptr->unk_3B98[i].trainerName))
+ {
+ sub_800E378(&sp14[cnt], gSaveBlock1Ptr->unk_3B98[i].trainerId, gSaveBlock1Ptr->unk_3B98[i].trainerName);
+ if (++cnt >= 20)
+ {
+ break;
+ }
+ }
+ }
+ memcpy(gSaveBlock1Ptr->unk_3B98, sp14, 20 * sizeof(struct UnkSaveSubstruct_3b98));
+ free(sp14);
+ }
+}
+
+bool32 sub_800E540(u16 id, u8 *name)
+{
+ int i;
+
+ for (i = 0; i < 20; i++)
+ {
+ if (StringCompare(gSaveBlock1Ptr->unk_3B98[i].trainerName, name) == 0 && gSaveBlock1Ptr->unk_3B98[i].trainerId == id)
+ {
+ return TRUE;
+ }
+ if (!sub_800E388(gSaveBlock1Ptr->unk_3B98[i].trainerName))
+ {
+ return FALSE;
+ }
+ }
+ return FALSE;
+}
+
+void sub_800E5AC(void)
+{
+ int i;
+
+ for (i = 0; i < 20; i++)
+ {
+ gSaveBlock1Ptr->unk_3B98[i].trainerId = 0;
+ CpuFill16(0, gSaveBlock1Ptr->unk_3B98[i].trainerName, 8);
+ }
+}
+
+void nullsub_5(void *unused_0, u8 unused_1, u8 unused_2)
+{
+ // debug?
+}
+
+void nullsub_13(u8 unused_0, u8 unused_1, u8 unused_2, u8 unused_3)
+{
+
+}
+
+void sub_800E604(void)
+{
+ int i;
+ u8 unk_ee_bak = gUnknown_03005000.unk_ee;
+ CpuFill16(0, &gUnknown_03005000, sizeof gUnknown_03005000);
+ gUnknown_03005000.unk_ee = unk_ee_bak;
+ gUnknown_03005000.unk_0c = 0xFF;
+ if (gUnknown_03005000.unk_ee != 4)
+ {
+ gUnknown_03005000.unk_ee = 0;
+ }
+ for (i = 0; i < 5; i++)
+ {
+ sub_800FCC4(gUnknown_03005000.unk_80 + i);
+ }
+ sub_800FCC4(&gUnknown_03005000.unk_6c);
+ sub_800D6C8(&gUnknown_03005000.unk_124);
+ sub_800D724(&gUnknown_03005000.unk_9e8);
+ CpuFill16(0, gSendCmd, sizeof gSendCmd);
+ CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
+ CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers)
+}
+
+void sub_800E6D0(void)
+{
+ IntrFunc serialIntr = gIntrTable[1];
+ IntrFunc timerIntr = gIntrTable[2];
+ sub_800E700();
+ rfu_REQ_stopMode();
+ rfu_waitREQComplete();
+ REG_IME = 0;
+ gIntrTable[1] = serialIntr;
+ gIntrTable[2] = timerIntr;
+ REG_IME = INTR_FLAG_VBLANK;
+}
+
+void sub_800E700(void)
+{
+ if (!rfu_initializeAPI(gUnknown_03004140.unk_50, sizeof gUnknown_03004140.unk_50, gIntrTable + 1, TRUE))
+ {
+ gLinkType = 0;
+ sub_800AAF4();
+ sub_80111B0(0);
+ sub_800E604();
+ rfu_setTimerInterrupt(3, gIntrTable + 2);
+ }
+}
+
+void sub_800E748(u8 taskId)
+{
+ sub_8010750();
+ switch (gUnknown_03005000.unk_04)
+ {
+ case 0:
+ sub_800BFCC(&gUnknown_02022B2C);
+ gUnknown_03005000.unk_04 = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 2:
+ sub_800C054(gUnknown_03005000.unk_0c, 0, 240, gUnknown_082ED6E0);
+ gUnknown_03005000.unk_04 = 3;
+ gTasks[taskId].data[1] = 6;
+ break;
+ case 3:
+ break;
+ case 4:
+ sub_800C27C(FALSE);
+ gUnknown_03005000.unk_04 = 5;
+ break;
+ case 5:
+ break;
+ case 18:
+ gUnknown_03005000.unk_cdb = 0;
+ sub_800D52C(sub_800EDBC);
+ sub_800EAB4();
+ sub_800EAFC();
+ gUnknown_03005000.unk_04 = 20;
+ gTasks[taskId].data[1] = 8;
+ CreateTask(sub_801084C, 5);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+u8 sub_800E87C(u8 idx)
+{
+ return gUnknown_082ED6A5[idx];
+}
+
+void sub_800E88C(int r2, int r5)
+{
+ u8 i;
+ u8 r4 = 1;
+ int r1 = r2;
+ int r6 = 0;
+ if (r5 == -1)
+ {
+ for (i = 0; i < 4; r2 >>= 1, i++)
+ {
+ if (r2 & 1)
+ {
+ gUnknown_03005000.unk_cde[i] = r4;
+ r4++;
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < 4; r1 >>= 1, i++)
+ {
+ if (!(r1 & 1))
+ {
+ gUnknown_03005000.unk_cde[i] = 0;
+ }
+ }
+ for (r4 = 4; r4 != 0; r4--)
+ {
+ for (i = 0; i < 4 && gUnknown_03005000.unk_cde[i] != r4; i++);
+ if (i == 4)
+ {
+ r6 = r4;
+ }
+ }
+ for (r5 &= ~r2, i = 0; i < 4; r5 >>= 1, i++)
+ {
+ if (r5 & 1)
+ {
+ gUnknown_03005000.unk_cde[i] = r6++;
+ }
+ }
+ }
+}
+
+void sub_800E94C(u8 taskId)
+{
+ switch (gUnknown_03005000.unk_04)
+ {
+ case 0:
+ sub_800BFCC(&gUnknown_082ED608);
+ gUnknown_03005000.unk_04 = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 6:
+ sub_800C054(gUnknown_03005000.unk_0c, 0, 0xf0, gUnknown_082ED6E0);
+ gUnknown_03005000.unk_04 = 7;
+ gTasks[taskId].data[1] = 7;
+ break;
+ case 7:
+ break;
+ case 9:
+ gTasks[taskId].data[1] = 10;
+ break;
+ case 11:
+ switch (sub_80107A0())
+ {
+ case 5:
+ gUnknown_03005000.unk_04 = 12;
+ break;
+ case 6:
+ case 9:
+ sub_800D630();
+ gUnknown_03005000.unk_ce4 = 2;
+ DestroyTask(taskId);
+ break;
+ }
+ break;
+ case 12:
+ {
+ u8 r5 = 1 << gUnknown_03005000.unk_c3e;
+ rfu_clearSlot(12, gUnknown_03005000.unk_c3e);
+ rfu_setRecvBuffer(16, gUnknown_03005000.unk_c3e, gUnknown_03005000.unk_c3f, 70);
+ rfu_UNI_setSendData(r5, gUnknown_03005000.unk_4c, 14);
+ gTasks[taskId].data[1] = 8;
+ DestroyTask(taskId);
+ if (gUnknown_02022B44.unk_0f == 0)
+ {
+ sub_801227C();
+ gUnknown_02022B44.unk_0f++;
+ }
+ CreateTask(sub_801084C, 5);
+ break;
+ }
+ }
+}
+
+static void sub_800EAB4(void)
+{
+ u8 i;
+ u8 r5 = gUnknown_03004140.unk_00;
+ for (i = 0; i < 4; i++)
+ {
+ if (r5 & 1)
+ {
+ rfu_setRecvBuffer(16, i, gUnknown_03005000.unk_14[i], 14);
+ rfu_clearSlot(3, i);
+ }
+ r5 >>= 1;
+ }
+}
+
+static void sub_800EAFC(void)
+{
+ u8 r5 = gUnknown_03004140.unk_00;
+ rfu_UNI_setSendData(r5, gUnknown_03005000.unk_c87, 70);
+ gUnknown_03005000.unk_cda = sub_800E87C(r5);
+ gUnknown_03005000.unk_ce2 = r5;
+ sub_800E88C(r5, -1);
+ gUnknown_03005000.unk_0c = 1;
+}
+
+void sub_800EB44(u8 taskId)
+{
+ if (sub_800F7DC()->unk_0a_0 == 0x54 && sub_8011A74() == 4)
+ {
+ rfu_REQ_disconnect(gUnknown_03004140.unk_00);
+ rfu_waitREQComplete();
+ sub_8011A64(0, 0);
+ }
+ switch (gUnknown_03005000.unk_04)
+ {
+ case 0:
+ sub_800BFCC(&gUnknown_02022B2C);
+ gUnknown_03005000.unk_04 = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 17:
+ sub_800C054(2, 0, 240, gUnknown_082ED6E0);
+ sub_800D52C(sub_800ED34);
+ gUnknown_03005000.unk_04 = 18;
+ break;
+ case 18:
+ break;
+ case 13:
+ if (rfu_UNI_setSendData(1 << gUnknown_03005000.unk_c3e, gUnknown_03005000.unk_4c, 14) == 0)
+ {
+ gUnknown_03005000.unk_0c = 0;
+ DestroyTask(taskId);
+ if (gTasks[taskId].data[7])
+ {
+ CreateTask(sub_8010D0C, 1);
+ }
+ else
+ {
+ CreateTask(sub_801084C, 5);
+ }
+ }
+ break;
+ case 14:
+ sub_800C27C(0);
+ gUnknown_03005000.unk_04 = 15;
+ break;
+ case 15:
+ break;
+ case 16:
+ gUnknown_03005000.unk_cdb = 0;
+ sub_800D52C(sub_800EDBC);
+ sub_8011068(1);
+ sub_800EAB4();
+ sub_800EAFC();
+ gUnknown_03005000.unk_04 = 20;
+ gTasks[taskId].data[1] = 8;
+ gUnknown_03005000.unk_0c = 1;
+ CreateTask(sub_801084C, 5);
+ gUnknown_03005000.unk_ce8 = 1;
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_800ED10(void)
+{
+ sub_800C054(1, 0, 240, gUnknown_082ED6E0);
+}
+
+void sub_800ED28(void)
+{
+ sub_800C27C(FALSE);
+}
+
+void sub_800ED34(u16 unused)
+{
+ int i;
+
+ for (i = 0; i < 14; i++)
+ {
+ gUnknown_03005000.unk_4c[i] = 0;
+ }
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ if (gUnknown_03007870[gUnknown_03005000.unk_c3e]->unk_12)
+ {
+ gUnknown_03005000.unk_cd0++;
+ sub_800D7D8(&gUnknown_03005000.unk_124, gUnknown_03005000.unk_c3f);
+ gUnknown_02022B44.unk_06++;
+ sub_800F048();
+ rfu_UNI_readySendData(gUnknown_03005000.unk_c3e);
+ rfu_UNI_clearRecvNewDataFlag(gUnknown_03005000.unk_c3e);
+ }
+ rfu_REQ_sendData_wrapper(1);
+}
+
+static void sub_800EDBC(u16 unused)
+{
+ gUnknown_03005000.unk_cdb = 1;
+}
+
+void sub_800EDD4(void)
+{
+ u8 i;
+
+ sub_800C048();
+ if (gUnknown_03005000.unk_0c == 1)
+ {
+ if (FuncIsActiveTask(sub_800E748) == TRUE)
+ {
+ DestroyTask(gUnknown_03005000.unk_67);
+ sub_800E604();
+ }
+ }
+ else if (gUnknown_03005000.unk_0c == 0)
+ {
+ if (FuncIsActiveTask(sub_800E94C) == TRUE)
+ {
+ DestroyTask(gUnknown_03005000.unk_67);
+ sub_800E604();
+ }
+ }
+ else if (gUnknown_03005000.unk_0c == 2)
+ {
+ if (FuncIsActiveTask(sub_800EB44) == TRUE)
+ {
+ DestroyTask(gUnknown_03005000.unk_67);
+ sub_800E604();
+ }
+ }
+ for (i = 0; i < 3; i++)
+ {
+ if (FuncIsActiveTask(gUnknown_082ED7E0[i]) == TRUE)
+ {
+ DestroyTask(FindTaskIdByFunc(gUnknown_082ED7E0[i]));
+ }
+ }
+}
+
+void sub_800EE78(void)
+{
+ gUnknown_03005000.unk_67 = CreateTask(sub_800E748, 1);
+}
+
+bool8 sub_800EE94(void)
+{
+ if (gUnknown_03005000.unk_04 == 7 && gUnknown_03005000.unk_ccd)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_800EEBC(void)
+{
+ if (gUnknown_03005000.unk_04 == 7 && !sub_800C12C(gUnknown_03007890->unk_14[gUnknown_03005000.unk_c3d].unk_00, 240))
+ {
+ gUnknown_03005000.unk_04 = 9;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_800EF00(void)
+{
+ gUnknown_03005000.unk_67 = CreateTask(sub_800E94C, 1);
+}
+
+bool8 sub_800EF1C(void)
+{
+ if (gUnknown_03004140.unk_00)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_800EF38(void)
+{
+ gUnknown_03005000.unk_04 = 4;
+ gUnknown_03005000.unk_ce7 = gUnknown_03004140.unk_00;
+}
+
+bool8 sub_800EF58(bool32 a0)
+{
+ if (gUnknown_03005000.unk_04 == 17 || a0)
+ {
+ gUnknown_03005000.unk_04 = 18;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_800EF7C(void)
+{
+ gUnknown_03005000.unk_04 = 14;
+}
+
+void sub_800EF88(u8 a0)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (a0 & 1)
+ {
+ rfu_UNI_readySendData(i);
+ break;
+ }
+ a0 >>= 1;
+ }
+}
+
+#ifdef NONMATCHING
+// FIXME: gUnknown_03005000.unk_c87 should be in r5
+// FIXME: gRecvCmds should be in r6 and r7
+void sub_800EFB0(void)
+{
+ int i, j;
+ for (i = 0; i < 5; i++)
+ {
+ for (j = 0; j < 7; j++)
+ {
+ gUnknown_03005000.unk_c87[i][j][1] = gRecvCmds[i][j] >> 8;
+ gUnknown_03005000.unk_c87[i][j][0] = gRecvCmds[i][j];
+ }
+ }
+ CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
+}
+#else
+ASM_DIRECT void sub_800EFB0(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tsub sp, 0x4\n"
+ "\tmovs r2, 0\n"
+ "\tldr r7, =gRecvCmds\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tadds r6, r7, 0\n"
+ "\tldr r1, =0x00000c87\n"
+ "\tadds r5, r0, r1\n"
+ "_0800EFC0:\n"
+ "\tmovs r3, 0\n"
+ "\tlsls r0, r2, 3\n"
+ "\tlsls r1, r2, 4\n"
+ "\tadds r4, r2, 0x1\n"
+ "\tsubs r0, r2\n"
+ "\tlsls r0, 1\n"
+ "\tadds r2, r0, r5\n"
+ "\tadds r1, r6\n"
+ "_0800EFD0:\n"
+ "\tldrh r0, [r1]\n"
+ "\tlsrs r0, 8\n"
+ "\tstrb r0, [r2, 0x1]\n"
+ "\tldrh r0, [r1]\n"
+ "\tstrb r0, [r2]\n"
+ "\tadds r2, 0x2\n"
+ "\tadds r1, 0x2\n"
+ "\tadds r3, 0x1\n"
+ "\tcmp r3, 0x6\n"
+ "\tble _0800EFD0\n"
+ "\tadds r2, r4, 0\n"
+ "\tcmp r2, 0x4\n"
+ "\tble _0800EFC0\n"
+ "\tmovs r0, 0\n"
+ "\tmov r1, sp\n"
+ "\tstrh r0, [r1]\n"
+ "\tldr r2, =0x01000028\n"
+ "\tmov r0, sp\n"
+ "\tadds r1, r7, 0\n"
+ "\tbl CpuSet\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.pool");
+}
+#endif
+
+void sub_800F014(void)
+{
+ int i;
+ for (i = 0; i < 7; i++)
+ {
+ gRecvCmds[0][i] = gSendCmd[i];
+ }
+ for (i = 0; i < 7; i++)
+ {
+ gSendCmd[i] = 0;
+ }
+}
+
+static void sub_800F048(void)
+{
+ if (gUnknown_03005000.unk_c3c)
+ {
+ u8 r2 = sub_800DAC8(&gUnknown_03005000.unk_c1c, gUnknown_03005000.unk_4c);
+ if (gUnknown_03005000.unk_c1c.unk_1e == 0)
+ {
+ gUnknown_03005000.unk_c3c = 0;
+ }
+ if (r2)
+ {
+ return;
+ }
+ }
+ if (gUnknown_03005000.unk_c3c == 0)
+ {
+ sub_800D9DC(&gUnknown_03005000.unk_9e8, gUnknown_03005000.unk_4c);
+ sub_800DA68(&gUnknown_03005000.unk_c1c, gUnknown_03005000.unk_4c);
+ }
+}
+
+bool32 sub_800F0B8(void)
+{
+ int i;
+ int j;
+
+ if (gUnknown_03007890->unk_06 == 0)
+ {
+ return FALSE;
+ }
+ for (i = 0; i < 5; i++)
+ {
+ for (j = 0; j < 7; j++)
+ {
+ if (gRecvCmds[i][j] != 0)
+ {
+ return FALSE;
+ }
+ }
+ }
+ return TRUE;
+}
+
+bool32 sub_800F0F8(void)
+{
+ if (gUnknown_03005000.unk_04 < 20)
+ {
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ rfu_REQ_sendData_wrapper(0);
+ }
+ else
+ {
+ gUnknown_03005000.unk_cdb = 0;
+ if ((gUnknown_03005000.unk_ce2 & gUnknown_03007890->unk_02) == gUnknown_03005000.unk_ce2 && (gUnknown_03005000.unk_ce2 & gUnknown_03007890->unk_02))
+ {
+ if (!gUnknown_03005000.unk_cdc)
+ {
+ if (gUnknown_03005000.unk_ce3)
+ {
+ sub_8011D6C(gUnknown_03005000.unk_ce3);
+ gUnknown_03005000.unk_ce3 = 0;
+ if (gUnknown_03005000.unk_ce4 == 1)
+ {
+ sub_8011A64(2, 0x8000);
+ sub_8011170(0x8000);
+ return FALSE;
+ }
+ if (!gUnknown_03004140.unk_00)
+ {
+ sub_800EDD4();
+ gReceivedRemoteLinkPlayers = 0;
+ return FALSE;
+ }
+ }
+ sub_800EFB0();
+ rfu_UNI_readySendData(gUnknown_03005000.unk_cda);
+ rfu_REQ_sendData_wrapper(1);
+ }
+ else
+ {
+ rfu_REQ_PARENT_resumeRetransmitAndChange();
+ }
+ gUnknown_03005000.unk_0e = 1;
+ }
+ }
+ return FALSE;
+}
+
+bool32 sub_800F1E0(void)
+{
+ u16 i;
+ u16 flags;
+ u8 r0;
+ u16 j;
+ u8 retval;
+
+ if (gUnknown_03005000.unk_04 >= 20 && gUnknown_03005000.unk_0e == 1)
+ {
+ rfu_waitREQComplete();
+ while (gUnknown_03005000.unk_cdb == 0)
+ {
+ if (gUnknown_03005000.unk_ee != 0)
+ {
+ return FALSE;
+ }
+ }
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ if ((gUnknown_03004140.unk_03 & gUnknown_03005000.unk_ce2) == gUnknown_03005000.unk_ce2)
+ {
+ gUnknown_03005000.unk_cdc = 0;
+ gUnknown_02022B44.unk_06++;
+ flags = gUnknown_03004140.unk_00;
+ for (i = 0; i < 4; i++)
+ {
+ if (flags & 1)
+ {
+ if (gUnknown_03005000.unk_14[i][1])
+ {
+ if (gUnknown_03005000.unk_cee[i] != 0xff && (gUnknown_03005000.unk_14[i][0] >> 5) != ((gUnknown_03005000.unk_cee[i] + 1) & 7))
+ {
+ if (++gUnknown_03005000.unk_cea[i] > 4)
+ sub_8011170(0x8100);
+ }
+ else
+ {
+ gUnknown_03005000.unk_cee[i] = gUnknown_03005000.unk_14[i][0] / 32;
+ gUnknown_03005000.unk_cea[i] = 0;
+ gUnknown_03005000.unk_14[i][0] &= 0x1f;
+ r0 = gUnknown_03005000.unk_cde[i];
+ for (j = 0; j < 7; j++)
+ {
+ gRecvCmds[r0][j] = (gUnknown_03005000.unk_14[i][(j << 1) + 1] << 8) | gUnknown_03005000.unk_14[i][(j << 1) + 0];
+ gUnknown_03005000.unk_14[i][(j << 1) + 1] = 0;
+ gUnknown_03005000.unk_14[i][(j << 1) + 0] = 0;
+ }
+ }
+ }
+ rfu_UNI_clearRecvNewDataFlag(i);
+ }
+ flags >>= 1;
+ }
+ sub_800F014();
+ sub_800F86C(0);
+ sub_8010528();
+ if (gUnknown_03005000.unk_ce5 && !gUnknown_03005000.unk_cd9)
+ {
+ gUnknown_02022B44.unk_0e = 0;
+ rfu_clearSlot(3, gUnknown_03005000.unk_cda);
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_03005000.unk_ce5 >> i) & 1)
+ {
+ rfu_setRecvBuffer(0x10, i, gUnknown_03005000.unk_14[i], 14);
+ }
+ }
+ sub_800E88C(gUnknown_03005000.unk_ce2, gUnknown_03005000.unk_ce2 | gUnknown_03005000.unk_ce5);
+ gUnknown_03005000.unk_ce9 = gUnknown_03005000.unk_ce5;
+ gUnknown_03005000.unk_ce2 |= gUnknown_03005000.unk_ce5;
+ gUnknown_03005000.unk_ce5 = 0;
+ rfu_UNI_setSendData(gUnknown_03005000.unk_ce2, gUnknown_03005000.unk_c87, 70);
+ gUnknown_03005000.unk_cda = sub_800E87C(gUnknown_03005000.unk_ce2);
+ CreateTask(sub_8010AAC, 0);
+ }
+ }
+ else
+ {
+ gUnknown_03005000.unk_cdc = 1;
+ gUnknown_03005000.unk_0e = 0;
+ }
+ gUnknown_03005000.unk_0e = 0;
+ }
+ retval = gUnknown_03005000.unk_cdc;
+ return gUnknown_03007890->unk_06 ? retval & 1 : FALSE;
+}
+
+void sub_800F498(u16 *a0, u8 *a1)
+{
+ int i;
+
+ if (a0[0])
+ {
+ a0[0] |= (gUnknown_03005000.unk_102 << 5);
+ gUnknown_03005000.unk_102 = (gUnknown_03005000.unk_102 + 1) & 7;
+ for (i = 0; i < 7; i++)
+ {
+ a1[2 * i + 1] = a0[i] >> 8;
+ a1[2 * i + 0] = a0[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < 14; i++)
+ a1[i] = 0;
+ }
+}
+
+bool32 sub_800F4F0(void)
+{
+ u8 i;
+ u8 j;
+ u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))];
+ u8 sp48[2 * (CMD_LENGTH - 1)];
+ u8 switchval;
+
+ sub_800D934(&gUnknown_03005000.unk_124, sp00);
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ for (j = 0; j < CMD_LENGTH - 1; j++)
+ {
+ gRecvCmds[i][j] = (sp00[i * 14 + (j << 1) + 1] << 8) | sp00[i * 14 + (j << 1) + 0];
+ }
+ }
+ sub_800F86C(0);
+ if (gUnknown_03004140.unk_02 == 0 && gUnknown_03005000.unk_ce4)
+ {
+ rfu_REQ_disconnect(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03);
+ rfu_waitREQComplete();
+ switchval = sub_8011A74();
+ if (switchval != 1 && switchval != 6 && switchval != 9)
+ sub_8011A64(2, 0x9000);
+ rfu_clearAllSlot();
+ gReceivedRemoteLinkPlayers = FALSE;
+ gUnknown_03005000.unk_00 = 0;
+ if (gUnknown_03005000.unk_ce4 == 1)
+ {
+ sub_8011A64(2, 0x9000);
+ sub_8011170(0x9000);
+ }
+ gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0;
+ gUnknown_03005000.unk_ce4 = 0;
+ }
+ if (gUnknown_03005000.unk_cd0)
+ {
+ gUnknown_03005000.unk_cd0--;
+ sub_8010528();
+ sub_800F498(gSendCmd, sp48);
+ sub_800D888(&gUnknown_03005000.unk_9e8, sp48);
+ for (i = 0; i < CMD_LENGTH - 1; i++)
+ gSendCmd[i] = 0;
+ }
+ return sub_800F0B8();
+}
+
+#ifdef NONMATCHING
+void sub_800F638(u8 unused, u32 flags)
+{
+ int i;
+ int j;
+
+ u8 *r10 = gUnknown_03005000.unk_6c.unk_04;
+ for (i = 0; i < gUnknown_03005000.unk_6c.unk_02; i++)
+ {
+ if (!(flags & 1))
+ {
+ gUnknown_03000D90[0] = (~0x76ff) | i;
+ for (j = 0; j < 7; j++)
+ {
+ gUnknown_03000D90[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0];
+ }
+ for (j = 0; j < 7; j++)
+ // This should be an ascending loop.
+ // GCC compiles this as descending.
+ {
+ gUnknown_03000D80[2 * j + 1] = gUnknown_03000D90[j] >> 8;
+ gUnknown_03000D80[2 * j + 0] = gUnknown_03000D90[j];
+ }
+ sub_800D888(&gUnknown_03005000.unk_9e8, gUnknown_03000D80);
+ gUnknown_03005000.unk_6c.unk_0c |= (1 << i);
+ }
+ flags >>= 1;
+ }
+}
+#else
+ASM_DIRECT void sub_800F638(u8 unused, u32 flags)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tldr r2, [r0, 0x70]\n"
+ "\tmov r10, r2\n"
+ "\tmovs r5, 0\n"
+ "\tadds r2, r0, 0\n"
+ "\tadds r2, 0x6E\n"
+ "\tldrh r3, [r2]\n"
+ "\tcmp r5, r3\n"
+ "\tbge _0800F6D4\n"
+ "\tmov r9, r0\n"
+ "\tldr r0, =gUnknown_03000D90\n"
+ "\tmov r8, r0\n"
+ "_0800F65A:\n"
+ "\tmovs r0, 0x1\n"
+ "\tands r0, r1\n"
+ "\tlsrs r7, r1, 1\n"
+ "\tadds r6, r5, 0x1\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0800F6C8\n"
+ "\tldr r1, =0xffff8900\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r1, r5, 0\n"
+ "\torrs r1, r0\n"
+ "\tmov r2, r8\n"
+ "\tstrh r1, [r2]\n"
+ "\tmovs r4, 0\n"
+ "\tlsls r0, r5, 1\n"
+ "\tldr r3, =gUnknown_03000D80\n"
+ "\tmov r12, r3\n"
+ "\tadds r0, r5\n"
+ "\tlsls r0, 2\n"
+ "\tmov r1, r10\n"
+ "\tadds r2, r0, r1\n"
+ "\tmov r3, r8\n"
+ "\tadds r3, 0x2\n"
+ "_0800F686:\n"
+ "\tldrb r1, [r2, 0x1]\n"
+ "\tlsls r1, 8\n"
+ "\tldrb r0, [r2]\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r3]\n"
+ "\tadds r2, 0x2\n"
+ "\tadds r3, 0x2\n"
+ "\tadds r4, 0x1\n"
+ "\tcmp r4, 0x6\n"
+ "\tble _0800F686\n"
+ "\tmovs r4, 0\n"
+ "\tldr r2, =gUnknown_03000D90\n"
+ "\tldr r1, =gUnknown_03000D80\n"
+ "_0800F6A0:\n"
+ "\tldrh r0, [r2]\n"
+ "\tlsrs r0, 8\n"
+ "\tstrb r0, [r1, 0x1]\n"
+ "\tldrh r0, [r2]\n"
+ "\tstrb r0, [r1]\n"
+ "\tadds r2, 0x2\n"
+ "\tadds r1, 0x2\n"
+ "\tadds r4, 0x1\n"
+ "\tcmp r4, 0x6\n"
+ "\tble _0800F6A0\n"
+ "\tldr r0, =gUnknown_03005000+0x9E8\n"
+ "\tmov r1, r12\n"
+ "\tbl sub_800D888\n"
+ "\tmovs r1, 0x1\n"
+ "\tlsls r1, r5\n"
+ "\tmov r2, r9\n"
+ "\tldr r0, [r2, 0x78]\n"
+ "\torrs r0, r1\n"
+ "\tstr r0, [r2, 0x78]\n"
+ "_0800F6C8:\n"
+ "\tadds r1, r7, 0\n"
+ "\tadds r5, r6, 0\n"
+ "\tldr r3, =gUnknown_03005000+0x6E\n"
+ "\tldrh r3, [r3]\n"
+ "\tcmp r5, r3\n"
+ "\tblt _0800F65A\n"
+ "_0800F6D4:\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.pool");
+}
+#endif
+
+void sub_800F6FC(u8 a0)
+{
+ if (gUnknown_03005000.unk_0c == 1 && a0)
+ gUnknown_03005000.unk_61[a0] = 1;
+ else
+ gUnknown_03005000.unk_5c[a0] = 1;
+}
+
+void sub_800F728(u8 a0)
+{
+ gUnknown_03005000.unk_5c[a0] = 0;
+ gUnknown_03005000.unk_80[a0].unk_12 = 0;
+}
+
+u8 sub_800F74C(const u8 *a0)
+{
+ u8 i;
+
+ if (gUnknown_03005000.unk_0c == 1)
+ return FALSE;
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_03005000.unk_cde[i] = a0[i];
+ }
+ return a0[gUnknown_03005000.unk_c3e];
+}
+
+void rfu_func_080F97B8(void)
+{
+ if (gReceivedRemoteLinkPlayers && gUnknown_03005DA8 && gLinkTransferringData != 1)
+ {
+ gUnknown_03000D78[0]++;
+ gUnknown_03005DA8 |= (gUnknown_03000D78[0] << 8);
+ sub_800FD14(0xbe00);
+ }
+}
+
+struct UnkLinkRfuStruct_02022B14 *sub_800F7DC(void)
+{
+ return &gUnknown_02022B14;
+}
+
+bool32 sub_800F7E4(void)
+{
+ return gUnknown_03005000.unk_00 == rfu_func_080F97B8;
+}
+
+void sub_800F804(void)
+{
+ gUnknown_03005000.unk_00 = rfu_func_080F97B8;
+}
+
+void Rfu_set_zero(void)
+{
+ gUnknown_03005000.unk_00 = NULL;
+}
+
+void sub_800F820(void)
+{
+ sub_800FD14(0x4400);
+ if (GetMultiplayerId() == 0)
+ gSendCmd[6] = GetBlenderArrowPosition();
+ gUnknown_020223C0++;
+}
+
+void sub_800F850(void)
+{
+ if (gUnknown_03005000.unk_00 == NULL)
+ gUnknown_03005000.unk_00 = sub_800F820;
+}
+
+static void sub_800F86C(u8 unused)
+{
+ u16 i;
+ u16 j;
+
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ switch (gRecvCmds[i][0] & 0xff00)
+ {
+ case 0x7800:
+ if (gUnknown_03005000.unk_0c == 0 && gReceivedRemoteLinkPlayers != 0)
+ return;
+ // fallthrough
+ case 0x7700:
+ if (gUnknown_03007890->unk_00 == 0)
+ {
+ gUnknown_03005000.playerCount = gRecvCmds[i][1];
+ gUnknown_03005000.unk_cce = sub_800F74C((u8 *)(gRecvCmds[i] + 2));
+ }
+ break;
+ case 0x8800:
+ if (gUnknown_03005000.unk_80[i].unk_12 == 0)
+ {
+ gUnknown_03005000.unk_80[i].unk_00 = 0;
+ gUnknown_03005000.unk_80[i].unk_02 = gRecvCmds[i][1];
+ gUnknown_03005000.unk_80[i].unk_11 = gRecvCmds[i][2];
+ gUnknown_03005000.unk_80[i].unk_08 = 0;
+ gUnknown_03005000.unk_80[i].unk_12 = 1;
+ gUnknown_03005000.unk_5c[i] = 0;
+ }
+ break;
+ case 0x8900:
+ if (gUnknown_03005000.unk_80[i].unk_12 == 1)
+ {
+ gUnknown_03005000.unk_80[i].unk_00 = gRecvCmds[i][0] & 0xff;
+ gUnknown_03005000.unk_80[i].unk_08 |= (1 << gUnknown_03005000.unk_80[i].unk_00);
+ for (j = 0; j < 6; j++)
+ gBlockRecvBuffer[i][gUnknown_03005000.unk_80[i].unk_00 * 6 + j] = gRecvCmds[i][j + 1];
+ if (gUnknown_03005000.unk_80[i].unk_08 == gUnknown_082ED628[gUnknown_03005000.unk_80[i].unk_02])
+ {
+ gUnknown_03005000.unk_80[i].unk_12 = 2;
+ sub_800F6FC(i);
+ if (sub_800F7DC()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && gUnknown_03005000.unk_0c == 0)
+ sub_8010A70(gBlockRecvBuffer);
+ }
+ }
+ break;
+ case 0xa100:
+ sub_800FE84(gUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)gUnknown_082ED6B8[gRecvCmds[i][1]].size);
+ break;
+ case 0x5f00:
+ gUnknown_03005000.unk_e4[i] = 1;
+ break;
+ case 0x6600:
+ if (gUnknown_03005000.unk_100 == gRecvCmds[i][1])
+ gUnknown_03005000.unk_e9[i] = 1;
+ break;
+ case 0xed00:
+ if (gUnknown_03005000.unk_0c == 0)
+ {
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ if (gRecvCmds[i][1] & gUnknown_03007890->unk_02)
+ {
+ gReceivedRemoteLinkPlayers = 0;
+ sub_800D630();
+ gUnknown_03005000.unk_ce4 = gRecvCmds[i][2];
+ }
+ gUnknown_03005000.playerCount = gRecvCmds[i][3];
+ sub_80109E8(gRecvCmds[i][1]);
+ }
+ }
+ else
+ {
+ sub_800FD14(0xee00);
+ gSendCmd[1] = gRecvCmds[i][1];
+ gSendCmd[2] = gRecvCmds[i][2];
+ gSendCmd[3] = gRecvCmds[i][3];
+ }
+ break;
+ case 0xee00:
+ if (gUnknown_03005000.unk_0c == 1)
+ {
+ gUnknown_03005000.unk_ce3 |= gRecvCmds[i][1];
+ gUnknown_03005000.unk_ce4 = gRecvCmds[i][2];
+ sub_80109E8(gRecvCmds[i][1]);
+ }
+ break;
+ case 0x4400:
+ case 0xbe00:
+ gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
+ break;
+ }
+ if (gUnknown_03005000.unk_0c == 1 && gUnknown_03005000.unk_61[i])
+ {
+ if (gUnknown_03005000.unk_61[i] == 4)
+ {
+ gUnknown_03005000.unk_5c[i] = 1;
+ gUnknown_03005000.unk_61[i] = 0;
+ }
+ else
+ gUnknown_03005000.unk_61[i]++;
+ }
+ }
+}
+
+bool8 sub_800FC60(void)
+{
+ int i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gUnknown_03005000.unk_80[i].unk_12)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool8 sub_800FC88(void)
+{
+ int i;
+
+ for (i = 0; i < gUnknown_03005000.playerCount; i++)
+ {
+ if (gUnknown_03005000.unk_80[i].unk_12 != 2 || gUnknown_03005000.unk_5c[i] != 1)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data)
+{
+ data->unk_00 = 0;
+ data->unk_02 = 0;
+ data->unk_04 = NULL;
+ data->unk_08 = 0;
+ data->unk_10 = 0;
+ data->unk_11 = 0;
+ data->unk_12 = 0;
+}
+
+u8 sub_800FCD8(void)
+{
+ u8 flags = 0;
+ int i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gUnknown_03005000.unk_80[i].unk_12 == 2 && gUnknown_03005000.unk_5c[i] == 1)
+ {
+ flags |= (1 << i);
+ }
+ }
+ return flags;
+}
+
+#ifdef NONMATCHING
+// The switch tree is incorrect
+void sub_800FD14(u16 command)
+{
+ u8 i;
+ u8 *buff;
+ u8 tmp;
+
+ gSendCmd[0] = command;
+ switch (command)
+ {
+ case 0x8800:
+ gSendCmd[1] = gUnknown_03005000.unk_6c.unk_02;
+ gSendCmd[2] = gUnknown_03005000.unk_6c.unk_11 + 0x80;
+ break;
+ case 0xa100:
+ if (sub_800FC60())
+ gSendCmd[1] = gUnknown_03005000.unk_5a;
+ break;
+ case 0x7800:
+ case 0x7700:
+ tmp = gUnknown_03005000.unk_ce2 ^ gUnknown_03005000.unk_ce3;
+ gUnknown_03005000.playerCount = gUnknown_082ED695[tmp] + 1;
+ gSendCmd[1] = gUnknown_03005000.playerCount;
+ buff = (u8 *)(gSendCmd + 2);
+ for (i = 0; i < 4; i++)
+ buff[i] = gUnknown_03005000.unk_cde[i];
+ break;
+ case 0x6600:
+ case 0x5f00:
+ gSendCmd[1] = gUnknown_03005000.unk_100;
+ break;
+ case 0x4400:
+ gSendCmd[0] = 0x4400;
+ gSendCmd[1] = gMain.heldKeys;
+ break;
+ case 0x2f00:
+ for (i = 0; i < 6; i++)
+ gSendCmd[1 + i] = gUnknown_03005000.unk_f2[i];
+ break;
+ case 0xbe00:
+ gSendCmd[1] = gUnknown_03005DA8;
+ break;
+ }
+}
+#else
+ASM_DIRECT void sub_800FD14(u16 command)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r1, r0, 16\n"
+ "\tldr r5, =gSendCmd\n"
+ "\tstrh r1, [r5]\n"
+ "\tmovs r0, 0xF0\n"
+ "\tlsls r0, 7\n"
+ "\tadds r4, r5, 0\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FDB0_case_7700_case_7800\n"
+ "\tcmp r1, r0\n"
+ "\tbgt _0800FD62\n"
+ "\tmovs r0, 0xBE\n"
+ "\tlsls r0, 7\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FE00_case_5f00_case_6600\n"
+ "\tcmp r1, r0\n"
+ "\tbgt _0800FD50\n"
+ "\tmovs r0, 0xBC\n"
+ "\tlsls r0, 6\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FE20_case_2f00\n"
+ "\tmovs r0, 0x88\n"
+ "\tlsls r0, 7\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FE14_case_4400\n"
+ "\tb _0800FE46_break\n"
+ "\t.pool\n"
+ "_0800FD50:\n"
+ "\tmovs r0, 0xCC\n"
+ "\tlsls r0, 7\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FE00_case_5f00_case_6600\n"
+ "\tmovs r0, 0xEE\n"
+ "\tlsls r0, 7\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FDB0_case_7700_case_7800\n"
+ "\tb _0800FE46_break\n"
+ "_0800FD62:\n"
+ "\tmovs r0, 0xBE\n"
+ "\tlsls r0, 8\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FE40_case_be00\n"
+ "\tcmp r1, r0\n"
+ "\tbgt _0800FE46_break\n"
+ "\tmovs r0, 0x88\n"
+ "\tlsls r0, 8\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FD80_case_8800\n"
+ "\tmovs r0, 0xA1\n"
+ "\tlsls r0, 8\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _0800FD98_case_a100\n"
+ "\tb _0800FE46_break\n"
+ "_0800FD80_case_8800:\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r1, 0x6E\n"
+ "\tldrh r1, [r1]\n"
+ "\tstrh r1, [r5, 0x2]\n"
+ "\tadds r0, 0x7D\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r0, 0x80\n"
+ "\tstrh r0, [r5, 0x4]\n"
+ "\tb _0800FE46_break\n"
+ "\t.pool\n"
+ "_0800FD98_case_a100:\n"
+ "\tbl sub_800FC60\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0800FE46_break\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tadds r0, 0x5A\n"
+ "\tldrb r0, [r0]\n"
+ "\tb _0800FE44_str_break\n"
+ "\t.pool\n"
+ "_0800FDB0_case_7700_case_7800:\n"
+ "\tldr r3, =gUnknown_03005000\n"
+ "\tldr r1, =0x00000ce2\n"
+ "\tadds r0, r3, r1\n"
+ "\tldr r2, =0x00000ce3\n"
+ "\tadds r1, r3, r2\n"
+ "\tldrb r2, [r0]\n"
+ "\tldrb r0, [r1]\n"
+ "\teors r0, r2\n"
+ "\tldr r1, =gUnknown_082ED695\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r3, 0xD]\n"
+ "\tldrb r0, [r3, 0xD]\n"
+ "\tstrh r0, [r4, 0x2]\n"
+ "\tadds r2, r4, 0x4\n"
+ "\tmovs r4, 0\n"
+ "\tldr r0, =0x00000cde\n"
+ "\tadds r3, r0\n"
+ "_0800FDD6:\n"
+ "\tadds r1, r2, r4\n"
+ "\tadds r0, r4, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tstrb r0, [r1]\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r4, 0x3\n"
+ "\tbls _0800FDD6\n"
+ "\tb _0800FE46_break\n"
+ "\t.pool\n"
+ "_0800FE00_case_5f00_case_6600:\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tmovs r1, 0x80\n"
+ "\tlsls r1, 1\n"
+ "\tadds r0, r1\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r4, 0x2]\n"
+ "\tb _0800FE46_break\n"
+ "\t.pool\n"
+ "_0800FE14_case_4400:\n"
+ "\tstrh r1, [r5]\n"
+ "\tldr r0, =gMain\n"
+ "\tldrh r0, [r0, 0x2C]\n"
+ "\tb _0800FE44_str_break\n"
+ "\t.pool\n"
+ "_0800FE20_case_2f00:\n"
+ "\tmovs r4, 0\n"
+ "\tldr r3, =gUnknown_03005000+0xF2\n"
+ "_0800FE24:\n"
+ "\tadds r2, r4, 0x1\n"
+ "\tlsls r1, r2, 1\n"
+ "\tadds r1, r5\n"
+ "\tlsls r0, r4, 1\n"
+ "\tadds r0, r3\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r1]\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r4, r2, 24\n"
+ "\tcmp r4, 0x5\n"
+ "\tbls _0800FE24\n"
+ "\tb _0800FE46_break\n"
+ "\t.pool\n"
+ "_0800FE40_case_be00:\n"
+ "\tldr r0, =gUnknown_03005DA8\n"
+ "\tldrh r0, [r0]\n"
+ "_0800FE44_str_break:\n"
+ "\tstrh r0, [r5, 0x2]\n"
+ "_0800FE46_break:\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.pool");
+}
+#endif
+
+void sub_800FE50(u16 *a0)
+{
+ if (gSendCmd[0] == 0 && sub_8011A80() == 0)
+ {
+ memcpy(gUnknown_03005000.unk_f2, a0, sizeof(gUnknown_03005000.unk_f2));
+ sub_800FD14(0x2f00);
+ }
+}
+
+bool32 sub_800FE84(const u8 *src, size_t size)
+{
+ bool8 r4;
+ if (gUnknown_03005000.unk_00 != NULL)
+ return FALSE;
+ if (gSendCmd[0] != 0)
+ return FALSE;
+ if (gUnknown_03005000.unk_6c.unk_10 != 0)
+ {
+ gUnknown_02022B44.unk_83++;
+ return FALSE;
+ }
+ r4 = (size % 12) != 0;
+ gUnknown_03005000.unk_6c.unk_11 = GetMultiplayerId();
+ gUnknown_03005000.unk_6c.unk_10 = 1;
+ gUnknown_03005000.unk_6c.unk_02 = (size / 12) + r4;
+ gUnknown_03005000.unk_6c.unk_00 = 0;
+ if (size > 0x100)
+ gUnknown_03005000.unk_6c.unk_04 = src;
+ else
+ {
+ if (src != gBlockSendBuffer)
+ memcpy(gBlockSendBuffer, src, size);
+ gUnknown_03005000.unk_6c.unk_04 = gBlockSendBuffer;
+ }
+ sub_800FD14(0x8800);
+ gUnknown_03005000.unk_00 = rfufunc_80F9F44;
+ gUnknown_03005000.unk_5b = 0;
+ return TRUE;
+}
+
+static void rfufunc_80F9F44(void)
+{
+ if (gSendCmd[0] == 0)
+ {
+ sub_800FD14(0x8800);
+ if (gUnknown_03005000.unk_0c == 1)
+ {
+ if (++gUnknown_03005000.unk_5b > 2)
+ gUnknown_03005000.unk_00 = sub_800FFB0;
+ }
+ else
+ {
+ if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800)
+ gUnknown_03005000.unk_00 = sub_800FFB0;
+ }
+ }
+}
+
+static void sub_800FFB0(void)
+{
+ int i;
+ const u8 *src = gUnknown_03005000.unk_6c.unk_04;
+ gSendCmd[0] = 0x8900 | gUnknown_03005000.unk_6c.unk_00;
+ for (i = 0; i < 7; i++)
+ gSendCmd[i + 1] = (src[(i << 1) + gUnknown_03005000.unk_6c.unk_00 * 12 + 1] << 8) | src[(i << 1) + gUnknown_03005000.unk_6c.unk_00 * 12 + 0];
+ gUnknown_03005000.unk_6c.unk_00++;
+ if (gUnknown_03005000.unk_6c.unk_02 <= gUnknown_03005000.unk_6c.unk_00)
+ {
+ gUnknown_03005000.unk_6c.unk_10 = 0;
+ gUnknown_03005000.unk_00 = rfufunc_80FA020;
+ }
+}
+
+static void rfufunc_80FA020(void)
+{
+ const u8 *src = gUnknown_03005000.unk_6c.unk_04;
+ u8 mpId = GetMultiplayerId();
+ int i;
+ if (gUnknown_03005000.unk_0c == 0)
+ {
+ gSendCmd[0] = (~0x76ff) | (gUnknown_03005000.unk_6c.unk_02 - 1);
+ for (i = 0; i < 7; i++)
+ gSendCmd[i + 1] = (src[(i << 1) + (gUnknown_03005000.unk_6c.unk_02 - 1) * 12 + 1] << 8) | src[(i << 1) + (gUnknown_03005000.unk_6c.unk_02 - 1) * 12 + 0];
+ if ((u8)gRecvCmds[mpId][0] == gUnknown_03005000.unk_6c.unk_02 - 1)
+ {
+ if (gUnknown_03005000.unk_80[mpId].unk_08 != gUnknown_082ED628[gUnknown_03005000.unk_80[mpId].unk_02])
+ {
+ sub_800F638(mpId, gUnknown_03005000.unk_80[mpId].unk_08);
+ gUnknown_02022B44.unk_64++;
+ }
+ else
+ gUnknown_03005000.unk_00 = NULL;
+ }
+ }
+ else
+ gUnknown_03005000.unk_00 = NULL;
+}
+
+bool8 sub_8010100(u8 a0)
+{
+ gUnknown_03005000.unk_5a = a0;
+ sub_800FD14(0xa100);
+ return TRUE;
+}
+
+void sub_801011C(void)
+{
+ rfu_clearAllSlot();
+ sub_800C048();
+ gReceivedRemoteLinkPlayers = 0;
+ gUnknown_03005000.unk_ef = 1;
+ gUnknown_03005000.unk_00 = NULL;
+}
+
+void sub_8010148(void)
+{
+ rfu_REQ_disconnect(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03);
+ rfu_waitREQComplete();
+ sub_801011C();
+}
+
+void sub_8010168(void)
+{
+ if (gUnknown_03005000.unk_0c == 0)
+ {
+ sub_800D630();
+ gUnknown_03005000.unk_ce4 = 2;
+ }
+ else
+ gUnknown_03005000.unk_00 = sub_8010148;
+}
+
+void sub_8010198(void)
+{
+ sub_800D630();
+ gUnknown_03005000.unk_ce4 = 1;
+ gUnknown_03005000.unk_ce3 = gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03;
+}
+
+void sub_80101CC(void)
+{
+ int i;
+ u8 playerCount = gUnknown_03005000.playerCount;
+ int count = 0;
+
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ if (gUnknown_03005000.unk_e4[i])
+ count++;
+ }
+ if (count == playerCount)
+ {
+ gBattleTypeFlags &= ~BATTLE_TYPE_20;
+ if (gUnknown_03005000.unk_0c == 0)
+ {
+ gUnknown_03005000.unk_ee = 3;
+ sub_8010168();
+ }
+ else
+ gUnknown_03005000.unk_00 = sub_8010168;
+ }
+}
+
+void sub_801022C(void)
+{
+ if (gSendCmd[0] == 0 && gUnknown_03005000.unk_ce8 == 0)
+ {
+ sub_800FD14(0x5f00);
+ gUnknown_03005000.unk_00 = sub_80101CC;
+ }
+}
+
+void sub_8010264(u8 taskId)
+{
+ if (gUnknown_03005000.unk_00 == NULL)
+ {
+ gUnknown_03005000.unk_cd9 = 1;
+ gUnknown_03005000.unk_00 = sub_801022C;
+ DestroyTask(taskId);
+ }
+}
+
+void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
+{
+ if (!FuncIsActiveTask(sub_8010264))
+ CreateTask(sub_8010264, 5);
+}
+
+void sub_80102B8(void)
+{
+ u8 playerCount;
+ u8 i;
+
+ if (GetMultiplayerId() != 0)
+ {
+ u8 r4 = gUnknown_03005000.unk_124.unk_8c2;
+ if (r4 == 0 && gUnknown_03005000.unk_fe > 0x3c)
+ {
+ sub_800FD14(0x6600);
+ gUnknown_03005000.unk_fe = r4;
+ }
+ }
+ playerCount = GetLinkPlayerCount();
+ for (i = 0; i < playerCount; i++)
+ {
+ if (gUnknown_03005000.unk_e9[i] == 0)
+ break;
+ }
+ if (i == playerCount)
+ {
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ gUnknown_03005000.unk_e9[i] = 0;
+ gUnknown_03005000.unk_100++;
+ gUnknown_03005000.unk_00 = NULL;
+ }
+ gUnknown_03005000.unk_fe++;
+}
+
+void sub_8010358(void)
+{
+ if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ {
+ sub_800FD14(0x6600);
+ gUnknown_03005000.unk_00 = sub_80102B8;
+ }
+}
+
+void sub_8010390(void)
+{
+ u8 i;
+ u8 playerCount;
+
+ if (GetMultiplayerId() != 0)
+ {
+ if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ {
+ sub_800FD14(0x6600);
+ gUnknown_03005000.unk_00 = sub_80102B8;
+ }
+ }
+ else
+ {
+ playerCount = GetLinkPlayerCount();
+ for (i = 1; i < playerCount; i++)
+ {
+ if (gUnknown_03005000.unk_e9[i] == 0)
+ break;
+ }
+ if (i == playerCount)
+ {
+ if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ {
+ sub_800FD14(0x6600);
+ gUnknown_03005000.unk_00 = sub_8010358;
+ }
+ }
+ }
+}
+
+void sub_8010434(void)
+{
+ if (gUnknown_03005000.unk_00 == NULL)
+ {
+ gUnknown_03005000.unk_00 = sub_8010390;
+ gUnknown_03005000.unk_fe = 0;
+ }
+}
+
+bool32 sub_8010454(u32 a0)
+{
+ int i;
+ for (i = 0; gUnknown_082ED6E0[i] != a0; i++)
+ {
+ if (gUnknown_082ED6E0[i] == 0xffff)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u8 sub_801048C(bool32 a0)
+{
+ if (a0 == 0)
+ return sub_800D550(0, 0);
+ sub_800D550(1, 0x258);
+ return FALSE;
+}
+
+void sub_80104B0(void)
+{
+ gUnknown_03005000.unk_cd9 = 1;
+ sub_800C27C(FALSE);
+}
+
+u8 rfu_get_multiplayer_id(void)
+{
+ if (gUnknown_03005000.unk_0c == 1)
+ return 0;
+ return gUnknown_03005000.unk_cce;
+}
+
+u8 sub_80104F4(void)
+{
+ return gUnknown_03005000.playerCount;
+}
+
+bool8 sub_8010500(void)
+{
+ if (gUnknown_03005000.unk_f1 == 2)
+ return FALSE;
+ return gUnknown_03005000.unk_00 ? FALSE : TRUE;
+}
+
+static void sub_8010528(void)
+{
+ if (gUnknown_03005000.unk_00)
+ gUnknown_03005000.unk_00();
+}
+
+bool8 sub_8010540(void)
+{
+ int i;
+ bool8 retval = FALSE;
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03005000.unk_cd1[i] < 5 || gUnknown_03005000.unk_cd1[i] > 6)
+ {
+ if (gUnknown_03007880[i]->unk_34 == 0x46 || gUnknown_03007880[i]->unk_34 == 0x48)
+ {
+ if (gUnknown_03005000.unk_cd5[i] == 8)
+ {
+ gUnknown_03005000.unk_cd1[i] = 9;
+ gUnknown_03005000.unk_cd5[i] = 10;
+ rfu_clearSlot(8, i);
+ rfu_NI_setSendData(1 << i, 8, gUnknown_03005000.unk_cd1 + i, 1);
+ retval = TRUE;
+ }
+
+ }
+ else if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x47)
+ rfu_clearSlot(8, i);
+ {
+
+ }
+ }
+ }
+ return retval;
+}
+
+bool8 sub_80105EC(void)
+{
+ u8 flags = 0;
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03005000.unk_cd5[i] == 11)
+ {
+ flags |= (1 << i);
+ gUnknown_03005000.unk_cd5[i] = 0;
+ }
+ }
+ if (flags)
+ {
+ rfu_REQ_disconnect(flags);
+ rfu_waitREQComplete();
+ }
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03005000.unk_cd5[i] == 10 || gUnknown_03005000.unk_cd5[i] == 11)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_801064C(u16 a0, const u8 *a1)
+{
+ u8 r1 = sub_8011CE4(a1, a0);
+ if (r1 == 0xFF)
+ return TRUE;
+ if (gUnknown_03005000.unk_cd1[r1] == 9)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_8010688(u8 a0, u16 a1, const u8 *a2)
+{
+ u8 r4 = sub_8011CE4(a2, a1);
+ gUnknown_03005000.unk_cd1[r4] = a0;
+ rfu_clearSlot(4, r4);
+ rfu_NI_setSendData(1 << r4, 8, gUnknown_03005000.unk_cd1 + r4, 1);
+}
+
+void sub_80106D4(void)
+{
+ gUnknown_03005000.unk_c85 = 8;
+ rfu_clearSlot(4, gUnknown_03005000.unk_c3e);
+ rfu_NI_setSendData(1 << gUnknown_03005000.unk_c3e, 8, &gUnknown_03005000.unk_c85, 1);
+}
+
+u8 sub_8010714(u16 a0, const u8 *a1)
+{
+ u8 r0 = sub_8011CE4(a1, a0);
+ if (r0 == 0xff)
+ return 2;
+ if (gUnknown_03007880[r0]->unk_0 == 0)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_8010750(void)
+{
+ int i;
+
+ sub_8010540();
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_03007880[i]->unk_0 == 0x26 || gUnknown_03007880[i]->unk_0 == 0x27)
+ {
+ if (gUnknown_03005000.unk_cd5[i] == 10)
+ gUnknown_03005000.unk_cd5[i] = 11;
+ rfu_clearSlot(4, i);
+ }
+ }
+}
+
+int sub_80107A0(void)
+{
+ int retval = 0;
+ if (gUnknown_03005000.unk_c85 == 8)
+ {
+ if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_0 == 0x26 || gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_0 == 0x27)
+ rfu_clearSlot(4, gUnknown_03005000.unk_c3e);
+ }
+ if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x46 || gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x48)
+ {
+ rfu_clearSlot(8, gUnknown_03005000.unk_c3e);
+ sub_8011A64(gUnknown_03005000.unk_c86, 0);
+ retval = gUnknown_03005000.unk_c86;
+ }
+ else if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x47)
+ {
+ rfu_clearSlot(8, gUnknown_03005000.unk_c3e);
+ retval = 6;
+ }
+ return retval;
+}
+
+void sub_801084C(u8 taskId)
+{
+ int i;
+
+ if (gUnknown_03005000.unk_f1 == 1 || gUnknown_03005000.unk_f1 == 2)
+ {
+ gUnknown_03005000.unk_ce8 = 0;
+ DestroyTask(taskId);
+ }
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (sub_800FC60())
+ {
+ ResetBlockReceivedFlags();
+ sub_800B348();
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (gUnknown_03005000.unk_0c == 1)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ sub_800FD14(0x7800);
+ else
+ sub_800FD14(0x7700);
+ gTasks[taskId].data[0] = 101;
+ }
+ else
+ gTasks[taskId].data[0] = 2;
+ break;
+ case 101:
+ if (gSendCmd[0] == 0)
+ gTasks[taskId].data[0] = 2;
+ break;
+ case 2:
+ if (gUnknown_03005000.playerCount)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (gUnknown_03005000.unk_0c == 1)
+ {
+ if (sub_800FC60())
+ {
+ gUnknown_03005000.unk_5a = 0;
+ sub_800FD14(0xa100);
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ if (sub_800FC88())
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ for (i = 0; i < gUnknown_03005000.playerCount; i++)
+ {
+ sub_800B3A4(i);
+ sub_800F728(i);
+ }
+ gTasks[taskId].data[0]++;
+ break;
+ case 6:
+ DestroyTask(taskId);
+ gReceivedRemoteLinkPlayers = 1;
+ gUnknown_03005000.unk_ce8 = 0;
+ sub_800D550(1, 0x258);
+ if (gUnknown_03005000.unk_ce6)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_03005000.unk_ce6 >> i) & 1)
+ {
+ gUnknown_03005000.unk_ce5 = 1 << i;
+ gUnknown_03005000.unk_ce6 ^= (1 << i);
+ }
+ }
+ }
+ break;
+ }
+}
+
+void sub_80109E8(u16 a0)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((a0 >> i) & 1)
+ gUnknown_03005000.unk_cde[i] = 0;
+ }
+}
+
+void sub_8010A14(const struct UnkRfuStruct_8010A14 *a0)
+{
+ int i;
+ gUnknown_03005000.playerCount = a0->unk_0f;
+ for (i = 0; i < 4; i++)
+ gUnknown_03005000.unk_cde[i] = a0->unk_10[i];
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ gLinkPlayers[i] = a0->unk_14[i];
+ sub_800B524(gLinkPlayers + i);
+ }
+}
+
+void sub_8010A70(void *a0)
+{
+ if (strcmp(gUnknown_082ED7EC, a0) == 0)
+ {
+ sub_8010A14(a0);
+ CpuFill16(0, a0, sizeof(struct UnkRfuStruct_8010A14));
+ ResetBlockReceivedFlag(0);
+ }
+}
+
+void sub_8010AAC(u8 taskId)
+{
+ int i;
+ struct LinkPlayerBlock *r2;
+ struct UnkRfuStruct_8010A14 *r5;
+ u8 r4 = gUnknown_03005000.unk_cde[gUnknown_082ED68C[gUnknown_03005000.unk_ce9]];
+ if (gUnknown_03005000.unk_f1 == 1 || gUnknown_03005000.unk_f1 == 2)
+ {
+ gUnknown_03005000.unk_ce8 = 0;
+ DestroyTask(taskId);
+ }
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (gSendCmd[0] == 0)
+ {
+ ResetBlockReceivedFlag(r4);
+ sub_800FD14(0x7800);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (gSendCmd[0] == 0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if ((GetBlockReceivedStatus() >> r4) & 1)
+ {
+ ResetBlockReceivedFlag(r4);
+ r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4];
+ gLinkPlayers[r4] = r2->linkPlayer;
+ sub_800B524(gLinkPlayers + r4);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 3:
+ r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
+ memcpy(r5->unk_00, gUnknown_082ED7EC, sizeof gUnknown_082ED7EC);
+ r5->unk_0f = gUnknown_03005000.playerCount;
+ for (i = 0; i < 4; i++)
+ r5->unk_10[i] = gUnknown_03005000.unk_cde[i];
+ memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
+ gTasks[taskId].data[0]++;
+ // fallthrough
+ case 4:
+ r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
+ r5->unk_0f = gUnknown_03005000.playerCount;
+ for (i = 0; i < 4; i++)
+ r5->unk_10[i] = gUnknown_03005000.unk_cde[i];
+ memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
+ if (SendBlock(0, gBlockSendBuffer, 0xa0))
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ if (sub_800A520() && GetBlockReceivedStatus() & 1)
+ {
+ CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14));
+ ResetBlockReceivedFlag(0);
+ gUnknown_03005000.unk_ce8 = 0;
+ if (gUnknown_03005000.unk_ce6)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_03005000.unk_ce6 >> i) & 1)
+ {
+ gUnknown_03005000.unk_ce5 = 1 << i;
+ gUnknown_03005000.unk_ce6 ^= (1 << i);
+ gUnknown_03005000.unk_ce8 = 1;
+ break;
+ }
+ }
+ }
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_8010D0C(u8 taskId)
+{
+ if (gUnknown_03005000.unk_f1 == 1 || gUnknown_03005000.unk_f1 == 2)
+ DestroyTask(taskId);
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (gUnknown_03005000.playerCount)
+ {
+ sub_800B348();
+ SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (sub_800A520())
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if (GetBlockReceivedStatus() & 1)
+ {
+ sub_8010A14((const struct UnkRfuStruct_8010A14 *)gBlockRecvBuffer);
+ ResetBlockReceivedFlag(0);
+ gReceivedRemoteLinkPlayers = 1;
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_8010DB4(void)
+{
+ if (gUnknown_03005000.unk_ee == 1 && gUnknown_03004140.unk_02 == 0)
+ {
+ if (gMain.callback2 == sub_8018438 || gUnknown_03004140.unk_3c->unk_04)
+ gWirelessCommType = 2;
+ SetMainCallback2(CB2_LinkError);
+ gMain.savedCallback = CB2_LinkError;
+ sub_800AF18((gUnknown_03005000.unk_0a << 16) | (gUnknown_03005000.unk_10 << 8) | gUnknown_03005000.unk_12, gUnknown_03005000.unk_124.unk_8c2, gUnknown_03005000.unk_9e8.unk_232, sub_8011A74() == 2);
+ gUnknown_03005000.unk_ee = 2;
+ CloseLink();
+ }
+ else if (gUnknown_03005000.unk_9e8.unk_233 == 1 || gUnknown_03005000.unk_124.unk_8c3 == 1)
+ {
+ if (gUnknown_03004140.unk_02)
+ sub_800D630();
+ sub_8011A64(1, 0x7000);
+ sub_8011170(0x7000);
+ }
+}
+
+void rfu_REQ_recvData_then_sendData(void)
+{
+ if (gUnknown_03004140.unk_06 == 1)
+ {
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ rfu_REQ_sendData_wrapper(0);
+ }
+}
+
+bool32 sub_8010EC0(void)
+{
+ bool32 retval = FALSE;
+ gUnknown_03005000.unk_ccd = 0;
+ sub_800C54C(Random2());
+ if (gUnknown_03005000.unk_ef == 0)
+ {
+ switch (gUnknown_03005000.unk_0c)
+ {
+ case 1:
+ sub_800F0F8();
+ break;
+ case 0:
+ retval = sub_800F4F0();
+ break;
+ case 2:
+ rfu_REQ_recvData_then_sendData();
+ break;
+ }
+ }
+ return retval;
+}
+
+bool32 sub_8010F1C(void)
+{
+ bool32 retval = FALSE;
+ if (gUnknown_03005000.unk_ef == 0)
+ {
+ if (gUnknown_03005000.unk_0c == 1)
+ retval = sub_800F1E0();
+ sub_8010DB4();
+ }
+ return retval;
+}
+
+void sub_8010F48(void)
+{
+ StringCopy(gUnknown_02022B22, gSaveBlock2Ptr->playerName);
+}
+
+void sub_8010F60(void)
+{
+ gUnknown_02022B14 = (struct UnkLinkRfuStruct_02022B14){};
+ sub_800DD94(&gUnknown_02022B14, 0, 0, 0);
+}
+
+void sub_8010F84(u8 a0, u32 a1, u32 a2)
+{
+ sub_800DD94(&gUnknown_02022B14, a0, a2, a1);
+}
+
+void sub_8010FA0(bool32 a0, bool32 a1)
+{
+ gUnknown_02022B14.unk_00_4 = a0;
+ gUnknown_02022B14.unk_00_5 = a1;
+}
+
+void sub_8010FCC(u32 a0, u32 a1, u32 a2)
+{
+ gUnknown_02022B14.unk_09_2 = a0;
+ gUnknown_02022B14.unk_08_0 = a1;
+ gUnknown_02022B14.unk_0b_1 = a2;
+}
+
+u8 sub_801100C(int a0)
+{
+ u8 retval = 0x80;
+ retval |= (gLinkPlayers[a0].gender << 3);
+ retval |= (gLinkPlayers[a0].trainerId & 7);
+ return retval;
+}
+
+void sub_801103C(void)
+{
+ struct UnkLinkRfuStruct_02022B14 *r5 = &gUnknown_02022B14;
+ int i;
+
+ for (i = 1; i < GetLinkPlayerCount(); i++)
+ r5->unk_04[i - 1] = sub_801100C(i);
+}
+
+void sub_8011068(u8 a0)
+{
+ gUnknown_02022B14.unk_0a_7 = a0;
+ rfu_REQ_configGameData(0, 2, &gUnknown_02022B14, gUnknown_02022B22);
+}
+
+void sub_8011090(u8 a0, u32 a1, u32 a2)
+{
+ if (a0)
+ sub_8010F84(a0, a1, a2);
+ rfu_REQ_configGameData(0, 2, &gUnknown_02022B14, gUnknown_02022B22);
+}
+
+void sub_80110B8(u32 a0)
+{
+ int i;
+ u32 r5;
+ u32 r7;
+ int r8;
+
+ if (sub_800F7DC()->unk_0a_0 == 0x45)
+ {
+ r5 = 0;
+ r7 = 0;
+ r8 = gUnknown_03005000.unk_ce2 ^ gUnknown_03005000.unk_ce3;
+ for (i = 0; i < 4; i++)
+ {
+ if ((r8 >> i) & 1)
+ {
+ r7 |= ((0x80 | ((gLinkPlayers[gUnknown_03005000.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[gUnknown_03005000.unk_cde[i]].trainerId & 7)) << (r5 << 3));
+ r5++;
+ if (r5 == a0 - 1)
+ break;
+ }
+ }
+ sub_8011090(0x45, r7, 0);
+ }
+}
+
+void sub_8011170(u32 a0)
+{
+ if (gUnknown_03005000.unk_ee == 0)
+ {
+ gUnknown_03005000.unk_10 = gUnknown_03004140.unk_14;
+ gUnknown_03005000.unk_12 = gUnknown_03004140.unk_16;
+ gUnknown_03005000.unk_0a = a0;
+ gUnknown_03005000.unk_ee = 1;
+ }
+}
+
+void sub_80111A0(void)
+{
+ gUnknown_03005000.unk_ee = 0;
+}
+
+void sub_80111B0(bool32 a0)
+{
+ if (!a0)
+ gUnknown_03005000.unk_ee = 0;
+ else
+ gUnknown_03005000.unk_ee = 4;
+}
+
+void sub_80111DC(void)
+{
+ sub_8011E94(gUnknown_03004140.unk_00, 1);
+ gUnknown_03005000.unk_00 = NULL;
+}
+
+void sub_80111FC(void)
+{
+ gUnknown_03005000.unk_00 = sub_80111DC;
+}
+
+#ifdef NONMATCHING
+void sub_801120C(u8 a0)
+{
+ u8 i;
+ u8 r6 = 0;
+ struct RfuUnk5Sub *unk5Sub;
+ switch (a0)
+ {
+ case 0x00:
+ gUnknown_03005000.unk_04 = 2;
+ break;
+ case 0x10:
+ break;
+ case 0x11:
+ sub_80115EC(gUnknown_03004140.unk_14);
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_03004140.unk_14 >> i) & 1)
+ {
+ unk5Sub = &gUnknown_03007890->unk_14[i];
+ if (unk5Sub->unk_06.unk_0a_0 == sub_800F7DC()->unk_0a_0)
+ {
+ gUnknown_03005000.unk_cd1[i] = 0;
+ gUnknown_03005000.unk_cd5[i] = 0;
+ rfu_setRecvBuffer(0x20, i, gUnknown_03005000.unk_cd5 + i, 1);
+ }
+ else
+ {
+ r6 |= (1 << i);
+ }
+ }
+ }
+ if (r6)
+ {
+ rfu_REQ_disconnect(r6);
+ rfu_waitREQComplete();
+ }
+ break;
+ case 0x12:
+ break;
+ case 0x13:
+ break;
+ case 0x14:
+ if (gUnknown_03005000.unk_ce7 != gUnknown_03004140.unk_00)
+ {
+ rfu_REQ_disconnect(gUnknown_03005000.unk_ce7 ^ gUnknown_03004140.unk_00);
+ rfu_waitREQComplete();
+ }
+ gUnknown_03005000.unk_04 = 0x11;
+ break;
+ case 0x31:
+ gUnknown_03005000.unk_f0 = 1;
+ break;
+ case 0x32:
+ gUnknown_03005000.unk_f0 = 3;
+ break;
+ case 0x30:
+ case 0x33:
+ gUnknown_03005000.unk_f0 = 4;
+ gUnknown_03005000.unk_ce2 &= ~gUnknown_03004140.unk_14;
+ if (gReceivedRemoteLinkPlayers == 1)
+ {
+ if (gUnknown_03005000.unk_ce2 == 0)
+ sub_8011170(a0);
+ else
+ sub_80111FC();
+ }
+ sub_8011A64(2, a0);
+ break;
+ case 0x42 ... 0x44:
+ break;
+ case 0xf3:
+ sub_8011A64(1, a0);
+ sub_8011170(a0);
+ gUnknown_03005000.unk_ef = 1;
+ break;
+ case 0xf0 ... 0xf2:
+ case 0xff:
+ sub_8011170(a0);
+ sub_8011A64(1, a0);
+ gUnknown_03005000.unk_cdb = 1;
+ break;
+ }
+}
+#else
+ASM_DIRECT void sub_801120C(u8 a0)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tmovs r6, 0\n"
+ "\tcmp r4, 0x32\n"
+ "\tbne _08011222\n"
+ "\tb _08011360_case_32\n"
+ "_08011222:\n"
+ "\tcmp r4, 0x32\n"
+ "\tbgt _08011252\n"
+ "\tcmp r4, 0x13\n"
+ "\tbgt _08011240\n"
+ "\tcmp r4, 0x12\n"
+ "\tblt _08011230\n"
+ "\tb _080113EE_break\n"
+ "_08011230:\n"
+ "\tcmp r4, 0x10\n"
+ "\tbne _08011236\n"
+ "\tb _080113EE_break\n"
+ "_08011236:\n"
+ "\tcmp r4, 0x10\n"
+ "\tbgt _0801128C_case_11\n"
+ "\tcmp r4, 0\n"
+ "\tbeq _0801127E_case_00\n"
+ "\tb _080113EE_break\n"
+ "_08011240:\n"
+ "\tcmp r4, 0x30\n"
+ "\tbne _08011246\n"
+ "\tb _0801136C_case_30_case_33\n"
+ "_08011246:\n"
+ "\tcmp r4, 0x30\n"
+ "\tble _0801124C\n"
+ "\tb _08011354_case_31\n"
+ "_0801124C:\n"
+ "\tcmp r4, 0x14\n"
+ "\tbeq _08011328_case_14\n"
+ "\tb _080113EE_break\n"
+ "_08011252:\n"
+ "\tcmp r4, 0x44\n"
+ "\tbgt _08011264\n"
+ "\tcmp r4, 0x42\n"
+ "\tblt _0801125C\n"
+ "\tb _080113EE_break\n"
+ "_0801125C:\n"
+ "\tcmp r4, 0x33\n"
+ "\tbne _08011262\n"
+ "\tb _0801136C_case_30_case_33\n"
+ "_08011262:\n"
+ "\tb _080113EE_break\n"
+ "_08011264:\n"
+ "\tcmp r4, 0xF3\n"
+ "\tbne _0801126A\n"
+ "\tb _080113BA_case_f3\n"
+ "_0801126A:\n"
+ "\tcmp r4, 0xF3\n"
+ "\tbgt _08011276\n"
+ "\tcmp r4, 0xF0\n"
+ "\tbge _08011274\n"
+ "\tb _080113EE_break\n"
+ "_08011274:\n"
+ "\tb _080113D4_case_f0_f1_f2_ff\n"
+ "_08011276:\n"
+ "\tcmp r4, 0xFF\n"
+ "\tbne _0801127C\n"
+ "\tb _080113D4_case_f0_f1_f2_ff\n"
+ "_0801127C:\n"
+ "\tb _080113EE_break\n"
+ "_0801127E_case_00:\n"
+ "\tldr r1, =gUnknown_03005000\n"
+ "\tmovs r0, 0x2\n"
+ "\tstrh r0, [r1, 0x4]\n"
+ "\tb _080113EE_break\n"
+ "\t.pool\n"
+ "_0801128C_case_11:\n"
+ "\tldr r0, =gUnknown_03004140\n"
+ "\tldrh r0, [r0, 0x14]\n"
+ "\tbl sub_80115EC\n"
+ "\tmovs r5, 0\n"
+ "\tmovs r0, 0x1\n"
+ "\tmov r8, r0\n"
+ "\tldr r1, =gUnknown_03005000\n"
+ "\tmov r9, r1\n"
+ "\tldr r3, =0x00000cd5\n"
+ "\tadd r3, r9\n"
+ "\tmov r10, r3\n"
+ "\tmovs r7, 0x7F\n"
+ "_080112A6:\n"
+ "\tldr r0, =gUnknown_03004140\n"
+ "\tldrh r0, [r0, 0x14]\n"
+ "\tasrs r0, r5\n"
+ "\tmov r1, r8\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0801130E\n"
+ "\tldr r0, =gUnknown_03007890\n"
+ "\tlsls r1, r5, 5\n"
+ "\tadds r1, 0x14\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0, 0x10]\n"
+ "\tadds r4, r7, 0\n"
+ "\tands r4, r0\n"
+ "\tbl sub_800F7DC\n"
+ "\tldrb r1, [r0, 0xA]\n"
+ "\tadds r0, r7, 0\n"
+ "\tands r0, r1\n"
+ "\tcmp r4, r0\n"
+ "\tbne _08011304\n"
+ "\tldr r0, =0x00000cd1\n"
+ "\tadd r0, r9\n"
+ "\tadds r0, r5, r0\n"
+ "\tmovs r1, 0\n"
+ "\tstrb r1, [r0]\n"
+ "\tmov r3, r10\n"
+ "\tadds r2, r5, r3\n"
+ "\tstrb r1, [r2]\n"
+ "\tmovs r0, 0x20\n"
+ "\tadds r1, r5, 0\n"
+ "\tmovs r3, 0x1\n"
+ "\tbl rfu_setRecvBuffer\n"
+ "\tb _0801130E\n"
+ "\t.pool\n"
+ "_08011304:\n"
+ "\tmov r0, r8\n"
+ "\tlsls r0, r5\n"
+ "\torrs r6, r0\n"
+ "\tlsls r0, r6, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "_0801130E:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tcmp r5, 0x3\n"
+ "\tbls _080112A6\n"
+ "\tcmp r6, 0\n"
+ "\tbeq _080113EE_break\n"
+ "\tadds r0, r6, 0\n"
+ "\tbl rfu_REQ_disconnect\n"
+ "\tbl rfu_waitREQComplete\n"
+ "\tb _080113EE_break\n"
+ "_08011328_case_14:\n"
+ "\tldr r4, =gUnknown_03005000\n"
+ "\tldr r1, =0x00000ce7\n"
+ "\tadds r0, r4, r1\n"
+ "\tldr r1, =gUnknown_03004140\n"
+ "\tldrb r2, [r0]\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r2, r0\n"
+ "\tbeq _08011342\n"
+ "\teors r0, r2\n"
+ "\tbl rfu_REQ_disconnect\n"
+ "\tbl rfu_waitREQComplete\n"
+ "_08011342:\n"
+ "\tmovs r0, 0x11\n"
+ "\tstrh r0, [r4, 0x4]\n"
+ "\tb _080113EE_break\n"
+ "\t.pool\n"
+ "_08011354_case_31:\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tadds r0, 0xF0\n"
+ "\tb _080113EA\n"
+ "\t.pool\n"
+ "_08011360_case_32:\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tadds r0, 0xF0\n"
+ "\tmovs r1, 0x3\n"
+ "\tb _080113EC\n"
+ "\t.pool\n"
+ "_0801136C_case_30_case_33:\n"
+ "\tldr r1, =gUnknown_03005000\n"
+ "\tadds r2, r1, 0\n"
+ "\tadds r2, 0xF0\n"
+ "\tmovs r0, 0x4\n"
+ "\tstrb r0, [r2]\n"
+ "\tldr r3, =0x00000ce2\n"
+ "\tadds r1, r3\n"
+ "\tldr r0, =gUnknown_03004140\n"
+ "\tldrb r2, [r0, 0x14]\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r3, r0, 0\n"
+ "\tbics r3, r2\n"
+ "\tadds r2, r3, 0\n"
+ "\tstrb r2, [r1]\n"
+ "\tldr r0, =gReceivedRemoteLinkPlayers\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbne _080113B0\n"
+ "\tcmp r2, 0\n"
+ "\tbne _080113AC\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl sub_8011170\n"
+ "\tb _080113B0\n"
+ "\t.pool\n"
+ "_080113AC:\n"
+ "\tbl sub_80111FC\n"
+ "_080113B0:\n"
+ "\tmovs r0, 0x2\n"
+ "\tadds r1, r4, 0\n"
+ "\tbl sub_8011A64\n"
+ "\tb _080113EE_break\n"
+ "_080113BA_case_f3:\n"
+ "\tmovs r0, 0x1\n"
+ "\tmovs r1, 0xF3\n"
+ "\tbl sub_8011A64\n"
+ "\tmovs r0, 0xF3\n"
+ "\tbl sub_8011170\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tadds r0, 0xEF\n"
+ "\tb _080113EA\n"
+ "\t.pool\n"
+ "_080113D4_case_f0_f1_f2_ff:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl sub_8011170\n"
+ "\tmovs r0, 0x1\n"
+ "\tadds r1, r4, 0\n"
+ "\tbl sub_8011A64\n"
+ "\tldr r0, =gUnknown_03005000\n"
+ "\tldr r1, =0x00000cdb\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "_080113EA:\n"
+ "\tmovs r1, 0x1\n"
+ "_080113EC:\n"
+ "\tstrb r1, [r0]\n"
+ "_080113EE_break:\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.pool");
+}
+#endif
diff --git a/src/main.c b/src/main.c
index d4601293b..3be6b91c7 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,50 +1,32 @@
#include "global.h"
-#include "main.h"
+#include "crt0.h"
+#include "malloc.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "librfu.h"
#include "m4a.h"
+#include "bg.h"
#include "rtc.h"
+#include "scanline_effect.h"
+#include "overworld.h"
+#include "play_time.h"
#include "random.h"
#include "dma3.h"
#include "gba/flash_internal.h"
+#include "load_save.h"
+#include "gpu_regs.h"
+#include "agb_flash.h"
+#include "sound.h"
#include "battle.h"
+#include "battle_controllers.h"
+#include "text.h"
+#include "intro.h"
+#include "main.h"
-extern u16 GetGpuReg(u8);
-extern void SetGpuReg(u8, u16);
-extern void LinkVSync(void);
-extern void sub_800E174(void);
extern void sub_800B9B8(void);
-extern void InitGpuRegManager(void);
-extern void sub_800E6D0(void);
-extern void CheckForFlashMemory(void);
-extern void InitMapMusic(void);
-extern void ResetBgs(void);
-extern void SetDefaultFontsPointer(void);
-extern void InitHeap(void *heapStart, u32 heapSize); // malloc.h
-extern void rfu_REQ_stopMode(void);
-extern void rfu_waitREQComplete(void);
-extern bool32 sub_8087634(void);
-extern bool32 sub_80875C8(void);
-extern void ClearSpriteCopyRequests(void);
-extern void PlayTimeCounter_Update(void);
-extern void MapMusicMain(void);
-extern void EnableInterrupts(u16);
-extern void sub_8033648(void);
-extern u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void));
-extern void ScanlineEffect_Stop(void);
-
-extern struct SoundInfo gSoundInfo;
-extern u32 gFlashMemoryPresent;
-extern u32 IntrMain[];
-extern u8 gHeap[];
-extern struct SaveBlock2 gSaveblock2;
-extern struct PokemonStorage gPokemonStorage;
-extern u32 gBattleTypeFlags;
extern u8 gUnknown_03002748;
extern u32 *gUnknown_0203CF5C;
-void Timer3Intr(void);
-bool8 HandleLinkConnection(void);
-void c2_copyright_1(void);
-
static void VBlankIntr(void);
static void HBlankIntr(void);
static void VCountIntr(void);
@@ -79,19 +61,19 @@ const IntrFunc gIntrTableTemplate[] =
static u16 gUnknown_03000000;
-extern u16 gKeyRepeatStartDelay;
-extern u8 gUnknown_030022B4;
-extern struct Main gMain;
-extern u16 gKeyRepeatContinueDelay;
-extern u8 gSoftResetDisabled;
-extern IntrFunc gIntrTable[INTR_COUNT];
-extern bool8 gLinkVSyncDisabled;
-extern u32 IntrMain_Buffer[0x200];
-extern u8 gPcmDmaCounter;
+u16 gKeyRepeatStartDelay;
+bool8 gLinkTransferringData;
+struct Main gMain;
+u16 gKeyRepeatContinueDelay;
+bool8 gSoftResetDisabled;
+IntrFunc gIntrTable[INTR_COUNT];
+u8 gLinkVSyncDisabled;
+u32 IntrMain_Buffer[0x200];
+u8 gPcmDmaCounter;
-extern u16 gTrainerId;
+static EWRAM_DATA u16 gTrainerId = 0;
-EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
+//EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL;
static void UpdateLinkAndCallCallbacks(void);
static void InitMainCallbacks(void);
@@ -129,7 +111,7 @@ void AgbMain()
if (gFlashMemoryPresent != TRUE)
SetMainCallback2(NULL);
- gUnknown_030022B4 = 0;
+ gLinkTransferringData = FALSE;
gUnknown_03000000 = 0xFC0;
for (;;)
@@ -147,22 +129,22 @@ void AgbMain()
if (sub_8087634() == 1)
{
- gUnknown_030022B4 = 1;
+ gLinkTransferringData = TRUE;
UpdateLinkAndCallCallbacks();
- gUnknown_030022B4 = 0;
+ gLinkTransferringData = FALSE;
}
else
{
- gUnknown_030022B4 = 0;
+ gLinkTransferringData = FALSE;
UpdateLinkAndCallCallbacks();
if (sub_80875C8() == 1)
{
gMain.newKeys = 0;
ClearSpriteCopyRequests();
- gUnknown_030022B4 = 1;
+ gLinkTransferringData = TRUE;
UpdateLinkAndCallCallbacks();
- gUnknown_030022B4 = 0;
+ gLinkTransferringData = FALSE;
}
}
@@ -335,10 +317,10 @@ extern void CopyBufferedValuesToGpuRegs(void);
static void VBlankIntr(void)
{
- if (gLinkVSyncDisabled != FALSE)
+ if (gWirelessCommType != 0)
+ RfuVSync();
+ else if (gLinkVSyncDisabled == FALSE)
LinkVSync();
- else if (gUnknown_03002748 == FALSE)
- sub_800B9B8();
gMain.vblankCounter1++;
diff --git a/src/main_menu.c b/src/main_menu.c
index c8a868251..85a445a67 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -51,48 +51,15 @@ IWRAM_DATA u8 gUnknown_03000DD0;
// Static ROM declarations
-// .rodata
-
-// .text
-
-enum
-{
- HAS_NO_SAVED_GAME, //NEW GAME, OPTION
- HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION
- HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION
- HAS_MYSTERY_EVENTS,
-};
-
-struct ArrowStruct {
- u8 unk0[6];
- u16 unk6[5];
-};
-
-extern struct BgTemplate gUnknown_082FF0E8[];
-extern struct WindowTemplate gUnknown_082FF038[];
-extern struct WindowTemplate gUnknown_082FF070[];
-extern u8 gUnknown_082FF0E0[];
-extern struct WindowTemplate gUnknown_082FF048[];
-extern struct ArrowStruct gUnknown_082FF0F4;
-extern struct BgTemplate gUnknown_082FF0F0;
-extern struct WindowTemplate gUnknown_082FF080[];
-extern const union AffineAnimCmd *const gUnknown_082FF114[];
-extern struct WindowTemplate gUnknown_082FF088[];
-extern const struct MenuAction gUnknown_082FF118[];
-extern u8* gMalePresetNames[];
-extern u8* gFemalePresetNames[];
-extern u8 gUnknown_082FF0E3[];
-
u32 InitMainMenu(bool8);
void Task_MainMenuCheckSaveFile(u8);
void Task_MainMenuCheckBattery(u8);
void Task_WaitForSaveFileErrorWindow(u8);
void CreateMainMenuErrorWindow(const u8*);
-void sub_8032250(struct WindowTemplate*);
+void sub_8032250(const struct WindowTemplate*);
void Task_DisplayMainMenu(u8);
void Task_WaitForBatteryDryErrorWindow(u8);
void fmt_savegame(void);
-u8 AddScrollIndicatorArrowPair(struct ArrowStruct*, u16*);
void HighlightSelectedMainMenuItem(u8, u8, s16);
void Task_HandleMainMenuInput(u8);
void Task_HandleMainMenuAPressed(u8);
@@ -119,7 +86,7 @@ void task_new_game_prof_birch_speech_9(u8);
void task_new_game_prof_birch_speech_10(u8);
void task_new_game_prof_birch_speech_11(u8);
void LoadMainMenuWindowFrameTiles(u8, u16);
-void DrawMainMenuWindowBorder(struct WindowTemplate*, u16);
+void DrawMainMenuWindowBorder(const struct WindowTemplate*, u16);
void Task_HighlightSelectedMainMenuItem(u8);
void task_new_game_prof_birch_speech_12(u8);
void task_new_game_prof_birch_speech_13(u8);
@@ -154,6 +121,126 @@ void fmt_player(void);
void fmt_badges(void);
void sub_8032474(u8, u8, u8, u8, u8, u8);
+// .rodata
+
+const u16 gUnknown_082FECFC[][16] = {
+ INCBIN_U16("graphics/birch_speech/bg0.gbapal"),
+ INCBIN_U16("graphics/birch_speech/bg1.gbapal")
+};
+
+const u8 gBirchIntroShadowGfx[] = INCBIN_U8("graphics/birch_speech/shadow.4bpp.lz");
+const u8 gUnknown_082FEEF0[] = INCBIN_U8("graphics/birch_speech/map.bin.lz");
+const u16 gUnknown_082FF018[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal");
+const u16 gUnknown_082FF028[] = {0, 0, 0, 0, 0, 0, 0, 0};
+
+const struct WindowTemplate gUnknown_082FF038[] = {
+ {0, 2, 1, 26, 2, 15, 1},
+ {0, 2, 5, 26, 2, 15, 0x35}
+};
+
+const struct WindowTemplate gUnknown_082FF048[] = {
+ {0, 2, 1, 26, 6, 15, 1},
+ {0, 2, 9, 26, 2, 15, 0x9D},
+ {0, 2, 13, 26, 2, 15, 0xD1},
+ {0, 2, 17, 26, 2, 15, 0x105},
+ {0, 2, 21, 26, 2, 15, 0x139}
+};
+
+const struct WindowTemplate gUnknown_082FF070[] = {
+ {0, 2, 15, 26, 4, 15, 0x16D},
+ {0xFF, 0, 0, 0, 0, 0, 0}
+};
+
+const struct WindowTemplate gUnknown_082FF080[] = {
+ {0, 2, 15, 27, 4, 15, 1},
+ {0, 3, 5, 6, 4, 15, 0x6D},
+ {0, 3, 2, 9, 10, 15, 0x85},
+ {0xFF, 0, 0, 0, 0, 0, 0}
+};
+
+const u16 gMainMenuBgPal[] = INCBIN_U16("graphics/misc/main_menu_bg.gbapal");
+const u16 gMainMenuTextPal[] = INCBIN_U16("graphics/misc/main_menu_text.gbapal");
+
+const u8 gUnknown_082FF0E0[] = {10, 11, 12};
+const u8 gUnknown_082FF0E3[] = {10, 1, 12};
+
+const struct BgTemplate gUnknown_082FF0E8[] = {
+ {0, 2, 30, 0, 0, 0, 0},
+ {1, 0, 7, 0, 0, 3, 0}
+};
+
+const struct BgTemplate gUnknown_082FF0F0 = {0, 3, 30, 0, 0, 0, 0};
+
+const struct ArrowStruct gUnknown_082FF0F4 = {2, 0x78, 8, 3, 0x78, 0x98, 3, 4, 1, 1, 0};
+
+const union AffineAnimCmd gUnknown_082FF104[] = {
+ AFFINEANIMCMD_FRAME(-2, -2, 0, 0x30),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gUnknown_082FF114 = gUnknown_082FF104;
+
+const struct MenuAction gUnknown_082FF118[] = {
+ {gText_BirchBoy, NULL},
+ {gText_BirchGirl, NULL}
+};
+
+const u8 *const gMalePresetNames[] = {
+ gText_DefaultNameStu,
+ gText_DefaultNameMilton,
+ gText_DefaultNameTom,
+ gText_DefaultNameKenny,
+ gText_DefaultNameReid,
+ gText_DefaultNameJude,
+ gText_DefaultNameJaxson,
+ gText_DefaultNameEaston,
+ gText_DefaultNameWalker,
+ gText_DefaultNameTeru,
+ gText_DefaultNameJohnny,
+ gText_DefaultNameBrett,
+ gText_DefaultNameSeth,
+ gText_DefaultNameTerry,
+ gText_DefaultNameCasey,
+ gText_DefaultNameDarren,
+ gText_DefaultNameLandon,
+ gText_DefaultNameCollin,
+ gText_DefaultNameStanley,
+ gText_DefaultNameQuincy
+};
+
+const u8 *const gFemalePresetNames[] = {
+ gText_DefaultNameKimmy,
+ gText_DefaultNameTiara,
+ gText_DefaultNameBella,
+ gText_DefaultNameJayla,
+ gText_DefaultNameAllie,
+ gText_DefaultNameLianna,
+ gText_DefaultNameSara,
+ gText_DefaultNameMonica,
+ gText_DefaultNameCamila,
+ gText_DefaultNameAubree,
+ gText_DefaultNameRuthie,
+ gText_DefaultNameHazel,
+ gText_DefaultNameNadine,
+ gText_DefaultNameTanja,
+ gText_DefaultNameYasmin,
+ gText_DefaultNameNicola,
+ gText_DefaultNameLillie,
+ gText_DefaultNameTerra,
+ gText_DefaultNameLucy,
+ gText_DefaultNameHalie
+};
+
+// .text
+
+enum
+{
+ HAS_NO_SAVED_GAME, //NEW GAME, OPTION
+ HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION
+ HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION
+ HAS_MYSTERY_EVENTS,
+};
+
void CB2_MainMenu(void)
{
RunTasks();
@@ -230,7 +317,7 @@ u32 InitMainMenu(bool8 affects_palette_maybe)
EnableInterrupts(1);
SetVBlankCallback(VBlankCB_MainMenu);
SetMainCallback2(CB2_MainMenu);
- SetGpuReg(REG_OFFSET_DISPCNT, 0x3040);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
ShowBg(0);
HideBg(1);
CreateTask(Task_MainMenuCheckSaveFile, 0);
@@ -248,7 +335,7 @@ void Task_MainMenuCheckSaveFile(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, 17);
SetGpuReg(REG_OFFSET_WINOUT, 0x31);
- SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 7);
@@ -326,7 +413,7 @@ void Task_MainMenuCheckBattery(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, 17);
SetGpuReg(REG_OFFSET_WINOUT, 0x31);
- SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 7);
@@ -364,7 +451,7 @@ void Task_DisplayMainMenu(u8 taskId)
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, 17);
SetGpuReg(REG_OFFSET_WINOUT, 0x31);
- SetGpuReg(REG_OFFSET_BLDCNT, 0xC1);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 7);
@@ -862,7 +949,7 @@ void HighlightSelectedMainMenuItem(u8 menuType, u8 selectedMenuItem, s16 a)
void task_new_game_prof_birch_speech_1(u8 taskId)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
- SetGpuReg(REG_OFFSET_DISPCNT, 0x1040);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
InitBgFromTemplate(&gUnknown_082FF0F0);
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
@@ -1338,7 +1425,7 @@ void task_new_game_prof_birch_speech_part2_9(u8 taskId)
{
spriteId = gTasks[taskId].data[2];
gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].affineAnims = gUnknown_082FF114;
+ gSprites[spriteId].affineAnims = &gUnknown_082FF114;
InitSpriteAffineAnim(&gSprites[spriteId]);
StartSpriteAffineAnim(&gSprites[spriteId], 0);
gSprites[spriteId].callback = sub_80318D8;
@@ -1365,7 +1452,7 @@ void task_new_game_prof_birch_speech_part2_11(u8 taskId)
{
spriteId = gTasks[taskId].data[2];
gSprites[spriteId].callback = nullsub_11;
- SetGpuReg(REG_OFFSET_DISPCNT, 0x1040);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
BeginNormalPaletteFade(-0x10000, 0, 0, 16, -1);
gTasks[taskId].func = task_new_game_prof_birch_speech_part2_12;
}
@@ -1391,7 +1478,7 @@ void new_game_prof_birch_speech_part2_start(void)
ResetBgsAndClearDma3BusyFlags(0);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
- SetGpuReg(REG_OFFSET_DISPCNT, 0x1040);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
InitBgsFromTemplates(0, gUnknown_082FF0E8, 2);
InitBgFromTemplate(&gUnknown_082FF0F0);
SetVBlankCallback(NULL);
@@ -1493,12 +1580,12 @@ void AddBirchSpeechObjects(u8 taskId)
gSprites[spriteId2].oam.priority = 0;
gSprites[spriteId2].invisible = 1;
gTasks[taskId].data[9] = spriteId2;
- spriteId3 = CreateTrainerSprite(sub_806EFF0(0x3C), 0x78, 0x3C, 0, gDecompressionBuffer);
+ spriteId3 = CreateTrainerSprite(FacilityClassToPicIndex(0x3C), 0x78, 0x3C, 0, gDecompressionBuffer);
gSprites[spriteId3].callback = nullsub_11;
gSprites[spriteId3].invisible = 1;
gSprites[spriteId3].oam.priority = 0;
gTasks[taskId].data[10] = spriteId3;
- spriteId4 = CreateTrainerSprite(sub_806EFF0(0x3F), 0x78, 0x3C, 0, &gDecompressionBuffer[0x800]);
+ spriteId4 = CreateTrainerSprite(FacilityClassToPicIndex(0x3F), 0x78, 0x3C, 0, &gDecompressionBuffer[0x800]);
gSprites[spriteId4].callback = nullsub_11;
gSprites[spriteId4].invisible = 1;
gSprites[spriteId4].oam.priority = 0;
@@ -1532,8 +1619,8 @@ void sub_8031ACC(u8 taskId, u8 a)
{
u8 taskId2;
- SetGpuReg(REG_OFFSET_BLDCNT, 0x250);
- SetGpuReg(REG_OFFSET_BLDALPHA, 16);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_OBJ);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
SetGpuReg(REG_OFFSET_BLDY, 0);
gTasks[taskId].data[5] = 0;
taskId2 = CreateTask(sub_8031A5C, 0);
@@ -1571,8 +1658,8 @@ void sub_8031BAC(u8 taskId, u8 a)
{
u8 taskId2;
- SetGpuReg(REG_OFFSET_BLDCNT, 0x250);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x1000);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_OBJ);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
SetGpuReg(REG_OFFSET_BLDY, 0);
gTasks[taskId].data[5] = 0;
taskId2 = CreateTask(sub_8031B3C, 0);
@@ -1653,7 +1740,7 @@ void sub_8031D34(u8 taskId, u8 a)
void sub_8031D74(void)
{
- DrawMainMenuWindowBorder(gUnknown_082FF088, 0xF3);
+ DrawMainMenuWindowBorder(&gUnknown_082FF080[1], 0xF3);
FillWindowPixelBuffer(1, 17);
PrintMenuTable(1, 2, gUnknown_082FF118);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0);
@@ -1668,7 +1755,7 @@ s8 sub_8031DB4(void)
void set_default_player_name(u8 nameId)
{
- u8* name;
+ const u8* name;
u8 i;
if (gSaveBlock2Ptr->playerGender == MALE)
@@ -1760,7 +1847,7 @@ void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset)
LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 32, 32);
}
-void DrawMainMenuWindowBorder(struct WindowTemplate *template, u16 baseTileNum)
+void DrawMainMenuWindowBorder(const struct WindowTemplate *template, u16 baseTileNum)
{
u16 r9 = 1 + baseTileNum;
u16 r10 = 2 + baseTileNum;
@@ -1781,7 +1868,7 @@ void DrawMainMenuWindowBorder(struct WindowTemplate *template, u16 baseTileNum)
CopyBgTilemapBufferToVram(template->priority);
}
-void sub_8032250(struct WindowTemplate *template)
+void sub_8032250(const struct WindowTemplate *template)
{
FillBgTilemapBufferRect(template->priority, 0, template->tilemapLeft - 1, template->tilemapTop - 1, template->tilemapLeft + template->width + 1, template->tilemapTop + template->height + 1, 2);
CopyBgTilemapBufferToVram(template->priority);
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 31b366ae9..22e50f4e7 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -189,7 +189,7 @@ static void CB2_MysteryEventMenu(void)
{
if (gReceivedRemoteLinkPlayers != 0)
{
- if (sub_800A0C8(2, 2) == 3)
+ if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == 3)
{
sub_800AC34();
GetEventLoadMessage(gStringVar4, 1);
diff --git a/src/pokeball.c b/src/pokeball.c
index ada0258db..795a33827 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -15,12 +15,6 @@
#include "util.h"
#include "graphics.h"
-extern bool8 gDoingBattleAnim;
-extern u8 gActiveBattler;
-extern u8 gBattlerTarget;
-extern u16 gBattlerPartyIndexes[];
-extern u8 gBattlerSpriteIds[];
-extern u8 gHealthboxSpriteIds[];
extern struct MusicPlayerInfo gMPlayInfo_BGM;
// this file's functions
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index 2039808cb..db92d56a8 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -50,7 +50,6 @@ struct PokeblockFeedStruct
extern u16 gSpecialVar_ItemId;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern struct SpriteTemplate gUnknown_0202499C;
extern const u8 gBattleTerrainPalette_Frontier[];
extern const u8 gBattleTerrainTiles_Building[];
@@ -837,7 +836,7 @@ static u8 CreateMonSprite(struct Pokemon* mon)
gSprites[spriteId].callback = SpriteCallbackDummy;
sPokeblockFeed->noMonFlip = TRUE;
- if (!IsPokeSpriteNotFlipped(species))
+ if (!IsMonSpriteNotFlipped(species))
{
gSprites[spriteId].affineAnims = sSpriteAffineAnimTable_MonNoFlip;
gSprites[spriteId].oam.affineMode = 3;
diff --git a/src/pokemon.c b/src/pokemon.c
new file mode 100644
index 000000000..25d532204
--- /dev/null
+++ b/src/pokemon.c
@@ -0,0 +1,6094 @@
+#include "global.h"
+#include "pokemon.h"
+#include "battle.h"
+#include "battle_setup.h"
+#include "battle_message.h"
+#include "random.h"
+#include "main.h"
+#include "constants/species.h"
+#include "constants/abilities.h"
+#include "constants/items.h"
+#include "constants/trainers.h"
+#include "constants/moves.h"
+#include "constants/hold_effects.h"
+#include "constants/battle_move_effects.h"
+#include "constants/songs.h"
+#include "string_util.h"
+#include "text.h"
+#include "link.h"
+#include "event_data.h"
+#include "item.h"
+#include "battle_controllers.h"
+#include "battle_message.h"
+#include "evolution_scene.h"
+#include "pokemon_animation.h"
+#include "pokedex.h"
+#include "pokeblock.h"
+#include "sound.h"
+#include "task.h"
+#include "rtc.h"
+#include "m4a.h"
+#include "malloc.h"
+#include "util.h"
+#include "strings.h"
+#include "pokenav.h"
+#include "pokemon_storage_system.h"
+#include "recorded_battle.h"
+
+struct SpeciesItem
+{
+ u16 species;
+ u16 item;
+};
+
+// Extracts the upper 16 bits of a 32-bit number
+#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
+
+// Extracts the lower 16 bits of a 32-bit number
+#define LOHALF(n) ((n) & 0xFFFF)
+
+extern const struct OamData gUnknown_0831ACB0;
+extern const struct OamData gUnknown_0831ACA8;
+extern const struct SpriteFrameImage gUnknown_082FF3A8[];
+extern const struct SpriteFrameImage gUnknown_082FF3C8[];
+extern const struct SpriteFrameImage gUnknown_082FF3E8[];
+extern const struct SpriteFrameImage gUnknown_082FF408[];
+extern const struct SpriteFrameImage gUnknown_082FF428[];
+extern const struct SpriteFrameImage gUnknown_082FF448[];
+extern const struct SpriteFrameImage gUnknown_082FF468[];
+extern const struct SpriteFrameImage gUnknown_082FF490[];
+extern const struct SpriteFrameImage gUnknown_082FF4B8[];
+extern const struct SpriteFrameImage gUnknown_082FF4D8[];
+extern const struct SpriteFrameImage gUnknown_082FF4F8[];
+extern const struct SpriteFrameImage gUnknown_082FF518[];
+extern const union AffineAnimCmd *const gUnknown_082FF618[];
+extern const union AffineAnimCmd *const gUnknown_082FF694[];
+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[];
+extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
+extern const u8 gTrainerClassNames[][13];
+
+extern u8 pokemon_order_func(u8);
+extern u16 get_unknown_box_id(void);
+extern u8 StorageGetCurrentBox(void);
+extern void set_unknown_box_id(u8);
+extern void sub_803FA70(u8 battlerId);
+extern u8 sav1_map_get_name(void);
+extern const u8 *sub_81A1650(u8, u8 language);
+extern u8 BattleFrontierGetOpponentLvl(u8);
+extern u16 FacilityClassToPicIndex(u16);
+extern bool8 InBattlePyramid(void);
+extern bool8 InBattlePike(void);
+extern bool8 sub_806F104(void);
+extern u8 GetTrainerEncounterMusicIdInBattlePyramind(u16 trainerOpponentId);
+extern u8 sub_81D63C8(u16 trainerOpponentId);
+extern u8 GetFrontierOpponentClass(u16 trainerId);
+extern void GetFrontierTrainerName(u8* dest, u16 trainerId);
+extern void sub_81C488C(u8);
+
+// this file's functions
+static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon);
+static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType);
+static void EncryptBoxMon(struct BoxPokemon *boxMon);
+static void DecryptBoxMon(struct BoxPokemon *boxMon);
+static void sub_806E6CC(u8 taskId);
+static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
+
+// EWRAM vars
+EWRAM_DATA static u8 sLearningMoveTableID = 0;
+EWRAM_DATA u8 gPlayerPartyCount = 0;
+EWRAM_DATA u8 gEnemyPartyCount = 0;
+EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0};
+EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0};
+EWRAM_DATA struct SpriteTemplate gUnknown_0202499C = {0};
+EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
+
+// const rom data
+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};
+
+const struct SpindaSpot gSpindaSpotGraphics[] =
+{
+ {16, 7, INCBIN_U16("graphics/spinda_spots/spot_0.bin")},
+ {40, 8, INCBIN_U16("graphics/spinda_spots/spot_1.bin")},
+ {22, 25, INCBIN_U16("graphics/spinda_spots/spot_2.bin")},
+ {34, 26, INCBIN_U16("graphics/spinda_spots/spot_3.bin")}
+};
+
+#include "data/pokemon/item_effects.h"
+
+const s8 gNatureStatTable[][5] =
+{
+ // Atk Def Spd Sp.Atk Sp.Def
+ { 0, 0, 0, 0, 0}, // Hardy
+ { +1, -1, 0, 0, 0}, // Lonely
+ { +1, 0, -1, 0, 0}, // Brave
+ { +1, 0, 0, -1, 0}, // Adamant
+ { +1, 0, 0, 0, -1}, // Naughty
+ { -1, +1, 0, 0, 0}, // Bold
+ { 0, 0, 0, 0, 0}, // Docile
+ { 0, +1, -1, 0, 0}, // Relaxed
+ { 0, +1, 0, -1, 0}, // Impish
+ { 0, +1, 0, 0, -1}, // Lax
+ { -1, 0, +1, 0, 0}, // Timid
+ { 0, -1, +1, 0, 0}, // Hasty
+ { 0, 0, 0, 0, 0}, // Serious
+ { 0, 0, +1, -1, 0}, // Jolly
+ { 0, 0, +1, 0, -1}, // Naive
+ { -1, 0, 0, +1, 0}, // Modest
+ { 0, -1, 0, +1, 0}, // Mild
+ { 0, 0, -1, +1, 0}, // Quiet
+ { 0, 0, 0, 0, 0}, // Bashful
+ { 0, 0, 0, +1, -1}, // Rash
+ { -1, 0, 0, 0, +1}, // Calm
+ { 0, -1, 0, 0, +1}, // Gentle
+ { 0, 0, -1, 0, +1}, // Sassy
+ { 0, 0, 0, -1, +1}, // Careful
+ { 0, 0, 0, 0, 0}, // Quirky
+};
+
+#include "data/pokemon/tmhm_learnsets.h"
+#include "data/pokemon/trainer_class_lookups.h"
+#include "data/pokemon/cry_ids.h"
+#include "data/pokemon/experience_tables.h"
+#include "data/pokemon/base_stats.h"
+#include "data/pokemon/level_up_learnsets.h"
+#include "data/pokemon/evolution.h"
+#include "data/pokemon/level_up_learnset_pointers.h"
+
+static const u8 sMonFrontAnimIdsTable[] =
+{
+ 0x06, // SPECIES_BULBASAUR
+ 0x17, // SPECIES_IVYSAUR
+ 0x2f, // SPECIES_VENUSAUR
+ 0x52, // SPECIES_CHARMANDER
+ 0x25, // SPECIES_CHARMELEON
+ 0x10, // SPECIES_CHARIZARD
+ 0x0b, // SPECIES_SQUIRTLE
+ 0x13, // SPECIES_WARTORTLE
+ 0x19, // SPECIES_BLASTOISE
+ 0x0b, // SPECIES_CATERPIE
+ 0x0b, // SPECIES_METAPOD
+ 0x1d, // SPECIES_BUTTERFREE
+ 0x46, // SPECIES_WEEDLE
+ 0x20, // SPECIES_KAKUNA
+ 0x02, // SPECIES_BEEDRILL
+ 0x47, // SPECIES_PIDGEY
+ 0x17, // SPECIES_PIDGEOTTO
+ 0x29, // SPECIES_PIDGEOT
+ 0x43, // SPECIES_RATTATA
+ 0x2b, // SPECIES_RATICATE
+ 0x18, // SPECIES_SPEAROW
+ 0x2b, // SPECIES_FEAROW
+ 0x16, // SPECIES_EKANS
+ 0x17, // SPECIES_ARBOK
+ 0x2c, // SPECIES_PIKACHU
+ 0x17, // SPECIES_RAICHU
+ 0x2d, // SPECIES_SANDSHREW
+ 0x17, // SPECIES_SANDSLASH
+ 0x00, // SPECIES_NIDORAN_F
+ 0x17, // SPECIES_NIDORINA
+ 0x0f, // SPECIES_NIDOQUEEN
+ 0x09, // SPECIES_NIDORAN_M
+ 0x13, // SPECIES_NIDORINO
+ 0x0f, // SPECIES_NIDOKING
+ 0x00, // SPECIES_CLEFAIRY
+ 0x4a, // SPECIES_CLEFABLE
+ 0x17, // SPECIES_VULPIX
+ 0x10, // SPECIES_NINETALES
+ 0x48, // SPECIES_JIGGLYPUFF
+ 0x31, // SPECIES_WIGGLYTUFF
+ 0x00, // SPECIES_ZUBAT
+ 0x1d, // SPECIES_GOLBAT
+ 0x00, // SPECIES_ODDISH
+ 0x45, // SPECIES_GLOOM
+ 0x49, // SPECIES_VILEPLUME
+ 0x46, // SPECIES_PARAS
+ 0x0f, // SPECIES_PARASECT
+ 0x06, // SPECIES_VENONAT
+ 0x4b, // SPECIES_VENOMOTH
+ 0x10, // SPECIES_DIGLETT
+ 0x4c, // SPECIES_DUGTRIO
+ 0x52, // SPECIES_MEOWTH
+ 0x17, // SPECIES_PERSIAN
+ 0x06, // SPECIES_PSYDUCK
+ 0x4c, // SPECIES_GOLDUCK
+ 0x32, // SPECIES_MANKEY
+ 0x48, // SPECIES_PRIMEAPE
+ 0x25, // SPECIES_GROWLITHE
+ 0x02, // SPECIES_ARCANINE
+ 0x00, // SPECIES_POLIWAG
+ 0x32, // SPECIES_POLIWHIRL
+ 0x19, // SPECIES_POLIWRATH
+ 0x31, // SPECIES_ABRA
+ 0x09, // SPECIES_KADABRA
+ 0x17, // SPECIES_ALAKAZAM
+ 0x00, // SPECIES_MACHOP
+ 0x10, // SPECIES_MACHOKE
+ 0x31, // SPECIES_MACHAMP
+ 0x17, // SPECIES_BELLSPROUT
+ 0x0d, // SPECIES_WEEPINBELL
+ 0x32, // SPECIES_VICTREEBEL
+ 0x00, // SPECIES_TENTACOOL
+ 0x00, // SPECIES_TENTACRUEL
+ 0x48, // SPECIES_GEODUDE
+ 0x48, // SPECIES_GRAVELER
+ 0x2f, // SPECIES_GOLEM
+ 0x20, // SPECIES_PONYTA
+ 0x11, // SPECIES_RAPIDASH
+ 0x45, // SPECIES_SLOWPOKE
+ 0x0b, // SPECIES_SLOWBRO
+ 0x54, // SPECIES_MAGNEMITE
+ 0x2c, // SPECIES_MAGNETON
+ 0x48, // SPECIES_FARFETCHD
+ 0x4c, // SPECIES_DODUO
+ 0x41, // SPECIES_DODRIO
+ 0x0b, // SPECIES_SEEL
+ 0x45, // SPECIES_DEWGONG
+ 0x46, // SPECIES_GRIMER
+ 0x30, // SPECIES_MUK
+ 0x12, // SPECIES_SHELLDER
+ 0x1d, // SPECIES_CLOYSTER
+ 0x15, // SPECIES_GASTLY
+ 0x35, // SPECIES_HAUNTER
+ 0x3a, // SPECIES_GENGAR
+ 0x43, // SPECIES_ONIX
+ 0x4f, // SPECIES_DROWZEE
+ 0x09, // SPECIES_HYPNO
+ 0x03, // SPECIES_KRABBY
+ 0x4b, // SPECIES_KINGLER
+ 0x00, // SPECIES_VOLTORB
+ 0x00, // SPECIES_ELECTRODE
+ 0x46, // SPECIES_EXEGGCUTE
+ 0x32, // SPECIES_EXEGGUTOR
+ 0x48, // SPECIES_CUBONE
+ 0x05, // SPECIES_MAROWAK
+ 0x16, // SPECIES_HITMONLEE
+ 0x09, // SPECIES_HITMONCHAN
+ 0x45, // SPECIES_LICKITUNG
+ 0x13, // SPECIES_KOFFING
+ 0x04, // SPECIES_WEEZING
+ 0x10, // SPECIES_RHYHORN
+ 0x13, // SPECIES_RHYDON
+ 0x45, // SPECIES_CHANSEY
+ 0x48, // SPECIES_TANGELA
+ 0x17, // SPECIES_KANGASKHAN
+ 0x12, // SPECIES_HORSEA
+ 0x04, // SPECIES_SEADRA
+ 0x0d, // SPECIES_GOLDEEN
+ 0x1c, // SPECIES_SEAKING
+ 0x4e, // SPECIES_STARYU
+ 0x12, // SPECIES_STARMIE
+ 0x46, // SPECIES_MR_MIME
+ 0x02, // SPECIES_SCYTHER
+ 0x17, // SPECIES_JYNX
+ 0x2c, // SPECIES_ELECTABUZZ
+ 0x0f, // SPECIES_MAGMAR
+ 0x09, // SPECIES_PINSIR
+ 0x19, // SPECIES_TAUROS
+ 0x05, // SPECIES_MAGIKARP
+ 0x48, // SPECIES_GYARADOS
+ 0x17, // SPECIES_LAPRAS
+ 0x01, // SPECIES_DITTO
+ 0x17, // SPECIES_EEVEE
+ 0x17, // SPECIES_VAPOREON
+ 0x00, // SPECIES_JOLTEON
+ 0x17, // SPECIES_FLAREON
+ 0x52, // SPECIES_PORYGON
+ 0x51, // SPECIES_OMANYTE
+ 0x09, // SPECIES_OMASTAR
+ 0x1d, // SPECIES_KABUTO
+ 0x0f, // SPECIES_KABUTOPS
+ 0x47, // SPECIES_AERODACTYL
+ 0x0b, // SPECIES_SNORLAX
+ 0x09, // SPECIES_ARTICUNO
+ 0x2c, // SPECIES_ZAPDOS
+ 0x45, // SPECIES_MOLTRES
+ 0x00, // SPECIES_DRATINI
+ 0x10, // SPECIES_DRAGONAIR
+ 0x47, // SPECIES_DRAGONITE
+ 0x09, // SPECIES_MEWTWO
+ 0x0d, // SPECIES_MEW
+ 0x00, // SPECIES_CHIKORITA
+ 0x00, // SPECIES_BAYLEEF
+ 0x17, // SPECIES_MEGANIUM
+ 0x52, // SPECIES_CYNDAQUIL
+ 0x17, // SPECIES_QUILAVA
+ 0x10, // SPECIES_TYPHLOSION
+ 0x31, // SPECIES_TOTODILE
+ 0x0f, // SPECIES_CROCONAW
+ 0x0f, // SPECIES_FERALIGATR
+ 0x00, // SPECIES_SENTRET
+ 0x32, // SPECIES_FURRET
+ 0x47, // SPECIES_HOOTHOOT
+ 0x17, // SPECIES_NOCTOWL
+ 0x52, // SPECIES_LEDYBA
+ 0x47, // SPECIES_LEDIAN
+ 0x4f, // SPECIES_SPINARAK
+ 0x0f, // SPECIES_ARIADOS
+ 0x00, // SPECIES_CROBAT
+ 0x45, // SPECIES_CHINCHOU
+ 0x51, // SPECIES_LANTURN
+ 0x1e, // SPECIES_PICHU
+ 0x52, // SPECIES_CLEFFA
+ 0x0c, // SPECIES_IGGLYBUFF
+ 0x0b, // SPECIES_TOGEPI
+ 0x00, // SPECIES_TOGETIC
+ 0x31, // SPECIES_NATU
+ 0x09, // SPECIES_XATU
+ 0x00, // SPECIES_MAREEP
+ 0x1e, // SPECIES_FLAAFFY
+ 0x2c, // SPECIES_AMPHAROS
+ 0x0b, // SPECIES_BELLOSSOM
+ 0x00, // SPECIES_MARILL
+ 0x4a, // SPECIES_AZUMARILL
+ 0x46, // SPECIES_SUDOWOODO
+ 0x32, // SPECIES_POLITOED
+ 0x1c, // SPECIES_HOPPIP
+ 0x18, // SPECIES_SKIPLOOM
+ 0x51, // SPECIES_JUMPLUFF
+ 0x32, // SPECIES_AIPOM
+ 0x52, // SPECIES_SUNKERN
+ 0x00, // SPECIES_SUNFLORA
+ 0x2b, // SPECIES_YANMA
+ 0x00, // SPECIES_WOOPER
+ 0x16, // SPECIES_QUAGSIRE
+ 0x09, // SPECIES_ESPEON
+ 0x10, // SPECIES_UMBREON
+ 0x00, // SPECIES_MURKROW
+ 0x13, // SPECIES_SLOWKING
+ 0x1c, // SPECIES_MISDREAVUS
+ 0x0a, // SPECIES_UNOWN
+ 0x30, // SPECIES_WOBBUFFET
+ 0x1e, // SPECIES_GIRAFARIG
+ 0x0b, // SPECIES_PINECO
+ 0x10, // SPECIES_FORRETRESS
+ 0x00, // SPECIES_DUNSPARCE
+ 0x13, // SPECIES_GLIGAR
+ 0x0f, // SPECIES_STEELIX
+ 0x17, // SPECIES_SNUBBULL
+ 0x10, // SPECIES_GRANBULL
+ 0x3a, // SPECIES_QWILFISH
+ 0x02, // SPECIES_SCIZOR
+ 0x0b, // SPECIES_SHUCKLE
+ 0x41, // SPECIES_HERACROSS
+ 0x16, // SPECIES_SNEASEL
+ 0x17, // SPECIES_TEDDIURSA
+ 0x10, // SPECIES_URSARING
+ 0x17, // SPECIES_SLUGMA
+ 0x17, // SPECIES_MAGCARGO
+ 0x00, // SPECIES_SWINUB
+ 0x0f, // SPECIES_PILOSWINE
+ 0x03, // SPECIES_CORSOLA
+ 0x52, // SPECIES_REMORAID
+ 0x17, // SPECIES_OCTILLERY
+ 0x52, // SPECIES_DELIBIRD
+ 0x0d, // SPECIES_MANTINE
+ 0x17, // SPECIES_SKARMORY
+ 0x17, // SPECIES_HOUNDOUR
+ 0x10, // SPECIES_HOUNDOOM
+ 0x42, // SPECIES_KINGDRA
+ 0x32, // SPECIES_PHANPY
+ 0x19, // SPECIES_DONPHAN
+ 0x00, // SPECIES_PORYGON2
+ 0x00, // SPECIES_STANTLER
+ 0x31, // SPECIES_SMEARGLE
+ 0x16, // SPECIES_TYROGUE
+ 0x02, // SPECIES_HITMONTOP
+ 0x09, // SPECIES_SMOOCHUM
+ 0x2c, // SPECIES_ELEKID
+ 0x00, // SPECIES_MAGBY
+ 0x45, // SPECIES_MILTANK
+ 0x00, // SPECIES_BLISSEY
+ 0x2c, // SPECIES_RAIKOU
+ 0x09, // SPECIES_ENTEI
+ 0x10, // SPECIES_SUICUNE
+ 0x52, // SPECIES_LARVITAR
+ 0x10, // SPECIES_PUPITAR
+ 0x0f, // SPECIES_TYRANITAR
+ 0x3a, // SPECIES_LUGIA
+ 0x09, // SPECIES_HO_OH
+ 0x18, // SPECIES_CELEBI
+ 0x00, // 252
+ 0x00, // 253
+ 0x00, // 254
+ 0x00, // 255
+ 0x00, // 256
+ 0x00, // 257
+ 0x00, // 258
+ 0x00, // 259
+ 0x00, // 260
+ 0x00, // 261
+ 0x00, // 262
+ 0x00, // 263
+ 0x00, // 264
+ 0x00, // 265
+ 0x00, // 266
+ 0x00, // 267
+ 0x00, // 268
+ 0x00, // 269
+ 0x00, // 270
+ 0x00, // 271
+ 0x00, // 272
+ 0x00, // 273
+ 0x00, // 274
+ 0x00, // 275
+ 0x00, // 276
+ 0x00, // SPECIES_TREECKO
+ 0x17, // SPECIES_GROVYLE
+ 0x10, // SPECIES_SCEPTILE
+ 0x16, // SPECIES_TORCHIC
+ 0x06, // SPECIES_COMBUSKEN
+ 0x0f, // SPECIES_BLAZIKEN
+ 0x01, // SPECIES_MUDKIP
+ 0x04, // SPECIES_MARSHTOMP
+ 0x1e, // SPECIES_SWAMPERT
+ 0x10, // SPECIES_POOCHYENA
+ 0x10, // SPECIES_MIGHTYENA
+ 0x03, // SPECIES_ZIGZAGOON
+ 0x09, // SPECIES_LINOONE
+ 0x00, // SPECIES_WURMPLE
+ 0x00, // SPECIES_SILCOON
+ 0x04, // SPECIES_BEAUTIFLY
+ 0x04, // SPECIES_CASCOON
+ 0x06, // SPECIES_DUSTOX
+ 0x00, // SPECIES_LOTAD
+ 0x00, // SPECIES_LOMBRE
+ 0x49, // SPECIES_LUDICOLO
+ 0x05, // SPECIES_SEEDOT
+ 0x00, // SPECIES_NUZLEAF
+ 0x02, // SPECIES_SHIFTRY
+ 0x00, // SPECIES_NINCADA
+ 0x46, // SPECIES_NINJASK
+ 0x1c, // SPECIES_SHEDINJA
+ 0x1e, // SPECIES_TAILLOW
+ 0x01, // SPECIES_SWELLOW
+ 0x00, // SPECIES_SHROOMISH
+ 0x00, // SPECIES_BRELOOM
+ 0x31, // SPECIES_SPINDA
+ 0x1b, // SPECIES_WINGULL
+ 0x1c, // SPECIES_PELIPPER
+ 0x00, // SPECIES_SURSKIT
+ 0x00, // SPECIES_MASQUERAIN
+ 0x01, // SPECIES_WAILMER
+ 0x1c, // SPECIES_WAILORD
+ 0x00, // SPECIES_SKITTY
+ 0x17, // SPECIES_DELCATTY
+ 0x35, // SPECIES_KECLEON
+ 0x1d, // SPECIES_BALTOY
+ 0x51, // SPECIES_CLAYDOL
+ 0x49, // SPECIES_NOSEPASS
+ 0x17, // SPECIES_TORKOAL
+ 0x15, // SPECIES_SABLEYE
+ 0x49, // SPECIES_BARBOACH
+ 0x49, // SPECIES_WHISCASH
+ 0x1d, // SPECIES_LUVDISC
+ 0x10, // SPECIES_CORPHISH
+ 0x09, // SPECIES_CRAWDAUNT
+ 0x49, // SPECIES_FEEBAS
+ 0x22, // SPECIES_MILOTIC
+ 0x49, // SPECIES_CARVANHA
+ 0x56, // SPECIES_SHARPEDO
+ 0x10, // SPECIES_TRAPINCH
+ 0x0f, // SPECIES_VIBRAVA
+ 0x4b, // SPECIES_FLYGON
+ 0x0b, // SPECIES_MAKUHITA
+ 0x34, // SPECIES_HARIYAMA
+ 0x00, // SPECIES_ELECTRIKE
+ 0x00, // SPECIES_MANECTRIC
+ 0x04, // SPECIES_NUMEL
+ 0x10, // SPECIES_CAMERUPT
+ 0x53, // SPECIES_SPHEAL
+ 0x17, // SPECIES_SEALEO
+ 0x0f, // SPECIES_WALREIN
+ 0x49, // SPECIES_CACNEA
+ 0x04, // SPECIES_CACTURNE
+ 0x45, // SPECIES_SNORUNT
+ 0x0a, // SPECIES_GLALIE
+ 0x0e, // SPECIES_LUNATONE
+ 0x08, // SPECIES_SOLROCK
+ 0x00, // SPECIES_AZURILL
+ 0x56, // SPECIES_SPOINK
+ 0x32, // SPECIES_GRUMPIG
+ 0x00, // SPECIES_PLUSLE
+ 0x01, // SPECIES_MINUN
+ 0x00, // SPECIES_MAWILE
+ 0x05, // SPECIES_MEDITITE
+ 0x45, // SPECIES_MEDICHAM
+ 0x04, // SPECIES_SWABLU
+ 0x16, // SPECIES_ALTARIA
+ 0x32, // SPECIES_WYNAUT
+ 0x0a, // SPECIES_DUSKULL
+ 0x02, // SPECIES_DUSCLOPS
+ 0x45, // SPECIES_ROSELIA
+ 0x45, // SPECIES_SLAKOTH
+ 0x31, // SPECIES_VIGOROTH
+ 0x45, // SPECIES_SLAKING
+ 0x00, // SPECIES_GULPIN
+ 0x45, // SPECIES_SWALOT
+ 0x10, // SPECIES_TROPIUS
+ 0x03, // SPECIES_WHISMUR
+ 0x49, // SPECIES_LOUDRED
+ 0x19, // SPECIES_EXPLOUD
+ 0x12, // SPECIES_CLAMPERL
+ 0x09, // SPECIES_HUNTAIL
+ 0x1c, // SPECIES_GOREBYSS
+ 0x11, // SPECIES_ABSOL
+ 0x1c, // SPECIES_SHUPPET
+ 0x0d, // SPECIES_BANETTE
+ 0x17, // SPECIES_SEVIPER
+ 0x09, // SPECIES_ZANGOOSE
+ 0x1a, // SPECIES_RELICANTH
+ 0x45, // SPECIES_ARON
+ 0x00, // SPECIES_LAIRON
+ 0x19, // SPECIES_AGGRON
+ 0x1d, // SPECIES_CASTFORM
+ 0x00, // SPECIES_VOLBEAT
+ 0x05, // SPECIES_ILLUMISE
+ 0x17, // SPECIES_LILEEP
+ 0x19, // SPECIES_CRADILY
+ 0x12, // SPECIES_ANORITH
+ 0x10, // SPECIES_ARMALDO
+ 0x45, // SPECIES_RALTS
+ 0x00, // SPECIES_KIRLIA
+ 0x00, // SPECIES_GARDEVOIR
+ 0x19, // SPECIES_BAGON
+ 0x04, // SPECIES_SHELGON
+ 0x0f, // SPECIES_SALAMENCE
+ 0x0f, // SPECIES_BELDUM
+ 0x04, // SPECIES_METANG
+ 0x10, // SPECIES_METAGROSS
+ 0x01, // SPECIES_REGIROCK
+ 0x44, // SPECIES_REGICE
+ 0x09, // SPECIES_REGISTEEL
+ 0x2d, // SPECIES_KYOGRE
+ 0x10, // SPECIES_GROUDON
+ 0x0f, // SPECIES_RAYQUAZA
+ 0x2d, // SPECIES_LATIAS
+ 0x10, // SPECIES_LATIOS
+ 0x0d, // SPECIES_JIRACHI
+ 0x1b, // SPECIES_DEOXYS
+ 0x1d, // SPECIES_CHIMECHO
+};
+
+static const u8 sMonAnimationDelayTable[] =
+{
+ 0x00, // SPECIES_BULBASAUR
+ 0x00, // SPECIES_IVYSAUR
+ 0x00, // SPECIES_VENUSAUR
+ 0x00, // SPECIES_CHARMANDER
+ 0x00, // SPECIES_CHARMELEON
+ 0x00, // SPECIES_CHARIZARD
+ 0x00, // SPECIES_SQUIRTLE
+ 0x00, // SPECIES_WARTORTLE
+ 0x32, // SPECIES_BLASTOISE
+ 0x00, // SPECIES_CATERPIE
+ 0x00, // SPECIES_METAPOD
+ 0x00, // SPECIES_BUTTERFREE
+ 0x0a, // SPECIES_WEEDLE
+ 0x14, // SPECIES_KAKUNA
+ 0x23, // SPECIES_BEEDRILL
+ 0x00, // SPECIES_PIDGEY
+ 0x19, // SPECIES_PIDGEOTTO
+ 0x00, // SPECIES_PIDGEOT
+ 0x00, // SPECIES_RATTATA
+ 0x00, // SPECIES_RATICATE
+ 0x00, // SPECIES_SPEAROW
+ 0x02, // SPECIES_FEAROW
+ 0x1e, // SPECIES_EKANS
+ 0x00, // SPECIES_ARBOK
+ 0x00, // SPECIES_PIKACHU
+ 0x00, // SPECIES_RAICHU
+ 0x00, // SPECIES_SANDSHREW
+ 0x00, // SPECIES_SANDSLASH
+ 0x1c, // SPECIES_NIDORAN_F
+ 0x00, // SPECIES_NIDORINA
+ 0x00, // SPECIES_NIDOQUEEN
+ 0x00, // SPECIES_NIDORAN_M
+ 0x00, // SPECIES_NIDORINO
+ 0x19, // SPECIES_NIDOKING
+ 0x00, // SPECIES_CLEFAIRY
+ 0x00, // SPECIES_CLEFABLE
+ 0x00, // SPECIES_VULPIX
+ 0x00, // SPECIES_NINETALES
+ 0x00, // SPECIES_JIGGLYPUFF
+ 0x00, // SPECIES_WIGGLYTUFF
+ 0x00, // SPECIES_ZUBAT
+ 0x00, // SPECIES_GOLBAT
+ 0x00, // SPECIES_ODDISH
+ 0x00, // SPECIES_GLOOM
+ 0x00, // SPECIES_VILEPLUME
+ 0x0a, // SPECIES_PARAS
+ 0x2d, // SPECIES_PARASECT
+ 0x14, // SPECIES_VENONAT
+ 0x00, // SPECIES_VENOMOTH
+ 0x19, // SPECIES_DIGLETT
+ 0x23, // SPECIES_DUGTRIO
+ 0x28, // SPECIES_MEOWTH
+ 0x14, // SPECIES_PERSIAN
+ 0x00, // SPECIES_PSYDUCK
+ 0x00, // SPECIES_GOLDUCK
+ 0x14, // SPECIES_MANKEY
+ 0x00, // SPECIES_PRIMEAPE
+ 0x1e, // SPECIES_GROWLITHE
+ 0x28, // SPECIES_ARCANINE
+ 0x00, // SPECIES_POLIWAG
+ 0x05, // SPECIES_POLIWHIRL
+ 0x00, // SPECIES_POLIWRATH
+ 0x00, // SPECIES_ABRA
+ 0x00, // SPECIES_KADABRA
+ 0x00, // SPECIES_ALAKAZAM
+ 0x00, // SPECIES_MACHOP
+ 0x00, // SPECIES_MACHOKE
+ 0x00, // SPECIES_MACHAMP
+ 0x00, // SPECIES_BELLSPROUT
+ 0x03, // SPECIES_WEEPINBELL
+ 0x00, // SPECIES_VICTREEBEL
+ 0x00, // SPECIES_TENTACOOL
+ 0x00, // SPECIES_TENTACRUEL
+ 0x00, // SPECIES_GEODUDE
+ 0x00, // SPECIES_GRAVELER
+ 0x00, // SPECIES_GOLEM
+ 0x00, // SPECIES_PONYTA
+ 0x00, // SPECIES_RAPIDASH
+ 0x00, // SPECIES_SLOWPOKE
+ 0x00, // SPECIES_SLOWBRO
+ 0x00, // SPECIES_MAGNEMITE
+ 0x00, // SPECIES_MAGNETON
+ 0x00, // SPECIES_FARFETCHD
+ 0x00, // SPECIES_DODUO
+ 0x00, // SPECIES_DODRIO
+ 0x00, // SPECIES_SEEL
+ 0x00, // SPECIES_DEWGONG
+ 0x00, // SPECIES_GRIMER
+ 0x2d, // SPECIES_MUK
+ 0x14, // SPECIES_SHELLDER
+ 0x00, // SPECIES_CLOYSTER
+ 0x00, // SPECIES_GASTLY
+ 0x17, // SPECIES_HAUNTER
+ 0x00, // SPECIES_GENGAR
+ 0x00, // SPECIES_ONIX
+ 0x30, // SPECIES_DROWZEE
+ 0x28, // SPECIES_HYPNO
+ 0x00, // SPECIES_KRABBY
+ 0x00, // SPECIES_KINGLER
+ 0x00, // SPECIES_VOLTORB
+ 0x00, // SPECIES_ELECTRODE
+ 0x00, // SPECIES_EXEGGCUTE
+ 0x00, // SPECIES_EXEGGUTOR
+ 0x00, // SPECIES_CUBONE
+ 0x00, // SPECIES_MAROWAK
+ 0x00, // SPECIES_HITMONLEE
+ 0x19, // SPECIES_HITMONCHAN
+ 0x00, // SPECIES_LICKITUNG
+ 0x00, // SPECIES_KOFFING
+ 0x00, // SPECIES_WEEZING
+ 0x00, // SPECIES_RHYHORN
+ 0x00, // SPECIES_RHYDON
+ 0x00, // SPECIES_CHANSEY
+ 0x00, // SPECIES_TANGELA
+ 0x00, // SPECIES_KANGASKHAN
+ 0x00, // SPECIES_HORSEA
+ 0x00, // SPECIES_SEADRA
+ 0x00, // SPECIES_GOLDEEN
+ 0x00, // SPECIES_SEAKING
+ 0x00, // SPECIES_STARYU
+ 0x00, // SPECIES_STARMIE
+ 0x00, // SPECIES_MR_MIME
+ 0x0a, // SPECIES_SCYTHER
+ 0x00, // SPECIES_JYNX
+ 0x00, // SPECIES_ELECTABUZZ
+ 0x00, // SPECIES_MAGMAR
+ 0x00, // SPECIES_PINSIR
+ 0x0a, // SPECIES_TAUROS
+ 0x00, // SPECIES_MAGIKARP
+ 0x00, // SPECIES_GYARADOS
+ 0x00, // SPECIES_LAPRAS
+ 0x00, // SPECIES_DITTO
+ 0x00, // SPECIES_EEVEE
+ 0x00, // SPECIES_VAPOREON
+ 0x00, // SPECIES_JOLTEON
+ 0x00, // SPECIES_FLAREON
+ 0x00, // SPECIES_PORYGON
+ 0x00, // SPECIES_OMANYTE
+ 0x00, // SPECIES_OMASTAR
+ 0x00, // SPECIES_KABUTO
+ 0x00, // SPECIES_KABUTOPS
+ 0x00, // SPECIES_AERODACTYL
+ 0x00, // SPECIES_SNORLAX
+ 0x00, // SPECIES_ARTICUNO
+ 0x00, // SPECIES_ZAPDOS
+ 0x00, // SPECIES_MOLTRES
+ 0x00, // SPECIES_DRATINI
+ 0x00, // SPECIES_DRAGONAIR
+ 0x00, // SPECIES_DRAGONITE
+ 0x00, // SPECIES_MEWTWO
+ 0x00, // SPECIES_MEW
+ 0x00, // SPECIES_CHIKORITA
+ 0x00, // SPECIES_BAYLEEF
+ 0x00, // SPECIES_MEGANIUM
+ 0x00, // SPECIES_CYNDAQUIL
+ 0x00, // SPECIES_QUILAVA
+ 0x14, // SPECIES_TYPHLOSION
+ 0x00, // SPECIES_TOTODILE
+ 0x00, // SPECIES_CROCONAW
+ 0x05, // SPECIES_FERALIGATR
+ 0x00, // SPECIES_SENTRET
+ 0x00, // SPECIES_FURRET
+ 0x00, // SPECIES_HOOTHOOT
+ 0x00, // SPECIES_NOCTOWL
+ 0x00, // SPECIES_LEDYBA
+ 0x00, // SPECIES_LEDIAN
+ 0x00, // SPECIES_SPINARAK
+ 0x00, // SPECIES_ARIADOS
+ 0x00, // SPECIES_CROBAT
+ 0x00, // SPECIES_CHINCHOU
+ 0x00, // SPECIES_LANTURN
+ 0x00, // SPECIES_PICHU
+ 0x00, // SPECIES_CLEFFA
+ 0x00, // SPECIES_IGGLYBUFF
+ 0x00, // SPECIES_TOGEPI
+ 0x00, // SPECIES_TOGETIC
+ 0x1e, // SPECIES_NATU
+ 0x00, // SPECIES_XATU
+ 0x32, // SPECIES_MAREEP
+ 0x00, // SPECIES_FLAAFFY
+ 0x0a, // SPECIES_AMPHAROS
+ 0x00, // SPECIES_BELLOSSOM
+ 0x00, // SPECIES_MARILL
+ 0x00, // SPECIES_AZUMARILL
+ 0x00, // SPECIES_SUDOWOODO
+ 0x28, // SPECIES_POLITOED
+ 0x00, // SPECIES_HOPPIP
+ 0x00, // SPECIES_SKIPLOOM
+ 0x00, // SPECIES_JUMPLUFF
+ 0x00, // SPECIES_AIPOM
+ 0x00, // SPECIES_SUNKERN
+ 0x00, // SPECIES_SUNFLORA
+ 0x00, // SPECIES_YANMA
+ 0x00, // SPECIES_WOOPER
+ 0x00, // SPECIES_QUAGSIRE
+ 0x00, // SPECIES_ESPEON
+ 0x00, // SPECIES_UMBREON
+ 0x00, // SPECIES_MURKROW
+ 0x00, // SPECIES_SLOWKING
+ 0x00, // SPECIES_MISDREAVUS
+ 0x00, // SPECIES_UNOWN
+ 0x00, // SPECIES_WOBBUFFET
+ 0x00, // SPECIES_GIRAFARIG
+ 0x00, // SPECIES_PINECO
+ 0x00, // SPECIES_FORRETRESS
+ 0x0a, // SPECIES_DUNSPARCE
+ 0x00, // SPECIES_GLIGAR
+ 0x2d, // SPECIES_STEELIX
+ 0x00, // SPECIES_SNUBBULL
+ 0x00, // SPECIES_GRANBULL
+ 0x27, // SPECIES_QWILFISH
+ 0x13, // SPECIES_SCIZOR
+ 0x00, // SPECIES_SHUCKLE
+ 0x00, // SPECIES_HERACROSS
+ 0x00, // SPECIES_SNEASEL
+ 0x00, // SPECIES_TEDDIURSA
+ 0x00, // SPECIES_URSARING
+ 0x00, // SPECIES_SLUGMA
+ 0x00, // SPECIES_MAGCARGO
+ 0x00, // SPECIES_SWINUB
+ 0x00, // SPECIES_PILOSWINE
+ 0x00, // SPECIES_CORSOLA
+ 0x00, // SPECIES_REMORAID
+ 0x14, // SPECIES_OCTILLERY
+ 0x00, // SPECIES_DELIBIRD
+ 0x00, // SPECIES_MANTINE
+ 0x00, // SPECIES_SKARMORY
+ 0x00, // SPECIES_HOUNDOUR
+ 0x00, // SPECIES_HOUNDOOM
+ 0x00, // SPECIES_KINGDRA
+ 0x00, // SPECIES_PHANPY
+ 0x00, // SPECIES_DONPHAN
+ 0x00, // SPECIES_PORYGON2
+ 0x00, // SPECIES_STANTLER
+ 0x00, // SPECIES_SMEARGLE
+ 0x00, // SPECIES_TYROGUE
+ 0x00, // SPECIES_HITMONTOP
+ 0x28, // SPECIES_SMOOCHUM
+ 0x00, // SPECIES_ELEKID
+ 0x00, // SPECIES_MAGBY
+ 0x00, // SPECIES_MILTANK
+ 0x00, // SPECIES_BLISSEY
+ 0x00, // SPECIES_RAIKOU
+ 0x00, // SPECIES_ENTEI
+ 0x00, // SPECIES_SUICUNE
+ 0x00, // SPECIES_LARVITAR
+ 0x00, // SPECIES_PUPITAR
+ 0x0a, // SPECIES_TYRANITAR
+ 0x14, // SPECIES_LUGIA
+ 0x00, // SPECIES_HO_OH
+ 0x00, // SPECIES_CELEBI
+ 0x00, // 252
+ 0x00, // 253
+ 0x00, // 254
+ 0x00, // 255
+ 0x00, // 256
+ 0x00, // 257
+ 0x00, // 258
+ 0x00, // 259
+ 0x00, // 260
+ 0x00, // 261
+ 0x00, // 262
+ 0x00, // 263
+ 0x00, // 264
+ 0x00, // 265
+ 0x00, // 266
+ 0x00, // 267
+ 0x00, // 268
+ 0x00, // 269
+ 0x00, // 270
+ 0x00, // 271
+ 0x00, // 272
+ 0x00, // 273
+ 0x00, // 274
+ 0x00, // 275
+ 0x00, // 276
+ 0x00, // SPECIES_TREECKO
+ 0x00, // SPECIES_GROVYLE
+ 0x00, // SPECIES_SCEPTILE
+ 0x00, // SPECIES_TORCHIC
+ 0x00, // SPECIES_COMBUSKEN
+ 0x00, // SPECIES_BLAZIKEN
+ 0x00, // SPECIES_MUDKIP
+ 0x00, // SPECIES_MARSHTOMP
+ 0x00, // SPECIES_SWAMPERT
+ 0x00, // SPECIES_POOCHYENA
+ 0x00, // SPECIES_MIGHTYENA
+ 0x00, // SPECIES_ZIGZAGOON
+ 0x00, // SPECIES_LINOONE
+ 0x00, // SPECIES_WURMPLE
+ 0x00, // SPECIES_SILCOON
+ 0x00, // SPECIES_BEAUTIFLY
+ 0x00, // SPECIES_CASCOON
+ 0x00, // SPECIES_DUSTOX
+ 0x00, // SPECIES_LOTAD
+ 0x00, // SPECIES_LOMBRE
+ 0x00, // SPECIES_LUDICOLO
+ 0x00, // SPECIES_SEEDOT
+ 0x00, // SPECIES_NUZLEAF
+ 0x00, // SPECIES_SHIFTRY
+ 0x00, // SPECIES_NINCADA
+ 0x00, // SPECIES_NINJASK
+ 0x00, // SPECIES_SHEDINJA
+ 0x00, // SPECIES_TAILLOW
+ 0x00, // SPECIES_SWELLOW
+ 0x00, // SPECIES_SHROOMISH
+ 0x00, // SPECIES_BRELOOM
+ 0x00, // SPECIES_SPINDA
+ 0x00, // SPECIES_WINGULL
+ 0x00, // SPECIES_PELIPPER
+ 0x00, // SPECIES_SURSKIT
+ 0x00, // SPECIES_MASQUERAIN
+ 0x00, // SPECIES_WAILMER
+ 0x0a, // SPECIES_WAILORD
+ 0x00, // SPECIES_SKITTY
+ 0x00, // SPECIES_DELCATTY
+ 0x1e, // SPECIES_KECLEON
+ 0x00, // SPECIES_BALTOY
+ 0x00, // SPECIES_CLAYDOL
+ 0x00, // SPECIES_NOSEPASS
+ 0x00, // SPECIES_TORKOAL
+ 0x00, // SPECIES_SABLEYE
+ 0x00, // SPECIES_BARBOACH
+ 0x00, // SPECIES_WHISCASH
+ 0x00, // SPECIES_LUVDISC
+ 0x00, // SPECIES_CORPHISH
+ 0x00, // SPECIES_CRAWDAUNT
+ 0x00, // SPECIES_FEEBAS
+ 0x2d, // SPECIES_MILOTIC
+ 0x00, // SPECIES_CARVANHA
+ 0x00, // SPECIES_SHARPEDO
+ 0x00, // SPECIES_TRAPINCH
+ 0x00, // SPECIES_VIBRAVA
+ 0x00, // SPECIES_FLYGON
+ 0x00, // SPECIES_MAKUHITA
+ 0x00, // SPECIES_HARIYAMA
+ 0x00, // SPECIES_ELECTRIKE
+ 0x00, // SPECIES_MANECTRIC
+ 0x00, // SPECIES_NUMEL
+ 0x00, // SPECIES_CAMERUPT
+ 0x0f, // SPECIES_SPHEAL
+ 0x00, // SPECIES_SEALEO
+ 0x00, // SPECIES_WALREIN
+ 0x00, // SPECIES_CACNEA
+ 0x00, // SPECIES_CACTURNE
+ 0x14, // SPECIES_SNORUNT
+ 0x00, // SPECIES_GLALIE
+ 0x00, // SPECIES_LUNATONE
+ 0x00, // SPECIES_SOLROCK
+ 0x00, // SPECIES_AZURILL
+ 0x00, // SPECIES_SPOINK
+ 0x0f, // SPECIES_GRUMPIG
+ 0x00, // SPECIES_PLUSLE
+ 0x00, // SPECIES_MINUN
+ 0x00, // SPECIES_MAWILE
+ 0x00, // SPECIES_MEDITITE
+ 0x00, // SPECIES_MEDICHAM
+ 0x00, // SPECIES_SWABLU
+ 0x00, // SPECIES_ALTARIA
+ 0x0f, // SPECIES_WYNAUT
+ 0x00, // SPECIES_DUSKULL
+ 0x1e, // SPECIES_DUSCLOPS
+ 0x00, // SPECIES_ROSELIA
+ 0x00, // SPECIES_SLAKOTH
+ 0x00, // SPECIES_VIGOROTH
+ 0x00, // SPECIES_SLAKING
+ 0x00, // SPECIES_GULPIN
+ 0x00, // SPECIES_SWALOT
+ 0x00, // SPECIES_TROPIUS
+ 0x00, // SPECIES_WHISMUR
+ 0x00, // SPECIES_LOUDRED
+ 0x00, // SPECIES_EXPLOUD
+ 0x00, // SPECIES_CLAMPERL
+ 0x00, // SPECIES_HUNTAIL
+ 0x00, // SPECIES_GOREBYSS
+ 0x2d, // SPECIES_ABSOL
+ 0x00, // SPECIES_SHUPPET
+ 0x00, // SPECIES_BANETTE
+ 0x00, // SPECIES_SEVIPER
+ 0x00, // SPECIES_ZANGOOSE
+ 0x00, // SPECIES_RELICANTH
+ 0x00, // SPECIES_ARON
+ 0x00, // SPECIES_LAIRON
+ 0x00, // SPECIES_AGGRON
+ 0x00, // SPECIES_CASTFORM
+ 0x00, // SPECIES_VOLBEAT
+ 0x00, // SPECIES_ILLUMISE
+ 0x00, // SPECIES_LILEEP
+ 0x00, // SPECIES_CRADILY
+ 0x00, // SPECIES_ANORITH
+ 0x00, // SPECIES_ARMALDO
+ 0x00, // SPECIES_RALTS
+ 0x00, // SPECIES_KIRLIA
+ 0x00, // SPECIES_GARDEVOIR
+ 0x00, // SPECIES_BAGON
+ 0x00, // SPECIES_SHELGON
+ 0x46, // SPECIES_SALAMENCE
+ 0x00, // SPECIES_BELDUM
+ 0x00, // SPECIES_METANG
+ 0x00, // SPECIES_METAGROSS
+ 0x00, // SPECIES_REGIROCK
+ 0x00, // SPECIES_REGICE
+ 0x00, // SPECIES_REGISTEEL
+ 0x3c, // SPECIES_KYOGRE
+ 0x00, // SPECIES_GROUDON
+ 0x3c, // SPECIES_RAYQUAZA
+ 0x00, // SPECIES_LATIAS
+ 0x00, // SPECIES_LATIOS
+ 0x00, // SPECIES_JIRACHI
+ 0x00, // SPECIES_DEOXYS
+ 0x00, // SPECIES_CHIMECHO
+};
+
+const u8 gUnknown_08329D22[] = {0x03, 0x0c, 0x30, 0xc0}; // Masks for getting PP Up count, also PP Max values
+const u8 gUnknown_08329D26[] = {0xfc, 0xf3, 0xcf, 0x3f}; // Masks for setting PP Up count
+const u8 gUnknown_08329D2A[] = {0x01, 0x04, 0x10, 0x40}; // Values added to PP Up count
+
+const u8 gStatStageRatios[][2] =
+{
+ {10, 40}, // -6
+ {10, 35}, // -5
+ {10, 30}, // -4
+ {10, 25}, // -3
+ {10, 20}, // -2
+ {10, 15}, // -1
+ {10, 10}, // 0
+ {15, 10}, // +1
+ {20, 10}, // +2
+ {25, 10}, // +3
+ {30, 10}, // +4
+ {35, 10}, // +5
+ {40, 10}, // +6
+};
+
+static const u16 sDeoxysBaseStats[] =
+{
+ 50, // Hp
+ 95, // Attack
+ 90, // Defense
+ 180, // Speed
+ 95, // Sp.Attack
+ 90, // Sp.Defense
+};
+
+const u16 gUnknown_08329D54[] =
+{
+ FACILITY_CLASS_COOLTRAINER_M, FACILITY_CLASS_BLACK_BELT, FACILITY_CLASS_CAMPER,
+ FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_PSYCHIC_M, FACILITY_CLASS_BUG_CATCHER,
+ FACILITY_CLASS_PKMN_BREEDER_2, FACILITY_CLASS_GUITARIST, FACILITY_CLASS_COOLTRAINER_F,
+ FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_PICNICKER, FACILITY_CLASS_LASS,
+ FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_BATTLE_GIRL, FACILITY_CLASS_PKMN_BREEDER_1,
+ FACILITY_CLASS_BEAUTY
+};
+
+static const u8 sHoldEffectToType[][2] =
+{
+ {HOLD_EFFECT_BUG_POWER, TYPE_BUG},
+ {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL},
+ {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND},
+ {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK},
+ {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS},
+ {HOLD_EFFECT_DARK_POWER, TYPE_DARK},
+ {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING},
+ {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC},
+ {HOLD_EFFECT_WATER_POWER, TYPE_WATER},
+ {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING},
+ {HOLD_EFFECT_POISON_POWER, TYPE_POISON},
+ {HOLD_EFFECT_ICE_POWER, TYPE_ICE},
+ {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST},
+ {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC},
+ {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE},
+ {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON},
+ {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
+};
+
+const struct SpriteTemplate gUnknown_08329D98[MAX_BATTLERS_COUNT] =
+{
+ { // B_POSITION_PLAYER_LEFT
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF3A8,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ { // B_POSITION_OPPONENT_LEFT
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACA8,
+ .anims = NULL,
+ .images = gUnknown_082FF3C8,
+ .affineAnims = gUnknown_082FF694,
+ .callback = oac_poke_opponent,
+ },
+ { // B_POSITION_PLAYER_RIGHT
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF3E8,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ { // B_POSITION_OPPONENT_RIGHT
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACA8,
+ .anims = NULL,
+ .images = gUnknown_082FF408,
+ .affineAnims = gUnknown_082FF694,
+ .callback = oac_poke_opponent
+ },
+};
+
+static const struct SpriteTemplate gUnknown_08329DF8[] =
+{
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF428,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF448,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF468,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF490,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF4B8,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF4D8,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF4F8,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gUnknown_0831ACB0,
+ .anims = NULL,
+ .images = gUnknown_082FF518,
+ .affineAnims = gUnknown_082FF618,
+ .callback = sub_8039BB4,
+ },
+};
+
+static const u8 sSecretBaseFacilityClasses[2][5] =
+{
+ {FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_CAMPER, FACILITY_CLASS_COOLTRAINER_M},
+ {FACILITY_CLASS_LASS, FACILITY_CLASS_SCHOOL_KID_F, FACILITY_CLASS_LADY, FACILITY_CLASS_PICNICKER, FACILITY_CLASS_COOLTRAINER_F}
+};
+
+static const u8 sGetMonDataEVConstants[] =
+{
+ MON_DATA_HP_EV,
+ MON_DATA_ATK_EV,
+ MON_DATA_DEF_EV,
+ MON_DATA_SPEED_EV,
+ MON_DATA_SPDEF_EV,
+ MON_DATA_SPATK_EV
+};
+
+static const u8 gUnknown_08329EC8[] =
+{
+ STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC
+};
+
+static const s8 gUnknown_08329ECE[][3] =
+{
+ { 5, 3, 2},
+ { 5, 3, 2},
+ { 1, 1, 0},
+ { 3, 2, 1},
+ { 1, 1, 0},
+ { 1, 1, 1},
+ {-1, -1, -1},
+ {-5, -5, -10},
+ {-5, -5, -10},
+};
+
+static const u16 sHMMoves[] =
+{
+ MOVE_CUT, MOVE_FLY, MOVE_SURF, MOVE_STRENGTH, MOVE_FLASH,
+ MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, 0xFFFF
+};
+
+static const struct SpeciesItem sAlteringCaveWildMonHeldItems[] =
+{
+ {SPECIES_NONE, ITEM_NONE},
+ {SPECIES_MAREEP, ITEM_GANLON_BERRY},
+ {SPECIES_PINECO, ITEM_APICOT_BERRY},
+ {SPECIES_HOUNDOUR, ITEM_BIG_MUSHROOM},
+ {SPECIES_TEDDIURSA, ITEM_PETAYA_BERRY},
+ {SPECIES_AIPOM, ITEM_BERRY_JUICE},
+ {SPECIES_SHUCKLE, ITEM_BERRY_JUICE},
+ {SPECIES_STANTLER, ITEM_PETAYA_BERRY},
+ {SPECIES_SMEARGLE, ITEM_SALAC_BERRY},
+};
+
+static const struct OamData sOamData_8329F20 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const struct SpriteTemplate gUnknown_08329F28 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0xFFFF,
+ .oam = &sOamData_8329F20,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+// code
+void ZeroBoxMonData(struct BoxPokemon *boxMon)
+{
+ u8 *raw = (u8 *)boxMon;
+ u32 i;
+ for (i = 0; i < sizeof(struct BoxPokemon); i++)
+ raw[i] = 0;
+}
+
+void ZeroMonData(struct Pokemon *mon)
+{
+ u32 arg;
+ ZeroBoxMonData(&mon->box);
+ arg = 0;
+ SetMonData(mon, MON_DATA_STATUS, &arg);
+ SetMonData(mon, MON_DATA_LEVEL, &arg);
+ SetMonData(mon, MON_DATA_HP, &arg);
+ SetMonData(mon, MON_DATA_MAX_HP, &arg);
+ SetMonData(mon, MON_DATA_ATK, &arg);
+ SetMonData(mon, MON_DATA_DEF, &arg);
+ SetMonData(mon, MON_DATA_SPEED, &arg);
+ SetMonData(mon, MON_DATA_SPATK, &arg);
+ SetMonData(mon, MON_DATA_SPDEF, &arg);
+ arg = 255;
+ SetMonData(mon, MON_DATA_MAIL, &arg);
+}
+
+void ZeroPlayerPartyMons(void)
+{
+ s32 i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ ZeroMonData(&gPlayerParty[i]);
+}
+
+void ZeroEnemyPartyMons(void)
+{
+ s32 i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ ZeroMonData(&gEnemyParty[i]);
+}
+
+void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
+{
+ u32 arg;
+ ZeroMonData(mon);
+ CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
+ SetMonData(mon, MON_DATA_LEVEL, &level);
+ arg = 255;
+ SetMonData(mon, MON_DATA_MAIL, &arg);
+ CalculateMonStats(mon);
+}
+
+void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
+{
+ u8 speciesName[POKEMON_NAME_LENGTH + 1];
+ u32 personality;
+ u32 value;
+ u16 checksum;
+
+ ZeroBoxMonData(boxMon);
+
+ if (hasFixedPersonality)
+ personality = fixedPersonality;
+ else
+ personality = Random32();
+
+ SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality);
+
+ //Determine original trainer ID
+ if (otIdType == OT_ID_RANDOM_NO_SHINY) //Pokemon cannot be shiny
+ {
+ u32 shinyValue;
+ do
+ {
+ value = Random32();
+ shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality);
+ } while (shinyValue < 8);
+ }
+ else if (otIdType == OT_ID_PRESET) //Pokemon has a preset OT ID
+ {
+ value = fixedOtId;
+ }
+ else //Player is the OT
+ {
+ value = gSaveBlock2Ptr->playerTrainerId[0]
+ | (gSaveBlock2Ptr->playerTrainerId[1] << 8)
+ | (gSaveBlock2Ptr->playerTrainerId[2] << 16)
+ | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
+ }
+
+ SetBoxMonData(boxMon, MON_DATA_OT_ID, &value);
+
+ checksum = CalculateBoxMonChecksum(boxMon);
+ SetBoxMonData(boxMon, MON_DATA_CHECKSUM, &checksum);
+ EncryptBoxMon(boxMon);
+ GetSpeciesName(speciesName, species);
+ SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName);
+ SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage);
+ SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName);
+ SetBoxMonData(boxMon, MON_DATA_SPECIES, &species);
+ SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]);
+ SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
+ value = sav1_map_get_name();
+ SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value);
+ SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
+ SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
+ value = ITEM_POKE_BALL;
+ SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value);
+ SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender);
+
+ if (fixedIV < 32)
+ {
+ SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
+ SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
+ SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV);
+ SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &fixedIV);
+ SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV);
+ SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV);
+ }
+ else
+ {
+ u32 iv;
+ value = Random();
+
+ iv = value & 0x1F;
+ SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv);
+ iv = (value & 0x3E0) >> 5;
+ SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv);
+ iv = (value & 0x7C00) >> 10;
+ SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv);
+
+ value = Random();
+
+ iv = value & 0x1F;
+ SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv);
+ iv = (value & 0x3E0) >> 5;
+ SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv);
+ iv = (value & 0x7C00) >> 10;
+ SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv);
+ }
+
+ if (gBaseStats[species].ability2)
+ {
+ value = personality & 1;
+ SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, &value);
+ }
+
+ GiveBoxMonInitialMoveset(boxMon);
+}
+
+void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 nature)
+{
+ u32 personality;
+
+ do
+ {
+ personality = Random32();
+ }
+ while (nature != GetNatureFromPersonality(personality));
+
+ CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0);
+}
+
+void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter)
+{
+ u32 personality;
+
+ if ((u8)(unownLetter - 1) < 28)
+ {
+ u16 actualLetter;
+
+ do
+ {
+ personality = Random32();
+ actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28);
+ }
+ while (nature != GetNatureFromPersonality(personality)
+ || gender != GetGenderFromSpeciesAndPersonality(species, personality)
+ || actualLetter != unownLetter - 1);
+ }
+ else
+ {
+ do
+ {
+ personality = Random32();
+ }
+ while (nature != GetNatureFromPersonality(personality)
+ || gender != GetGenderFromSpeciesAndPersonality(species, personality));
+ }
+
+ CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0);
+}
+
+// This is only used to create Wally's Ralts.
+void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level)
+{
+ u32 personality;
+ u32 otId;
+
+ do
+ {
+ otId = Random32();
+ personality = Random32();
+ }
+ while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE);
+ CreateMon(mon, species, level, 32, 1, personality, OT_ID_PRESET, otId);
+}
+
+void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality)
+{
+ CreateMon(mon, species, level, 0, 1, personality, OT_ID_PLAYER_ID, 0);
+ SetMonData(mon, MON_DATA_IVS, &ivs);
+ CalculateMonStats(mon);
+}
+
+void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId)
+{
+ CreateMon(mon, species, level, 0, 0, 0, OT_ID_PRESET, otId);
+ SetMonData(mon, MON_DATA_HP_IV, &ivs[0]);
+ SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]);
+ SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]);
+ SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]);
+ SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]);
+ SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]);
+ CalculateMonStats(mon);
+}
+
+void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread)
+{
+ s32 i;
+ s32 statCount = 0;
+ u16 evAmount;
+ u8 evsBits;
+
+ CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0);
+
+ evsBits = evSpread;
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ if (evsBits & 1)
+ statCount++;
+ evsBits >>= 1;
+ }
+
+ evAmount = MAX_TOTAL_EVS / statCount;
+
+ evsBits = 1;
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ if (evSpread & evsBits)
+ SetMonData(mon, MON_DATA_HP_EV + i, &evAmount);
+ evsBits <<= 1;
+ }
+
+ CalculateMonStats(mon);
+}
+
+void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src)
+{
+ s32 i;
+ u8 nickname[30];
+ u8 language;
+ u8 value;
+
+ CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId);
+
+ for (i = 0; i < 4; i++)
+ SetMonMoveSlot(mon, src->moves[i], i);
+
+ SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship);
+
+ StringCopy(nickname, src->nickname);
+
+ if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
+ {
+ language = LANGUAGE_JAPANESE;
+ StripExtCtrlCodes(nickname);
+ }
+ else
+ {
+ language = GAME_LANGUAGE;
+ }
+
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+ SetMonData(mon, MON_DATA_NICKNAME, nickname);
+ SetMonData(mon, MON_DATA_HP_EV, &src->hpEV);
+ SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV);
+ SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV);
+ SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
+ SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
+ SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
+ value = src->altAbility;
+ SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
+ value = src->hpIV;
+ SetMonData(mon, MON_DATA_HP_IV, &value);
+ value = src->attackIV;
+ SetMonData(mon, MON_DATA_ATK_IV, &value);
+ value = src->defenseIV;
+ SetMonData(mon, MON_DATA_DEF_IV, &value);
+ value = src->speedIV;
+ SetMonData(mon, MON_DATA_SPEED_IV, &value);
+ value = src->spAttackIV;
+ SetMonData(mon, MON_DATA_SPATK_IV, &value);
+ value = src->spDefenseIV;
+ SetMonData(mon, MON_DATA_SPDEF_IV, &value);
+ MonRestorePP(mon);
+ CalculateMonStats(mon);
+}
+
+void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50)
+{
+ s32 i;
+ u8 nickname[30];
+ u8 level;
+ u8 language;
+ u8 value;
+
+ if (gSaveBlock2Ptr->frontierChosenLvl != 0)
+ level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontierChosenLvl);
+ else if (lvl50)
+ level = 50;
+ else
+ level = src->level;
+
+ CreateMon(mon, src->species, level, 0, 1, src->personality, 1, src->otId);
+
+ for (i = 0; i < 4; i++)
+ SetMonMoveSlot(mon, src->moves[i], i);
+
+ SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship);
+
+ StringCopy(nickname, src->nickname);
+
+ if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
+ {
+ language = LANGUAGE_JAPANESE;
+ StripExtCtrlCodes(nickname);
+ }
+ else
+ {
+ language = GAME_LANGUAGE;
+ }
+
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+ SetMonData(mon, MON_DATA_NICKNAME, nickname);
+ SetMonData(mon, MON_DATA_HP_EV, &src->hpEV);
+ SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV);
+ SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV);
+ SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
+ SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
+ SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
+ value = src->altAbility;
+ SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
+ value = src->hpIV;
+ SetMonData(mon, MON_DATA_HP_IV, &value);
+ value = src->attackIV;
+ SetMonData(mon, MON_DATA_ATK_IV, &value);
+ value = src->defenseIV;
+ SetMonData(mon, MON_DATA_DEF_IV, &value);
+ value = src->speedIV;
+ SetMonData(mon, MON_DATA_SPEED_IV, &value);
+ value = src->spAttackIV;
+ SetMonData(mon, MON_DATA_SPATK_IV, &value);
+ value = src->spDefenseIV;
+ SetMonData(mon, MON_DATA_SPDEF_IV, &value);
+ MonRestorePP(mon);
+ CalculateMonStats(mon);
+}
+
+void sub_8068528(struct Pokemon *mon, const struct UnknownPokemonStruct2 *src, u8 monId)
+{
+ s32 i;
+ u16 evAmount;
+ u8 language;
+ u32 otId = gUnknown_08610970[src->field_0_0].field_30;
+ u32 personality = ((gUnknown_08610970[src->field_0_0].field_30 >> 8) | ((gUnknown_08610970[src->field_0_0].field_30 & 0xFF) << 8))
+ + src->mons[monId].species + src->field_2;
+
+ CreateMon(mon,
+ src->mons[monId].species,
+ BattleFrontierGetOpponentLvl(src->field_0_1 - 1),
+ 0x1F,
+ TRUE,
+ personality,
+ TRUE,
+ otId);
+
+ SetMonData(mon, MON_DATA_HELD_ITEM, &src->mons[monId].item);
+ for (i = 0; i < 4; i++)
+ SetMonMoveSlot(mon, src->mons[monId].moves[i], i);
+
+ evAmount = MAX_TOTAL_EVS / NUM_STATS;
+ for (i = 0; i < NUM_STATS; i++)
+ SetMonData(mon, MON_DATA_HP_EV + i, &evAmount);
+
+ language = src->language;
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+ SetMonData(mon, MON_DATA_OT_NAME, sub_81A1650(src->field_0_0, language));
+ CalculateMonStats(mon);
+}
+
+void CreateMonWithEVSpreadPersonalityOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId)
+{
+ s32 i;
+ s32 statCount = 0;
+ u8 evsBits;
+ u16 evAmount;
+
+ // i is reused as personality value
+ do
+ {
+ i = Random32();
+ } while (nature != GetNatureFromPersonality(i));
+
+ CreateMon(mon, species, level, fixedIV, TRUE, i, TRUE, otId);
+ evsBits = evSpread;
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ if (evsBits & 1)
+ statCount++;
+ evsBits >>= 1;
+ }
+
+ evAmount = MAX_TOTAL_EVS / statCount;
+ evsBits = 1;
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ if (evSpread & evsBits)
+ SetMonData(mon, MON_DATA_HP_EV + i, &evAmount);
+ evsBits <<= 1;
+ }
+
+ CalculateMonStats(mon);
+}
+
+void sub_80686FC(struct Pokemon *mon, struct UnknownPokemonStruct *dest)
+{
+ s32 i;
+ u16 heldItem;
+
+ dest->species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
+
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ heldItem = 0;
+
+ dest->heldItem = heldItem;
+
+ for (i = 0; i < 4; i++)
+ dest->moves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL);
+
+ dest->level = GetMonData(mon, MON_DATA_LEVEL, NULL);
+ dest->ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
+ dest->otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
+ dest->hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL);
+ dest->attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL);
+ dest->defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL);
+ dest->speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL);
+ dest->spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL);
+ dest->spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL);
+ dest->friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
+ dest->hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL);
+ dest->attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL);
+ dest->defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL);
+ dest->speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
+ dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
+ dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
+ dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
+ dest->personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
+ GetMonData(mon, MON_DATA_NICKNAME, dest->nickname);
+}
+
+void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
+{
+ bool32 obedient = TRUE;
+
+ CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
+ SetMonData(mon, MON_DATA_OBEDIENCE, &obedient);
+}
+
+bool8 sub_80688F8(u8 caseId, u8 battlerId)
+{
+ switch (caseId)
+ {
+ case 0:
+ default:
+ return FALSE;
+ case 1:
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ return FALSE;
+ if (!gMain.inBattle)
+ return FALSE;
+ if (gLinkPlayers[GetMultiplayerId()].lp_field_18 == battlerId)
+ return FALSE;
+ break;
+ case 2:
+ break;
+ case 3:
+ if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ return FALSE;
+ if (!gMain.inBattle)
+ return FALSE;
+ if (battlerId == 1 || battlerId == 4 || battlerId == 5)
+ return TRUE;
+ return FALSE;
+ case 4:
+ break;
+ case 5:
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (!gMain.inBattle)
+ return FALSE;
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (gLinkPlayers[GetMultiplayerId()].lp_field_18 == battlerId)
+ return FALSE;
+ }
+ else
+ {
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!gMain.inBattle)
+ return FALSE;
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static s32 GetDeoxysStat(struct Pokemon *mon, s32 statId)
+{
+ s32 ivVal, evVal;
+ s32 statValue;
+ u8 nature, statId_;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_20)
+ return 0;
+ if (GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS)
+ return 0;
+
+ ivVal = GetMonData(mon, MON_DATA_HP_IV + statId, NULL);
+ evVal = GetMonData(mon, MON_DATA_HP_EV + statId, NULL);
+ statValue = (u16)(((sDeoxysBaseStats[statId] * 2 + ivVal + evVal / 4) * mon->level) / 100 + 5);
+
+ nature = GetNature(mon);
+ statId_ = statId; // needed to match
+ statValue = ModifyStatByNature(nature, statValue, statId_);
+
+ return statValue;
+}
+
+void SetDeoxysStats(void)
+{
+ s32 i, value;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ struct Pokemon *mon = &gPlayerParty[i];
+
+ if (GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS)
+ continue;
+
+ value = GetMonData(mon, MON_DATA_ATK, NULL);
+ SetMonData(mon, MON_DATA_ATK, &value);
+
+ value = GetMonData(mon, MON_DATA_DEF, NULL);
+ SetMonData(mon, MON_DATA_DEF, &value);
+
+ value = GetMonData(mon, MON_DATA_SPEED, NULL);
+ SetMonData(mon, MON_DATA_SPEED, &value);
+
+ value = GetMonData(mon, MON_DATA_SPATK, NULL);
+ SetMonData(mon, MON_DATA_SPATK, &value);
+
+ value = GetMonData(mon, MON_DATA_SPDEF, NULL);
+ SetMonData(mon, MON_DATA_SPDEF, &value);
+ }
+}
+
+u16 sub_8068B48(void)
+{
+ u8 linkId;
+ u32 arrId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
+ linkId = gUnknown_0203C7B4 ^ 1;
+ else
+ linkId = GetMultiplayerId() ^ 1;
+
+ arrId = gLinkPlayers[linkId].trainerId & 7;
+ arrId |= gLinkPlayers[linkId].gender << 3;
+ return FacilityClassToPicIndex(gUnknown_08329D54[arrId]);
+}
+
+u16 sub_8068BB0(void)
+{
+ u8 linkId;
+ u32 arrId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
+ linkId = gUnknown_0203C7B4 ^ 1;
+ else
+ linkId = GetMultiplayerId() ^ 1;
+
+ arrId = gLinkPlayers[linkId].trainerId & 7;
+ arrId |= gLinkPlayers[linkId].gender << 3;
+ return gFacilityClassToTrainerClass[gUnknown_08329D54[arrId]];
+}
+
+void CreateObedientEnemyMon(void)
+{
+ s32 species = gSpecialVar_0x8004;
+ s32 level = gSpecialVar_0x8005;
+ s32 itemId = gSpecialVar_0x8006;
+
+ ZeroEnemyPartyMons();
+ CreateObedientMon(&gEnemyParty[0], species, level, 32, 0, 0, 0, 0);
+ if (itemId)
+ {
+ u8 heldItem[2];
+ heldItem[0] = itemId;
+ heldItem[1] = itemId >> 8;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
+ }
+}
+
+static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon)
+{
+ u16 checksum = 0;
+ union PokemonSubstruct *substruct0 = GetSubstruct(boxMon, boxMon->personality, 0);
+ union PokemonSubstruct *substruct1 = GetSubstruct(boxMon, boxMon->personality, 1);
+ union PokemonSubstruct *substruct2 = GetSubstruct(boxMon, boxMon->personality, 2);
+ union PokemonSubstruct *substruct3 = GetSubstruct(boxMon, boxMon->personality, 3);
+ s32 i;
+
+ for (i = 0; i < 6; i++)
+ checksum += substruct0->raw[i];
+
+ for (i = 0; i < 6; i++)
+ checksum += substruct1->raw[i];
+
+ for (i = 0; i < 6; i++)
+ checksum += substruct2->raw[i];
+
+ for (i = 0; i < 6; i++)
+ checksum += substruct3->raw[i];
+
+ return checksum;
+}
+
+#define CALC_STAT(base, iv, ev, statIndex, field) \
+{ \
+ u8 baseStat = gBaseStats[species].base; \
+ s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \
+ u8 nature = GetNature(mon); \
+ n = ModifyStatByNature(nature, n, statIndex); \
+ SetMonData(mon, field, &n); \
+}
+
+void CalculateMonStats(struct Pokemon *mon)
+{
+ s32 oldMaxHP = GetMonData(mon, MON_DATA_MAX_HP, NULL);
+ s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL);
+ s32 hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL);
+ s32 hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL);
+ s32 attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL);
+ s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL);
+ s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL);
+ s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL);
+ s32 speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
+ s32 speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL);
+ s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
+ s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL);
+ s32 spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
+ s32 spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ s32 level = GetLevelFromMonExp(mon);
+ s32 newMaxHP;
+
+ SetMonData(mon, MON_DATA_LEVEL, &level);
+
+ if (species == SPECIES_SHEDINJA)
+ {
+ newMaxHP = 1;
+ }
+ else
+ {
+ s32 n = 2 * gBaseStats[species].baseHP + hpIV;
+ newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10;
+ }
+
+ gBattleScripting.field_23 = newMaxHP - oldMaxHP;
+ if (gBattleScripting.field_23 == 0)
+ gBattleScripting.field_23 = 1;
+
+ SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP);
+
+ CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK)
+ CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF)
+ CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED)
+ CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK)
+ CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF)
+
+ if (species == SPECIES_SHEDINJA)
+ {
+ if (currentHP != 0 || oldMaxHP == 0)
+ currentHP = 1;
+ else
+ return;
+ }
+ else
+ {
+ if (currentHP == 0 && oldMaxHP == 0)
+ currentHP = newMaxHP;
+ else if (currentHP != 0)
+ currentHP += newMaxHP - oldMaxHP;
+ else
+ return;
+ }
+
+ SetMonData(mon, MON_DATA_HP, &currentHP);
+}
+
+void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest)
+{
+ u32 value = 0;
+ dest->box = *src;
+ SetMonData(dest, MON_DATA_STATUS, &value);
+ SetMonData(dest, MON_DATA_HP, &value);
+ SetMonData(dest, MON_DATA_MAX_HP, &value);
+ value = 255;
+ SetMonData(dest, MON_DATA_MAIL, &value);
+ CalculateMonStats(dest);
+}
+
+u8 GetLevelFromMonExp(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u32 exp = GetMonData(mon, MON_DATA_EXP, NULL);
+ s32 level = 1;
+
+ while (level <= MAX_MON_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
+ level++;
+
+ return level - 1;
+}
+
+u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon)
+{
+ u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
+ u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL);
+ s32 level = 1;
+
+ while (level <= MAX_MON_LEVEL && gExperienceTables[gBaseStats[species].growthRate][level] <= exp)
+ level++;
+
+ return level - 1;
+}
+
+u16 GiveMoveToMon(struct Pokemon *mon, u16 move)
+{
+ return GiveMoveToBoxMon(&mon->box, move);
+}
+
+u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ {
+ u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL);
+ if (!existingMove)
+ {
+ SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &move);
+ SetBoxMonData(boxMon, MON_DATA_PP1 + i, &gBattleMoves[move].pp);
+ return move;
+ }
+ if (existingMove == move)
+ return -2;
+ }
+ return -1;
+}
+
+u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (!mon->moves[i])
+ {
+ mon->moves[i] = move;
+ mon->pp[i] = gBattleMoves[move].pp;
+ return move;
+ }
+ }
+
+ return -1;
+}
+
+void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot)
+{
+ SetMonData(mon, MON_DATA_MOVE1 + slot, &move);
+ SetMonData(mon, MON_DATA_PP1 + slot, &gBattleMoves[move].pp);
+}
+
+void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot)
+{
+ mon->moves[slot] = move;
+ mon->pp[slot] = gBattleMoves[move].pp;
+}
+
+void GiveMonInitialMoveset(struct Pokemon *mon)
+{
+ GiveBoxMonInitialMoveset(&mon->box);
+}
+
+void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
+{
+ u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
+ s32 level = GetLevelFromBoxMonExp(boxMon);
+ s32 i;
+
+ for (i = 0; gLevelUpLearnsets[species][i] != (u16)-1; i++)
+ {
+ u16 moveLevel;
+ u16 move;
+
+ moveLevel = (gLevelUpLearnsets[species][i] & 0xFE00);
+
+ if (moveLevel > (level << 9))
+ break;
+
+ move = (gLevelUpLearnsets[species][i] & 0x1FF);
+
+ if (GiveMoveToBoxMon(boxMon, move) == (u16)-1)
+ DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move);
+ }
+}
+
+u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
+{
+ u32 retVal = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL);
+
+ // since you can learn more than one move per level
+ // the game needs to know whether you decided to
+ // learn it or keep the old set to avoid asking
+ // you to learn the same move over and over again
+ if (firstMove)
+ {
+ sLearningMoveTableID = 0;
+
+ while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9))
+ {
+ sLearningMoveTableID++;
+ if (gLevelUpLearnsets[species][sLearningMoveTableID] == 0xFFFF)
+ return 0;
+ }
+ }
+
+ if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9))
+ {
+ gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF);
+ sLearningMoveTableID++;
+ retVal = GiveMoveToMon(mon, gMoveToLearn);
+ }
+
+ return retVal;
+}
+
+void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move)
+{
+ s32 i;
+ u16 moves[4];
+ u8 pp[4];
+ u8 ppBonuses;
+
+ for (i = 0; i < 3; i++)
+ {
+ moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL);
+ pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL);
+ }
+
+ ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
+ ppBonuses >>= 2;
+ moves[3] = move;
+ pp[3] = gBattleMoves[move].pp;
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(mon, MON_DATA_MOVE1 + i, &moves[i]);
+ SetMonData(mon, MON_DATA_PP1 + i, &pp[i]);
+ }
+
+ SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+}
+
+void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
+{
+ s32 i;
+ u16 moves[4];
+ u8 pp[4];
+ u8 ppBonuses;
+
+ for (i = 0; i < 3; i++)
+ {
+ moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL);
+ pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL);
+ }
+
+ ppBonuses = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, NULL);
+ ppBonuses >>= 2;
+ moves[3] = move;
+ pp[3] = gBattleMoves[move].pp;
+
+ for (i = 0; i < 4; i++)
+ {
+ SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &moves[i]);
+ SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp[i]);
+ }
+
+ SetBoxMonData(boxMon, MON_DATA_PP_BONUSES, &ppBonuses);
+}
+
+#define APPLY_STAT_MOD(var, mon, stat, statIndex) \
+{ \
+ (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)]][0]; \
+ (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)
+{
+ u32 i;
+ s32 damage = 0;
+ s32 damageHelper;
+ u8 type;
+ u16 attack, defense;
+ u16 spAttack, spDefense;
+ u8 defenderHoldEffect;
+ u8 defenderHoldEffectParam;
+ u8 attackerHoldEffect;
+ u8 attackerHoldEffectParam;
+
+ if (!powerOverride)
+ gBattleMovePower = gBattleMoves[move].power;
+ else
+ gBattleMovePower = powerOverride;
+
+ if (!typeOverride)
+ type = gBattleMoves[move].type;
+ else
+ type = typeOverride & 0x3F;
+
+ attack = attacker->attack;
+ defense = defender->defense;
+ spAttack = attacker->spAttack;
+ spDefense = defender->spDefense;
+
+ if (attacker->item == ITEM_ENIGMA_BERRY)
+ {
+ attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect;
+ attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam;
+ }
+ else
+ {
+ attackerHoldEffect = ItemId_GetHoldEffect(attacker->item);
+ attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item);
+ }
+
+ if (defender->item == ITEM_ENIGMA_BERRY)
+ {
+ defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect;
+ defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam;
+ }
+ else
+ {
+ defenderHoldEffect = ItemId_GetHoldEffect(defender->item);
+ defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item);
+ }
+
+ if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER)
+ attack *= 2;
+
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, bankAtk))
+ attack = (110 * attack) / 100;
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, bankDef))
+ defense = (110 * defense) / 100;
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankAtk))
+ spAttack = (110 * spAttack) / 100;
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankDef))
+ spDefense = (110 * spDefense) / 100;
+
+ for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++)
+ {
+ if (attackerHoldEffect == sHoldEffectToType[i][0]
+ && type == sHoldEffectToType[i][1])
+ {
+ if (type <= 8)
+ attack = (attack * (attackerHoldEffectParam + 100)) / 100;
+ else
+ spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100;
+ break;
+ }
+ }
+
+ if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND)
+ attack = (150 * attack) / 100;
+ if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS))
+ spAttack = (150 * spAttack) / 100;
+ if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS))
+ spDefense = (150 * spDefense) / 100;
+ if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL)
+ spAttack *= 2;
+ if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL)
+ spDefense *= 2;
+ if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU)
+ spAttack *= 2;
+ if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO)
+ defense *= 2;
+ if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK))
+ attack *= 2;
+ if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE))
+ spAttack /= 2;
+ if (attacker->ability == ABILITY_HUSTLE)
+ attack = (150 * attack) / 100;
+ if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MINUS, 0, 0))
+ spAttack = (150 * spAttack) / 100;
+ if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_PLUS, 0, 0))
+ spAttack = (150 * spAttack) / 100;
+ if (attacker->ability == ABILITY_GUTS && attacker->status1)
+ attack = (150 * attack) / 100;
+ if (defender->ability == ABILITY_MARVEL_SCALE && defender->status1)
+ defense = (150 * defense) / 100;
+ if (type == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFD, 0))
+ gBattleMovePower /= 2;
+ if (type == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFE, 0))
+ gBattleMovePower /= 2;
+ if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
+ defense /= 2;
+
+ if (type < TYPE_MYSTERY) // is physical
+ {
+ if (gCritMultiplier == 2)
+ {
+ if (attacker->statStages[STAT_ATK] > 6)
+ APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK)
+ else
+ damage = attack;
+ }
+ else
+ APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK)
+
+ damage = damage * gBattleMovePower;
+ damage *= (2 * attacker->level / 5 + 2);
+
+ if (gCritMultiplier == 2)
+ {
+ if (defender->statStages[STAT_DEF] < 6)
+ APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF)
+ else
+ damageHelper = defense;
+ }
+ else
+ APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF)
+
+ damage = damage / damageHelper;
+ damage /= 50;
+
+ if ((attacker->status1 & STATUS1_BURN) && attacker->ability != ABILITY_GUTS)
+ damage /= 2;
+
+ if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
+ damage = 2 * (damage / 3);
+ else
+ damage /= 2;
+ }
+
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
+ damage /= 2;
+
+ // moves always do at least 1 damage.
+ if (damage == 0)
+ damage = 1;
+ }
+
+ if (type == TYPE_MYSTERY)
+ damage = 0; // is ??? type. does 0 damage.
+
+ if (type > TYPE_MYSTERY) // is special?
+ {
+ if (gCritMultiplier == 2)
+ {
+ if (attacker->statStages[STAT_SPATK] > 6)
+ APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK)
+ else
+ damage = spAttack;
+ }
+ else
+ APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK)
+
+ damage = damage * gBattleMovePower;
+ damage *= (2 * attacker->level / 5 + 2);
+
+ if (gCritMultiplier == 2)
+ {
+ if (defender->statStages[STAT_SPDEF] < 6)
+ APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF)
+ else
+ damageHelper = spDefense;
+ }
+ else
+ APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF)
+
+ damage = (damage / damageHelper);
+ damage /= 50;
+
+ if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(2) == 2)
+ damage = 2 * (damage / 3);
+ else
+ damage /= 2;
+ }
+
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMonsInBattle(2) == 2)
+ damage /= 2;
+
+ // are effects of weather negated with cloud nine or air lock
+ if (!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0)
+ && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0))
+ {
+ if (gBattleWeather & WEATHER_RAIN_TEMPORARY)
+ {
+ switch (type)
+ {
+ case TYPE_FIRE:
+ damage /= 2;
+ break;
+ case TYPE_WATER:
+ damage = (15 * damage) / 10;
+ break;
+ }
+ }
+
+ // any weather except sun weakens solar beam
+ if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL)) && gCurrentMove == MOVE_SOLAR_BEAM)
+ damage /= 2;
+
+ // sunny
+ if (gBattleWeather & WEATHER_SUN_ANY)
+ {
+ switch (type)
+ {
+ case TYPE_FIRE:
+ damage = (15 * damage) / 10;
+ break;
+ case TYPE_WATER:
+ damage /= 2;
+ break;
+ }
+ }
+ }
+
+ // flash fire triggered
+ if ((gBattleResources->flags->flags[bankAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
+ damage = (15 * damage) / 10;
+ }
+
+ return damage + 2;
+}
+
+u8 CountAliveMonsInBattle(u8 caseId)
+{
+ s32 i;
+ u8 retVal = 0;
+
+ switch (caseId)
+ {
+ case BATTLE_ALIVE_EXCEPT_ACTIVE:
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gActiveBattler && !(gAbsentBattlerFlags & gBitTable[i]))
+ retVal++;
+ }
+ break;
+ case BATTLE_ALIVE_ATK_SIDE:
+ for (i = 0; i < 4; i++)
+ {
+ if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i]))
+ retVal++;
+ }
+ break;
+ case BATTLE_ALIVE_DEF_SIDE:
+ for (i = 0; i < 4; i++)
+ {
+ if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i]))
+ retVal++;
+ }
+ break;
+ }
+
+ return retVal;
+}
+
+static bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId)
+{
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
+ return FALSE;
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ return FALSE;
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ return FALSE;
+ if (FlagGet(badgeFlag))
+ return TRUE;
+ return FALSE;
+}
+
+u8 GetDefaultMoveTarget(u8 battlerId)
+{
+ u8 opposing = BATTLE_OPPOSITE(GetBattlerPosition(battlerId) & BIT_SIDE);
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ return GetBattlerAtPosition(opposing);
+ if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) > 1)
+ {
+ u8 position;
+
+ if ((Random() & 1) == 0)
+ position = BATTLE_PARTNER(opposing);
+ else
+ position = opposing;
+
+ return GetBattlerAtPosition(position);
+ }
+ else
+ {
+ if ((gAbsentBattlerFlags & gBitTable[opposing]))
+ return GetBattlerAtPosition(BATTLE_PARTNER(opposing));
+ else
+ return GetBattlerAtPosition(opposing);
+ }
+}
+
+u8 GetMonGender(struct Pokemon *mon)
+{
+ return GetBoxMonGender(&mon->box);
+}
+
+u8 GetBoxMonGender(struct BoxPokemon *boxMon)
+{
+ u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
+ u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL);
+
+ switch (gBaseStats[species].genderRatio)
+ {
+ case MON_MALE:
+ case MON_FEMALE:
+ case MON_GENDERLESS:
+ return gBaseStats[species].genderRatio;
+ }
+
+ if (gBaseStats[species].genderRatio > (personality & 0xFF))
+ return MON_FEMALE;
+ else
+ return MON_MALE;
+}
+
+u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality)
+{
+ switch (gBaseStats[species].genderRatio)
+ {
+ case MON_MALE:
+ case MON_FEMALE:
+ case MON_GENDERLESS:
+ return gBaseStats[species].genderRatio;
+ }
+
+ if (gBaseStats[species].genderRatio > (personality & 0xFF))
+ return MON_FEMALE;
+ else
+ return MON_MALE;
+}
+
+void sub_806A068(u16 species, u8 battlerPosition)
+{
+ if (gMonSpritesGfxPtr != NULL)
+ gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition];
+ else if (gUnknown_020249B4[0])
+ gUnknown_0202499C = gUnknown_020249B4[0]->templates[battlerPosition];
+ else if (gUnknown_020249B4[1])
+ gUnknown_0202499C = gUnknown_020249B4[1]->templates[battlerPosition];
+ else
+ gUnknown_0202499C = gUnknown_08329D98[battlerPosition];
+
+ gUnknown_0202499C.paletteTag = species;
+ if (battlerPosition == 0 || battlerPosition == 2)
+ gUnknown_0202499C.anims = gUnknown_082FF70C;
+ else if (species > 500)
+ gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species - 500];
+ else
+ gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species];
+}
+
+void sub_806A12C(u16 trainerSpriteId, u8 battlerPosition)
+{
+ gUnknown_0202499C.paletteTag = trainerSpriteId;
+ if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
+ {
+ gUnknown_0202499C = gUnknown_08329DF8[trainerSpriteId];
+ gUnknown_0202499C.anims = gUnknown_08305D0C[trainerSpriteId];
+ }
+ else
+ {
+ if (gMonSpritesGfxPtr != NULL)
+ gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition];
+ else
+ gUnknown_0202499C = gUnknown_08329D98[battlerPosition];
+ gUnknown_0202499C.anims = gUnknown_0830536C[trainerSpriteId];
+ }
+}
+
+void sub_806A1C0(u16 arg0, u8 battlerPosition)
+{
+ if (gMonSpritesGfxPtr != NULL)
+ gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition];
+ else
+ gUnknown_0202499C = gUnknown_08329D98[battlerPosition];
+
+ gUnknown_0202499C.paletteTag = arg0;
+ gUnknown_0202499C.anims = gUnknown_0830536C[arg0];
+}
+
+static void EncryptBoxMon(struct BoxPokemon *boxMon)
+{
+ u32 i;
+ for (i = 0; i < 12; i++)
+ {
+ boxMon->secure.raw[i] ^= boxMon->personality;
+ boxMon->secure.raw[i] ^= boxMon->otId;
+ }
+}
+
+static void DecryptBoxMon(struct BoxPokemon *boxMon)
+{
+ u32 i;
+ for (i = 0; i < 12; i++)
+ {
+ boxMon->secure.raw[i] ^= boxMon->otId;
+ boxMon->secure.raw[i] ^= boxMon->personality;
+ }
+}
+
+#define SUBSTRUCT_CASE(n, v1, v2, v3, v4) \
+case n: \
+ { \
+ union PokemonSubstruct *substructs0 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs1 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs2 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs3 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs4 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs5 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs6 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs7 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs8 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs9 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs10 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs11 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs12 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs13 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs14 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs15 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs16 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs17 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs18 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs19 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs20 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs21 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs22 = boxMon->secure.substructs; \
+ union PokemonSubstruct *substructs23 = boxMon->secure.substructs; \
+ \
+ switch (substructType) \
+ { \
+ case 0: \
+ substruct = &substructs ## n [v1]; \
+ break; \
+ case 1: \
+ substruct = &substructs ## n [v2]; \
+ break; \
+ case 2: \
+ substruct = &substructs ## n [v3]; \
+ break; \
+ case 3: \
+ substruct = &substructs ## n [v4]; \
+ break; \
+ } \
+ break; \
+ } \
+
+
+static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType)
+{
+ union PokemonSubstruct *substruct = NULL;
+
+ switch (personality % 24)
+ {
+ SUBSTRUCT_CASE( 0,0,1,2,3)
+ SUBSTRUCT_CASE( 1,0,1,3,2)
+ SUBSTRUCT_CASE( 2,0,2,1,3)
+ SUBSTRUCT_CASE( 3,0,3,1,2)
+ SUBSTRUCT_CASE( 4,0,2,3,1)
+ SUBSTRUCT_CASE( 5,0,3,2,1)
+ SUBSTRUCT_CASE( 6,1,0,2,3)
+ SUBSTRUCT_CASE( 7,1,0,3,2)
+ SUBSTRUCT_CASE( 8,2,0,1,3)
+ SUBSTRUCT_CASE( 9,3,0,1,2)
+ SUBSTRUCT_CASE(10,2,0,3,1)
+ SUBSTRUCT_CASE(11,3,0,2,1)
+ SUBSTRUCT_CASE(12,1,2,0,3)
+ SUBSTRUCT_CASE(13,1,3,0,2)
+ SUBSTRUCT_CASE(14,2,1,0,3)
+ SUBSTRUCT_CASE(15,3,1,0,2)
+ SUBSTRUCT_CASE(16,2,3,0,1)
+ SUBSTRUCT_CASE(17,3,2,0,1)
+ SUBSTRUCT_CASE(18,1,2,3,0)
+ SUBSTRUCT_CASE(19,1,3,2,0)
+ SUBSTRUCT_CASE(20,2,1,3,0)
+ SUBSTRUCT_CASE(21,3,1,2,0)
+ SUBSTRUCT_CASE(22,2,3,1,0)
+ SUBSTRUCT_CASE(23,3,2,1,0)
+ }
+
+ return substruct;
+}
+
+u32 GetMonData(struct Pokemon *mon, s32 field, u8* data)
+{
+ u32 ret;
+
+ switch (field)
+ {
+ case MON_DATA_STATUS:
+ ret = mon->status;
+ break;
+ case MON_DATA_LEVEL:
+ ret = mon->level;
+ break;
+ case MON_DATA_HP:
+ ret = mon->hp;
+ break;
+ case MON_DATA_MAX_HP:
+ ret = mon->maxHP;
+ break;
+ case MON_DATA_ATK:
+ ret = (u16)GetDeoxysStat(mon, STAT_ATK);
+ if (!ret)
+ ret = mon->attack;
+ break;
+ case MON_DATA_DEF:
+ ret = (u16)GetDeoxysStat(mon, STAT_DEF);
+ if (!ret)
+ ret = mon->defense;
+ break;
+ case MON_DATA_SPEED:
+ ret = (u16)GetDeoxysStat(mon, STAT_SPEED);
+ if (!ret)
+ ret = mon->speed;
+ break;
+ case MON_DATA_SPATK:
+ ret = (u16)GetDeoxysStat(mon, STAT_SPATK);
+ if (!ret)
+ ret = mon->spAttack;
+ break;
+ case MON_DATA_SPDEF:
+ ret = (u16)GetDeoxysStat(mon, STAT_SPDEF);
+ if (!ret)
+ ret = mon->spDefense;
+ break;
+ case MON_DATA_ATK2:
+ ret = mon->attack;
+ break;
+ case MON_DATA_DEF2:
+ ret = mon->defense;
+ break;
+ case MON_DATA_SPEED2:
+ ret = mon->speed;
+ break;
+ case MON_DATA_SPATK2:
+ ret = mon->spAttack;
+ break;
+ case MON_DATA_SPDEF2:
+ ret = mon->spDefense;
+ break;
+ case MON_DATA_MAIL:
+ ret = mon->mail;
+ break;
+ default:
+ ret = GetBoxMonData(&mon->box, field, data);
+ break;
+ }
+ return ret;
+}
+
+u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
+{
+ s32 i;
+ u32 retVal = 0;
+ struct PokemonSubstruct0 *substruct0 = NULL;
+ struct PokemonSubstruct1 *substruct1 = NULL;
+ struct PokemonSubstruct2 *substruct2 = NULL;
+ struct PokemonSubstruct3 *substruct3 = NULL;
+
+ if (field > MON_DATA_10)
+ {
+ substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
+ substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
+ substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2);
+ substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3);
+
+ DecryptBoxMon(boxMon);
+
+ if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
+ {
+ boxMon->isBadEgg = 1;
+ boxMon->isEgg = 1;
+ substruct3->isEgg = 1;
+ }
+ }
+
+ switch (field)
+ {
+ case MON_DATA_PERSONALITY:
+ retVal = boxMon->personality;
+ break;
+ case MON_DATA_OT_ID:
+ retVal = boxMon->otId;
+ break;
+ case MON_DATA_NICKNAME:
+ {
+ if (boxMon->isBadEgg)
+ {
+ for (retVal = 0;
+ retVal < POKEMON_NAME_LENGTH && gText_BadEgg[retVal] != EOS;
+ data[retVal] = gText_BadEgg[retVal], retVal++) {}
+
+ data[retVal] = EOS;
+ }
+ else if (boxMon->isEgg)
+ {
+ StringCopy(data, gText_EggNickname);
+ retVal = StringLength(data);
+ }
+ else if (boxMon->language == LANGUAGE_JAPANESE)
+ {
+ data[0] = EXT_CTRL_CODE_BEGIN;
+ data[1] = EXT_CTRL_CODE_JPN;
+
+ for (retVal = 2, i = 0;
+ i < 5 && boxMon->nickname[i] != EOS;
+ data[retVal] = boxMon->nickname[i], retVal++, i++) {}
+
+ data[retVal++] = EXT_CTRL_CODE_BEGIN;
+ data[retVal++] = EXT_CTRL_CODE_ENG;
+ data[retVal] = EOS;
+ }
+ else
+ {
+ for (retVal = 0;
+ retVal < POKEMON_NAME_LENGTH;
+ data[retVal] = boxMon->nickname[retVal], retVal++){}
+
+ data[retVal] = EOS;
+ }
+ break;
+ }
+ case MON_DATA_LANGUAGE:
+ retVal = boxMon->language;
+ break;
+ case MON_DATA_SANITY_BIT1:
+ retVal = boxMon->isBadEgg;
+ break;
+ case MON_DATA_SANITY_BIT2:
+ retVal = boxMon->hasSpecies;
+ break;
+ case MON_DATA_SANITY_BIT3:
+ retVal = boxMon->isEgg;
+ break;
+ case MON_DATA_OT_NAME:
+ {
+ retVal = 0;
+
+ while (retVal < OT_NAME_LENGTH)
+ {
+ data[retVal] = boxMon->otName[retVal];
+ retVal++;
+ }
+
+ data[retVal] = EOS;
+ break;
+ }
+ case MON_DATA_MARKINGS:
+ retVal = boxMon->markings;
+ break;
+ case MON_DATA_CHECKSUM:
+ retVal = boxMon->checksum;
+ break;
+ case MON_DATA_10:
+ retVal = boxMon->unknown;
+ break;
+ case MON_DATA_SPECIES:
+ retVal = boxMon->isBadEgg ? SPECIES_EGG : substruct0->species;
+ break;
+ case MON_DATA_HELD_ITEM:
+ retVal = substruct0->heldItem;
+ break;
+ case MON_DATA_EXP:
+ retVal = substruct0->experience;
+ break;
+ case MON_DATA_PP_BONUSES:
+ retVal = substruct0->ppBonuses;
+ break;
+ case MON_DATA_FRIENDSHIP:
+ retVal = substruct0->friendship;
+ break;
+ case MON_DATA_MOVE1:
+ case MON_DATA_MOVE2:
+ case MON_DATA_MOVE3:
+ case MON_DATA_MOVE4:
+ retVal = substruct1->moves[field - MON_DATA_MOVE1];
+ break;
+ case MON_DATA_PP1:
+ case MON_DATA_PP2:
+ case MON_DATA_PP3:
+ case MON_DATA_PP4:
+ retVal = substruct1->pp[field - MON_DATA_PP1];
+ break;
+ case MON_DATA_HP_EV:
+ retVal = substruct2->hpEV;
+ break;
+ case MON_DATA_ATK_EV:
+ retVal = substruct2->attackEV;
+ break;
+ case MON_DATA_DEF_EV:
+ retVal = substruct2->defenseEV;
+ break;
+ case MON_DATA_SPEED_EV:
+ retVal = substruct2->speedEV;
+ break;
+ case MON_DATA_SPATK_EV:
+ retVal = substruct2->spAttackEV;
+ break;
+ case MON_DATA_SPDEF_EV:
+ retVal = substruct2->spDefenseEV;
+ break;
+ case MON_DATA_COOL:
+ retVal = substruct2->cool;
+ break;
+ case MON_DATA_BEAUTY:
+ retVal = substruct2->beauty;
+ break;
+ case MON_DATA_CUTE:
+ retVal = substruct2->cute;
+ break;
+ case MON_DATA_SMART:
+ retVal = substruct2->smart;
+ break;
+ case MON_DATA_TOUGH:
+ retVal = substruct2->tough;
+ break;
+ case MON_DATA_SHEEN:
+ retVal = substruct2->sheen;
+ break;
+ case MON_DATA_POKERUS:
+ retVal = substruct3->pokerus;
+ break;
+ case MON_DATA_MET_LOCATION:
+ retVal = substruct3->metLocation;
+ break;
+ case MON_DATA_MET_LEVEL:
+ retVal = substruct3->metLevel;
+ break;
+ case MON_DATA_MET_GAME:
+ retVal = substruct3->metGame;
+ break;
+ case MON_DATA_POKEBALL:
+ retVal = substruct3->pokeball;
+ break;
+ case MON_DATA_OT_GENDER:
+ retVal = substruct3->otGender;
+ break;
+ case MON_DATA_HP_IV:
+ retVal = substruct3->hpIV;
+ break;
+ case MON_DATA_ATK_IV:
+ retVal = substruct3->attackIV;
+ break;
+ case MON_DATA_DEF_IV:
+ retVal = substruct3->defenseIV;
+ break;
+ case MON_DATA_SPEED_IV:
+ retVal = substruct3->speedIV;
+ break;
+ case MON_DATA_SPATK_IV:
+ retVal = substruct3->spAttackIV;
+ break;
+ case MON_DATA_SPDEF_IV:
+ retVal = substruct3->spDefenseIV;
+ break;
+ case MON_DATA_IS_EGG:
+ retVal = substruct3->isEgg;
+ break;
+ case MON_DATA_ALT_ABILITY:
+ retVal = substruct3->altAbility;
+ break;
+ case MON_DATA_COOL_RIBBON:
+ retVal = substruct3->coolRibbon;
+ break;
+ case MON_DATA_BEAUTY_RIBBON:
+ retVal = substruct3->beautyRibbon;
+ break;
+ case MON_DATA_CUTE_RIBBON:
+ retVal = substruct3->cuteRibbon;
+ break;
+ case MON_DATA_SMART_RIBBON:
+ retVal = substruct3->smartRibbon;
+ break;
+ case MON_DATA_TOUGH_RIBBON:
+ retVal = substruct3->toughRibbon;
+ break;
+ case MON_DATA_CHAMPION_RIBBON:
+ retVal = substruct3->championRibbon;
+ break;
+ case MON_DATA_WINNING_RIBBON:
+ retVal = substruct3->winningRibbon;
+ break;
+ case MON_DATA_VICTORY_RIBBON:
+ retVal = substruct3->victoryRibbon;
+ break;
+ case MON_DATA_ARTIST_RIBBON:
+ retVal = substruct3->artistRibbon;
+ break;
+ case MON_DATA_EFFORT_RIBBON:
+ retVal = substruct3->effortRibbon;
+ break;
+ case MON_DATA_GIFT_RIBBON_1:
+ retVal = substruct3->giftRibbon1;
+ break;
+ case MON_DATA_GIFT_RIBBON_2:
+ retVal = substruct3->giftRibbon2;
+ break;
+ case MON_DATA_GIFT_RIBBON_3:
+ retVal = substruct3->giftRibbon3;
+ break;
+ case MON_DATA_GIFT_RIBBON_4:
+ retVal = substruct3->giftRibbon4;
+ break;
+ case MON_DATA_GIFT_RIBBON_5:
+ retVal = substruct3->giftRibbon5;
+ break;
+ case MON_DATA_GIFT_RIBBON_6:
+ retVal = substruct3->giftRibbon6;
+ break;
+ case MON_DATA_GIFT_RIBBON_7:
+ retVal = substruct3->giftRibbon7;
+ break;
+ case MON_DATA_FATEFUL_ENCOUNTER:
+ retVal = substruct3->fatefulEncounter;
+ break;
+ case MON_DATA_OBEDIENCE:
+ retVal = substruct3->obedient;
+ break;
+ case MON_DATA_SPECIES2:
+ retVal = substruct0->species;
+ if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg))
+ retVal = SPECIES_EGG;
+ break;
+ case MON_DATA_IVS:
+ retVal = substruct3->hpIV | (substruct3->attackIV << 5) | (substruct3->defenseIV << 10) | (substruct3->speedIV << 15) | (substruct3->spAttackIV << 20) | (substruct3->spDefenseIV << 25);
+ break;
+ case MON_DATA_KNOWN_MOVES:
+ if (substruct0->species && !substruct3->isEgg)
+ {
+ u16 *moves = (u16 *)data;
+ s32 i = 0;
+
+ while (moves[i] != 355)
+ {
+ u16 move = moves[i];
+ if (substruct1->moves[0] == move
+ || substruct1->moves[1] == move
+ || substruct1->moves[2] == move
+ || substruct1->moves[3] == move)
+ retVal |= gBitTable[i];
+ i++;
+ }
+ }
+ break;
+ case MON_DATA_RIBBON_COUNT:
+ retVal = 0;
+ if (substruct0->species && !substruct3->isEgg)
+ {
+ retVal += substruct3->coolRibbon;
+ retVal += substruct3->beautyRibbon;
+ retVal += substruct3->cuteRibbon;
+ retVal += substruct3->smartRibbon;
+ retVal += substruct3->toughRibbon;
+ retVal += substruct3->championRibbon;
+ retVal += substruct3->winningRibbon;
+ retVal += substruct3->victoryRibbon;
+ retVal += substruct3->artistRibbon;
+ retVal += substruct3->effortRibbon;
+ retVal += substruct3->giftRibbon1;
+ retVal += substruct3->giftRibbon2;
+ retVal += substruct3->giftRibbon3;
+ retVal += substruct3->giftRibbon4;
+ retVal += substruct3->giftRibbon5;
+ retVal += substruct3->giftRibbon6;
+ retVal += substruct3->giftRibbon7;
+ }
+ break;
+ case MON_DATA_RIBBONS:
+ retVal = 0;
+ if (substruct0->species && !substruct3->isEgg)
+ {
+ retVal = substruct3->championRibbon
+ | (substruct3->coolRibbon << 1)
+ | (substruct3->beautyRibbon << 4)
+ | (substruct3->cuteRibbon << 7)
+ | (substruct3->smartRibbon << 10)
+ | (substruct3->toughRibbon << 13)
+ | (substruct3->winningRibbon << 16)
+ | (substruct3->victoryRibbon << 17)
+ | (substruct3->artistRibbon << 18)
+ | (substruct3->effortRibbon << 19)
+ | (substruct3->giftRibbon1 << 20)
+ | (substruct3->giftRibbon2 << 21)
+ | (substruct3->giftRibbon3 << 22)
+ | (substruct3->giftRibbon4 << 23)
+ | (substruct3->giftRibbon5 << 24)
+ | (substruct3->giftRibbon6 << 25)
+ | (substruct3->giftRibbon7 << 26);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (field > MON_DATA_10)
+ EncryptBoxMon(boxMon);
+
+ return retVal;
+}
+
+#define SET8(lhs) (lhs) = *data
+#define SET16(lhs) (lhs) = data[0] + (data[1] << 8)
+#define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
+
+void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg)
+{
+ const u8* data = dataArg;
+ switch (field)
+ {
+ case MON_DATA_STATUS:
+ SET32(mon->status);
+ break;
+ case MON_DATA_LEVEL:
+ SET8(mon->level);
+ break;
+ case MON_DATA_HP:
+ SET16(mon->hp);
+ break;
+ case MON_DATA_MAX_HP:
+ SET16(mon->maxHP);
+ break;
+ case MON_DATA_ATK:
+ SET16(mon->attack);
+ break;
+ case MON_DATA_DEF:
+ SET16(mon->defense);
+ break;
+ case MON_DATA_SPEED:
+ SET16(mon->speed);
+ break;
+ case MON_DATA_SPATK:
+ SET16(mon->spAttack);
+ break;
+ case MON_DATA_SPDEF:
+ SET16(mon->spDefense);
+ break;
+ case MON_DATA_MAIL:
+ SET8(mon->mail);
+ break;
+ case MON_DATA_SPECIES2:
+ break;
+ default:
+ SetBoxMonData(&mon->box, field, data);
+ break;
+ }
+}
+
+void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
+{
+ const u8* data = dataArg;
+
+ struct PokemonSubstruct0 *substruct0 = NULL;
+ struct PokemonSubstruct1 *substruct1 = NULL;
+ struct PokemonSubstruct2 *substruct2 = NULL;
+ struct PokemonSubstruct3 *substruct3 = NULL;
+
+ if (field > MON_DATA_10)
+ {
+ substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
+ substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
+ substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2);
+ substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3);
+
+ DecryptBoxMon(boxMon);
+
+ if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
+ {
+ boxMon->isBadEgg = 1;
+ boxMon->isEgg = 1;
+ substruct3->isEgg = 1;
+ EncryptBoxMon(boxMon);
+ return;
+ }
+ }
+
+ switch (field)
+ {
+ case MON_DATA_PERSONALITY:
+ SET32(boxMon->personality);
+ break;
+ case MON_DATA_OT_ID:
+ SET32(boxMon->otId);
+ break;
+ case MON_DATA_NICKNAME:
+ {
+ s32 i;
+ for (i = 0; i < POKEMON_NAME_LENGTH; i++)
+ boxMon->nickname[i] = data[i];
+ break;
+ }
+ case MON_DATA_LANGUAGE:
+ SET8(boxMon->language);
+ break;
+ case MON_DATA_SANITY_BIT1:
+ SET8(boxMon->isBadEgg);
+ break;
+ case MON_DATA_SANITY_BIT2:
+ SET8(boxMon->hasSpecies);
+ break;
+ case MON_DATA_SANITY_BIT3:
+ SET8(boxMon->isEgg);
+ break;
+ case MON_DATA_OT_NAME:
+ {
+ s32 i;
+ for (i = 0; i < OT_NAME_LENGTH; i++)
+ boxMon->otName[i] = data[i];
+ break;
+ }
+ case MON_DATA_MARKINGS:
+ SET8(boxMon->markings);
+ break;
+ case MON_DATA_CHECKSUM:
+ SET16(boxMon->checksum);
+ break;
+ case MON_DATA_10:
+ SET16(boxMon->unknown);
+ break;
+ case MON_DATA_SPECIES:
+ {
+ SET16(substruct0->species);
+ if (substruct0->species)
+ boxMon->hasSpecies = 1;
+ else
+ boxMon->hasSpecies = 0;
+ break;
+ }
+ case MON_DATA_HELD_ITEM:
+ SET16(substruct0->heldItem);
+ break;
+ case MON_DATA_EXP:
+ SET32(substruct0->experience);
+ break;
+ case MON_DATA_PP_BONUSES:
+ SET8(substruct0->ppBonuses);
+ break;
+ case MON_DATA_FRIENDSHIP:
+ SET8(substruct0->friendship);
+ break;
+ case MON_DATA_MOVE1:
+ case MON_DATA_MOVE2:
+ case MON_DATA_MOVE3:
+ case MON_DATA_MOVE4:
+ SET16(substruct1->moves[field - MON_DATA_MOVE1]);
+ break;
+ case MON_DATA_PP1:
+ case MON_DATA_PP2:
+ case MON_DATA_PP3:
+ case MON_DATA_PP4:
+ SET8(substruct1->pp[field - MON_DATA_PP1]);
+ break;
+ case MON_DATA_HP_EV:
+ SET8(substruct2->hpEV);
+ break;
+ case MON_DATA_ATK_EV:
+ SET8(substruct2->attackEV);
+ break;
+ case MON_DATA_DEF_EV:
+ SET8(substruct2->defenseEV);
+ break;
+ case MON_DATA_SPEED_EV:
+ SET8(substruct2->speedEV);
+ break;
+ case MON_DATA_SPATK_EV:
+ SET8(substruct2->spAttackEV);
+ break;
+ case MON_DATA_SPDEF_EV:
+ SET8(substruct2->spDefenseEV);
+ break;
+ case MON_DATA_COOL:
+ SET8(substruct2->cool);
+ break;
+ case MON_DATA_BEAUTY:
+ SET8(substruct2->beauty);
+ break;
+ case MON_DATA_CUTE:
+ SET8(substruct2->cute);
+ break;
+ case MON_DATA_SMART:
+ SET8(substruct2->smart);
+ break;
+ case MON_DATA_TOUGH:
+ SET8(substruct2->tough);
+ break;
+ case MON_DATA_SHEEN:
+ SET8(substruct2->sheen);
+ break;
+ case MON_DATA_POKERUS:
+ SET8(substruct3->pokerus);
+ break;
+ case MON_DATA_MET_LOCATION:
+ SET8(substruct3->metLocation);
+ break;
+ case MON_DATA_MET_LEVEL:
+ {
+ u8 metLevel = *data;
+ substruct3->metLevel = metLevel;
+ break;
+ }
+ case MON_DATA_MET_GAME:
+ SET8(substruct3->metGame);
+ break;
+ case MON_DATA_POKEBALL:
+ {
+ u8 pokeball = *data;
+ substruct3->pokeball = pokeball;
+ break;
+ }
+ case MON_DATA_OT_GENDER:
+ SET8(substruct3->otGender);
+ break;
+ case MON_DATA_HP_IV:
+ SET8(substruct3->hpIV);
+ break;
+ case MON_DATA_ATK_IV:
+ SET8(substruct3->attackIV);
+ break;
+ case MON_DATA_DEF_IV:
+ SET8(substruct3->defenseIV);
+ break;
+ case MON_DATA_SPEED_IV:
+ SET8(substruct3->speedIV);
+ break;
+ case MON_DATA_SPATK_IV:
+ SET8(substruct3->spAttackIV);
+ break;
+ case MON_DATA_SPDEF_IV:
+ SET8(substruct3->spDefenseIV);
+ break;
+ case MON_DATA_IS_EGG:
+ SET8(substruct3->isEgg);
+ if (substruct3->isEgg)
+ boxMon->isEgg = 1;
+ else
+ boxMon->isEgg = 0;
+ break;
+ case MON_DATA_ALT_ABILITY:
+ SET8(substruct3->altAbility);
+ break;
+ case MON_DATA_COOL_RIBBON:
+ SET8(substruct3->coolRibbon);
+ break;
+ case MON_DATA_BEAUTY_RIBBON:
+ SET8(substruct3->beautyRibbon);
+ break;
+ case MON_DATA_CUTE_RIBBON:
+ SET8(substruct3->cuteRibbon);
+ break;
+ case MON_DATA_SMART_RIBBON:
+ SET8(substruct3->smartRibbon);
+ break;
+ case MON_DATA_TOUGH_RIBBON:
+ SET8(substruct3->toughRibbon);
+ break;
+ case MON_DATA_CHAMPION_RIBBON:
+ SET8(substruct3->championRibbon);
+ break;
+ case MON_DATA_WINNING_RIBBON:
+ SET8(substruct3->winningRibbon);
+ break;
+ case MON_DATA_VICTORY_RIBBON:
+ SET8(substruct3->victoryRibbon);
+ break;
+ case MON_DATA_ARTIST_RIBBON:
+ SET8(substruct3->artistRibbon);
+ break;
+ case MON_DATA_EFFORT_RIBBON:
+ SET8(substruct3->effortRibbon);
+ break;
+ case MON_DATA_GIFT_RIBBON_1:
+ SET8(substruct3->giftRibbon1);
+ break;
+ case MON_DATA_GIFT_RIBBON_2:
+ SET8(substruct3->giftRibbon2);
+ break;
+ case MON_DATA_GIFT_RIBBON_3:
+ SET8(substruct3->giftRibbon3);
+ break;
+ case MON_DATA_GIFT_RIBBON_4:
+ SET8(substruct3->giftRibbon4);
+ break;
+ case MON_DATA_GIFT_RIBBON_5:
+ SET8(substruct3->giftRibbon5);
+ break;
+ case MON_DATA_GIFT_RIBBON_6:
+ SET8(substruct3->giftRibbon6);
+ break;
+ case MON_DATA_GIFT_RIBBON_7:
+ SET8(substruct3->giftRibbon7);
+ break;
+ case MON_DATA_FATEFUL_ENCOUNTER:
+ SET8(substruct3->fatefulEncounter);
+ break;
+ case MON_DATA_OBEDIENCE:
+ SET8(substruct3->obedient);
+ break;
+ case MON_DATA_IVS:
+ {
+ u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
+ substruct3->hpIV = ivs & 0x1F;
+ substruct3->attackIV = (ivs >> 5) & 0x1F;
+ substruct3->defenseIV = (ivs >> 10) & 0x1F;
+ substruct3->speedIV = (ivs >> 15) & 0x1F;
+ substruct3->spAttackIV = (ivs >> 20) & 0x1F;
+ substruct3->spDefenseIV = (ivs >> 25) & 0x1F;
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (field > MON_DATA_10)
+ {
+ boxMon->checksum = CalculateBoxMonChecksum(boxMon);
+ EncryptBoxMon(boxMon);
+ }
+}
+
+void CopyMon(void *dest, void *src, size_t size)
+{
+ memcpy(dest, src, size);
+}
+
+u8 GiveMonToPlayer(struct Pokemon *mon)
+{
+ s32 i;
+
+ SetMonData(mon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName);
+ SetMonData(mon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender);
+ SetMonData(mon, MON_DATA_OT_ID, gSaveBlock2Ptr->playerTrainerId);
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
+ break;
+ }
+
+ if (i >= PARTY_SIZE)
+ return SendMonToPC(mon);
+
+ CopyMon(&gPlayerParty[i], mon, sizeof(*mon));
+ gPlayerPartyCount = i + 1;
+ return MON_GIVEN_TO_PARTY;
+}
+
+u8 SendMonToPC(struct Pokemon* mon)
+{
+ s32 boxNo, boxPos;
+
+ set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN));
+
+ boxNo = StorageGetCurrentBox();
+
+ do
+ {
+ for (boxPos = 0; boxPos < 30; boxPos++)
+ {
+ struct BoxPokemon* checkingMon = GetBoxedMonPtr(boxNo, boxPos);
+ if (GetBoxMonData(checkingMon, MON_DATA_SPECIES, NULL) == SPECIES_NONE)
+ {
+ MonRestorePP(mon);
+ CopyMon(checkingMon, &mon->box, sizeof(mon->box));
+ gSpecialVar_MonBoxId = boxNo;
+ gSpecialVar_MonBoxPos = boxPos;
+ if (get_unknown_box_id() != boxNo)
+ FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
+ VarSet(VAR_STORAGE_UNKNOWN, boxNo);
+ return MON_GIVEN_TO_PC;
+ }
+ }
+
+ boxNo++;
+ if (boxNo == 14)
+ boxNo = 0;
+ } while (boxNo != StorageGetCurrentBox());
+
+ return MON_CANT_GIVE;
+}
+
+u8 CalculatePlayerPartyCount(void)
+{
+ gPlayerPartyCount = 0;
+
+ while (gPlayerPartyCount < 6
+ && GetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ {
+ gPlayerPartyCount++;
+ }
+
+ return gPlayerPartyCount;
+}
+
+u8 CalculateEnemyPartyCount(void)
+{
+ gEnemyPartyCount = 0;
+
+ while (gEnemyPartyCount < 6
+ && GetMonData(&gEnemyParty[gEnemyPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ {
+ gEnemyPartyCount++;
+ }
+
+ return gEnemyPartyCount;
+}
+
+u8 GetMonsStateToDoubles(void)
+{
+ s32 aliveCount = 0;
+ s32 i;
+ CalculatePlayerPartyCount();
+
+ if (gPlayerPartyCount == 1)
+ return gPlayerPartyCount; // PLAYER_HAS_ONE_MON
+
+ for (i = 0; i < gPlayerPartyCount; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG
+ && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0
+ && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE)
+ aliveCount++;
+ }
+
+ return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
+}
+
+u8 GetMonsStateToDoubles_2(void)
+{
+ s32 aliveCount = 0;
+ s32 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL);
+ if (species != SPECIES_EGG && species != SPECIES_NONE
+ && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0)
+ aliveCount++;
+ }
+
+ if (aliveCount == 1)
+ return PLAYER_HAS_ONE_MON; // may have more than one, but only one is alive
+
+ return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
+}
+
+u8 GetAbilityBySpecies(u16 species, bool8 altAbility)
+{
+ if (altAbility)
+ gLastUsedAbility = gBaseStats[species].ability2;
+ else
+ gLastUsedAbility = gBaseStats[species].ability1;
+
+ return gLastUsedAbility;
+}
+
+u8 GetMonAbility(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
+ return GetAbilityBySpecies(species, altAbility);
+}
+
+void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord)
+{
+ s32 i, j;
+
+ ZeroEnemyPartyMons();
+ *gBattleResources->secretBase = *secretBaseRecord;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gBattleResources->secretBase->party.species[i])
+ {
+ CreateMon(&gEnemyParty[i],
+ gBattleResources->secretBase->party.species[i],
+ gBattleResources->secretBase->party.levels[i],
+ 15,
+ 1,
+ gBattleResources->secretBase->party.personality[i],
+ 2,
+ 0);
+
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleResources->secretBase->party.heldItems[i]);
+
+ for (j = 0; j < 6; j++)
+ SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gBattleResources->secretBase->party.EVs[i]);
+
+ for (j = 0; j < 4; j++)
+ {
+ SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]);
+ SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp);
+ }
+ }
+ }
+}
+
+u8 GetSecretBaseTrainerPicIndex(void)
+{
+ u8 facilityClass = sSecretBaseFacilityClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % 5];
+ return gFacilityClassToPicIndex[facilityClass];
+}
+
+u8 GetSecretBaseTrainerClass(void)
+{
+ u8 facilityClass = sSecretBaseFacilityClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % 5];
+ return gFacilityClassToTrainerClass[facilityClass];
+}
+
+bool8 IsPlayerPartyAndPokemonStorageFull(void)
+{
+ s32 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
+ return FALSE;
+
+ return IsPokemonStorageFull();
+}
+
+bool8 IsPokemonStorageFull(void)
+{
+ s32 i, j;
+
+ for (i = 0; i < 14; i++)
+ for (j = 0; j < 30; j++)
+ if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SPECIES) == SPECIES_NONE)
+ return FALSE;
+
+ return TRUE;
+}
+
+void GetSpeciesName(u8 *name, u16 species)
+{
+ s32 i;
+
+ for (i = 0; i <= POKEMON_NAME_LENGTH; i++)
+ {
+ if (species > NUM_SPECIES)
+ name[i] = gSpeciesNames[0][i];
+ else
+ name[i] = gSpeciesNames[species][i];
+
+ if (name[i] == EOS)
+ break;
+ }
+
+ name[i] = EOS;
+}
+
+u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex)
+{
+ u8 basePP = gBattleMoves[move].pp;
+ return basePP + ((basePP * 20 * ((gUnknown_08329D22[moveIndex] & ppBonuses) >> (2 * moveIndex))) / 100);
+}
+
+void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex)
+{
+ u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
+ ppBonuses &= gUnknown_08329D26[moveIndex];
+ SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+}
+
+void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex)
+{
+ mon->ppBonuses &= gUnknown_08329D26[moveIndex];
+}
+
+void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
+{
+ u16* hpSwitchout;
+ s32 i;
+ u8 nickname[POKEMON_NAME_LENGTH * 2];
+
+ gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
+ gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL);
+
+ for (i = 0; i < 4; i++)
+ {
+ gBattleMons[battlerId].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL);
+ gBattleMons[battlerId].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL);
+ }
+
+ gBattleMons[battlerId].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL);
+ gBattleMons[battlerId].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL);
+ gBattleMons[battlerId].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL);
+ gBattleMons[battlerId].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL);
+ gBattleMons[battlerId].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL);
+ gBattleMons[battlerId].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL);
+ gBattleMons[battlerId].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED_IV, NULL);
+ gBattleMons[battlerId].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL);
+ gBattleMons[battlerId].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL);
+ gBattleMons[battlerId].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL);
+ gBattleMons[battlerId].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL);
+ gBattleMons[battlerId].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL);
+ gBattleMons[battlerId].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL);
+ gBattleMons[battlerId].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL);
+ gBattleMons[battlerId].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL);
+ gBattleMons[battlerId].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL);
+ gBattleMons[battlerId].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED, NULL);
+ gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL);
+ gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL);
+ gBattleMons[battlerId].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL);
+ gBattleMons[battlerId].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL);
+ gBattleMons[battlerId].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL);
+ gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1;
+ gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2;
+ gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].altAbility);
+ GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
+ StringCopy10(gBattleMons[battlerId].nickname, nickname);
+ GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battlerId].otName);
+
+ hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)];
+ *hpSwitchout = gBattleMons[battlerId].hp;
+
+ for (i = 0; i < 8; i++)
+ gBattleMons[battlerId].statStages[i] = 6;
+
+ gBattleMons[battlerId].status2 = 0;
+ sub_803FA70(battlerId);
+ ClearTemporarySpeciesSpriteData(battlerId, FALSE);
+}
+
+bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex)
+{
+ return PokemonUseItemEffects(mon, item, partyIndex, moveIndex, 0);
+}
+
+bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e)
+{
+ u32 dataUnsigned;
+ s32 dataSigned;
+ s32 friendship;
+ s32 cmdIndex;
+ bool8 retVal = TRUE;
+ const u8 *itemEffect;
+ u8 var_3C = 6;
+ u32 var_38;
+ s8 var_34 = 0;
+ u8 holdEffect;
+ u8 battlerId = 4;
+ u32 var_28 = 0;
+ u16 heldItem;
+ u8 r10;
+ u32 r4;
+ u32 r5;
+ s8 r2;
+ u16 evCount;
+
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ holdEffect = gEnigmaBerries[gBattlerInMenuId].holdEffect;
+ else
+ holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+ }
+
+ gPotentialItemEffectBattler = gBattlerInMenuId;
+ if (gMain.inBattle)
+ {
+ gActiveBattler = gBattlerInMenuId;
+ cmdIndex = (GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER);
+ while (cmdIndex < gBattlersCount)
+ {
+ if (gBattlerPartyIndexes[cmdIndex] == partyIndex)
+ {
+ battlerId = cmdIndex;
+ break;
+ }
+ cmdIndex += 2;
+ }
+ }
+ else
+ {
+ gActiveBattler = 0;
+ battlerId = MAX_BATTLERS_COUNT;
+ }
+
+ if (!IS_POKEMON_ITEM(item))
+ return TRUE;
+ if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY)
+ return TRUE;
+
+ if (item == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ itemEffect = gEnigmaBerries[gActiveBattler].itemEffect;
+ else
+ itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ }
+ else
+ {
+ itemEffect = gItemEffectTable[item - 13];
+ }
+
+ for (cmdIndex = 0; cmdIndex < 6; cmdIndex++)
+ {
+ switch (cmdIndex)
+ {
+ // status healing effects
+ case 0:
+ if ((itemEffect[cmdIndex] & 0x80)
+ && gMain.inBattle && battlerId != 4 && (gBattleMons[battlerId].status2 & STATUS2_INFATUATION))
+ {
+ gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x30)
+ && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY))
+ {
+ gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0xF)
+ && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12)
+ {
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & 0xF;
+ if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > 12)
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] = 12;
+ retVal = FALSE;
+ }
+ break;
+ // in-battle stat boosting effects?
+ case 1:
+ if ((itemEffect[cmdIndex] & 0xF0)
+ && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12)
+ {
+ gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4;
+ if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > 12)
+ gBattleMons[gActiveBattler].statStages[STAT_DEF] = 12;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0xF)
+ && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12)
+ {
+ gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & 0xF;
+ if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > 12)
+ gBattleMons[gActiveBattler].statStages[STAT_SPEED] = 12;
+ retVal = FALSE;
+ }
+ break;
+ // more stat boosting effects?
+ case 2:
+ if ((itemEffect[cmdIndex] & 0xF0)
+ && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12)
+ {
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4;
+ if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > 12)
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] = 12;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0xF)
+ && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12)
+ {
+ gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & 0xF;
+ if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > 12)
+ gBattleMons[gActiveBattler].statStages[STAT_SPATK] = 12;
+ retVal = FALSE;
+ }
+ break;
+ case 3:
+ if ((itemEffect[cmdIndex] & 0x80)
+ && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0)
+ {
+ gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x40) // raise level
+ && GetMonData(mon, MON_DATA_LEVEL, NULL) != MAX_MON_LEVEL)
+ {
+ dataUnsigned = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1];
+ SetMonData(mon, MON_DATA_EXP, &dataUnsigned);
+ CalculateMonStats(mon);
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x20)
+ && HealStatusConditions(mon, partyIndex, 7, battlerId) == 0)
+ {
+ if (battlerId != 4)
+ gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE;
+ retVal = FALSE;
+ }
+ if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battlerId) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(mon, partyIndex, STATUS1_FREEZE, battlerId) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battlerId) == 0)
+ retVal = FALSE;
+ if ((itemEffect[cmdIndex] & 1) // heal confusion
+ && gMain.inBattle && battlerId != 4 && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION))
+ {
+ gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION;
+ retVal = FALSE;
+ }
+ break;
+ // EV, HP, and PP raising effects
+ case 4:
+ r10 = itemEffect[cmdIndex];
+ if (r10 & 0x20)
+ {
+ r10 &= ~0x20;
+ dataUnsigned = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gUnknown_08329D22[moveIndex]) >> (moveIndex * 2);
+ var_38 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (dataUnsigned <= 2 && var_38 > 4)
+ {
+ dataUnsigned = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gUnknown_08329D2A[moveIndex];
+ SetMonData(mon, MON_DATA_PP_BONUSES, &dataUnsigned);
+
+ dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - var_38;
+ dataUnsigned = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + dataUnsigned;
+ SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
+ retVal = FALSE;
+ }
+ }
+ var_38 = 0;
+ while (r10 != 0)
+ {
+ if (r10 & 1)
+ {
+ switch (var_38)
+ {
+ case 0:
+ case 1:
+ evCount = GetMonEVCount(mon);
+ r5 = itemEffect[var_3C];
+ dataSigned = GetMonData(mon, sGetMonDataEVConstants[var_38], NULL);
+ r2 = r5;
+ if (r2 > 0)
+ {
+ if (evCount >= MAX_TOTAL_EVS)
+ return TRUE;
+ if (dataSigned >= 100)
+ break;
+
+ if (dataSigned + r2 > 100)
+ r5 = 100 - (dataSigned + r2) + r2;
+ else
+ r5 = r2;
+
+ if (evCount + r5 > MAX_TOTAL_EVS)
+ r5 += MAX_TOTAL_EVS - (evCount + r5);
+ dataSigned += r5;
+ }
+ else
+ {
+ if (dataSigned == 0)
+ {
+ var_28 = 1;
+ var_3C++;
+ break;
+ }
+ dataSigned += r2;
+ if (dataSigned < 0)
+ dataSigned = 0;
+ }
+ SetMonData(mon, sGetMonDataEVConstants[var_38], &dataSigned);
+ CalculateMonStats(mon);
+ var_3C++;
+ retVal = FALSE;
+ break;
+ case 2:
+ // revive?
+ if (r10 & 0x10)
+ {
+ if (GetMonData(mon, MON_DATA_HP, NULL) != 0)
+ {
+ var_3C++;
+ break;
+ }
+ if (gMain.inBattle)
+ {
+ if (battlerId != 4)
+ {
+ gAbsentBattlerFlags &= ~gBitTable[battlerId];
+ CopyPlayerPartyMonToBattleData(battlerId, pokemon_order_func(gBattlerPartyIndexes[battlerId]));
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.unk4 < 255)
+ gBattleResults.unk4++;
+ }
+ else
+ {
+ gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2];
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.unk4 < 255)
+ gBattleResults.unk4++;
+ }
+ }
+ }
+ else
+ {
+ if (GetMonData(mon, MON_DATA_HP, NULL) == 0)
+ {
+ var_3C++;
+ break;
+ }
+ }
+ dataUnsigned = itemEffect[var_3C++];
+ switch (dataUnsigned)
+ {
+ case 0xFF:
+ dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) - GetMonData(mon, MON_DATA_HP, NULL);
+ break;
+ case 0xFE:
+ dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 2;
+ if (dataUnsigned == 0)
+ dataUnsigned = 1;
+ break;
+ case 0xFD:
+ dataUnsigned = gBattleScripting.field_23;
+ break;
+ }
+ if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL))
+ {
+ if (e == 0)
+ {
+ dataUnsigned = GetMonData(mon, MON_DATA_HP, NULL) + dataUnsigned;
+ if (dataUnsigned > GetMonData(mon, MON_DATA_MAX_HP, NULL))
+ dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL);
+ SetMonData(mon, MON_DATA_HP, &dataUnsigned);
+ if (gMain.inBattle && battlerId != 4)
+ {
+ gBattleMons[battlerId].hp = dataUnsigned;
+ if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ if (gBattleResults.unk3 < 255)
+ gBattleResults.unk3++;
+ // I have to re-use this variable to match.
+ r5 = gActiveBattler;
+ gActiveBattler = battlerId;
+ BtlController_EmitGetMonData(0, 0, 0);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gActiveBattler = r5;
+ }
+ }
+ }
+ else
+ {
+ gBattleMoveDamage = -dataUnsigned;
+ }
+ retVal = FALSE;
+ }
+ r10 &= 0xEF;
+ break;
+ case 3:
+ if (!(r10 & 2))
+ {
+ for (r5 = 0; (signed)(r5) < (signed)(4); r5++)
+ {
+ u16 moveId;
+
+ dataUnsigned = GetMonData(mon, MON_DATA_PP1 + r5, NULL);
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ if (dataUnsigned != CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
+ {
+ dataUnsigned += itemEffect[var_3C];
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ if (dataUnsigned > CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5))
+ {
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL);
+ dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5);
+ }
+ SetMonData(mon, MON_DATA_PP1 + r5, &dataUnsigned);
+ if (gMain.inBattle
+ && battlerId != 4 && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[battlerId].unk18_b & gBitTable[r5]))
+ gBattleMons[battlerId].pp[r5] = dataUnsigned;
+ retVal = FALSE;
+ }
+ }
+ var_3C++;
+ }
+ else
+ {
+ u16 moveId;
+
+ dataUnsigned = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL);
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (dataUnsigned != CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ {
+ dataUnsigned += itemEffect[var_3C++];
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ if (dataUnsigned > CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex))
+ {
+ moveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL);
+ dataUnsigned = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ }
+ SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
+ if (gMain.inBattle
+ && battlerId != 4 && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)
+ && !(gDisableStructs[battlerId].unk18_b & gBitTable[moveIndex]))
+ gBattleMons[battlerId].pp[moveIndex] = dataUnsigned;
+ retVal = FALSE;
+ }
+ }
+ break;
+ case 7:
+ {
+ u16 targetSpecies = GetEvolutionTargetSpecies(mon, 2, item);
+
+ if (targetSpecies != SPECIES_NONE)
+ {
+ BeginEvolutionScene(mon, targetSpecies, 0, partyIndex);
+ return FALSE;
+ }
+ }
+ break;
+ }
+ }
+ var_38++;
+ r10 >>= 1;
+ }
+ break;
+ case 5:
+ r10 = itemEffect[cmdIndex];
+ var_38 = 0;
+ while (r10 != 0)
+ {
+ if (r10 & 1)
+ {
+ switch (var_38)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ evCount = GetMonEVCount(mon);
+ r5 = itemEffect[var_3C];
+ dataSigned = GetMonData(mon, sGetMonDataEVConstants[var_38 + 2], NULL);
+ r2 = r5;
+ if (r2 > 0)
+ {
+ if (evCount >= MAX_TOTAL_EVS)
+ return TRUE;
+ if (dataSigned >= 100)
+ break;
+
+ if (dataSigned + r2 > 100)
+ r5 = 100 - (dataSigned + r2) + r2;
+ else
+ r5 = r2;
+
+ if (evCount + r5 > MAX_TOTAL_EVS)
+ r5 += MAX_TOTAL_EVS - (evCount + r5);
+ dataSigned += r5;
+ }
+ else
+ {
+ if (dataSigned == 0)
+ {
+ var_28 = 1;
+ var_3C++;
+ break;
+ }
+ dataSigned += r2;
+ if (dataSigned < 0)
+ dataSigned = 0;
+ }
+ SetMonData(mon, sGetMonDataEVConstants[var_38 + 2], &dataSigned);
+ CalculateMonStats(mon);
+ retVal = FALSE;
+ var_3C++;
+ break;
+ case 4:
+ dataUnsigned = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gUnknown_08329D22[moveIndex]) >> (moveIndex * 2);
+ r5 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
+ if (dataUnsigned < 3 && r5 > 4)
+ {
+ dataUnsigned = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
+ dataUnsigned &= gUnknown_08329D26[moveIndex];
+ dataUnsigned += gUnknown_08329D2A[moveIndex] * 3;
+
+ SetMonData(mon, MON_DATA_PP_BONUSES, &dataUnsigned);
+ dataUnsigned = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), dataUnsigned, moveIndex) - r5;
+ dataUnsigned = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + dataUnsigned;
+ SetMonData(mon, MON_DATA_PP1 + moveIndex, &dataUnsigned);
+ retVal = FALSE;
+ }
+ break;
+ case 5:
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
+ {
+ var_34 = itemEffect[var_3C];
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
+ if (var_34 > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * var_34 / 100;
+ else
+ friendship += var_34;
+ if (var_34 > 0)
+ {
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
+ friendship++;
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
+ retVal = FALSE;
+ }
+ var_3C++;
+ break;
+ case 6:
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
+ && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
+ {
+ var_34 = itemEffect[var_3C];
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
+ if ((s8)(var_34) > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * var_34 / 100;
+ else
+ friendship += var_34;
+ if (var_34 > 0)
+ {
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
+ friendship++;
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
+ retVal = FALSE;
+ }
+ var_3C++;
+ break;
+ case 7:
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
+ {
+ var_34 = itemEffect[var_3C];
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
+ if ((s8)(var_34) > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ friendship += 150 * var_34 / 100;
+ else
+ friendship += var_34;
+ if (var_34 > 0)
+ {
+ if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11)
+ friendship++;
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
+ retVal = FALSE;
+ }
+ var_3C++;
+ break;
+ }
+ }
+ var_38++;
+ r10 >>= 1;
+ }
+ break;
+ }
+ }
+ return retVal;
+}
+
+bool8 HealStatusConditions(struct Pokemon *mon, u32 battlePartyId, u32 healMask, u8 battlerId)
+{
+ u32 status = GetMonData(mon, MON_DATA_STATUS, 0);
+
+ if (status & healMask)
+ {
+ status &= ~healMask;
+ SetMonData(mon, MON_DATA_STATUS, &status);
+ if (gMain.inBattle && battlerId != MAX_BATTLERS_COUNT)
+ gBattleMons[battlerId].status1 &= ~healMask;
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
+{
+ const u8 *temp;
+ const u8 *itemEffect;
+ u8 offset;
+ int i;
+ u8 j;
+ u8 val;
+
+ offset = 6;
+
+ temp = gItemEffectTable[itemId - 13];
+
+ if (!temp && itemId != ITEM_ENIGMA_BERRY)
+ return 0;
+
+ if (itemId == ITEM_ENIGMA_BERRY)
+ {
+ temp = gEnigmaBerries[gActiveBattler].itemEffect;
+ }
+
+ itemEffect = temp;
+
+ for (i = 0; i < 6; i++)
+ {
+ switch (i)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ if (i == effectByte)
+ return 0;
+ break;
+ case 4:
+ val = itemEffect[4];
+ if (val & 0x20)
+ val &= 0xDF;
+ j = 0;
+ while (val)
+ {
+ if (val & 1)
+ {
+ switch (j)
+ {
+ case 2:
+ if (val & 0x10)
+ val &= 0xEF;
+ case 0:
+ if (i == effectByte && (val & effectBit))
+ return offset;
+ offset++;
+ break;
+ case 1:
+ if (i == effectByte && (val & effectBit))
+ return offset;
+ offset++;
+ break;
+ case 3:
+ if (i == effectByte && (val & effectBit))
+ return offset;
+ offset++;
+ break;
+ case 7:
+ if (i == effectByte)
+ return 0;
+ break;
+ }
+ }
+ j++;
+ val >>= 1;
+ if (i == effectByte)
+ effectBit >>= 1;
+ }
+ break;
+ case 5:
+ val = itemEffect[5];
+ j = 0;
+ while (val)
+ {
+ if (val & 1)
+ {
+ switch (j)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ if (i == effectByte && (val & effectBit))
+ return offset;
+ offset++;
+ break;
+ case 7:
+ if (i == effectByte)
+ return 0;
+ break;
+ }
+ }
+ j++;
+ val >>= 1;
+ if (i == effectByte)
+ effectBit >>= 1;
+ }
+ break;
+ }
+ }
+
+ return offset;
+}
+
+static void sub_806CF24(s32 arg0)
+{
+ gBattlerTarget = gBattlerInMenuId;
+ StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_08329EC8[arg0]]);
+ StringCopy(gBattleTextBuff2, gText_StatRose);
+ BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2);
+}
+
+u8 *sub_806CF78(u16 itemId)
+{
+ int i;
+ const u8 *itemEffect;
+
+ if (itemId == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ itemEffect = gEnigmaBerries[gBattlerInMenuId].itemEffect;
+ else
+ itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ }
+ else
+ {
+ itemEffect = gItemEffectTable[itemId - 13];
+ }
+
+ gPotentialItemEffectBattler = gBattlerInMenuId;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (itemEffect[i] & 0xF)
+ sub_806CF24(i * 2);
+ if (itemEffect[i] & 0xF0)
+ {
+ if (i)
+ {
+ sub_806CF24(i * 2 + 1);
+ }
+ else
+ {
+ gBattlerAttacker = gBattlerInMenuId;
+ BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnGettingPumped);
+ }
+ }
+ }
+
+ if (itemEffect[3] & 0x80)
+ {
+ gBattlerAttacker = gBattlerInMenuId;
+ BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnShroudedInMist);
+ }
+
+ return gDisplayedStringBattle;
+}
+
+u8 GetNature(struct Pokemon *mon)
+{
+ return GetMonData(mon, MON_DATA_PERSONALITY, 0) % 25;
+}
+
+u8 GetNatureFromPersonality(u32 personality)
+{
+ return personality % 25;
+}
+
+u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
+{
+ int i;
+ u16 targetSpecies = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
+ u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ u8 level;
+ u16 friendship;
+ u8 beauty = GetMonData(mon, MON_DATA_BEAUTY, 0);
+ u16 upperPersonality = personality >> 16;
+ u8 holdEffect;
+
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+
+ if (holdEffect == 38 && type != 3)
+ return 0;
+
+ switch (type)
+ {
+ case 0:
+ level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
+
+ for (i = 0; i < 5; i++)
+ {
+ switch (gEvolutionTable[species][i].method)
+ {
+ case EVO_FRIENDSHIP:
+ if (friendship >= 220)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_FRIENDSHIP_DAY:
+ RtcCalcLocalTime();
+ if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_FRIENDSHIP_NIGHT:
+ RtcCalcLocalTime();
+ if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_LEVEL:
+ if (gEvolutionTable[species][i].param <= level)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_LEVEL_ATK_GT_DEF:
+ if (gEvolutionTable[species][i].param <= level)
+ if (GetMonData(mon, MON_DATA_ATK, 0) > GetMonData(mon, MON_DATA_DEF, 0))
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_LEVEL_ATK_EQ_DEF:
+ if (gEvolutionTable[species][i].param <= level)
+ if (GetMonData(mon, MON_DATA_ATK, 0) == GetMonData(mon, MON_DATA_DEF, 0))
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_LEVEL_ATK_LT_DEF:
+ if (gEvolutionTable[species][i].param <= level)
+ if (GetMonData(mon, MON_DATA_ATK, 0) < GetMonData(mon, MON_DATA_DEF, 0))
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_LEVEL_SILCOON:
+ if (gEvolutionTable[species][i].param <= level && (upperPersonality % 10) <= 4)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_LEVEL_CASCOON:
+ if (gEvolutionTable[species][i].param <= level && (upperPersonality % 10) > 4)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_LEVEL_NINJASK:
+ if (gEvolutionTable[species][i].param <= level)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_BEAUTY:
+ if (gEvolutionTable[species][i].param <= beauty)
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ }
+ }
+ break;
+ case 1:
+ for (i = 0; i < 5; i++)
+ {
+ switch (gEvolutionTable[species][i].method)
+ {
+ case EVO_TRADE:
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ case EVO_TRADE_ITEM:
+ if (gEvolutionTable[species][i].param == heldItem)
+ {
+ heldItem = 0;
+ SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&heldItem);
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ }
+ break;
+ }
+ }
+ break;
+ case 2:
+ case 3:
+ for (i = 0; i < 5; i++)
+ {
+ if (gEvolutionTable[species][i].method == EVO_ITEM
+ && gEvolutionTable[species][i].param == evolutionItem)
+ {
+ targetSpecies = gEvolutionTable[species][i].targetSpecies;
+ break;
+ }
+ }
+ break;
+ }
+
+ return targetSpecies;
+}
+
+u16 HoennPokedexNumToSpecies(u16 hoennNum)
+{
+ u16 species;
+
+ if (!hoennNum)
+ return 0;
+
+ species = 0;
+
+ while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum)
+ species++;
+
+ if (species == 411)
+ return 0;
+
+ return species + 1;
+}
+
+u16 NationalPokedexNumToSpecies(u16 nationalNum)
+{
+ u16 species;
+
+ if (!nationalNum)
+ return 0;
+
+ species = 0;
+
+ while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum)
+ species++;
+
+ if (species == 411)
+ return 0;
+
+ return species + 1;
+}
+
+u16 NationalToHoennOrder(u16 nationalNum)
+{
+ u16 hoennNum;
+
+ if (!nationalNum)
+ return 0;
+
+ hoennNum = 0;
+
+ while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum)
+ hoennNum++;
+
+ if (hoennNum == 411)
+ return 0;
+
+ return hoennNum + 1;
+}
+
+u16 SpeciesToNationalPokedexNum(u16 species)
+{
+ if (!species)
+ return 0;
+
+ return gSpeciesToNationalPokedexNum[species - 1];
+}
+
+u16 SpeciesToHoennPokedexNum(u16 species)
+{
+ if (!species)
+ return 0;
+
+ return gSpeciesToHoennPokedexNum[species - 1];
+}
+
+u16 HoennToNationalOrder(u16 hoennNum)
+{
+ if (!hoennNum)
+ return 0;
+
+ return gHoennToNationalOrder[hoennNum - 1];
+}
+
+u16 SpeciesToCryId(u16 species)
+{
+ if (species <= 250)
+ return species;
+
+ if (species < 276)
+ return 200;
+
+ return gSpeciesIdToCryId[species - 276];
+}
+
+void sub_806D544(u16 species, u32 personality, u8 *dest)
+{
+ if (species == SPECIES_SPINDA
+ && dest != gMonSpritesGfxPtr->sprites[0]
+ && dest != gMonSpritesGfxPtr->sprites[2])
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ int j;
+ u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
+ u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
+
+ for (j = 0; j < 16; j++)
+ {
+ int k;
+ s32 row = gSpindaSpotGraphics[i].image[j];
+
+ for (k = x; k < x + 16; k++)
+ {
+ u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
+
+ if (row & 1)
+ {
+ if (k & 1)
+ {
+ if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
+ *val += 0x40;
+ }
+ else
+ {
+ if ((u8)((*val & 0xF) - 0x01) <= 0x02)
+ *val += 0x04;
+ }
+ }
+
+ row >>= 1;
+ }
+
+ y++;
+ }
+
+ personality >>= 8;
+ }
+ }
+}
+
+void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4)
+{
+ if (species == SPECIES_SPINDA && a4)
+ {
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ int j;
+ u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
+ u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
+
+ for (j = 0; j < 16; j++)
+ {
+ int k;
+ s32 row = gSpindaSpotGraphics[i].image[j];
+
+ for (k = x; k < x + 16; k++)
+ {
+ u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
+
+ if (row & 1)
+ {
+ if (k & 1)
+ {
+ if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
+ *val += 0x40;
+ }
+ else
+ {
+ if ((u8)((*val & 0xF) - 0x01) <= 0x02)
+ *val += 0x04;
+ }
+ }
+
+ row >>= 1;
+ }
+
+ y++;
+ }
+
+ personality >>= 8;
+ }
+ }
+}
+
+void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
+{
+ u8 language;
+ GetMonData(mon, MON_DATA_NICKNAME, gStringVar1);
+ language = GetMonData(mon, MON_DATA_LANGUAGE, &language);
+ if (language == GAME_LANGUAGE && !StringCompare(gSpeciesNames[oldSpecies], gStringVar1))
+ SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
+}
+
+bool8 sub_806D7EC(void)
+{
+ bool8 retVal = FALSE;
+ switch (gLinkPlayers[GetMultiplayerId()].lp_field_18)
+ {
+ case 0:
+ case 3:
+ retVal = FALSE;
+ break;
+ case 1:
+ case 2:
+ retVal = TRUE;
+ break;
+ }
+ return retVal;
+}
+
+bool16 sub_806D82C(u8 id)
+{
+ bool16 retVal = FALSE;
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ retVal = FALSE;
+ break;
+ case 1:
+ case 2:
+ retVal = TRUE;
+ break;
+ }
+ return retVal;
+}
+
+s32 GetBattlerMultiplayerId(u16 a1)
+{
+ s32 id;
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ if (gLinkPlayers[id].lp_field_18 == a1)
+ break;
+ return id;
+}
+
+u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
+{
+ if (InBattlePyramid())
+ return GetTrainerEncounterMusicIdInBattlePyramind(trainerOpponentId);
+ if (sub_81D5C18())
+ return sub_81D63C8(trainerOpponentId);
+ return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId);
+}
+
+u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
+{
+ if (statIndex < 1 || statIndex > 5)
+ {
+ // should just be "return n", but it wouldn't match without this
+ u16 retVal = n;
+ retVal++;
+ retVal--;
+ return retVal;
+ }
+
+ switch (gNatureStatTable[nature][statIndex - 1])
+ {
+ case 1:
+ return (u16)(n * 110) / 100;
+ case -1:
+ return (u16)(n * 90) / 100;
+ }
+
+ return n;
+}
+
+void AdjustFriendship(struct Pokemon *mon, u8 event)
+{
+ u16 species, heldItem;
+ u8 holdEffect;
+
+ if (sub_806F104())
+ return;
+
+ species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ holdEffect = gEnigmaBerries[0].holdEffect;
+ else
+ holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+ }
+
+ if (species && species != SPECIES_EGG)
+ {
+ u8 friendshipLevel = 0;
+ s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
+ if (friendship > 99)
+ friendshipLevel++;
+ if (friendship > 199)
+ friendshipLevel++;
+ if ((event != 5 || !(Random() & 1))
+ && (event != 3
+ || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION))))
+ {
+ s8 mod = gUnknown_08329ECE[event][friendshipLevel];
+ if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
+ mod = (150 * mod) / 100;
+ friendship += mod;
+ if (mod > 0)
+ {
+ if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
+ friendship++;
+ if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name())
+ friendship++;
+ }
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
+ }
+ }
+}
+
+void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
+{
+ u8 evs[NUM_STATS];
+ u16 evIncrease = 0;
+ u16 totalEVs = 0;
+ u16 heldItem;
+ u8 holdEffect;
+ int i;
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0);
+ totalEVs += evs[i];
+ }
+
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ u8 hasHadPokerus;
+ int multiplier;
+
+ if (totalEVs >= MAX_TOTAL_EVS)
+ break;
+
+ hasHadPokerus = CheckPartyHasHadPokerus(mon, 0);
+
+ if (hasHadPokerus)
+ multiplier = 2;
+ else
+ multiplier = 1;
+
+ switch (i)
+ {
+ case 0:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
+ break;
+ case 1:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
+ break;
+ case 2:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
+ break;
+ case 3:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
+ break;
+ case 4:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
+ break;
+ case 5:
+ evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
+ break;
+ }
+
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ holdEffect = gEnigmaBerries[0].holdEffect;
+ else
+ holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+ }
+
+ if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
+ evIncrease *= 2;
+
+ if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS)
+ evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease);
+
+ if (evs[i] + (s16)evIncrease > 255)
+ {
+ int val1 = (s16)evIncrease + 255;
+ int val2 = evs[i] + evIncrease;
+ evIncrease = val1 - val2;
+ }
+
+ evs[i] += evIncrease;
+ totalEVs += evIncrease;
+ SetMonData(mon, MON_DATA_HP_EV + i, &evs[i]);
+ }
+}
+
+u16 GetMonEVCount(struct Pokemon *mon)
+{
+ int i;
+ u16 count = 0;
+
+ for (i = 0; i < NUM_STATS; i++)
+ count += GetMonData(mon, MON_DATA_HP_EV + i, 0);
+
+ return count;
+}
+
+void RandomlyGivePartyPokerus(struct Pokemon *party)
+{
+ u16 rnd = Random();
+ if (rnd == 0x4000 || rnd == 0x8000 || rnd == 0xC000)
+ {
+ struct Pokemon *mon;
+
+ do
+ {
+ do
+ {
+ rnd = Random() % PARTY_SIZE;
+ mon = &party[rnd];
+ }
+ while (!GetMonData(mon, MON_DATA_SPECIES, 0));
+ }
+ while (GetMonData(mon, MON_DATA_IS_EGG, 0));
+
+ if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd])))
+ {
+ u8 rnd2;
+
+ do
+ {
+ rnd2 = Random();
+ }
+ while ((rnd2 & 0x7) == 0);
+
+ if (rnd2 & 0xF0)
+ rnd2 &= 0x7;
+
+ rnd2 |= (rnd2 << 4);
+ rnd2 &= 0xF3;
+ rnd2++;
+
+ SetMonData(&party[rnd], MON_DATA_POKERUS, &rnd2);
+ }
+ }
+}
+
+u8 CheckPartyPokerus(struct Pokemon *party, u8 selection)
+{
+ u8 retVal;
+
+ int partyIndex = 0;
+ unsigned curBit = 1;
+ retVal = 0;
+
+ if (selection)
+ {
+ do
+ {
+ if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF))
+ retVal |= curBit;
+ partyIndex++;
+ curBit <<= 1;
+ selection >>= 1;
+ }
+ while (selection);
+ }
+ else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF)
+ {
+ retVal = 1;
+ }
+
+ return retVal;
+}
+
+u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection)
+{
+ u8 retVal;
+
+ int partyIndex = 0;
+ unsigned curBit = 1;
+ retVal = 0;
+
+ if (selection)
+ {
+ do
+ {
+ if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0))
+ retVal |= curBit;
+ partyIndex++;
+ curBit <<= 1;
+ selection >>= 1;
+ }
+ while (selection);
+ }
+ else if (GetMonData(&party[0], MON_DATA_POKERUS, 0))
+ {
+ retVal = 1;
+ }
+
+ return retVal;
+}
+
+void UpdatePartyPokerusTime(u16 days)
+{
+ int i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, 0))
+ {
+ u8 pokerus = GetMonData(&gPlayerParty[i], MON_DATA_POKERUS, 0);
+ if (pokerus & 0xF)
+ {
+ if ((pokerus & 0xF) < days || days > 4)
+ pokerus &= 0xF0;
+ else
+ pokerus -= days;
+
+ if (pokerus == 0)
+ pokerus = 0x10;
+
+ SetMonData(&gPlayerParty[i], MON_DATA_POKERUS, &pokerus);
+ }
+ }
+ }
+}
+
+void PartySpreadPokerus(struct Pokemon *party)
+{
+ if ((Random() % 3) == 0)
+ {
+ int i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES, 0))
+ {
+ u8 pokerus = GetMonData(&party[i], MON_DATA_POKERUS, 0);
+ u8 curPokerus = pokerus;
+ if (pokerus)
+ {
+ if (pokerus & 0xF)
+ {
+ // spread to adjacent party members
+ if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0))
+ SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus);
+ if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0))
+ {
+ SetMonData(&party[i + 1], MON_DATA_POKERUS, &curPokerus);
+ i++;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+bool8 TryIncrementMonLevel(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
+ u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1;
+ u32 expPoints = GetMonData(mon, MON_DATA_EXP, 0);
+ if (expPoints > gExperienceTables[gBaseStats[species].growthRate][MAX_MON_LEVEL])
+ {
+ expPoints = gExperienceTables[gBaseStats[species].growthRate][MAX_MON_LEVEL];
+ SetMonData(mon, MON_DATA_EXP, &expPoints);
+ }
+ if (nextLevel > MAX_MON_LEVEL || expPoints < gExperienceTables[gBaseStats[species].growthRate][nextLevel])
+ {
+ return FALSE;
+ }
+ else
+ {
+ SetMonData(mon, MON_DATA_LEVEL, &nextLevel);
+ return TRUE;
+ }
+}
+
+u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ if (species == SPECIES_EGG)
+ {
+ return 0;
+ }
+ else if (tm < 32)
+ {
+ u32 mask = 1 << tm;
+ return gTMHMLearnsets[species][0] & mask;
+ }
+ else
+ {
+ u32 mask = 1 << (tm - 32);
+ return gTMHMLearnsets[species][1] & mask;
+ }
+}
+
+u32 CanSpeciesLearnTMHM(u16 species, u8 tm)
+{
+ if (species == SPECIES_EGG)
+ {
+ return 0;
+ }
+ else if (tm < 32)
+ {
+ u32 mask = 1 << tm;
+ return gTMHMLearnsets[species][0] & mask;
+ }
+ else
+ {
+ u32 mask = 1 << (tm - 32);
+ return gTMHMLearnsets[species][1] & mask;
+ }
+}
+
+u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
+{
+ u16 learnedMoves[4];
+ u8 numMoves = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ int i, j, k;
+
+ for (i = 0; i < 4; i++)
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+
+ for (i = 0; i < 20; i++)
+ {
+ u16 moveLevel;
+
+ if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ break;
+
+ moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+
+ if (moveLevel <= (level << 9))
+ {
+ for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ ;
+
+ if (j == 4)
+ {
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ ;
+
+ if (k == numMoves)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ }
+ }
+ }
+
+ return numMoves;
+}
+
+u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
+{
+ u8 numMoves = 0;
+ int i;
+
+ for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+
+ return numMoves;
+}
+
+u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
+{
+ u16 learnedMoves[4];
+ u16 moves[20];
+ u8 numMoves = 0;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ int i, j, k;
+
+ if (species == SPECIES_EGG)
+ return 0;
+
+ for (i = 0; i < 4; i++)
+ learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
+
+ for (i = 0; i < 20; i++)
+ {
+ u16 moveLevel;
+
+ if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ break;
+
+ moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+
+ if (moveLevel <= (level << 9))
+ {
+ for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ ;
+
+ if (j == 4)
+ {
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ ;
+
+ if (k == numMoves)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ }
+ }
+ }
+
+ return numMoves;
+}
+
+u16 SpeciesToPokedexNum(u16 species)
+{
+ if (IsNationalPokedexEnabled())
+ {
+ return SpeciesToNationalPokedexNum(species);
+ }
+ else
+ {
+ species = SpeciesToHoennPokedexNum(species);
+ if (species <= 202)
+ return species;
+ return 0xFFFF;
+ }
+}
+
+bool32 sub_806E3F8(u16 species)
+{
+ if (SpeciesToHoennPokedexNum(species) > 202)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void ClearBattleMonForms(void)
+{
+ int i;
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ gBattleMonForms[i] = 0;
+}
+
+u16 GetBattleBGM(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
+ return MUS_BATTLE34;
+ if (gBattleTypeFlags & BATTLE_TYPE_REGI)
+ return MUS_BATTLE36;
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ return MUS_BATTLE20;
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ u8 trainerClass;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
+ trainerClass = GetFrontierOpponentClass(gTrainerBattleOpponent_A);
+ else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
+ trainerClass = TRAINER_CLASS_EXPERT;
+ else
+ trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
+
+ switch (trainerClass)
+ {
+ case TRAINER_CLASS_AQUA_LEADER:
+ case TRAINER_CLASS_MAGMA_LEADER:
+ return MUS_BATTLE30;
+ case TRAINER_CLASS_TEAM_AQUA:
+ case TRAINER_CLASS_TEAM_MAGMA:
+ case TRAINER_CLASS_AQUA_ADMIN:
+ case TRAINER_CLASS_MAGMA_ADMIN:
+ return MUS_BATTLE31;
+ case TRAINER_CLASS_LEADER:
+ return MUS_BATTLE32;
+ case TRAINER_CLASS_CHAMPION:
+ return MUS_BATTLE33;
+ case TRAINER_CLASS_PKMN_TRAINER_3:
+ if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
+ return MUS_BATTLE35;
+ if (!StringCompare(gTrainers[gTrainerBattleOpponent_A].trainerName, gText_BattleWallyName))
+ return MUS_BATTLE20;
+ return MUS_BATTLE35;
+ case TRAINER_CLASS_ELITE_FOUR:
+ return MUS_BATTLE38;
+ case TRAINER_CLASS_SALON_MAIDEN:
+ case TRAINER_CLASS_DOME_ACE:
+ case TRAINER_CLASS_PALACE_MAVEN:
+ case TRAINER_CLASS_ARENA_TYCOON:
+ case TRAINER_CLASS_FACTORY_HEAD:
+ case TRAINER_CLASS_PIKE_QUEEN:
+ case TRAINER_CLASS_PYRAMID_KING:
+ return MUS_VS_FRONT;
+ default:
+ return MUS_BATTLE20;
+ }
+ }
+ return MUS_BATTLE27;
+}
+
+void PlayBattleBGM(void)
+{
+ ResetMapMusic();
+ m4aMPlayAllStop();
+ PlayBGM(GetBattleBGM());
+}
+
+void PlayMapChosenOrBattleBGM(u16 songId)
+{
+ ResetMapMusic();
+ m4aMPlayAllStop();
+ if (songId)
+ PlayNewMapMusic(songId);
+ else
+ PlayNewMapMusic(GetBattleBGM());
+}
+
+void sub_806E694(u16 songId)
+{
+ u8 taskId;
+
+ ResetMapMusic();
+ m4aMPlayAllStop();
+
+ taskId = CreateTask(sub_806E6CC, 0);
+ gTasks[taskId].data[0] = songId;
+}
+
+static void sub_806E6CC(u8 taskId)
+{
+ if (gTasks[taskId].data[0])
+ PlayNewMapMusic(gTasks[taskId].data[0]);
+ else
+ PlayNewMapMusic(GetBattleBGM());
+ DestroyTask(taskId);
+}
+
+const u8 *GetMonFrontSpritePal(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality);
+}
+
+// Extracts the upper 16 bits of a 32-bit number
+#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
+
+// Extracts the lower 16 bits of a 32-bit number
+#define LOHALF(n) ((n) & 0xFFFF)
+
+const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
+{
+ u32 shinyValue;
+
+ if (species > SPECIES_EGG)
+ return gMonPaletteTable[0].data;
+
+ shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ return gMonShinyPaletteTable[species].data;
+ else
+ return gMonPaletteTable[species].data;
+}
+
+const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+}
+
+const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality)
+{
+ u32 shinyValue;
+
+ shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ return &gMonShinyPaletteTable[species];
+ else
+ return &gMonPaletteTable[species];
+}
+
+bool32 IsHMMove2(u16 move)
+{
+ int i = 0;
+ while (sHMMoves[i] != 0xFFFF)
+ {
+ if (sHMMoves[i++] == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 IsMonSpriteNotFlipped(u16 species)
+{
+ return gBaseStats[species].noFlip;
+}
+
+s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor)
+{
+ u8 nature = GetNature(mon);
+ return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
+}
+
+s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor)
+{
+ u8 nature = GetNatureFromPersonality(personality);
+ return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
+}
+
+bool8 IsTradedMon(struct Pokemon *mon)
+{
+ u8 otName[OT_NAME_LENGTH + 1];
+ u32 otId;
+ GetMonData(mon, MON_DATA_OT_NAME, otName);
+ otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ return IsOtherTrainer(otId, otName);
+}
+
+bool8 IsOtherTrainer(u32 otId, u8 *otName)
+{
+ if (otId ==
+ (gSaveBlock2Ptr->playerTrainerId[0]
+ | (gSaveBlock2Ptr->playerTrainerId[1] << 8)
+ | (gSaveBlock2Ptr->playerTrainerId[2] << 16)
+ | (gSaveBlock2Ptr->playerTrainerId[3] << 24)))
+ {
+ int i;
+
+ for (i = 0; otName[i] != EOS; i++)
+ if (otName[i] != gSaveBlock2Ptr->playerName[i])
+ return TRUE;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void MonRestorePP(struct Pokemon *mon)
+{
+ BoxMonRestorePP(&mon->box);
+}
+
+void BoxMonRestorePP(struct BoxPokemon *boxMon)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0))
+ {
+ u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0);
+ u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0);
+ u8 pp = CalculatePPWithBonus(move, bonus, i);
+ SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp);
+ }
+ }
+}
+
+void sub_806E994(void)
+{
+ gLastUsedAbility = gBattleStruct->field_B0;
+
+ gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff1[1] = B_BUFF_MON_NICK_WITH_PREFIX;
+ gBattleTextBuff1[2] = gBattleStruct->field_49;
+ gBattleTextBuff1[4] = B_BUFF_EOS;
+
+ if (!GetBattlerSide(gBattleStruct->field_49))
+ gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->field_49]);
+ else
+ gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->field_49];
+
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
+
+ BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4);
+}
+
+static s32 GetWildMonTableIdInAlteringCave(u16 species)
+{
+ s32 i;
+ for (i = 0; i < (s32) ARRAY_COUNT(sAlteringCaveWildMonHeldItems); i++)
+ if (sAlteringCaveWildMonHeldItems[i].species == species)
+ return i;
+ return 0;
+}
+
+void SetWildMonHeldItem(void)
+{
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_PIKE)))
+ {
+ u16 rnd = Random() % 100;
+ u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0);
+ u16 var1 = 45;
+ u16 var2 = 95;
+ if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3, 0)
+ && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES)
+ {
+ var1 = 20;
+ var2 = 80;
+ }
+ if (gMapHeader.mapDataId == 0x1A4)
+ {
+ s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species);
+ if (alteringCaveId != 0)
+ {
+ if (rnd < var2)
+ return;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &sAlteringCaveWildMonHeldItems[alteringCaveId].item);
+ }
+ else
+ {
+ if (rnd < var1)
+ return;
+ if (rnd < var2)
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
+ else
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2);
+ }
+ }
+ else
+ {
+ if (gBaseStats[species].item1 == gBaseStats[species].item2 && gBaseStats[species].item1 != 0)
+ {
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
+ }
+ else
+ {
+ if (rnd < var1)
+ return;
+ if (rnd < var2)
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
+ else
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2);
+ }
+ }
+ }
+}
+
+bool8 IsMonShiny(struct Pokemon *mon)
+{
+ u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
+ return IsShinyOtIdPersonality(otId, personality);
+}
+
+bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
+{
+ bool8 retVal = FALSE;
+ u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ retVal = TRUE;
+ return retVal;
+}
+
+const u8 *GetTrainerPartnerName(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ {
+ if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ {
+ return gTrainers[TRAINER_STEVEN].trainerName;
+ }
+ else
+ {
+ GetFrontierTrainerName(gStringVar1, gPartnerTrainerId);
+ return gStringVar1;
+ }
+ }
+ else
+ {
+ u8 id = GetMultiplayerId();
+ return gLinkPlayers[GetBattlerMultiplayerId(gLinkPlayers[id].lp_field_18 ^ 2)].name;
+ }
+}
+
+#define READ_PTR_FROM_TASK(taskId, dataId) \
+ (void*)( \
+ ((u16)(gTasks[taskId].data[dataId]) | \
+ ((u16)(gTasks[taskId].data[dataId + 1]) << 0x10)))
+
+#define STORE_PTR_IN_TASK(ptr, taskId, dataId) \
+{ \
+ gTasks[taskId].data[dataId] = (u32)(ptr); \
+ gTasks[taskId].data[dataId + 1] = (u32)(ptr) >> 0x10; \
+}
+
+static void Task_AnimateAfterDelay(u8 taskId)
+{
+ if (--gTasks[taskId].data[3] == 0)
+ {
+ LaunchAnimationTaskForFrontSprite(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]);
+ DestroyTask(taskId);
+ }
+}
+
+static void Task_PokemonSummaryAnimateAfterDelay(u8 taskId)
+{
+ if (--gTasks[taskId].data[3] == 0)
+ {
+ StartMonSummaryAnimation(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]);
+ sub_81C488C(0xFF);
+ DestroyTask(taskId);
+ }
+}
+
+void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3)
+{
+ if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
+ DoMonFrontSpriteAnimation(sprite, species, noCry, arg3 | 0x80);
+ else
+ DoMonFrontSpriteAnimation(sprite, species, noCry, arg3);
+}
+
+void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3)
+{
+ s8 pan;
+ switch (arg3 & 0x7F)
+ {
+ case 0:
+ pan = -25;
+ break;
+ case 1:
+ pan = 25;
+ break;
+ default:
+ pan = 0;
+ break;
+ }
+ if (arg3 & 0x80)
+ {
+ if (!noCry)
+ PlayCry1(species, pan);
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else
+ {
+ if (!noCry)
+ {
+ PlayCry1(species, pan);
+ if (HasTwoFramesAnimation(species))
+ StartSpriteAnim(sprite, 1);
+ }
+ if (sMonAnimationDelayTable[species - 1] != 0)
+ {
+ u8 taskId = CreateTask(Task_AnimateAfterDelay, 0);
+ STORE_PTR_IN_TASK(sprite, taskId, 0);
+ gTasks[taskId].data[2] = sMonFrontAnimIdsTable[species - 1];
+ gTasks[taskId].data[3] = sMonAnimationDelayTable[species - 1];
+ }
+ else
+ {
+ LaunchAnimationTaskForFrontSprite(sprite, sMonFrontAnimIdsTable[species - 1]);
+ }
+ sprite->callback = SpriteCallbackDummy_2;
+ }
+}
+
+void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneFrame)
+{
+ if (!oneFrame && HasTwoFramesAnimation(species))
+ StartSpriteAnim(sprite, 1);
+ if (sMonAnimationDelayTable[species - 1] != 0)
+ {
+ u8 taskId = CreateTask(Task_PokemonSummaryAnimateAfterDelay, 0);
+ STORE_PTR_IN_TASK(sprite, taskId, 0);
+ gTasks[taskId].data[2] = sMonFrontAnimIdsTable[species - 1];
+ gTasks[taskId].data[3] = sMonAnimationDelayTable[species - 1];
+ sub_81C488C(taskId);
+ SetSpriteCB_MonAnimDummy(sprite);
+ }
+ else
+ {
+ StartMonSummaryAnimation(sprite, sMonFrontAnimIdsTable[species - 1]);
+ }
+}
+
+void sub_806EE98(void)
+{
+ u8 delayTaskId = FindTaskIdByFunc(Task_PokemonSummaryAnimateAfterDelay);
+ if (delayTaskId != 0xFF)
+ DestroyTask(delayTaskId);
+}
+
+void BattleAnimateBackSprite(struct Sprite* sprite, u16 species)
+{
+ if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
+ {
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else
+ {
+ LaunchAnimationTaskForBackSprite(sprite, GetSpeciesBackAnimSet(species));
+ sprite->callback = SpriteCallbackDummy_2;
+ }
+}
+
+u8 sub_806EF08(u8 arg0)
+{
+ s32 i;
+ s32 var = 0;
+ u8 multiplayerId = GetMultiplayerId();
+ switch (gLinkPlayers[multiplayerId].lp_field_18)
+ {
+ case 0:
+ case 2:
+ var = (arg0 != 0) ? 1 : 3;
+ break;
+ case 1:
+ case 3:
+ var = (arg0 != 0) ? 2 : 0;
+ break;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ if (gLinkPlayers[i].lp_field_18 == (s16)(var))
+ break;
+ }
+ return i;
+}
+
+u8 sub_806EF84(u8 arg0, u8 arg1)
+{
+ s32 i;
+ s32 var = 0;
+ switch (gLinkPlayers[arg1].lp_field_18)
+ {
+ case 0:
+ case 2:
+ var = (arg0 != 0) ? 1 : 3;
+ break;
+ case 1:
+ case 3:
+ var = (arg0 != 0) ? 2 : 0;
+ break;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ if (gLinkPlayers[i].lp_field_18 == (s16)(var))
+ break;
+ }
+ return i;
+}
+
+u16 FacilityClassToPicIndex(u16 facilityClass)
+{
+ return gFacilityClassToPicIndex[facilityClass];
+}
+
+u16 PlayerGenderToFrontTrainerPicId(u8 playerGender)
+{
+ if (playerGender != MALE)
+ return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_BRENDAN);
+ else
+ return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_MAY);
+}
+
+void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
+{
+ u8 getFlagCaseId = (caseId == FLAG_SET_SEEN) ? FLAG_GET_SEEN : FLAG_GET_CAUGHT;
+ if (!GetSetPokedexFlag(nationalNum, getFlagCaseId)) // don't set if it's already set
+ {
+ GetSetPokedexFlag(nationalNum, caseId);
+ if (NationalPokedexNumToSpecies(nationalNum) == SPECIES_UNOWN)
+ gSaveBlock2Ptr->pokedex.unownPersonality = personality;
+ if (NationalPokedexNumToSpecies(nationalNum) == SPECIES_SPINDA)
+ gSaveBlock2Ptr->pokedex.spindaPersonality = personality;
+ }
+}
+
+const u8 *GetTrainerClassNameFromId(u16 trainerId)
+{
+ if (trainerId > NO_OF_TRAINERS)
+ trainerId = 0;
+ return gTrainerClassNames[gTrainers[trainerId].trainerClass];
+}
+
+const u8 *GetTrainerNameFromId(u16 trainerId)
+{
+ if (trainerId > NO_OF_TRAINERS)
+ trainerId = 0;
+ return gTrainers[trainerId].trainerName;
+}
+
+bool8 HasTwoFramesAnimation(u16 species)
+{
+ return (species != SPECIES_CASTFORM
+ && species != SPECIES_DEOXYS
+ && species != SPECIES_SPINDA
+ && species != SPECIES_UNOWN);
+}
+
+bool8 sub_806F104(void)
+{
+ if (gMain.inBattle && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER))
+ return TRUE;
+ if (!gMain.inBattle && (InBattlePike() || InBattlePyramid()))
+ return TRUE;
+ return FALSE;
+}
+
+#define FORCE_SIGNED(x)(-(x * (-1)))
+
+static void sub_806F160(struct Unknown_806F160_Struct* structPtr)
+{
+ u16 i, j;
+ for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++)
+ {
+ structPtr->templates[i] = gUnknown_08329D98[i];
+ for (j = 0; j < structPtr->field_1; j++)
+ {
+ asm("");
+ structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800];
+ }
+ structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_1];
+ }
+}
+
+static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr)
+{
+ u16 i, j;
+ for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++)
+ {
+ structPtr->templates[i] = gUnknown_08329F28;
+ for (j = 0; j < structPtr->field_1; j++)
+ {
+ structPtr->frameImages[i * structPtr->field_0_0 + j].data = &structPtr->byteArrays[i][j * 0x800];
+ }
+ structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_0_0];
+ structPtr->templates[i].anims = gUnknown_082FF70C;
+ structPtr->templates[i].paletteTag = i;
+ }
+}
+
+struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1)
+{
+ u8 i;
+ u8 flags;
+ struct Unknown_806F160_Struct *structPtr;
+
+ flags = 0;
+ id %= 2;
+ structPtr = AllocZeroed(sizeof(*structPtr));
+ if (structPtr == NULL)
+ return NULL;
+
+ switch (arg1)
+ {
+ case 2:
+ structPtr->field_0_0 = 7;
+ structPtr->field_0_1 = 7;
+ structPtr->field_1 = 4;
+ structPtr->field_3_0 = 1;
+ structPtr->field_3_1 = 2;
+ break;
+ case 0:
+ default:
+ structPtr->field_0_0 = 4;
+ structPtr->field_0_1 = 4;
+ structPtr->field_1 = 4;
+ structPtr->field_3_0 = 1;
+ structPtr->field_3_1 = 0;
+ break;
+ }
+
+ structPtr->bytes = AllocZeroed(structPtr->field_3_0 * 0x800 * 4 * structPtr->field_0_0);
+ structPtr->byteArrays = AllocZeroed(structPtr->field_0_0 * 32);
+ if (structPtr->bytes == NULL || structPtr->byteArrays == NULL)
+ {
+ flags |= 1;
+ }
+ else
+ {
+ for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++)
+ structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 0xD));
+ }
+
+ structPtr->templates = AllocZeroed(sizeof(struct SpriteTemplate) * structPtr->field_0_0);
+ structPtr->frameImages = AllocZeroed(sizeof(struct SpriteFrameImage) * structPtr->field_0_0 * structPtr->field_1);
+ if (structPtr->templates == NULL || structPtr->frameImages == NULL)
+ {
+ flags |= 2;
+ }
+ else
+ {
+ for (i = 0; i < structPtr->field_1 * structPtr->field_0_0; i++)
+ structPtr->frameImages[i].size = 0x800;
+
+ switch (structPtr->field_3_1)
+ {
+ case 2:
+ sub_806F1FC(structPtr);
+ break;
+ case 0:
+ case 1:
+ default:
+ sub_806F160(structPtr);
+ break;
+ }
+ }
+
+ if (flags & 2)
+ {
+ if (structPtr->frameImages != NULL)
+ FREE_AND_SET_NULL(structPtr->frameImages);
+ if (structPtr->templates != NULL)
+ FREE_AND_SET_NULL(structPtr->templates);
+ }
+ if (flags & 1)
+ {
+ if (structPtr->byteArrays != NULL)
+ FREE_AND_SET_NULL(structPtr->byteArrays);
+ if (structPtr->bytes != NULL)
+ FREE_AND_SET_NULL(structPtr->bytes);
+ }
+
+ if (flags)
+ {
+ memset(structPtr, 0, sizeof(*structPtr));
+ Free(structPtr);
+ }
+ else
+ {
+ structPtr->magic = 0xA3;
+ gUnknown_020249B4[id] = structPtr;
+ }
+
+ return gUnknown_020249B4[id];
+}
+
+void sub_806F47C(u8 id)
+{
+ struct Unknown_806F160_Struct *structPtr;
+
+ id %= 2;
+ structPtr = gUnknown_020249B4[id];
+ if (structPtr == NULL)
+ return;
+
+ if (structPtr->magic != 0xA3)
+ {
+ memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct));
+ }
+ else
+ {
+
+ if (structPtr->frameImages != NULL)
+ FREE_AND_SET_NULL(structPtr->frameImages);
+ if (structPtr->templates != NULL)
+ FREE_AND_SET_NULL(structPtr->templates);
+ if (structPtr->byteArrays != NULL)
+ FREE_AND_SET_NULL(structPtr->byteArrays);
+ if (structPtr->bytes != NULL)
+ FREE_AND_SET_NULL(structPtr->bytes);
+
+ memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct));
+ Free(structPtr);
+ }
+}
+
+u8 *sub_806F4F8(u8 id, u8 arg1)
+{
+ struct Unknown_806F160_Struct *structPtr = gUnknown_020249B4[id % 2];
+ if (structPtr->magic != 0xA3)
+ {
+ return NULL;
+ }
+ else
+ {
+ if (arg1 >= FORCE_SIGNED(structPtr->field_0_0))
+ arg1 = 0;
+
+ return structPtr->byteArrays[arg1];
+ }
+}
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
deleted file mode 100644
index cafd86c07..000000000
--- a/src/pokemon_1.c
+++ /dev/null
@@ -1,457 +0,0 @@
-#include "global.h"
-#include "pokemon.h"
-#include "random.h"
-#include "main.h"
-#include "constants/species.h"
-#include "constants/abilities.h"
-#include "constants/items.h"
-#include "constants/trainers.h"
-#include "constants/moves.h"
-#include "string_util.h"
-#include "text.h"
-
-//Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-//Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
-extern u8 sav1_map_get_name(void);
-
-// EWRAM vars
-EWRAM_DATA u8 sLearningMoveTableID = 0;
-EWRAM_DATA u8 gPlayerPartyCount = 0;
-EWRAM_DATA u8 gEnemyPartyCount = 0;
-EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0};
-EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0};
-
-// const rom data
-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};
-
-const struct SpindaSpot gSpindaSpotGraphics[] =
-{
- {16, 7, INCBIN_U16("graphics/spinda_spots/spot_0.bin")},
- {40, 8, INCBIN_U16("graphics/spinda_spots/spot_1.bin")},
- {22, 25, INCBIN_U16("graphics/spinda_spots/spot_2.bin")},
- {34, 26, INCBIN_U16("graphics/spinda_spots/spot_3.bin")}
-};
-
-#include "data/pokemon/item_effects.h"
-
-const s8 gNatureStatTable[][5] =
-{
- // Atk Def Spd Sp.Atk Sp.Def
- { 0, 0, 0, 0, 0}, // Hardy
- { +1, -1, 0, 0, 0}, // Lonely
- { +1, 0, -1, 0, 0}, // Brave
- { +1, 0, 0, -1, 0}, // Adamant
- { +1, 0, 0, 0, -1}, // Naughty
- { -1, +1, 0, 0, 0}, // Bold
- { 0, 0, 0, 0, 0}, // Docile
- { 0, +1, -1, 0, 0}, // Relaxed
- { 0, +1, 0, -1, 0}, // Impish
- { 0, +1, 0, 0, -1}, // Lax
- { -1, 0, +1, 0, 0}, // Timid
- { 0, -1, +1, 0, 0}, // Hasty
- { 0, 0, 0, 0, 0}, // Serious
- { 0, 0, +1, -1, 0}, // Jolly
- { 0, 0, +1, 0, -1}, // Naive
- { -1, 0, 0, +1, 0}, // Modest
- { 0, -1, 0, +1, 0}, // Mild
- { 0, 0, -1, +1, 0}, // Quiet
- { 0, 0, 0, 0, 0}, // Bashful
- { 0, 0, 0, +1, -1}, // Rash
- { -1, 0, 0, 0, +1}, // Calm
- { 0, -1, 0, 0, +1}, // Gentle
- { 0, 0, -1, 0, +1}, // Sassy
- { 0, 0, 0, -1, +1}, // Careful
- { 0, 0, 0, 0, 0}, // Quirky
-};
-
-#include "data/pokemon/tmhm_learnsets.h"
-#include "data/pokemon/trainer_class_lookups.h"
-#include "data/pokemon/cry_ids.h"
-#include "data/pokemon/experience_tables.h"
-#include "data/pokemon/base_stats.h"
-#include "data/pokemon/level_up_learnsets.h"
-#include "data/pokemon/evolution.h"
-#include "data/pokemon/level_up_learnset_pointers.h"
-
-// code
-void ZeroBoxMonData(struct BoxPokemon *boxMon)
-{
- u8 *raw = (u8 *)boxMon;
- u32 i;
- for (i = 0; i < sizeof(struct BoxPokemon); i++)
- raw[i] = 0;
-}
-
-void ZeroMonData(struct Pokemon *mon)
-{
- u32 arg;
- ZeroBoxMonData(&mon->box);
- arg = 0;
- SetMonData(mon, MON_DATA_STATUS, &arg);
- SetMonData(mon, MON_DATA_LEVEL, &arg);
- SetMonData(mon, MON_DATA_HP, &arg);
- SetMonData(mon, MON_DATA_MAX_HP, &arg);
- SetMonData(mon, MON_DATA_ATK, &arg);
- SetMonData(mon, MON_DATA_DEF, &arg);
- SetMonData(mon, MON_DATA_SPEED, &arg);
- SetMonData(mon, MON_DATA_SPATK, &arg);
- SetMonData(mon, MON_DATA_SPDEF, &arg);
- arg = 255;
- SetMonData(mon, MON_DATA_MAIL, &arg);
-}
-
-void ZeroPlayerPartyMons(void)
-{
- s32 i;
- for (i = 0; i < PARTY_SIZE; i++)
- ZeroMonData(&gPlayerParty[i]);
-}
-
-void ZeroEnemyPartyMons(void)
-{
- s32 i;
- for (i = 0; i < PARTY_SIZE; i++)
- ZeroMonData(&gEnemyParty[i]);
-}
-
-void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
-{
- u32 arg;
- ZeroMonData(mon);
- CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
- SetMonData(mon, MON_DATA_LEVEL, &level);
- arg = 255;
- SetMonData(mon, MON_DATA_MAIL, &arg);
- CalculateMonStats(mon);
-}
-
-void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
-{
- u8 speciesName[POKEMON_NAME_LENGTH + 1];
- u32 personality;
- u32 value;
- u16 checksum;
-
- ZeroBoxMonData(boxMon);
-
- if (hasFixedPersonality)
- personality = fixedPersonality;
- else
- personality = Random32();
-
- SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality);
-
- //Determine original trainer ID
- if (otIdType == OT_ID_RANDOM_NO_SHINY) //Pokemon cannot be shiny
- {
- u32 shinyValue;
- do
- {
- value = Random32();
- shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality);
- } while (shinyValue < 8);
- }
- else if (otIdType == OT_ID_PRESET) //Pokemon has a preset OT ID
- {
- value = fixedOtId;
- }
- else //Player is the OT
- {
- value = gSaveBlock2Ptr->playerTrainerId[0]
- | (gSaveBlock2Ptr->playerTrainerId[1] << 8)
- | (gSaveBlock2Ptr->playerTrainerId[2] << 16)
- | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
- }
-
- SetBoxMonData(boxMon, MON_DATA_OT_ID, &value);
-
- checksum = CalculateBoxMonChecksum(boxMon);
- SetBoxMonData(boxMon, MON_DATA_CHECKSUM, &checksum);
- EncryptBoxMon(boxMon);
- GetSpeciesName(speciesName, species);
- SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName);
- SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage);
- SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName);
- SetBoxMonData(boxMon, MON_DATA_SPECIES, &species);
- SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]);
- SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship);
- value = sav1_map_get_name();
- SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value);
- SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level);
- SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion);
- value = ITEM_POKE_BALL;
- SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value);
- SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender);
-
- if (fixedIV < 32)
- {
- SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV);
- SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV);
- }
- else
- {
- u32 iv;
- value = Random();
-
- iv = value & 0x1F;
- SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv);
- iv = (value & 0x3E0) >> 5;
- SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv);
- iv = (value & 0x7C00) >> 10;
- SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv);
-
- value = Random();
-
- iv = value & 0x1F;
- SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv);
- iv = (value & 0x3E0) >> 5;
- SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv);
- iv = (value & 0x7C00) >> 10;
- SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv);
- }
-
- if (gBaseStats[species].ability2)
- {
- value = personality & 1;
- SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, &value);
- }
-
- GiveBoxMonInitialMoveset(boxMon);
-}
-
-void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 nature)
-{
- u32 personality;
-
- do
- {
- personality = Random32();
- }
- while (nature != GetNatureFromPersonality(personality));
-
- CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0);
-}
-
-void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter)
-{
- u32 personality;
-
- if ((u8)(unownLetter - 1) < 28)
- {
- u16 actualLetter;
-
- do
- {
- personality = Random32();
- actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28);
- }
- while (nature != GetNatureFromPersonality(personality)
- || gender != GetGenderFromSpeciesAndPersonality(species, personality)
- || actualLetter != unownLetter - 1);
- }
- else
- {
- do
- {
- personality = Random32();
- }
- while (nature != GetNatureFromPersonality(personality)
- || gender != GetGenderFromSpeciesAndPersonality(species, personality));
- }
-
- CreateMon(mon, species, level, fixedIV, 1, personality, OT_ID_PLAYER_ID, 0);
-}
-
-// This is only used to create Wally's Ralts.
-void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level)
-{
- u32 personality;
- u32 otId;
-
- do
- {
- otId = Random32();
- personality = Random32();
- }
- while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE);
- CreateMon(mon, species, level, 32, 1, personality, OT_ID_PRESET, otId);
-}
-
-void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality)
-{
- CreateMon(mon, species, level, 0, 1, personality, OT_ID_PLAYER_ID, 0);
- SetMonData(mon, MON_DATA_IVS, &ivs);
- CalculateMonStats(mon);
-}
-
-void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId)
-{
- CreateMon(mon, species, level, 0, 0, 0, OT_ID_PRESET, otId);
- SetMonData(mon, MON_DATA_HP_IV, &ivs[0]);
- SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]);
- SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]);
- SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]);
- SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]);
- SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]);
- CalculateMonStats(mon);
-}
-
-void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread)
-{
- s32 i;
- s32 statCount = 0;
- u16 evAmount;
- u8 temp;
-
- CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0);
-
- temp = evSpread;
-
- for (i = 0; i < 6; i++)
- {
- if (temp & 1)
- statCount++;
- temp >>= 1;
- }
-
- evAmount = 510 / statCount;
-
- temp = 1;
-
- for (i = 0; i < 6; i++)
- {
- if (evSpread & temp)
- SetMonData(mon, MON_DATA_HP_EV + i, &evAmount);
- temp <<= 1;
- }
-
- CalculateMonStats(mon);
-}
-
-void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src)
-{
- s32 i;
- u8 nickname[30];
- u8 language;
- u8 value;
-
- CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId);
-
- for (i = 0; i < 4; i++)
- SetMonMoveSlot(mon, src->moves[i], i);
-
- SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses);
- SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem);
- SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship);
-
- StringCopy(nickname, src->nickname);
-
- if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
- {
- language = LANGUAGE_JAPANESE;
- StripExtCtrlCodes(nickname);
- }
- else
- {
- language = GAME_LANGUAGE;
- }
-
- SetMonData(mon, MON_DATA_LANGUAGE, &language);
- SetMonData(mon, MON_DATA_NICKNAME, nickname);
- SetMonData(mon, MON_DATA_HP_EV, &src->hpEV);
- SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV);
- SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV);
- SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
- SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
- SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
- value = src->altAbility;
- SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
- value = src->hpIV;
- SetMonData(mon, MON_DATA_HP_IV, &value);
- value = src->attackIV;
- SetMonData(mon, MON_DATA_ATK_IV, &value);
- value = src->defenseIV;
- SetMonData(mon, MON_DATA_DEF_IV, &value);
- value = src->speedIV;
- SetMonData(mon, MON_DATA_SPEED_IV, &value);
- value = src->spAttackIV;
- SetMonData(mon, MON_DATA_SPATK_IV, &value);
- value = src->spDefenseIV;
- SetMonData(mon, MON_DATA_SPDEF_IV, &value);
- MonRestorePP(mon);
- CalculateMonStats(mon);
-}
-
-u8 BattleFrontierGetOpponentLvl(u8);
-
-void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50)
-{
- s32 i;
- u8 nickname[30];
- u8 level;
- u8 language;
- u8 value;
-
- if (gSaveBlock2Ptr->frontierChosenLvl != 0)
- level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontierChosenLvl);
- else if (lvl50)
- level = 50;
- else
- level = src->level;
-
- CreateMon(mon, src->species, level, 0, 1, src->personality, 1, src->otId);
-
- for (i = 0; i < 4; i++)
- SetMonMoveSlot(mon, src->moves[i], i);
-
- SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses);
- SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem);
- SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship);
-
- StringCopy(nickname, src->nickname);
-
- if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
- {
- language = LANGUAGE_JAPANESE;
- StripExtCtrlCodes(nickname);
- }
- else
- {
- language = GAME_LANGUAGE;
- }
-
- SetMonData(mon, MON_DATA_LANGUAGE, &language);
- SetMonData(mon, MON_DATA_NICKNAME, nickname);
- SetMonData(mon, MON_DATA_HP_EV, &src->hpEV);
- SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV);
- SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV);
- SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV);
- SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV);
- SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV);
- value = src->altAbility;
- SetMonData(mon, MON_DATA_ALT_ABILITY, &value);
- value = src->hpIV;
- SetMonData(mon, MON_DATA_HP_IV, &value);
- value = src->attackIV;
- SetMonData(mon, MON_DATA_ATK_IV, &value);
- value = src->defenseIV;
- SetMonData(mon, MON_DATA_DEF_IV, &value);
- value = src->speedIV;
- SetMonData(mon, MON_DATA_SPEED_IV, &value);
- value = src->spAttackIV;
- SetMonData(mon, MON_DATA_SPATK_IV, &value);
- value = src->spDefenseIV;
- SetMonData(mon, MON_DATA_SPDEF_IV, &value);
- MonRestorePP(mon);
- CalculateMonStats(mon);
-}
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
deleted file mode 100644
index 28cecbb0b..000000000
--- a/src/pokemon_2.c
+++ /dev/null
@@ -1,1365 +0,0 @@
-#include "global.h"
-#include "pokemon.h"
-#include "battle.h"
-#include "event_data.h"
-#include "random.h"
-#include "sprite.h"
-#include "constants/species.h"
-#include "text.h"
-#include "string_util.h"
-
-struct Unknown_020249B4
-{
- u8 unk0[0xC];
- struct SpriteTemplate* templates;
-};
-
-extern u8 gAbsentBattlerFlags;
-extern u8 gActiveBattler;
-extern u8 gBattlerAttacker;
-extern u8 gBattlerTarget;
-extern u8 gLastUsedAbility;
-extern u16 gTrainerBattleOpponent_A;
-extern u32 gBattleTypeFlags;
-extern struct SpriteTemplate gUnknown_0202499C;
-extern struct Unknown_020249B4* gUnknown_020249B4[2];
-
-extern const u32 gBitTable[];
-extern const struct SpriteTemplate gUnknown_08329D98[];
-extern const struct SpriteTemplate gUnknown_08329DF8[];
-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 u8 gText_BadEgg[];
-extern const u8 gText_EggNickname[];
-
-extern u8 GetBattlerSide(u8 bank);
-extern u8 GetBattlerAtPosition(u8 bank);
-extern u8 GetBattlerPosition(u8 bank);
-
-u8 CountAliveMonsInBattle(u8 caseId)
-{
- s32 i;
- u8 retVal = 0;
-
- switch (caseId)
- {
- case BATTLE_ALIVE_EXCEPT_ACTIVE:
- for (i = 0; i < 4; i++)
- {
- if (i != gActiveBattler && !(gAbsentBattlerFlags & gBitTable[i]))
- retVal++;
- }
- break;
- case BATTLE_ALIVE_ATK_SIDE:
- for (i = 0; i < 4; i++)
- {
- if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i]))
- retVal++;
- }
- break;
- case BATTLE_ALIVE_DEF_SIDE:
- for (i = 0; i < 4; i++)
- {
- if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i]))
- retVal++;
- }
- break;
- }
-
- return retVal;
-}
-
-bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 bank)
-{
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
- return FALSE;
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
- return FALSE;
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
- return FALSE;
- if (FlagGet(badgeFlag))
- return TRUE;
- return FALSE;
-}
-
-u8 GetDefaultMoveTarget(u8 bank)
-{
- u8 status = GetBattlerPosition(bank) & 1;
-
- status ^= 1;
- if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
- return GetBattlerAtPosition(status);
- if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) > 1)
- {
- u8 val;
-
- if ((Random() & 1) == 0)
- val = status ^ 2;
- else
- val = status;
- return GetBattlerAtPosition(val);
- }
- else
- {
- if ((gAbsentBattlerFlags & gBitTable[status]))
- return GetBattlerAtPosition(status ^ 2);
- else
- return GetBattlerAtPosition(status);
- }
-}
-
-u8 GetMonGender(struct Pokemon *mon)
-{
- return GetBoxMonGender(&mon->box);
-}
-
-u8 GetBoxMonGender(struct BoxPokemon *boxMon)
-{
- u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
- u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL);
-
- switch (gBaseStats[species].genderRatio)
- {
- case MON_MALE:
- case MON_FEMALE:
- case MON_GENDERLESS:
- return gBaseStats[species].genderRatio;
- }
-
- if (gBaseStats[species].genderRatio > (personality & 0xFF))
- return MON_FEMALE;
- else
- return MON_MALE;
-}
-
-u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality)
-{
- switch (gBaseStats[species].genderRatio)
- {
- case MON_MALE:
- case MON_FEMALE:
- case MON_GENDERLESS:
- return gBaseStats[species].genderRatio;
- }
-
- if (gBaseStats[species].genderRatio > (personality & 0xFF))
- return MON_FEMALE;
- else
- return MON_MALE;
-}
-
-void sub_806A068(u16 species, u8 bankIdentity)
-{
- if (gMonSpritesGfxPtr != NULL)
- gUnknown_0202499C = gMonSpritesGfxPtr->templates[bankIdentity];
- else if (gUnknown_020249B4[0])
- gUnknown_0202499C = gUnknown_020249B4[0]->templates[bankIdentity];
- else if (gUnknown_020249B4[1])
- gUnknown_0202499C = gUnknown_020249B4[1]->templates[bankIdentity];
- else
- gUnknown_0202499C = gUnknown_08329D98[bankIdentity];
-
- gUnknown_0202499C.paletteTag = species;
- if (bankIdentity == 0 || bankIdentity == 2)
- gUnknown_0202499C.anims = gUnknown_082FF70C;
- else if (species > 500)
- gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species - 500];
- else
- gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species];
-}
-
-void sub_806A12C(u16 trainerSpriteId, u8 bankIdentity)
-{
- gUnknown_0202499C.paletteTag = trainerSpriteId;
- if (bankIdentity == 0 || bankIdentity == 2)
- {
- gUnknown_0202499C = gUnknown_08329DF8[trainerSpriteId];
- gUnknown_0202499C.anims = gUnknown_08305D0C[trainerSpriteId];
- }
- else
- {
- if (gMonSpritesGfxPtr != NULL)
- gUnknown_0202499C = gMonSpritesGfxPtr->templates[bankIdentity];
- else
- gUnknown_0202499C = gUnknown_08329D98[bankIdentity];
- gUnknown_0202499C.anims = gUnknown_0830536C[trainerSpriteId];
- }
-}
-
-void sub_806A1C0(u16 arg0, u8 bankIdentity)
-{
- if (gMonSpritesGfxPtr != NULL)
- gUnknown_0202499C = gMonSpritesGfxPtr->templates[bankIdentity];
- else
- gUnknown_0202499C = gUnknown_08329D98[bankIdentity];
-
- gUnknown_0202499C.paletteTag = arg0;
- gUnknown_0202499C.anims = gUnknown_0830536C[arg0];
-}
-
-void EncryptBoxMon(struct BoxPokemon *boxMon)
-{
- u32 i;
- for (i = 0; i < 12; i++)
- {
- boxMon->secure.raw[i] ^= boxMon->personality;
- boxMon->secure.raw[i] ^= boxMon->otId;
- }
-}
-
-void DecryptBoxMon(struct BoxPokemon *boxMon)
-{
- u32 i;
- for (i = 0; i < 12; i++)
- {
- boxMon->secure.raw[i] ^= boxMon->otId;
- boxMon->secure.raw[i] ^= boxMon->personality;
- }
-}
-
-#define SUBSTRUCT_CASE(n, v1, v2, v3, v4) \
-case n: \
- { \
- union PokemonSubstruct *substructs0 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs1 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs2 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs3 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs4 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs5 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs6 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs7 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs8 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs9 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs10 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs11 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs12 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs13 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs14 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs15 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs16 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs17 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs18 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs19 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs20 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs21 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs22 = boxMon->secure.substructs; \
- union PokemonSubstruct *substructs23 = boxMon->secure.substructs; \
- \
- switch (substructType) \
- { \
- case 0: \
- substruct = &substructs ## n [v1]; \
- break; \
- case 1: \
- substruct = &substructs ## n [v2]; \
- break; \
- case 2: \
- substruct = &substructs ## n [v3]; \
- break; \
- case 3: \
- substruct = &substructs ## n [v4]; \
- break; \
- } \
- break; \
- } \
-
-
-union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType)
-{
- union PokemonSubstruct *substruct = NULL;
-
- switch (personality % 24)
- {
- SUBSTRUCT_CASE( 0,0,1,2,3)
- SUBSTRUCT_CASE( 1,0,1,3,2)
- SUBSTRUCT_CASE( 2,0,2,1,3)
- SUBSTRUCT_CASE( 3,0,3,1,2)
- SUBSTRUCT_CASE( 4,0,2,3,1)
- SUBSTRUCT_CASE( 5,0,3,2,1)
- SUBSTRUCT_CASE( 6,1,0,2,3)
- SUBSTRUCT_CASE( 7,1,0,3,2)
- SUBSTRUCT_CASE( 8,2,0,1,3)
- SUBSTRUCT_CASE( 9,3,0,1,2)
- SUBSTRUCT_CASE(10,2,0,3,1)
- SUBSTRUCT_CASE(11,3,0,2,1)
- SUBSTRUCT_CASE(12,1,2,0,3)
- SUBSTRUCT_CASE(13,1,3,0,2)
- SUBSTRUCT_CASE(14,2,1,0,3)
- SUBSTRUCT_CASE(15,3,1,0,2)
- SUBSTRUCT_CASE(16,2,3,0,1)
- SUBSTRUCT_CASE(17,3,2,0,1)
- SUBSTRUCT_CASE(18,1,2,3,0)
- SUBSTRUCT_CASE(19,1,3,2,0)
- SUBSTRUCT_CASE(20,2,1,3,0)
- SUBSTRUCT_CASE(21,3,1,2,0)
- SUBSTRUCT_CASE(22,2,3,1,0)
- SUBSTRUCT_CASE(23,3,2,1,0)
- }
-
- return substruct;
-}
-
-extern u16 GetDeoxysStat(struct Pokemon *mon, s32 statId);
-
-u32 GetMonData(struct Pokemon *mon, s32 field, u8* data)
-{
- u32 ret;
-
- switch (field)
- {
- case MON_DATA_STATUS:
- ret = mon->status;
- break;
- case MON_DATA_LEVEL:
- ret = mon->level;
- break;
- case MON_DATA_HP:
- ret = mon->hp;
- break;
- case MON_DATA_MAX_HP:
- ret = mon->maxHP;
- break;
- case MON_DATA_ATK:
- ret = GetDeoxysStat(mon, STAT_ATK);
- if (!ret)
- ret = mon->attack;
- break;
- case MON_DATA_DEF:
- ret = GetDeoxysStat(mon, STAT_DEF);
- if (!ret)
- ret = mon->defense;
- break;
- case MON_DATA_SPEED:
- ret = GetDeoxysStat(mon, STAT_SPD);
- if (!ret)
- ret = mon->speed;
- break;
- case MON_DATA_SPATK:
- ret = GetDeoxysStat(mon, STAT_SPATK);
- if (!ret)
- ret = mon->spAttack;
- break;
- case MON_DATA_SPDEF:
- ret = GetDeoxysStat(mon, STAT_SPDEF);
- if (!ret)
- ret = mon->spDefense;
- break;
- case MON_DATA_ATK2:
- ret = mon->attack;
- break;
- case MON_DATA_DEF2:
- ret = mon->defense;
- break;
- case MON_DATA_SPEED2:
- ret = mon->speed;
- break;
- case MON_DATA_SPATK2:
- ret = mon->spAttack;
- break;
- case MON_DATA_SPDEF2:
- ret = mon->spDefense;
- break;
- case MON_DATA_MAIL:
- ret = mon->mail;
- break;
- default:
- ret = GetBoxMonData(&mon->box, field, data);
- break;
- }
- return ret;
-}
-
-u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
-{
- s32 i;
- u32 retVal = 0;
- struct PokemonSubstruct0 *substruct0 = NULL;
- struct PokemonSubstruct1 *substruct1 = NULL;
- struct PokemonSubstruct2 *substruct2 = NULL;
- struct PokemonSubstruct3 *substruct3 = NULL;
-
- if (field > MON_DATA_10)
- {
- substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
- substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
- substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2);
- substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3);
-
- DecryptBoxMon(boxMon);
-
- if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
- {
- boxMon->isBadEgg = 1;
- boxMon->isEgg = 1;
- substruct3->isEgg = 1;
- }
- }
-
- switch (field)
- {
- case MON_DATA_PERSONALITY:
- retVal = boxMon->personality;
- break;
- case MON_DATA_OT_ID:
- retVal = boxMon->otId;
- break;
- case MON_DATA_NICKNAME:
- {
- if (boxMon->isBadEgg)
- {
- for (retVal = 0;
- retVal < POKEMON_NAME_LENGTH && gText_BadEgg[retVal] != EOS;
- data[retVal] = gText_BadEgg[retVal], retVal++) {}
-
- data[retVal] = EOS;
- }
- else if (boxMon->isEgg)
- {
- StringCopy(data, gText_EggNickname);
- retVal = StringLength(data);
- }
- else if (boxMon->language == LANGUAGE_JAPANESE)
- {
- data[0] = EXT_CTRL_CODE_BEGIN;
- data[1] = EXT_CTRL_CODE_JPN;
-
- for (retVal = 2, i = 0;
- i < 5 && boxMon->nickname[i] != EOS;
- data[retVal] = boxMon->nickname[i], retVal++, i++) {}
-
- data[retVal++] = EXT_CTRL_CODE_BEGIN;
- data[retVal++] = EXT_CTRL_CODE_ENG;
- data[retVal] = EOS;
- }
- else
- {
- for (retVal = 0;
- retVal < POKEMON_NAME_LENGTH;
- data[retVal] = boxMon->nickname[retVal], retVal++){}
-
- data[retVal] = EOS;
- }
- break;
- }
- case MON_DATA_LANGUAGE:
- retVal = boxMon->language;
- break;
- case MON_DATA_SANITY_BIT1:
- retVal = boxMon->isBadEgg;
- break;
- case MON_DATA_SANITY_BIT2:
- retVal = boxMon->hasSpecies;
- break;
- case MON_DATA_SANITY_BIT3:
- retVal = boxMon->isEgg;
- break;
- case MON_DATA_OT_NAME:
- {
- retVal = 0;
-
- while (retVal < OT_NAME_LENGTH)
- {
- data[retVal] = boxMon->otName[retVal];
- retVal++;
- }
-
- data[retVal] = EOS;
- break;
- }
- case MON_DATA_MARKINGS:
- retVal = boxMon->markings;
- break;
- case MON_DATA_CHECKSUM:
- retVal = boxMon->checksum;
- break;
- case MON_DATA_10:
- retVal = boxMon->unknown;
- break;
- case MON_DATA_SPECIES:
- retVal = boxMon->isBadEgg ? SPECIES_EGG : substruct0->species;
- break;
- case MON_DATA_HELD_ITEM:
- retVal = substruct0->heldItem;
- break;
- case MON_DATA_EXP:
- retVal = substruct0->experience;
- break;
- case MON_DATA_PP_BONUSES:
- retVal = substruct0->ppBonuses;
- break;
- case MON_DATA_FRIENDSHIP:
- retVal = substruct0->friendship;
- break;
- case MON_DATA_MOVE1:
- case MON_DATA_MOVE2:
- case MON_DATA_MOVE3:
- case MON_DATA_MOVE4:
- retVal = substruct1->moves[field - MON_DATA_MOVE1];
- break;
- case MON_DATA_PP1:
- case MON_DATA_PP2:
- case MON_DATA_PP3:
- case MON_DATA_PP4:
- retVal = substruct1->pp[field - MON_DATA_PP1];
- break;
- case MON_DATA_HP_EV:
- retVal = substruct2->hpEV;
- break;
- case MON_DATA_ATK_EV:
- retVal = substruct2->attackEV;
- break;
- case MON_DATA_DEF_EV:
- retVal = substruct2->defenseEV;
- break;
- case MON_DATA_SPEED_EV:
- retVal = substruct2->speedEV;
- break;
- case MON_DATA_SPATK_EV:
- retVal = substruct2->spAttackEV;
- break;
- case MON_DATA_SPDEF_EV:
- retVal = substruct2->spDefenseEV;
- break;
- case MON_DATA_COOL:
- retVal = substruct2->cool;
- break;
- case MON_DATA_BEAUTY:
- retVal = substruct2->beauty;
- break;
- case MON_DATA_CUTE:
- retVal = substruct2->cute;
- break;
- case MON_DATA_SMART:
- retVal = substruct2->smart;
- break;
- case MON_DATA_TOUGH:
- retVal = substruct2->tough;
- break;
- case MON_DATA_SHEEN:
- retVal = substruct2->sheen;
- break;
- case MON_DATA_POKERUS:
- retVal = substruct3->pokerus;
- break;
- case MON_DATA_MET_LOCATION:
- retVal = substruct3->metLocation;
- break;
- case MON_DATA_MET_LEVEL:
- retVal = substruct3->metLevel;
- break;
- case MON_DATA_MET_GAME:
- retVal = substruct3->metGame;
- break;
- case MON_DATA_POKEBALL:
- retVal = substruct3->pokeball;
- break;
- case MON_DATA_OT_GENDER:
- retVal = substruct3->otGender;
- break;
- case MON_DATA_HP_IV:
- retVal = substruct3->hpIV;
- break;
- case MON_DATA_ATK_IV:
- retVal = substruct3->attackIV;
- break;
- case MON_DATA_DEF_IV:
- retVal = substruct3->defenseIV;
- break;
- case MON_DATA_SPEED_IV:
- retVal = substruct3->speedIV;
- break;
- case MON_DATA_SPATK_IV:
- retVal = substruct3->spAttackIV;
- break;
- case MON_DATA_SPDEF_IV:
- retVal = substruct3->spDefenseIV;
- break;
- case MON_DATA_IS_EGG:
- retVal = substruct3->isEgg;
- break;
- case MON_DATA_ALT_ABILITY:
- retVal = substruct3->altAbility;
- break;
- case MON_DATA_COOL_RIBBON:
- retVal = substruct3->coolRibbon;
- break;
- case MON_DATA_BEAUTY_RIBBON:
- retVal = substruct3->beautyRibbon;
- break;
- case MON_DATA_CUTE_RIBBON:
- retVal = substruct3->cuteRibbon;
- break;
- case MON_DATA_SMART_RIBBON:
- retVal = substruct3->smartRibbon;
- break;
- case MON_DATA_TOUGH_RIBBON:
- retVal = substruct3->toughRibbon;
- break;
- case MON_DATA_CHAMPION_RIBBON:
- retVal = substruct3->championRibbon;
- break;
- case MON_DATA_WINNING_RIBBON:
- retVal = substruct3->winningRibbon;
- break;
- case MON_DATA_VICTORY_RIBBON:
- retVal = substruct3->victoryRibbon;
- break;
- case MON_DATA_ARTIST_RIBBON:
- retVal = substruct3->artistRibbon;
- break;
- case MON_DATA_EFFORT_RIBBON:
- retVal = substruct3->effortRibbon;
- break;
- case MON_DATA_GIFT_RIBBON_1:
- retVal = substruct3->giftRibbon1;
- break;
- case MON_DATA_GIFT_RIBBON_2:
- retVal = substruct3->giftRibbon2;
- break;
- case MON_DATA_GIFT_RIBBON_3:
- retVal = substruct3->giftRibbon3;
- break;
- case MON_DATA_GIFT_RIBBON_4:
- retVal = substruct3->giftRibbon4;
- break;
- case MON_DATA_GIFT_RIBBON_5:
- retVal = substruct3->giftRibbon5;
- break;
- case MON_DATA_GIFT_RIBBON_6:
- retVal = substruct3->giftRibbon6;
- break;
- case MON_DATA_GIFT_RIBBON_7:
- retVal = substruct3->giftRibbon7;
- break;
- case MON_DATA_FATEFUL_ENCOUNTER:
- retVal = substruct3->fatefulEncounter;
- break;
- case MON_DATA_OBEDIENCE:
- retVal = substruct3->obedient;
- break;
- case MON_DATA_SPECIES2:
- retVal = substruct0->species;
- if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg))
- retVal = SPECIES_EGG;
- break;
- case MON_DATA_IVS:
- retVal = substruct3->hpIV | (substruct3->attackIV << 5) | (substruct3->defenseIV << 10) | (substruct3->speedIV << 15) | (substruct3->spAttackIV << 20) | (substruct3->spDefenseIV << 25);
- break;
- case MON_DATA_KNOWN_MOVES:
- if (substruct0->species && !substruct3->isEgg)
- {
- u16 *moves = (u16 *)data;
- s32 i = 0;
-
- while (moves[i] != 355)
- {
- u16 move = moves[i];
- if (substruct1->moves[0] == move
- || substruct1->moves[1] == move
- || substruct1->moves[2] == move
- || substruct1->moves[3] == move)
- retVal |= gBitTable[i];
- i++;
- }
- }
- break;
- case MON_DATA_RIBBON_COUNT:
- retVal = 0;
- if (substruct0->species && !substruct3->isEgg)
- {
- retVal += substruct3->coolRibbon;
- retVal += substruct3->beautyRibbon;
- retVal += substruct3->cuteRibbon;
- retVal += substruct3->smartRibbon;
- retVal += substruct3->toughRibbon;
- retVal += substruct3->championRibbon;
- retVal += substruct3->winningRibbon;
- retVal += substruct3->victoryRibbon;
- retVal += substruct3->artistRibbon;
- retVal += substruct3->effortRibbon;
- retVal += substruct3->giftRibbon1;
- retVal += substruct3->giftRibbon2;
- retVal += substruct3->giftRibbon3;
- retVal += substruct3->giftRibbon4;
- retVal += substruct3->giftRibbon5;
- retVal += substruct3->giftRibbon6;
- retVal += substruct3->giftRibbon7;
- }
- break;
- case MON_DATA_RIBBONS:
- retVal = 0;
- if (substruct0->species && !substruct3->isEgg)
- {
- retVal = substruct3->championRibbon
- | (substruct3->coolRibbon << 1)
- | (substruct3->beautyRibbon << 4)
- | (substruct3->cuteRibbon << 7)
- | (substruct3->smartRibbon << 10)
- | (substruct3->toughRibbon << 13)
- | (substruct3->winningRibbon << 16)
- | (substruct3->victoryRibbon << 17)
- | (substruct3->artistRibbon << 18)
- | (substruct3->effortRibbon << 19)
- | (substruct3->giftRibbon1 << 20)
- | (substruct3->giftRibbon2 << 21)
- | (substruct3->giftRibbon3 << 22)
- | (substruct3->giftRibbon4 << 23)
- | (substruct3->giftRibbon5 << 24)
- | (substruct3->giftRibbon6 << 25)
- | (substruct3->giftRibbon7 << 26);
- }
- break;
- default:
- break;
- }
-
- if (field > MON_DATA_10)
- EncryptBoxMon(boxMon);
-
- return retVal;
-}
-
-#define SET8(lhs) (lhs) = *data
-#define SET16(lhs) (lhs) = data[0] + (data[1] << 8)
-#define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
-
-void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg)
-{
- const u8* data = dataArg;
- switch (field)
- {
- case MON_DATA_STATUS:
- SET32(mon->status);
- break;
- case MON_DATA_LEVEL:
- SET8(mon->level);
- break;
- case MON_DATA_HP:
- SET16(mon->hp);
- break;
- case MON_DATA_MAX_HP:
- SET16(mon->maxHP);
- break;
- case MON_DATA_ATK:
- SET16(mon->attack);
- break;
- case MON_DATA_DEF:
- SET16(mon->defense);
- break;
- case MON_DATA_SPEED:
- SET16(mon->speed);
- break;
- case MON_DATA_SPATK:
- SET16(mon->spAttack);
- break;
- case MON_DATA_SPDEF:
- SET16(mon->spDefense);
- break;
- case MON_DATA_MAIL:
- SET8(mon->mail);
- break;
- case MON_DATA_SPECIES2:
- break;
- default:
- SetBoxMonData(&mon->box, field, data);
- break;
- }
-}
-
-void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
-{
- const u8* data = dataArg;
-
- struct PokemonSubstruct0 *substruct0 = NULL;
- struct PokemonSubstruct1 *substruct1 = NULL;
- struct PokemonSubstruct2 *substruct2 = NULL;
- struct PokemonSubstruct3 *substruct3 = NULL;
-
- if (field > MON_DATA_10)
- {
- substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
- substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
- substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2);
- substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3);
-
- DecryptBoxMon(boxMon);
-
- if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum)
- {
- boxMon->isBadEgg = 1;
- boxMon->isEgg = 1;
- substruct3->isEgg = 1;
- EncryptBoxMon(boxMon);
- return;
- }
- }
-
- switch (field)
- {
- case MON_DATA_PERSONALITY:
- SET32(boxMon->personality);
- break;
- case MON_DATA_OT_ID:
- SET32(boxMon->otId);
- break;
- case MON_DATA_NICKNAME:
- {
- s32 i;
- for (i = 0; i < POKEMON_NAME_LENGTH; i++)
- boxMon->nickname[i] = data[i];
- break;
- }
- case MON_DATA_LANGUAGE:
- SET8(boxMon->language);
- break;
- case MON_DATA_SANITY_BIT1:
- SET8(boxMon->isBadEgg);
- break;
- case MON_DATA_SANITY_BIT2:
- SET8(boxMon->hasSpecies);
- break;
- case MON_DATA_SANITY_BIT3:
- SET8(boxMon->isEgg);
- break;
- case MON_DATA_OT_NAME:
- {
- s32 i;
- for (i = 0; i < OT_NAME_LENGTH; i++)
- boxMon->otName[i] = data[i];
- break;
- }
- case MON_DATA_MARKINGS:
- SET8(boxMon->markings);
- break;
- case MON_DATA_CHECKSUM:
- SET16(boxMon->checksum);
- break;
- case MON_DATA_10:
- SET16(boxMon->unknown);
- break;
- case MON_DATA_SPECIES:
- {
- SET16(substruct0->species);
- if (substruct0->species)
- boxMon->hasSpecies = 1;
- else
- boxMon->hasSpecies = 0;
- break;
- }
- case MON_DATA_HELD_ITEM:
- SET16(substruct0->heldItem);
- break;
- case MON_DATA_EXP:
- SET32(substruct0->experience);
- break;
- case MON_DATA_PP_BONUSES:
- SET8(substruct0->ppBonuses);
- break;
- case MON_DATA_FRIENDSHIP:
- SET8(substruct0->friendship);
- break;
- case MON_DATA_MOVE1:
- case MON_DATA_MOVE2:
- case MON_DATA_MOVE3:
- case MON_DATA_MOVE4:
- SET16(substruct1->moves[field - MON_DATA_MOVE1]);
- break;
- case MON_DATA_PP1:
- case MON_DATA_PP2:
- case MON_DATA_PP3:
- case MON_DATA_PP4:
- SET8(substruct1->pp[field - MON_DATA_PP1]);
- break;
- case MON_DATA_HP_EV:
- SET8(substruct2->hpEV);
- break;
- case MON_DATA_ATK_EV:
- SET8(substruct2->attackEV);
- break;
- case MON_DATA_DEF_EV:
- SET8(substruct2->defenseEV);
- break;
- case MON_DATA_SPEED_EV:
- SET8(substruct2->speedEV);
- break;
- case MON_DATA_SPATK_EV:
- SET8(substruct2->spAttackEV);
- break;
- case MON_DATA_SPDEF_EV:
- SET8(substruct2->spDefenseEV);
- break;
- case MON_DATA_COOL:
- SET8(substruct2->cool);
- break;
- case MON_DATA_BEAUTY:
- SET8(substruct2->beauty);
- break;
- case MON_DATA_CUTE:
- SET8(substruct2->cute);
- break;
- case MON_DATA_SMART:
- SET8(substruct2->smart);
- break;
- case MON_DATA_TOUGH:
- SET8(substruct2->tough);
- break;
- case MON_DATA_SHEEN:
- SET8(substruct2->sheen);
- break;
- case MON_DATA_POKERUS:
- SET8(substruct3->pokerus);
- break;
- case MON_DATA_MET_LOCATION:
- SET8(substruct3->metLocation);
- break;
- case MON_DATA_MET_LEVEL:
- {
- u8 metLevel = *data;
- substruct3->metLevel = metLevel;
- break;
- }
- case MON_DATA_MET_GAME:
- SET8(substruct3->metGame);
- break;
- case MON_DATA_POKEBALL:
- {
- u8 pokeball = *data;
- substruct3->pokeball = pokeball;
- break;
- }
- case MON_DATA_OT_GENDER:
- SET8(substruct3->otGender);
- break;
- case MON_DATA_HP_IV:
- SET8(substruct3->hpIV);
- break;
- case MON_DATA_ATK_IV:
- SET8(substruct3->attackIV);
- break;
- case MON_DATA_DEF_IV:
- SET8(substruct3->defenseIV);
- break;
- case MON_DATA_SPEED_IV:
- SET8(substruct3->speedIV);
- break;
- case MON_DATA_SPATK_IV:
- SET8(substruct3->spAttackIV);
- break;
- case MON_DATA_SPDEF_IV:
- SET8(substruct3->spDefenseIV);
- break;
- case MON_DATA_IS_EGG:
- SET8(substruct3->isEgg);
- if (substruct3->isEgg)
- boxMon->isEgg = 1;
- else
- boxMon->isEgg = 0;
- break;
- case MON_DATA_ALT_ABILITY:
- SET8(substruct3->altAbility);
- break;
- case MON_DATA_COOL_RIBBON:
- SET8(substruct3->coolRibbon);
- break;
- case MON_DATA_BEAUTY_RIBBON:
- SET8(substruct3->beautyRibbon);
- break;
- case MON_DATA_CUTE_RIBBON:
- SET8(substruct3->cuteRibbon);
- break;
- case MON_DATA_SMART_RIBBON:
- SET8(substruct3->smartRibbon);
- break;
- case MON_DATA_TOUGH_RIBBON:
- SET8(substruct3->toughRibbon);
- break;
- case MON_DATA_CHAMPION_RIBBON:
- SET8(substruct3->championRibbon);
- break;
- case MON_DATA_WINNING_RIBBON:
- SET8(substruct3->winningRibbon);
- break;
- case MON_DATA_VICTORY_RIBBON:
- SET8(substruct3->victoryRibbon);
- break;
- case MON_DATA_ARTIST_RIBBON:
- SET8(substruct3->artistRibbon);
- break;
- case MON_DATA_EFFORT_RIBBON:
- SET8(substruct3->effortRibbon);
- break;
- case MON_DATA_GIFT_RIBBON_1:
- SET8(substruct3->giftRibbon1);
- break;
- case MON_DATA_GIFT_RIBBON_2:
- SET8(substruct3->giftRibbon2);
- break;
- case MON_DATA_GIFT_RIBBON_3:
- SET8(substruct3->giftRibbon3);
- break;
- case MON_DATA_GIFT_RIBBON_4:
- SET8(substruct3->giftRibbon4);
- break;
- case MON_DATA_GIFT_RIBBON_5:
- SET8(substruct3->giftRibbon5);
- break;
- case MON_DATA_GIFT_RIBBON_6:
- SET8(substruct3->giftRibbon6);
- break;
- case MON_DATA_GIFT_RIBBON_7:
- SET8(substruct3->giftRibbon7);
- break;
- case MON_DATA_FATEFUL_ENCOUNTER:
- SET8(substruct3->fatefulEncounter);
- break;
- case MON_DATA_OBEDIENCE:
- SET8(substruct3->obedient);
- break;
- case MON_DATA_IVS:
- {
- u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
- substruct3->hpIV = ivs & 0x1F;
- substruct3->attackIV = (ivs >> 5) & 0x1F;
- substruct3->defenseIV = (ivs >> 10) & 0x1F;
- substruct3->speedIV = (ivs >> 15) & 0x1F;
- substruct3->spAttackIV = (ivs >> 20) & 0x1F;
- substruct3->spDefenseIV = (ivs >> 25) & 0x1F;
- break;
- }
- default:
- break;
- }
-
- if (field > MON_DATA_10)
- {
- boxMon->checksum = CalculateBoxMonChecksum(boxMon);
- EncryptBoxMon(boxMon);
- }
-}
-
-void CopyMon(void *dest, void *src, size_t size)
-{
- memcpy(dest, src, size);
-}
-
-u8 GiveMonToPlayer(struct Pokemon *mon)
-{
- s32 i;
-
- SetMonData(mon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName);
- SetMonData(mon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender);
- SetMonData(mon, MON_DATA_OT_ID, gSaveBlock2Ptr->playerTrainerId);
-
- i = 0;
-
- while (i < 6 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
- i++;
-
- if (i >= 6)
- return SendMonToPC(mon);
-
- CopyMon(&gPlayerParty[i], mon, sizeof(*mon));
- gPlayerPartyCount = i + 1;
- return MON_GIVEN_TO_PARTY;
-}
-
-extern u16 get_unknown_box_id(void);
-extern u8 StorageGetCurrentBox(void);
-extern void set_unknown_box_id(u8);
-extern struct BoxPokemon* GetBoxedMonPtr(u8 boxNumber, u8 boxPosition);
-
-u8 SendMonToPC(struct Pokemon* mon)
-{
- s32 boxNo, boxPos;
-
- set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN));
-
- boxNo = StorageGetCurrentBox();
-
- do
- {
- for (boxPos = 0; boxPos < 30; boxPos++)
- {
- struct BoxPokemon* checkingMon = GetBoxedMonPtr(boxNo, boxPos);
- if (GetBoxMonData(checkingMon, MON_DATA_SPECIES, NULL) == SPECIES_NONE)
- {
- MonRestorePP(mon);
- CopyMon(checkingMon, &mon->box, sizeof(mon->box));
- gSpecialVar_MonBoxId = boxNo;
- gSpecialVar_MonBoxPos = boxPos;
- if (get_unknown_box_id() != boxNo)
- FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
- VarSet(VAR_STORAGE_UNKNOWN, boxNo);
- return MON_GIVEN_TO_PC;
- }
- }
-
- boxNo++;
- if (boxNo == 14)
- boxNo = 0;
- } while (boxNo != StorageGetCurrentBox());
-
- return MON_CANT_GIVE;
-}
-
-u8 CalculatePlayerPartyCount(void)
-{
- gPlayerPartyCount = 0;
-
- while (gPlayerPartyCount < 6
- && GetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
- {
- gPlayerPartyCount++;
- }
-
- return gPlayerPartyCount;
-}
-
-u8 CalculateEnemyPartyCount(void)
-{
- gEnemyPartyCount = 0;
-
- while (gEnemyPartyCount < 6
- && GetMonData(&gEnemyParty[gEnemyPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
- {
- gEnemyPartyCount++;
- }
-
- return gEnemyPartyCount;
-}
-
-u8 GetMonsStateToDoubles(void)
-{
- s32 aliveCount = 0;
- s32 i;
- CalculatePlayerPartyCount();
-
- if (gPlayerPartyCount == 1)
- return gPlayerPartyCount; // PLAYER_HAS_ONE_MON
-
- for (i = 0; i < gPlayerPartyCount; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG
- && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0
- && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE)
- aliveCount++;
- }
-
- return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
-}
-
-u8 GetMonsStateToDoubles_2(void)
-{
- s32 aliveCount = 0;
- s32 i;
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL);
- if (species != SPECIES_EGG && species != SPECIES_NONE
- && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0)
- aliveCount++;
- }
-
- if (aliveCount == 1)
- return PLAYER_HAS_ONE_MON; // may have more than one, but only one is alive
-
- return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
-}
-
-u8 GetAbilityBySpecies(u16 species, bool8 altAbility)
-{
- if (altAbility)
- gLastUsedAbility = gBaseStats[species].ability2;
- else
- gLastUsedAbility = gBaseStats[species].ability1;
-
- return gLastUsedAbility;
-}
-
-u8 GetMonAbility(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
- u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
- return GetAbilityBySpecies(species, altAbility);
-}
-
-extern const struct BattleMove gBattleMoves[];
-
-void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord)
-{
- s32 i, j;
-
- ZeroEnemyPartyMons();
- *gBattleResources->secretBase = *secretBaseRecord;
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (gBattleResources->secretBase->party.species[i])
- {
- CreateMon(&gEnemyParty[i],
- gBattleResources->secretBase->party.species[i],
- gBattleResources->secretBase->party.levels[i],
- 15,
- 1,
- gBattleResources->secretBase->party.personality[i],
- 2,
- 0);
-
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleResources->secretBase->party.heldItems[i]);
-
- for (j = 0; j < 6; j++)
- SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gBattleResources->secretBase->party.EVs[i]);
-
- for (j = 0; j < 4; j++)
- {
- SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]);
- SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp);
- }
- }
- }
-}
-
-extern const u8 gFacilityClassToPicIndex[];
-extern const u8 gFacilityClassToTrainerClass[];
-extern const u8 gSecretBaseTrainerClasses[][5];
-
-u8 GetSecretBaseTrainerPicIndex(void)
-{
- u8 trainerClass = gSecretBaseTrainerClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % 5];
- return gFacilityClassToPicIndex[trainerClass];
-}
-
-u8 GetSecretBaseTrainerNameIndex(void)
-{
- u8 trainerClass = gSecretBaseTrainerClasses[gBattleResources->secretBase->gender][gBattleResources->secretBase->trainerId[0] % 5];
- return gFacilityClassToTrainerClass[trainerClass];
-}
-
-bool8 IsPlayerPartyAndPokemonStorageFull(void)
-{
- s32 i;
-
- for (i = 0; i < 6; i++)
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
- return FALSE;
-
- return IsPokemonStorageFull();
-}
-
-extern u32 GetBoxMonDataFromAnyBox(u8 boxNo, u8 boxPos, s32 field);
-
-bool8 IsPokemonStorageFull(void)
-{
- s32 i, j;
-
- for (i = 0; i < 14; i++)
- for (j = 0; j < 30; j++)
- if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SPECIES) == SPECIES_NONE)
- return FALSE;
-
- return TRUE;
-}
-
-extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
-
-void GetSpeciesName(u8 *name, u16 species)
-{
- s32 i;
-
- for (i = 0; i <= POKEMON_NAME_LENGTH; i++)
- {
- if (species > NUM_SPECIES)
- name[i] = gSpeciesNames[0][i];
- else
- name[i] = gSpeciesNames[species][i];
-
- if (name[i] == EOS)
- break;
- }
-
- name[i] = EOS;
-}
-
-extern const u8 gUnknown_08329D22[];
-extern const u8 gUnknown_08329D26[];
-
-u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex)
-{
- u8 basePP = gBattleMoves[move].pp;
- return basePP + ((basePP * 20 * ((gUnknown_08329D22[moveIndex] & ppBonuses) >> (2 * moveIndex))) / 100);
-}
-
-void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex)
-{
- u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
- ppBonuses &= gUnknown_08329D26[moveIndex];
- SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
-}
-
-void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex)
-{
- mon->ppBonuses &= gUnknown_08329D26[moveIndex];
-}
-
-void sub_803FA70(u8 bank);
-void ClearTemporarySpeciesSpriteData(u8 bank, bool8);
-
-extern struct BattlePokemon gBattleMons[4];
-
-void CopyPlayerPartyMonToBattleData(u8 bank, u8 partyIndex)
-{
- u16* hpSwitchout;
- s32 i;
- u8 nickname[POKEMON_NAME_LENGTH * 2];
-
- gBattleMons[bank].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
- gBattleMons[bank].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL);
-
- for (i = 0; i < 4; i++)
- {
- gBattleMons[bank].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL);
- gBattleMons[bank].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL);
- }
-
- gBattleMons[bank].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL);
- gBattleMons[bank].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL);
- gBattleMons[bank].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL);
- gBattleMons[bank].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL);
- gBattleMons[bank].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL);
- gBattleMons[bank].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL);
- gBattleMons[bank].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED_IV, NULL);
- gBattleMons[bank].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL);
- gBattleMons[bank].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL);
- gBattleMons[bank].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL);
- gBattleMons[bank].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL);
- gBattleMons[bank].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL);
- gBattleMons[bank].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL);
- gBattleMons[bank].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL);
- gBattleMons[bank].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL);
- gBattleMons[bank].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL);
- gBattleMons[bank].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED, NULL);
- gBattleMons[bank].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL);
- gBattleMons[bank].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL);
- gBattleMons[bank].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL);
- gBattleMons[bank].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL);
- gBattleMons[bank].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL);
- gBattleMons[bank].type1 = gBaseStats[gBattleMons[bank].species].type1;
- gBattleMons[bank].type2 = gBaseStats[gBattleMons[bank].species].type2;
- gBattleMons[bank].ability = GetAbilityBySpecies(gBattleMons[bank].species, gBattleMons[bank].altAbility);
- GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
- StringCopy10(gBattleMons[bank].nickname, nickname);
- GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[bank].otName);
-
- hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(bank)];
- *hpSwitchout = gBattleMons[bank].hp;
-
- for (i = 0; i < 8; i++)
- gBattleMons[bank].statStages[i] = 6;
-
- gBattleMons[bank].status2 = 0;
- sub_803FA70(bank);
- ClearTemporarySpeciesSpriteData(bank, FALSE);
-}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
deleted file mode 100644
index de9e481df..000000000
--- a/src/pokemon_3.c
+++ /dev/null
@@ -1,1749 +0,0 @@
-#include "global.h"
-#include "pokemon.h"
-#include "main.h"
-#include "constants/items.h"
-#include "string_util.h"
-#include "battle_message.h"
-#include "rtc.h"
-#include "item.h"
-#include "battle.h"
-#include "constants/species.h"
-#include "link.h"
-#include "constants/hold_effects.h"
-#include "random.h"
-#include "constants/trainers.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "m4a.h"
-#include "task.h"
-#include "sprite.h"
-#include "text.h"
-#include "constants/abilities.h"
-#include "pokemon_animation.h"
-#include "pokedex.h"
-#include "pokeblock.h"
-
-extern struct BattlePokemon gBattleMons[4];
-extern struct BattleEnigmaBerry gEnigmaBerries[4];
-extern u8 gActiveBattler;
-extern u8 gBankInMenu;
-extern u8 gBattlerTarget;
-extern u8 gBattlerAttacker;
-extern u8 gStringBattler;
-extern u16 gTrainerBattleOpponent_A;
-extern u32 gBattleTypeFlags;
-extern u8 gBattleMonForms[4];
-extern u16 gBattlerPartyIndexes[4];
-extern u8 gLastUsedAbility;
-extern u16 gPartnerTrainerId;
-extern u32 gHitMarker;
-
-extern const u16 gSpeciesToHoennPokedexNum[];
-extern const u16 gSpeciesToNationalPokedexNum[];
-extern const u16 gHoennToNationalOrder[];
-extern const u16 gSpeciesIdToCryId[];
-extern const struct SpindaSpot gSpindaSpotGraphics[];
-extern const u8* const gStatNamesTable[];
-extern const u8 gSpeciesNames[][11];
-extern const u8 gUnknown_08329EC8[];
-extern const u8 gText_StatRose[];
-extern const u8 gText_PkmnsStatChanged2[];
-extern const u8 gText_PkmnGettingPumped[];
-extern const u8 gText_PkmnShroudedInMist[];
-extern const s8 gNatureStatTable[][5];
-extern const s8 gUnknown_08329ECE[][3];
-extern const u32 gBitTable[];
-extern const u32 gTMHMLearnsets[][2];
-extern const u8 gText_BattleWallyName[];
-extern const u8 gText_PkmnsXPreventsSwitching[];
-extern const struct CompressedSpritePalette gMonPaletteTable[];
-extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
-extern const u16 gHMMoves[];
-extern const u8 gMonAnimationDelayTable[];
-extern const u8 gMonFrontAnimIdsTable[];
-
-extern bool8 InBattlePyramid(void);
-extern bool8 InBattlePike(void);
-extern bool8 sub_81D5C18(void);
-extern bool8 sub_806F104(void);
-extern bool32 IsNationalPokedexEnabled(void);
-extern u8 GetTrainerEncounterMusicIdInBattlePyramind(u16 trainerOpponentId);
-extern u8 sub_81D63C8(u16 trainerOpponentId);
-extern u8 sav1_map_get_name(void);
-extern u8 GetFrontierOpponentClass(u16 trainerId);
-extern u8 pokemon_order_func(u8 bankPartyId);
-extern void GetFrontierTrainerName(u8* dest, u16 trainerId);
-extern void sub_81C488C(u8);
-
-static void sub_806E6CC(u8 taskId);
-
-bool8 HealStatusConditions(struct Pokemon *mon, u32 battlePartyId, u32 healMask, u8 battleBank)
-{
- u32 status = GetMonData(mon, MON_DATA_STATUS, 0);
-
- if (status & healMask)
- {
- status &= ~healMask;
- SetMonData(mon, MON_DATA_STATUS, (u8 *)&status);
- if (gMain.inBattle && battleBank != 4)
- gBattleMons[battleBank].status1 &= ~healMask;
- return FALSE;
- }
- else
- {
- return TRUE;
- }
-}
-
-u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
-{
- const u8 *temp;
- const u8 *itemEffect;
- u8 offset;
- int i;
- u8 j;
- u8 val;
-
- offset = 6;
-
- temp = gItemEffectTable[itemId - 13];
-
- if (!temp && itemId != ITEM_ENIGMA_BERRY)
- return 0;
-
- if (itemId == ITEM_ENIGMA_BERRY)
- {
- temp = gEnigmaBerries[gActiveBattler].itemEffect;
- }
-
- itemEffect = temp;
-
- for (i = 0; i < 6; i++)
- {
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- if (i == effectByte)
- return 0;
- break;
- case 4:
- val = itemEffect[4];
- if (val & 0x20)
- val &= 0xDF;
- j = 0;
- while (val)
- {
- if (val & 1)
- {
- switch (j)
- {
- case 2:
- if (val & 0x10)
- val &= 0xEF;
- case 0:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 1:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 3:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 7:
- if (i == effectByte)
- return 0;
- break;
- }
- }
- j++;
- val >>= 1;
- if (i == effectByte)
- effectBit >>= 1;
- }
- break;
- case 5:
- val = itemEffect[5];
- j = 0;
- while (val)
- {
- if (val & 1)
- {
- switch (j)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- if (i == effectByte && (val & effectBit))
- return offset;
- offset++;
- break;
- case 7:
- if (i == effectByte)
- return 0;
- break;
- }
- }
- j++;
- val >>= 1;
- if (i == effectByte)
- effectBit >>= 1;
- }
- break;
- }
- }
-
- return offset;
-}
-
-void sub_806CF24(s32 stat)
-{
- gBattlerTarget = gBankInMenu;
- StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_08329EC8[stat]]);
- StringCopy(gBattleTextBuff2, gText_StatRose);
- BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2);
-}
-
-u8 *sub_806CF78(u16 itemId)
-{
- int i;
- const u8 *itemEffect;
-
- if (itemId == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- itemEffect = gEnigmaBerries[gBankInMenu].itemEffect;
- else
- itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
- }
- else
- {
- itemEffect = gItemEffectTable[itemId - 13];
- }
-
- gStringBattler = gBankInMenu;
-
- for (i = 0; i < 3; i++)
- {
- if (itemEffect[i] & 0xF)
- sub_806CF24(i * 2);
- if (itemEffect[i] & 0xF0)
- {
- if (i)
- {
- sub_806CF24(i * 2 + 1);
- }
- else
- {
- gBattlerAttacker = gBankInMenu;
- BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnGettingPumped);
- }
- }
- }
-
- if (itemEffect[3] & 0x80)
- {
- gBattlerAttacker = gBankInMenu;
- BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnShroudedInMist);
- }
-
- return gDisplayedStringBattle;
-}
-
-u8 GetNature(struct Pokemon *mon)
-{
- return GetMonData(mon, MON_DATA_PERSONALITY, 0) % 25;
-}
-
-u8 GetNatureFromPersonality(u32 personality)
-{
- return personality % 25;
-}
-
-u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
-{
- int i;
- u16 targetSpecies = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- u8 level;
- u16 friendship;
- u8 beauty = GetMonData(mon, MON_DATA_BEAUTY, 0);
- u16 upperPersonality = personality >> 16;
- u8 holdEffect;
-
- if (heldItem == ITEM_ENIGMA_BERRY)
- holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(heldItem);
-
- if (holdEffect == 38 && type != 3)
- return 0;
-
- switch (type)
- {
- case 0:
- level = GetMonData(mon, MON_DATA_LEVEL, 0);
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
-
- for (i = 0; i < 5; i++)
- {
- switch (gEvolutionTable[species][i].method)
- {
- case EVO_FRIENDSHIP:
- if (friendship >= 220)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_FRIENDSHIP_DAY:
- RtcCalcLocalTime();
- if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_FRIENDSHIP_NIGHT:
- RtcCalcLocalTime();
- if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL:
- if (gEvolutionTable[species][i].param <= level)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_ATK_GT_DEF:
- if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) > GetMonData(mon, MON_DATA_DEF, 0))
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_ATK_EQ_DEF:
- if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) == GetMonData(mon, MON_DATA_DEF, 0))
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_ATK_LT_DEF:
- if (gEvolutionTable[species][i].param <= level)
- if (GetMonData(mon, MON_DATA_ATK, 0) < GetMonData(mon, MON_DATA_DEF, 0))
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_SILCOON:
- if (gEvolutionTable[species][i].param <= level && (upperPersonality % 10) <= 4)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_CASCOON:
- if (gEvolutionTable[species][i].param <= level && (upperPersonality % 10) > 4)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_LEVEL_NINJASK:
- if (gEvolutionTable[species][i].param <= level)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_BEAUTY:
- if (gEvolutionTable[species][i].param <= beauty)
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- }
- }
- break;
- case 1:
- for (i = 0; i < 5; i++)
- {
- switch (gEvolutionTable[species][i].method)
- {
- case EVO_TRADE:
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- case EVO_TRADE_ITEM:
- if (gEvolutionTable[species][i].param == heldItem)
- {
- heldItem = 0;
- SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&heldItem);
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- }
- break;
- }
- }
- break;
- case 2:
- case 3:
- for (i = 0; i < 5; i++)
- {
- if (gEvolutionTable[species][i].method == EVO_ITEM
- && gEvolutionTable[species][i].param == evolutionItem)
- {
- targetSpecies = gEvolutionTable[species][i].targetSpecies;
- break;
- }
- }
- break;
- }
-
- return targetSpecies;
-}
-
-u16 HoennPokedexNumToSpecies(u16 hoennNum)
-{
- u16 species;
-
- if (!hoennNum)
- return 0;
-
- species = 0;
-
- while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum)
- species++;
-
- if (species == 411)
- return 0;
-
- return species + 1;
-}
-
-u16 NationalPokedexNumToSpecies(u16 nationalNum)
-{
- u16 species;
-
- if (!nationalNum)
- return 0;
-
- species = 0;
-
- while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum)
- species++;
-
- if (species == 411)
- return 0;
-
- return species + 1;
-}
-
-u16 NationalToHoennOrder(u16 nationalNum)
-{
- u16 hoennNum;
-
- if (!nationalNum)
- return 0;
-
- hoennNum = 0;
-
- while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum)
- hoennNum++;
-
- if (hoennNum == 411)
- return 0;
-
- return hoennNum + 1;
-}
-
-u16 SpeciesToNationalPokedexNum(u16 species)
-{
- if (!species)
- return 0;
-
- return gSpeciesToNationalPokedexNum[species - 1];
-}
-
-u16 SpeciesToHoennPokedexNum(u16 species)
-{
- if (!species)
- return 0;
-
- return gSpeciesToHoennPokedexNum[species - 1];
-}
-
-u16 HoennToNationalOrder(u16 hoennNum)
-{
- if (!hoennNum)
- return 0;
-
- return gHoennToNationalOrder[hoennNum - 1];
-}
-
-u16 SpeciesToCryId(u16 species)
-{
- if (species <= 250)
- return species;
-
- if (species < 276)
- return 200;
-
- return gSpeciesIdToCryId[species - 276];
-}
-
-void sub_806D544(u16 species, u32 personality, u8 *dest)
-{
- if (species == SPECIES_SPINDA
- && dest != gMonSpritesGfxPtr->sprites[0]
- && dest != gMonSpritesGfxPtr->sprites[2])
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = gSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
-}
-
-void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4)
-{
- if (species == SPECIES_SPINDA && a4)
- {
- int i;
- for (i = 0; i < 4; i++)
- {
- int j;
- u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
- u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
-
- for (j = 0; j < 16; j++)
- {
- int k;
- s32 row = gSpindaSpotGraphics[i].image[j];
-
- for (k = x; k < x + 16; k++)
- {
- u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
-
- if (row & 1)
- {
- if (k & 1)
- {
- if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
- *val += 0x40;
- }
- else
- {
- if ((u8)((*val & 0xF) - 0x01) <= 0x02)
- *val += 0x04;
- }
- }
-
- row >>= 1;
- }
-
- y++;
- }
-
- personality >>= 8;
- }
- }
-}
-
-void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
-{
- u8 language;
- GetMonData(mon, MON_DATA_NICKNAME, gStringVar1);
- language = GetMonData(mon, MON_DATA_LANGUAGE, &language);
- if (language == GAME_LANGUAGE && !StringCompare(gSpeciesNames[oldSpecies], gStringVar1))
- SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
-}
-
-bool8 sub_806D7EC(void)
-{
- bool8 retVal = FALSE;
- switch (gLinkPlayers[GetMultiplayerId()].lp_field_18)
- {
- case 0:
- case 3:
- retVal = FALSE;
- break;
- case 1:
- case 2:
- retVal = TRUE;
- break;
- }
- return retVal;
-}
-
-bool16 sub_806D82C(u8 id)
-{
- bool16 retVal = FALSE;
- switch (gLinkPlayers[id].lp_field_18)
- {
- case 0:
- case 3:
- retVal = FALSE;
- break;
- case 1:
- case 2:
- retVal = TRUE;
- break;
- }
- return retVal;
-}
-
-s32 GetBattlerMultiplayerId(u16 a1)
-{
- s32 id;
- for (id = 0; id < MAX_LINK_PLAYERS; id++)
- if (gLinkPlayers[id].lp_field_18 == a1)
- break;
- return id;
-}
-
-u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
-{
- if (InBattlePyramid())
- return GetTrainerEncounterMusicIdInBattlePyramind(trainerOpponentId);
- if (sub_81D5C18())
- return sub_81D63C8(trainerOpponentId);
- return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId);
-}
-
-u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex)
-{
- if (statIndex < 1 || statIndex > 5)
- {
- // should just be "return n", but it wouldn't match without this
- u16 retVal = n;
- retVal++;
- retVal--;
- return retVal;
- }
-
- switch (gNatureStatTable[nature][statIndex - 1])
- {
- case 1:
- return (u16)(n * 110) / 100;
- case -1:
- return (u16)(n * 90) / 100;
- }
-
- return n;
-}
-
-void AdjustFriendship(struct Pokemon *mon, u8 event)
-{
- u16 species, heldItem;
- u8 holdEffect;
-
- if (sub_806F104())
- return;
-
- species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
-
- if (heldItem == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- holdEffect = gEnigmaBerries[0].holdEffect;
- else
- holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(heldItem);
- }
-
- if (species && species != SPECIES_EGG)
- {
- u8 friendshipLevel = 0;
- s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
- if (friendship > 99)
- friendshipLevel++;
- if (friendship > 199)
- friendshipLevel++;
- if ((event != 5 || !(Random() & 1))
- && (event != 3
- || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR
- || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER
- || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION))))
- {
- s8 mod = gUnknown_08329ECE[event][friendshipLevel];
- if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
- mod = (150 * mod) / 100;
- friendship += mod;
- if (mod > 0)
- {
- if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL)
- friendship++;
- if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name())
- friendship++;
- }
- if (friendship < 0)
- friendship = 0;
- if (friendship > 255)
- friendship = 255;
- SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
- }
- }
-}
-
-void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
-{
- u8 evs[NUM_STATS];
- u16 evIncrease = 0;
- u16 totalEVs = 0;
- u16 heldItem;
- u8 holdEffect;
- int i;
-
- for (i = 0; i < NUM_STATS; i++)
- {
- evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0);
- totalEVs += evs[i];
- }
-
- for (i = 0; i < NUM_STATS; i++)
- {
- u8 hasHadPokerus;
- int multiplier;
-
- if (totalEVs >= MAX_TOTAL_EVS)
- break;
-
- hasHadPokerus = CheckPartyHasHadPokerus(mon, 0);
-
- if (hasHadPokerus)
- multiplier = 2;
- else
- multiplier = 1;
-
- switch (i)
- {
- case 0:
- evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
- break;
- case 1:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
- break;
- case 2:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
- break;
- case 3:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
- break;
- case 4:
- evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
- break;
- case 5:
- evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
- break;
- }
-
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
-
- if (heldItem == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- holdEffect = gEnigmaBerries[0].holdEffect;
- else
- holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(heldItem);
- }
-
- if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
- evIncrease *= 2;
-
- if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS)
- evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease);
-
- if (evs[i] + (s16)evIncrease > 255)
- {
- int val1 = (s16)evIncrease + 255;
- int val2 = evs[i] + evIncrease;
- evIncrease = val1 - val2;
- }
-
- evs[i] += evIncrease;
- totalEVs += evIncrease;
- SetMonData(mon, MON_DATA_HP_EV + i, &evs[i]);
- }
-}
-
-u16 GetMonEVCount(struct Pokemon *mon)
-{
- int i;
- u16 count = 0;
-
- for (i = 0; i < NUM_STATS; i++)
- count += GetMonData(mon, MON_DATA_HP_EV + i, 0);
-
- return count;
-}
-
-void RandomlyGivePartyPokerus(struct Pokemon *party)
-{
- u16 rnd = Random();
- if (rnd == 0x4000 || rnd == 0x8000 || rnd == 0xC000)
- {
- struct Pokemon *mon;
-
- do
- {
- do
- {
- rnd = Random() % PARTY_SIZE;
- mon = &party[rnd];
- }
- while (!GetMonData(mon, MON_DATA_SPECIES, 0));
- }
- while (GetMonData(mon, MON_DATA_IS_EGG, 0));
-
- if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd])))
- {
- u8 rnd2;
-
- do
- {
- rnd2 = Random();
- }
- while ((rnd2 & 0x7) == 0);
-
- if (rnd2 & 0xF0)
- rnd2 &= 0x7;
-
- rnd2 |= (rnd2 << 4);
- rnd2 &= 0xF3;
- rnd2++;
-
- SetMonData(&party[rnd], MON_DATA_POKERUS, &rnd2);
- }
- }
-}
-
-u8 CheckPartyPokerus(struct Pokemon *party, u8 selection)
-{
- u8 retVal;
-
- int partyIndex = 0;
- unsigned curBit = 1;
- retVal = 0;
-
- if (selection)
- {
- do
- {
- if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF))
- retVal |= curBit;
- partyIndex++;
- curBit <<= 1;
- selection >>= 1;
- }
- while (selection);
- }
- else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF)
- {
- retVal = 1;
- }
-
- return retVal;
-}
-
-u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection)
-{
- u8 retVal;
-
- int partyIndex = 0;
- unsigned curBit = 1;
- retVal = 0;
-
- if (selection)
- {
- do
- {
- if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0))
- retVal |= curBit;
- partyIndex++;
- curBit <<= 1;
- selection >>= 1;
- }
- while (selection);
- }
- else if (GetMonData(&party[0], MON_DATA_POKERUS, 0))
- {
- retVal = 1;
- }
-
- return retVal;
-}
-
-void UpdatePartyPokerusTime(u16 days)
-{
- int i;
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, 0))
- {
- u8 pokerus = GetMonData(&gPlayerParty[i], MON_DATA_POKERUS, 0);
- if (pokerus & 0xF)
- {
- if ((pokerus & 0xF) < days || days > 4)
- pokerus &= 0xF0;
- else
- pokerus -= days;
-
- if (pokerus == 0)
- pokerus = 0x10;
-
- SetMonData(&gPlayerParty[i], MON_DATA_POKERUS, &pokerus);
- }
- }
- }
-}
-
-void PartySpreadPokerus(struct Pokemon *party)
-{
- if ((Random() % 3) == 0)
- {
- int i;
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&party[i], MON_DATA_SPECIES, 0))
- {
- u8 pokerus = GetMonData(&party[i], MON_DATA_POKERUS, 0);
- u8 curPokerus = pokerus;
- if (pokerus)
- {
- if (pokerus & 0xF)
- {
- // spread to adjacent party members
- if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0))
- SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus);
- if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0))
- {
- SetMonData(&party[i + 1], MON_DATA_POKERUS, &curPokerus);
- i++;
- }
- }
- }
- }
- }
- }
-}
-
-bool8 TryIncrementMonLevel(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1;
- u32 expPoints = GetMonData(mon, MON_DATA_EXP, 0);
- if (expPoints > gExperienceTables[gBaseStats[species].growthRate][MAX_MON_LEVEL])
- {
- expPoints = gExperienceTables[gBaseStats[species].growthRate][MAX_MON_LEVEL];
- SetMonData(mon, MON_DATA_EXP, &expPoints);
- }
- if (nextLevel > MAX_MON_LEVEL || expPoints < gExperienceTables[gBaseStats[species].growthRate][nextLevel])
- {
- return FALSE;
- }
- else
- {
- SetMonData(mon, MON_DATA_LEVEL, &nextLevel);
- return TRUE;
- }
-}
-
-u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- if (species == SPECIES_EGG)
- {
- return 0;
- }
- else if (tm < 32)
- {
- u32 mask = 1 << tm;
- return gTMHMLearnsets[species][0] & mask;
- }
- else
- {
- u32 mask = 1 << (tm - 32);
- return gTMHMLearnsets[species][1] & mask;
- }
-}
-
-u32 CanSpeciesLearnTMHM(u16 species, u8 tm)
-{
- if (species == SPECIES_EGG)
- {
- return 0;
- }
- else if (tm < 32)
- {
- u32 mask = 1 << tm;
- return gTMHMLearnsets[species][0] & mask;
- }
- else
- {
- u32 mask = 1 << (tm - 32);
- return gTMHMLearnsets[species][1] & mask;
- }
-}
-
-u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
-{
- u16 learnedMoves[4];
- u8 numMoves = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
- u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
- int i, j, k;
-
- for (i = 0; i < 4; i++)
- learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
-
- for (i = 0; i < 20; i++)
- {
- u16 moveLevel;
-
- if (gLevelUpLearnsets[species][i] == 0xFFFF)
- break;
-
- moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
-
- if (moveLevel <= (level << 9))
- {
- for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
- ;
-
- if (j == 4)
- {
- for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
- ;
-
- if (k == numMoves)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
- }
- }
- }
-
- return numMoves;
-}
-
-u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
-{
- u8 numMoves = 0;
- int i;
-
- for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
-
- return numMoves;
-}
-
-u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
-{
- u16 learnedMoves[4];
- u16 moves[20];
- u8 numMoves = 0;
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
- int i, j, k;
-
- if (species == SPECIES_EGG)
- return 0;
-
- for (i = 0; i < 4; i++)
- learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0);
-
- for (i = 0; i < 20; i++)
- {
- u16 moveLevel;
-
- if (gLevelUpLearnsets[species][i] == 0xFFFF)
- break;
-
- moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
-
- if (moveLevel <= (level << 9))
- {
- for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
- ;
-
- if (j == 4)
- {
- for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
- ;
-
- if (k == numMoves)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
- }
- }
- }
-
- return numMoves;
-}
-
-u16 SpeciesToPokedexNum(u16 species)
-{
- if (IsNationalPokedexEnabled())
- {
- return SpeciesToNationalPokedexNum(species);
- }
- else
- {
- species = SpeciesToHoennPokedexNum(species);
- if (species <= 202)
- return species;
- return 0xFFFF;
- }
-}
-
-bool32 sub_806E3F8(u16 species)
-{
- if (SpeciesToHoennPokedexNum(species) > 202)
- return FALSE;
- else
- return TRUE;
-}
-
-void ClearBattleMonForms(void)
-{
- int i;
- for (i = 0; i < 4; i++)
- gBattleMonForms[i] = 0;
-}
-
-u16 GetBattleBGM(void)
-{
- if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
- return MUS_BATTLE34;
- if (gBattleTypeFlags & BATTLE_TYPE_REGI)
- return MUS_BATTLE36;
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
- return MUS_BATTLE20;
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- {
- u8 trainerClass;
-
- if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
- trainerClass = GetFrontierOpponentClass(gTrainerBattleOpponent_A);
- else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
- trainerClass = TRAINER_CLASS_EXPERT;
- else
- trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
-
- switch (trainerClass)
- {
- case TRAINER_CLASS_AQUA_LEADER:
- case TRAINER_CLASS_MAGMA_LEADER:
- return MUS_BATTLE30;
- case TRAINER_CLASS_TEAM_AQUA:
- case TRAINER_CLASS_TEAM_MAGMA:
- case TRAINER_CLASS_AQUA_ADMIN:
- case TRAINER_CLASS_MAGMA_ADMIN:
- return MUS_BATTLE31;
- case TRAINER_CLASS_LEADER:
- return MUS_BATTLE32;
- case TRAINER_CLASS_CHAMPION:
- return MUS_BATTLE33;
- case TRAINER_CLASS_PKMN_TRAINER_3:
- if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
- return MUS_BATTLE35;
- if (!StringCompare(gTrainers[gTrainerBattleOpponent_A].trainerName, gText_BattleWallyName))
- return MUS_BATTLE20;
- return MUS_BATTLE35;
- case TRAINER_CLASS_ELITE_FOUR:
- return MUS_BATTLE38;
- case TRAINER_CLASS_SALON_MAIDEN:
- case TRAINER_CLASS_DOME_ACE:
- case TRAINER_CLASS_PALACE_MAVEN:
- case TRAINER_CLASS_ARENA_TYCOON:
- case TRAINER_CLASS_FACTORY_HEAD:
- case TRAINER_CLASS_PIKE_QUEEN:
- case TRAINER_CLASS_PYRAMID_KING:
- return MUS_VS_FRONT;
- default:
- return MUS_BATTLE20;
- }
- }
- return MUS_BATTLE27;
-}
-
-void PlayBattleBGM(void)
-{
- ResetMapMusic();
- m4aMPlayAllStop();
- PlayBGM(GetBattleBGM());
-}
-
-void PlayMapChosenOrBattleBGM(u16 songId)
-{
- ResetMapMusic();
- m4aMPlayAllStop();
- if (songId)
- PlayNewMapMusic(songId);
- else
- PlayNewMapMusic(GetBattleBGM());
-}
-
-void sub_806E694(u16 songId)
-{
- u8 taskId;
-
- ResetMapMusic();
- m4aMPlayAllStop();
-
- taskId = CreateTask(sub_806E6CC, 0);
- gTasks[taskId].data[0] = songId;
-}
-
-static void sub_806E6CC(u8 taskId)
-{
- if (gTasks[taskId].data[0])
- PlayNewMapMusic(gTasks[taskId].data[0]);
- else
- PlayNewMapMusic(GetBattleBGM());
- DestroyTask(taskId);
-}
-
-const u8 *GetMonFrontSpritePal(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality);
-}
-
-// Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-// Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
-const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
-{
- u32 shinyValue;
-
- if (species > SPECIES_EGG)
- return gMonPaletteTable[0].data;
-
- shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
- if (shinyValue < 8)
- return gMonShinyPaletteTable[species].data;
- else
- return gMonPaletteTable[species].data;
-}
-
-const struct CompressedSpritePalette *sub_806E794(struct Pokemon *mon)
-{
- u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
-}
-
-const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality)
-{
- u32 shinyValue;
-
- shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
- if (shinyValue < 8)
- return &gMonShinyPaletteTable[species];
- else
- return &gMonPaletteTable[species];
-}
-
-bool32 IsHMMove2(u16 move)
-{
- int i = 0;
- while (gHMMoves[i] != 0xFFFF)
- {
- if (gHMMoves[i++] == move)
- return TRUE;
- }
- return FALSE;
-}
-
-bool8 IsPokeSpriteNotFlipped(u16 species)
-{
- return gBaseStats[species].noFlip;
-}
-
-s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor)
-{
- u8 nature = GetNature(mon);
- return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
-}
-
-s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor)
-{
- u8 nature = GetNatureFromPersonality(personality);
- return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor];
-}
-
-bool8 IsTradedMon(struct Pokemon *mon)
-{
- u8 otName[OT_NAME_LENGTH + 1];
- u32 otId;
- GetMonData(mon, MON_DATA_OT_NAME, otName);
- otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- return IsOtherTrainer(otId, otName);
-}
-
-bool8 IsOtherTrainer(u32 otId, u8 *otName)
-{
- if (otId ==
- (gSaveBlock2Ptr->playerTrainerId[0]
- | (gSaveBlock2Ptr->playerTrainerId[1] << 8)
- | (gSaveBlock2Ptr->playerTrainerId[2] << 16)
- | (gSaveBlock2Ptr->playerTrainerId[3] << 24)))
- {
- int i;
-
- for (i = 0; otName[i] != EOS; i++)
- if (otName[i] != gSaveBlock2Ptr->playerName[i])
- return TRUE;
- return FALSE;
- }
-
- return TRUE;
-}
-
-void MonRestorePP(struct Pokemon *mon)
-{
- BoxMonRestorePP(&mon->box);
-}
-
-void BoxMonRestorePP(struct BoxPokemon *boxMon)
-{
- int i;
-
- for (i = 0; i < 4; i++)
- {
- if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0))
- {
- u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0);
- u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0);
- u8 pp = CalculatePPWithBonus(move, bonus, i);
- SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp);
- }
- }
-}
-
-void sub_806E994(void)
-{
- gLastUsedAbility = gBattleStruct->field_B0;
-
- gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
- gBattleTextBuff1[1] = B_BUFF_MON_NICK_WITH_PREFIX;
- gBattleTextBuff1[2] = gBattleStruct->field_49;
- gBattleTextBuff1[4] = B_BUFF_EOS;
-
- if (!GetBattlerSide(gBattleStruct->field_49))
- gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->field_49]);
- else
- gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->field_49];
-
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBankInMenu, pokemon_order_func(gBattlerPartyIndexes[gBankInMenu]))
-
- BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4);
-}
-
-struct PokeItem
-{
- u16 species;
- u16 item;
-};
-
-extern const struct PokeItem gAlteringCaveWildMonHeldItems[9];
-
-static s32 GetWildMonTableIdInAlteringCave(u16 species)
-{
- s32 i;
- for (i = 0; i < (s32) ARRAY_COUNT(gAlteringCaveWildMonHeldItems); i++)
- if (gAlteringCaveWildMonHeldItems[i].species == species)
- return i;
- return 0;
-}
-
-void SetWildMonHeldItem(void)
-{
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_PIKE)))
- {
- u16 rnd = Random() % 100;
- u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0);
- u16 var1 = 45;
- u16 var2 = 95;
- if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3, 0)
- && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES)
- {
- var1 = 20;
- var2 = 80;
- }
- if (gMapHeader.mapDataId == 0x1A4)
- {
- s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species);
- if (alteringCaveId != 0)
- {
- if (rnd < var2)
- return;
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gAlteringCaveWildMonHeldItems[alteringCaveId].item);
- }
- else
- {
- if (rnd < var1)
- return;
- if (rnd < var2)
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
- else
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2);
- }
- }
- else
- {
- if (gBaseStats[species].item1 == gBaseStats[species].item2 && gBaseStats[species].item1 != 0)
- {
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
- }
- else
- {
- if (rnd < var1)
- return;
- if (rnd < var2)
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1);
- else
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2);
- }
- }
- }
-}
-
-bool8 IsMonShiny(struct Pokemon *mon)
-{
- u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
- u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
- return IsShinyOtIdPersonality(otId, personality);
-}
-
-bool8 IsShinyOtIdPersonality(u32 otId, u32 personality)
-{
- bool8 retVal = FALSE;
- u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
- if (shinyValue < 8)
- retVal = TRUE;
- return retVal;
-}
-
-const u8 *GetTrainerPartnerName(void)
-{
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
- {
- if (gPartnerTrainerId == STEVEN_PARTNER_ID)
- {
- return gTrainers[TRAINER_STEVEN].trainerName;
- }
- else
- {
- GetFrontierTrainerName(gStringVar1, gPartnerTrainerId);
- return gStringVar1;
- }
- }
- else
- {
- u8 id = GetMultiplayerId();
- return gLinkPlayers[GetBattlerMultiplayerId(gLinkPlayers[id].lp_field_18 ^ 2)].name;
- }
-}
-
-#define READ_PTR_FROM_TASK(taskId, dataId) \
- (void*)( \
- ((u16)(gTasks[taskId].data[dataId]) | \
- ((u16)(gTasks[taskId].data[dataId + 1]) << 0x10)))
-
-#define STORE_PTR_IN_TASK(ptr, taskId, dataId) \
-{ \
- gTasks[taskId].data[dataId] = (u32)(ptr); \
- gTasks[taskId].data[dataId + 1] = (u32)(ptr) >> 0x10; \
-}
-
-static void Task_AnimateAfterDelay(u8 taskId)
-{
- if (--gTasks[taskId].data[3] == 0)
- {
- LaunchAnimationTaskForFrontSprite(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]);
- DestroyTask(taskId);
- }
-}
-
-static void Task_PokemonSummaryAnimateAfterDelay(u8 taskId)
-{
- if (--gTasks[taskId].data[3] == 0)
- {
- StartMonSummaryAnimation(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]);
- sub_81C488C(0xFF);
- DestroyTask(taskId);
- }
-}
-
-void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3)
-{
- if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
- DoMonFrontSpriteAnimation(sprite, species, noCry, arg3 | 0x80);
- else
- DoMonFrontSpriteAnimation(sprite, species, noCry, arg3);
-}
-
-extern void SpriteCallbackDummy_2(struct Sprite*);
-
-void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3)
-{
- s8 pan;
- switch (arg3 & 0x7F)
- {
- case 0:
- pan = -25;
- break;
- case 1:
- pan = 25;
- break;
- default:
- pan = 0;
- break;
- }
- if (arg3 & 0x80)
- {
- if (!noCry)
- PlayCry1(species, pan);
- sprite->callback = SpriteCallbackDummy;
- }
- else
- {
- if (!noCry)
- {
- PlayCry1(species, pan);
- if (HasTwoFramesAnimation(species))
- StartSpriteAnim(sprite, 1);
- }
- if (gMonAnimationDelayTable[species - 1] != 0)
- {
- u8 taskId = CreateTask(Task_AnimateAfterDelay, 0);
- STORE_PTR_IN_TASK(sprite, taskId, 0);
- gTasks[taskId].data[2] = gMonFrontAnimIdsTable[species - 1];
- gTasks[taskId].data[3] = gMonAnimationDelayTable[species - 1];
- }
- else
- {
- LaunchAnimationTaskForFrontSprite(sprite, gMonFrontAnimIdsTable[species - 1]);
- }
- sprite->callback = SpriteCallbackDummy_2;
- }
-}
-
-void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneFrame)
-{
- if (!oneFrame && HasTwoFramesAnimation(species))
- StartSpriteAnim(sprite, 1);
- if (gMonAnimationDelayTable[species - 1] != 0)
- {
- u8 taskId = CreateTask(Task_PokemonSummaryAnimateAfterDelay, 0);
- STORE_PTR_IN_TASK(sprite, taskId, 0);
- gTasks[taskId].data[2] = gMonFrontAnimIdsTable[species - 1];
- gTasks[taskId].data[3] = gMonAnimationDelayTable[species - 1];
- sub_81C488C(taskId);
- SetSpriteCB_MonAnimDummy(sprite);
- }
- else
- {
- StartMonSummaryAnimation(sprite, gMonFrontAnimIdsTable[species - 1]);
- }
-}
-
-void sub_806EE98(void)
-{
- u8 delayTaskId = FindTaskIdByFunc(Task_PokemonSummaryAnimateAfterDelay);
- if (delayTaskId != 0xFF)
- DestroyTask(delayTaskId);
-}
-
-void BattleAnimateBackSprite(struct Sprite* sprite, u16 species)
-{
- if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
- {
- sprite->callback = SpriteCallbackDummy;
- }
- else
- {
- LaunchAnimationTaskForBackSprite(sprite, GetSpeciesBackAnimSet(species));
- sprite->callback = SpriteCallbackDummy_2;
- }
-}
-
-u8 sub_806EF08(u8 arg0)
-{
- s32 i;
- s32 var = 0;
- u8 multiplayerId = GetMultiplayerId();
- switch (gLinkPlayers[multiplayerId].lp_field_18)
- {
- case 0:
- case 2:
- var = (arg0 != 0) ? 1 : 3;
- break;
- case 1:
- case 3:
- var = (arg0 != 0) ? 2 : 0;
- break;
- }
- for (i = 0; i < 4; i++)
- {
- if (gLinkPlayers[i].lp_field_18 == (s16)(var))
- break;
- }
- return i;
-}
-
-u8 sub_806EF84(u8 arg0, u8 arg1)
-{
- s32 i;
- s32 var = 0;
- switch (gLinkPlayers[arg1].lp_field_18)
- {
- case 0:
- case 2:
- var = (arg0 != 0) ? 1 : 3;
- break;
- case 1:
- case 3:
- var = (arg0 != 0) ? 2 : 0;
- break;
- }
- for (i = 0; i < 4; i++)
- {
- if (gLinkPlayers[i].lp_field_18 == (s16)(var))
- break;
- }
- return i;
-}
-
-extern const u8 gFacilityClassToPicIndex[];
-
-u16 sub_806EFF0(u16 arg0)
-{
- return gFacilityClassToPicIndex[arg0];
-}
-
-u16 PlayerGenderToFrontTrainerPicId(u8 playerGender)
-{
- if (playerGender)
- return sub_806EFF0(0x3F);
- else
- return sub_806EFF0(0x3C);
-}
-
-extern const u8 gTrainerClassNames[][13];
-
-void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
-{
- u8 getFlagCaseId = (caseId == FLAG_SET_SEEN) ? FLAG_GET_SEEN : FLAG_GET_CAUGHT;
- if (!GetSetPokedexFlag(nationalNum, getFlagCaseId)) // don't set if it's already set
- {
- GetSetPokedexFlag(nationalNum, caseId);
- if (NationalPokedexNumToSpecies(nationalNum) == SPECIES_UNOWN)
- gSaveBlock2Ptr->pokedex.unownPersonality = personality;
- if (NationalPokedexNumToSpecies(nationalNum) == SPECIES_SPINDA)
- gSaveBlock2Ptr->pokedex.spindaPersonality = personality;
- }
-}
-
-const u8 *GetTrainerClassNameFromId(u16 trainerId)
-{
- if (trainerId > NO_OF_TRAINERS)
- trainerId = 0;
- return gTrainerClassNames[gTrainers[trainerId].trainerClass];
-}
-
-const u8 *GetTrainerNameFromId(u16 trainerId)
-{
- if (trainerId > NO_OF_TRAINERS)
- trainerId = 0;
- return gTrainers[trainerId].trainerName;
-}
-
-bool8 HasTwoFramesAnimation(u16 species)
-{
- return (species != SPECIES_CASTFORM
- && species != SPECIES_DEOXYS
- && species != SPECIES_SPINDA
- && species != SPECIES_UNOWN);
-}
-
-bool8 sub_806F104(void)
-{
- if (gMain.inBattle && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER))
- return TRUE;
- if (!gMain.inBattle && (InBattlePike() || InBattlePyramid()))
- return TRUE;
- return FALSE;
-}
-
-/*
-
-extern const struct SpriteTemplate gUnknown_08329D98[];
-
-struct Unknown_806F160_Struct
-{
- u8 field_0;
- u8 field_1;
- u8 field_2;
- u8 field_3;
- u8 field_4;
- u8 field_5;
- u8 field_6;
- u8 field_7;
- u8 field_8;
- u8 field_9;
- u8 field_A;
- u8 field_B;
- struct SpriteTemplate* templates;
-};
-
-void sub_806F160(struct Unknown_806F160_Struct* structPtr)
-{
- u16 i, j;
- for (i = 0; i < structPtr->field_0; i++)
- {
- structPtr->templates[i] = gUnknown_08329D98[i];
- for (j = 0; j < structPtr->field_1)
- {
- // no clue what the pointer in the struct point to :/
- }
- }
-} */
-
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index e11ba881e..1e5245d70 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -20,6 +20,12 @@
#include "task.h"
#include "text.h"
#include "window.h"
+#include "event_data.h"
+#include "gpu_regs.h"
+#include "menu.h"
+#include "international_string_util.h"
+#include "scanline_effect.h"
+#include "menu_helpers.h"
struct ContestMove
{
@@ -36,16 +42,12 @@ struct ContestEffect
u8 jam;
};
-
-
extern struct UnkSummaryStruct* gUnknown_0203CF1C;
extern struct BgTemplate gUnknown_0861CBB4;
extern u8 gUnknown_0203CF20;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern s8 gUnknown_0861CC1C[];
-extern u8 gUnknown_08329D22[];
extern u8 gUnknown_0203CF21;
-extern u16 gSpecialVar_0x8005;
extern struct UnkStruct_61CC04 gUnknown_0861CC04;
extern struct UnkStruct_61CC04 gUnknown_0861CC10;
extern struct UnkStruct_61CC04 gUnknown_0861CBEC;
@@ -67,20 +69,9 @@ extern u8 gUnknown_0861CE7B[];
extern struct WindowTemplate gUnknown_0861CCEC;
extern struct WindowTemplate gUnknown_0861CD14;
-extern void sub_806F2AC(u8 a, u8 b);
void sub_81C488C(u8 a);
-extern void do_scheduled_bg_tilemap_copies_to_vram(void);
extern u8 sub_81221EC();
extern u8 sub_81221AC();
-extern void SetVBlankHBlankCallbacksToNull();
-extern void ResetVramOamAndBgCntRegs();
-extern void clear_scheduled_bg_copies_to_vram();
-extern void ScanlineEffect_Stop();
-extern void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable);
-extern void ShowBg(u8 a);
-extern void SetGpuReg(u8 regOffset, u16 value);
-extern void schedule_bg_copy_tilemap_to_vram(u8 a);
-extern void SetBgTilemapBuffer(u8 bg, void *tilemap);
extern u8 gUnknown_08D9862C;
extern u8 gUnknown_08D98CC8;
extern u8 gUnknown_08D987FC;
@@ -95,9 +86,6 @@ extern struct CompressedSpritePalette gUnknown_0861D100;
extern struct CompressedSpritePalette gUnknown_0861D07C;
extern u8 gMoveTypes_Pal;
extern u8 gUnknown_08D97D0C;
-extern void reset_temp_tile_data_buffers();
-extern void decompress_and_copy_tile_data_to_vram(u8 a, void* tiledata, u8 b, u8 c, u8 d);
-extern u8 free_temp_tile_data_buffers_if_possible();
extern void sub_81C1E20(u8 taskId);
extern u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
extern u16 SpeciesToPokedexNum(u16 species);
@@ -160,11 +148,7 @@ extern u8 gText_ThreeDashes[];
extern u8 gUnknown_0861CE97[];
extern struct BattleMove gBattleMoves[];
-extern u32 ChangeBgX(u8 bg, u32 value, u8 op);
extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
-extern void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8* colors, s8 speed, u8 *str);
-extern s32 GetStringCenterAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
-extern s32 GetStringRightAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
extern bool8 sub_81A6BF4();
extern bool8 sub_81B9E94();
extern void UnkTextUtil_Reset();
@@ -1435,7 +1419,7 @@ void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
*ppBonusesPtr = localPpBonuses;
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
{
asm(".syntax unified\n\
@@ -1646,7 +1630,7 @@ void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
*ppBonusesPtr = localPpBonuses;
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
{
asm(".syntax unified\n\
@@ -2057,7 +2041,7 @@ void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
Free(alloced);
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
{
asm(".syntax unified\n\
@@ -2359,7 +2343,7 @@ void sub_81C2194(u16 *a, u16 b, u8 c)
}
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_81C2194(u16 *a, u16 b, u8 c)
{
asm(".syntax unified\n\
@@ -2808,7 +2792,7 @@ u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
return r4[a];
}
#else
-__attribute__((naked))
+ASM_DIRECT
u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
{
asm(".syntax unified\n\
@@ -2853,7 +2837,7 @@ void sub_81C2D68(u8 a)
}
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_81C2D68(u8 a)
{
asm(".syntax unified\n\
@@ -3110,7 +3094,7 @@ void sub_81C335C()
sub_81C25A4(r4, gText_FiveMarks, r5, 1, 0, 1);
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_81C335C()
{
asm(".syntax unified\n\
@@ -3453,7 +3437,7 @@ void sub_81C3B08(u8 a)
sub_81C25A4(sp, text, offset, (a<<4), 0, r5);
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_81C3B08(u8 a)
{
asm(".syntax unified\n\
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index fc576462b..4cb2eab49 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -13,23 +13,15 @@
#include "util.h"
#include "task.h"
#include "text.h"
+#include "battle_setup.h"
-#define BANK_RECORD_SIZE 664
+#define BATTLER_RECORD_SIZE 664
#define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \
| BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
| BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
| BATTLE_TYPE_RECORDED | BATTLE_TYPE_x4000000 | BATTLE_TYPE_SECRET_BASE \
| BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA))
-extern u32 gBattleTypeFlags;
-extern u16 gTrainerBattleOpponent_A;
-extern u16 gTrainerBattleOpponent_B;
-extern u16 gPartnerTrainerId;
-extern u8 gActiveBattler;
-extern u8 gBattlersCount;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
extern u8 gUnknown_03001278;
extern u8 gUnknown_03001279;
@@ -38,7 +30,7 @@ struct PlayerInfo
u32 trainerId;
u8 name[PLAYER_NAME_LENGTH];
u8 gender;
- u16 bank;
+ u16 battlerId;
u16 language;
};
@@ -58,7 +50,7 @@ struct RecordedBattleSave
u8 playersLanguage[MAX_BATTLERS_COUNT];
u32 rngSeed;
u32 battleFlags;
- u8 playersBank[MAX_BATTLERS_COUNT];
+ u8 playersBattlers[MAX_BATTLERS_COUNT];
u16 opponentA;
u16 opponentB;
u16 partnerId;
@@ -75,13 +67,13 @@ struct RecordedBattleSave
u16 field_50E[6];
u8 field_51A;
u8 field_51B;
- u8 battleRecord[MAX_BATTLERS_COUNT][BANK_RECORD_SIZE];
+ u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE];
u32 checksum;
};
EWRAM_DATA u32 gRecordedBattleRngSeed = 0;
EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0;
-EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BANK_RECORD_SIZE] = {0};
+EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE] = {0};
EWRAM_DATA static u16 sRecordedBytesNo[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA static u16 sUnknown_0203C79C[4] = {0};
EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0};
@@ -108,7 +100,6 @@ EWRAM_DATA static u16 sUnknown_0203CCDC[6] = {0};
EWRAM_DATA static u8 sUnknown_0203CCE8 = 0;
extern u32 sub_81A513C(void);
-extern void PlayMapChosenOrBattleBGM(bool8);
// this file's functions
static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2);
@@ -131,7 +122,7 @@ void sub_8184DA4(u8 arg0)
if (arg0 == 1)
{
- for (j = 0; j < BANK_RECORD_SIZE; j++)
+ for (j = 0; j < BATTLER_RECORD_SIZE; j++)
{
sBattleRecords[i][j] |= 0xFF;
}
@@ -168,7 +159,7 @@ void sub_8184E58(void)
{
sRecordedBattle_Players[i].trainerId = gLinkPlayers[i].trainerId;
sRecordedBattle_Players[i].gender = gLinkPlayers[i].gender;
- sRecordedBattle_Players[i].bank = gLinkPlayers[i].lp_field_18;
+ sRecordedBattle_Players[i].battlerId = gLinkPlayers[i].lp_field_18;
sRecordedBattle_Players[i].language = gLinkPlayers[i].language;
if (i < linkPlayersCount)
@@ -192,7 +183,7 @@ void sub_8184E58(void)
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
sRecordedBattle_Players[0].gender = gSaveBlock2Ptr->playerGender;
- sRecordedBattle_Players[0].bank = 0;
+ sRecordedBattle_Players[0].battlerId = 0;
sRecordedBattle_Players[0].language = gGameLanguage;
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
@@ -200,31 +191,31 @@ void sub_8184E58(void)
}
}
-void RecordedBattle_SetBattlerAction(u8 bank, u8 action)
+void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action)
{
- if (sRecordedBytesNo[bank] < BANK_RECORD_SIZE && sUnknown_0203C7AC != 2)
+ if (sRecordedBytesNo[battlerId] < BATTLER_RECORD_SIZE && sUnknown_0203C7AC != 2)
{
- sBattleRecords[bank][sRecordedBytesNo[bank]++] = action;
+ sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++] = action;
}
}
-void RecordedBattle_ClearBattlerAction(u8 bank, u8 bytesToClear)
+void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
{
s32 i;
for (i = 0; i < bytesToClear; i++)
{
- sRecordedBytesNo[bank]--;
- sBattleRecords[bank][sRecordedBytesNo[bank]] |= 0xFF;
- if (sRecordedBytesNo[bank] == 0)
+ sRecordedBytesNo[battlerId]--;
+ sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] |= 0xFF;
+ if (sRecordedBytesNo[battlerId] == 0)
break;
}
}
-u8 RecordedBattle_GetBattlerAction(u8 bank)
+u8 RecordedBattle_GetBattlerAction(u8 battlerId)
{
// trying to read past array or invalid action byte, battle is over
- if (sRecordedBytesNo[bank] >= BANK_RECORD_SIZE || sBattleRecords[bank][sRecordedBytesNo[bank]] == 0xFF)
+ if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF)
{
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
ResetPaletteFadeControl();
@@ -234,7 +225,7 @@ u8 RecordedBattle_GetBattlerAction(u8 bank)
}
else
{
- return sBattleRecords[bank][sRecordedBytesNo[bank]++];
+ return sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++];
}
}
@@ -358,7 +349,7 @@ u32 MoveRecordedBattleToSaveData(void)
}
battleSave->playersGender[i] = sRecordedBattle_Players[i].gender;
battleSave->playersLanguage[i] = sRecordedBattle_Players[i].language;
- battleSave->playersBank[i] = sRecordedBattle_Players[i].bank;
+ battleSave->playersBattlers[i] = sRecordedBattle_Players[i].battlerId;
battleSave->playersTrainerId[i] = sRecordedBattle_Players[i].trainerId;
}
@@ -375,16 +366,16 @@ u32 MoveRecordedBattleToSaveData(void)
}
else if (sRecordedBattle_BattleFlags & BATTLE_TYPE_MULTI)
{
- switch (sRecordedBattle_Players[0].bank)
+ switch (sRecordedBattle_Players[0].battlerId)
{
case 0:
case 2:
- if (!(sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
+ if (!(sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
break;
case 1:
case 3:
- if ((sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
+ if ((sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
break;
}
@@ -484,7 +475,7 @@ u32 MoveRecordedBattleToSaveData(void)
}
#else
-__attribute__((naked))
+ASM_DIRECT
u32 MoveRecordedBattleToSaveData(void)
{
asm(".syntax unified\n\
@@ -1349,7 +1340,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
}
gLinkPlayers[i].gender = src->playersGender[i];
gLinkPlayers[i].language = src->playersLanguage[i];
- gLinkPlayers[i].lp_field_18 = src->playersBank[i];
+ gLinkPlayers[i].lp_field_18 = src->playersBattlers[i];
gLinkPlayers[i].trainerId = src->playersTrainerId[i];
if (var)
@@ -1388,7 +1379,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- for (j = 0; j < BANK_RECORD_SIZE; j++)
+ for (j = 0; j < BATTLER_RECORD_SIZE; j++)
{
sBattleRecords[i][j] = src->battleRecord[i][j];
}
@@ -1456,7 +1447,7 @@ static void RecordedBattle_RestoreSavedParties(void)
}
}
-u8 GetActiveBankLinkPlayerGender(void)
+u8 GetActiveBattlerLinkPlayerGender(void)
{
s32 i;
@@ -1497,7 +1488,7 @@ u8 GetTextSpeedInRecordedBattle(void)
return sRecordedBattle_TextSpeed;
}
-void RecordedBattle_CopyBankMoves(void)
+void RecordedBattle_CopyBattlerMoves(void)
{
s32 i;
@@ -1518,32 +1509,32 @@ void RecordedBattle_CopyBankMoves(void)
void sub_818603C(u8 arg0)
{
- s32 bank, j, k;
+ s32 battlerId, j, k;
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
return;
- for (bank = 0; bank < gBattlersCount; bank++)
+ for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
{
- if (GetBattlerSide(bank) != B_SIDE_OPPONENT) // player's side only
+ if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) // player's side only
{
if (arg0 == 1)
{
for (j = 0; j < 4; j++)
{
- if (gBattleMons[bank].moves[j] != sRecordedBattle_PlayerMonMoves[bank / 2][j])
+ if (gBattleMons[battlerId].moves[j] != sRecordedBattle_PlayerMonMoves[battlerId / 2][j])
break;
}
if (j != 4) // player's mon's move has been changed
{
- RecordedBattle_SetBattlerAction(bank, ACTION_MOVE_CHANGE);
+ RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE);
for (j = 0; j < 4; j++)
{
for (k = 0; k < 4; k++)
{
- if (gBattleMons[bank].moves[j] == sRecordedBattle_PlayerMonMoves[bank / 2][k])
+ if (gBattleMons[battlerId].moves[j] == sRecordedBattle_PlayerMonMoves[battlerId / 2][k])
{
- RecordedBattle_SetBattlerAction(bank, k);
+ RecordedBattle_SetBattlerAction(battlerId, k);
break;
}
}
@@ -1552,7 +1543,7 @@ void sub_818603C(u8 arg0)
}
else
{
- if (sBattleRecords[bank][sRecordedBytesNo[bank]] == ACTION_MOVE_CHANGE)
+ if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE)
{
u8 ppBonuses[4];
u8 array1[4];
@@ -1561,58 +1552,58 @@ void sub_818603C(u8 arg0)
u8 array3[8];
u8 var;
- RecordedBattle_GetBattlerAction(bank);
+ RecordedBattle_GetBattlerAction(battlerId);
for (j = 0; j < 4; j++)
{
- ppBonuses[j] = ((gBattleMons[bank].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
+ ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
}
for (j = 0; j < 4; j++)
{
- array1[j] = RecordedBattle_GetBattlerAction(bank);
- movePp.moves[j] = gBattleMons[bank].moves[array1[j]];
- movePp.pp[j] = gBattleMons[bank].pp[array1[j]];
+ array1[j] = RecordedBattle_GetBattlerAction(battlerId);
+ movePp.moves[j] = gBattleMons[battlerId].moves[array1[j]];
+ movePp.pp[j] = gBattleMons[battlerId].pp[array1[j]];
array3[j] = ppBonuses[array1[j]];
- array2[j] = (gDisableStructs[bank].unk18_b & gBitTable[j]) >> j;
+ array2[j] = (gDisableStructs[battlerId].unk18_b & gBitTable[j]) >> j;
}
for (j = 0; j < 4; j++)
{
- gBattleMons[bank].moves[j] = movePp.moves[j];
- gBattleMons[bank].pp[j] = movePp.pp[j];
+ gBattleMons[battlerId].moves[j] = movePp.moves[j];
+ gBattleMons[battlerId].pp[j] = movePp.pp[j];
}
- gBattleMons[bank].ppBonuses = 0;
- gDisableStructs[bank].unk18_b = 0;
+ gBattleMons[battlerId].ppBonuses = 0;
+ gDisableStructs[battlerId].unk18_b = 0;
for (j = 0; j < 4; j++)
{
- gBattleMons[bank].ppBonuses |= (array3[j]) << (j << 1);
- gDisableStructs[bank].unk18_b |= (array2[j]) << (j);
+ gBattleMons[battlerId].ppBonuses |= (array3[j]) << (j << 1);
+ gDisableStructs[battlerId].unk18_b |= (array2[j]) << (j);
}
- if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED))
+ if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
{
for (j = 0; j < 4; j++)
{
- ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
+ ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
}
for (j = 0; j < 4; j++)
{
- movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_MOVE1 + array1[j], NULL);
- movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP1 + array1[j], NULL);
+ movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + array1[j], NULL);
+ movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + array1[j], NULL);
array3[j] = ppBonuses[array1[j]];
}
for (j = 0; j < 4; j++)
{
- SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_MOVE1 + j, &movePp.moves[j]);
- SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP1 + j, &movePp.pp[j]);
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + j, &movePp.moves[j]);
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + j, &movePp.pp[j]);
}
var = 0;
for (j = 0; j < 4; j++)
{
var |= (array3[j]) << (j << 1);
}
- SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP_BONUSES, &var);
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &var);
}
- gChosenMoveByBattler[bank] = gBattleMons[bank].moves[*(gBattleStruct->chosenMovePositions + bank)];
+ gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)];
}
}
}
diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c
index 099edce49..9950f6691 100644
--- a/src/reset_save_heap.c
+++ b/src/reset_save_heap.c
@@ -15,7 +15,7 @@ void sub_81700F8(void)
imeBackup = REG_IME;
REG_IME = 0;
RegisterRamReset(0x00000001);
- ClearGpuRegBits(REG_OFFSET_DISPCNT, 0x80);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
REG_IME = imeBackup;
gMain.inBattle = FALSE;
SetSaveBlocksPointers(sub_815355C());
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index 925b65de5..cedd3aee4 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -12,6 +12,7 @@
#include "sprite.h"
#include "constants/species.h"
#include "battle_interface.h"
+#include "battle_anim.h"
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
@@ -21,28 +22,11 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
-extern u8 gReservedSpritePaletteCount;
-extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
-extern u8 gBankInMenu;
-extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
-extern u8 gBattlersCount;
-extern u32 gBattleTypeFlags;
-extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
-extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
-extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
-extern void ScanlineEffect_Clear(void);
-extern void sub_8035658(void);
-extern bool8 IsDoubleBattle(void);
-extern u8 GetSubstituteSpriteDefault_Y(u8 bank);
-extern u8 GetBattlerSpriteDefault_Y(u8 bank);
-extern u8 sub_80A82E4(u8 bank);
extern void sub_806A068(u16 species, u8 bankIdentity);
extern void sub_806A12C(u16 backPicId, u8 bankIdentity);
-extern u8 GetBattlerSpriteCoord(u8 bank, u8 caseId);
// this file's functions
static void CB2_ReshowBattleScreenAfterMenu(void);
@@ -175,12 +159,12 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
SetBattlerShadowSpriteCallback(opponentBank, species);
}
- ActionSelectionCreateCursorAt(gActionSelectionCursor[gBankInMenu], 0);
+ ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0);
- if (gLinkVSyncDisabled != 0 && gReceivedRemoteLinkPlayers != 0)
+ if (gWirelessCommType != 0 && gReceivedRemoteLinkPlayers != 0)
{
sub_800E0E8();
- sub_800DFB4(0, 0);
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
}
break;
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
new file mode 100644
index 000000000..9076b611a
--- /dev/null
+++ b/src/rom_8011DC0.c
@@ -0,0 +1,18 @@
+
+// Includes
+#include "global.h"
+
+// Static type declarations
+
+// Static RAM declarations
+IWRAM_DATA u32 gUnknown_03000DA0;
+IWRAM_DATA u32 gUnknown_03000DA4;
+IWRAM_DATA void *gUnknown_03000DA8;
+IWRAM_DATA void *gUnknown_03000DAC;
+IWRAM_DATA bool32 gUnknown_03000DB0;
+
+// Static ROM declarations
+
+// .rodata
+
+// .text
diff --git a/src/safari_zone.c b/src/safari_zone.c
index 12da73090..dd3cf3733 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -108,7 +108,7 @@ void SafariZoneRetirePrompt(void)
void CB2_EndSafariBattle(void)
{
sSafariZoneFleedMons += gBattleResults.field_1F;
- if (gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
+ if (gBattleOutcome == B_OUTCOME_CAUGHT)
sSafariZoneCaughtMons++;
if (gNumSafariBalls != 0)
{
@@ -121,7 +121,7 @@ void CB2_EndSafariBattle(void)
gFieldCallback = sub_80AF6F0;
SetMainCallback2(c2_load_new_map);
}
- else if (gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
+ else if (gBattleOutcome == B_OUTCOME_CAUGHT)
{
ScriptContext1_SetupScript(EventScript_2A4B9B);
ScriptContext1_Stop();
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 467b8f320..deb170c68 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -31,7 +31,6 @@
#include "mystery_event_script.h"
#include "palette.h"
#include "party_menu.h"
-#include "pokemon_3.h"
#include "pokemon_storage_system.h"
#include "random.h"
#include "overworld.h"
@@ -63,13 +62,6 @@ static EWRAM_DATA u16 sMovingNpcMapBank = 0;
static EWRAM_DATA u16 sMovingNpcMapId = 0;
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
-extern u16 gSpecialVar_0x8000;
-extern u16 gSpecialVar_0x8001;
-extern u16 gSpecialVar_0x8002;
-extern u16 gSpecialVar_0x8004;
-
-extern u16 gSpecialVar_Result;
-
extern u16 gSpecialVar_ContestCategory;
IWRAM_DATA u8 gUnknown_03000F30;
@@ -1536,7 +1528,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
CopyWindowToVram(gUnknown_03000F30, 3);
return FALSE;
}*/
-__attribute__((naked))
+ASM_DIRECT
bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
{
asm("push {r4-r7,lr}\n\
diff --git a/src/secret_base.c b/src/secret_base.c
index 96fe6edd2..e3c06a75d 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -32,6 +32,7 @@
#include "international_string_util.h"
#include "event_data.h"
#include "battle.h"
+#include "battle_setup.h"
#include "rom6.h"
#include "decoration.h"
#include "link.h"
diff --git a/src/text.c b/src/text.c
index 6a83d5d15..a2495d068 100644
--- a/src/text.c
+++ b/src/text.c
@@ -379,7 +379,7 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
*(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
}
#else
-__attribute__((naked))
+ASM_DIRECT
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
{
asm("push {r4-r7,lr}\n\
@@ -875,7 +875,7 @@ void DecompressGlyphTile(const u16 *src, u16 *dest)
*(dest) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] >> 8]];
}
#else
-__attribute__((naked))
+ASM_DIRECT
void DecompressGlyphTile(const u16 *src, u16 *dest)
{
asm("push {r4-r7,lr}\n\
@@ -1056,7 +1056,7 @@ u8 GetLastTextColor(u8 colorType)
}
}
-__attribute__((naked))
+ASM_DIRECT
void CopyGlyphToWindow(struct TextPrinter *x)
{
asm("push {r4-r7,lr}\n\
@@ -2285,7 +2285,6 @@ u16 RenderText(struct TextPrinter *textPrinter)
else
textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80];
}
-
return 0;
case 1: // _08005C78
if (TextPrinterWait(textPrinter))
diff --git a/src/tv.c b/src/tv.c
index 0fb2997ad..fbe39fde0 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1208,7 +1208,7 @@ void PutPokemonTodayFailedOnTheAir(void)
{
ct = 0xFF;
}
- if (ct > 2 && (gBattleOutcome == B_OUTCOME_POKE_FLED || gBattleOutcome == B_OUTCOME_WON))
+ if (ct > 2 && (gBattleOutcome == B_OUTCOME_MON_FLED || gBattleOutcome == B_OUTCOME_WON))
{
sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_FAILED, FALSE) != TRUE)
@@ -2154,7 +2154,7 @@ void sub_80EDE98(TVShow *show)
}
}
#else
-__attribute__((naked))
+ASM_DIRECT
void sub_80EDE98(TVShow *show)
{
asm_unified("\tpush {r4-r7,lr}\n"
@@ -2406,7 +2406,7 @@ void sub_80EE184(void)
case B_OUTCOME_DREW:
show->breakingNews.kind = TVSHOW_OFF_AIR;
return;
- case B_OUTCOME_CAUGHT_POKE:
+ case B_OUTCOME_CAUGHT:
show->breakingNews.outcome = 0;
break;
case B_OUTCOME_WON:
@@ -2417,8 +2417,8 @@ void sub_80EE184(void)
case B_OUTCOME_NO_SAFARI_BALLS:
show->breakingNews.outcome = 2;
break;
- case B_OUTCOME_POKE_FLED:
- case B_OUTCOME_POKE_TELEPORTED:
+ case B_OUTCOME_MON_FLED:
+ case B_OUTCOME_MON_TELEPORTED:
show->breakingNews.outcome = 3;
break;
}
@@ -4110,7 +4110,7 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
}
}
#else
-__attribute__((naked)) void sub_80F0708(void)
+ASM_DIRECT void sub_80F0708(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
diff --git a/src/util.c b/src/util.c
index 58088c3ee..4f9241b21 100644
--- a/src/util.c
+++ b/src/util.c
@@ -230,7 +230,7 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
}
#else
-__attribute__((naked)) void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
+ASM_DIRECT void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
{
asm("\n\
.syntax unified\n\
diff --git a/src/window.c b/src/window.c
index 9a892d079..589557d43 100644
--- a/src/window.c
+++ b/src/window.c
@@ -2,8 +2,11 @@
#include "window.h"
#include "malloc.h"
-extern u8 gUnknown_03002F60;
-extern void* gUnknown_03002F70[];
+u32 filler_03002F58;
+u32 filler_03002F5C;
+u8 gUnknown_03002F60;
+u32 filler_03002F64;
+void *gUnknown_03002F70[4];
extern u32 gUnneededFireRedVariable;
#define WINDOWS_MAX 32
diff --git a/sym_bss.txt b/sym_bss.txt
index f930a5b98..24e6afa3b 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -5,7 +5,9 @@
.include "src/bg.o"
.include "src/text.o"
.include "src/sprite.o"
- .include "src/link.o"
+ .include "src/link.o"
+ .include "src/link_rfu.o"
+ .include "src/rom_8011DC0.o"
.include "src/rtc.o"
.include "src/main_menu.o"
.include "src/rom_8034C54.o"
@@ -55,7 +57,7 @@ gUnknown_030011F7: @ 30011F7
.space 0x1
.include "src/starter_choose.o"
-
+
.align 0x2
gUnknown_030011FC: @ 30011FC
diff --git a/sym_common.txt b/sym_common.txt
index ec6c95b20..9ec7196c2 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -1,234 +1,13 @@
.space 0x8
-
-gKeyRepeatStartDelay: @ 30022B0
- .space 0x4
-
-gUnknown_030022B4: @ 30022B4
- .space 0xC
-
-gMain: @ 30022C0
- .space 0x2C
-
-gUnknown_030022EC: @ 30022EC
- .space 0xC
-
-gUnknown_030022F8: @ 30022F8
- .space 0x200
-
-gUnknown_030024F8: @ 30024F8
- .space 0x200
-
-gUnknown_030026F8: @ 30026F8
- .space 0x4
-
-gKeyRepeatContinueDelay: @ 30026FC
- .space 0x4
-
-gSoftResetDisabled: @ 3002700
- .space 0x10
-
-gIntrTable: @ 3002710
- .space 0x38
-
-gUnknown_03002748: @ 3002748
- .space 0x8
-
-IntrMain_Buffer: @ 3002750
- .space 0x800
-
-gPcmDmaCounter: @ 3002F50
- .space 0x4
-
+ .include "main.o"
.include "bg.o"
-
- .align 4
-gUnknown_03002F60: @ 3002F60
- .space 0x10
-
-gUnknown_03002F70: @ 3002F70
- .space 0x10
-
+ .include "window.o"
.include "text.o"
.include "sprite.o"
-
-gUnknown_03003020: @ 3003020
- .space 0xC
-
-gUnknown_0300302C: @ 300302C
- .space 0x4
-
-gUnknown_03003030: @ 3003030
- .space 0x3C
-
-gUnknown_0300306C: @ 300306C
- .space 0x4
-
-gUnknown_03003070: @ 3003070
- .space 0x8
-
-gUnknown_03003078: @ 3003078
- .space 0x4
-
-gUnknown_0300307C: @ 300307C
- .space 0x8
-
-gUnknown_03003084: @ 3003084
- .space 0xC
-
-gRecvCmds: @ 3003090
- .space 0x2
-
-gUnknown_03003092: @ 3003092
- .space 0x2
-
-gUnknown_03003094: @ 3003094
- .space 0x4C
-
-gLinkStatus: @ 30030E0
- .space 0x4
-
-gUnknown_030030E4: @ 30030E4
- .space 0x4
-
-gUnknown_030030E8: @ 30030E8
- .space 0x4
-
-gUnknown_030030EC: @ 30030EC
- .space 0x4
-
-gUnknown_030030F0: @ 30030F0
- .space 0x4
-
-gUnknown_030030F4: @ 30030F4
- .space 0x4
-
-gUnknown_030030F8: @ 30030F8
- .space 0x4
-
-gLinkVSyncDisabled: @ 30030FC
- .space 0x4
-
-gUnknown_03003100: @ 3003100
- .space 0x10
-
-gSendCmd: @ 3003110
- .space 0x10
-
-gUnknown_03003120: @ 3003120
- .space 0x4
-
-gReceivedRemoteLinkPlayers: @ 3003124
- .space 0xC
-
-gUnknown_03003130: @ 3003130
- .space 0x10
-
-gUnknown_03003140: @ 3003140
- .space 0x4
-
-gUnknown_03003144: @ 3003144
- .space 0x4
-
-gUnknown_03003148: @ 3003148
- .space 0x8
-
-gUnknown_03003150: @ 3003150
- .space 0x10
-
-gUnknown_03003160: @ 3003160
- .space 0x10
-
-gUnknown_03003170: @ 3003170
- .space 0x4
-
-gUnknown_03003174: @ 3003174
- .space 0xFBC
-
-gUnknown_03004130: @ 3004130
- .space 0x4
-
-gUnknown_03004134: @ 3004134
- .space 0xC
-
-gUnknown_03004140: @ 3004140
- .space 0x10
-
-gUnknown_03004150: @ 3004150
- .space 0x40
-
-gUnknown_03004190: @ 3004190
- .space 0xE70
-
-gUnknown_03005000: @ 3005000
- .space 0x14
-
-gUnknown_03005014: @ 3005014
- .space 0x58
-
-gUnknown_0300506C: @ 300506C
- .space 0x2
-
-gUnknown_0300506E: @ 300506E
- .space 0x76
-
-gUnknown_030050E4: @ 30050E4
- .space 0xE
-
-gUnknown_030050F2: @ 30050F2
- .space 0x18
-
-gUnknown_0300510A: @ 300510A
- .space 0x1A
-
-gUnknown_03005124: @ 3005124
- .space 0x8C4
-
-gUnknown_030059E8: @ 30059E8
- .space 0x29F
-
-gUnknown_03005C87: @ 3005C87
- .space 0x47
-
-gUnknown_03005CCE: @ 3005CCE
- .space 0x3
-
-gUnknown_03005CD1: @ 3005CD1
- .space 0x4
-
-gUnknown_03005CD5: @ 3005CD5
- .space 0x9
-
-gUnknown_03005CDE: @ 3005CDE
- .space 0x1A
-
+ .include "link.o"
+ .include "link_rfu.o"
.include "rtc.o"
-
-gPreBattleCallback1: @ 3005D00
- .space 0x4
-
-gBattleMainFunc: @ 3005D04
- .space 0xC
-
-gBattleResults: @ 3005D10
- .space 0x44
-
-gLeveledUpInBattle: @ 3005D54
- .space 0xC
-
-gBattlerControllerFuncs: @ 3005D60
- .space 0x10
-
-gHealthboxSpriteIds: @ 3005D70
- .space 0x4
-
-gMultiUsePlayerCursor: @ 3005D74
- .space 0x4
-
-gNumberOfMovesToChoose: @ 3005D78
- .space 0x4
-
-gUnknown_03005D7C: @ 3005D7C
- .space 0x4
+ .include "battle_main.o"
gRngValue: @ 3005D80
.space 0x4
@@ -264,7 +43,8 @@ gUnknown_03005DA8: @ 3005DA8
.space 0x4
gFieldCallback: @ 3005DAC
- .space 0x4
+
+ .include "item_menu.o"
gUnknown_03005DB0: @ 3005DB0
.space 0x4
diff --git a/sym_ewram.txt b/sym_ewram.txt
index d94cde788..57c2d8c1b 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1,8 +1,5 @@
.include "src/decompress.o"
-
-gTrainerId: @ 2020000
- .space 0x4
-
+ .include "src/main.o"
.include "src/window.o"
.include "src/text.o"
.include "src/sprite.o"
@@ -21,66 +18,8 @@ gStringVar4: @ 2021FC4
.space 0x3E8
.include "src/string_util.o"
-
-gUnknown_020223BC: @ 20223BC
- .space 0x1
-
-gUnknown_020223BD: @ 20223BD
- .space 0x3
-
-gUnknown_020223C0: @ 20223C0
- .space 0x4
-
-gBlockRecvBuffer: @ 20223C4
- .space 0x500
-
-gBlockSendBuffer: @ 20228C4 gBlockSendBuffer
- .space 0x100
-
-gUnknown_020229C4: @ 20229C4
- .space 0x2
-
-gLinkType: @ 20229C6
- .space 0x2
-
-gUnknown_020229C8: @ 20229C8
- .space 0x4
-
-gUnknown_020229CC: @ 20229CC
- .space 0x1C
-
-gLinkPlayers: @ 20229E8
- .space 0x24
-
-gUnknown_02022A0C: @ 2022A0C
- .space 0x68
-
-gUnknown_02022A74: @ 2022A74
- .space 0x8C
-
-gUnknown_02022B00: @ 2022B00
- .space 0x8
-
-gUnknown_02022B08: @ 2022B08
- .space 0x4
-
-gUnknown_02022B0C: @ 2022B0C
- .space 0x4
-
-gUnknown_02022B10: @ 2022B10
- .space 0x4
-
-gUnknown_02022B14: @ 2022B14
- .space 0xE
-
-gUnknown_02022B22: @ 2022B22
- .space 0xA
-
-gUnknown_02022B2C: @ 2022B2C
- .space 0x18
-
-gUnknown_02022B44: @ 2022B44
- .space 0xDC
+ .include "src/link.o"
+ .include "src/link_rfu.o"
gUnknown_02022C20: @ 2022C20
.space 0xC
@@ -178,6 +117,7 @@ gUnknown_02022CFC: @ 2022CFC
gUnknown_02022D00: @ 2022D00
.space 0x4
+@ src/main_menu.c
gUnknown_02022D04: @ 2022D04
.include "src/main_menu.o"
@@ -193,8 +133,7 @@ gUnknown_02022D0A: @ 2022D0A
gUnknown_02022D0C: @ 2022D0C
.space 0x4
-gBattleBuffersTransferData: @ 2022D10
- .space 0x100
+ .include "src/battle_controllers.o"
gUnknown_02022E10: @ 2022E10
.space 0x4
@@ -236,297 +175,9 @@ gBattle_WIN1V: @ 2022E2A
.space 0x2
.include "src/battle_message.o"
+ .include "src/battle_main.o"
-gUnknown_02022F88: @ 2022F88
- .space 0x64
-
-gBattleTypeFlags: @ 2022FEC
- .space 0x4
-
-gBattleTerrain: @ 2022FF0
- .space 0x4
-
-gUnknown_02022FF4: @ 2022FF4
- .space 0x4
-
-gUnknown_02022FF8: @ 2022FF8
- .space 0x60
-
-gUnknown_02023058: @ 2023058
- .space 0x4
-
-gUnknown_0202305C: @ 202305C
- .space 0x4
-
-gUnknown_02023060: @ 2023060
- .space 0x4
-
-gBattleBufferA: @ 2023064
- .space 0x800
-
-gBattleBufferB: @ 2023864
- .space 0x800
-
-gActiveBattler: @ 2024064
- .space 0x4
-
-gBattleControllerExecFlags: @ 2024068
- .space 0x4
-
-gBattlersCount: @ 202406C
- .space 0x2
-
-gBattlerPartyIndexes: @ 202406E
- .space 0x8
-
-gBattlerPositions: @ 2024076
- .space 0x4
-
-gActionsByTurnOrder: @ 202407A
- .space 0x4
-
-gBattleTurnOrder: @ 202407E
- .space 0x4
-
-gCurrentTurnActionNumber: @ 2024082
- .space 0x1
-
-gCurrentActionFuncId: @ 2024083
- .space 0x1
-
-gBattleMons: @ 2024084
- .space 0x160
-
-gBattlerSpriteIds: @ 20241E4
- .space 0x4
-
-gCurrMovePos: @ 20241E8
- .space 0x1
-
-gUnknown_020241E9: @ 20241E9
- .space 0x1
-
-gCurrentMove: @ 20241EA
- .space 0x2
-
-gChosenMove: @ 20241EC
- .space 0x2
-
-gRandomMove: @ 20241EE
- .space 0x2
-
-gBattleMoveDamage: @ 20241F0
- .space 0x4
-
-gHpDealt: @ 20241F4
- .space 0x4
-
-gTakenDmg: @ 20241F8
- .space 0x10
-
-gLastUsedItem: @ 2024208
- .space 0x2
-
-gLastUsedAbility: @ 202420A
- .space 0x1
-
-gBattlerAttacker: @ 202420B
- .space 0x1
-
-gBattlerTarget: @ 202420C
- .space 0x1
-
-gBank1: @ 202420D
- .space 0x1
-
-gEffectBank: @ 202420E
- .space 0x1
-
-gStringBattler: @ 202420F
- .space 0x1
-
-gAbsentBattlerFlags: @ 2024210
- .space 0x1
-
-gCritMultiplier: @ 2024211
- .space 0x1
-
-gMultiHitCounter: @ 2024212
- .space 0x2
-
-gBattlescriptCurrInstr: @ 2024214
- .space 0x8
-
-gChosenActionByBattler: @ 202421C
- .space 0x4
-
-gSelectionBattleScripts: @ 2024220
- .space 0x10
-
-gPalaceSelectionBattleScripts: @ 2024230
- .space 0x10
-
-gLastPrintedMoves: @ 2024240
- .space 0x8
-
-gLastMoves: @ 2024248
- .space 0x8
-
-gLastLandedMoves: @ 2024250
- .space 0x8
-
-gLastHitByType: @ 2024258
- .space 0x8
-
-gLastResultingMoves: @ 2024260
- .space 0x8
-
-gLockedMoves: @ 2024268
- .space 0x8
-
-gLastHitBy: @ 2024270
- .space 0x4
-
-gChosenMoveByBattler: @ 2024274
- .space 0x8
-
-gMoveResultFlags: @ 202427C
- .space 0x4
-
-gHitMarker: @ 2024280
- .space 0x4
-
-gUnknown_02024284: @ 2024284
- .space 0x4
-
-gTakenDmgBanks: @ 2024288
- .space 0x4
-
-gUnknown_0202428C: @ 202428C
- .space 0x2
-
-gSideStatuses: @ 202428E
- .space 0x6
-
-gSideTimers: @ 2024294
- .space 0x18
-
-gStatuses3: @ 20242AC
- .space 0x10
-
-gDisableStructs: @ 20242BC
- .space 0x70
-
-gPauseCounterBattle: @ 202432C
- .space 0x2
-
-gPaydayMoney: @ 202432E
- .space 0x2
-
-gRandomTurnNumber: @ 2024330
- .space 0x2
-
-gBattleCommunication: @ 2024332
- .space 0x1
-
-gUnknown_02024333: @ 2024333
- .space 0x7
-
-gBattleOutcome: @ 202433A
- .space 0x2
-
-gProtectStructs: @ 202433C
- .space 0x40
-
-gSpecialStatuses: @ 202437C
- .space 0x50
-
-gBattleWeather: @ 20243CC
- .space 0x4
-
-gWishFutureKnock: @ 20243D0
- .space 0x2C
-
-gUnknown_020243FC: @ 20243FC
- .space 0x2
-
-gSentPokesToOpponent: @ 20243FE
- .space 0x2
-
-gDynamicBasePower: @ 2024400
- .space 0x2
-
-gExpShareExp: @ 2024402
- .space 0x2
-
-gEnigmaBerries: @ 2024404
- .space 0x70
-
-gBattleScripting: @ 2024474
- .space 0x28
-
-gBattleStruct: @ 202449C
- .space 0x4
-
-gLinkBattleSendBuffer: @ 20244A0
- .space 0x4
-
-gLinkBattleRecvBuffer: @ 20244A4
- .space 0x4
-
-gBattleResources: @ 20244A8
- .space 0x4
-
-gActionSelectionCursor: @ 20244AC
- .space 0x4
-
-gMoveSelectionCursor: @ 20244B0
- .space 0x4
-
-gUnknown_020244B4: @ 20244B4
- .space 0x4
-
-gBankInMenu: @ 20244B8
- .space 0x1
-
-gDoingBattleAnim: @ 20244B9
- .space 0x3
-
-gTransformedPersonalities: @ 20244BC
- .space 0x10
-
-gPlayerDpadHoldFrames: @ 20244CC
- .space 0x4
-
-gBattleSpritesDataPtr: @ 20244D0
- .space 0x4
-
-gMonSpritesGfxPtr: @ 20244D4
- .space 0x4
-
-gUnknown_020244D8: @ 20244D8
- .space 0x4
-
-gUnknown_020244DC: @ 20244DC
- .space 0x4
-
-gBattleMovePower: @ 20244E0
- .space 0x2
-
-gMoveToLearn: @ 20244E2
- .space 0x2
-
-gBattleMonForms: @ 20244E4
- .space 0x4
-
- .include "src/pokemon_1.o"
-
-gUnknown_0202499C: @ 202499C
- .space 0x18
-
-gUnknown_020249B4: @ 20249B4
- .space 0x8
-
+ .include "src/pokemon.o"
.include "src/random.o"
.include "src/daycare.o"
.include "src/load_save.o"
@@ -1305,37 +956,9 @@ gUnknown_0203CE50: @ 203CE50
.space 0x4
gUnknown_0203CE54: @ 203CE54
- .space 0x4
-
-gUnknown_0203CE58: @ 203CE58
- .space 0x5
-
-gUnknown_0203CE5D: @ 203CE5D
- .space 0x1
-
-gUnknown_0203CE5E: @ 203CE5E
- .space 0x2
-
-gUnknown_0203CE60: @ 203CE60
- .space 0xA
-
-gUnknown_0203CE6A: @ 203CE6A
- .space 0x6
-
-gUnknown_0203CE70: @ 203CE70
- .space 0x4
-
-gUnknown_0203CE74: @ 203CE74
- .space 0x4
-
-gUnknown_0203CE78: @ 203CE78
- .space 0x4
-
-gSpecialVar_ItemId: @ 203CE7C
- .space 0x4
-
-gUnknown_0203CE80: @ 203CE80
- .space 0x4
+ .align 2
+
+ .include "src/item_menu.o"
gUnknown_0203CE84: @ 203CE84
.space 0x8